diff options
Diffstat (limited to 'gum/static/js/libs/gumby.js')
-rw-r--r-- | gum/static/js/libs/gumby.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/gum/static/js/libs/gumby.js b/gum/static/js/libs/gumby.js new file mode 100644 index 0000000..49b08ac --- /dev/null +++ b/gum/static/js/libs/gumby.js @@ -0,0 +1,145 @@ +/** +* Gumby Framework +* --------------- +* +* Follow @gumbycss on twitter and spread the love. +* We worked super hard on making this awesome and released it to the web. +* All we ask is you leave this intact. #gumbyisawesome +* +* Gumby Framework +* http://gumbyframework.com +* +* Built with love by your friends @digitalsurgeons +* http://www.digitalsurgeons.com +* +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +*/ +!function() { + + 'use strict'; + + function Gumby() { + this.$dom = $(document); + this.isOldie = !!this.$dom.find('html').hasClass('oldie'); + this.click = 'click'; + this.onReady = this.onOldie = this.onTouch = false; + this.uiModules = {}; + this.inits = {}; + } + + // initialize Gumby + Gumby.prototype.init = function() { + // init UI modules + this.initUIModules(); + + var scope = this; + + // call ready() code when dom is ready + this.$dom.ready(function() { + if(scope.onReady) { + scope.onReady(); + } + + // call oldie() callback if applicable + if(scope.isOldie && scope.onOldie) { + scope.onOldie(); + } + + // call touch() callback if applicable + if(Modernizr.touch && scope.onTouch) { + scope.onTouch(); + } + }); + }; + + // public helper - set Gumby ready callback + Gumby.prototype.ready = function(code) { + if(code && typeof code === 'function') { + this.onReady = code; + } + }; + + // public helper - set oldie callback + Gumby.prototype.oldie = function(code) { + if(code && typeof code === 'function') { + this.onOldie = code; + } + }; + + // public helper - set touch callback + Gumby.prototype.touch = function(code) { + if(code && typeof code === 'function') { + this.onTouch = code; + } + }; + + // public helper - return debuggin object including uiModules object + Gumby.prototype.debug = function() { + return { + $dom: this.$dom, + isOldie: this.isOldie, + uiModules: this.uiModules, + click: this.click + }; + }; + + + // grab attribute value, testing data- gumby- and no prefix + Gumby.prototype.selectAttr = function() { + var i = 0; + + // any number of attributes can be passed + for(; i < arguments.length; i++) { + // various formats + var attr = arguments[i], + dataAttr = 'data-'+arguments[i], + gumbyAttr = 'gumby-'+arguments[i]; + + // first test for data-attr + if(this.attr(dataAttr)) { + return this.attr(dataAttr); + + // next test for gumby-attr + } else if(this.attr(gumbyAttr)) { + return this.attr(gumbyAttr); + + // finally no prefix + } else if(this.attr(attr)) { + return this.attr(attr); + } + } + + // none found + return false; + }; + + // add an initialisation method + Gumby.prototype.addInitalisation = function(ref, code) { + this.inits[ref] = code; + }; + + // initialize a uiModule + Gumby.prototype.initialize = function(ref) { + if(this.inits[ref] && typeof this.inits[ref] === 'function') { + this.inits[ref](); + } + }; + + // store a UI module + Gumby.prototype.UIModule = function(data) { + var module = data.module; + this.uiModules[module] = data; + }; + + // loop round and init all UI modules + Gumby.prototype.initUIModules = function() { + var x; + for(x in this.uiModules) { + this.uiModules[x].init(); + } + }; + + window.Gumby = new Gumby(); + +}(); |