/*
* jquery ui @version
*
* copyright (c) 2008 paul bakaus (ui.jquery.com)
* dual licensed under the mit (mit-license.txt)
* and gpl (gpl-license.txt) licenses.
*
* http://docs.jquery.com/ui
*
* $date: 2008-05-04 16:52:15 +0200 (so, 04 mai 2008) $
* $rev: 5419 $
*/
;(function($) {
$.ui = {
plugin: {
add: function(module, option, set) {
var proto = $.ui[module].prototype;
for(var i in set) {
proto.plugins[i] = proto.plugins[i] || [];
proto.plugins[i].push([option, set[i]]);
}
},
call: function(instance, name, args) {
var set = instance.plugins[name];
if(!set) { return; }
for (var i = 0; i < set.length; i++) {
if (instance.options[set[i][0]]) {
set[i][1].apply(instance.element, args);
}
}
}
},
csscache: {},
css: function(name) {
if ($.ui.csscache[name]) { return $.ui.csscache[name]; }
var tmp = $('
').addclass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendto('body');
//if (!$.browser.safari)
//tmp.appendto('body');
//opera and safari set width and height to 0px instead of auto
//safari returns rgba(0,0,0,0) when bgcolor is not set
$.ui.csscache[name] = !!(
(!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) ||
!(/none/).test(tmp.css('backgroundimage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundcolor')))
);
try { $('body').get(0).removechild(tmp.get(0)); } catch(e){}
return $.ui.csscache[name];
},
disableselection: function(e) {
e.unselectable = "on";
e.onselectstart = function() { return false; };
if (e.style) { e.style.mozuserselect = "none"; }
},
enableselection: function(e) {
e.unselectable = "off";
e.onselectstart = function() { return true; };
if (e.style) { e.style.mozuserselect = ""; }
},
hasscroll: function(e, a) {
var scroll = /top/.test(a||"top") ? 'scrolltop' : 'scrollleft', has = false;
if (e[scroll] > 0) return true; e[scroll] = 1;
has = e[scroll] > 0 ? true : false; e[scroll] = 0;
return has;
}
};
/** jquery core modifications and additions **/
var _remove = $.fn.remove;
$.fn.remove = function() {
$("*", this).add(this).trigger("remove");
return _remove.apply(this, arguments );
};
// $.widget is a factory to create jquery plugins
// taking some boilerplate code out of the plugin code
// created by scott gonz谩lez and j枚rn zaefferer
function getter(namespace, plugin, method) {
var methods = $[namespace][plugin].getter || [];
methods = (typeof methods == "string" ? methods.split(/,?\s+/) : methods);
return ($.inarray(method, methods) != -1);
};
var widgetprototype = {
init: function() {},
destroy: function() {
this.element.removedata(this.widgetname);
},
getdata: function(key) {
return this.options[key];
},
setdata: function(key, value) {
this.options[key] = value;
},
enable: function() {
this.setdata('disabled', false);
},
disable: function() {
this.setdata('disabled', true);
}
};
$.widget = function(name, prototype) {
var namespace = name.split(".")[0];
name = name.split(".")[1];
// create plugin method
$.fn[name] = function(options, data) {
var ismethodcall = (typeof options == 'string'),
args = arguments;
if (ismethodcall && getter(namespace, name, options)) {
var instance = $.data(this[0], name);
return (instance ? instance[options](data) : undefined);
}
return this.each(function() {
var instance = $.data(this, name);
if (!instance) {
$.data(this, name, new $[namespace][name](this, options));
} else if (ismethodcall) {
instance[options].apply(instance, $.makearray(args).slice(1));
}
});
};
// create widget constructor
$[namespace][name] = function(element, options) {
var self = this;
this.widgetname = name;
this.options = $.extend({}, $[namespace][name].defaults, options);
this.element = $(element)
.bind('setdata.' + name, function(e, key, value) {
return self.setdata(key, value);
})
.bind('getdata.' + name, function(e, key) {
return self.getdata(key);
})
.bind('remove', function() {
return self.destroy();
});
this.init();
};
// add widget prototype
$[namespace][name].prototype = $.extend({}, widgetprototype, prototype);
};
/** mouse interaction plugin **/
$.widget("ui.mouse", {
init: function() {
var self = this;
this.element
.bind('mousedown.mouse', function() { return self.click.apply(self, arguments); })
.bind('mouseup.mouse', function() { (self.timer && clearinterval(self.timer)); })
.bind('click.mouse', function() { if(self.initialized) { self.initialized = false; return false; } });
//prevent text selection in ie
if ($.browser.msie) {
this.unselectable = this.element.attr('unselectable');
this.element.attr('unselectable', 'on');
}
},
destroy: function() {
this.element.unbind('.mouse').removedata("mouse");
($.browser.msie && this.element.attr('unselectable', this.unselectable));
},
trigger: function() { return this.click.apply(this, arguments); },
click: function(e) {
if( e.which != 1 //only left click starts dragging
|| $.inarray(e.target.nodename.tolowercase(), this.options.dragprevention || []) != -1 // prevent execution on defined elements
|| (this.options.condition && !this.options.condition.apply(this.options.executor || this, [e, this.element])) //prevent execution on condition
) { return true; }
var self = this;
this.initialized = false;
var initialize = function() {
self._mp = { left: e.pagex, top: e.pagey }; // store the click mouse position
$(document).bind('mouseup.mouse', function() { return self.stop.apply(self, arguments); });
$(document).bind('mousemove.mouse', function() { return self.drag.apply(self, arguments); });
if(!self.initalized && math.abs(self._mp.left-e.pagex) >= self.options.distance || math.abs(self._mp.top-e.pagey) >= self.options.distance) {
(self.options.start && self.options.start.call(self.options.executor || self, e, self.element));
(self.options.drag && self.options.drag.call(self.options.executor || self, e, this.element)); //this is actually not correct, but expected
self.initialized = true;
}
};
if(this.options.delay) {
if(this.timer) { clearinterval(this.timer); }
this.timer = settimeout(initialize, this.options.delay);
} else {
initialize();
}
return false;
},
stop: function(e) {
if(!this.initialized) {
return $(document).unbind('mouseup.mouse').unbind('mousemove.mouse');
}
(this.options.stop && this.options.stop.call(this.options.executor || this, e, this.element));
$(document).unbind('mouseup.mouse').unbind('mousemove.mouse');
return false;
},
drag: function(e) {
var o = this.options;
if ($.browser.msie && !e.button) {
return this.stop.call(this, e); // ie mouseup check
}
if(!this.initialized && (math.abs(this._mp.left-e.pagex) >= o.distance || math.abs(this._mp.top-e.pagey) >= o.distance)) {
(o.start && o.start.call(o.executor || this, e, this.element));
this.initialized = true;
} else {
if(!this.initialized) { return false; }
}
(o.drag && o.drag.call(this.options.executor || this, e, this.element));
return false;
}
});
})(jquery);