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
+});