// Effects Plugin for eXeLearning // By Ignacio Gros (http://www.gros.es/) for eXeLearning (http://exelearning.net/) // Creative Commons Attribution-ShareAlike (http://creativecommons.org/licenses/by-sa/3.0/) $exeFX = { baseClass : "exe", h2 : "h2", isOldBrowser : false, init : function(){ var ie = $exeFX.checkIE(); if ((!isNaN(parseFloat(ie)) && isFinite(ie)) && ie<9) { $exeFX.isOldBrowser = true; $exeFX.h2 = "H2"; } var k = $exeFX.baseClass; var f = $("."+k+"-fx"); var hasTimeLines = false; $("."+k+"-fx").each(function(i){ var c = this.className; if (c.indexOf(" "+k+"-accordion")!=-1) $exeFX.accordion.init(this,i); else if (c.indexOf(" "+k+"-tabs")!=-1) $exeFX.tabs.init(this,i); else if (c.indexOf(" "+k+"-paginated")!=-1) $exeFX.paginated.init(this,i); else if (c.indexOf(" "+k+"-carousel")!=-1) $exeFX.carousel.init(this,i); else if (c.indexOf(" "+k+"-timeline")!=-1 && document.body.className.indexOf("exe-epub3")!=0) { $exeFX.timeline.init(this,i); hasTimeLines = true; } }); if (hasTimeLines) { setTimeout(function(){$.timeliner({});},500); } }, hex2rgb : function(h,a){ // h should be #rrggbb var hex = parseInt(h.substring(1), 16); var r = (hex & 0xff0000) >> 16; var g = (hex & 0x00ff00) >> 8; var b = hex & 0x0000ff; // return [r, g, b]; var c = "rgb"; if (a) c += "a"; c += "("+r+","+g+","+b+""; if (a) c+= ","+a; c += ")"; return c; }, removeXMLNS : function(t) { if (document.body.className.indexOf("exe-epub3")==0) { var xmlnsString = 'h2 xmlns="http://www.w3.org/1999/xhtml"'; var xmlnsStringExp = new RegExp(xmlnsString, 'g'); t = t.replace(xmlnsStringExp, 'h2'); } return t; }, rftTitles : function(t) { // Remove all attributes (except the title) var div = $("
"); div.html(t); $("h2",div).each(function() { var attributes = $.map(this.attributes, function(item) { return item.name; }); var title = $(this); $.each(attributes, function(i, item) { if (item.toLowerCase()!="title") title.removeAttr(item); }); }); t = div.html(); // Remove xmlns="http://www.w3.org/1999/xhtml" t = $exeFX.removeXMLNS(t); // Replace

by

. That's how TinyMCE inserts the title when using the Insert/Edit Attributes option var s = t.split('<'+$exeFX.h2+' title="'); var n =""; if (s.length<2) return t; for (var i=0;i",""); } return n; }, noFX : function(e) { // Wrong HTML (no H2, etc.): No effects or special presentation e.attr("class","").css("padding","1em"); }, accordion : { closeBlock : function(aID){ var k = $exeFX.baseClass; $('.fx-accordion-title',"#"+aID).removeClass('active'); $('.fx-accordion-content',"#"+aID).slideUp(300).removeClass('open'); }, enable : function(x){ var k = $exeFX.baseClass; var t = $('.fx-accordion-title',x); // Get the box shadow color var color = ''; var title = t.eq(0); if (title.length==1) { color = title.css("background-color"); if (typeof(color)=="string") { color = color.replace("rgb(","rgba(").replace(")",",0.5)"); if (color.indexOf("rgba(")==0) x.css("box-shadow","0px 1px 3px "+color); // Get border color (titles) color = x.css("background-color"); if (typeof(color)=="string") { color = color.replace("rgb(","rgba(").replace(")",",0.2)"); if (color.indexOf("rgba(")==0) { t.each(function(){ this.style.borderColor=color; }); } } } } // onclick t.click(function(e) { var aID = this.id.split("-")[0]; aID = aID.replace("_","-").replace("_","-"); var currentAttrValue = $(this).attr('href'); // IE7 retrieves link#hash instead of #hash currentAttrValue = currentAttrValue.split("#"); currentAttrValue = "#"+currentAttrValue[1]; // / IE7 var target = $(e.target); var targetName; if ($exeFX.isOldBrowser) targetName = target[0].nodeName; else targetName = target[0].localName; if (targetName==$exeFX.h2) target = target.parent(); if(target.is('.active')) { $exeFX.accordion.closeBlock(aID); } else { $exeFX.accordion.closeBlock(aID); $(this).addClass('active'); $('.'+k+'-accordion ' + currentAttrValue).slideDown(300).addClass('open'); } e.preventDefault(); }); }, rft : function(e,i){ var html = ""; var h = e.html(); h = $exeFX.rftTitles(h); var p = h.split('<'+$exeFX.h2+'>'); if (p.length==h.split('').length) { for (var x=1; x'+p[x]; } } var k = $exeFX.baseClass; if ($exeFX.isOldBrowser) { html = html.replace(/

\n\n/g, '

\n
'); } else { html = html.replace(/

\n\n/g, '

\n
'); } // Something went wrong (see #318) if (html=="") { $exeFX.noFX(e); return; } html = html + '
'; e.html('
\n
\n'+html+'\n
\n
\n'); var h2 = $("h2",e); $(".fx-accordion-content",e).each(function(y){ var id = k+"-accordion-"+i+"-"+y; this.id = id; h2.eq(y).wrap(''); }); $exeFX.accordion.enable(e); }, init : function(x,i){ var e = $(x); var a = $("h2",e); if (a.length>0) $exeFX.accordion.rft(e,i); else $exeFX.noFX(e); } }, timeline : { getColor : function(e){ var c = e.css("color"); if (c.indexOf("rgb")!=0) return c; return $exe.rgb2hex(c); }, rft : function(e,i){ var k = $exeFX.baseClass; var gID = k+"-timeline-"+i; e.attr("id",gID); var mainColor = $exeFX.timeline.getColor(e); var titlesColor = $exe.useBlackOrWhite(mainColor.replace("#","")); var html = ""; var o = e.html(); var h2 = "

"; var _h2 = "

"; var h3 = "

"; var _h3 = "

"; var oldB = false; if (o.indexOf("0) { var partTitle = ""; var partContent = ""; var part = n[i]; var part2 = part.split(_h2); if (part2.length==2) { partTitle = part2[0]; partContent = part2[1]; // Count the number of H3 in each content var p2 = partContent.split(_h3) if (p2.length==1 || p2.length==0) { partTitle = ""; partContent = ""; } else { if (oldB) { partContent = partContent.replace(/\<\/H3>/g,'

\n\n

'); } else { partContent = partContent.replace(/\<\/h3>/g,'

\n\n

'); } partContent = partContent.replace('

',''); partContent += ''; partContent = '
\n

'+partTitle+'

\n
\n'+partContent+'\n
\n
' html += partContent; } } } } if (html!="") { e.addClass("fx-timeline-container").css("border-color",mainColor); var ie = $exeFX.checkIE(); if ((!isNaN(parseFloat(ie)) && isFinite(ie)) && ie<8) { e.addClass("fx-static-timeline-container"); html = html.replace(/

'+$exe_i18n.show+'

'+html) } $(".fx-timeline-event",e).each(function(z){ this.id = "event-"+e.attr("id")+"-"+z+"EX"; }); $(".fx-timeline-event-trigger",e).each(function(z){ this.id = "event-"+e.attr("id")+"-"+z; }); } // Add a STYLE tag HEAD if (oldB==false) { var css = ""; $("HEAD").append(css); } }, init : function(x,i) { var e = $(x); var h2 = $("H2",e); var h3 = $("H3",e); if (h2.length>0 && h3.length>0) $exeFX.timeline.rft(e,i); else $exeFX.noFX(e); } }, tabs : { show : function(gID,id){ var g = $("#"+gID); $(".fx-tabs li",g).removeClass("fx-current").removeClass("fx-C2"); $("#"+id+"-link").addClass("fx-current fx-C2"); $(".fx-tab-content",g).removeClass("fx-current"); $("#"+id).addClass("fx-current"); }, rft : function(e,i){ var html = ""; var k = $exeFX.baseClass; var gID = k+"-tabs-"+i; var h = e.html(); h = $exeFX.rftTitles(h); var p = h.split('<'+$exeFX.h2+'>'); if (p.length==h.split('').length) { for (var x=1; x'+p[x]; } } if ($exeFX.isOldBrowser) { html = html.replace(/

\n\n\n

\n\n\n

'; e.attr("id",gID).html(html); var ul = '
    \n'; $(".fx-tab-content",e).each(function(y){ var h2 = $("H2",this).eq(0); // Default tab title var t = y+1; if (h2.length==0) { // Can't getElementsByTagName("H2") in some ePub readers (xmlns="http://www.w3.org/1999/xhtml"...) var tit = this.innerHTML.split(">"); if (tit.length>1) tit = tit[1]; tit = tit.split("<"); if (tit.length>1) tit = tit[0]; if (tit.length>0) t = tit; } else { // Normal behavior t = h2.text(); } var hT = $("SPAN",h2); if (hT.length==1) { hT = hT.eq(0).attr("title"); if (hT) { t = hT; h2.removeClass("sr-av") } } var id = k+"-tab-"+i+"-"+y; var c = ""; if (y==0) { c += ' class="fx-current fx-C2"'; this.className += " fx-current fx-default-panel"; } ul += ''+t+'\n'; this.id = id; }); ul += '
'; e.prepend(ul); // onclick $(".fx-tabs a",e).click( function(){ var c = this.className; c = c.split(" "); for (var i=0;i0) $exeFX.tabs.rft(e,i); else $exeFX.noFX(e); } }, paginated : { show : function(gID,id,n){ n = parseInt(n); var g = $("#"+gID); var lis = $(".fx-pagination li",g); // Pagination var l = (lis.length-2); if (l==1) return false; var prevLi = $("#"+gID+"-prev"); var prevA = document.getElementById(gID+"-prev-lnk"); var nextLi = $("#"+gID+"-next"); var nextA = document.getElementById(gID+"-next-lnk"); if (!prevA || !nextA) return false; if (n==0) { // Prev prevLi.addClass("fx-disabled"); prevA.className = "fx-disabled-link"; // Next nextLi.removeClass("fx-disabled"); nextA.className = "exeFXPageLink"+gID+"_"+gID+"-1_1"; } else { // Prev prevLi.removeClass("fx-disabled"); prevA.className = "exeFXPageLink"+gID+"_"+gID+"-"+(n-1)+"_"+(n-1); // Next if ((n+2)>l) { nextLi.addClass("fx-disabled"); nextA.className = "fx-disabled-link"; } else { nextLi.removeClass("fx-disabled"); nextA.className = "exeFXPageLink"+gID+"_"+gID+"-"+(n+1)+"_"+(n+1); } } lis.removeClass("fx-current").removeClass("fx-C1"); $("#"+id+"-link").addClass("fx-current fx-C1"); $(".fx-page-content",g).removeClass("fx-current"); $("#"+id).addClass("fx-current"); }, init : function(x,i){ var e = $(x); var a = $("h2",e); if (a.length>0) $exeFX.paginated.rft(e,i); else $exeFX.noFX(e); }, rft : function(e,i){ var html = ""; var k = $exeFX.baseClass; var gID = k+"-paginated-"+i; var h = e.html(); h = $exeFX.rftTitles(h); var p = h.split('<'+$exeFX.h2+'>'); if (p.length==h.split('').length) { for (var x=1; x'+p[x]; } } if ($exeFX.isOldBrowser) { html = html.replace(/

\n\n\n\n\n\n'; e.attr("id",gID).html(html); var counter = 0; var hasNext = false; var ul = '
    \n'; ul += '
  • '+$exe_i18n.previous+'
  • '; $(".fx-page-content",e).each(function(y){ var t = $("H2",this).eq(0).text(); t = t.replace(/\"/g, '"'); var id = k+"-paginated-"+i+"-"+y; var c = ""; if (y==0) { c += ' class="fx-current fx-C1"'; this.className += " fx-current"; } ul += ''+(y+1)+'\n'; this.id = id; counter ++; }); if (counter>1) hasNext = true; ul += '
  • '+$exe_i18n.next+'
  • '; ul += '
'; e.prepend(ul); // onclick $(".fx-pagination a",e).click( function(){ var a = $(this); if (a.hasClass("fx-disabled-link")) { return false; } var c = a.attr("class"); c = c.split(" "); for (var i=0;il) { nextLi.addClass("fx-disabled"); nextA.className = "fx-disabled-link"; } else { nextLi.removeClass("fx-disabled"); nextA.className = "exeFXSlideLink"+gID+"_"+gID+"-"+(n+1)+"_"+(n+1); } } lis.removeClass("fx-current").removeClass("fx-C1"); $("#"+id+"-link").addClass("fx-current fx-C1"); $(".fx-carousel-content",g).hide(); $("#"+id).fadeIn("slow",function(){ $exeFX.carousel.isWorking = false; }); }, init : function(x,i){ var e = $(x); var a = $("h2",e); if (a.length>0) $exeFX.carousel.rft(e,i); else $exeFX.noFX(e); }, rft : function(e,i){ var html = ""; var k = $exeFX.baseClass; var gID = k+"-carousel-"+i; var h = e.html(); h = $exeFX.rftTitles(h); var p = h.split('<'+$exeFX.h2+'>'); if (p.length==h.split('').length) { for (var x=1; x'+p[x]; } } if ($exeFX.isOldBrowser) { html = html.replace(/

\n\n\n\n\n\n'; e.attr("id",gID).html(html); var counter = 0; var hasNext = false; var ul = ''; e.append(ul); // onclick $(".fx-carousel-pagination a",e).click( function(){ var a = $(this); if (a.hasClass("fx-disabled-link")) { return false; } var c = a.attr("class"); c = c.split(" "); for (var i=0;ii){n(e(this).parents(".fx-timeline-major").find("h3 a",".fx-timeline-minor"),e(this).parents(".fx-timeline-major").find(".fx-timeline-event"))}else{r(e(this).parents(".fx-timeline-major").find(".fx-timeline-minor a"),e(this).parents(".fx-timeline-major").find(".fx-timeline-event"))}return false});e(".fx-timeline-expand").click(function(){if(e(this).hasClass("expanded")){r(e(this).parents(t.timelineContainer).find("h3 a",".fx-timeline-minor"),e(this).parents(t.timelineContainer).find(".fx-timeline-event"));e(this).removeClass("expanded").html(t.expandAllText)}else{n(e(this).parents(t.timelineContainer).find("h3 a",".fx-timeline-minor"),e(this).parents(t.timelineContainer).find(".fx-timeline-event"));e(this).addClass("expanded").html(t.collapseAllText)}return false})})}})(jQuery);