Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial commit

  • Loading branch information...
commit aacbaa0b3d4f5270a0d64c08a0979375e013b445 0 parents
@garyhodgson authored
Showing with 9,616 additions and 0 deletions.
  1. +1 −0  .gitignore
  2. +16 −0 README.md
  3. +4 −0 _includes/footer.html
  4. +6 −0 _includes/header.html
  5. +399 −0 _layouts/default.html
  6. +1,058 −0 css/bootstrap/bootstrap-responsive.css
  7. +5,774 −0 css/bootstrap/bootstrap.css
  8. +46 −0 css/githubiverse/default.css
  9. +181 −0 css/lightbox/lightbox.css
  10. BIN  img/bootstrap/glyphicons-halflings-white.png
  11. BIN  img/bootstrap/glyphicons-halflings.png
  12. BIN  img/favicon.ico
  13. BIN  img/lightbox/bg-checker.png
  14. BIN  img/lightbox/box.png
  15. BIN  img/lightbox/bullet.gif
  16. BIN  img/lightbox/close.png
  17. BIN  img/lightbox/favicon.gif
  18. BIN  img/lightbox/loading.gif
  19. BIN  img/lightbox/next.png
  20. BIN  img/lightbox/prev.png
  21. BIN  img/lightbox/speech-bubbles.png
  22. +40 −0 index.md
  23. +6 −0 js/bootstrap/bootstrap.min.js
  24. +20 −0 js/github/gh3.min.js
  25. +355 −0 js/lightbox/lightbox.js
  26. +12 −0 js/lightbox/lightbox.min.js
  27. +36 −0 js/prettydate.js
  28. +202 −0 js/thingiview/Three.js
  29. +126 −0 js/thingiview/binaryReader.js
  30. +62 −0 js/thingiview/plane.js
  31. +2 −0  js/thingiview/stats.js
  32. +318 −0 js/thingiview/thingiloader.js
  33. +899 −0 js/thingiview/thingiview.js
  34. +21 −0 js/thingiview/thingiview.min.js
  35. +32 −0 js/underscore/underscore.min.js
