Commit 41d3be0a authored by Alexander.Trofimov's avatar Alexander.Trofimov

delete spellcheck desctop -> override functions

add init spellcheck from server and asc_onSpellCheckInit event with array languages from server
parent a3832b6d
......@@ -444,8 +444,7 @@
/**
* Event об отсоединении от сервера
* @param {jQuery} e event об отсоединении с причиной
* @param {Bool} isDisconnectAtAll окончательно ли отсоединяемся(true) или будем пробовать сделать reconnect(false) + сами отключились
* @param {Bool} isCloseCoAuthoring
* @param {Asc.c_oAscError.ID} errorCode
*/
CDocsCoApi.prototype.callback_OnDisconnect = function(e, errorCode) {
if (this.onDisconnect) {
......
......@@ -32,229 +32,246 @@
"use strict";
(function(window) {
'use strict';
// Класс надстройка, для online и offline работы
var CSpellCheckApi = function(options) {
this._SpellCheckApi = new SpellCheckApi();
this._onlineWork = false;
if (options) {
this.onDisconnect = options.onDisconnect;
this.onSpellCheck = options.onSpellCheck;
}
};
CSpellCheckApi.prototype.init = function(docid) {
if (this._SpellCheckApi && this._SpellCheckApi.isRightURL()) {
var t = this;
this._SpellCheckApi.onDisconnect = function(e, isDisconnectAtAll, isCloseCoAuthoring) {
t.callback_OnDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);
};
this._SpellCheckApi.onSpellCheck = function(e) {
t.callback_OnSpellCheck(e);
};
this._SpellCheckApi.init(docid);
this._onlineWork = true;
}
};
CSpellCheckApi.prototype.set_url = function(url) {
if (this._SpellCheckApi) {
this._SpellCheckApi.set_url(url);
}
};
CSpellCheckApi.prototype.get_state = function() {
if (this._SpellCheckApi) {
return this._SpellCheckApi.get_state();
}
return 0;
};
CSpellCheckApi.prototype.disconnect = function() {
if (this._SpellCheckApi && this._onlineWork) {
this._SpellCheckApi.disconnect();
}
};
CSpellCheckApi.prototype.spellCheck = function(spellCheckData) {
if (this._SpellCheckApi && this._onlineWork) {
this._SpellCheckApi.spellCheck(spellCheckData);
}
};
CSpellCheckApi.prototype.callback_OnSpellCheck = function(e) {
if (this.onSpellCheck) {
return this.onSpellCheck(e);
}
};
/**
* Event об отсоединении от сервера
* @param {jQuery} e event об отсоединении с причиной
* @param {Bool} isDisconnectAtAll окончательно ли отсоединяемся(true) или будем пробовать сделать reconnect(false) + сами отключились
*/
CSpellCheckApi.prototype.callback_OnDisconnect = function(e, isDisconnectAtAll, isCloseCoAuthoring) {
if (this.onDisconnect) {
return this.onDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);
}
};
/** States
* -1 - reconnect state
* 0 - not initialized
* 1 - opened
* 3 - closed
*/
var SpellCheckApi = function(options) {
if (options) {
this.onDisconnect = options.onDisconnect;
this.onConnect = options.onConnect;
this.onSpellCheck = options.onSpellCheck;
}
this._state = 0;
// Мы сами отключились от совместного редактирования
this.isCloseCoAuthoring = false;
// Массив данных, который стоит отправить как только подключимся
this.dataNeedSend = [];
this._url = "";
};
SpellCheckApi.prototype.isRightURL = function() {
return ("" != this._url);
};
SpellCheckApi.prototype.set_url = function(url) {
this._url = url;
};
SpellCheckApi.prototype.get_state = function() {
return this._state;
};
SpellCheckApi.prototype.spellCheck = function(spellCheckData) {
this._send({"type": "spellCheck", "spellCheckData": spellCheckData});
};
SpellCheckApi.prototype.disconnect = function() {
// Отключаемся сами
this.isCloseCoAuthoring = true;
return this.sockjs.close();
};
SpellCheckApi.prototype._send = function(data) {
if (data !== null && typeof data === "object") {
if (this._state > 0) {
this.sockjs.send(JSON.stringify(data));
} else {
this.dataNeedSend.push(data);
}
}
};
SpellCheckApi.prototype._sendAfterConnect = function() {
var data;
while (this._state > 0 && undefined !== (data = this.dataNeedSend.shift()))
this._send(data);
};
SpellCheckApi.prototype._onSpellCheck = function(data) {
if (undefined !== data["spellCheckData"] && this.onSpellCheck) {
this.onSpellCheck(data["spellCheckData"]);
}
};
var reconnectTimeout, attemptCount = 0;
function initSocksJs(url, docsCoApi) {
//ограничиваем transports WebSocket и XHR / JSONP polling, как и engine.io https://github.com/socketio/engine.io
//при переборе streaming transports у клиента с wirewall происходило зацикливание(не повторялось в версии sock.js 0.3.4)
var sockjs = new (_getSockJs())(url, null, {transports: ['websocket', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling']});
sockjs.onopen = function() {
if (reconnectTimeout) {
clearTimeout(reconnectTimeout);
attemptCount = 0;
}
docsCoApi._state = 1; // Opened state
if (docsCoApi.onConnect) {
docsCoApi.onConnect();
}
// Отправляем все данные, которые пришли до соединения с сервером
docsCoApi._sendAfterConnect();
};
sockjs.onmessage = function(e) {
//TODO: add checks and error handling
//Get data type
var dataObject = JSON.parse(e.data);
var type = dataObject.type;
switch (type) {
case 'spellCheck' :
docsCoApi._onSpellCheck(dataObject);
break;
}
};
sockjs.onclose = function(evt) {
docsCoApi._state = -1; // Reconnect state
var bIsDisconnectAtAll = attemptCount >= 20 || docsCoApi.isCloseCoAuthoring;
if (bIsDisconnectAtAll) {
docsCoApi._state = 3;
} // Closed state
if (docsCoApi.onDisconnect) {
docsCoApi.onDisconnect(evt.reason, bIsDisconnectAtAll, docsCoApi.isCloseCoAuthoring);
}
if (docsCoApi.isCloseCoAuthoring) {
return;
}
//Try reconect
if (attemptCount < 20) {
tryReconnect();
}
};
function tryReconnect() {
if (reconnectTimeout) {
clearTimeout(reconnectTimeout);
}
attemptCount++;
reconnectTimeout = setTimeout(function() {
delete docsCoApi.sockjs;
docsCoApi.sockjs = initSocksJs(url, docsCoApi);
}, 500 * attemptCount);
}
return sockjs;
}
function _getSockJs() {
return window['SockJS'] ? window['SockJS'] : require('sockjs');
}
SpellCheckApi.prototype.init = function(docid) {
this._docid = docid;
var re = /^https?:\/\//;
var spellcheckUrl = this._url + '/doc/' + docid + '/c'
if(re.test(this._url))
this.sockjs_url = spellcheckUrl;
else
this.sockjs_url = AscCommon.getBaseUrl() + "../../../.." + spellcheckUrl;
//Begin send auth
this.sockjs = initSocksJs(this.sockjs_url, this);
};
//-----------------------------------------------------------export---------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {};
window["AscCommon"].CSpellCheckApi = CSpellCheckApi;
(function (window) {
'use strict';
// Класс надстройка, для online и offline работы
var CSpellCheckApi = function () {
this._SpellCheckApi = new SpellCheckApi();
this._onlineWork = false;
this.onDisconnect = null;
this.onSpellCheck = null;
this.onSpellCheck = null;
};
CSpellCheckApi.prototype.init = function (docid) {
if (this._SpellCheckApi && this._SpellCheckApi.isRightURL()) {
var t = this;
this._SpellCheckApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {
t.callback_OnDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);
};
this._SpellCheckApi.onSpellCheck = function (e) {
t.callback_OnSpellCheck(e);
};
this._SpellCheckApi.onInit = function (e) {
t.callback_OnInit(e);
};
this._SpellCheckApi.init(docid);
this._onlineWork = true;
}
};
CSpellCheckApi.prototype.set_url = function (url) {
if (this._SpellCheckApi) {
this._SpellCheckApi.set_url(url);
}
};
CSpellCheckApi.prototype.get_state = function () {
if (this._SpellCheckApi) {
return this._SpellCheckApi.get_state();
}
return 0;
};
CSpellCheckApi.prototype.disconnect = function () {
if (this._SpellCheckApi && this._onlineWork) {
this._SpellCheckApi.disconnect();
}
};
CSpellCheckApi.prototype.spellCheck = function (spellCheckData) {
if (this._SpellCheckApi && this._onlineWork) {
this._SpellCheckApi.spellCheck(spellCheckData);
}
};
CSpellCheckApi.prototype.callback_OnSpellCheck = function (e) {
if (this.onSpellCheck) {
return this.onSpellCheck(e);
}
};
CSpellCheckApi.prototype.callback_OnInit = function (e) {
if (this.onInit) {
return this.onInit(e);
}
};
/**
* Event об отсоединении от сервера
* @param {jQuery} e event об отсоединении с причиной
* @param {Bool} isDisconnectAtAll окончательно ли отсоединяемся(true) или будем пробовать сделать reconnect(false) + сами отключились
*/
CSpellCheckApi.prototype.callback_OnDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {
if (this.onDisconnect) {
return this.onDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);
}
};
/** States
* -1 - reconnect state
* 0 - not initialized
* 1 - opened
* 3 - closed
*/
var SpellCheckApi = function () {
this.onDisconnect = null;
this.onConnect = null;
this.onSpellCheck = null;
this.onInit = null;
this._state = 0;
// Мы сами отключились от совместного редактирования
this.isCloseCoAuthoring = false;
// Массив данных, который стоит отправить как только подключимся
this.dataNeedSend = [];
this._url = "";
};
SpellCheckApi.prototype.isRightURL = function () {
return ("" !== this._url);
};
SpellCheckApi.prototype.set_url = function (url) {
this._url = url;
};
SpellCheckApi.prototype.get_state = function () {
return this._state;
};
SpellCheckApi.prototype.spellCheck = function (spellCheckData) {
this._send({"type": "spellCheck", "spellCheckData": spellCheckData});
};
SpellCheckApi.prototype.disconnect = function () {
// Отключаемся сами
this.isCloseCoAuthoring = true;
return this.sockjs.close();
};
SpellCheckApi.prototype._send = function (data) {
if (data !== null && typeof data === "object") {
if (this._state > 0) {
this.sockjs.send(JSON.stringify(data));
} else {
this.dataNeedSend.push(data);
}
}
};
SpellCheckApi.prototype._sendAfterConnect = function () {
var data;
while (this._state > 0 && undefined !== (data = this.dataNeedSend.shift()))
this._send(data);
};
SpellCheckApi.prototype._onSpellCheck = function (data) {
if (data["spellCheckData"] && this.onSpellCheck) {
this.onSpellCheck(data["spellCheckData"]);
}
};
SpellCheckApi.prototype._onInit = function (data) {
if (data["languages"] && this.onInit) {
this.onInit(data["languages"]);
}
};
var reconnectTimeout, attemptCount = 0;
function initSocksJs(url, docsCoApi) {
//ограничиваем transports WebSocket и XHR / JSONP polling, как и engine.io https://github.com/socketio/engine.io
//при переборе streaming transports у клиента с wirewall происходило зацикливание(не повторялось в версии sock.js 0.3.4)
var sockjs = new (_getSockJs())(url, null,
{transports: ['websocket', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling']});
sockjs.onopen = function () {
if (reconnectTimeout) {
clearTimeout(reconnectTimeout);
attemptCount = 0;
}
docsCoApi._state = 1; // Opened state
if (docsCoApi.onConnect) {
docsCoApi.onConnect();
}
// Отправляем все данные, которые пришли до соединения с сервером
docsCoApi._sendAfterConnect();
};
sockjs.onmessage = function (e) {
//TODO: add checks and error handling
//Get data type
var dataObject = JSON.parse(e.data);
var type = dataObject.type;
switch (type) {
case 'spellCheck' :
docsCoApi._onSpellCheck(dataObject);
break;
case 'init':
docsCoApi._onInit(dataObject);
break;
}
};
sockjs.onclose = function (evt) {
docsCoApi._state = -1; // Reconnect state
var bIsDisconnectAtAll = attemptCount >= 20 || docsCoApi.isCloseCoAuthoring;
if (bIsDisconnectAtAll) {
docsCoApi._state = 3;
} // Closed state
if (docsCoApi.onDisconnect) {
docsCoApi.onDisconnect(evt.reason, bIsDisconnectAtAll, docsCoApi.isCloseCoAuthoring);
}
if (docsCoApi.isCloseCoAuthoring) {
return;
}
//Try reconect
if (attemptCount < 20) {
tryReconnect();
}
};
function tryReconnect() {
if (reconnectTimeout) {
clearTimeout(reconnectTimeout);
}
attemptCount++;
reconnectTimeout = setTimeout(function () {
delete docsCoApi.sockjs;
docsCoApi.sockjs = initSocksJs(url, docsCoApi);
}, 500 * attemptCount);
}
return sockjs;
}
function _getSockJs() {
return window['SockJS'] ? window['SockJS'] : require('sockjs');
}
SpellCheckApi.prototype.init = function (docid) {
this._docid = docid;
var re = /^https?:\/\//;
var spellcheckUrl = this._url + '/doc/' + docid + '/c';
if (re.test(this._url)) {
this.sockjs_url = spellcheckUrl;
} else {
this.sockjs_url = AscCommon.getBaseUrl() + "../../../.." + spellcheckUrl;
}
//Begin send auth
this.sockjs = initSocksJs(this.sockjs_url, this);
};
//-----------------------------------------------------------export---------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {};
window["AscCommon"].CSpellCheckApi = CSpellCheckApi;
})(window);
......@@ -446,7 +446,7 @@
this.tmpZoomType = null;
// Spell Checking
this.SpellCheckApi = (window["AscDesktopEditor"] === undefined) ? new AscCommon.CSpellCheckApi() : new CSpellCheckApi_desktop();
this.SpellCheckApi = new AscCommon.CSpellCheckApi();
this.isSpellCheckEnable = true;
// это чтобы сразу показать ридер, без возможности вернуться в редактор/вьюер
......@@ -1228,18 +1228,24 @@ background-repeat: no-repeat;\
}
var t = this;
if (!window["AscDesktopEditor"])
{
if (this.SpellCheckUrl && this.isSpellCheckEnable)
this.SpellCheckApi.set_url(this.SpellCheckUrl);
this.SpellCheckApi.onSpellCheck = function(e)
{
var incomeObject = JSON.parse(e);
t.SpellCheck_CallBack(incomeObject);
if (window["AscDesktopEditor"]) {
this.SpellCheckApi.spellCheck = function (spellData) {
window["AscDesktopEditor"]["SpellCheck"](spellData);
};
this.SpellCheckApi.disconnect = function () {
};
} else {
if (this.SpellCheckUrl && this.isSpellCheckEnable) {
this.SpellCheckApi.set_url(this.SpellCheckUrl);
}
}
this.SpellCheckApi.onInit = function (e) {
t.sendEvent('asc_onSpellCheckInit', e);
};
this.SpellCheckApi.onSpellCheck = function (e) {
t.SpellCheck_CallBack(e);
};
this.SpellCheckApi.init(this.documentId);
};
//----------------------------------------------------------------------------------------------------------------------
......@@ -7552,36 +7558,6 @@ background-repeat: no-repeat;\
}
};
// desktop editor spellcheck
function CSpellCheckApi_desktop()
{
this.docId = undefined;
this.init = function(docid)
{
this.docId = docid;
};
this.set_url = function(url)
{
};
this.spellCheck = function(spellData)
{
window["AscDesktopEditor"]["SpellCheck"](spellData);
};
this.onSpellCheck = function(spellData)
{
editor.SpellCheck_CallBack(spellData);
};
this.disconnect = function()
{
// none
};
}
window["AscDesktopEditor_Save"] = function()
{
return editor.asc_Save(false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment