170 lines
4.7 KiB
JavaScript
170 lines
4.7 KiB
JavaScript
/*
|
|
Product Name: dhtmlxSuite
|
|
Version: 5.2.0
|
|
Edition: Professional
|
|
License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com
|
|
Copyright UAB Dinamenta http://www.dhtmlx.com
|
|
*/
|
|
|
|
//container - can be a HTML container or it's ID
|
|
dhtmlXList = function(container){
|
|
this.name = "List"; //name of component
|
|
|
|
//enable configuration
|
|
dhtmlx.extend(this, dhtmlx.Settings);
|
|
this._parseContainer(container,"dhx_list"); //assigns parent container
|
|
|
|
|
|
|
|
//behaviors
|
|
dhtmlx.extend(this, dhtmlx.AtomDataLoader);
|
|
dhtmlx.extend(this, dhtmlx.DataLoader);
|
|
dhtmlx.extend(this, dhtmlx.EventSystem);
|
|
dhtmlx.extend(this, dhtmlx.RenderStack);
|
|
dhtmlx.extend(this, dhtmlx.SelectionModel);
|
|
dhtmlx.extend(this, dhtmlx.MouseEvents);
|
|
dhtmlx.extend(this, dhtmlx.KeyEvents);
|
|
dhtmlx.extend(this, dhtmlx.EditAbility);
|
|
dhtmlx.extend(this, dhtmlx.DataMove);
|
|
dhtmlx.extend(this, dhtmlx.DragItem);
|
|
dhtmlx.extend(this, dhtmlx.DataProcessor);
|
|
dhtmlx.extend(this, dhtmlx.AutoTooltip);
|
|
dhtmlx.extend(this, dhtmlx.Destruction);
|
|
|
|
this._getDimension = function(){
|
|
var t = this.type;
|
|
var d = (t.margin||0)*2;
|
|
//obj.x - widht, obj.y - height
|
|
return {x : t.width+d, y: t.height+d };
|
|
};
|
|
|
|
//render self , each time when data is updated
|
|
this.data.attachEvent("onStoreUpdated",dhtmlx.bind(function(){
|
|
this.render.apply(this,arguments);
|
|
},this));
|
|
|
|
//default settings
|
|
this._parseSettings(container,{
|
|
drag:false,
|
|
edit:false,
|
|
select:"multiselect", //multiselection is enabled by default
|
|
type:"default"
|
|
});
|
|
|
|
this.data.provideApi(this,true);
|
|
|
|
if (dhtmlx.$customScroll)
|
|
dhtmlx.CustomScroll.enable(this);
|
|
};
|
|
|
|
|
|
dhtmlXList.prototype={
|
|
bind:function(){
|
|
dhtmlx.BaseBind.legacyBind.apply(this, arguments);
|
|
},
|
|
sync:function(){
|
|
dhtmlx.BaseBind.legacySync.apply(this, arguments);
|
|
},
|
|
dragMarker:function(context,ev){
|
|
var el = this._locateHTML(context.target);
|
|
|
|
if (el && this._settings.auto_scroll){
|
|
//maybe it can be moved to the drag behavior
|
|
var dy = el.offsetTop;
|
|
var dh = el.offsetHeight;
|
|
var py = this._obj.scrollTop;
|
|
var ph = this._obj.offsetHeight;
|
|
//scroll up or down is mouse already pointing on top|bottom visible item
|
|
if (dy-dh >= 0 && dy-dh*0.75 < py)
|
|
py = Math.max(dy-dh, 0);
|
|
else if (dy+dh/0.75 > py+ph)
|
|
py = py+dh;
|
|
|
|
this._obj.scrollTop = py;
|
|
}
|
|
return true;
|
|
},
|
|
//attribute , which will be used for ID storing
|
|
_id:"dhx_f_id",
|
|
//css class to action map, for onclick event
|
|
on_click:{
|
|
dhx_list_item:function(e,id){
|
|
//click on item
|
|
if (this.stopEdit(false,id)){
|
|
if (this._settings.select){
|
|
if (this._settings.select=="multiselect")
|
|
this.select(id, e.ctrlKey||e.metaKey, e.shiftKey); //multiselection
|
|
else
|
|
this.select(id);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
//css class to action map, for dblclick event
|
|
on_dblclick:{
|
|
dhx_list_item:function(e,id){
|
|
//dblclick on item
|
|
if (this._settings.edit)
|
|
this.edit(id); //edit it!
|
|
}
|
|
},
|
|
//css class to action map, for mousemove event
|
|
on_mouse_move:{
|
|
},
|
|
types:{
|
|
"default":{
|
|
css:"default",
|
|
//normal state of item
|
|
template:dhtmlx.Template.fromHTML("<div style='padding:10px; white-space:nowrap; overflow:hidden;'>{obj.text}</div>"),
|
|
//template for edit state of item
|
|
template_edit:dhtmlx.Template.fromHTML("<div style='padding:10px; white-space:nowrap; overflow:hidden;'><textarea bind='obj.text'></textarea></div>"),
|
|
//in case of dyn. loading - temporary spacer
|
|
template_loading:dhtmlx.Template.fromHTML("<div style='padding:10px; white-space:nowrap; overflow:hidden;'>Loading...</div>"),
|
|
height:50,
|
|
margin:0,
|
|
padding:10,
|
|
border:1
|
|
}
|
|
},
|
|
template_item_start:dhtmlx.Template.fromHTML("<div dhx_f_id='{-obj.id}' class='dhx_list_item dhx_list_{obj.css}_item{-obj.$selected?_selected:}' style='width:100%; height:{obj.height}px; padding:{obj.padding}px; margin:{obj.margin}px; overflow:hidden;'>"),
|
|
template_item_end:dhtmlx.Template.fromHTML("</div>")
|
|
};
|
|
|
|
dhtmlx.compat("layout");
|
|
if (typeof(window.dhtmlXCellObject) != "undefined") {
|
|
|
|
dhtmlXCellObject.prototype.attachList = function(conf) {
|
|
|
|
this.callEvent("_onBeforeContentAttach",["list"]);
|
|
|
|
var obj = document.createElement("DIV");
|
|
obj.style.width = "100%";
|
|
obj.style.height = "100%";
|
|
obj.style.position = "relative";
|
|
obj.style.overflowX = "hidden";
|
|
this._attachObject(obj);
|
|
|
|
if (typeof(conf) == "undefined") conf = {};
|
|
obj.id = "ListObject_"+new Date().getTime();
|
|
conf.container = obj.id;
|
|
conf.skin = this.conf.skin;
|
|
|
|
|
|
this.dataType = "list";
|
|
this.dataObj = new dhtmlXList(conf);
|
|
|
|
|
|
this.dataObj.setSizes = function(){
|
|
this.render();
|
|
}
|
|
|
|
obj = null;
|
|
|
|
this.callEvent("_onContentAttach",[]);
|
|
|
|
return this.dataObj;
|
|
};
|
|
|
|
}
|
|
|