1  .gitignore
@@ -0,0 +1 @@
+_site
16 README.md
@@ -0,0 +1,16 @@
+githubiverse-template
+============
+
+This is a Github Page template to show off your 3D printer model or project. Inspiration clearly taken from the excellent Thingiverse.
+
+Instructions
+============
+
+* Create a github project.
+* Add and commit content (sources, stl files, images), into separate folders.
+* Create an empty gh-pages branch. See http://pages.github.com for further information.
+* Copy (not clone!) the contents of this githubiverse-template project into the root directory of the gh-pages branch.
+* Edit index.md, setting metadata about the project, and template preferences, in the top yaml section, and the description in the bottom section in markdown format.
+* Optionally, modify the html and css to suit your tastes.
+* Test locally with jekyll, or commit and push to github.
+* When pushed, view at http://yourusername.github.com/yourprojectname
4 _includes/footer.html
@@ -0,0 +1,4 @@
+<footer>
+ <hr>
+ <small>Built with: <a href="https://github.com">Github Pages</a>, <a href="http://twitter.github.com/bootstrap">Twitter Bootstrap</a>, <a href="http://lokeshdhakar.com/projects/lightbox2/">Lightbox2</a>, <a href="http://github.com/tbuser/thingiview.js">Thingiview.js</a>, <a href="https://github.com/k33g/gh3">gh3</a></small>
+</footer>
6 _includes/header.html
@@ -0,0 +1,6 @@
+<header>
+ <h1>
+ Githubiverse
+ </h1>
+ <hr>
+</header>
399 _layouts/default.html
@@ -0,0 +1,399 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Githubiverse: {{ page.title }} by {{ page.author }}</title>
+
+ <link rel="icon" href="img/favicon.ico" type="image/x-icon" />
+
+ <link href="css/bootstrap/bootstrap.css" rel="stylesheet">
+ <link href="css/lightbox/lightbox.css" rel="stylesheet" />
+ <link href="css/githubiverse/default.css" rel="stylesheet" media="screen" type="text/css">
+
+ </head>
+ <body>
+ {% if page.show_forkme_ribbon %}
+ <a href="{{page.github.base}}{{page.github.user}}/{{page.github.repository}}"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
+ {% endif %}
+
+ <div class="container">
+ <div class="row-fluid">
+ <div class="span12">
+
+ {% include header.html %}
+
+ <div class="page-header">
+ <h1 id="title">{{ page.title }}<small> by {{ page.author }}</small></h1>
+ </div>
+
+ <div class="row-fluid">
+ <div class="span6">
+
+ <div id="lead-image-container"></div>
+
+ <ul id='thumbnails' class='thumbnails'></ul>
+
+
+ <h3>Sources</h3>
+ <div id="sources-section">
+ <div class="row-fluid">
+ <div class="span9">
+ <ul id="sources" class="nav nav-tabs nav-stacked"></ul>
+ </div>
+ <div class="span3">
+ <ul id="sourcedownloads" class="nav nav-tabs nav-stacked"></ul>
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="span6">
+
+ <div id="description">
+ {{ content }}
+ </div>
+
+ <div class="meta row-fluid">
+ <div class="span12">
+ <div id="tags">
+ <i class="icon-tags" title="tags"></i>&nbsp;
+ {% for tag in page.tags %}
+ <a href="#" class="tag"><span class="label">{{ tag }}</span></a>
+ {% endfor %}
+ </div>
+ </div>
+ </div>
+
+ <div class="meta row-fluid">
+ <div class="span6">
+ <div id="home"><i class='icon-home' title="Repository"></i>&nbsp;<a href="{{ page.github.base }}{{ page.github.repository }}">{{ page.github.repository }}</a></div>
+ </div>
+
+ <div class="span6">
+ <div id="author"><i class='icon-user' title="User"></i>&nbsp;<a href="{{ page.github.base }}{{ page.github.user }}">{{ page.github.user }}</a></div>
+ </div>
+ </div>
+
+ <div class="meta row-fluid">
+ <div class="span6">
+ <div id="license"><i class='icon-file' title="License"></i>&nbsp;{{ page.license }}</div>
+ </div>
+ <div class="span6">
+ <div id="download-all"><i class='icon-download' title="Download Project"></i>&nbsp;<a href="{{ page.github.base }}{{ page.github.user }}/{{ page.github.repository }}/zipball/{{ page.github.branch }}">Download Project as Zip</a></div>
+ </div>
+ </div>
+
+ <div class="meta row-fluid">
+ <div class="span6">
+ <div id="created"><i class='icon-play-circle' title="Created"></i>&nbsp;Created: </div>
+ </div>
+ <div class="span6">
+ <div id="updated"><i class='icon-refresh' title="Updated"></i>&nbsp;Updated: </div>
+ </div>
+ </div>
+
+ <h3>STLs</h3>
+ <div id="stlviewer"></div>
+ <div id="stls-section">
+ <div class="row-fluid">
+ <div class="span9">
+ <ul id="stls" class="nav nav-tabs nav-stacked"></ul>
+ </div>
+ <div class="span3">
+ <ul id="stldownloads" class="nav nav-tabs nav-stacked"></ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ {% include footer.html %}
+
+ </div>
+ </div>
+ </div>
+
+ <!-- Javascript -->
+
+ <script src="http://code.jquery.com/jquery-1.8.1.min.js"> </script>
+ <script src="js/prettydate.js"> </script>
+ <script src="js/bootstrap/bootstrap.min.js"></script>
+ <script src="js/lightbox/lightbox.min.js"></script>
+ <script src="js/thingiview/Three.js"></script>
+ <script src="js/thingiview/plane.js"></script>
+ <script src="js/thingiview/thingiview.min.js"></script>
+ <script src="js/underscore/underscore.min.js"></script>
+ <script src="js/github/gh3.min.js"></script>
+
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+
+ <script>
+ $(document).ready(function(){
+ autoloadSTL = {{ page.autoload_stl }};
+ leadImageName = '{{ page.lead_image }}';
+ showLeadImage = {{ page.show_lead_image }};
+ thingiurlbase = "js/thingiview";
+ thingiview = new Thingiview("stlviewer");
+ thingiview.setObjectColor('#C0D8F0');
+ thingiview.setBackgroundColor('#ffffff');
+ thingiview.initScene();
+
+ $('.stlfile').live('click', function(e){
+ loadStlString($(this).data('githubFile'));
+ });
+
+ var githubUser = new Gh3.User("{{page.github.user}}"),
+ githubRepositories = new Gh3.Repositories(githubUser),
+ stl_file_count = 0,
+ src_file_count = 0;
+
+ function no_stls() {
+ $('#stls-section').html('No STL Files Found.');
+ }
+
+ function no_sources() {
+ $('#sources-section').html('No Source Files Found.');
+ }
+
+ function add_source_dir(dir, dirname){
+ dir.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching contents for sources." }
+
+ if (dirname == ''){
+ dirname = dir.name;
+ } else {
+ dirname = dirname+'/'+dir.name;
+ }
+
+ dir.eachContent(function (content) {
+ if (content.type == 'file'){
+ add_source_file(content, dirname);
+ } else if (content.type == 'dir'){
+ add_source_dir(content, dirname);
+ }
+ });
+ });
+ }
+
+ function add_source_file(content,dirname){
+ src_file_count++;
+ if (dirname != ''){
+ dirname = dirname+'/';
+ }
+
+ var fileGithubUrl = githubRepo.html_url + '/blob/' + content.branchName + '/' + content.path;
+ var rawFileURL = githubRepo.html_url + '/raw/' + content.branchName + '/' + content.path;
+ $('#sources').append("<li><a href='" + fileGithubUrl + "' target='_githubiverse' title='View in Github' class=\"srcfile\">"+ dirname + content.name + "</a></li>");
+ $('#sourcedownloads').append("<li><a class='btn-small btn-inverse' href='" + rawFileURL + "' download='" + content.name + "'><i class='icon-download-alt icon-white'></i>&nbsp;Download</a></li>");
+ }
+
+ function add_stl_dir(dir, dirname){
+ dir.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching contents for stls." }
+
+ if (dirname == ''){
+ dirname = dir.name;
+ } else {
+ dirname = dirname+'/'+dir.name;
+ }
+
+ dir.eachContent(function (content) {
+ if (content.type == 'file'){
+ add_stl_file(content, dirname);
+ } else if (content.type == 'dir'){
+ add_stl_dir(content, dirname);
+ }
+ });
+ });
+ }
+
+ function add_stl_file(content,dirname){
+ if (! /\.stl$/i.test(content.name)) {
+ return
+ }
+ stl_file_count++;
+ if (dirname != ''){
+ dirname = dirname+'/';
+ }
+
+ var rawFileURL = githubRepo.html_url + '/raw/' + content.branchName + '/' + content.path;
+ $('#stls').append("<li><a href=\"javascript://\" title='Preview' class=\"stlfile\">"+ dirname + content.name+"</a></li>")
+ $('.stlfile').last().data("githubFile",content);
+ $('#stldownloads').append("<li><a class='btn-small btn-inverse' href='" + rawFileURL + "' download='" + content.name + "'><i class='icon-download-alt icon-white'></i>&nbsp;Download</a></li>");
+ }
+
+ function loadStlString(githubFile){
+ if (githubFile == undefined || githubFile == '') return;
+
+ thingiview.progressBarMessage('Retrieving File Data');
+
+ githubFile.fetchContent(function (err, res) {
+ if(err) { throw "Error retrieving github file contents." }
+
+ thingiview.loadSTLString(githubFile.getRawContent());
+ });
+ }
+
+ function showImages(imgDir){
+ if (imgDir != undefined){
+ imgDir.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching contents for images." }
+ imgDir.eachContent(function (content) {
+ if (content.type == 'file'){
+ var rawFileURL = githubRepo.html_url + '/raw/' + content.branchName + '/' + content.path;
+
+ if (showLeadImage && content.name == leadImageName){
+ $('#lead-image-container').append("<a class='thumbnail' href='" + rawFileURL + "' rel='lightbox[githubiverse]'><img class='lead-image' src='" + rawFileURL + "' alt='" + content.name + "' title='" + content.name + "' /></a>");
+ } else {
+ $('#thumbnails').append("<li><a class='thumbnail' href='" + rawFileURL + "' rel='lightbox[githubiverse]'><img class='imgfile' src='" + rawFileURL + "' alt='" + content.name + "' title='" + content.name + "' /></a></li>");
+ }
+ }
+ });
+ });
+ }
+ }
+
+ function showSources(srcDir){
+ if (srcDir == undefined) {
+ no_sources();
+ return;
+ }
+ srcDir.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching contents for sources." }
+ srcDir.eachContent(function (content) {
+ if (content.type == 'file'){
+ add_source_file(content, '');
+ } else if (content.type == 'dir'){
+ add_source_dir(content, '');
+ }
+ });
+
+ if (src_file_count == 0){
+ no_sources();
+ }
+ });
+ }
+
+ function showSTLs(stlDir){
+ if (stlDir == undefined){
+ no_stls();
+ return;
+ }
+ stlDir.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching contents for stls." }
+
+ stlDir.eachContent(function (content) {
+ if (content.type == 'file'){
+ add_stl_file(content, '');
+ } else if (content.type == 'dir'){
+ add_stl_dir(content, '');
+ }
+ });
+
+ if (stl_file_count > 0){
+ if (autoloadSTL && $('.stlfile').first().text() != "") {
+ if ($('.stlfile').first().data('githubFile') != undefined){
+ loadStlString($('.stlfile').first().data('githubFile'));
+ }
+ }
+ } else {
+ no_stls();
+ }
+ });
+ }
+
+ function getDirRecursive(path, parentDir,callback) {
+
+ parentDir.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching contents for images." }
+
+ if (path.indexOf("/") == -1){
+ callback(parentDir.getDirByName(path));
+ return
+ }
+
+ var nextDirName = path.substring(0, path.indexOf("/"));
+ var currentDir = parentDir.getDirByName(nextDirName);
+ var remainingPath = path.substring(path.indexOf("/")+1);
+
+ return getDirRecursive(remainingPath, currentDir,callback);
+ });
+ }
+
+ function processDirectories(path, callback){
+
+ if (path.indexOf("/") == -1){
+ var dir = master.getDirByName(path)
+ if (dir == undefined){
+ console.error("Unable to find directory in branch: ", path);
+ callback(null);
+ return false
+ }
+ callback(dir);
+ } else {
+ var nextDirName = path.substring(0, path.indexOf("/"));
+ var nextDir = master.getDirByName(nextDirName);
+ if (nextDir == undefined){
+ console.error("Unable to find directory in branch: ", nextDir);
+ callback(null);
+ return false
+ }
+ var remainingPath = path.substring(path.indexOf("/")+1);
+ getDirRecursive(remainingPath, nextDir, callback);
+ }
+ }
+
+ githubRepositories.fetch({page:1, per_page:100, direction : "desc"},"next", function (err, res) {
+ if(err) { throw "Error fetching github repositories." }
+ });
+
+ githubRepo = new Gh3.Repository("{{page.github.repository}}", githubUser);
+ githubRepo.fetch(function (err, res) {
+ if(err) { throw "Error fetching github repository." }
+
+ githubRepo.fetchBranches(function (err, res) {
+ if(err) { throw "Error fetching github branches." }
+
+ master = githubRepo.getBranchByName("{{page.github.branch}}");
+
+ master.fetchContents(function (err, res) {
+ if(err) { throw "Error fetching github repository contents." }
+
+ processDirectories('{{ page.src_dir }}', showSources);
+ processDirectories('{{ page.img_dir }}', showImages);
+ processDirectories('{{ page.stl_dir }}', showSTLs);
+
+ $('#updated').append("&nbsp;"+prettyDate(githubRepo.updated_at));
+ $('#created').append("&nbsp;"+prettyDate(githubRepo.created_at));
+
+ {% if page.description_file %}
+
+ var descriptionFile = master.getFileByName('{{page.description_file}}');
+ descriptionFile.fetchContent(function (err, res) {
+ if(err) { throw "Error retrieving github description file." }
+
+ if ($('#description').html().trim() == ''){
+ $('#description').html(descriptionFile.getRawContent().replace(/\n/g,'<br>'));
+ } else {
+ var descriptionText = $('#description').html() + "<br>" + descriptionFile.getRawContent().replace(/\n/g,'<br>');
+ $('#description').html(descriptionText);
+ }
+
+
+ });
+
+ {% endif %}
+
+ });
+
+ })
+ });
+
+
+ });
+
+ </script>
+ </body>
+</html>
1,058 css/bootstrap/bootstrap-responsive.css
@@ -0,0 +1,1058 @@
+/*!
+ * Bootstrap Responsive v2.1.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.clearfix {
+ *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+.hide-text {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.input-block-level {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+
+.visible-phone {
+ display: none !important;
+}
+
+.visible-tablet {
+ display: none !important;
+}
+
+.hidden-desktop {
+ display: none !important;
+}
+
+.visible-desktop {
+ display: inherit !important;
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+ .hidden-desktop {
+ display: inherit !important;
+ }
+ .visible-desktop {
+ display: none !important ;
+ }
+ .visible-tablet {
+ display: inherit !important;
+ }
+ .hidden-tablet {
+ display: none !important;
+ }
+}
+
+@media (max-width: 767px) {
+ .hidden-desktop {
+ display: inherit !important;
+ }
+ .visible-desktop {
+ display: none !important;
+ }
+ .visible-phone {
+ display: inherit !important;
+ }
+ .hidden-phone {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .row {
+ margin-left: -30px;
+ *zoom: 1;
+ }
+ .row:before,
+ .row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row:after {
+ clear: both;
+ }
+ [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 30px;
+ }
+ .container,
+ .navbar-static-top .container,
+ .navbar-fixed-top .container,
+ .navbar-fixed-bottom .container {
+ width: 1170px;
+ }
+ .span12 {
+ width: 1170px;
+ }
+ .span11 {
+ width: 1070px;
+ }
+ .span10 {
+ width: 970px;
+ }
+ .span9 {
+ width: 870px;
+ }
+ .span8 {
+ width: 770px;
+ }
+ .span7 {
+ width: 670px;
+ }
+ .span6 {
+ width: 570px;
+ }
+ .span5 {
+ width: 470px;
+ }
+ .span4 {
+ width: 370px;
+ }
+ .span3 {
+ width: 270px;
+ }
+ .span2 {
+ width: 170px;
+ }
+ .span1 {
+ width: 70px;
+ }
+ .offset12 {
+ margin-left: 1230px;
+ }
+ .offset11 {
+ margin-left: 1130px;
+ }
+ .offset10 {
+ margin-left: 1030px;
+ }
+ .offset9 {
+ margin-left: 930px;
+ }
+ .offset8 {
+ margin-left: 830px;
+ }
+ .offset7 {
+ margin-left: 730px;
+ }
+ .offset6 {
+ margin-left: 630px;
+ }
+ .offset5 {
+ margin-left: 530px;
+ }
+ .offset4 {
+ margin-left: 430px;
+ }
+ .offset3 {
+ margin-left: 330px;
+ }
+ .offset2 {
+ margin-left: 230px;
+ }
+ .offset1 {
+ margin-left: 130px;
+ }
+ .row-fluid {
+ width: 100%;
+ *zoom: 1;
+ }
+ .row-fluid:before,
+ .row-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row-fluid:after {
+ clear: both;
+ }
+ .row-fluid [class*="span"] {
+ display: block;
+ float: left;
+ width: 100%;
+ min-height: 30px;
+ margin-left: 2.564102564102564%;
+ *margin-left: 2.5109110747408616%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ .row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680851063829%;
+ }
+ .row-fluid .span11 {
+ width: 91.45299145299145%;
+ *width: 91.39979996362975%;
+ }
+ .row-fluid .span10 {
+ width: 82.90598290598291%;
+ *width: 82.8527914166212%;
+ }
+ .row-fluid .span9 {
+ width: 74.35897435897436%;
+ *width: 74.30578286961266%;
+ }
+ .row-fluid .span8 {
+ width: 65.81196581196582%;
+ *width: 65.75877432260411%;
+ }
+ .row-fluid .span7 {
+ width: 57.26495726495726%;
+ *width: 57.21176577559556%;
+ }
+ .row-fluid .span6 {
+ width: 48.717948717948715%;
+ *width: 48.664757228587014%;
+ }
+ .row-fluid .span5 {
+ width: 40.17094017094017%;
+ *width: 40.11774868157847%;
+ }
+ .row-fluid .span4 {
+ width: 31.623931623931625%;
+ *width: 31.570740134569924%;
+ }
+ .row-fluid .span3 {
+ width: 23.076923076923077%;
+ *width: 23.023731587561375%;
+ }
+ .row-fluid .span2 {
+ width: 14.52991452991453%;
+ *width: 14.476723040552828%;
+ }
+ .row-fluid .span1 {
+ width: 5.982905982905983%;
+ *width: 5.929714493544281%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 105.12820512820512%;
+ *margin-left: 105.02182214948171%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 102.56410256410257%;
+ *margin-left: 102.45771958537915%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 96.58119658119658%;
+ *margin-left: 96.47481360247316%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 94.01709401709402%;
+ *margin-left: 93.91071103837061%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 88.03418803418803%;
+ *margin-left: 87.92780505546462%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 85.47008547008548%;
+ *margin-left: 85.36370249136206%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 79.48717948717949%;
+ *margin-left: 79.38079650845607%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 76.92307692307693%;
+ *margin-left: 76.81669394435352%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 70.94017094017094%;
+ *margin-left: 70.83378796144753%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 68.37606837606839%;
+ *margin-left: 68.26968539734497%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 62.393162393162385%;
+ *margin-left: 62.28677941443899%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.82905982905982%;
+ *margin-left: 59.72267685033642%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 53.84615384615384%;
+ *margin-left: 53.739770867430444%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 51.28205128205128%;
+ *margin-left: 51.175668303327875%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 45.299145299145295%;
+ *margin-left: 45.1927623204219%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.73504273504273%;
+ *margin-left: 42.62865975631933%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 36.75213675213675%;
+ *margin-left: 36.645753773413354%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 34.18803418803419%;
+ *margin-left: 34.081651209310785%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 28.205128205128204%;
+ *margin-left: 28.0987452264048%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.641025641025642%;
+ *margin-left: 25.53464266230224%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 19.65811965811966%;
+ *margin-left: 19.551736679396257%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 17.094017094017094%;
+ *margin-left: 16.98763411529369%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 11.11111111111111%;
+ *margin-left: 11.004728132387708%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.547008547008547%;
+ *margin-left: 8.440625568285142%;
+ }
+ input,
+ textarea,
+ .uneditable-input {
+ margin-left: 0;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 30px;
+ }
+ input.span12,
+ textarea.span12,
+ .uneditable-input.span12 {
+ width: 1156px;
+ }
+ input.span11,
+ textarea.span11,
+ .uneditable-input.span11 {
+ width: 1056px;
+ }
+ input.span10,
+ textarea.span10,
+ .uneditable-input.span10 {
+ width: 956px;
+ }
+ input.span9,
+ textarea.span9,
+ .uneditable-input.span9 {
+ width: 856px;
+ }
+ input.span8,
+ textarea.span8,
+ .uneditable-input.span8 {
+ width: 756px;
+ }
+ input.span7,
+ textarea.span7,
+ .uneditable-input.span7 {
+ width: 656px;
+ }
+ input.span6,
+ textarea.span6,
+ .uneditable-input.span6 {
+ width: 556px;
+ }
+ input.span5,
+ textarea.span5,
+ .uneditable-input.span5 {
+ width: 456px;
+ }
+ input.span4,
+ textarea.span4,
+ .uneditable-input.span4 {
+ width: 356px;
+ }
+ input.span3,
+ textarea.span3,
+ .uneditable-input.span3 {
+ width: 256px;
+ }
+ input.span2,
+ textarea.span2,
+ .uneditable-input.span2 {
+ width: 156px;
+ }
+ input.span1,
+ textarea.span1,
+ .uneditable-input.span1 {
+ width: 56px;
+ }
+ .thumbnails {
+ margin-left: -30px;
+ }
+ .thumbnails > li {
+ margin-left: 30px;
+ }
+ .row-fluid .thumbnails {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+ .row {
+ margin-left: -20px;
+ *zoom: 1;
+ }
+ .row:before,
+ .row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row:after {
+ clear: both;
+ }
+ [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 20px;
+ }
+ .container,
+ .navbar-static-top .container,
+ .navbar-fixed-top .container,
+ .navbar-fixed-bottom .container {
+ width: 724px;
+ }
+ .span12 {
+ width: 724px;
+ }
+ .span11 {
+ width: 662px;
+ }
+ .span10 {
+ width: 600px;
+ }
+ .span9 {
+ width: 538px;
+ }
+ .span8 {
+ width: 476px;
+ }
+ .span7 {
+ width: 414px;
+ }
+ .span6 {
+ width: 352px;
+ }
+ .span5 {
+ width: 290px;
+ }
+ .span4 {
+ width: 228px;
+ }
+ .span3 {
+ width: 166px;
+ }
+ .span2 {
+ width: 104px;
+ }
+ .span1 {
+ width: 42px;
+ }
+ .offset12 {
+ margin-left: 764px;
+ }
+ .offset11 {
+ margin-left: 702px;
+ }
+ .offset10 {
+ margin-left: 640px;
+ }
+ .offset9 {
+ margin-left: 578px;
+ }
+ .offset8 {
+ margin-left: 516px;
+ }
+ .offset7 {
+ margin-left: 454px;
+ }
+ .offset6 {
+ margin-left: 392px;
+ }
+ .offset5 {
+ margin-left: 330px;
+ }
+ .offset4 {
+ margin-left: 268px;
+ }
+ .offset3 {
+ margin-left: 206px;
+ }
+ .offset2 {
+ margin-left: 144px;
+ }
+ .offset1 {
+ margin-left: 82px;
+ }
+ .row-fluid {
+ width: 100%;
+ *zoom: 1;
+ }
+ .row-fluid:before,
+ .row-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row-fluid:after {
+ clear: both;
+ }
+ .row-fluid [class*="span"] {
+ display: block;
+ float: left;
+ width: 100%;
+ min-height: 30px;
+ margin-left: 2.7624309392265194%;
+ *margin-left: 2.709239449864817%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ .row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680851063829%;
+ }
+ .row-fluid .span11 {
+ width: 91.43646408839778%;
+ *width: 91.38327259903608%;
+ }
+ .row-fluid .span10 {
+ width: 82.87292817679558%;
+ *width: 82.81973668743387%;
+ }
+ .row-fluid .span9 {
+ width: 74.30939226519337%;
+ *width: 74.25620077583166%;
+ }
+ .row-fluid .span8 {
+ width: 65.74585635359117%;
+ *width: 65.69266486422946%;
+ }
+ .row-fluid .span7 {
+ width: 57.18232044198895%;
+ *width: 57.12912895262725%;
+ }
+ .row-fluid .span6 {
+ width: 48.61878453038674%;
+ *width: 48.56559304102504%;
+ }
+ .row-fluid .span5 {
+ width: 40.05524861878453%;
+ *width: 40.00205712942283%;
+ }
+ .row-fluid .span4 {
+ width: 31.491712707182323%;
+ *width: 31.43852121782062%;
+ }
+ .row-fluid .span3 {
+ width: 22.92817679558011%;
+ *width: 22.87498530621841%;
+ }
+ .row-fluid .span2 {
+ width: 14.3646408839779%;
+ *width: 14.311449394616199%;
+ }
+ .row-fluid .span1 {
+ width: 5.801104972375691%;
+ *width: 5.747913483013988%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 105.52486187845304%;
+ *margin-left: 105.41847889972962%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 102.76243093922652%;
+ *margin-left: 102.6560479605031%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 96.96132596685082%;
+ *margin-left: 96.8549429881274%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 94.1988950276243%;
+ *margin-left: 94.09251204890089%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 88.39779005524862%;
+ *margin-left: 88.2914070765252%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 85.6353591160221%;
+ *margin-left: 85.52897613729868%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 79.8342541436464%;
+ *margin-left: 79.72787116492299%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 77.07182320441989%;
+ *margin-left: 76.96544022569647%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 71.2707182320442%;
+ *margin-left: 71.16433525332079%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 68.50828729281768%;
+ *margin-left: 68.40190431409427%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 62.70718232044199%;
+ *margin-left: 62.600799341718584%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.94475138121547%;
+ *margin-left: 59.838368402492065%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 54.14364640883978%;
+ *margin-left: 54.037263430116376%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 51.38121546961326%;
+ *margin-left: 51.27483249088986%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 45.58011049723757%;
+ *margin-left: 45.47372751851417%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.81767955801105%;
+ *margin-left: 42.71129657928765%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 37.01657458563536%;
+ *margin-left: 36.91019160691196%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 34.25414364640884%;
+ *margin-left: 34.14776066768544%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 28.45303867403315%;
+ *margin-left: 28.346655695309746%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.69060773480663%;
+ *margin-left: 25.584224756083227%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 19.88950276243094%;
+ *margin-left: 19.783119783707537%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 17.12707182320442%;
+ *margin-left: 17.02068884448102%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 11.32596685082873%;
+ *margin-left: 11.219583872105325%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.56353591160221%;
+ *margin-left: 8.457152932878806%;
+ }
+ input,
+ textarea,
+ .uneditable-input {
+ margin-left: 0;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 20px;
+ }
+ input.span12,
+ textarea.span12,
+ .uneditable-input.span12 {
+ width: 710px;
+ }
+ input.span11,
+ textarea.span11,
+ .uneditable-input.span11 {
+ width: 648px;
+ }
+ input.span10,
+ textarea.span10,
+ .uneditable-input.span10 {
+ width: 586px;
+ }
+ input.span9,
+ textarea.span9,
+ .uneditable-input.span9 {
+ width: 524px;
+ }
+ input.span8,
+ textarea.span8,
+ .uneditable-input.span8 {
+ width: 462px;
+ }
+ input.span7,
+ textarea.span7,
+ .uneditable-input.span7 {
+ width: 400px;
+ }
+ input.span6,
+ textarea.span6,
+ .uneditable-input.span6 {
+ width: 338px;
+ }
+ input.span5,
+ textarea.span5,
+ .uneditable-input.span5 {
+ width: 276px;
+ }
+ input.span4,
+ textarea.span4,
+ .uneditable-input.span4 {
+ width: 214px;
+ }
+ input.span3,
+ textarea.span3,
+ .uneditable-input.span3 {
+ width: 152px;
+ }
+ input.span2,
+ textarea.span2,
+ .uneditable-input.span2 {
+ width: 90px;
+ }
+ input.span1,
+ textarea.span1,
+ .uneditable-input.span1 {
+ width: 28px;
+ }
+}
+
+@media (max-width: 767px) {
+ body {
+ padding-right: 20px;
+ padding-left: 20px;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom,
+ .navbar-static-top {
+ margin-right: -20px;
+ margin-left: -20px;
+ }
+ .container-fluid {
+ padding: 0;
+ }
+ .dl-horizontal dt {
+ float: none;
+ width: auto;
+ clear: none;
+ text-align: left;
+ }
+ .dl-horizontal dd {
+ margin-left: 0;
+ }
+ .container {
+ width: auto;
+ }
+ .row-fluid {
+ width: 100%;
+ }
+ .row,
+ .thumbnails {
+ margin-left: 0;
+ }
+ .thumbnails > li {
+ float: none;
+ margin-left: 0;
+ }
+ [class*="span"],
+ .row-fluid [class*="span"] {
+ display: block;
+ float: none;
+ width: 100%;
+ margin-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .span12,
+ .row-fluid .span12 {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .input-large,
+ .input-xlarge,
+ .input-xxlarge,
+ input[class*="span"],
+ select[class*="span"],
+ textarea[class*="span"],
+ .uneditable-input {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .input-prepend input,
+ .input-append input,
+ .input-prepend input[class*="span"],
+ .input-append input[class*="span"] {
+ display: inline-block;
+ width: auto;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 0;
+ }
+ .modal {
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ left: 20px;
+ width: auto;
+ margin: 0;
+ }
+ .modal.fade.in {
+ top: auto;
+ }
+}
+
+@media (max-width: 480px) {
+ .nav-collapse {
+ -webkit-transform: translate3d(0, 0, 0);
+ }
+ .page-header h1 small {
+ display: block;
+ line-height: 20px;
+ }
+ input[type="checkbox"],
+ input[type="radio"] {
+ border: 1px solid #ccc;
+ }
+ .form-horizontal .control-label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ text-align: left;
+ }
+ .form-horizontal .controls {
+ margin-left: 0;
+ }
+ .form-horizontal .control-list {
+ padding-top: 0;
+ }
+ .form-horizontal .form-actions {
+ padding-right: 10px;
+ padding-left: 10px;
+ }
+ .modal {
+ top: 10px;
+ right: 10px;
+ left: 10px;
+ }
+ .modal-header .close {
+ padding: 10px;
+ margin: -10px;
+ }
+ .carousel-caption {
+ position: static;
+ }
+}
+
+@media (max-width: 979px) {
+ body {
+ padding-top: 0;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ position: static;
+ }
+ .navbar-fixed-top {
+ margin-bottom: 20px;
+ }
+ .navbar-fixed-bottom {
+ margin-top: 20px;
+ }
+ .navbar-fixed-top .navbar-inner,
+ .navbar-fixed-bottom .navbar-inner {
+ padding: 5px;
+ }
+ .navbar .container {
+ width: auto;
+ padding: 0;
+ }
+ .navbar .brand {
+ padding-right: 10px;
+ padding-left: 10px;
+ margin: 0 0 0 -5px;
+ }
+ .nav-collapse {
+ clear: both;
+ }
+ .nav-collapse .nav {
+ float: none;
+ margin: 0 0 10px;
+ }
+ .nav-collapse .nav > li {
+ float: none;
+ }
+ .nav-collapse .nav > li > a {
+ margin-bottom: 2px;
+ }
+ .nav-collapse .nav > .divider-vertical {
+ display: none;
+ }
+ .nav-collapse .nav .nav-header {
+ color: #777777;
+ text-shadow: none;
+ }
+ .nav-collapse .nav > li > a,
+ .nav-collapse .dropdown-menu a {
+ padding: 9px 15px;
+ font-weight: bold;
+ color: #777777;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ }
+ .nav-collapse .btn {
+ padding: 4px 10px 4px;
+ font-weight: normal;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ }
+ .nav-collapse .dropdown-menu li + li a {
+ margin-bottom: 2px;
+ }
+ .nav-collapse .nav > li > a:hover,
+ .nav-collapse .dropdown-menu a:hover {
+ background-color: #f2f2f2;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a:hover,
+ .navbar-inverse .nav-collapse .dropdown-menu a:hover {
+ background-color: #111111;
+ }
+ .nav-collapse.in .btn-group {
+ padding: 0;
+ margin-top: 5px;
+ }
+ .nav-collapse .dropdown-menu {
+ position: static;
+ top: auto;
+ left: auto;
+ display: block;
+ float: none;
+ max-width: none;
+ padding: 0;
+ margin: 0 15px;
+ background-color: transparent;
+ border: none;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ }
+ .nav-collapse .dropdown-menu:before,
+ .nav-collapse .dropdown-menu:after {
+ display: none;
+ }
+ .nav-collapse .dropdown-menu .divider {
+ display: none;
+ }
+ .nav-collapse .nav > li > .dropdown-menu:before,
+ .nav-collapse .nav > li > .dropdown-menu:after {
+ display: none;
+ }
+ .nav-collapse .navbar-form,
+ .nav-collapse .navbar-search {
+ float: none;
+ padding: 10px 15px;
+ margin: 10px 0;
+ border-top: 1px solid #f2f2f2;
+ border-bottom: 1px solid #f2f2f2;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ }
+ .navbar-inverse .nav-collapse .navbar-form,
+ .navbar-inverse .nav-collapse .navbar-search {
+ border-top-color: #111111;
+ border-bottom-color: #111111;
+ }
+ .navbar .nav-collapse .nav.pull-right {
+ float: none;
+ margin-left: 0;
+ }
+ .nav-collapse,
+ .nav-collapse.collapse {
+ height: 0;
+ overflow: hidden;
+ }
+ .navbar .btn-navbar {
+ display: block;
+ }
+ .navbar-static .navbar-inner {
+ padding-right: 10px;
+ padding-left: 10px;
+ }
+}
+
+@media (min-width: 980px) {
+ .nav-collapse.collapse {
+ height: auto !important;
+ overflow: visible !important;
+ }
+}
5,774 css/bootstrap/bootstrap.css
5,774 additions, 0 deletions not shown
46 css/githubiverse/default.css
@@ -0,0 +1,46 @@
+body {
+ background: #e3edf9; /* Old browsers */
+ background: -moz-linear-gradient(left, #e3edf9 0%, #ffffff 15%, #ffffff 85%, #e3edf9 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%,#e3edf9), color-stop(15%,#ffffff), color-stop(85%,#ffffff), color-stop(100%,#e3edf9)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(left, #e3edf9 0%,#ffffff 15%,#ffffff 85%,#e3edf9 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(left, #e3edf9 0%,#ffffff 15%,#ffffff 85%,#e3edf9 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(left, #e3edf9 0%,#ffffff 15%,#ffffff 85%,#e3edf9 100%); /* IE10+ */
+ background: linear-gradient(to right, #e3edf9 0%,#ffffff 15%,#ffffff 85%,#e3edf9 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e3edf9', endColorstr='#e3edf9',GradientType=1 ); /* IE6-9 */
+}
+
+#stlviewer {
+ width: 100%;
+ min-height: 300px;
+ border: 1px solid grey;
+ margin-bottom: 10px;
+}
+
+.imgfile {
+ width: 100px;
+}
+
+#description {
+ padding: 5px;
+ padding-bottom: 20px;
+ border-bottom: 1px dashed grey;
+}
+
+.meta {
+ padding-top: 7px;
+ border-bottom: 1px dashed grey;
+}
+
+#sources-section {
+ max-height: 800px;
+ overflow: auto;
+}
+
+#stls-section {
+ max-height: 800px;
+ overflow: auto;
+}
+
+#lead-image-container {
+ margin: 5px;
+}
181 css/lightbox/lightbox.css
@@ -0,0 +1,181 @@
+/* line 6, ../sass/lightbox.sass */
+#lightboxOverlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 9999;
+ background-color: black;
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85);
+ opacity: 0.85;
+ display: none;
+}
+
+/* line 15, ../sass/lightbox.sass */
+#lightbox {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ z-index: 10000;
+ text-align: center;
+ line-height: 0;
+ font-family: "lucida grande", tahoma, verdana, arial, sans-serif;
+ font-weight: normal;
+}
+/* line 24, ../sass/lightbox.sass */
+#lightbox img {
+ width: auto;
+ height: auto;
+}
+/* line 27, ../sass/lightbox.sass */
+#lightbox a img {
+ border: none;
+}
+
+/* line 30, ../sass/lightbox.sass */
+.lb-outerContainer {
+ position: relative;
+ background-color: white;
+ *zoom: 1;
+ width: 250px;
+ height: 250px;
+ margin: 0 auto;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+/* line 38, ../../../../.rvm/gems/ruby-1.9.2-p290/gems/compass-0.12.1/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
+.lb-outerContainer:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+/* line 39, ../sass/lightbox.sass */
+.lb-container {
+ padding: 10px;
+}
+
+/* line 42, ../sass/lightbox.sass */
+.lb-loader {
+ position: absolute;
+ top: 40%;
+ left: 0%;
+ height: 25%;
+ width: 100%;
+ text-align: center;
+ line-height: 0;
+}
+
+/* line 51, ../sass/lightbox.sass */
+.lb-nav {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 10;
+}
+
+/* line 59, ../sass/lightbox.sass */
+.lb-container > .nav {
+ left: 0;
+}
+
+/* line 62, ../sass/lightbox.sass */
+.lb-nav a {
+ outline: none;
+}
+
+/* line 65, ../sass/lightbox.sass */
+.lb-prev, .lb-next {
+ width: 49%;
+ height: 100%;
+ background-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+ /* Trick IE into showing hover */
+ display: block;
+}
+
+/* line 72, ../sass/lightbox.sass */
+.lb-prev {
+ left: 0;
+ float: left;
+}
+
+/* line 76, ../sass/lightbox.sass */
+.lb-next {
+ right: 0;
+ float: right;
+}
+
+/* line 81, ../sass/lightbox.sass */
+.lb-prev:hover {
+ background: url(../../img/lightbox/prev.png) left 48% no-repeat;
+}
+
+/* line 85, ../sass/lightbox.sass */
+.lb-next:hover {
+ background: url(../../img/lightbox/next.png) right 48% no-repeat;
+}
+
+/* line 88, ../sass/lightbox.sass */
+.lb-dataContainer {
+ margin: 0 auto;
+ padding-top: 5px;
+ *zoom: 1;
+ width: 100%;
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -ms-border-bottom-left-radius: 4px;
+ -o-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -ms-border-bottom-right-radius: 4px;
+ -o-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+/* line 38, ../../../../.rvm/gems/ruby-1.9.2-p290/gems/compass-0.12.1/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
+.lb-dataContainer:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+/* line 95, ../sass/lightbox.sass */
+.lb-data {
+ padding: 0 10px;
+ color: #bbbbbb;
+}
+/* line 98, ../sass/lightbox.sass */
+.lb-data .lb-details {
+ width: 85%;
+ float: left;
+ text-align: left;
+ line-height: 1.1em;
+}
+/* line 103, ../sass/lightbox.sass */
+.lb-data .lb-caption {
+ font-size: 13px;
+ font-weight: bold;
+ line-height: 1em;
+}
+/* line 107, ../sass/lightbox.sass */
+.lb-data .lb-number {
+ display: block;
+ clear: left;
+ padding-bottom: 1em;
+ font-size: 11px;
+}
+/* line 112, ../sass/lightbox.sass */
+.lb-data .lb-close {
+ width: 35px;
+ float: right;
+ padding-bottom: 0.7em;
+ outline: none;
+}
+/* line 117, ../sass/lightbox.sass */
+.lb-data .lb-close:hover {
+ cursor: pointer;
+}
BIN  img/bootstrap/glyphicons-halflings-white.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/bootstrap/glyphicons-halflings.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/favicon.ico
Binary file not shown
BIN  img/lightbox/bg-checker.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/box.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/bullet.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/close.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/favicon.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/loading.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/next.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/prev.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  img/lightbox/speech-bubbles.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 index.md
@@ -0,0 +1,40 @@
+---
+
+##### Metadata
+title: "Mechanical Movement #27"
+author: Gary Hodgson
+license: GPL3
+tags: [mechanical movement, fun]
+
+##### Optional. When uncommented appends the content of the file defined here to the project description. Any text at the bottom of this file, after this yaml header, will be shown first.
+#description_file: readme.md
+
+##### Github project parameters.
+github:
+ base: https://github.com/
+ user: garyhodgson
+ repository: githubiverse-tst
+ branch: master
+
+##### The names of directories where any images, source and stl files associated with the project can be found.
+img_dir: img
+stl_dir: stl
+src_dir: src
+
+##### The headline image
+lead_image: assembly.png
+show_lead_image: true
+
+##### Preview the first STL in the list when the page loads.
+autoload_stl: true
+
+##### Show a github "fork me" ribbon in the top righthand corner of the page.
+show_forkme_ribbon: true
+
+##### Which template to use.
+layout: default
+
+
+---
+
+An implementation of movement \#27 from ["501 Mechanical Movements"](http://books.google.de/books/about/507_Mechanical_Movements.html?id=CSH5UgzD8oIC&redir_esc=y) by Henry T. Brown.
6 js/bootstrap/bootstrap.min.js
@@ -0,0 +1,6 @@
+/*!
+* Bootstrap.js by @fat & @mdo
+* Copyright 2012 Twitter, Inc.
+* http://www.apache.org/licenses/LICENSE-2.0.txt
+*/
+!function(e){e(function(){"use strict";e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()},e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e(function(){e("body").on("click.alert.data-api",t,n.prototype.close)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")},e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e(function(){e("body").on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=n,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},to:function(t){var n=this.$element.find(".item.active"),r=n.parent().children(),i=r.index(n),s=this;if(t>r.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){s.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",e(r[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f=e.Event("slide",{relatedTarget:i[0]});this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();if(i.hasClass("active"))return;if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}},e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e(function(){e("body").on("click.carousel.data-api","[data-slide]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=!i.data("modal")&&e.extend({},i.data(),n.data());i.carousel(s),t.preventDefault()})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning)return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning)return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=typeof n=="object"&&n;i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e(function(){e("body").on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})})}(window.jQuery),!function(e){"use strict";function r(){i(e(t)).removeClass("open")}function i(t){var n=t.attr("data-target"),r;return n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=e(n),r.length||(r=t.parent()),r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||(s.toggleClass("open"),n.focus()),!1},keydown:function(t){var n,r,s,o,u,a;if(!/(38|40|27)/.test(t.keyCode))return;n=e(this),t.preventDefault(),t.stopPropagation();if(n.is(".disabled, :disabled"))return;o=i(n),u=o.hasClass("open");if(!u||u&&t.keyCode==27)return n.click();r=e("[role=menu] li:not(.divider) a",o);if(!r.length)return;a=r.index(r.filter(":focus")),t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<r.length-1&&a++,~a||(a=0),r.eq(a).focus()}},e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e(function(){e("html").on("click.dropdown.data-api touchstart.dropdown.data-api",r),e("body").on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;e("body").addClass("modal-open"),this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1).focus(),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.trigger("shown")}):t.$element.trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,e("body").removeClass("modal-open"),this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(e){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,e.proxy(this.removeBackdrop,this)):this.removeBackdrop()):t&&t()}},e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e(function(){e("body").on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):this.options.trigger!="manual"&&(i=this.options.trigger=="hover"?"mouseenter":"focus",s=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this))),this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,t,this.$element.data()),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var e,t,n,r,i,s,o;if(this.hasContent()&&this.enabled){e=this.tip(),this.setContent(),this.options.animation&&e.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,t=/in/.test(s),e.remove().css({top:0,left:0,display:"block"}).appendTo(t?this.$element:document.body),n=this.getPosition(t),r=e[0].offsetWidth,i=e[0].offsetHeight;switch(t?s.split(" ")[1]:s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}e.css(o).addClass(s).addClass("in")}},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function r(){var t=setTimeout(function(){n.off(e.support.transition.end).remove()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.remove()})}var t=this,n=this.tip();return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?r():n.remove(),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(t){return e.extend({},t?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0,html:!0}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content > *")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-content")||(typeof n.content=="function"?n.content.call(t[0]):n.content),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}}),e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var t=e(this),n=t.data("target")||t.attr("href"),r=/^#\w/.test(n)&&e(n);return r&&r.length&&[[r.position().top,n]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}},e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active a").last()[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}},e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e(function(){e("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.chrome||e.browser.webkit||e.browser.msie)&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this))},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=!~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),n.typeahead(n.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))},e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
20 js/github/gh3.min.js
@@ -0,0 +1,20 @@
+(function(){var c,f,h;c="undefined"!==typeof exports?exports:this.Gh3={};c.VERSION="0.0.7";f=function(){};f.inherits=function(a,b,d){var e,c=function(){},f=function(a,b){for(var d in b)a[d]=b[d]};e=b&&b.hasOwnProperty("constructor")?b.constructor:function(){a.apply(this,arguments)};f(e,a);c.prototype=a.prototype;e.prototype=new c;b&&f(e.prototype,b);d&&f(e,d);e.prototype.constructor=e;e.__super__=a.prototype;return e};f.extend=function(a,b){var d=f.inherits(this,a,b);d.extend=this.extend;return d};
+h={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",decode:function(a){for(var b="",d,e,c,f,i,g=0,a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");g<a.length;)d=this._keyStr.indexOf(a.charAt(g++)),e=this._keyStr.indexOf(a.charAt(g++)),f=this._keyStr.indexOf(a.charAt(g++)),i=this._keyStr.indexOf(a.charAt(g++)),d=d<<2|e>>4,e=(e&15)<<4|f>>2,c=(f&3)<<6|i,b+=String.fromCharCode(d),64!=f&&(b+=String.fromCharCode(e)),64!=i&&(b+=String.fromCharCode(c));return b=h._utf8_decode(b)},_utf8_decode:function(a){for(var b=
+"",d=0,e=c1=c2=0;d<a.length;)e=a.charCodeAt(d),128>e?(b+=String.fromCharCode(e),d++):191<e&&224>e?(c2=a.charCodeAt(d+1),b+=String.fromCharCode((e&31)<<6|c2&63),d+=2):(c2=a.charCodeAt(d+1),c3=a.charCodeAt(d+2),b+=String.fromCharCode((e&15)<<12|(c2&63)<<6|c3&63),d+=3);return b}};c.Helper=f.extend({},{protocol:"https",domain:"api.github.com",callHttpApi:function(a){a.url=c.Helper.protocol+"://"+c.Helper.domain+"/"+a.service;a.dataType="jsonp";$.ajax(a)}});c.Users=f.extend({},{users:[],search:function(a,
+b,d){c.Users.users=[];c.Helper.callHttpApi({service:"legacy/user/search/"+a,data:b,success:function(a){_.each(a.data.users,function(a){c.Users.users.push(new c.User(a.login,a))});d&&d(null,c.Users)},error:function(a){d&&d(Error(a))}})},reverse:function(){c.Users.users.reverse()},sort:function(a){a?c.Users.users.sort(a):c.Users.users.sort()},getAll:function(){return c.Users.users},getByName:function(a){return _.find(c.Users.users,function(b){return b.name==a})},each:function(a){_.each(c.Users.users,
+function(b){a(b)})},filter:function(a){return _.filter(c.Users.users,a)}});c.User=f.extend({constructor:function(a,b){if(b)for(var d in b)this[d]=b[d];if(a)this.login=a;else throw"login !";},fetch:function(a){var b=this;c.Helper.callHttpApi({service:"users/"+b.login,success:function(d){for(var e in d.data)b[e]=d.data[e];a&&a(null,b)},error:function(b){a&&a(Error(b))}})}},{});c.GistComment=f.extend({constructor:function(a){for(var b in a)this[b]=a[b]}},{});c.Gist=f.extend({constructor:function(a){for(var b in a)this[b]=
+a[b]},fetchContents:function(a){var b=this;b.files=[];c.Helper.callHttpApi({service:"gists/"+b.id,success:function(d){for(var e in d.data.files)b.files.push(d.data.files[e]);delete d.data.files;for(var c in d.data)b[c]=d.data[c];a&&a(null,b)},error:function(b){a&&a(Error(b))}})},fetchComments:function(a){var b=this;b.comments=[];c.Helper.callHttpApi({service:"gists/"+b.id+"/comments",success:function(d){_.each(d.data,function(a){b.comments.push(new c.GistComment(a))});a&&a(null,b)},error:function(b){a&&
+a(Error(b))}})},getFileByName:function(a){return _.find(this.files,function(b){return b.filename==a})},getFiles:function(){return this.files},eachFile:function(a){_.each(this.files,function(b){a(b)})},getComments:function(){return this.comments},eachComment:function(a){_.each(this.comments,function(b){a(b)})},filterComments:function(a){return _.filter(this.comments,a)}},{});c.Gists=f.extend({constructor:function(a){a&&(this.user=a);this.gists=[]},fetch:function(a,b,d){var e=this;c.Helper.callHttpApi({service:"users/"+
+e.user.login+"/gists",data:a,beforeSend:function(a){a.setRequestHeader("rel",b)},success:function(a){_.each(a.data,function(a){e.gists.push(new c.Gist(a))});d&&d(null,e)},error:function(a){d&&d(Error(a))}})},getGists:function(){return this.gists},eachGist:function(a){_.each(this.gists,function(b){a(b)})},filter:function(a){return _.filter(this.gists,a)}},{});c.Commit=f.extend({constructor:function(a){this.author=a.author;this.author.email=a.commit.author.email;this.author.name=a.commit.author.name;
+this.date=a.commit.author.date;this.message=a.commit.message;this.sha=a.sha;this.url=a.url}},{});c.ItemContent=f.extend({constructor:function(a,b,d,c){for(var f in a)this[f]=a[f];b&&(this.user=b);d&&(this.repositoryName=d);c&&(this.branchName=c)}},{});c.File=c.ItemContent.extend({constructor:function(a,b,d,e){c.File.__super__.constructor.call(this,a,b,d,e)},fetchContent:function(a){var b=this;c.Helper.callHttpApi({service:"repos/"+b.user.login+"/"+b.repositoryName+"/contents/"+b.path,success:function(d){b.content=
+d.data.content;b.rawContent=h.decode(d.data.content);a&&a(null,b)},error:function(b){a&&a(Error(b))}})},fetchCommits:function(a){var b=this;b.commits=[];c.Helper.callHttpApi({service:"repos/"+b.user.login+"/"+b.repositoryName+"/commits",data:{path:b.path},success:function(d){_.each(d.data,function(a){b.commits.push(new c.Commit(a))});a&&a(null,b)},error:function(b){a&&a(Error(b))}})},getRawContent:function(){return this.rawContent},getCommits:function(){return this.commits},getLastCommit:function(){return this.commits[0]},
+getFirstCommit:function(){return this.commits[this.commits.length-1]},eachCommit:function(a){_.each(this.commits,function(b){a(b)})},filterCommits:function(a){return _.filter(this.commits,a)},reverseCommits:function(){this.commits.reverse()},sortCommits:function(a){a?this.commits.sort(a):this.commits.sort()}},{});c.Dir=c.ItemContent.extend({constructor:function(a,b,d,e){c.Dir.__super__.constructor.call(this,a,b,d,e)},fetchContents:function(a){var b=this;b.contents=[];c.Helper.callHttpApi({service:"repos/"+
+b.user.login+"/"+b.repositoryName+"/contents/"+b.path,data:{ref:b.branchName},success:function(d){_.each(d.data,function(a){"file"==a.type&&b.contents.push(new c.File(a,b.user,b.repositoryName,b.branchName));"dir"==a.type&&b.contents.push(new c.Dir(a,b.user,b.repositoryName,b.branchName))});a&&a(null,b)},error:function(b){a&&a(Error(b))}})},reverseContents:function(){this.contents.reverse()},sortContents:function(a){a?this.contents.sort(a):this.contents.sort()},getContents:function(){return this.contents},
+getFileByName:function(a){return _.find(this.contents,function(b){return b.name==a&&"file"==b.type})},getDirByName:function(a){return _.find(this.contents,function(b){return b.name==a&&"dir"==b.type})},eachContent:function(a){_.each(this.contents,function(b){a(b)})},filterContents:function(a){return _.filter(this.contents,a)}},{});c.Branch=f.extend({constructor:function(a,b,d,c,f){a&&(this.name=a);b&&(this.sha=b);d&&(this.url=d);c&&(this.user=c);f&&(this.repositoryName=f)},fetchContents:function(a){var b=
+this;b.contents=[];c.Helper.callHttpApi({service:"repos/"+b.user.login+"/"+b.repositoryName+"/contents/",data:{ref:b.name},success:function(d){_.each(d.data,function(a){"file"==a.type&&b.contents.push(new c.File(a,b.user,b.repositoryName,b.name));"dir"==a.type&&b.contents.push(new c.Dir(a,b.user,b.repositoryName,b.name))});a&&a(null,b)},error:function(b){a&&a(Error(b))}})},reverseContents:function(){this.contents.reverse()},sortContents:function(a){a?this.contents.sort(a):this.contents.sort()},getContents:function(){return this.contents},
+getFileByName:function(a){return _.find(this.contents,function(b){return b.name==a&&"file"==b.type})},getDirByName:function(a){return _.find(this.contents,function(b){return b.name==a&&"dir"==b.type})},eachContent:function(a){_.each(this.contents,function(b){a(b)})},filterContents:function(a){return _.filter(this.contents,a)}},{});c.Repository=f.extend({constructor:function(a,b,d){if(d)for(var c in d)this[c]=d[c];a&&(this.name=a);b&&(this.user=b)},fetch:function(a){var b=this;c.Helper.callHttpApi({service:"repos/"+
+b.user.login+"/"+b.name,success:function(d){for(var c in d.data)b[c]=d.data[c];a&&a(null,b)},error:function(b){a&&a(Error(b))}})},fetchBranches:function(a){var b=this;b.branches=[];c.Helper.callHttpApi({service:"repos/"+b.user.login+"/"+b.name+"/branches",success:function(d){_.each(d.data,function(a){b.branches.push(new c.Branch(a.name,a.commit.sha,a.commit.url,b.user,b.name))});a&&a(null,b)},error:function(b){a&&a(Error(b))}})},getBranches:function(){return this.branches},getBranchByName:function(a){return _.find(this.branches,
+function(b){return b.name==a})},eachBranch:function(a){_.each(this.branches,function(b){a(b)})},reverseBranches:function(){this.branches.reverse()},sortBranches:function(a){a?this.branches.sort(a):this.branches.sort()}},{});c.Repositories=f.extend({constructor:function(a){a&&(this.user=a)},fetch:function(a,b,d){var e=this;e.repositories=[];c.Helper.callHttpApi({service:"users/"+e.user.login+"/repos",data:a,beforeSend:function(a){a.setRequestHeader("rel",b)},success:function(a){_.each(a.data,function(a){e.repositories.push(new c.Repository(a.name,
+e.user))});d&&d(null,e)},error:function(a){d&&d(Error(a))}})},reverseRepositories:function(){this.repositories.reverse()},sortRepositories:function(a){a?this.repositories.sort(a):this.repositories.sort()},getRepositories:function(){return this.repositories},getRepositoryByName:function(a){return _.find(this.repositories,function(b){return b.name==a})},eachRepository:function(a){_.each(this.repositories,function(b){a(b)})},filterRepositories:function(a){return _.filter(this.repositories,a)}},{repositories:[],
+search:function(a,b,d){c.Repositories.repositories=[];c.Helper.callHttpApi({service:"legacy/repos/search/"+a,data:b,success:function(a){_.each(a.data.repositories,function(a){c.Repositories.repositories.push(new c.Repository(a.name,new c.User(a.owner),a))});d&&d(null,c.Repositories)},error:function(a){d&&d(Error(a))}})},reverse:function(){c.Repositories.repositories.reverse()},sort:function(a){a?c.Repositories.repositories.sort(a):c.Repositories.repositories.sort()},getAll:function(){return c.Repositories.repositories},
+getByName:function(a){return _.find(c.Repositories.repositories,function(b){return b.name==a})},each:function(a){_.each(c.Repositories.repositories,function(b){a(b)})},filter:function(a){return _.filter(c.Repositories.repositories,a)}})}).call(this);
355 js/lightbox/lightbox.js
@@ -0,0 +1,355 @@
+
+/*
+Lightbox v2.51
+by Lokesh Dhakar - http://www.lokeshdhakar.com
+
+
+Slight modification by Gary Hodgson: images larger than screen should be scaled down.
+
+
+For more information, visit:
+http://lokeshdhakar.com/projects/lightbox2/
+
+Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
+- free for use in both personal and commercial projects
+- attribution requires leaving author name, author link, and the license info intact
+
+Thanks
+- Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.com), and Thomas Fuchs(mir.aculo.us) for ideas, libs, and snippets.
+- Artemy Tregubenko (arty.name) for cleanup and help in updating to latest proto-aculous in v2.05.
+
+
+Table of Contents
+=================
+LightboxOptions
+
+Lightbox
+- constructor
+- init
+- enable
+- build
+- start
+- changeImage
+- sizeContainer
+- showImage
+- updateNav
+- updateDetails
+- preloadNeigbhoringImages
+- enableKeyboardNav
+- disableKeyboardNav
+- keyboardAction
+- end
+
+options = new LightboxOptions
+lightbox = new Lightbox options
+*/
+
+(function() {
+ var $, Lightbox, LightboxOptions;
+
+ $ = jQuery;
+
+ LightboxOptions = (function() {
+
+ function LightboxOptions() {
+ this.fileLoadingImage = 'img/lightbox/loading.gif';
+ this.fileCloseImage = 'img/lightbox/close.png';
+ this.resizeDuration = 100;
+ this.fadeDuration = 100;
+ this.labelImage = "Image";
+ this.labelOf = "of";
+ }
+
+ return LightboxOptions;
+
+ })();
+
+ Lightbox = (function() {
+
+ function Lightbox(options) {
+ this.options = options;
+ this.album = [];
+ this.currentImageIndex = void 0;
+ this.init();
+ }
+
+ Lightbox.prototype.init = function() {
+ this.enable();
+ return this.build();
+ };
+
+ Lightbox.prototype.enable = function() {
+ var _this = this;
+ return $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox]', function(e) {
+ _this.start($(e.currentTarget));
+ return false;
+ });
+ };
+
+ Lightbox.prototype.build = function() {
+ var $lightbox,
+ _this = this;
+ $("<div>", {
+ id: 'lightboxOverlay'
+ }).after($('<div/>', {
+ id: 'lightbox'
+ }).append($('<div/>', {
+ "class": 'lb-outerContainer'
+ }).append($('<div/>', {
+ "class": 'lb-container'
+ }).append($('<img/>', {
+ "class": 'lb-image'
+ }), $('<div/>', {
+ "class": 'lb-nav'
+ }).append($('<a/>', {
+ "class": 'lb-prev'
+ }), $('<a/>', {
+ "class": 'lb-next'
+ })), $('<div/>', {
+ "class": 'lb-loader'
+ }).append($('<a/>', {
+ "class": 'lb-cancel'
+ }).append($('<img/>', {
+ src: this.options.fileLoadingImage
+ }))))), $('<div/>', {
+ "class": 'lb-dataContainer'
+ }).append($('<div/>', {
+ "class": 'lb-data'
+ }).append($('<div/>', {
+ "class": 'lb-details'
+ }).append($('<span/>', {
+ "class": 'lb-caption'
+ }), $('<span/>', {
+ "class": 'lb-number'
+ })), $('<div/>', {
+ "class": 'lb-closeContainer'
+ }).append($('<a/>', {
+ "class": 'lb-close'
+ }).append($('<img/>', {
+ src: this.options.fileCloseImage
+ }))))))).appendTo($('body'));
+ $('#lightboxOverlay').hide().on('click', function(e) {
+ _this.end();
+ return false;
+ });
+ $lightbox = $('#lightbox');
+ $lightbox.hide().on('click', function(e) {
+ if ($(e.target).attr('id') === 'lightbox') _this.end();
+ return false;
+ });
+ $lightbox.find('.lb-outerContainer').on('click', function(e) {
+ if ($(e.target).attr('id') === 'lightbox') _this.end();
+ return false;
+ });
+ $lightbox.find('.lb-prev').on('click', function(e) {
+ _this.changeImage(_this.currentImageIndex - 1);
+ return false;
+ });
+ $lightbox.find('.lb-next').on('click', function(e) {
+ _this.changeImage(_this.currentImageIndex + 1);
+ return false;
+ });
+ $lightbox.find('.lb-loader, .lb-close').on('click', function(e) {
+ _this.end();
+ return false;
+ });
+ };
+
+ Lightbox.prototype.start = function($link) {
+ var $lightbox, $window, a, i, imageNumber, left, top, _len, _ref;
+ $(window).on("resize", this.sizeOverlay);
+ $('select, object, embed').css({
+ visibility: "hidden"
+ });
+ $('#lightboxOverlay').width($(document).width()).height($(document).height()).fadeIn(this.options.fadeDuration);
+ this.album = [];
+ imageNumber = 0;
+ if ($link.attr('rel') === 'lightbox') {
+ this.album.push({
+ link: $link.attr('href'),
+ title: $link.attr('title')
+ });
+ } else {
+ _ref = $($link.prop("tagName") + '[rel="' + $link.attr('rel') + '"]');
+ for (i = 0, _len = _ref.length; i < _len; i++) {
+ a = _ref[i];
+ this.album.push({
+ link: $(a).attr('href'),
+ title: $(a).attr('title')
+ });
+ if ($(a).attr('href') === $link.attr('href')) imageNumber = i;
+ }
+ }
+ $window = $(window);
+ top = $window.scrollTop() + $window.height() / 10;
+ left = $window.scrollLeft();
+ $lightbox = $('#lightbox');
+ $lightbox.css({
+ top: top + 'px',
+ left: left + 'px'
+ }).fadeIn(this.options.fadeDuration);
+ this.changeImage(imageNumber);
+ };
+
+ Lightbox.prototype.changeImage = function(imageNumber) {
+ var $image, $lightbox, preloader,
+ _this = this;
+ this.disableKeyboardNav();
+ $lightbox = $('#lightbox');
+ $image = $lightbox.find('.lb-image');
+ this.sizeOverlay();
+ $('#lightboxOverlay').fadeIn(this.options.fadeDuration);
+ $('.loader').fadeIn('slow');
+ $lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide();
+ $lightbox.find('.lb-outerContainer').addClass('animating');
+ preloader = new Image;
+ preloader.onload = function() {
+ $image.attr('src', _this.album[imageNumber].link);
+ $image.width = Math.min(preloader.width, window.innerWidth);
+ $image.height = Math.min(preloader.height, window.innerHeight);
+ return _this.sizeContainer($image.width, $image.height);
+ };
+ preloader.src = this.album[imageNumber].link;
+ this.currentImageIndex = imageNumber;
+ };
+
+ Lightbox.prototype.sizeOverlay = function() {
+ return $('#lightboxOverlay').width($(window).width()).height($(window).height());
+ };
+
+ Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {
+ var $container, $lightbox, $outerContainer, containerBottomPadding, containerLeftPadding, containerRightPadding, containerTopPadding, newHeight, newWidth, oldHeight, oldWidth,
+ _this = this;
+ $lightbox = $('#lightbox');
+ $outerContainer = $lightbox.find('.lb-outerContainer');
+ oldWidth = $outerContainer.outerWidth();
+ oldHeight = $outerContainer.outerHeight();
+ $container = $lightbox.find('.lb-container');
+ containerTopPadding = parseInt($container.css('padding-top'), 10);
+ containerRightPadding = parseInt($container.css('padding-right'), 10);
+ containerBottomPadding = parseInt($container.css('padding-bottom'), 10);
+ containerLeftPadding = parseInt($container.css('padding-left'), 10);
+ newWidth = imageWidth + containerLeftPadding + containerRightPadding;
+ newHeight = imageHeight + containerTopPadding + containerBottomPadding;
+ if (newWidth !== oldWidth && newHeight !== oldHeight) {
+ $outerContainer.animate({
+ width: newWidth,
+ height: newHeight
+ }, this.options.resizeDuration, 'swing');
+ } else if (newWidth !== oldWidth) {
+ $outerContainer.animate({
+ width: newWidth
+ }, this.options.resizeDuration, 'swing');
+ } else if (newHeight !== oldHeight) {
+ $outerContainer.animate({
+ height: newHeight
+ }, this.options.resizeDuration, 'swing');
+ }
+ setTimeout(function() {
+ $lightbox.find('.lb-dataContainer').width(newWidth);
+ $lightbox.find('.lb-prevLink').height(newHeight);
+ $lightbox.find('.lb-nextLink').height(newHeight);
+ _this.showImage();
+ }, this.options.resizeDuration);
+ };
+
+ Lightbox.prototype.showImage = function() {
+ var $lightbox;
+ $lightbox = $('#lightbox');
+ $lightbox.find('.lb-loader').hide();
+ $lightbox.find('.lb-image').fadeIn('slow');
+ this.updateNav();
+ this.updateDetails();
+ this.preloadNeighboringImages();
+ this.enableKeyboardNav();
+ };
+
+ Lightbox.prototype.updateNav = function() {
+ var $lightbox;
+ $lightbox = $('#lightbox');
+ $lightbox.find('.lb-nav').show();
+ if (this.currentImageIndex > 0) $lightbox.find('.lb-prev').show();
+ if (this.currentImageIndex < this.album.length - 1) {
+ $lightbox.find('.lb-next').show();
+ }
+ };
+
+ Lightbox.prototype.updateDetails = function() {
+ var $lightbox,
+ _this = this;
+ $lightbox = $('#lightbox');
+ if (typeof this.album[this.currentImageIndex].title !== 'undefined' && this.album[this.currentImageIndex].title !== "") {
+ $lightbox.find('.lb-caption').html(this.album[this.currentImageIndex].title).fadeIn('fast');
+ }
+ if (this.album.length > 1) {
+ $lightbox.find('.lb-number').html(this.options.labelImage + ' ' + (this.currentImageIndex + 1) + ' ' + this.options.labelOf + ' ' + this.album.length).fadeIn('fast');
+ } else {
+ $lightbox.find('.lb-number').hide();
+ }
+ $lightbox.find('.lb-outerContainer').removeClass('animating');
+ $lightbox.find('.lb-dataContainer').fadeIn(this.resizeDuration, function() {
+ return _this.sizeOverlay();
+ });
+ };
+
+ Lightbox.prototype.preloadNeighboringImages = function() {
+ var preloadNext, preloadPrev;
+ if (this.album.length > this.currentImageIndex + 1) {
+ preloadNext = new Image;
+ preloadNext.src = this.album[this.currentImageIndex + 1].link;
+ }
+ if (this.currentImageIndex > 0) {
+ preloadPrev = new Image;
+ preloadPrev.src = this.album[this.currentImageIndex - 1].link;
+ }
+ };
+
+ Lightbox.prototype.enableKeyboardNav = function() {
+ $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this));
+ };
+
+ Lightbox.prototype.disableKeyboardNav = function() {
+ $(document).off('.keyboard');
+ };
+
+ Lightbox.prototype.keyboardAction = function(event) {
+ var KEYCODE_ESC, KEYCODE_LEFTARROW, KEYCODE_RIGHTARROW, key, keycode;
+ KEYCODE_ESC = 27;
+ KEYCODE_LEFTARROW = 37;
+ KEYCODE_RIGHTARROW = 39;
+ keycode = event.keyCode;
+ key = String.fromCharCode(keycode).toLowerCase();
+ if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) {
+ this.end();
+ } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) {
+ if (this.currentImageIndex !== 0) {
+ this.changeImage(this.currentImageIndex - 1);
+ }
+ } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) {
+ if (this.currentImageIndex !== this.album.length - 1) {
+ this.changeImage(this.currentImageIndex + 1);
+ }
+ }
+ };
+
+ Lightbox.prototype.end = function() {
+ this.disableKeyboardNav();
+ $(window).off("resize", this.sizeOverlay);
+ $('#lightbox').fadeOut(this.options.fadeDuration);
+ $('#lightboxOverlay').fadeOut(this.options.fadeDuration);
+ return $('select, object, embed').css({
+ visibility: "visible"
+ });
+ };
+
+ return Lightbox;
+
+ })();
+
+ $(function() {
+ var lightbox, options;
+ options = new LightboxOptions;
+ return lightbox = new Lightbox(options);
+ });
+
+}).call(this);
12 js/lightbox/lightbox.min.js
@@ -0,0 +1,12 @@
+(function(){var a,j;a=jQuery;j=function(){this.fileLoadingImage="img/lightbox/loading.gif";this.fileCloseImage="img/lightbox/close.png";this.fadeDuration=this.resizeDuration=100;this.labelImage="Image";this.labelOf="of"};var d=function(a){this.options=a;this.album=[];this.currentImageIndex=void 0;this.init()};d.prototype.init=function(){this.enable();return this.build()};d.prototype.enable=function(){var b=this;return a("body").on("click","a[rel^=lightbox], area[rel^=lightbox]",function(c){b.start(a(c.currentTarget));
+return!1})};d.prototype.build=function(){var b,c=this;a("<div>",{id:"lightboxOverlay"}).after(a("<div/>",{id:"lightbox"}).append(a("<div/>",{"class":"lb-outerContainer"}).append(a("<div/>",{"class":"lb-container"}).append(a("<img/>",{"class":"lb-image"}),a("<div/>",{"class":"lb-nav"}).append(a("<a/>",{"class":"lb-prev"}),a("<a/>",{"class":"lb-next"})),a("<div/>",{"class":"lb-loader"}).append(a("<a/>",{"class":"lb-cancel"}).append(a("<img/>",{src:this.options.fileLoadingImage}))))),a("<div/>",{"class":"lb-dataContainer"}).append(a("<div/>",
+{"class":"lb-data"}).append(a("<div/>",{"class":"lb-details"}).append(a("<span/>",{"class":"lb-caption"}),a("<span/>",{"class":"lb-number"})),a("<div/>",{"class":"lb-closeContainer"}).append(a("<a/>",{"class":"lb-close"}).append(a("<img/>",{src:this.options.fileCloseImage}))))))).appendTo(a("body"));a("#lightboxOverlay").hide().on("click",function(){c.end();return!1});b=a("#lightbox");b.hide().on("click",function(b){"lightbox"===a(b.target).attr("id")&&c.end();return!1});b.find(".lb-outerContainer").on("click",
+function(b){"lightbox"===a(b.target).attr("id")&&c.end();return!1});b.find(".lb-prev").on("click",function(){c.changeImage(c.currentImageIndex-1);return!1});b.find(".lb-next").on("click",function(){c.changeImage(c.currentImageIndex+1);return!1});b.find(".lb-loader, .lb-close").on("click",function(){c.end();return!1})};d.prototype.start=function(b){var c,k,d,f,h;a(window).on("resize",this.sizeOverlay);a("select, object, embed").css({visibility:"hidden"});a("#lightboxOverlay").width(a(document).width()).height(a(document).height()).fadeIn(this.options.fadeDuration);
+this.album=[];d=0;if("lightbox"===b.attr("rel"))this.album.push({link:b.attr("href"),title:b.attr("title")});else{h=a(b.prop("tagName")+'[rel="'+b.attr("rel")+'"]');k=0;for(f=h.length;k<f;k++)c=h[k],this.album.push({link:a(c).attr("href"),title:a(c).attr("title")}),a(c).attr("href")===b.attr("href")&&(d=k)}c=a(window);b=c.scrollTop()+c.height()/10;c=c.scrollLeft();a("#lightbox").css({top:b+"px",left:c+"px"}).fadeIn(this.options.fadeDuration);this.changeImage(d)};d.prototype.changeImage=function(b){var c,
+d,e,f=this;this.disableKeyboardNav();d=a("#lightbox");c=d.find(".lb-image");this.sizeOverlay();a("#lightboxOverlay").fadeIn(this.options.fadeDuration);a(".loader").fadeIn("slow");d.find(".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption").hide();d.find(".lb-outerContainer").addClass("animating");e=new Image;e.onload=function(){c.attr("src",f.album[b].link);c.width=Math.min(e.width,window.innerWidth);c.height=Math.min(e.height,window.innerHeight);return f.sizeContainer(c.width,
+c.height)};e.src=this.album[b].link;this.currentImageIndex=b};d.prototype.sizeOverlay=function(){return a("#lightboxOverlay").width(a(window).width()).height(a(window).height())};d.prototype.sizeContainer=function(b,c){var d,e,f,h,j,n,g,i,l,m,o=this;e=a("#lightbox");f=e.find(".lb-outerContainer");m=f.outerWidth();l=f.outerHeight();d=e.find(".lb-container");n=parseInt(d.css("padding-top"),10);j=parseInt(d.css("padding-right"),10);h=parseInt(d.css("padding-bottom"),10);d=parseInt(d.css("padding-left"),
+10);i=b+d+j;g=c+n+h;i!==m&&g!==l?f.animate({width:i,height:g},this.options.resizeDuration,"swing"):i!==m?f.animate({width:i},this.options.resizeDuration,"swing"):g!==l&&f.animate({height:g},this.options.resizeDuration,"swing");setTimeout(function(){e.find(".lb-dataContainer").width(i);e.find(".lb-prevLink").height(g);e.find(".lb-nextLink").height(g);o.showImage()},this.options.resizeDuration)};d.prototype.showImage=function(){var b;b=a("#lightbox");b.find(".lb-loader").hide();b.find(".lb-image").fadeIn("slow");
+this.updateNav();this.updateDetails();this.preloadNeighboringImages();this.enableKeyboardNav()};d.prototype.updateNav=function(){var b;b=a("#lightbox");b.find(".lb-nav").show();0<this.currentImageIndex&&b.find(".lb-prev").show();this.currentImageIndex<this.album.length-1&&b.find(".lb-next").show()};d.prototype.updateDetails=function(){var b,c=this;b=a("#lightbox");"undefined"!==typeof this.album[this.currentImageIndex].title&&""!==this.album[this.currentImageIndex].title&&b.find(".lb-caption").html(this.album[this.currentImageIndex].title).fadeIn("fast");