| Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/entity-editor/js/ |
| Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/entity-editor/js/editor-controller.js |
BX.namespace("BX.UI");
//region EDITOR FIELD SINGLE EDIT CONTROLLER
if(typeof BX.UI.EditorFieldSingleEditController === "undefined")
{
BX.UI.EditorFieldSingleEditController = function()
{
this._id = "";
this._settings = null;
this._field = null;
this._wrapper = null;
this._fieldWrapperHandler = BX.delegate(this.onFieldWrapperClick, this);
this._documentHandler = BX.delegate(this.onDocumentClick, this);
this._documentTimeoutHandle = 0;
this._isInitialized = false;
this._isActive = false;
};
BX.UI.EditorFieldSingleEditController.prototype =
{
initialize: function(id, settings)
{
this._id = BX.type.isNotEmptyString(id) ? id : BX.util.getRandomString(4);
this._settings = settings ? settings : {};
this._time = (new Date()).toString();
this._field = BX.prop.get(this._settings, "field");
if(!(this._field instanceof BX.UI.EntityEditorField))
{
throw "EditorFieldSingleEditController: The 'field' param must be EntityEditorField.";
}
this._wrapper = this._field.getWrapper();
if(!BX.type.isElementNode(this._wrapper))
{
throw "EditorFieldSingleEditController: Could not find the wrapper element.";
}
window.setTimeout(BX.delegate(this.bind, this), 100);
this._isActive = this._isInitialized = true;
},
isActive: function()
{
return this._isActive;
},
setActive: function(active)
{
this._isActive = !!active;
},
setActiveDelayed: function(active, delay)
{
if(typeof(delay) === "undefined")
{
delay = 0;
}
window.setTimeout(
BX.delegate(function(){ this.setActive(active); }, this),
delay
);
},
release: function()
{
this._isActive = this._isInitialized = false;
this.unbind();
},
bind: function()
{
if(this._isInitialized)
{
BX.bind(this._wrapper, "click", this._fieldWrapperHandler);
BX.bind(document, "click", this._documentHandler);
}
},
unbind: function()
{
BX.unbind(this._wrapper, "click", this._fieldWrapperHandler);
BX.unbind(document, "click", this._documentHandler);
},
saveControl: function()
{
if(!this._isActive)
{
return;
}
var editor = this._field.getEditor();
if(editor)
{
editor.switchControlMode(this._field, BX.UI.EntityEditorMode.view, BX.UI.EntityEditorModeOptions.none);
//Is not supported by the all controls
//editor.saveControl(this._field);
}
this._isActive = false;
},
onFieldWrapperClick: function(e)
{
//The call of "preventDefault" is not allowed because of the checkbox controls
BX.eventCancelBubble(e);
},
onDocumentClick: function(e)
{
if(this._documentTimeoutHandle > 0)
{
window.clearTimeout(this._documentTimeoutHandle);
this._documentTimeoutHandle = 0;
}
this._documentTimeoutHandle = window.setTimeout(
BX.delegate(this.saveControl, this),
400
);
}
};
BX.UI.EditorFieldSingleEditController.create = function(id, settings)
{
var self = new BX.UI.EditorFieldSingleEditController();
self.initialize(id, settings);
return self;
}
}
//endregion
//region EDITOR FIELD VIEW CONTROLLER
if(typeof BX.UI.EditorFieldViewController === "undefined")
{
BX.UI.EditorFieldViewController = function()
{
this._id = "";
this._settings = null;
this._field = null;
this._wrapper = null;
this._timeoutHandle = 0;
this._time = 0;
this._pos = { x: 0, y: 0 };
this._mouseDownHandler = BX.delegate(this.onMouseDown, this);
this._mouseUpHandler = BX.delegate(this.onMouseUp, this);
this._isInitialized = false;
this._isActive = false;
};
BX.UI.EditorFieldViewController.prototype =
{
initialize: function (id, settings)
{
this._id = BX.type.isNotEmptyString(id) ? id : BX.util.getRandomString(4);
this._settings = settings ? settings : {};
this._field = BX.prop.get(this._settings, "field");
if (!(this._field instanceof BX.UI.EntityEditorField)) {
throw "EditorFieldViewController: The 'field' param must be EntityEditorField.";
}
this._wrapper = BX.prop.getElementNode(this._settings, "wrapper");
if (!BX.type.isElementNode(this._wrapper)) {
throw "EditorFieldSingleEditController: Could not find the wrapper element.";
}
window.setTimeout(BX.delegate(this.bind, this), 100);
this._isActive = this._isInitialized = true;
},
release: function()
{
this._isActive = this._isInitialized = false;
this.unbind();
},
bind: function()
{
if(this._isInitialized)
{
BX.bind(this._wrapper, "mousedown", this._mouseDownHandler);
BX.bind(this._wrapper, "mouseup", this._mouseUpHandler);
}
},
unbind: function()
{
BX.unbind(this._wrapper, "mousedown", this._mouseDownHandler);
BX.unbind(this._wrapper, "mouseup", this._mouseUpHandler);
},
onMouseDown: function(e)
{
if(this._timeoutHandle > 0)
{
window.clearTimeout(this._timeoutHandle);
this._timeoutHandle = 0;
}
if(!this.isHandleableEvent(e))
{
return;
}
this._time = new Date().valueOf();
this._pos = { x: e.clientX, y: e.clientY };
},
onMouseUp: function(e)
{
if(this._timeoutHandle > 0)
{
window.clearTimeout(this._timeoutHandle);
this._timeoutHandle = 0;
}
if(!this.isHandleableEvent(e))
{
return;
}
if((new Date().valueOf() - this._time) < 400 || Math.abs(this._pos.x - e.clientX) < 2)
{
this._timeoutHandle = window.setTimeout(
BX.delegate(this.switchTo, this),
0
);
}
this._time = 0;
},
isHandleableEvent: function(e)
{
var node = BX.getEventTarget(e);
if(node.tagName === "A")
{
return false;
}
if(node.getAttribute("data-editor-control-type") === "button")
{
return false;
}
return !BX.findParent(node, { tagName: "a" }, this._wrapper);
},
switchTo: function()
{
this._field.switchToSingleEditMode();
}
};
BX.UI.EditorFieldViewController.create = function(id, settings)
{
var self = new BX.UI.EditorFieldViewController();
self.initialize(id, settings);
return self;
}
}
if (typeof BX.UI.EntityEditorController === 'undefined')
{
BX.UI.EntityEditorController = function()
{
this._id = '';
this._settings = {};
this._editor = null;
this._model = null;
this._config = null;
this._isChanged = false;
};
BX.UI.EntityEditorController.prototype =
{
initialize: function(id, settings)
{
this._id = BX.type.isNotEmptyString(id) ? id : BX.util.getRandomString(4);
this._settings = settings ? settings : {};
this._editor = BX.prop.get(this._settings, 'editor', null);
this._model = BX.prop.get(this._settings, 'model', null);
this._config = BX.prop.getObject(this._settings, 'config', {});
this.doInitialize();
},
doInitialize: function()
{
},
getConfig: function()
{
return this._config;
},
getConfigStringParam: function(name, defaultValue)
{
return BX.prop.getString(this._config, name, defaultValue);
},
isChanged: function()
{
return this._isChanged;
},
markAsChanged: function()
{
if (this._isChanged)
{
return;
}
this._isChanged = true;
if (this._editor)
{
this._editor.processControllerChange(this);
}
},
release: function()
{
},
rollback: function()
{
},
validate: function()
{
return null;
},
innerCancel: function()
{
},
onBeforeSubmit: function()
{
},
onAfterSave: function()
{
if (this._isChanged)
{
this._isChanged = false;
}
},
onReload: function()
{
if (!this._isChanged)
{
this.onAfterSave();
}
},
onBeforeSaveControl: function(data)
{
return this.onBeforeSaveControl(data);
},
/**
* @deprecated Use onBeforeSaveControl instead
*
* This method with misprint left for backward compatibility and
* will be removed in future
*/
onBeforesSaveControl: function(data)
{
return data;
}
};
}
//endregion