diff --git a/repo.js b/repo.js index ec6a720..e0c0d60 100644 --- a/repo.js +++ b/repo.js @@ -27,6 +27,14 @@ encode64 = function(a){a=escape(a);var b="";var c,d,e="";var f,g,h,i="";var j=0;do{c=a.charCodeAt(j++);d=a.charCodeAt(j++);e=a.charCodeAt(j++);f=c>>2;g=(c&3)<<4|d>>4;h=(d&15)<<2|e>>6;i=e&63;if(isNaN(d)){h=i=64}else if(isNaN(e)){i=64}b=b+keyStr64.charAt(f)+keyStr64.charAt(g)+keyStr64.charAt(h)+keyStr64.charAt(i);c=d=e="";f=g=h=i=""}while(j>4;d=(g&15)<<4|h>>2;e=(h&3)<<6|i;b=b+String.fromCharCode(c);if(h!=64){b=b+String.fromCharCode(d)}if(i!=64){b=b+String.fromCharCode(e)}c=d=e="";f=g=h=i=""}while(j' + name +'')); + var lastAppended = $('li.dir:last', output.find('ul li.back').parent()); + if(lastAppended.length){ + lastAppended.after($('
  • ' + name +'
  • ')); + }else{ + output.find('ul li.back').after($('
  • ' + name +'
  • ')); + } } else { - output.find('ul li').first().after($('
  • ' + name +'
  • ')); + var lastAppended = $('li.dir:last', output.find('ul li').first().parent()); + if(lastAppended.length){ + lastAppended.after($('
  • ' + name +'
  • ')); + }else{ + output.find('ul li').first().after($('
  • ' + name +'
  • ')); + } } // Add folder to repo object @@ -212,10 +230,10 @@ // Is link a file if(parent.hasClass('file')){ - el = $('#' + link.data('id')); + el = $('#' + link.data('id') + '_' + link.text().replace(/[\W_]+/g,"")); - if(el.legnth > 0){ - el.addClass('active'); + if(el.length > 0){ + transition(el, 'left'); } else { $.ajax({ url: 'https://api.github.com/repos/' + _this.settings.user + '/' + _this.settings.name + '/contents/' + link.data('path') + '?ref=' + _this.settings.branch, @@ -223,22 +241,51 @@ data: {}, dataType: 'jsonp', success: function(response){ - var fileContainer = $('
    '), - extension = response.data.name.split('.').pop().toLowerCase(), + repo.append('
    '); + var fileContainer = $('#' + link.data('id') + '_' + link.text().replace(/[\W_]+/g,"")); + var extension = response.data.name.split('.').pop().toLowerCase(), mimeType = getMimeTypeByExtension(extension); if('image' === mimeType.split('/').shift()){ - el = fileContainer.append($('
    ')).appendTo(repo); + el = fileContainer.append($('

    ' + link.text().replace(/[^a-zA-Z0-9_\.]/g,"") + ':


    ')); + + $('img.repojs_loaded_image_' + link.data('id') + '_' + link.text().replace(/[\W_]+/g,"")).on('load',function(){ + transition(el, 'left'); + }); + el.find('img') .attr('src', 'data:' + mimeType + ';base64,' + response.data.content) .attr('alt', response.data.name); } else { - el = fileContainer.append($('
    ')).appendTo(repo); + el = fileContainer.append($('

    ' + link.text().replace(/[^a-zA-Z0-9_\.]/g,"") + ':

    Copy Contents to Clipboard


    ')); if(typeof _this.extensions[extension] != 'undefined') el.find('code').addClass(_this.extensions[extension]); el.find('code').html(String(decode64(response.data.content)).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"')); el.find('pre').vanGogh(); + el.on('click', '.copyCode', function(e){ + try{ + // Create a "hidden" input + var aux = document.createElement("textarea"); + + // Assign it the value of the specified element + aux.value = $(this).parent().find('pre').text(); + + // Append it to the body + document.body.appendChild(aux); + + // Highlight its content + aux.select(); + + // Copy the highlighted text + document.execCommand("copy"); + + // Remove it from the body + document.body.removeChild(aux); + + alert("Code copied to clipboard!"); + }catch{} + }); } transition(el, 'left'); @@ -293,4 +340,3 @@ }; })(jQuery); - diff --git a/repo.min.js b/repo.min.js index 5a3beb9..19161d5 100644 --- a/repo.min.js +++ b/repo.min.js @@ -1,13 +1,12 @@ /*! * @mekwall's .vangogh() for Syntax Highlighting * - * All code is open source and dual licensed under GPL and MIT. + * All code is open source and dual licensed under GPL and MIT. * Check the individual licenses for more information. * https://github.com/mekwall/jquery-vangogh/blob/master/GPL-LICENSE.txt * https://github.com/mekwall/jquery-vangogh/blob/master/MIT-LICENSE.txt */ -(function($,a,b){var c=1,d=!1,e=!1,f={get:function(b){var c=a.location.hash;if(c.length>0){var d=c.match(new RegExp(b+":{([a-zA-Z0-9,-]*)}"));if(d)return d[1].split(",")}return[]},set:function(b,c){var d=a.location.hash,e,f=b+":{"+c.join(",")+"}",g=d.indexOf(b+":{");if(c.length===0)return this.remove(b);g!==-1?e=d.replace(new RegExp("("+b+":{[a-zA-Z0-9,-]*})"),f):e=d.length>0?d+","+f:f,a.location.hash=e},remove:function(b){a.location.hash=a.location.hash.replace(new RegExp("([,]?"+b+":{[a-zA-Z0-9,-]*}[,]?)"),"")}},g={numberRange:/^([0-9]+)-([0-9]+)$/,pageNumber:/-([0-9]+)$/,multilineBegin:/(?:.[^<]*(?!<\/span>)|)$/ig,multilineEnd:/()?(?:.[^<]*)?(<\/span>)/ig};$.fn.vanGogh=function(h){function n(){if(d||e)setTimeout(n,100);else{k++;if(k>=10)return;if(h.source&&!l){e=!0,$.ajax({url:h.source,crossDomain:!0,dataType:"text",success:function(a){l=a},error:function(a,b){l="ERROR: "+b},complete:function(){e=!1,n()}});return}b=b||a.hljs;if(!b){d=!0,$.getScript(h.autoload,function(){d=!1,n()});return}j.filter("pre,code").each(function(){function r(b,c,e){var h=!1,i=a.find(".vg-line");c&&(a.find(".vg-highlight").removeClass("vg-highlight"),f.remove(d),k=[]),b=$.type(b)==="array"?b:[b],$.each(b,function(b,c){if(k.indexOf(c)<=-1){!isNaN(parseFloat(c,10))&&isFinite(c)&&(c=parseInt(c,10));if($.type(c)==="string"){var e=g.numberRange.exec(c);if(e){var f=e[1],h=e[2],j="";for(var b=f;b<=h;b++)j+=",#"+d+"-"+b,k.push(b);i.filter(j.substring(1)).addClass("vg-highlight")}else a.find(".vg-line:contains("+c+")").each(function(){var a=$(this).addClass("vg-highlight");a.html(a.html().replace(c,''+c+""))}),k.push(c)}else{var l=d+"-"+this,m=i.filter("#"+l);m.length&&(m.addClass("vg-highlight"),k.push(c))}}}),!e&&f.set(d,k)}var a=$(this).addClass("vg-container").attr("id",this.id||"vg-"+c++),d=this.id,e=a.find("code"),i=!1,j=!1,k=[];e.length||(e=a,i=!0),h.source&&l&&e.text(l);var n=e.text();b.highlightBlock(e[0],h.tab);var o=e.html().split("\n"),p="",q="";if(!i){var s={},t=0;$.each(o,function(a,b){var c=a+h.firstLine,e=d+"-"+c,f=b;h.numbers&&(p+=''+c+"");if(s[t]){var i=g.multilineEnd.exec(b);i&&!i[1]?(f=''+f,delete s[t],t--):f=''+f+""}var j=g.multilineBegin.exec(b);j&&(t++,s[t]=j[1]),q+='
    '+f+"
    "}),q=''+q+"",h.numbers&&(q='
    '+p+"
    "+q),a.html(q),e=a.find("code"),a.find(".vg-number").click(function(b){var c=$(this),e=c.attr("rel"),h=a.find(e);if(h.hasClass("vg-highlight")){h.removeClass("vg-highlight"),k.splice(k.indexOf(c.text()),1),f.set(d,k),j=!1;return!1}var i=j;j=parseInt(g.pageNumber.exec(e)[1],10),b.shiftKey&&j?r(iv){if(this.scrollLeft0){var y=a.find(".vg-line").height(),z=parseInt(e.css("paddingTop")),A=y*(h.maxLines+1)+z;a.css({minHeight:y+z,maxHeight:A})}h.highlight&&r(h.highlight,!0,!0);var B=f.get(d);B.length&&r(B,!1,!0)})}}function m(b){var c=a,d=a.document;if(d.body.createTextRange){var e=d.body.createTextRange();e.moveToElementText(b),e.select()}else if(d.createRange){var f=c.getSelection(),e=d.createRange();e.selectNodeContents(b),f.removeAllRanges(),f.addRange(e)}}var i={language:"auto",firstLine:1,maxLines:0,numbers:!0,highlight:null,animateGutter:!0,autoload:"http://softwaremaniacs.org/media/soft/highlight/highlight.pack.js",tab:" "};h=$.extend({},i,h);var j=this,k=0,l;n();return j}})(jQuery,this,typeof this.hljs!="undefined"?this.hljs:!1); - +(function($,a,b){var c=1,d=!1,e=!1,f={get:function(b){var c=a.location.hash;if(c.length>0){var d=c.match(new RegExp(b+":{([a-zA-Z0-9,-]*)}"));if(d){return d[1].split(",")}}return[]},set:function(b,c){var d=a.location.hash,e,f=b+":{"+c.join(",")+"}",g=d.indexOf(b+":{");if(c.length===0){return this.remove(b)}g!==-1?e=d.replace(new RegExp("("+b+":{[a-zA-Z0-9,-]*})"),f):e=d.length>0?d+","+f:f,a.location.hash=e},remove:function(b){a.location.hash=a.location.hash.replace(new RegExp("([,]?"+b+":{[a-zA-Z0-9,-]*}[,]?)"),"")}},g={numberRange:/^([0-9]+)-([0-9]+)$/,pageNumber:/-([0-9]+)$/,multilineBegin:/(?:.[^<]*(?!<\/span>)|)$/ig,multilineEnd:/()?(?:.[^<]*)?(<\/span>)/ig};$.fn.vanGogh=function(h){function n(){if(d||e){setTimeout(n,100)}else{k++;if(k>=10){return}if(h.source&&!l){e=!0,$.ajax({url:h.source,crossDomain:!0,dataType:"text",success:function(a){l=a},error:function(a,b){l="ERROR: "+b},complete:function(){e=!1,n()}});return}b=b||a.hljs;if(!b){d=!0,$.getScript(h.autoload,function(){d=!1,n()});return}j.filter("pre,code").each(function(){function r(b,c,e){var h=!1,i=a.find(".vg-line");c&&(a.find(".vg-highlight").removeClass("vg-highlight"),f.remove(d),k=[]),b=$.type(b)==="array"?b:[b],$.each(b,function(b,c){if(k.indexOf(c)<=-1){!isNaN(parseFloat(c,10))&&isFinite(c)&&(c=parseInt(c,10));if($.type(c)==="string"){var e=g.numberRange.exec(c);if(e){var f=e[1],h=e[2],j="";for(var b=f;b<=h;b++){j+=",#"+d+"-"+b,k.push(b)}i.filter(j.substring(1)).addClass("vg-highlight")}else{a.find(".vg-line:contains("+c+")").each(function(){var a=$(this).addClass("vg-highlight");a.html(a.html().replace(c,''+c+""))}),k.push(c)}}else{var l=d+"-"+this,m=i.filter("#"+l);m.length&&(m.addClass("vg-highlight"),k.push(c))}}}),!e&&f.set(d,k)}var a=$(this).addClass("vg-container").attr("id",this.id||"vg-"+c++),d=this.id,e=a.find("code"),i=!1,j=!1,k=[];e.length||(e=a,i=!0),h.source&&l&&e.text(l);var n=e.text();b.highlightBlock(e[0],h.tab);var o=e.html().split("\n"),p="",q="";if(!i){var s={},t=0;$.each(o,function(a,b){var c=a+h.firstLine,e=d+"-"+c,f=b;h.numbers&&(p+=''+c+"");if(s[t]){var i=g.multilineEnd.exec(b);i&&!i[1]?(f=''+f,delete s[t],t--):f=''+f+""}var j=g.multilineBegin.exec(b);j&&(t++,s[t]=j[1]),q+='
    '+f+"
    "}),q=''+q+"",h.numbers&&(q='
    '+p+"
    "+q),a.html(q),e=a.find("code"),a.find(".vg-number").click(function(b){var c=$(this),e=c.attr("rel"),h=a.find(e);if(h.hasClass("vg-highlight")){h.removeClass("vg-highlight"),k.splice(k.indexOf(c.text()),1),f.set(d,k),j=!1;return !1}var i=j;j=parseInt(g.pageNumber.exec(e)[1],10),b.shiftKey&&j?r(iv){if(this.scrollLeft0){var y=a.find(".vg-line").height(),z=parseInt(e.css("paddingTop")),A=y*(h.maxLines+1)+z;a.css({minHeight:y+z,maxHeight:A})}h.highlight&&r(h.highlight,!0,!0);var B=f.get(d);B.length&&r(B,!1,!0)})}}function m(b){var c=a,d=a.document;if(d.body.createTextRange){var e=d.body.createTextRange();e.moveToElementText(b),e.select()}else{if(d.createRange){var f=c.getSelection(),e=d.createRange();e.selectNodeContents(b),f.removeAllRanges(),f.addRange(e)}}}var i={language:"auto",firstLine:1,maxLines:0,numbers:!0,highlight:null,animateGutter:!0,autoload:"http://softwaremaniacs.org/media/soft/highlight/highlight.pack.js",tab:" "};h=$.extend({},i,h);var j=this,k=0,l;n();return j}})(jQuery,this,typeof this.hljs!="undefined"?this.hljs:!1); /*! * Repo.js * @author Darcy Clarke @@ -16,14 +15,4 @@ * Dual licensed under the MIT and GPL licenses. * http://darcyclarke.me/ */ -(function(a){a.fn.repo=function(j){var g=this,b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i=function(t){t=escape(t);var s="";var r,q,p="";var o,n,m,l="";var k=0;do{r=t.charCodeAt(k++);q=t.charCodeAt(k++);p=t.charCodeAt(k++);o=r>>2;n=(r&3)<<4|q>>4;m=(q&15)<<2|p>>6;l=p&63;if(isNaN(q)){m=l=64}else{if(isNaN(p)){l=64}}s=s+b.charAt(o)+b.charAt(n)+b.charAt(m)+b.charAt(l);r=q=p="";o=n=m=l=""}while(k>4;s=(p&15)<<4|o>>2;r=(o&3)<<6|n;u=u+String.fromCharCode(t);if(o!=64){u=u+String.fromCharCode(s)}if(n!=64){u=u+String.fromCharCode(r)}t=s=r="";q=p=o=n=""}while(m').html(g.settings.css))}a.ajax({url:"https://api.github.com/repos/"+g.settings.user+"/"+g.settings.name+"/git/trees/"+g.settings.branch+"?recursive=1",type:"GET",data:{},dataType:"jsonp",success:function(k){var l=k.data.tree.length; -a.each(k.data.tree,function(m){if(!--l){g.container.addClass("loaded");setTimeout(function(){h(g.container.find(".page").first(),"left",true)},10)}if(this.type!="blob"){return}var n=g.container.find(".page").first();ctx=g.repo,output=n,path=this.path,arr=path.split("/"),file=arr[(arr.length-1)],id="";arr=arr.slice(0,-1);id=g.namespace;a.each(arr,function(q){var p=String(this),o=0,r=false;id=id+"_split_"+p.replace(".","_dot_");a.each(ctx.folders,function(s){if(this.name==p){o=s;r=true}});if(!r){if(output!==n){output.find("ul li.back").after(a('
  • '+p+"
  • ")) -}else{output.find("ul li").first().after(a('
  • '+p+"
  • "))}ctx.folders.push({name:p,folders:[],files:[],element:a('
    ').appendTo(g.container)[0]});o=ctx.folders.length-1}output=a(ctx.folders[o].element);ctx=ctx.folders[o]});output.find("ul").append(a('
  • '+file+"
  • ")); -ctx.files.push(file)});g.container.on("click","a",function(r){r.preventDefault();var p=a(this),o=p.parents("li"),q=p.parents(".page"),m=p.parents(".repo"),n=a("#"+p.data("id"));if(o.hasClass("file")){n=a("#"+p.data("id"));if(n.legnth>0){n.addClass("active")}else{a.ajax({url:"https://api.github.com/repos/"+g.settings.user+"/"+g.settings.name+"/contents/"+p.data("path")+"?ref="+g.settings.branch,type:"GET",data:{},dataType:"jsonp",success:function(t){var s=a('
    '),v=t.data.name.split(".").pop().toLowerCase(),u=e(v); -if("image"===u.split("/").shift()){n=s.append(a('
    ')).appendTo(m);n.find("img").attr("src","data:"+u+";base64,"+t.data.content).attr("alt",t.data.name)}else{n=s.append(a("
    ")).appendTo(m);if(typeof g.extensions[v]!="undefined"){n.find("code").addClass(g.extensions[v])}n.find("code").html(String(c(t.data.content)).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""));n.find("pre").vanGogh() -}h(n,"left")},error:function(s){if(console&&console.log){console.log("Request Error:",r)}}})}}else{if(o.hasClass("dir")){g.container.find("h1").find(".active").removeClass("active").end().append(''+p.text()+"");h(n,"left")}else{if(o.hasClass("back")){g.container.find("h1 a").last().remove();n=q[0].id.split("_split_").slice(0,-1).join("_split_");n=(n==g.namespace)?g.container.find(".page").first():a("#"+n);h(n,"right")}else{n=n.length?n:g.container.find(".page").eq(p.index()); -if(p[0]!==g.container.find("h1 a")[0]){p.addClass("active")}g.container.find("h1 a").slice((p.index()+1),g.container.find("h1 a").length).remove();h(n,"right")}}}})},error:function(k){if(console&&console.log){console.log("Request Error:",k)}}});return this.each(function(){g.container=a('').appendTo(a(this)) -})}})(jQuery); +(function($){$.fn.repo=function(options){var _this=this,keyStr64="ABCDEFGHIJKLMNOP"+"QRSTUVWXYZabcdef"+"ghijklmnopqrstuv"+"wxyz0123456789+/"+"=",encode64=function(a){a=escape(a);var b="";var c,d,e="";var f,g,h,i="";var j=0;do{c=a.charCodeAt(j++);d=a.charCodeAt(j++);e=a.charCodeAt(j++);f=c>>2;g=(c&3)<<4|d>>4;h=(d&15)<<2|e>>6;i=e&63;if(isNaN(d)){h=i=64}else{if(isNaN(e)){i=64}}b=b+keyStr64.charAt(f)+keyStr64.charAt(g)+keyStr64.charAt(h)+keyStr64.charAt(i);c=d=e="";f=g=h=i=""}while(j>4;d=(g&15)<<4|h>>2;e=(h&3)<<6|i;b=b+String.fromCharCode(c);if(h!=64){b=b+String.fromCharCode(d)}if(i!=64){b=b+String.fromCharCode(e)}c=d=e="";f=g=h=i=""}while(j').html(_this.settings.css))}$.ajax({url:"https://api.github.com/repos/"+_this.settings.user+"/"+_this.settings.name+"/git/trees/"+_this.settings.branch+"?recursive=1",type:"GET",data:{},dataType:"jsonp",success:function(response){var treeLength=response.data.tree.length;$.each(response.data.tree,function(i){if(!--treeLength){_this.container.addClass("loaded");setTimeout(function(){transition(_this.container.find(".page").first(),"left",true)},10)}if(this.type!="blob"){return}var first=_this.container.find(".page").first();ctx=_this.repo,output=first,path=this.path,arr=path.split("/"),file=arr[(arr.length-1)],id="";arr=arr.slice(0,-1);id=_this.namespace;$.each(arr,function(i){var name=String(this),index=0,exists=false;id=id+"_split_"+name.replace(".","_dot_");$.each(ctx.folders,function(i){if(this.name==name){index=i;exists=true}});if(!exists){if(output!==first){var lastAppended=$("li.dir:last",output.find("ul li.back").parent());if(lastAppended.length){lastAppended.after($('
  • '+name+"
  • "))}else{output.find("ul li.back").after($('
  • '+name+"
  • "))}}else{var lastAppended=$("li.dir:last",output.find("ul li").first().parent());if(lastAppended.length){lastAppended.after($('
  • '+name+"
  • "))}else{output.find("ul li").first().after($('
  • '+name+"
  • "))}}ctx.folders.push({name:name,folders:[],files:[],element:$('
    ').appendTo(_this.container)[0]});index=ctx.folders.length-1}output=$(ctx.folders[index].element);ctx=ctx.folders[index]});output.find("ul").append($('
  • '+file+"
  • "));ctx.files.push(file)});_this.container.on("click","a",function(e){e.preventDefault();var link=$(this),parent=link.parents("li"),page=link.parents(".page"),repo=link.parents(".repo"),el=$("#"+link.data("id"));if(parent.hasClass("file")){el=$("#"+link.data("id"));if(el.legnth>0){el.addClass("active")}else{$.ajax({url:"https://api.github.com/repos/"+_this.settings.user+"/"+_this.settings.name+"/contents/"+link.data("path")+"?ref="+_this.settings.branch,type:"GET",data:{},dataType:"jsonp",success:function(response){var fileContainer=$('
    '),extension=response.data.name.split(".").pop().toLowerCase(),mimeType=getMimeTypeByExtension(extension);if("image"===mimeType.split("/").shift()){el=fileContainer.append($('
    ')).appendTo(repo);el.find("img").attr("src","data:"+mimeType+";base64,"+response.data.content).attr("alt",response.data.name)}else{el=fileContainer.append($("
    ")).appendTo(repo);if(typeof _this.extensions[extension]!="undefined"){el.find("code").addClass(_this.extensions[extension])}el.find("code").html(String(decode64(response.data.content)).replace(/&/g,"&").replace(//g,">").replace(/"/g,"""));el.find("pre").vanGogh()}transition(el,"left")},error:function(response){if(console&&console.log){console.log("Request Error:",e)}}})}}else{if(parent.hasClass("dir")){_this.container.find("h1").find(".active").removeClass("active").end().append(''+link.text()+"");transition(el,"left")}else{if(parent.hasClass("back")){_this.container.find("h1 a").last().remove();el=page[0].id.split("_split_").slice(0,-1).join("_split_");el=(el==_this.namespace)?_this.container.find(".page").first():$("#"+el);transition(el,"right")}else{el=el.length?el:_this.container.find(".page").eq(link.index());if(link[0]!==_this.container.find("h1 a")[0]){link.addClass("active")}_this.container.find("h1 a").slice((link.index()+1),_this.container.find("h1 a").length).remove();transition(el,"right")}}}})},error:function(response){if(console&&console.log){console.log("Request Error:",response)}}});return this.each(function(){_this.container=$('').appendTo($(this))})}})(jQuery); \ No newline at end of file