--- /dev/null
+
+/*
+Copyright 2013 Marco Braak
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+ */
+var $, SimpleWidget,
+ slice = [].slice;
+
+$ = jQuery;
+
+SimpleWidget = (function() {
+ SimpleWidget.prototype.defaults = {};
+
+ function SimpleWidget(el, options) {
+ this.$el = $(el);
+ this.options = $.extend({}, this.defaults, options);
+ }
+
+ SimpleWidget.prototype.destroy = function() {
+ return this._deinit();
+ };
+
+ SimpleWidget.prototype._init = function() {
+ return null;
+ };
+
+ SimpleWidget.prototype._deinit = function() {
+ return null;
+ };
+
+ SimpleWidget.register = function(widget_class, widget_name) {
+ var callFunction, createWidget, destroyWidget, getDataKey, getWidgetData;
+ getDataKey = function() {
+ return "simple_widget_" + widget_name;
+ };
+ getWidgetData = function(el, data_key) {
+ var widget;
+ widget = $.data(el, data_key);
+ if (widget && (widget instanceof SimpleWidget)) {
+ return widget;
+ } else {
+ return null;
+ }
+ };
+ createWidget = function($el, options) {
+ var data_key, el, existing_widget, i, len, widget;
+ data_key = getDataKey();
+ for (i = 0, len = $el.length; i < len; i++) {
+ el = $el[i];
+ existing_widget = getWidgetData(el, data_key);
+ if (!existing_widget) {
+ widget = new widget_class(el, options);
+ if (!$.data(el, data_key)) {
+ $.data(el, data_key, widget);
+ }
+ widget._init();
+ }
+ }
+ return $el;
+ };
+ destroyWidget = function($el) {
+ var data_key, el, i, len, results, widget;
+ data_key = getDataKey();
+ results = [];
+ for (i = 0, len = $el.length; i < len; i++) {
+ el = $el[i];
+ widget = getWidgetData(el, data_key);
+ if (widget) {
+ widget.destroy();
+ }
+ results.push($.removeData(el, data_key));
+ }
+ return results;
+ };
+ callFunction = function($el, function_name, args) {
+ var el, i, len, result, widget, widget_function;
+ result = null;
+ for (i = 0, len = $el.length; i < len; i++) {
+ el = $el[i];
+ widget = $.data(el, getDataKey());
+ if (widget && (widget instanceof SimpleWidget)) {
+ widget_function = widget[function_name];
+ if (widget_function && (typeof widget_function === 'function')) {
+ result = widget_function.apply(widget, args);
+ }
+ }
+ }
+ return result;
+ };
+ return $.fn[widget_name] = function() {
+ var $el, args, argument1, function_name, options;
+ argument1 = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+ $el = this;
+ if (argument1 === void 0 || typeof argument1 === 'object') {
+ options = argument1;
+ return createWidget($el, options);
+ } else if (typeof argument1 === 'string' && argument1[0] !== '_') {
+ function_name = argument1;
+ if (function_name === 'destroy') {
+ return destroyWidget($el);
+ } else if (function_name === 'get_widget_class') {
+ return widget_class;
+ } else {
+ return callFunction($el, function_name, args);
+ }
+ }
+ };
+ };
+
+ return SimpleWidget;
+
+})();
+
+module.exports = SimpleWidget;