/**
* -----------------------------------------------------------------------------
* file: ui.inputPosition.js
* file version: 1.0.0
* date: 2010-11-05
*
* A jQuery plugin provided by the piwigo's plugin "GrumPluginClasses"
*
* -----------------------------------------------------------------------------
* Author : Grum
* email : grum@piwigo.com
* website : http://photos.grum.fr
* PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
*
* << May the Little SpaceFrog be with you ! >>
* -----------------------------------------------------------------------------
*
*
*
*
* :: HISTORY ::
*
* | release | date |
* | 1.0.0 | 2010/10/10 | first release
* | | |
* | | |
* | | |
* | | |
* | | |
* | | |
*
*/
(
function($)
{
/*
* plugin 'public' functions
*/
var publicMethods =
{
init : function (opt)
{
return this.each(function()
{
// default values for the plugin
var $this=$(this),
data = $this.data('options'),
objects = $this.data('objects'),
properties = $this.data('properties'),
options =
{
disabled:false,
width:0,
height:0,
values:['center', 'corners', 'sides'],
change:null
};
// if options given, merge it
// if(opt) $.extend(options, opt); ==> options are set by setters
$this.data('options', options);
if(!properties)
{
$this.data('properties',
{
initialized:false,
value:'',
isValid:true,
radioH:0,
radioW:0
}
);
properties=$this.data('properties');
}
if(!objects)
{
objects =
{
container:$('
',
{
'class':'ui-inputPosition',
css:{
width:'100%'
}
}
),
radios:
{
corners:[],
sides:[],
center:[]
}
};
var name=$this.get(0).id,
values=['TL', 'TR', 'BR', 'BL'];
for(var i=0;i',
{
type:'radio',
id:name+values[i],
name:'ip_'+name,
value:values[i],
group:'corners'
}
).appendTo(objects.container)
);
}
values=['T', 'L', 'B', 'R'];
for(var i=0;i',
{
type:'radio',
id:name+values[i],
name:'ip_'+name,
value:values[i],
group:'sides'
}
).appendTo(objects.container)
)
}
values=['C'];
for(var i=0;i',
{
type:'radio',
id:name+values[i],
name:'ip_'+name,
value:values[i],
group:'center'
}
).appendTo(objects.container)
)
}
objects.container.find('input').bind('click',
function (event)
{
privateMethods.setValue($this, $(this).attr('value'), false);
}
);
$this
.html('')
.append(objects.container);
properties.radioW=objects.container.find('input').first().outerWidth()/2;
properties.radioH=objects.container.find('input').first().outerHeight()/2;
$this.css('padding', properties.radioH+'px '+properties.radioW+'px');
$this.data('objects', objects);
}
privateMethods.setOptions($this, opt);
}
);
}, // init
destroy : function ()
{
return this.each(
function()
{
// default values for the plugin
var $this=$(this),
objects = $this.data('objects');
objects.input.unbind().remove();
objects.container.unbind().remove();
$this
.unbind('.inputPosition')
.css(
{
width:'',
height:''
}
);
}
);
}, // destroy
options: function (value)
{
return this.each(function()
{
privateMethods.setOptions($(this), value);
}
);
}, // options
disabled: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setDisabled($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.disabled);
}
else
{
return('');
}
}
}, // disabled
width: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setWidth($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.width);
}
else
{
return('');
}
}
}, // width
height: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setHeight($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.height);
}
else
{
return('');
}
}
}, // width
values: function (value)
{
if(value!=null)
{
return this.each(function()
{
privateMethods.setValues($(this), value);
}
);
}
else
{
var options = this.data('options');
if(options)
{
return(options.values);
}
else
{
return('');
}
}
}, // values
value: function (value)
{
if(value!=null)
{
// set selected value
return this.each(function()
{
privateMethods.setValue($(this), value, true);
}
);
}
else
{
// return the selected tags
var properties=this.data('properties');
return(properties.value);
}
}, // value
isValid: function (value)
{
if(value!=null)
{
// set selected value
return this.each(function()
{
privateMethods.setIsValid($(this), value);
}
);
}
else
{
// return the selected tags
var properties=this.data('properties');
return(properties.isValid);
}
}, // isValid
change: function (value)
{
if(value!=null && $.isFunction(value))
{
// set selected value
return this.each(function()
{
privateMethods.setEventChange($(this), value);
}
);
}
else
{
// return the selected value
var options=this.data('options');
if(options)
{
return(options.change);
}
else
{
return(null);
}
}
} // change
}; // 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.setValues(object, (value.values!=null)?value.values:options.values);
privateMethods.setHeight(object, (value.height!=null)?value.height:options.height, true);
privateMethods.setWidth(object, (value.width!=null)?value.width:options.width, true);
privateMethods.setValue(object, (value.value!=null)?value.value:options.value, true);
privateMethods.setDisabled(object, (value.disabled!=null)?value.disabled:options.disabled);
privateMethods.setEventChange(object, (value.change!=null)?value.change:options.change);
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');
objects.input.removeClass('ui-error');
}
else
{
objects.container.addClass('ui-error');
objects.input.addClass('ui-error');
}
}
return(properties.isValid);
},
setDisabled : function (object, value)
{
var options=object.data('options'),
properties=object.data('properties');
if((!properties.initialized || options.disabled!=value) && (value==true || value==false))
{
options.disabled=value;
}
return(options.disabled);
},
setHeight : function (object, value)
{
var options=object.data('options'),
objects=object.data('objects'),
properties=object.data('properties');
if((!properties.initialized || options.height!=value) && value>=0)
{
if(value==0)
{
options.height=value;
objects.container.css('height', '100%');
}
else
{
options.height=value;
objects.container.css('height', options.height+'px');
}
}
privateMethods.setRadioPosition(object);
return(options.height);
}, //setHeight
setWidth : function (object, value)
{
var options=object.data('options'),
objects=object.data('objects'),
properties=object.data('properties');
if((!properties.initialized || options.width!=value) && value>=0)
{
if(value==0)
{
options.width=value;
objects.container.css('width', '100%');
}
else
{
options.width=value;
objects.container.css('width', options.width+'px');
}
privateMethods.setRadioPosition(object);
}
return(options.width);
}, //setWidth
setValues : function (object, value)
{
var options=object.data('options'),
objects=object.data('objects');
if(!$.isArray(value)) value=[value];
options.values=[];
object.find('input').hide();
for(var i=0;i-1 && value=='C') ||
($.inArray('corners', options.values)>-1 && (value=='TL' || value=='TR' || value=='BR' || value=='BL')) ||
($.inArray('sides', options.values)>-1 && (value=='L' || value=='R' || value=='B' || value=='T'))
)
) return(false);
properties.value=value;
if(apply)
{
switch(properties.value)
{
case 'TL':
objects.radios.corners[0].attr('checked', true);
break;
case 'TR':
objects.radios.corners[1].attr('checked', true);
break;
case 'BR':
objects.radios.corners[2].attr('checked', true);
break;
case 'BL':
objects.radios.corners[3].attr('checked', true);
break;
case 'T':
objects.radios.sides[0].attr('checked', true);
break;
case 'L':
objects.radios.sides[1].attr('checked', true);
break;
case 'B':
objects.radios.sides[2].attr('checked', true);
break;
case 'R':
objects.radios.sides[3].attr('checked', true);
break;
case 'C':
objects.radios.center[0].attr('checked', true);
break;
}
}
if(options.change) object.trigger('inputPositionChange', properties.value);
return(true);
}, //setValue
setEventChange : function (object, value)
{
var options=object.data('options');
options.change=value;
object.unbind('inputPositionChange');
if(value) object.bind('inputPositionChange', options.change);
return(options.change);
},
setRadioPosition : function (object)
{
var options=object.data('options'),
objects=object.data('objects'),
properties=object.data('properties');
if($.inArray('center', options.values)>-1)
{
objects.radios.center[0].css(
{
'margin-left':(options.width/2-properties.radioW)+'px',
'margin-top':(options.height/2-properties.radioH)+'px'
}
);
}
if($.inArray('corners', options.values)>-1)
{
for(var i=0;i-1)
{
w=objects.radios.sides[0].width();
h=objects.radios.sides[0].height();
for(var i=0;i