marc-leopold/server/plugins/rainlab/builder/assets/js/builder.index.entity.contro...

109 lines
3.4 KiB
JavaScript

/*
* Builder Index controller Controller 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 Controller = function(indexController) {
Base.call(this, 'controller', indexController)
}
Controller.prototype = Object.create(BaseProto)
Controller.prototype.constructor = Controller
// PUBLIC METHODS
// ============================
Controller.prototype.cmdCreateController = function(ev) {
var $form = $(ev.currentTarget),
self = this,
pluginCode = $form.data('pluginCode'),
behaviorsSelected = $form.find('input[name="behaviors[]"]:checked').length,
promise = null
// If behaviors were selected, open a new tab after the
// controller is saved. Otherwise just update the controller
// list.
if (behaviorsSelected) {
promise = this.indexController.openOrLoadMasterTab(
$form,
'onControllerCreate',
this.makeTabId(pluginCode+'-new-controller'),
{}
)
}
else {
promise = $form.request('onControllerCreate')
}
promise.done(function(data){
$form.trigger('close.oc.popup')
self.updateDataRegistry(data)
}).always($.oc.builder.indexController.hideStripeIndicatorProxy)
}
Controller.prototype.cmdOpenController = function(ev) {
var controller = $(ev.currentTarget).data('id'),
pluginCode = $(ev.currentTarget).data('pluginCode')
this.indexController.openOrLoadMasterTab($(ev.target), 'onControllerOpen', this.makeTabId(pluginCode+'-'+controller), {
controller: controller
})
}
Controller.prototype.cmdSaveController = function(ev) {
var $target = $(ev.currentTarget),
$form = $target.closest('form'),
$inspectorContainer = $form.find('.inspector-container')
if (!$.oc.inspector.manager.applyValuesFromContainer($inspectorContainer)) {
return
}
$target.request('onControllerSave').done(
this.proxy(this.saveControllerDone)
)
}
// EVENT HANDLERS
// ============================
// INTERNAL METHODS
// ============================
Controller.prototype.saveControllerDone = function(data) {
if (data['builderResponseData'] === undefined) {
throw new Error('Invalid response data')
}
var $masterTabPane = this.getMasterTabsActivePane()
this.getIndexController().unchangeTab($masterTabPane)
}
Controller.prototype.updateDataRegistry = function(data) {
if (data.builderResponseData.registryData !== undefined) {
var registryData = data.builderResponseData.registryData
$.oc.builder.dataRegistry.set(registryData.pluginCode, 'controller-urls', null, registryData.urls)
}
}
Controller.prototype.getControllerList = function() {
return $('#layout-side-panel form[data-content-id=controller] [data-control=filelist]')
}
// REGISTRATION
// ============================
$.oc.builder.entityControllers.controller = Controller;
}(window.jQuery);