108 lines
3.4 KiB
JavaScript
108 lines
3.4 KiB
JavaScript
/*
|
|
* Inspector checkbox editor class.
|
|
*
|
|
* This editor is used in $.oc.inspector.propertyEditors.set class.
|
|
* If updates that affect references to this.inspector and propertyDefinition are done,
|
|
* the propertyEditors.set class implementation should be reviewed.
|
|
*/
|
|
+function ($) { "use strict";
|
|
|
|
var Base = $.oc.inspector.propertyEditors.base,
|
|
BaseProto = Base.prototype
|
|
|
|
var CheckboxEditor = function(inspector, propertyDefinition, containerCell, group) {
|
|
Base.call(this, inspector, propertyDefinition, containerCell, group)
|
|
}
|
|
|
|
CheckboxEditor.prototype = Object.create(BaseProto)
|
|
CheckboxEditor.prototype.constructor = Base
|
|
|
|
CheckboxEditor.prototype.dispose = function() {
|
|
this.unregisterHandlers()
|
|
|
|
BaseProto.dispose.call(this)
|
|
}
|
|
|
|
CheckboxEditor.prototype.build = function() {
|
|
var editor = document.createElement('input'),
|
|
container = document.createElement('div'),
|
|
value = this.inspector.getPropertyValue(this.propertyDefinition.property),
|
|
label = document.createElement('label'),
|
|
isChecked = false,
|
|
id = this.inspector.generateSequencedId()
|
|
|
|
container.setAttribute('tabindex', 0)
|
|
container.setAttribute('class', 'custom-checkbox nolabel')
|
|
|
|
editor.setAttribute('type', 'checkbox')
|
|
editor.setAttribute('value', '1')
|
|
editor.setAttribute('placeholder', 'placeholder')
|
|
editor.setAttribute('id', id)
|
|
|
|
label.setAttribute('for', id)
|
|
label.textContent = this.propertyDefinition.title
|
|
|
|
container.appendChild(editor)
|
|
container.appendChild(label)
|
|
|
|
if (value === undefined) {
|
|
if (this.propertyDefinition.default !== undefined) {
|
|
isChecked = this.normalizeCheckedValue(this.propertyDefinition.default)
|
|
}
|
|
}
|
|
else {
|
|
isChecked = this.normalizeCheckedValue(value)
|
|
}
|
|
|
|
editor.checked = isChecked
|
|
|
|
this.containerCell.appendChild(container)
|
|
}
|
|
|
|
CheckboxEditor.prototype.normalizeCheckedValue = function(value) {
|
|
if (value == '0' || value == 'false')
|
|
return false
|
|
|
|
return value
|
|
}
|
|
|
|
CheckboxEditor.prototype.getInput = function() {
|
|
return this.containerCell.querySelector('input')
|
|
}
|
|
|
|
CheckboxEditor.prototype.focus = function() {
|
|
this.getInput().parentNode.focus()
|
|
}
|
|
|
|
CheckboxEditor.prototype.updateDisplayedValue = function(value) {
|
|
this.getInput().checked = this.normalizeCheckedValue(value)
|
|
}
|
|
|
|
CheckboxEditor.prototype.isEmptyValue = function(value) {
|
|
if (value === 0 || value === '0' || value === 'false') {
|
|
return true
|
|
}
|
|
|
|
return BaseProto.isEmptyValue.call(this, value)
|
|
}
|
|
|
|
CheckboxEditor.prototype.registerHandlers = function() {
|
|
var input = this.getInput()
|
|
|
|
input.addEventListener('change', this.proxy(this.onInputChange))
|
|
}
|
|
|
|
CheckboxEditor.prototype.unregisterHandlers = function() {
|
|
var input = this.getInput()
|
|
|
|
input.removeEventListener('change', this.proxy(this.onInputChange))
|
|
}
|
|
|
|
CheckboxEditor.prototype.onInputChange = function() {
|
|
var isChecked = this.getInput().checked
|
|
|
|
this.inspector.setPropertyValue(this.propertyDefinition.property, isChecked ? 1 : 0)
|
|
}
|
|
|
|
$.oc.inspector.propertyEditors.checkbox = CheckboxEditor
|
|
}(window.jQuery); |