lib/jquery.shining.js in shining-1.1.8 vs lib/jquery.shining.js in shining-1.2.0

- old
+ new

@@ -11,12 +11,15 @@ } }, all: function() { return this._slides }, first: function() { return this._slides[0] }, last: function() { return this._slides[ this._slides.length - 1 ] }, - next: function() { return this._slides[ this._slides.indexOf(this.current()) + 1 ] }, - previous: function() { + next: function() { + window.sli = this._slides; + return this._slides[ this._slides.indexOf(this.current()) + 1 ] + }, + previous: function() { var previous = this._slides[ this._slides.indexOf(this.current()) - 1 ]; return previous ? previous : this.first(); }, add: function(slides) { return Array.prototype.push.apply(this._slides, slides) }, loaded: function(name) { return !!$.shining.slides._loaded[name] }, @@ -70,95 +73,93 @@ enter(); setTimeout(leave, 200); break; } } - + function slice() { var width = $('#stage').width() / 10; for (var i = 0; i <= 10; i++) { $('#stage').append( $('<div class="slice"></div>').css({ backgroundColor: $('body').css('background-color'), left: (i * width) - 10 }).delay(i * 100).animate({width: width + 1}) ); - } + } } - + function unslice() { var reversed = Array.prototype.reverse.call($('#stage .slice')); for (var i = 0; i < reversed.length; i++) { $(reversed[i]).delay(i * 100).animate({width: '0'}) } } - + String.prototype.markup = function() { return this + '.html' }; String.prototype.script = function() { return this + '.js' }; String.prototype.style = function() { return this + '.css' }; - + var KEY = { SPACE: 32, RIGHT: 39, LEFT: 37 }; - $.fn.effect = function(name) { return this.each(function() { applyEffect(this, name) }); } + $.fn.effect = function(name) { return this.each(function() { applyEffect(this, name) }); }; $.fn.hasClasses = function(classes) { var classes = classes.split(/\s+/), yes = true, element = this.get(0); for (var i = 0; i < classes.length && yes; i++) { yes = $(element).hasClass(classes[i]) } return yes; } $.extend($.shining, { firstSlide: function() { getSlide($.shining.slides.first()) }, lastSlide: function() { getSlide($.shining.slides.last() ) }, - nextSlide: function() { + nextSlide: function() { if ($.shining.slides.next()) { document.location.hash = $.shining.slides.next(); trigger('next'); } }, - previousSlide: function() { + previousSlide: function() { if ($.shining.slides.previous()) { document.location.hash = $.shining.slides.previous(); trigger('previous'); } }, - getSlide: function(slide) { getSlide(slide) } + getSlide: function(slide) { getSlide(slide) }, + help: help }); var FILTERS = { // reads: "fades-out" can be achieved by removing "fades-in" if the element hasClass "transparent" 'fades-out': { remove: 'fades-in', when: 'fades-in transparent' } } function init() { $(document).ready(function() { + $(window).resize(function() { $('#stage').centralize() }); $('#stage').centralize(); + bindKeys(); + loadConfig(function() { + var startAt = document.location.hash.replace('#', ''), + first = startAt ? startAt : $.shining.slides.current(); + loadSlide(first, function() { playSlide(first) }); + if (!local() && !($.shining.config.help == false)) preloadSlides(); + setTitle($.shining.config.title); + setTheme($.shining.config.theme); + trigger('init.shining'); + help('← (previous slide), → or SPACE BAR (next slide)', 3000); + }); }); - $(window).resize(function() { $('#stage').centralize() }); - bindKeys(); - loadConfig(function() { - var startAt = document.location.hash.replace('#', ''), - firstSlide = startAt ? startAt : $.shining.slides.current(); - loadSlide(firstSlide, function() { playSlide(firstSlide) }); - if (!local() && !$.shining.config.preventPreload) preloadSlides(); - setTitle($.shining.config.title); - setTheme($.shining.config.theme); - parseEffects(); - trigger('init.shining'); - help('← (previous slide), → or SPACE BAR (next slide)', 3000); - }); } - + function trigger(event, data) { $(document).trigger(event + '.shining', data); } - + function bind(event, method) { $(document).bind(event + '.shining', method); } - - $.shining.help = help; - + function applyEffect(element, name) { if (name in FILTERS) { if ($(element).hasClasses(FILTERS[name].when)) $(element).removeClass(FILTERS[name].remove) } else { $(element).addClass(name); @@ -168,18 +169,18 @@ function getSlide(name) { if (!name) return false; applyTransition( function() { loadSlide(name, function() { playSlide(name) }) }, function() { - $.shining.scripts.run($.shining.slides._loaded[$.shining.slides.current()].script) + $.shining.scripts.run($.shining.slides._loaded[$.shining.slides.current()].script) } ) } function setTitle(title) { - if (!title) { return false }; - $('title').text(title); + if (!title || title == '') return false; + $.browser.msie ? document.title = title : $('title').text(title); } function setTheme(name) { if (!name || name == "default") { return false }; var path = $('link.theme').attr('href').replace('default.css', name + 'css'); @@ -187,11 +188,11 @@ } function slide(name) { return 'slides/' + name; } - + function loadSlide(name, afterLoad) { if (!$.shining.slides.loaded(name)) { $.get( slide(name).markup(), function(data) { @@ -200,23 +201,23 @@ if (data) { loadSlideScript(name, afterLoad); loadSlideStyle(name); } } - ); + ); } else { if ($.isFunction(afterLoad)) afterLoad.call(); - loadSlideStyle(name); + loadSlideStyle(name); } } - + function preloadSlides() { $($.shining.config.slides).each(function() { loadSlide(this); }) } - + function playSlide(name) { var slide = $.shining.slides._loaded[name]; $('#stage .contents').html(slide.markup); $.shining.scripts.run(slide.script); } @@ -227,11 +228,11 @@ type: 'GET', success: function(script) { $.shining.slides._loaded[name].script = script; }, complete: function() { - if ($.isFunction(afterLoad)) afterLoad.call(); + if ($.isFunction(afterLoad)) afterLoad.call(); } }) } function loadSlideStyle(name) { @@ -244,13 +245,13 @@ $.shining.config = config; $.shining.slides.add(config.slides); callback.call(); }); } - + function bindKeys() { - $(window).keydown(function(event) { + $(document).keydown(function(event) { switch(event.keyCode) { case KEY.RIGHT: case KEY.SPACE: $.shining.nextSlide(); break; @@ -258,11 +259,11 @@ $.shining.previousSlide(); break; } }) } - + function help(message, duration) { if ($.shining.config.help == false) return false; var duration = duration || 500; $('#help').remove(); $('<div id="help"></div>') @@ -271,21 +272,15 @@ .appendTo('body') .animate({opacity: 1}) .delay(duration) .fadeOut(200, function() { $('#help').remove() }) } - + function local() { document.location.protocol == 'file:' } - function parseEffects() { - $.get($('link[href$=effects.css]').attr('href'), - function(css) { $.shining.effects = $.parseCSS(css) } - ); - } - $.shining.scripts = { LINE: /^(\d[.\d]*),[\s]*(.*)/, parsed: [], processes: [], nextSlide: function() { $.shining.nextSlide() }, previousSlide: function() { $.shining.previousSlide() }, @@ -321,14 +316,14 @@ reap: function() { $($.shining.scripts.processes).each(function() { clearTimeout(this) }); return $.shining.scripts.processes = []; } } - - bind('previous', function() { help('←') }); - bind('next', function() { help('→') }); + bind('previous', function() { help('←') }); + bind('next', function() { help('→') }); + init(); } // boots! $.shining(); })(jQuery); @@ -345,30 +340,22 @@ (function(b){var a=function(c){return parseInt(c,10)||0};b.each(["min","max"],function(d,c){b.fn[c+"Size"]=function(g){var f,e;if(g){if(g.width!==undefined){this.css(c+"-width",g.width)}if(g.height!==undefined){this.css(c+"-height",g.height)}return this}else{f=this.css(c+"-width");e=this.css(c+"-height");return{width:(c==="max"&&(f===undefined||f==="none"||a(f)===-1)&&Number.MAX_VALUE)||a(f),height:(c==="max"&&(e===undefined||e==="none"||a(e)===-1)&&Number.MAX_VALUE)||a(e)}}}});b.fn.isVisible=function(){return this.is(":visible")};b.each(["border","margin","padding"],function(d,c){b.fn[c]=function(e){if(e){if(e.top!==undefined){this.css(c+"-top"+(c==="border"?"-width":""),e.top)}if(e.bottom!==undefined){this.css(c+"-bottom"+(c==="border"?"-width":""),e.bottom)}if(e.left!==undefined){this.css(c+"-left"+(c==="border"?"-width":""),e.left)}if(e.right!==undefined){this.css(c+"-right"+(c==="border"?"-width":""),e.right)}return this}else{return{top:a(this.css(c+"-top"+(c==="border"?"-width":""))),bottom:a(this.css(c+"-bottom"+(c==="border"?"-width":""))),left:a(this.css(c+"-left"+(c==="border"?"-width":""))),right:a(this.css(c+"-right"+(c==="border"?"-width":"")))}}}})})(jQuery); // centralizes an element vertically (function($){$.fn.centralize=function(){var self=this.get(0);windowHeight=document.documentElement.clientHeight,elementHeight=(self.offsetHeight+$(self).padding().top+$(self).padding().bottom);$(self).css('position','relative').css('top',(windowHeight/2)-(elementHeight/2)+'px');};})(jQuery); -// Trimmed down/modified version of the original Javascript/jQuery CSS parser -// by Danny. -// http://bililite.com/blog/2009/01/16/jquery-css-parser/ -(function($){$.parseCSS=function(str){var ret={};str=munge(str).replace(/@(([^;`]|`[^b]|`b[^%])*(`b%)?);?/g,function(s,rule){return'';});$.each(str.split('`b%'),function(i,css){css=css.split('%b`');if(css.length<2)return;css[0]=restore(css[0]);ret[css[0]]=$.extend(ret[css[0]]||{},parsedeclarations(css[1]));});return ret;};$.parseCSS.mediumApplies=(window.media&&window.media.query)||function(str){if(!str)return true;if(str in media)return media[str];var style=$('<style media="'+str+'">body {position: relative; z-index: 1;}</style>').appendTo('head');return media[str]=[$('body').css('z-index')==1,style.remove()][0];};$.parseCSS.parseArguments=function(str){if(!str)return[];var ret=[],mungedArguments=munge(str,true).split(/\s+/);for(var i=0;i<mungedArguments.length;++i){var a=restore(mungedArguments[i]);try{ret.push(eval('('+a+')'));}catch(err){ret.push(a);}} -return ret;};var media={};var munged={};function parsedeclarations(index){var str=munged[index].replace(/^{|}$/g,'');str=munge(str);var parsed={};$.each(str.split(';'),function(i,decl){decl=decl.split(':');if(decl.length<2)return;parsed[restore(decl[0])]=restore(decl[1]);});return parsed;} -var REbraces=/{[^{}]*}/,REfull=/\[[^\[\]]*\]|{[^{}]*}|\([^()]*\)|function(\s+\w+)?(\s*%b`\d+`b%){2}/,REatcomment=/\/\*@((?:[^\*]|\*[^\/])*)\*\//g,REcomment_string=/(?:\/\*(?:[^\*]|\*[^\/])*\*\/)|(\\.|"(?:[^\\\"]|\\.|\\\n)*"|'(?:[^\\\']|\\.|\\\n)*')/g,REmunged=/%\w`(\d+)`\w%/,uid=0;function munge(str,full){str=str.replace(REatcomment,'$1').replace(REcomment_string,function(s,string){if(!string)return'';var replacement='%s`'+(++uid)+'`s%';munged[uid]=string.replace(/^\\/,'');return replacement;});var RE=full?REfull:REbraces;while(match=RE.exec(str)){replacement='%b`'+(++uid)+'`b%';munged[uid]=match[0];str=str.replace(RE,replacement);} -return str;} -function restore(str){if(str===undefined)return str;while(match=REmunged.exec(str)){str=str.replace(REmunged,munged[match[1]]);} -return $.trim(str);} -var RESGMLcomment=/<!--([^-]|-[^-])*-->/g;var REnotATag=/(>)[^<]*/g;var REtag=/<(\w+)([^>]*)>/g;})(jQuery); - /* * jQuery hashchange event - v1.2 - 2/11/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); +// IE Array.prototype.indexOf fix +if(!Array.prototype.indexOf){Array.prototype.indexOf=function(elt,from){var len=this.length;var from=Number(arguments[1])||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0)from+=len;for(;from<len;from++){if(from in this&&this[from]===elt)return from;} return-1;};} + $(window).bind('hashchange', function(event) { var slide = document.location.hash.replace('#', ''); if (slide) { $.shining.getSlide(slide) }; -}); \ No newline at end of file +});