/*
* author: Blair Vanderhoof
* https://github.com/blairvanderhoof/gist-embed
* version 2.4
*/
(function($) {
'use strict';
function getLineNumbers(lineRangeString) {
var lineNumbers = [], range, lineNumberSections;
if (typeof lineRangeString === 'number') {
lineNumbers.push(lineRangeString);
} else {
lineNumberSections = lineRangeString.split(',');
for (var i = 0; i < lineNumberSections.length; i++) {
range = lineNumberSections[i].split('-');
if (range.length === 2) {
for (var j = parseInt(range[0], 10); j <= range[1]; j++) {
lineNumbers.push(j);
}
} else if (range.length === 1) {
lineNumbers.push(parseInt(range[0], 10));
}
}
}
return lineNumbers;
}
$.fn.gist = function() {
return this.each(function() {
var $elem = $(this),
id,
url,
file,
lines,
loading,
highlightLines,
hideFooterOption,
hideLineNumbersOption,
showLoading,
showSpinner,
data = {};
// make block level so loading text shows properly
$elem.css('display', 'block');
id = $elem.data('gist-id') || '';
file = $elem.data('gist-file');
hideFooterOption = $elem.data('gist-hide-footer') === true;
hideLineNumbersOption = $elem.data('gist-hide-line-numbers') === true;
lines = $elem.data('gist-line');
highlightLines = $elem.data('gist-highlight-line');
showSpinner = $elem.data('gist-show-spinner') === true;
if (showSpinner) {
showLoading = false;
} else {
showLoading = $elem.data('gist-show-loading') !== undefined ?
$elem.data('gist-show-loading') : true;
}
if (file) {
data.file = file;
}
// if the id doesn't exist, then ignore the code block
if (!id) {
return false;
}
url = 'https://gist.github.com/' + id + '.json';
loading = 'Loading gist ' + url + (data.file ? ', file: ' + data.file : '') + '...';
// loading
if (showLoading) {
$elem.html(loading);
}
// loading spinner
if (showSpinner) {
$elem.html('');
}
// request the json version of this gist
$.ajax({
url: url,
data: data,
dataType: 'jsonp',
timeout: 10000,
success: function(response) {
var linkTag,
head,
lineNumbers,
highlightLineNumbers,
$responseDiv;
// the html payload is in the div property
if (response && response.div) {
// github returns /assets/embed-id.css now, but let's be sure about that
if (response.stylesheet) {
// github passes down html instead of a url for the stylehsheet now
// parse off the href
if (response.stylesheet.indexOf('