steal('jquery/controller/controller_core.js', function (){ var i, isAControllerOf = function (instance, controllers){ for (i = 0; i < _AN_Read_length('length', controllers); i++ ){ if (typeof controllers[i] == 'string'? instance.constructor._shortName == controllers[i]: instance instanceof controllers[i]) { return true ; } } return false ; } , data = function (el, data){ return $.data(el, "controllers", data); } , makeArray = $.makeArray; $.fn.extend({ controllers: function (){ var controllerNames = makeArray(arguments), instances = [] , controllers, c, cname; this.each(function (){ controllers = $.data(this, "controllers"); for (cname in controllers){ if (controllers.hasOwnProperty(cname)) { c = controllers[cname]; if (!_AN_Read_length("length", controllerNames) || isAControllerOf(c, controllerNames)) { instances.push(c); } } } } ); return instances; } , controller: function (controller){ return this.controllers.apply(this, arguments)[0]; } } ); $.Controller.plugin = function (pluginname){ var controller = this; if (!$.fn[pluginname]) { $.fn[pluginname] = function (options){ var args = makeArray(arguments), isMethod = typeof options == "string" && $.isFunction(controller.prototype[options]), meth = args[0]; return this.each(function (){ var controllers = data(this), plugin = controllers && controllers[pluginname]; if (plugin) { if (isMethod) { plugin[meth].apply(plugin, args.slice(1)); } else { plugin.update.apply(plugin, args); } } else { controller.newInstance.apply(controller, [this] .concat(args)); } } ); } ; } } ; } );