/**
* -----------------------------------------------------------------------------
* file: ui.inputTreeList.js
* file version: 1.0.0
* date: 2012-06-18
*
* A jQuery plugin provided by the piwigo's plugin "GrumPluginClasses"
*
* -----------------------------------------------------------------------------
* Author : Grum
* email : grum@piwigo.com
* website : http://photos.grum.fr
*
* << May the Little SpaceFrog be with you ! >>
* -----------------------------------------------------------------------------
*
* see ui.inputTreeList.help.txt for help about this plugin
*
* :: HISTORY ::
*
* | release | date |
* | 1.0.0 | 2012/08/25 | * first release - fork from ui.categorySelector object
* | | |
* | | |
* | | |
* | | |
* | | |
* | | |
* | | |
*
*/
(
function($)
{
/*
* plugin 'public' functions
*/
var publicMethods =
{
init : function (opt)
{
return this.each(function()
{
// default values for the plugin
var $this=$(this),
timeStamp=new Date(),
data = $this.data('options'),
objects = $this.data('objects'),
properties = $this.data('properties'),
options =
{
triggerChange:'interface', // ''interface': only through user interface; 'all': when value is changed by function call
autoLoad:true,
displayNfo:true,
listMaxWidth:0,
listMaxHeight:0,
levelIndent:16,
iconWidthEC:15,
postUrl:'',
postData:{},
popup:null,
change:null,
load:null,
multiple:false,
popupMode:'click',
displayPath:false,
downArrow:'' //'⇓'
};
// if options given, merge it
// if(opt) $.extend(options, opt); ==> options are set by setters
$this.data('options', options);
if(!properties)
{
$this.data('properties',
{
objectId:'cs'+Math.ceil(timeStamp.getTime()*Math.random()),
index:-1,
initialized:false,
selectorVisible:false,
items:[],
mouseOver:false,
isValid:true
}
);
properties=$this.data('properties');
}
if(!objects)
{
objects =
{
container:$('
',
{
'class':'ui-inputTreeList',
tabindex:0,
css:{
width:'100%'
}
}
).bind('click.inputTreeList',
function ()
{
privateMethods.displaySelector($this, !$this.data('properties').selectorVisible);
//$(this).focus(); // if get the focus, it hide the dorp-down list.. ?
}
),
containerName:$('',
{
html: ' ',
'class':'ui-inputTreeList-name'
}
),
containerList:null,
containerNfo:$('',
{
'class':'ui-inputTreeList-nfo',
css: {
'float':'right',
'display':(options.displayNfo)?'block':'none'
}
}
),
containerArrow:$('',
{
html: '⇓',
'class':'ui-inputTreeList-arrow',
css: {
'float':'right',
cursor:'pointer'
}
}
).bind('mousedown',
function ()
{
$(this).addClass('ui-inputTreeList-arrow-active');
}
).bind('mouseup',
function ()
{
$(this).removeClass('ui-inputTreeList-arrow-active');
}
),
listContainer:$('',
{
html: "",
'class':'ui-inputTreeList-list',
css: {
overflow:"auto",
display:'none',
position:'absolute'
}
}
),
list:$('',
{
css: {
listStyle:'none',
padding:'0px',
margin:'0px'
}
}
)
};
}
$this.data('objects', objects);
privateMethods.setOptions($this, opt);
if($this.html()!='') privateMethods.setItems($this, $this.html());
$this
.html('')
.append(objects.container.append(objects.containerArrow).append(objects.containerNfo).append(objects.containerName))
.append(objects.listContainer.append(objects.list));
}
);
}, // init
destroy : function ()
{
return this.each(
function()
{
// default values for the plugin
var $this=$(this),
objects = $this.data('objects');
objects.containerName.unbind().remove();
objects.containerList.unbind().remove();
objects.containerNfo.unbind().remove();
objects.containerArrow.unbind().remove();
objects.container.unbind().remove();
objects.list.children().unbind();
objects.listContainer.remove();
$(document).unbind('focusout.'+properties.objectId+' focusin.'+properties.objectId);
$this
.removeData()
.unbind('.inputTreeList')
.css(
{
width:'',
height:''
}
);
delete $this;
}
);
}, // destroy
options: function (value)
{
return this.each(function()
{
privateMethods.setOptions($(this), value);
}
);
}, // autoLoad
autoLoad: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setAutoLoad($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.autoLoad);
}
else
{
return(true);
}
}
}, // autoLoad
triggerChange: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setTriggerChange($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.triggerChange);
}
else
{
return(true);
}
}
}, // triggerChange
listMaxWidth: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setListMaxWidth($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.listMaxWidth);
}
else
{
return(0);
}
}
}, // listMaxWidth
listMaxHeight: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setListMaxHeight($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.listMaxHeight);
}
else
{
return(0);
}
}
}, // listMaxHeight
displayNfo: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setDisplayNfo($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.displayNfo);
}
else
{
return(true);
}
}
}, // displayNfo
levelIndent: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setLevelIndent($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.levelIndent);
}
else
{
return(0);
}
}
}, // levelIndent
postUrl: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setPostUrl($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.postUrl);
}
else
{
return('');
}
}
}, // postUrl
postData: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setPostData($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.postData);
}
else
{
return('');
}
}
}, // postData
collapse: function (value)
{
return this.each(function()
{
if(!value) value=':all';
privateMethods.setExpandCollapse($(this), value, 'C');
}
);
}, // collapse
expand: function (value)
{
return this.each(function()
{
if(!value) value=':all';
privateMethods.setExpandCollapse($(this), value, 'E');
}
);
}, // expand
iconWidthEC: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setIconWidthEC($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.iconWidthEC);
}
else
{
return(0);
}
}
}, // iconWidthEC
name: function ()
{
var options=this.data('options'),
properties=this.data('properties');
if(!options.multiple)
{
return(properties.items[properties.index].name);
}
else
{
var listNames=[];
for(var i=0;i-1 && properties.index-1 && properties.index[i]0)
{
return(properties.items[0]);
}
else if(properties && properties.index!=null && (value==':selected' || value==null) && properties.items.length>0)
{
if(!options.multiple && properties.index>-1 && properties.index-1 && properties.index-1)
{
var index=privateMethods.findIndexByValue(this, value);
if(index>-1)
{
return(properties.items[index]);
}
return(null);
}
else
{
return(null);
}
}, // numberOfCategories
}; // methods
/*
* plugin 'private' methods
*/
var privateMethods =
{
setOptions : function (object, value)
{
var properties=object.data('properties'),
options=object.data('options');
if(!$.isPlainObject(value)) return(false);
properties.initialized=false;
privateMethods.setTriggerChange(object, (value.triggerChange!=null)?value.triggerChange:options.triggerChange);
privateMethods.setAutoLoad(object, (value.autoLoad!=null)?value.autoLoad:options.autoLoad);
privateMethods.setDisplayNfo(object, (value.displayNfo!=null)?value.displayNfo:options.displayNfo);
privateMethods.setListMaxWidth(object, (value.listMaxWidth!=null)?value.listMaxWidth:options.listMaxWidth);
privateMethods.setListMaxHeight(object, (value.listMaxHeight!=null)?value.listMaxHeight:options.listMaxHeight);
privateMethods.setLevelIndent(object, (value.levelIndent!=null)?value.levelIndent:options.levelIndent);
privateMethods.setIconWidthEC(object, (value.iconWidthEC!=null)?value.iconWidthEC:options.iconWidthEC);
privateMethods.setPostUrl(object, (value.postUrl!=null)?value.postUrl:options.postUrl);
privateMethods.setPostData(object, (value.postData!=null)?value.postData:options.postData);
privateMethods.setPopupMode(object, (value.popupMode!=null)?value.popupMode:options.popupMode);
privateMethods.setDisplayPath(object, (value.displayPath!=null)?value.displayPath:options.displayPath);
privateMethods.setDownArrow(object, (value.downArrow!=null)?value.downArrow:options.downArrow);
privateMethods.setEventPopup(object, (value.popup!=null)?value.popup:options.popup);
privateMethods.setEventChange(object, (value.change!=null)?value.change:options.change);
privateMethods.setEventLoad(object, (value.load!=null)?value.load:options.load);
privateMethods.setMultiple(object, (value.multiple!=null)?value.multiple:options.multiple); // can be set only at the initialization
if(options.autoLoad) privateMethods.load(object);
properties.initialized=true;
},
setIsValid : function (object, value)
{
var objects=object.data('objects'),
properties=object.data('properties');
if(properties.isValid!=value)
{
properties.isValid=value;
if(properties.isValid)
{
objects.container.removeClass('ui-error');
}
else
{
objects.container.addClass('ui-error');
}
}
return(properties.isValid);
}, // setIsValid
setTriggerChange : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties');
if((!properties.initialized || options.triggerChange!=value) && (value=='interface' || value=='all'))
{
options.triggerChange=value;
}
return(options.triggerChange);
}, // setTriggerChange
setAutoLoad : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties');
if((!properties.initialized || options.autoLoad!=value) && (value==true || value==false))
{
options.autoLoad=value;
}
return(options.autoLoad);
}, // setAutoLoad
setListMaxWidth : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.listMaxWidth!=value) && value>=0)
{
options.listMaxWidth=value;
if(options.listMaxWidth>0)
{
objects.listContainer.css('max-width', options.listMaxWidth+'px');
}
else
{
objects.listContainer.css('max-width', '');
}
}
return(options.listMaxWidth);
}, // setListMaxWidth
setListMaxHeight : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.listMaxHeight!=value) && value>=0)
{
options.listMaxHeight=value;
if(options.listMaxHeight>0)
{
objects.listContainer.css('max-height', options.listMaxHeight+'px');
}
else
{
objects.listContainer.css('max-height', '');
}
}
return(options.listMaxHeight);
}, // setListMaxHeight
setDisplayNfo : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.displayNfo!=value) && (value==true || value==false))
{
options.displayNfo=value;
if(options.displayNfo)
{
object.find('.ui-inputTreeList-nfo').show();
}
else
{
object.find('.ui-inputTreeList-nfo').hide();
}
}
return(options.displayNfo);
}, // setDisplayNfo
setLevelIndent : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.levelIndent!=value) && value>=0)
{
options.levelIndent=value;
objects.list.find('.ui-inputTreeList-item div.ui-inputTreeList-expand-item').each(
function ()
{
$(this).css('padding-left', (options.iconWidthEC+$(this).attr('level')*options.levelIndent)+'px');
}
);
}
return(options.levelIndent);
}, // setLevelIndent
setPostUrl : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties');
if(!properties.initialized || options.postUrl!=value)
{
options.postUrl=value;
if(options.autoLoad && properties.initialized) privateMethods.load(object);
}
return(options.postUrl);
}, // setPostUrl
setPostData : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties');
if(!properties.initialized || options.postData!=value)
{
options.postData=value;
if(options.autoLoad && properties.initialized) privateMethods.load(object);
}
return(options.postData);
}, // setPostData
setIconWidthEC : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.iconWidthEC!=value) && value>=0)
{
options.iconWidthEC=value;
objects.list.find('.ui-inputTreeList-item div.ui-inputTreeList-expand-item').each(
function ()
{
$(this).css('padding-left', (options.iconWidthEC+$(this).attr('level')*options.levelIndent)+'px');
}
);
}
return(options.iconWidthEC);
}, // setIconWidthEC
setMultiple : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.multiple!=value) && (value==true || value==false))
{
if(!value)
{
properties.index=-1;
if(objects.containerList!=null)
{
objects.containerList.remove();
objects.containerList=null;
}
}
else
{
properties.index=[];
objects.listContainer.addClass('ui-inputTreeList-multiple');
if(objects.containerList==null)
{
objects.containerList=$('',
{
css: {
listStyle:'none',
padding:'0px',
margin:'0px',
overflow:"auto"
},
html:' '
}
);
objects.containerName.html('').append(objects.containerList);
}
}
options.multiple=value;
}
return(options.multiple);
}, //setMultiple
setPopupMode : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.popupMode!=value) && (value=='click' || value=='mouseout'))
{
options.popupMode=value;
if(value=='mouseout')
{
objects.listContainer
.unbind('mouseleave.inputTreeList')
.unbind('mouseenter.inputTreeList')
.bind('mouseleave.inputTreeList',
function ()
{
privateMethods.displaySelector(object, false);
}
);
}
else
{
objects.listContainer
.unbind('mouseleave.inputTreeList')
.bind('mouseleave.inputTreeList',
function ()
{
properties.mouseOver=false;
}
)
.bind('mouseenter.inputTreeList',
function ()
{
properties.mouseOver=true;
}
);
$(document).bind('focusout.'+properties.objectId+' focusin.'+properties.objectId,
function (event)
{
if(!properties.mouseOver) privateMethods.displaySelector(object, false);
}
);
}
}
return(options.popupMode);
}, //setPopupMode
setDisplayPath : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if((!properties.initialized || options.displayPath!=value) && (value==true || value==false))
{
options.displayPath=value;
}
return(options.displayPath);
}, //setDisplayPath
setDownArrow : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if(!properties.initialized || options.downArrow!=value)
{
options.downArrow=value;
objects.containerArrow.html(options.downArrow);
}
return(options.downArrow);
}, //setDownArrow
setItems : function (object, value)
{
var properties=object.data('properties'),
options=object.data('options'),
objects=object.data('objects');
if(value=='' || value==null)
{
value={
items:[]
}
}
else if($.isArray(value))
{
value={
items:value
}
}
else
{
try
{
value=$.parseJSON($.trim(value));
}
catch (e)
{
return(false);
}
}
privateMethods.listClear(object);
if(value.items.length>0) privateMethods.listAddItems(object, value.items, objects.list);
properties.initialized=false;
if(options.multiple)
{
privateMethods.setValue(object, ':none', (options.triggerChange=='all'));
}
else
{
privateMethods.setValue(object, ':first', (options.triggerChange=='all'));
}
properties.initialized=true;
if(options.load) object.trigger('inputTreeListLoad');
}, // setItems
/**
* usage : see notes on the header file
*
* @param jQuery object : the jQuery object
* @param String value : the filter
* @param String mode : 'C' for collapse, 'E' for expand
*/
setExpandCollapse : function (object, value, mode)
{
var objects=object.data('objects');
/*
* target[1] = ':all' or itemId
* target[2] = '=' or '<' or '>' or '+'
* target[3] = level
*/
re=/^(?:(:all)(?:(=|<|>|\+)(\d+))?)|(?:(\d+)(<|>|\+))?$/i;
target=re.exec(value);
if(target!=null)
{
switch(mode)
{
case 'C':
applyExpandCollapse=privateMethods.applyCollapse;
break;
case 'E':
applyExpandCollapse=privateMethods.applyExpand;
break;
}
if(target[1]==':all')
{
objects.list.find('.ui-inputTreeList-expandable-item, .ui-inputTreeList-collapsable-item').each(applyExpandCollapse);
}
else if(target[4]!=null)
{
switch(target[5])
{
case '+':
objects.list.find('.ui-inputTreeList-expandable-item, .ui-inputTreeList-collapsable-item').each(privateMethods.applyCollapse);
objects.list.find(':has([itemId='+target[4]+'])').prev().each(privateMethods.applyExpand);
objects.list.find('[itemId='+target[4]+']').each(applyExpandCollapse);
break;
case '>':
objects.list.find('[itemId='+target[4]+'] + ul').find('.ui-inputTreeList-expandable-item, .ui-inputTreeList-collapsable-item').each(applyExpandCollapse);
objects.list.find('[itemId='+target[4]+']').each(applyExpandCollapse);
break;
case '<':
objects.list.find(':has([itemId='+target[4]+'])').prev().each(applyExpandCollapse);
objects.list.find('[itemId='+target[4]+']').each(applyExpandCollapse);
break;
default:
objects.list.find('[itemId='+target[4]+']').each(applyExpandCollapse);
break;
}
}
}
}, //setExpandCollapse
applyExpand : function (index, domElt)
{
privateMethods.applyExpandCollapse(index, domElt, 'E');
}, //applyExpand
applyCollapse : function (index, domElt)
{
privateMethods.applyExpandCollapse(index, domElt, 'C');
}, //applyCollapse
/**
* used by the setExpandCollapse function
* not aimed to be used directly
*/
applyExpandCollapse : function (index, domElt, mode)
{
action='';
var $domElt=$(domElt);
if(target.length>2 && target[2]!=null && target[3]!=null)
{
switch(target[2])
{
case '=':
if($domElt.attr('level')==target[3]) action=mode;
break;
case '>':
if($domElt.attr('level')>=target[3]) action=mode;
break;
case '<':
if($domElt.attr('level')<=target[3]) action=mode;
break;
case '+':
if((mode=='E' && $domElt.attr('level')<=target[3]) ||
(mode=='C' && $domElt.attr('level')>=target[3]))
{
action=mode;
}
else
{
action=(mode=='C')?'E':'C';
}
break;
}
}
else action=mode;
switch(action)
{
case 'C':
$domElt
.removeClass('ui-inputTreeList-expandable-item ui-inputTreeList-collapsable-item')
.addClass('ui-inputTreeList-expandable-item')
.next().hide();
break;
case 'E':
$domElt
.removeClass('ui-inputTreeList-expandable-item ui-inputTreeList-collapsable-item')
.addClass('ui-inputTreeList-collapsable-item')
.next().show();
break;
}
}, //applyExpandCollapse
setValue : function (object, value, trigger)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects'),
index=-1;
re=/^(:invert|:all|:none)(?:(=|<|>)(\d+))$/i;
target=re.exec(value);
if(target!=null) value=target[1];
switch(value)
{
case ':first':
if(properties.items.length>0) index=0;
break;
case ':last':
index=properties.items.length-1;
break;
case ':invert':
if(!options.multiple) return(false);
properties.index=[];
objects.list.find('.ui-inputTreeList-item').each(
function ()
{
var $this=$(this),
apply=true;
if(target!=null)
{
switch(target[2])
{
case '=':
apply=($this.attr('level')==target[3]);
break;
case '>':
apply=($this.attr('level')>=target[3]);
break;
case '<':
apply=($this.attr('level')<=target[3]);
break;
}
}
if(apply)
{
if($this.hasClass('ui-inputTreeList-selected-item'))
{
$this
.removeClass('ui-inputTreeList-selected-item')
.addClass('ui-inputTreeList-unselected-item');
}
else
{
$this
.addClass('ui-inputTreeList-selected-item')
.removeClass('ui-inputTreeList-unselected-item');
tmp=privateMethods.findIndexByValue(object, $this.attr('itemId'));
if(tmp>-1) properties.index.push(tmp);
}
}
}
);
privateMethods.setValue(object, [], (options.triggerChange=='all'));
return(false);
break;
case ':none':
if(!options.multiple) return(false);
properties.index=[];
objects.list.find('.ui-inputTreeList-selected-item').each(
function ()
{
var $this=$(this),
apply=true;
if(target!=null)
{
switch(target[2])
{
case '=':
apply=($this.attr('level')==target[3]);
break;
case '>':
apply=($this.attr('level')>=target[3]);
break;
case '<':
apply=($this.attr('level')<=target[3]);
break;
}
}
if(apply)
$this
.removeClass('ui-inputTreeList-selected-item')
.addClass('ui-inputTreeList-unselected-item');
}
);
privateMethods.setValue(object, [], (options.triggerChange=='all'));
return(false);
break;
case ':all':
if(!options.multiple) return(false);
properties.index=[];
objects.list.find('.ui-inputTreeList-item').each(
function ()
{
var $this=$(this),
apply=true;
if(target!=null)
{
switch(target[2])
{
case '=':
apply=($this.attr('level')==target[3]);
break;
case '>':
apply=($this.attr('level')>=target[3]);
break;
case '<':
apply=($this.attr('level')<=target[3]);
break;
}
}
if(apply)
{
tmp=privateMethods.findIndexByValue(object, $this.attr('itemId'));
if(tmp>-1) properties.index.push(tmp);
$this
.addClass('ui-inputTreeList-selected-item')
.removeClass('ui-inputTreeList-unselected-item');
}
}
);
privateMethods.setValue(object, [], (options.triggerChange=='all'));
return(false);
break;
default:
if($.isArray(value) && options.multiple)
{
index=[];
for(var i=0;i-1) index.push(tmp);
}
}
else
{
index=privateMethods.findIndexByValue(object, value);
}
break;
}
if(!options.multiple && (!properties.initialized || properties.index!=index) && index>-1)
{
objects.list.find('.ui-inputTreeList-selected-item')
.removeClass('ui-inputTreeList-selected-item')
.addClass('ui-inputTreeList-unselected-item');
objects.list.find('[itemId="'+value+'"]')
.addClass('ui-inputTreeList-selected-item')
.removeClass('ui-inputTreeList-unselected-item');
title=privateMethods.getParentName(object, objects.list.find('[itemId="'+value+'"] div.ui-inputTreeList-name')).replace('&', '&').replace('>', '>').replace('<', '<');
if(!options.displayPath)
{
path=properties.items[properties.index].name;
}
else
{
path=title;
}
properties.index=index;
objects.containerName.html(path).attr('title', title);
objects.containerNfo.html(properties.items[properties.index].nfo);
if(trigger && options.change) object.trigger('inputTreeListChange', [properties.items[properties.index].id]);
if(properties.index>-1) return(properties.items[properties.index].id);
}
else if(options.multiple)
{
if(!$.isArray(index))
{
if(index<0 || index==null) return(-1);
index=[index];
}
tmp=[];
for(var i=0;i-1) properties.index.splice(tmpIndex, 1);
}
else
{
item
.addClass('ui-inputTreeList-selected-item')
.removeClass('ui-inputTreeList-unselected-item');
properties.index.push(index[i]);
}
tmp.push(properties.items[index[i]].id);
}
objects.containerList.html('');
objects.list.find('.ui-inputTreeList-selected-item div.ui-inputTreeList-name').each(
function ()
{
var path='';
title=privateMethods.getParentName(object, $(this)).replace('&', '&').replace('>', '>').replace('<', '<');
if(!options.displayPath)
{
path=$(this).html();
}
else
{
path=title;
}
objects.containerList.append(
$('',
{
html:path,
title:title,
'class':'ui-inputTreeList-selected-cat'
}
).prepend(
$('',
{
html:'x'
}
).bind('click.inputTreeList',
{object:object, value:$(this).parent().parent().attr('itemId')},
function (event)
{
event.stopPropagation();
privateMethods.setValue(event.data.object, event.data.value, true);
}
)
)
)
}
);
if(objects.containerList.children().length==0) objects.containerList.append(' ');
if(trigger && options.change) object.trigger('inputTreeListChange', [tmp]);
return(tmp);
}
return(null);
}, //setValue
getParentName : function (object, item)
{
if(item==null || item.length==0) return('');
foundItem=item.parent().parent().parent().prev().find('div.ui-inputTreeList-name');
if(foundItem.length==0) return(item.html());
return(privateMethods.getParentName(object, foundItem)+' / '+item.html());
}, // getParentName
displaySelector : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
if(properties.selectorVisible!=value)
{
properties.selectorVisible=value;
if(properties.selectorVisible && properties.items.length>0)
{
var index=0;
objects.listContainer
.css(
{
display:'block',
'min-width':objects.listContainer.parent().css('width')
}
);
if($.isArray(properties.index))
{
if (properties.index.length>0) index=properties.index[0];
}
else if(properties.index>-1)
{
index=properties.index;
}
objects.listContainer.scrollTop(objects.listContainer.scrollTop()+objects.list.find('[itemId="'+properties.items[index].id+'"]').position().top);
}
else
{
objects.listContainer.css('display', 'none');
}
if(options.popup) object.trigger('inputTreeListPopup', [properties.selectorVisible]);
}
return(properties.selectorVisible);
}, // displaySelector
load : function (object)
{
// load datas from server through an asynchronous ajax call
var options=object.data('options'),
objects=object.data('objects');
if(options.postUrl=='') return(false);
$.ajax(
{
type: "POST",
url: options.postUrl,
async: true,
data:options.postData,
success: function(msg)
{
privateMethods.setItems(object, msg);
},
error: function(msg)
{
objects.listContainer.html('Error ! '+msg);
},
}
);
}, // load
listClear : function (object)
{
// clear the item list
var objects=object.data('objects'),
options=object.data('options'),
properties=object.data('properties');
objects.list.children().unbind();
objects.list.html('');
if(options.multiple)
{
properties.index=[];
}
else
{
properties.index=-1;
}
properties.items=[];
}, // listClear
listAddItems : function (object, listItems, parent)
{
// add the items to the item list
var options=object.data('options'),
properties=object.data('properties'),
objects=object.data('objects');
var previousLevel=-1;
for(var i=0;i";
}
else
{
nfo="";
}
var spaceWidth = listItems[i].level*options.levelIndent,
li=$('',
{
'class':'ui-inputTreeList-item ui-inputTreeList-unselected-item',
html:""+nfo+"
"+listItems[i].name+"
",
itemId:listItems[i].id,
level:listItems[i].level,
css:{
'padding-left':spaceWidth+'px'
}
}
).bind('click.inputTreeList',
{object:object, expandArea: spaceWidth+options.iconWidthEC, nbchilds:listItems[i].childs.length },
function (event)
{
event.layerX=event.pageX-$(event.currentTarget).offset().left;
event.layerY=event.pageY-$(event.currentTarget).offset().top;
if(event.layerX0 )
{
if($(this).hasClass('ui-inputTreeList-expandable-item'))
{
$(this)
.removeClass('ui-inputTreeList-expandable-item')
.addClass('ui-inputTreeList-collapsable-item')
.next().show();
}
else
{
$(this)
.removeClass('ui-inputTreeList-collapsable-item')
.addClass('ui-inputTreeList-expandable-item')
.next().hide();
}
}
else
{
privateMethods.setValue(event.data.object, $(this).attr('itemId'), true);
if(options.multiple)
{
}
else
{
privateMethods.displaySelector(event.data.object, false);
}
}
if(options.multiple) objects.container.focus();
}
);
/*
if(listItems[i].childs.length>0)
{
li.addClass('ui-inputTreeList-collapsable-item').css('background-position', (options.levelIndent*listItems[i].level)+'px 0px');
}
*/
if(options.multiple)
{
li.children().prepend('');
}
parent.append(li);
if(listItems[i].childs.length>0)
{
li.addClass('ui-inputTreeList-expandable-item')
.children().prepend('');
var ul=$('',
{
'class':'ui-inputTreeList-group',
css: {
listStyle:'none',
padding:'0px',
margin:'0px',
'font-size':(100-listItems[i].level*2)+'%'
}
}
);
li.after(ul);
privateMethods.listAddItems(object, listItems[i].childs, ul);
}
else
{
li.css('padding-left', (spaceWidth+options.iconWidthEC)+'px');
}
}
}, // listAddItems
findIndexByValue : function (object, value)
{
/*
* search an item inside the items list and return the index
* in the array
*/
var properties=object.data('properties');
for(var i=0;i