2 // http://alexsexton.com/blog/2010/02/using-inheritance-patterns-to-organize-large-jquery-applications/
3 // We will use John Resig's proposal
5 // http://pastie.org/517177
7 // NOTE: missing a destroy function
9 $.plugin = function(name, object) {
10 $.fn[name] = function(options) {
11 var args = Array.prototype.slice.call(arguments, 1);
12 return this.each(function() {
13 var instance = $.data(this, name);
15 instance[options].apply(instance, args);
17 instance = $.data(this, name, new object(options, this));
23 var Plugin = Class.extend({
25 init: function(options, element)
27 // Mix in the passed in options with the default options
28 this.options = $.extend({}, this.default_options, options);
30 // Save the element reference, both as a jQuery
31 // reference and a normal reference
32 this.element = element;
33 this.$element = $(element);
35 // return this so we can chain/use the bridge with less code.
39 has_query_handler: function() {
40 return (typeof this.on_filter_added === 'function');
43 _query_handler: function(e, event_type, data)
45 // We suppose this.query_handler_prefix has been defined if this
46 // callback is triggered
53 fn = 'filter_removed';
71 fn = 'on_' + this.query_handler_prefix + fn;
72 if (typeof this[fn] === 'function') {
73 // call with data as parameter
74 // XXX implement anti loop
79 listen_query: function(query_uuid, prefix) {
80 this.query_handler_prefix = (typeof prefix === 'undefined') ? '' : (prefix + '_');
81 this.$element.on(manifold.get_query_channel(query_uuid), $.proxy(this._query_handler, this));
88 var ret = this.options.plugin_uuid;
89 for (var i = 0; i < arguments.length; i++) {
90 ret = ret + manifold.separator + arguments[i];
97 if (arguments.length == 0) {
98 return $('#' + this.id());
100 // We make sure to search _inside_ the dom tag of the plugin
101 return $('#' + this.id.apply(this, arguments), this.el());
107 return $('.' + cls, this.el());
110 id_from_filter: function(filter, use_value)
112 use_value = typeof use_value !== 'undefined' ? use_value : true;
116 var value = filter[2];
117 var op_str = this.getOperatorLabel(op);
118 var s = manifold.separator;
121 return 'filter' + s + key + s + op_str + s + value;
123 return 'filter' + s + key + s + op_str;
127 str_from_filter: function(filter)
129 return filter[0] + ' ' + filter[1] + ' ' + filter[2];