n_oct/plugins/rainlab/builder/assets/js/builder.index.entity.code.js

125 lines
3.4 KiB
JavaScript

/*
* Builder Index controller Code entity controller
*/
+function ($) { "use strict";
if ($.oc.builder === undefined) {
$.oc.builder = {};
}
if ($.oc.builder.entityControllers === undefined) {
$.oc.builder.entityControllers = {};
}
var Base = $.oc.builder.entityControllers.base,
BaseProto = Base.prototype;
var Code = function(indexController) {
Base.call(this, 'code', indexController);
}
Code.prototype = Object.create(BaseProto);
Code.prototype.constructor = Code;
// PUBLIC METHODS
// ============================
Code.prototype.registerHandlers = function() {
}
Code.prototype.cmdCreateCode = function(ev) {
this.indexController.openOrLoadMasterTab($(ev.target), 'onCodeOpen', this.newTabId());
}
Code.prototype.cmdOpenCode = function(ev) {
var path = $(ev.currentTarget).data('path'),
pluginCode = $(ev.currentTarget).data('pluginCode');
var result = this.indexController.openOrLoadMasterTab($(ev.target), 'onCodeOpen', this.makeTabId(pluginCode+'-'+path), {
fileName: path
});
if (result !== false) {
result.done(this.proxy(this.updateFormEditorMode, this));
}
}
Code.prototype.cmdSaveCode = function(ev) {
var $target = $(ev.currentTarget),
$form = $target.closest('form'),
$inspectorContainer = $form.find('.inspector-container')
if (!$.oc.inspector.manager.applyValuesFromContainer($inspectorContainer)) {
return
}
$target.request('onCodeSave').done(
this.proxy(this.saveCodeDone)
)
}
Code.prototype.saveCodeDone = function(data) {
if (data['builderResponseData'] === undefined) {
throw new Error('Invalid response data');
}
var $masterTabPane = this.getMasterTabsActivePane();
this.getIndexController().unchangeTab($masterTabPane);
this.updateFormEditorMode();
}
Code.prototype.getCodeList = function() {
return $('#layout-side-panel form[data-content-id=code] .control-codelist')
}
Code.prototype.updateFormEditorMode = function() {
var $masterTabPane = this.getMasterTabsActivePane();
var modes = {
css: "css",
htm: "html",
html: "html",
js: "javascript",
json: "json",
less: "less",
md: "markdown",
sass: "sass",
scss: "scss",
txt: "plain_text",
yaml: "yaml",
xml: "xml",
php: "php"
};
var fileName = $('input[name=fileName]', $masterTabPane).val(),
parts = fileName.split('.'),
extension = 'txt',
mode = 'plain_text',
editor = $('[data-control=codeeditor]', $masterTabPane);
if (parts.length >= 2) {
extension = parts.pop().toLowerCase();
}
if (modes[extension] !== undefined) {
mode = modes[extension];
}
var setEditorMode = function() {
window.setTimeout(function() {
editor.data('oc.codeEditor').editor.getSession().setMode({path: 'ace/mode/'+mode})
}, 200);
};
setEditorMode();
}
// REGISTRATION
// ============================
$.oc.builder.entityControllers.code = Code;
}(window.jQuery);