114 lines
3.6 KiB
JavaScript
114 lines
3.6 KiB
JavaScript
|
/*
|
||
|
* Inspector localization editor class.
|
||
|
*/
|
||
|
+function ($) { "use strict";
|
||
|
|
||
|
var Base = $.oc.inspector.propertyEditors.string,
|
||
|
BaseProto = Base.prototype
|
||
|
|
||
|
var LocalizationEditor = function(inspector, propertyDefinition, containerCell, group) {
|
||
|
this.localizationInput = null
|
||
|
|
||
|
Base.call(this, inspector, propertyDefinition, containerCell, group)
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype = Object.create(BaseProto)
|
||
|
LocalizationEditor.prototype.constructor = Base
|
||
|
|
||
|
LocalizationEditor.prototype.dispose = function() {
|
||
|
this.removeLocalizationInput()
|
||
|
|
||
|
BaseProto.dispose.call(this)
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.build = function() {
|
||
|
var container = document.createElement('div'),
|
||
|
editor = document.createElement('input'),
|
||
|
placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '',
|
||
|
value = this.inspector.getPropertyValue(this.propertyDefinition.property)
|
||
|
|
||
|
editor.setAttribute('type', 'text')
|
||
|
editor.setAttribute('class', 'string-editor')
|
||
|
editor.setAttribute('placeholder', placeholder)
|
||
|
|
||
|
container.setAttribute('class', 'autocomplete-container')
|
||
|
|
||
|
if (value === undefined) {
|
||
|
value = this.propertyDefinition.default
|
||
|
}
|
||
|
|
||
|
if (value === undefined) {
|
||
|
value = ''
|
||
|
}
|
||
|
|
||
|
editor.value = value
|
||
|
|
||
|
$.oc.foundation.element.addClass(this.containerCell, 'text autocomplete')
|
||
|
|
||
|
container.appendChild(editor)
|
||
|
this.containerCell.appendChild(container)
|
||
|
|
||
|
this.buildLocalizationEditor()
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.buildLocalizationEditor = function() {
|
||
|
this.localizationInput = new $.oc.builder.localizationInput(this.getInput(), this.getForm(), {
|
||
|
plugin: this.getPluginCode(),
|
||
|
beforePopupShowCallback: this.proxy(this.onPopupShown, this),
|
||
|
afterPopupHideCallback: this.proxy(this.onPopupHidden, this)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.removeLocalizationInput = function() {
|
||
|
this.localizationInput.dispose()
|
||
|
|
||
|
this.localizationInput = null
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.supportsExternalParameterEditor = function() {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.registerHandlers = function() {
|
||
|
BaseProto.registerHandlers.call(this)
|
||
|
|
||
|
$(this.getInput()).on('change', this.proxy(this.onInputKeyUp))
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.unregisterHandlers = function() {
|
||
|
BaseProto.unregisterHandlers.call(this)
|
||
|
|
||
|
$(this.getInput()).off('change', this.proxy(this.onInputKeyUp))
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.getForm = function() {
|
||
|
var inspectableElement = this.getRootSurface().getInspectableElement()
|
||
|
|
||
|
if (!inspectableElement) {
|
||
|
throw new Error('Cannot determine inspectable element in the Builder localization editor.')
|
||
|
}
|
||
|
|
||
|
return $(inspectableElement).closest('form')
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.getPluginCode = function() {
|
||
|
var $form = this.getForm(),
|
||
|
$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 Inspector editor.')
|
||
|
}
|
||
|
|
||
|
return $input.val()
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.onPopupShown = function() {
|
||
|
this.getRootSurface().popupDisplayed()
|
||
|
}
|
||
|
|
||
|
LocalizationEditor.prototype.onPopupHidden = function() {
|
||
|
this.getRootSurface().popupHidden()
|
||
|
}
|
||
|
|
||
|
$.oc.inspector.propertyEditors.builderLocalization = LocalizationEditor
|
||
|
}(window.jQuery);
|