Commit 9831fa76 authored by Oleg Korshul's avatar Oleg Korshul Committed by Alexander.Trofimov

plugins new scheme

parent f5840a48
...@@ -113,6 +113,8 @@ function baseEditorsApi(config, editorId) { ...@@ -113,6 +113,8 @@ function baseEditorsApi(config, editorId) {
this.fCurCallback = null; this.fCurCallback = null;
this.pluginsManager = null;
return this; return this;
} }
baseEditorsApi.prototype._init = function() { baseEditorsApi.prototype._init = function() {
...@@ -645,6 +647,23 @@ baseEditorsApi.prototype.asc_getUrlType = function(url) { ...@@ -645,6 +647,23 @@ baseEditorsApi.prototype.asc_getUrlType = function(url) {
this.sendEvent('asc_onInitStandartTextures', arr); this.sendEvent('asc_onInitStandartTextures', arr);
}; };
// plugins
baseEditorsApi.prototype.asc_pluginsRegister = function(basePath, plugins)
{
if (null != this.pluginsManager)
this.pluginsManager.register(basePath, plugins);
};
baseEditorsApi.prototype.asc_pluginRun = function(guid, data)
{
if (null != this.pluginsManager)
this.pluginsManager.run(guid, data);
};
baseEditorsApi.prototype.asc_pluginResize = function(guid, data, width, height)
{
if (null != this.pluginsManager)
this.pluginsManager.runResize(guid, data, width, height);
};
//----------------------------------------------------------export---------------------------------------------------- //----------------------------------------------------------export----------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {}; window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon'].baseEditorsApi = baseEditorsApi; window['AscCommon'].baseEditorsApi = baseEditorsApi;
......
...@@ -1450,4 +1450,60 @@ window['Asc']['c_oAscMaxCellOrCommentLength'] = window['Asc'].c_oAscMaxCellOrCom ...@@ -1450,4 +1450,60 @@ window['Asc']['c_oAscMaxCellOrCommentLength'] = window['Asc'].c_oAscMaxCellOrCom
window["AscCommon"].contentchanges_Remove = contentchanges_Remove; window["AscCommon"].contentchanges_Remove = contentchanges_Remove;
window["AscCommon"].offlineMode = offlineMode; window["AscCommon"].offlineMode = offlineMode;
// ----------------------------- plugins ------------------------------- //
var EPluginDataType =
{
none : 0,
text : 1,
ole : 2
};
window["Asc"]["EPluginDataType"] = EPluginDataType;
prot = EPluginDataType;
prot['none'] = prot.none;
prot['text'] = prot.text;
prot['ole'] = prot.ole;
function CPlugin()
{
this.name = "";
this.guid = "";
this.url = "";
this.icons = ["1x", "2x"];
this.isVisual = false;
this.initDataType = EPluginDataType.none;
this.initData = "";
this.isUpdateOleOnResize = false;
this.buttons = [{"text":"Ok","primary":true},{"text":"Cancel","primary":false}];
}
CPlugin.prototype["get_Name"] = function() { return this.name; };
CPlugin.prototype["set_Name"] = function(value) { this.name = value; } ;
CPlugin.prototype["get_Guid"] = function() { return this.guid; };
CPlugin.prototype["set_Guid"] = function(value) { this.guid = value; };
CPlugin.prototype["get_Url"] = function() { return this.url; };
CPlugin.prototype["set_Url"] = function(value) { this.url = value; };
CPlugin.prototype["get_Icons"] = function() { return this.icons; };
CPlugin.prototype["set_Icons"] = function(value) { this.icons = value; };
CPlugin.prototype["get_Visual"] = function() { return this.isVisual; };
CPlugin.prototype["set_Visual"] = function(value) { this.isVisual = value; };
CPlugin.prototype["get_InitDataType"] = function() { return this.icons; };
CPlugin.prototype["set_InitDataType"] = function(value) { this.icons = value; };
CPlugin.prototype["get_InitData"] = function() { return this.icons; };
CPlugin.prototype["set_InitData"] = function(value) { this.icons = value; };
CPlugin.prototype["get_UpdateOleOnResize"] = function() { return this.isUpdateOleOnResize; };
CPlugin.prototype["set_UpdateOleOnResize"] = function(value) { this.isUpdateOleOnResize = value; };
CPlugin.prototype["get_Buttons"] = function() { return this.buttons; };
CPlugin.prototype["set_Buttons"] = function(value) { this.buttons = value; };
window["Asc"]["CPlugin"] = CPlugin;
// --------------------------------------------------------------------- //
})(window); })(window);
(function(window, undefined){ (function(window, undefined){
var EPluginDataType = function CPluginsManager(api)
{
none : 0,
text : 1,
ole : 2
};
function CPlugin()
{
this.name = "";
this.guid = "";
this.url = "";
this.icons = ["1x", "2x"];
this.isVisual = false;
this.initDataType = EPluginDataType.none;
this.initData = "";
this.isUpdateOleOnResize = false;
this.buttons = [{text:"Ok",primary:true},{text:"Cancel",primary:false}];
}
function CPluginsManager()
{ {
this.plugins = []; this.plugins = [];
this.current = null; this.current = null;
this.api = null;
this.path = ""; this.path = "";
this.api = null;
this.iframe = null;
} }
CPluginsManager.prototype = CPluginsManager.prototype =
{ {
register : function(plugin) register : function(basePath, plugins)
{ {
this.plugins.push(plugin); this.path = basePath;
for (var i = 0; i < plugins.length; i++)
this.plugins.push(plugins[i]);
}, },
run : function(guid, data) run : function(guid, data)
{ {
...@@ -59,6 +34,9 @@ ...@@ -59,6 +34,9 @@
this.show(); this.show();
}, },
runResize : function(guid, data, width, height)
{
},
close : function() close : function()
{ {
var _div = document.getElementById(this.current.isVisual ? "id_plugin_modal" : "plugin_iframe"); var _div = document.getElementById(this.current.isVisual ? "id_plugin_modal" : "plugin_iframe");
...@@ -86,13 +64,13 @@ ...@@ -86,13 +64,13 @@
for (var i = 0; i < this.current.buttons.length; i++) for (var i = 0; i < this.current.buttons.length; i++)
{ {
_div += "<button id='plugin" + (i + 1) + "' class='btn normal dlg-btn"; _div += "<button id='plugin" + (i + 1) + "' class='btn normal dlg-btn";
if (this.current.buttons[i].primary) if (this.current.buttons[i]["primary"])
_div += " primary custom' style='margin-right: 10px;' "; _div += " primary custom' style='margin-right: 10px;' ";
else else
_div += "' "; _div += "' ";
_div += "onclick='window.g_asc_plugins.buttonClick(" + i + ")'>" _div += "onclick='window.g_asc_plugins.buttonClick(" + i + ")'>"
_div += this.current.buttons[i].text; _div += this.current.buttons[i]["text"];
_div += "</button>"; _div += "</button>";
} }
...@@ -137,7 +115,7 @@ ...@@ -137,7 +115,7 @@
var _data = ""; var _data = "";
switch (this.current.initDataType) switch (this.current.initDataType)
{ {
case EPluginDataType.text: case Asc.EPluginDataType.text:
{ {
var text_data = { var text_data = {
data : "", data : "",
...@@ -148,7 +126,7 @@ ...@@ -148,7 +126,7 @@
_data = text_data.data; _data = text_data.data;
break; break;
} }
case EPluginDataType.ole: case Asc.EPluginDataType.ole:
{ {
_data = ""; // TODO: _data = ""; // TODO:
break; break;
...@@ -160,79 +138,12 @@ ...@@ -160,79 +138,12 @@
{ {
_iframe.contentWindow.postMessage(this.current.guid + ";init;" + _data, "*"); _iframe.contentWindow.postMessage(this.current.guid + ";init;" + _data, "*");
} }
},
test : function()
{
this.api = window.editor;
this.path = "../../../../sdkjs-plugins/";
var plugin1 = new CPlugin();
plugin1.name = "chess (fen)";
plugin1.guid = "{FFE1F462-1EA2-4391-990D-4CC84940B754}";
plugin1.url = "chess/index.html";
plugin1.icons = ["chess/icon.png", "chess/icon@2x.png"];
plugin1.isVisual = true;
plugin1.initDataType = EPluginDataType.ole;
plugin1.isUpdateOleOnResize = true;
plugin1.buttons = [{text:"Ok",primary:true},{text:"Cancel",primary:false}];
var plugin2 = new CPlugin();
plugin2.name = "glavred";
plugin2.guid = "{B631E142-E40B-4B4C-90B9-2D00222A286E}";
plugin2.url = "glavred/index.html";
plugin2.icons = ["glavred/icon.png", "glavred/icon@2x.png"];
plugin2.isVisual = true;
plugin2.initDataType = EPluginDataType.text;
plugin2.isUpdateOleOnResize = false;
plugin2.buttons = [{text:"Ok",primary:true}];
var plugin3 = new CPlugin();
plugin3.name = "bold";
plugin3.guid = "{14E46CC2-5E56-429C-9D55-1032B596D928}";
plugin3.url = "bold/index.html";
plugin3.icons = ["bold/icon.png", "bold/icon@2x.png"];
plugin3.isVisual = false;
plugin3.initDataType = EPluginDataType.none;
plugin3.isUpdateOleOnResize = false;
plugin3.buttons = [];
this.register(plugin1);
this.register(plugin2);
this.register(plugin3);
// добавляем кнопки (тест)
var _elem = document.getElementById("view-left-menu").childNodes[1];
for (var i = 0; i < 3; i++)
{
var _guid = "";
switch (i)
{
case 0:
_guid = plugin1.guid;
break;
case 1:
_guid = plugin2.guid;
break;
case 2:
_guid = plugin3.guid;
break;
default:
break;
}
var _button = "<button class='btn btn-category' content-target='' data-toggle='tooltip' data-original-title='' title='' " +
"onclick='window.g_asc_plugins.run(\"" + _guid + "\")'><span>" + (i + 1) + "</span></button>";
_elem.innerHTML += _button;
}
} }
}; };
function onMessage(event) function onMessage(event)
{ {
if (!window.g_asc_plugins.current) if (!window.g_asc_plugins || !window.g_asc_plugins.current)
return; return;
if (typeof(event.data) == "string") if (typeof(event.data) == "string")
...@@ -284,8 +195,80 @@ ...@@ -284,8 +195,80 @@
window.attachEvent("onmessage", onMessage); window.attachEvent("onmessage", onMessage);
} }
window.asc_EPluginDataType = EPluginDataType; window.Asc.createPluginsManager = function(api)
window.asc_CPlugin = CPlugin; {
window.g_asc_plugins = new CPluginsManager(); if (window.g_asc_plugins)
return window.g_asc_plugins;
window.g_asc_plugins = new CPluginsManager(api);
window["g_asc_plugins"] = window.g_asc_plugins;
window.g_asc_plugins.api = api;
window.g_asc_plugins["api"] = window.g_asc_plugins.api;
return window.g_asc_plugins;
};
})(window, undefined); })(window, undefined);
// потом удалить!!!
function TEST_PLUGINS()
{
var plugin1 = new Asc.CPlugin();
plugin1.name = "chess (fen)";
plugin1.guid = "{FFE1F462-1EA2-4391-990D-4CC84940B754}";
plugin1.url = "chess/index.html";
plugin1.icons = ["chess/icon.png", "chess/icon@2x.png"];
plugin1.isVisual = true;
plugin1.initDataType = Asc.EPluginDataType.ole;
plugin1.isUpdateOleOnResize = true;
plugin1.buttons = [{"text":"Ok","primary":true},{"text":"Cancel","primary":false}];
var plugin2 = new Asc.CPlugin();
plugin2.name = "glavred";
plugin2.guid = "{B631E142-E40B-4B4C-90B9-2D00222A286E}";
plugin2.url = "glavred/index.html";
plugin2.icons = ["glavred/icon.png", "glavred/icon@2x.png"];
plugin2.isVisual = true;
plugin2.initDataType = Asc.EPluginDataType.text;
plugin2.isUpdateOleOnResize = false;
plugin2.buttons = [{"text":"Ok","primary":true}];
var plugin3 = new Asc.CPlugin();
plugin3.name = "bold";
plugin3.guid = "{14E46CC2-5E56-429C-9D55-1032B596D928}";
plugin3.url = "bold/index.html";
plugin3.icons = ["bold/icon.png", "bold/icon@2x.png"];
plugin3.isVisual = false;
plugin3.initDataType = Asc.EPluginDataType.none;
plugin3.isUpdateOleOnResize = false;
plugin3.buttons = [];
window.g_asc_plugins.api.asc_pluginsRegister("../../../../sdkjs-plugins/", [plugin1, plugin2, plugin3]);
// добавляем кнопки (тест)
var _elem = document.getElementById("view-left-menu").childNodes[1];
for (var i = 0; i < 3; i++)
{
var _guid = "";
switch (i)
{
case 0:
_guid = plugin1.guid;
break;
case 1:
_guid = plugin2.guid;
break;
case 2:
_guid = plugin3.guid;
break;
default:
break;
}
var _button = "<button class='btn btn-category' content-target='' data-toggle='tooltip' data-original-title='' title='' " +
"onclick='window.g_asc_plugins.run(\"" + _guid + "\")'><span>" + (i + 1) + "</span></button>";
_elem.innerHTML += _button;
}
}
...@@ -6692,6 +6692,7 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function() ...@@ -6692,6 +6692,7 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function()
if (false === this.isSaveFonts_Images) if (false === this.isSaveFonts_Images)
{ {
this.bInit_word_control = true; this.bInit_word_control = true;
this.pluginsManager = Asc.createPluginsManager(this);
this.asc_fireCallback("asc_onDocumentContentReady"); this.asc_fireCallback("asc_onDocumentContentReady");
} }
......
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