ds-algo-study
Version:
Just experimenting with publishing a package
547 lines (497 loc) • 36 kB
JavaScript
( 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 class="([\w-_][^"]+)">(?:.[^<]*(?!<\/span>)|)$/ig,
multilineEnd: /(<span class="([\w-_][^"]+)">)?(?:.[^<]*)?(<\/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, '<span class="vg-highlight">' + c + "</span>" ) )
} ), 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 += '<a class="vg-number" rel="#' + e + '">' + c + "</a>" );
if ( s[ t ] ) {
var i = g.multilineEnd.exec( b );
i && !i[ 1 ] ? ( f = '<span class="' + s[ t ] + '">' + f, delete s[ t ], t-- ) : f = '<span class="' + s[ t ] + '">' + f + "</span>"
}
var j = g.multilineBegin.exec( b );
j && ( t++, s[ t ] = j[ 1 ] ), q += '<div class="vg-line" id="' + e + '">' + f + "</div>"
} ), q = '<code class="vg-code">' + q + "</code>", h.numbers && ( q = '<div class="vg-gutter">' + p + "</div>" + 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( i < j ? i + "-" + j : j + "-" + i, !0 ) : r( j, b.ctrlKey ? !1 : !0 );
return !1
} );
var u = a.find( ".vg-gutter" ),
v = u.outerWidth(),
w = 0,
x = !1;
h.animateGutter && a.scroll( function ( a ) {
if ( this.scrollLeft !== w )
if ( this.scrollLeft > v ) {
if ( this.scrollLeft < w ) w = this.scrollLeft, u.hide();
else if ( this.scrollLeft !== w ) {
if ( x ) return;
var b = this;
w = this.scrollLeft, x = setTimeout( function () {
x = !1;
var a = b.scrollLeft;
e.css( "marginLeft", v ), u.css( {
"float": "none",
position: "absolute",
left: a - v
} ).show().stop().animate( {
left: a
} )
}, 500 )
}
} else w = this.scrollLeft, clearTimeout( x ), x = !1, u.css( {
"float": "",
position: "",
left: ""
} ).show()
} )
} else i && a.addClass( "vg-code" );
e.dblclick( function () {
m( e[ 0 ] );
return !1
} );
if ( h.maxLines > 0 ) {
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
*
* Copyright (c) 2012 Darcy Clarke
* Dual licensed under the MIT and GPL licenses.
* http://darcyclarke.me/
*/
( function ( $ ) {
// Github repo
$.fn.repo = function ( options ) {
// Context and Base64 methods
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 < a.length );
return b
},
decode64 = function ( a ) {
var b = "";
var c, d, e = "";
var f, g, h, i = "";
var j = 0;
var k = /[^A-Za-z0-9\+\/\=]/g;
if ( k.exec( a ) ) {}
a = a.replace( /[^A-Za-z0-9\+\/\=]/g, "" );
do {
f = keyStr64.indexOf( a.charAt( j++ ) );
g = keyStr64.indexOf( a.charAt( j++ ) );
h = keyStr64.indexOf( a.charAt( j++ ) );
i = keyStr64.indexOf( a.charAt( j++ ) );
c = f << 2 | g >> 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 < a.length );
return unescape( b )
},
transition = function ( el, direction, init ) {
var opposite = ( direction === 'left' ) ? '' : 'left';
if ( init ) {
el.addClass( 'active' );
_this.container.css( {
'height': calculateHeight( el ) + 'px'
} );
} else {
_this.container
.find( '.page.active' )
.css( 'position', 'absolute' )
.addClass( direction )
.removeClass( 'active' )
.end()
.css( {
'height': calculateHeight( el ) + 'px'
} );
el.addClass( 'active' )
.removeClass( opposite )
.delay( 250 )
.queue( function () {
$( this ).css( 'position', 'relative' ).dequeue();
} );
}
},
calculateHeight = function ( el ) {
// This calculates the height of the bounding box for the repo display.
// clientHeight is element containing fetched results, plus the h1 tag, plus
// the div repo margin has of 15 pixels.
return ( el[ 0 ].clientHeight + _this.container.find( 'h1' ).outerHeight( true ) + 15 );
},
getMimeTypeByExtension = function ( extension ) {
var mimeTypes = {
// images
'png': 'image/png',
'gif': 'image/gif',
'jpg': 'image/jpeg',
'jpeg': 'image/jpeg',
'ico': 'image/x-icon'
};
return mimeTypes[ extension ] ? mimeTypes[ extension ] : 'text/plain';
};
// Settings
_this.settings = $.extend( {
user: '',
name: '',
branch: 'master',
css: '@font-face{font-family:"Octicons Regular";src:url("https://a248.e.akamai.net/assets.github.com/fonts/octicons/octicons-regular-webfont.eot?639c50d4");src:url("https://a248.e.akamai.net/assets.github.com/fonts/octicons/octicons-regular-webfont.eot?639c50d4#iefix") format("embedded-opentype"),url("https://a248.e.akamai.net/assets.github.com/fonts/octicons/octicons-regular-webfont.woff?0605b255") format("woff"),url("https://a248.e.akamai.net/assets.github.com/fonts/octicons/octicons-regular-webfont.ttf?f82fcba7") format("truetype"),url("https://a248.e.akamai.net/assets.github.com/fonts/octicons/octicons-regular-webfont.svg?1f7afa21#newFontRegular") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:"repo-icons";src:url("https://raw.github.com/darcyclarke/Repo.js/master/fonts/repo.eot");src:url("https://raw.github.com/darcyclarke/Repo.js/master/fonts/repo.eot#iefix") format("embedded-opentype"),url("https://raw.github.com/darcyclarke/Repo.js/master/fonts/repo.woff") format("woff"),url("https://raw.github.com/darcyclarke/Repo.js/master/fonts/repo.ttf") format("truetype"),url("https://raw.github.com/darcyclarke/Repo.js/master/fonts/repo.svg") format("svg");font-weight:normal;font-style:normal}.repo,.repo *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.repo ul *{display:block;font-family:sans-serif;font-size:13px;line-height:18px}.repo{width:100%;margin:0 0 15px 0;position:relative;padding-bottom:1px;color:#555;overflow:hidden;height:300px;-webkit-transition:height .25s;-moz-transition:height .25s;-o-transition:height .25s;-ms-transition:height .25s;transition:height .25s}.repo .page{background:#f8f8f8;border:4px solid rgba(0,0,0,0.08);border-radius:3px;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;left:100%;width:98%;position:absolute;-webkit-transition:all .25s;-moz-transition:all .25s;-o-transition:all .25s;-ms-transition:all .25s;transition:all .25s}.repo .page.active{left:1%!important;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1;display:block}.repo .page.left{left:-100%}.repo .loader{position:absolute;display:block;width:100%;height:300px;top:0;left:0;background:url(data:image/gif;base64,R0lGODlhQABAALMIAOzu7PT29Ozq7PTy9Pz6/Pz+/OTm5OTi5P///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBN0RGOTZFMEJFNDAxMUUxOThFRUU2MTc0Q0I1MERFRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBN0RGOTZFMUJFNDAxMUUxOThFRUU2MTc0Q0I1MERFRCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkE3REY5NkRFQkU0MDExRTE5OEVFRTYxNzRDQjUwREVEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkE3REY5NkRGQkU0MDExRTE5OEVFRTYxNzRDQjUwREVEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp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) no-repeat center 50%}.repo.loaded .loader{display:none}.repo h1{padding:0 0 0 10px;font-family:sans-serif;font-size:20px;line-height:26px;color:#000;font-weight:normal}.repo h1 a:nth-of-type(1),.repo h1 a.active{font-weight:bold}.repo h1 a.active,.repo h1 a.active:active,.repo h1 a.active:visited,.repo h1 a.active:hover{color:#000}.repo h1 a,.repo h1 a:active,.repo h1 a:visited,.repo h1 a:hover{color:#4183c4;text-decoration:none}.repo h1 a:after{content:"/";color:#999;padding:0 5px;font-weight:normal}.repo h1 a:last-child:after{content:""}.repo .page,.repo ul{zoom:1}.repo .page:before,.repo .page:after,.repo ul:before,.repo ul:after{content:"";display:table}.repo .page:after,.repo ul:after{clear:both}.repo ul{border:1px solid rgba(0,0,0,0.25);margin:0;padding:0}.repo li{width:100%;margin:0;padding:0;float:left;border-bottom:1px solid #ccc;position:relative;white-space:nowrap}.repo li.titles{background:-webkit-linear-gradient(#fafafa,#eaeaea);background:-moz-linear-gradient(#fafafa,#eaeaea);background:-o-linear-gradient(#fafafa,#eaeaea);background:-ms-linear-gradient(#fafafa,#eaeaea);background:linear-gradient(#fafafa,#eaeaea);font-weight:bold;padding:10px 10px 8px 36px;text-shadow:0 1px 0 #fff}.repo li:before{content:"t";font-family:"repo-icons";position:absolute;top:10px;left:10px;font-size:18px;-webkit-font-smoothing:antialiased}.repo li.dir:before{content:"f ";color:#80a6cd}.repo li.titles:before,.repo li.back:before{content:""}.repo li:last-child{border:0;padding-bottom:none;margin:0}.repo li a,.repo li a:visited,.repo li a:active{color:#4183c4;width:100%;padding:10px 10px 8px 36px;display:block;text-decoration:none}.repo li a:hover{text-decoration:underline}.repo li span{display:inline-block}.repo li span:nth-of-type(1){width:30%}.repo li span:nth-of-type(2){width:20%}.repo li span:nth-of-type(3){width:40%}.repo .vg-container{position:relative;overflow:auto;white-space:pre!important;word-wrap:normal!important}.repo .vg-container,.repo .vg-code{border:0;margin:0;overflow:auto}.repo .vg-code .vg-line,.repo .vg-gutter .vg-number{display:block;height:1.5em;line-height:1.5em!important}.repo .vg-gutter{float:left;min-width:20px;width:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.repo .vg-number{cursor:pointer}.repo .vg-container{font-family:"Bitstream Vera Sans Mono","Courier New",monospace;font-size:13px;border:1px solid #ddd}.repo .vg-gutter{background-color:#ececec;border-right:1px solid #ddd;text-align:right;color:#aaa;padding:1em .5em;margin-right:.5em}.repo .vg-code *::-moz-selection,.repo .vg-code *::-webkit-selection,.repo .vg-code *::selection,.repo .vg-line.vg-highlight{background-color:#ffc}.repo .vg-line span.vg-highlight{color:blue;font-weight:bold;text-decoration:underline}.repo .vg-container .vg-code{display:block;padding:1em .5em;background:#fff}.repo .vg-code{color:#000;background:#f8f8ff;border:0;padding:.4em}.repo .vg-code .comment,.repo .vg-code .template_comment,.repo .vg-code .diff .header,.repo .vg-code .javadoc{color:#998;font-style:italic}.repo .vg-code .keyword,.repo .vg-code .css .rule .keyword,.repo .vg-code .winutils,.repo .vg-code .javascript .title,.repo .vg-code .lisp .title,.repo .vg-code .subst{color:#000;font-weight:bold}.vg-code .number,.vg-code .hexcolor{color:#40a070}.vg-code .string,.repo .vg-code .tag .value,.repo .vg-code .phpdoc,.repo .vg-code .tex .formula{color:#d14}.repo .vg-code .title,.repo .vg-code .id{color:#900;font-weight:bold}.repo .vg-code .javascript .title,.repo .vg-code .lisp .title,.repo .vg-code .subst{font-weight:normal}.repo .vg-code .class .title,.repo .vg-code .haskell .label,.repo .vg-code .tex .command{color:#458;font-weight:bold}.repo .vg-code .tag,.repo .vg-code .tag .title,.repo .vg-code .rules .property,.repo .vg-code .django .tag .keyword{color:#000080;font-weight:normal}.repo .vg-code .attribute,.repo .vg-code .variable,.repo .vg-code .instancevar,.repo .vg-code .lisp .body{color:#008080}.repo .vg-code .regexp{color:#009926}.repo .vg-code .class{color:#458;font-weight:bold}.repo .vg-code .symbol,.repo .vg-code .ruby .symbol .string,.repo .vg-code .ruby .symbol .keyword,.repo .vg-code .ruby .symbol .keymethods,.repo .vg-code .lisp .keyword,.repo .vg-code .tex .special,.repo .vg-code .input_number{color:#990073}.repo .vg-code .builtin,.repo .vg-code .built_in,.repo .vg-code .lisp .title{color:#0086b3}.repo .vg-code .codeprocessor,.repo .vg-code .pi,.repo .vg-code .doctype,.repo .vg-code .shebang,.repo .vg-code .cdata{color:#999;font-weight:bold}.repo .vg-code .deletion{background:#fdd}.repo .vg-code .addition{background:#dfd}.repo .vg-code .diff .change{background:#0086b3}.repo .vg-code .chunk{color:#aaa}.repo .vg-code .tex .formula{-ms-filter:"alpha(opacity=50)";filter:alpha(opacity=50);opacity:.5}'
}, options );
// Extension Hashes
_this.extensions = {
as: 'actionscript',
coffee: 'coffeescript',
css: 'css',
html: 'html',
js: 'javascript',
md: 'markdown',
php: 'php',
py: 'python',
rb: 'ruby'
};
// Repo
_this.repo = {
name: 'default',
folders: [],
files: []
};
// Namespace - strip out characters that would have to be escaped to be used in selectors
_this.namespace = _this.settings.name.toLowerCase().replace( /[^a-z0-9_-]/g, '' );
// Check if this namespace is already in use
var usedNamespaces = $( '[data-id^=' + _this.namespace + ']' );
if ( usedNamespaces.length ) {
_this.namespace += String( usedNamespaces.length );
}
// Insert CSS
if ( typeof _this.settings.css != 'undefined' && _this.settings.css !== '' && $( '#repojs_css' ).length <= 0 )
$( 'body' ).prepend( $( '<style id="repojs_css">' ).html( _this.settings.css ) );
// Query Github Tree API
$.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 ) {
// Setup if last element
if ( !--treeLength ) {
_this.container.addClass( 'loaded' );
// Add 10ms timeout here as some browsers require a bit of time before calculating height.
setTimeout( function () {
transition( _this.container.find( '.page' ).first(), 'left', true );
}, 10 );
}
// Return if data is not a file
if ( this.type != 'blob' )
return;
// Setup defaults
var first = _this.container.find( '.page' ).first()
ctx = _this.repo,
output = first,
path = this.path,
arr = path.split( '/' ),
file = arr[ ( arr.length - 1 ) ],
id = '';
// Remove file from array
arr = arr.slice( 0, -1 );
id = _this.namespace;
// Loop through folders
$.each( arr, function ( i ) {
var name = String( this ),
index = 0,
exists = false;
id = id + '_split_' + name.replace( '.', '_dot_' );
// Loop through folders and check names
$.each( ctx.folders, function ( i ) {
if ( this.name == name ) {
index = i;
exists = true;
}
} );
// Create folder if it doesn't exist
if ( !exists ) {
// Append folder to DOM
if ( output !== first ) {
output.find( 'ul li.back' ).after( $( '<li class="dir"><a href="#" data-id="' + id + '">' + name + '</a></li>' ) );
} else {
output.find( 'ul li' ).first().after( $( '<li class="dir"><a href="#" data-id="' + id + '">' + name + '</a></li>' ) );
}
// Add folder to repo object
ctx.folders.push( {
name: name,
folders: [],
files: [],
element: $( '<div class="page" id="' + id + '"><ul><li class="titles"><span>name</span></li><li class="back"><a href="#">..</a></li></ul></page>' ).appendTo( _this.container )[ 0 ]
} );
index = ctx.folders.length - 1;
}
// Change context & output to the proper folder
output = $( ctx.folders[ index ].element );
ctx = ctx.folders[ index ];
} );
// Append file to DOM
output.find( 'ul' ).append( $( '<li class="file"><a href="#" data-path="' + path + '" data-id="' + id + '">' + file + '</a></li>' ) );
// Add file to the repo object
ctx.files.push( file );
} );
// Bind to page links
_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' ) );
// Is link a file
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 = $( '<div class="file page" id="' + link.data( 'id' ) + '"></div>' ),
extension = response.data.name.split( '.' ).pop().toLowerCase(),
mimeType = getMimeTypeByExtension( extension );
if ( 'image' === mimeType.split( '/' ).shift() ) {
el = fileContainer.append( $( '<div class="image"><span class="border-wrap"><img src="" /></span></div>' ) ).appendTo( repo );
el.find( 'img' )
.attr( 'src', 'data:' + mimeType + ';base64,' + response.data.content )
.attr( 'alt', response.data.name );
} else {
el = fileContainer.append( $( '<pre><code></code></pre>' ) ).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, '>' ).replace( /"/g, '"' ) );
el.find( 'pre' ).vanGogh();
}
transition( el, 'left' );
},
error: function ( response ) {
if ( console && console.log )
console.log( 'Request Error:', e );
}
} );
}
// Is link a folder
} else if ( parent.hasClass( 'dir' ) ) {
_this.container
.find( 'h1' )
.find( '.active' )
.removeClass( 'active' )
.end()
.append( '<a href="#" data-id="' + link.data( 'id' ) + '" class="active">' + link.text() + '</a>' );
transition( el, 'left' );
// Is link a back link
} 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' );
// Is nav link
} 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 );
}
} );
// Setup repo container
return this.each( function () {
_this.container = $( '<div class="repo"><h1><a href="#" data-id="' + _this.namespace + '_split_default">' + _this.settings.name + '</a></h1><div class="loader"></div><div class="page" id="' + _this.namespace + '_split_default"><ul><li class="titles"><span>name</span></li></ul></div></div>' ).appendTo( $( this ) );
} );
};
} )( jQuery );