marc-leopold/server/plugins/rainlab/builder/assets/js/builder.table.processor.loc...

126 lines
3.9 KiB
JavaScript

/*
* Localiztion cell processor for the table control.
*/
+function ($) { "use strict";
// NAMESPACE CHECK
// ============================
if ($.oc.table === undefined)
throw new Error("The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.");
if ($.oc.table.processor === undefined)
throw new Error("The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.");
// CLASS DEFINITION
// ============================
var Base = $.oc.table.processor.string,
BaseProto = Base.prototype
var LocalizationProcessor = function(tableObj, columnName, columnConfiguration) {
//
// State properties
//
this.localizationInput = null
this.popupDisplayed = false
//
// Parent constructor
//
Base.call(this, tableObj, columnName, columnConfiguration)
}
LocalizationProcessor.prototype = Object.create(BaseProto)
LocalizationProcessor.prototype.constructor = LocalizationProcessor
LocalizationProcessor.prototype.dispose = function() {
this.removeLocalizationInput()
BaseProto.dispose.call(this)
}
/*
* Forces the processor to hide the editor when the user navigates
* away from the cell. Processors can update the sell value in this method.
* Processors must clear the reference to the active cell in this method.
*/
LocalizationProcessor.prototype.onUnfocus = function() {
if (!this.activeCell || this.popupDisplayed)
return
this.removeLocalizationInput()
BaseProto.onUnfocus.call(this)
}
LocalizationProcessor.prototype.onBeforePopupShow = function() {
this.popupDisplayed = true
}
LocalizationProcessor.prototype.onAfterPopupHide = function() {
this.popupDisplayed = false
}
/*
* Renders the cell in the normal (no edit) mode
*/
LocalizationProcessor.prototype.renderCell = function(value, cellContentContainer) {
BaseProto.renderCell.call(this, value, cellContentContainer)
}
LocalizationProcessor.prototype.buildEditor = function(cellElement, cellContentContainer, isClick) {
BaseProto.buildEditor.call(this, cellElement, cellContentContainer, isClick)
$.oc.foundation.element.addClass(cellContentContainer, 'autocomplete-container')
this.buildLocalizationEditor()
}
LocalizationProcessor.prototype.buildLocalizationEditor = function() {
var input = this.getInput()
this.localizationInput = new $.oc.builder.localizationInput(input, $(input), {
plugin: this.getPluginCode(input),
beforePopupShowCallback: $.proxy(this.onBeforePopupShow, this),
afterPopupHideCallback: $.proxy(this.onAfterPopupHide, this),
autocompleteOptions: {
menu: '<ul class="autocomplete dropdown-menu table-widget-autocomplete localization"></ul>',
bodyContainer: true
}
})
}
LocalizationProcessor.prototype.getInput = function() {
if (!this.activeCell) {
return null
}
return this.activeCell.querySelector('.string-input')
}
LocalizationProcessor.prototype.getPluginCode = function(input) {
var $form = $(input).closest('form'),
$input = $form.find('input[name=plugin_code]')
if (!$input.length) {
throw new Error('The input "plugin_code" should be defined in the form in order to use the localization table processor.')
}
return $input.val()
}
LocalizationProcessor.prototype.removeLocalizationInput = function() {
if (!this.localizationInput) {
return
}
this.localizationInput.dispose()
this.localizationInput = null
}
$.oc.table.processor.builderLocalization = LocalizationProcessor;
}(window.jQuery);