forked from morrning/hesabixCore
282 lines
7 KiB
JavaScript
282 lines
7 KiB
JavaScript
/*!
|
|
* jQuery UI Widget 1.8.22
|
|
*
|
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
* http://jquery.org/license
|
|
*
|
|
* http://docs.jquery.com/UI/Widget
|
|
*/
|
|
(function ($, undefined) {
|
|
// jQuery 1.4+
|
|
if ($.cleanData) {
|
|
var _cleanData = $.cleanData;
|
|
$.cleanData = function (elems) {
|
|
for (var i = 0, elem; (elem = elems[i]) != null; i++) {
|
|
try {
|
|
$(elem).triggerHandler('remove');
|
|
// http://bugs.jquery.com/ticket/8235
|
|
} catch (e) {}
|
|
}
|
|
_cleanData(elems);
|
|
};
|
|
} else {
|
|
var _remove = $.fn.remove;
|
|
$.fn.remove = function (selector, keepData) {
|
|
return this.each(function () {
|
|
if (!keepData) {
|
|
if (!selector || $.filter(selector, [this]).length) {
|
|
$('*', this)
|
|
.add([this])
|
|
.each(function () {
|
|
try {
|
|
$(this).triggerHandler('remove');
|
|
// http://bugs.jquery.com/ticket/8235
|
|
} catch (e) {}
|
|
});
|
|
}
|
|
}
|
|
return _remove.call($(this), selector, keepData);
|
|
});
|
|
};
|
|
}
|
|
|
|
$.widget = function (name, base, prototype) {
|
|
var namespace = name.split('.')[0],
|
|
fullName;
|
|
name = name.split('.')[1];
|
|
fullName = namespace + '-' + name;
|
|
|
|
if (!prototype) {
|
|
prototype = base;
|
|
base = $.Widget;
|
|
}
|
|
|
|
// create selector for plugin
|
|
$.expr[':'][fullName] = function (elem) {
|
|
return !!$.data(elem, name);
|
|
};
|
|
|
|
$[namespace] = $[namespace] || {};
|
|
$[namespace][name] = function (options, element) {
|
|
// allow instantiation without initializing for simple inheritance
|
|
if (arguments.length) {
|
|
this._createWidget(options, element);
|
|
}
|
|
};
|
|
|
|
var basePrototype = new base();
|
|
// we need to make the options hash a property directly on the new instance
|
|
// otherwise we'll modify the options hash on the prototype that we're
|
|
// inheriting from
|
|
// $.each( basePrototype, function( key, val ) {
|
|
// if ( $.isPlainObject(val) ) {
|
|
// basePrototype[ key ] = $.extend( {}, val );
|
|
// }
|
|
// });
|
|
basePrototype.options = $.extend(true, {}, basePrototype.options);
|
|
$[namespace][name].prototype = $.extend(
|
|
true,
|
|
basePrototype,
|
|
{
|
|
namespace: namespace,
|
|
widgetName: name,
|
|
widgetEventPrefix:
|
|
$[namespace][name].prototype.widgetEventPrefix || name,
|
|
widgetBaseClass: fullName,
|
|
},
|
|
prototype
|
|
);
|
|
|
|
$.widget.bridge(name, $[namespace][name]);
|
|
};
|
|
|
|
$.widget.bridge = function (name, object) {
|
|
$.fn[name] = function (options) {
|
|
var isMethodCall = typeof options === 'string',
|
|
args = Array.prototype.slice.call(arguments, 1),
|
|
returnValue = this;
|
|
|
|
// allow multiple hashes to be passed on init
|
|
options =
|
|
!isMethodCall && args.length
|
|
? $.extend.apply(null, [true, options].concat(args))
|
|
: options;
|
|
|
|
// prevent calls to internal methods
|
|
if (isMethodCall && options.charAt(0) === '_') {
|
|
return returnValue;
|
|
}
|
|
|
|
if (isMethodCall) {
|
|
this.each(function () {
|
|
var instance = $.data(this, name),
|
|
methodValue =
|
|
instance && $.isFunction(instance[options])
|
|
? instance[options].apply(instance, args)
|
|
: instance;
|
|
// TODO: add this back in 1.9 and use $.error() (see #5972)
|
|
// if ( !instance ) {
|
|
// throw "cannot call methods on " + name + " prior to initialization; " +
|
|
// "attempted to call method '" + options + "'";
|
|
// }
|
|
// if ( !$.isFunction( instance[options] ) ) {
|
|
// throw "no such method '" + options + "' for " + name + " widget instance";
|
|
// }
|
|
// var methodValue = instance[ options ].apply( instance, args );
|
|
if (methodValue !== instance && methodValue !== undefined) {
|
|
returnValue = methodValue;
|
|
return false;
|
|
}
|
|
});
|
|
} else {
|
|
this.each(function () {
|
|
var instance = $.data(this, name);
|
|
if (instance) {
|
|
instance.option(options || {})._init();
|
|
} else {
|
|
$.data(this, name, new object(options, this));
|
|
}
|
|
});
|
|
}
|
|
|
|
return returnValue;
|
|
};
|
|
};
|
|
|
|
$.Widget = function (options, element) {
|
|
// allow instantiation without initializing for simple inheritance
|
|
if (arguments.length) {
|
|
this._createWidget(options, element);
|
|
}
|
|
};
|
|
|
|
$.Widget.prototype = {
|
|
widgetName: 'widget',
|
|
widgetEventPrefix: '',
|
|
options: {
|
|
disabled: false,
|
|
},
|
|
_createWidget: function (options, element) {
|
|
// $.widget.bridge stores the plugin instance, but we do it anyway
|
|
// so that it's stored even before the _create function runs
|
|
$.data(element, this.widgetName, this);
|
|
this.element = $(element);
|
|
this.options = $.extend(
|
|
true,
|
|
{},
|
|
this.options,
|
|
this._getCreateOptions(),
|
|
options
|
|
);
|
|
|
|
var self = this;
|
|
this.element.bind('remove.' + this.widgetName, function () {
|
|
self.destroy();
|
|
});
|
|
|
|
this._create();
|
|
this._trigger('create');
|
|
this._init();
|
|
},
|
|
_getCreateOptions: function () {
|
|
return $.metadata && $.metadata.get(this.element[0])[this.widgetName];
|
|
},
|
|
_create: function () {},
|
|
_init: function () {},
|
|
|
|
destroy: function () {
|
|
this.element.off('.' + this.widgetName).removeData(this.widgetName);
|
|
this.widget()
|
|
.off('.' + this.widgetName)
|
|
.removeAttr('aria-disabled')
|
|
.removeClass(this.widgetBaseClass + '-disabled ' + 'ui-state-disabled');
|
|
},
|
|
|
|
widget: function () {
|
|
return this.element;
|
|
},
|
|
|
|
option: function (key, value) {
|
|
var options = key;
|
|
|
|
if (arguments.length === 0) {
|
|
// don't return a reference to the internal hash
|
|
return $.extend({}, this.options);
|
|
}
|
|
|
|
if (typeof key === 'string') {
|
|
if (value === undefined) {
|
|
return this.options[key];
|
|
}
|
|
options = {};
|
|
options[key] = value;
|
|
}
|
|
|
|
this._setOptions(options);
|
|
|
|
return this;
|
|
},
|
|
_setOptions: function (options) {
|
|
var self = this;
|
|
$.each(options, function (key, value) {
|
|
self._setOption(key, value);
|
|
});
|
|
|
|
return this;
|
|
},
|
|
_setOption: function (key, value) {
|
|
this.options[key] = value;
|
|
|
|
if (key === 'disabled') {
|
|
this.widget()
|
|
[value ? 'addClass' : 'removeClass'](
|
|
this.widgetBaseClass + '-disabled' + ' ' + 'ui-state-disabled'
|
|
)
|
|
.attr('aria-disabled', value);
|
|
}
|
|
|
|
return this;
|
|
},
|
|
|
|
enable: function () {
|
|
return this._setOption('disabled', false);
|
|
},
|
|
disable: function () {
|
|
return this._setOption('disabled', true);
|
|
},
|
|
|
|
_trigger: function (type, event, data) {
|
|
var prop,
|
|
orig,
|
|
callback = this.options[type];
|
|
|
|
data = data || {};
|
|
event = $.Event(event);
|
|
event.type = (
|
|
type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type
|
|
).toLowerCase();
|
|
// the original event may come from any element
|
|
// so we need to reset the target on the new event
|
|
event.target = this.element[0];
|
|
|
|
// copy original event properties over to the new event
|
|
orig = event.originalEvent;
|
|
if (orig) {
|
|
for (prop in orig) {
|
|
if (!(prop in event)) {
|
|
event[prop] = orig[prop];
|
|
}
|
|
}
|
|
}
|
|
|
|
this.element.trigger(event, data);
|
|
|
|
return !(
|
|
($.isFunction(callback) &&
|
|
callback.call(this.element[0], event, data) === false) ||
|
|
event.isDefaultPrevented()
|
|
);
|
|
},
|
|
};
|
|
})(jQuery); |