forked from C2FO/thumbs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththumbs.min.js
More file actions
1 lines (1 loc) · 12.3 KB
/
thumbs.min.js
File metadata and controls
1 lines (1 loc) · 12.3 KB
1
(function(){function defineThumbs(Backbone,_){function argsToArray(t){return slice.call(t,0)}function splitParts(t,e){return _.each(t.split(thumbs.MULTI_ARG_TOKEN),function(t){e(_.map(t.split(thumbs.KEY_VALUE_TOKEN),function(t){return $.trim(t)}))})}function setElData(t,e,i){var s;if((s=t.attr("thumbs-id"))&&(t=viewRegistry.get(s)||t),i)if("function"==typeof t[i])t[i](e);else if(t.attr)t.attr(i,e);else{if(!(t instanceof View))throw Error("unable to determine how to set data on "+t);t[i]=e}else if(t.is&&t.is("input"))t.is("[type=checkbox], [type=radio]")?t.attr("checked",e):t.val(e);else if(t instanceof View&&t.val)t.val(e);else{if(!t.text)throw Error("unable to determine how to set data on "+t);t.text(e)}}function extend(){var t=_extend.apply(this,arguments);return t.prototype.__getConstructor=function(){return t},t}function Class(){this.cid=_.uniqueId("class"),this.initialize.apply(this,arguments)}var root=this,ArrayProto=Array.prototype,slice=ArrayProto.slice,thumbs={};_.extend(thumbs,Backbone),thumbs.VERSION="0.0.1",thumbs.MULTI_ARG_TOKEN=/ +/,thumbs.KEY_VALUE_TOKEN=":";var Model=thumbs.Model,View=thumbs.View,Collection=thumbs.Collection,Router=thumbs.Router,History=thumbs.History,viewRegistry=thumbs.viewRegistry=function(){function t(t){return"string"==typeof t?o[t]:t}function e(t){return t?o[t.thumbsId||t.getAttribute("thumbs-id")]:void 0}function i(){return _.values(o)}function s(){return _.uniqueId("thumbs_view_")}function n(t){function e(t){var e,s,n;for(s=t.firstChild;s;s=s.nextSibling)1===s.nodeType&&(e=s.getAttribute("thumbs-id"))&&(n=o[e])&&i.push(n)}var i=[];return e(t),i}function r(t){var e=t.thumbsId;if(o.hasOwnProperty(e))throw Error("Tried to register view with id "+e+" but that id is already registered");e&&(o[e]=t,a++)}function u(t){o.hasOwnProperty(t)&&(delete o[t],a--)}function h(t){for(var e,i=t;i;){if(i!==t&&(e=1===i.nodeType&&i.getAttribute("thumbs-id")))return o[e];i=i.parentNode}return null}var o={},a=0;return{_hash:o,getEnclosingView:h,remove:u,add:r,get:t,uniqueId:s,getSubViews:n,getByNode:e,toArray:i}}();thumbs.viewById=viewRegistry.get,thumbs.viewByNode=viewRegistry.getByNode;var _super={_super:function _super(){function t(t,e){for(var i=e;i[t]===e[t]&&i.__getConstructor;){var s=i.__getConstructor();i=s.__super__}return i}return function(e,i){this._superCallObjects||(this._superCallObjects={});var s=this._superCallObjects[e]||this,n=t(e,s);this._superCallObjects[e]=n;var r=n[e].apply(this,i||[]);return delete this._superCallObjects[e],r}}()},_extend=thumbs.Model.extend;_.extend(Class.prototype,thumbs.Events,_super,{initialize:function(){}}),thumbs.Class=Class,Class.extend=Model.extend=View.extend=Collection.extend=Router.extend=History.extend=extend,Model=thumbs.Model=Model.extend(_super),View=thumbs.View=View.extend(_super),Collection=thumbs.Collection=Collection.extend(_super),Router=thumbs.Router=Router.extend(_super),History=thumbs.History=History.extend(_super);var EventDelegator={render:function(){return this._super("render",arguments),this.checkForEvents(),this},checkForEvents:function(){var t=this;return this.events=this.events||{},this.$("[data-thumbs-delegate]").each(function(){var e=viewRegistry.get($(this).attr("thumbs-id"));if(viewRegistry.getEnclosingView(this)===t){var i=$(this),s=_.uniqueId("thumbs_");i.addClass(s),splitParts(i.data("thumbs-delegate"),function(i){var n=i[0],r=i[1];t.events[n+" ."+s]=r,e&&t.listenTo(e,n,t[r])})}}),this.delegateEvents(),this}},Identifier={__identifiers:null,initialize:function(){this.__identifiers=[],this._super("initialize",arguments)},removeIdentifiers:function(){_.each(this.__identifiers,function(t){this[t]=this["$"+t]=null},this),this.__identifiers=[]},checkForIdentifiers:function(){var t=this;return this.removeIdentifiers(),this.$("[data-thumbs-id]").each(function(){if(viewRegistry.getEnclosingView(this)===t){var e=$(this),i=e.data("thumbs-id");t[i]=this,t["$"+i]=viewRegistry.getByNode(this)||e,t.__identifiers.push(i)}}),this},render:function(){return this._super("render",arguments),this.checkForIdentifiers(),this},remove:function(){return this.removeIdentifiers(),this._super("remove",arguments)}},Binder={__monitors:null,__events:null,initialize:function(){this._super("initialize",arguments),this.__monitors={},this.__events={},_.bindAll(this,"setElData","__updateValues","__setValues","setupType","setupBind","setupClassBind","setupEventBind","findThumbsBind","turnOnModelListeners","turnOffModelListeners","setupBinders")},__updateValues:function(){return this.model&&this.model instanceof Model?this.__setValues(this.model.changedAttributes()):void 0},__setValues:function(t){var e=this.__monitors;return e&&_.each(t,function(t,i){var s=e[i];s&&_.each(s,function(e){e(t)})}),this},setElData:function(t,e,i){this.checkFormatting(t,e,i)},setupType:function(t,e,i){var s=this.__monitors;t in s||(s[t]=[]);var n=this.setElData;s[t].push(function(s){"function"==typeof e?e(s,t):n(e,s,i,t)})},setupBind:function(t){if(viewRegistry.getEnclosingView(t)===this){var e=$(t),i=this.setupType;splitParts(e.data("thumbs-bind"),function(e){if(1===e.length)i(e[0],t);else{if(2!==e.length)throw new TypeError("Invalid data-thumbs-bind definition");i(e[1],t,e[0])}})}},setupClassBind:function(t){if(viewRegistry.getEnclosingView(t)===this){var e=$(t),i=this.setupType;splitParts(e.data("thumbs-bind-class"),function(t){if(2!==t.length)throw new TypeError("Invalid data-thumbs-bind-class definition");var s=t[0];i(t[1],function(t){e.toggleClass(s,t)})})}},setupEventBind:function(t){if(viewRegistry.getEnclosingView(t)===this){var e=this.__events,i=$(t),s=this;splitParts(i.data("thumbs-bind-event"),function(t){if(2!==t.length)throw new TypeError("Invalid data-thumbs-bind-class definition");var i=t[0],n=e[i];n||(n=e[i]=[]),n.push(s[t[1]])})}},findThumbsBind:function(){var t=this.setupBind,e=this.setupClassBind,i=this.setupEventBind;return this.$("[data-thumbs-bind]").each(function(){t(this)}),this.$("[data-thumbs-bind-event]").each(function(){i(this)}),this.$("[data-thumbs-bind-class]").each(function(){e(this)}),this.$el.is("[data-thumbs-bind]")&&t(this.el),this.$el.is("[data-thumbs-bind-class]")&&e(this.el),this.$el.is("[data-thumbs-bind-event]")&&i(this.el),this},turnOnModelListeners:function(){var t=this.model||this.collection;if(t){var e=this.__monitors,i=this.__events;e&&_.each(this.__monitors,function(e,i){e.fn=function(t,i){_.each(e,function(t){t.apply(this,[i])},this)},t.on("change:"+i,e.fn,this)},this),i&&_.each(this.__events,function(e,i){e.fn=function(){var t=arguments;_.each(e,function(e){e.apply(this,t)},this)},t.on(i,e.fn,this)},this)}return this},turnOffModelListeners:function(){var t=this.model||this.collection;if(t){var e=this.__monitors,i=this.__events;e&&_.each(this.__monitors,function(e,i){t.off("change:"+i,e.fn,this)},this),i&&_.each(this.__events,function(e,i){t.off(i,e.fn,this)},this)}return this},setupBinders:function(){var t=this.model||this.collection;return this.turnOffModelListeners().findThumbsBind().turnOnModelListeners(),t&&this.__setValues(t.attributes),this},render:function(){return this._super("render",arguments),this.setupBinders(),this},remove:function(){return this.turnOffModelListeners(),this.__monitors={},this.__events={},this._super("remove",arguments)}},Formatter={checkFormatting:function(t,e,i){var s=this.$(t),n=argsToArray(arguments);e=n.length>1?e:s.text(),e=null!==e&&e!==void 0?e:"";var r=s.data("thumbs-format");splitParts(r||"",function(t){2===t.length?(i=t[0],r=t[1]):r=t.pop()}),r&&"function"==typeof this[r]&&(e=this[r](e)),setElData(s,e,i)},renderFormatters:function(){var t=_.bind(this.checkFormatting,this);return this.$("[data-thumbs-format]").each(function(){t(this)}),this},render:function(){return this._super("render",arguments),this.renderFormatters()}},ElFinder={findEl:function(){var t=_.bind(this.setElement,this),e=this.$("[data-thumbs-el]").first().get();return e.length&&(e=e[0],e!==this.el&&t(e)),this},render:function(){return this.findEl()._super("render",arguments)}},Subview={_subviews:null,initialize:function(){this._super("initialize",arguments),this.__subviews=[]},render:function(){return this.checkForSubviews(),this._super("render",arguments),this},remove:function(){return this.__subviews.length&&(_.each(this.__subviews,function(t){t.remove()}),this.__subviews.length=0),this._super("remove",arguments)},_parseViewArgs:function(args){var ret={};if(args)try{_.extend(ret,eval("with(this){({"+args+"})}"))}catch(e){throw Error("Unable to parse data-thumbs-args : "+args+" : "+(""+e))}return ret},renderSubviewView:function(t){var e,i=null,s=$(t),n=s.data("thumbs-view");if(!n||!(i=this[n]))throw Error("Unable to find "+n+" on view");var r=this._parseViewArgs(s.data("thumbs-args"));_.extend(r,{el:t});var u=new i(r);return u.render(),this.__subviews.push(u),(e=s.data("thumbs-id"))&&(this["$"+e]=u),this},checkForSubviews:function(){var t=this;this.$("[data-thumbs-view]").each(function(){t.renderSubviewView(this)})}};return thumbs.templater=function(){var t=_.template;return function(e){return e?t=e:t}}(),thumbs.Router=Router.extend({preRoutes:null,_bindRoutes:function(){this.preBind&&_.isFunction(this.preBind)&&this.preBind(),this._super("_bindRoutes",arguments)},route:function(t){return thumbs.history&&(Backbone.history=thumbs.history),this._super("route",arguments),this.setupPreRoute("all",t),this.setupPreRoute(null,t),this},setupPreRoute:function(t,e){var i;if(t?i="pre-route_"+t+e:(t=e,i="pre-route_"+e),this.preRoutes&&this.preRoutes[t]){var s;if(_.isFunction(this.preRoutes[t]))s=this.preRoutes[t];else if(_.isString(this.preRoutes[t]))s=this[this.preRoutes[t]];else{if(!_.isArray(this.preRoutes[t]))throw"Pre-Route must be a string or a function.";var n=this.preRoutes[t];s=_.bind(function(){for(var t=!0,e=0;n.length>e&&(t=n[e].apply(this),t);e++);return t},this)}_.isRegExp(i)||(i=this._routeToRegExp(i)),thumbs.history.route(i,_.bind(function(){return s.apply(this)},this))}}}),View=thumbs.View=View.extend(ElFinder).extend(Formatter).extend(Identifier).extend(Binder).extend(EventDelegator).extend(Subview).extend({_subviews:null,initialize:function(){this.thumbsId=viewRegistry.uniqueId(),viewRegistry.add(this),this._super("initialize",arguments),this._subviews={},this.$el&&this.$el.attr("thumbs-id",this.thumbsId)},setElement:function(){return this._super("setElement",arguments),this.el?this.$el.attr("thumbs-id",this.thumbsId):viewRegistry.remove(this.thumbsId),this},addSubView:function(t,e){return e&&(this.removeSubView(t),this._subviews[t]=e,e.setElement(this.$(t)).render()),this},removeSubView:function(t){var e=this._subviews[t];return e&&(e.setElement(null),e.remove(),this.$(t).empty(),this._subviews[t]=null),this},removeSubViews:function(){return _.each(this._subviews,function(t,e){this.removeSubView(e)},this),this},render:function(){return this._super("render",arguments),this.assign(this._subviews)},assign:function(t,e){var i;return _.isObject(t)?i=t:t&&(i={},i[t]=e),i&&_.each(i,function(t,e){this.addSubView(e,t)},this),this},remove:function(){return this.removeSubViews(),this.stopListening(),this._super("remove",arguments)}}),thumbs.TemplateView=View.extend({templater:null,template:null,initialize:function(){this._super("initialize",arguments),this.templater||(this.templater=thumbs.templater()),this.template&&(this._template=this.templater(this.template))},getTemplateData:function(){return this.model||this.collection?(this.model||this.collection).toJSON():{}},fillTemplate:function(t){return this._template?this._template(t||this.getTemplateData()):null},renderTemplate:function(){if(this._template){var t=this.fillTemplate();t&&this.$el.html(t)}return this},render:function(){return this.renderTemplate()._super("render",arguments)}}),History=thumbs.History=History.extend({notFoundRedirect:null,checkPreRouteHandler:function(t,e,i){var s=!0,n=_.find(t,function(t){return t.route.test(e+i)});return n&&n.callback&&(s=n.callback(i)),s},loadUrl:function(t){var e=this.fragment=this.getFragment(t),i=this.checkPreRouteHandler(this.handlers,"pre-route_all",e);return i&&(i=this.checkPreRouteHandler(this.handlers,"pre-route_",e)),i&&(i=this._super("loadUrl",arguments),i||this.options.notFoundRedirect&&(this.navigate(this.options.notFoundRedirect,{trigger:!0}),i=!0)),i}}),thumbs.history=new History,thumbs}"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports&&(module.exports=defineThumbs(Backbone||require("backbone"),_||require("underscore"))):"function"==typeof define?define(["require"],function(t){return defineThumbs(t("backbone"),t("underscore"))}):this.thumbs=defineThumbs(Backbone,_)}).call(this);