179 lines
5.7 KiB
JavaScript
179 lines
5.7 KiB
JavaScript
Editors=[]
|
|
Editor = {
|
|
index:0,
|
|
create: function (options) {
|
|
// Direct WEBUI API
|
|
options=options||{}
|
|
options.collapsed=options.collapsed||false;
|
|
options.extension=options.extension||'lua';
|
|
Object.assign(options,{
|
|
file:'untitled',
|
|
})
|
|
function Label() {
|
|
return options.label?options.label:options.file+'.'+options.extension+' #'+id
|
|
}
|
|
function updateMenu() {
|
|
|
|
}
|
|
var id = Editor.index++,
|
|
label = Label();
|
|
var editor = {
|
|
id:'editor'+id,
|
|
index:id,
|
|
}
|
|
function collapse(mini) {
|
|
var container = $('[view_id=SourceTextWin'+id+']'),
|
|
head = container.find('.webix_win_head');
|
|
if (mini && options.collapsed) {
|
|
return {width:head.width(),height:head.height()}
|
|
}
|
|
options.collapsed=!options.collapsed;
|
|
if (options.collapsed) {
|
|
options._height=container.height();
|
|
container.height(head.height());
|
|
} else container.height(options._height);
|
|
return options.collapsed?{width:head.width(),height:head.height()}:
|
|
{width:container.width(),height:container.height()};
|
|
}
|
|
function createButtons (buts) {
|
|
var buttons=[];
|
|
for(var label in buts) {
|
|
// id:icon:tooltip
|
|
var tokens = label.split(':'),
|
|
icon = tokens[1]||'?',
|
|
tooltip = tokens[2]||'?',
|
|
handler = buts[label];
|
|
buttons.push(
|
|
{ view:"button", type:"icon", icon:icon, tooltip:tooltip, width:30, click:handler}
|
|
)
|
|
}
|
|
return buttons;
|
|
}
|
|
var toolbar = [
|
|
{ view:"button", type:"icon", icon:"folder-open", tooltip:'Open File', width:30, click:function () {
|
|
loadFile(function (text,file) {
|
|
if (text) {
|
|
UI('SourceText'+id).setValue(text)
|
|
if (file) {
|
|
options.file=file
|
|
if (editor.handlers['file']) editor.handlers['file'](file);
|
|
else UI('SourceTextWinLabel'+id).setValue(Label());
|
|
}
|
|
}
|
|
});
|
|
}},
|
|
{ view:"button", type:"icon", icon:"save", tooltip:'Save File', width:30, click:function () {
|
|
var code = UI('SourceText'+id).getValue();
|
|
saveFile(code,options.file,'text/plain',function (file) {
|
|
if (file) {
|
|
options.file=file
|
|
// UI('SourceTextWinLabel'+id).setValue(Label())
|
|
// updateMenu()
|
|
if (editor.handlers['file']) editor.handlers['file'](file);
|
|
else UI('SourceTextWinLabel'+id).setValue(Label());
|
|
}
|
|
});
|
|
}},
|
|
{ view:"button", type:"icon", icon:"file", tooltip:'New File', width:30, click:function () {
|
|
}},
|
|
{ view:"button", type:"icon", icon:"user", tooltip:'Share Code', width:30, click:function () {
|
|
Clip.share(id);
|
|
}}].concat(options.buttons?createButtons(options.buttons):[]).concat([
|
|
{ view:"label", label:label, id:'SourceTextWinLabel'+id, align:'right'},
|
|
{ view:"button", type:"icon", icon:"caret-down", tooltip:'Collapse Editor', width:30, click:function () {
|
|
collapse()
|
|
}},
|
|
{ view:"button", type:"icon", icon:"windows", tooltip:'Hide Editor', width:30, click:function () {
|
|
if (options.hide!==false) window.hide();
|
|
}}
|
|
]);
|
|
if (options.close!==false) toolbar.push({ view:"button", type:"icon", icon:"close", tooltip:'Close Editor', width:30, click:function () {
|
|
Editor.exit(id);
|
|
window.close();
|
|
if (editor.handlers.close) editor.handlers.close();
|
|
}});
|
|
var window = webix.ui({
|
|
id:'SourceTextWin'+id,
|
|
view:"window",
|
|
height:350,
|
|
width:600,
|
|
left:options.x||250, top:options.y||50,
|
|
move:true,
|
|
resize: true,
|
|
toFront:true,
|
|
css:'green_toolbar',
|
|
head:{
|
|
view:"toolbar",
|
|
cols:toolbar
|
|
},
|
|
body:{
|
|
id : 'SourceText'+id,
|
|
view: "codemirror-editor",
|
|
style : "color:black",
|
|
mode:options.mode||'plain',
|
|
attributes : { spellcheck:false, smartIndent:false, indentUnit:2 },
|
|
}
|
|
});
|
|
editor.window=window;
|
|
editor.collapse=collapse;
|
|
window.show();
|
|
editor.editor={
|
|
get : function () { return UI('SourceText'+id).getValue(); },
|
|
set : function (text) { return UI('SourceText'+id).setValue(text); },
|
|
}
|
|
if (options.buttons) {
|
|
// find run button, publish event handler
|
|
for(var p in options.buttons) {
|
|
if (p.indexOf('run')!=-1) {
|
|
editor.editor.run=options.buttons[p];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (options.text) editor.editor.set(options.text);
|
|
if (options.collapsed) { collapse(false) };
|
|
editor.close = function () {
|
|
Editor.exit(id);
|
|
window.close();
|
|
}
|
|
editor.handlers=[];
|
|
editor.on = function (ev,handler) {
|
|
editor.handlers[ev]=handler;
|
|
}
|
|
editor.options=options;
|
|
editor.setLabel = function (label) {
|
|
UI('SourceTextWinLabel'+id).setValue(label)
|
|
}
|
|
return editor
|
|
},
|
|
default : function (options) {
|
|
options=options||{}
|
|
var editor = Editor.editor({
|
|
label : options.label||'Text Editor',
|
|
mode : options.mode||'javascript',
|
|
buttons : options.buttons,
|
|
x : options.x,
|
|
y : options.y,
|
|
text : options.text,
|
|
collapsed : options.collapsed,
|
|
hide : options.hide,
|
|
close : options.close,
|
|
_height: options._height,
|
|
});
|
|
if (options.actions) {
|
|
options.actions.widget(editor);
|
|
editor.on('close',options.actions.close);
|
|
}
|
|
return editor;
|
|
},
|
|
editor : function (options) {
|
|
return Editor.create(options);
|
|
},
|
|
exit : function (id) {
|
|
id=String(id).replace('editor','');
|
|
if (!Editors[id]) return;
|
|
delete Editors[id];
|
|
},
|
|
}
|
|
UI.Editor=Editor;
|