Compare commits
No commits in common. "subway" and "pelican" have entirely different histories.
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
pelican/output
|
||||
pelican/subway
|
24
LICENSE
Normal file
24
LICENSE
Normal file
@ -0,0 +1,24 @@
|
||||
This work is based on work by Nik Kalyani (2010) nik@kalyani.com http://www.kalyani.com
|
||||
and Jon Burrows (2016) subwaymap@jonburrows.co.uk https://jonburrows.co.uk
|
||||
|
||||
---------------------------------------------
|
||||
|
||||
Copyright (c) 2018 Charles Reid
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -8,6 +8,4 @@ Branches:
|
||||
* `pelican` - contains the files to generate the Pelican site
|
||||
* `gh-pages` - contains the final Pelican site content
|
||||
|
||||
You are currently on the `subway` branch.
|
||||
|
||||
This work is based on work by Nik Kalyani (2010) nik@kalyani.com http://www.kalyani.com and Jon Burrows (2016) subwaymap@jonburrows.co.uk https://jonburrows.co.uk
|
||||
You are currently on the `pelican` branch.
|
||||
|
4
jquery-1.9.0.min.js
vendored
4
jquery-1.9.0.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,497 +0,0 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2010 Nik Kalyani nik@kalyani.com http://www.kalyani.com
|
||||
|
||||
Modified work Copyright (c) 2016 Jon Burrows subwaymap@jonburrows.co.uk https://jonburrows.co.uk
|
||||
|
||||
A tiny change was made by Charles Reid one summer day in June of 2018.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
var plugin = {
|
||||
|
||||
defaults: {
|
||||
debug: false,
|
||||
grid: false
|
||||
},
|
||||
|
||||
options: {
|
||||
},
|
||||
|
||||
identity: function (type) {
|
||||
if (type === undefined) type = "name";
|
||||
|
||||
switch (type.toLowerCase()) {
|
||||
case "version": return "1.0.0"; break;
|
||||
default: return "subwayMap Plugin"; break;
|
||||
}
|
||||
},
|
||||
_debug: function (s) {
|
||||
if (this.options.debug)
|
||||
this._log(s);
|
||||
},
|
||||
_log: function () {
|
||||
if (window.console && window.console.log)
|
||||
window.console.log('[subwayMap] ' + Array.prototype.join.call(arguments, ' '));
|
||||
},
|
||||
_supportsCanvas: function () {
|
||||
var canvas = $("<canvas></canvas>");
|
||||
if (canvas[0].getContext)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
},
|
||||
_getCanvasLayer: function (el, overlay) {
|
||||
this.layer++;
|
||||
var canvas = $("<canvas style='position:absolute;z-Index:" + ((overlay ? 2000 : 1000) + this.layer) + "' width='" + this.options.pixelWidth + "' height='" + this.options.pixelHeight + "'></canvas>");
|
||||
el.append(canvas);
|
||||
return (canvas[0].getContext("2d"));
|
||||
},
|
||||
_render: function (el) {
|
||||
|
||||
this.layer = -1;
|
||||
var rows = el.attr("data-rows");
|
||||
if (rows === undefined)
|
||||
rows = 10;
|
||||
else
|
||||
rows = parseInt(rows);
|
||||
|
||||
var columns = el.attr("data-columns");
|
||||
if (columns === undefined)
|
||||
columns = 10;
|
||||
else
|
||||
columns = parseInt(columns);
|
||||
|
||||
var scale = el.attr("data-cellSize");
|
||||
if (scale === undefined)
|
||||
scale = 100;
|
||||
else
|
||||
scale = parseInt(scale);
|
||||
|
||||
var lineWidth = el.attr("data-lineWidth");
|
||||
if (lineWidth === undefined)
|
||||
lineWidth = 10;
|
||||
else
|
||||
lineWidth = parseInt(lineWidth);
|
||||
|
||||
var textClass = el.attr("data-textClass");
|
||||
if (textClass === undefined) textClass = "";
|
||||
|
||||
var grid = el.attr("data-grid");
|
||||
if ((grid === undefined) || (grid.toLowerCase() == "false"))
|
||||
grid = false;
|
||||
else
|
||||
grid = true;
|
||||
|
||||
var legendId = el.attr("data-legendId");
|
||||
if (legendId === undefined) legendId = "";
|
||||
|
||||
var gridNumbers = el.attr("data-gridNumbers");
|
||||
if ((gridNumbers === undefined) || (gridNumbers.toLowerCase() == "false"))
|
||||
gridNumbers = false;
|
||||
else
|
||||
gridNumbers = true;
|
||||
|
||||
var reverseMarkers = el.attr("data-reverseMarkers");
|
||||
if ((reverseMarkers === undefined) || (reverseMarkers.toLowerCase() == "false"))
|
||||
reverseMarkers = false;
|
||||
else
|
||||
reverseMarkers = true;
|
||||
|
||||
|
||||
this.options.pixelWidth = columns * scale;
|
||||
this.options.pixelHeight = rows * scale;
|
||||
|
||||
//el.css("width", this.options.pixelWidth);
|
||||
//el.css("height", this.options.pixelHeight);
|
||||
var self = this;
|
||||
var lineLabels = [];
|
||||
var supportsCanvas = $("<canvas></canvas>")[0].getContext;
|
||||
if (supportsCanvas) {
|
||||
|
||||
if (grid) this._drawGrid(el, scale, gridNumbers);
|
||||
$(el).children("ul").each(function (index) {
|
||||
var ul = $(this);
|
||||
|
||||
var color = $(ul).attr("data-color");
|
||||
if (color === undefined) color = "#000000";
|
||||
|
||||
var lineTextClass = $(ul).attr("data-textClass");
|
||||
if (lineTextClass === undefined) lineTextClass = "";
|
||||
|
||||
var shiftCoords = $(ul).attr("data-shiftCoords");
|
||||
if (shiftCoords === undefined) shiftCoords = "";
|
||||
|
||||
var shiftX = 0.00;
|
||||
var shiftY = 0.00;
|
||||
if (shiftCoords.indexOf(",") > -1) {
|
||||
shiftX = parseInt(shiftCoords.split(",")[0]) * lineWidth/scale;
|
||||
shiftY = parseInt(shiftCoords.split(",")[1]) * lineWidth/scale;
|
||||
}
|
||||
|
||||
var lineLabel = $(ul).attr("data-label");
|
||||
if (lineLabel === undefined)
|
||||
lineLabel = "Line " + index;
|
||||
|
||||
lineLabels[lineLabels.length] = {label: lineLabel, color: color};
|
||||
|
||||
var nodes = [];
|
||||
$(ul).children("li").each(function () {
|
||||
|
||||
var coords = $(this).attr("data-coords");
|
||||
if (coords === undefined) coords = "";
|
||||
|
||||
var dir = $(this).attr("data-dir");
|
||||
if (dir === undefined) dir = "";
|
||||
|
||||
var labelPos = $(this).attr("data-labelPos");
|
||||
if (labelPos === undefined) labelPos = "s";
|
||||
|
||||
var marker = $(this).attr("data-marker");
|
||||
if (marker == undefined) marker = "";
|
||||
|
||||
var markerInfo = $(this).attr("data-markerInfo");
|
||||
if (markerInfo == undefined) markerInfo = "";
|
||||
|
||||
var dotted = $(this).attr("data-dotted-line");
|
||||
if (dotted == undefined) dotted = "false";
|
||||
|
||||
var anchor = $(this).children("a:first-child");
|
||||
var label = $(this).text();
|
||||
if (label === undefined) label = "";
|
||||
|
||||
var link = "";
|
||||
var title = "";
|
||||
if (anchor != undefined) {
|
||||
link = $(anchor).attr("href");
|
||||
if (link === undefined) link = "";
|
||||
title = $(anchor).attr("title");
|
||||
if (title === undefined) title = "";
|
||||
}
|
||||
|
||||
self._debug("Coords=" + coords + "; Dir=" + dir + "; Link=" + link + "; Label=" + label + "; labelPos=" + labelPos + "; Marker=" + marker + "; Dotted=" + dotted);
|
||||
|
||||
var x = "";
|
||||
var y = "";
|
||||
if (coords.indexOf(",") > -1) {
|
||||
x = Number(coords.split(",")[0]) + (marker.indexOf("interchange") > -1 ? 0 : shiftX);
|
||||
y = Number(coords.split(",")[1]) + (marker.indexOf("interchange") > -1 ? 0 : shiftY);
|
||||
}
|
||||
nodes[nodes.length] = { x: x, y: y, direction: dir, marker: marker, markerInfo: markerInfo, link: link, title: title, label: label, labelPos: labelPos, dotted: dotted };
|
||||
});
|
||||
if (nodes.length > 0)
|
||||
self._drawLine(el, scale, rows, columns, color, (lineTextClass != "" ? lineTextClass : textClass), lineWidth, nodes, reverseMarkers);
|
||||
$(ul).remove();
|
||||
});
|
||||
|
||||
if ((lineLabels.length > 0) && (legendId != ""))
|
||||
{
|
||||
var legend = $("#" + legendId);
|
||||
|
||||
for(var line=0; line<lineLabels.length; line++)
|
||||
legend.append("<div id='legendEntry"+line+"'><span style='float:left;width:100px;height:" + lineWidth + "px;background-color:" + lineLabels[line].color + "'></span>" + lineLabels[line].label + "</div>");
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
_drawLine: function (el, scale, rows, columns, color, textClass, width, nodes, reverseMarkers) {
|
||||
|
||||
var ctx = this._getCanvasLayer(el, false);
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(nodes[0].x * scale, nodes[0].y * scale);
|
||||
var markers = [];
|
||||
var lineNodes = [];
|
||||
var node;
|
||||
for(node = 0; node < nodes.length; node++)
|
||||
{
|
||||
if (nodes[node].marker.indexOf("@") != 0)
|
||||
lineNodes[lineNodes.length] = nodes[node];
|
||||
}
|
||||
for (var lineNode = 0; lineNode < lineNodes.length; lineNode++) {
|
||||
if (lineNode < (lineNodes.length - 1)) {
|
||||
var nextNode = lineNodes[lineNode + 1];
|
||||
var currNode = lineNodes[lineNode];
|
||||
|
||||
// Correction for edges so lines are not running off campus
|
||||
var xCorr = 0;
|
||||
var yCorr = 0;
|
||||
if (nextNode.x == 0) xCorr = width / 2;
|
||||
if (nextNode.x == columns) xCorr = -1 * width / 2;
|
||||
if (nextNode.y == 0) yCorr = width / 2;
|
||||
if (nextNode.y == rows) yCorr = -1 * width / 2;
|
||||
|
||||
var xVal = 0;
|
||||
var yVal = 0;
|
||||
var direction = "";
|
||||
|
||||
var xDiff = Math.round(Math.abs(currNode.x - nextNode.x));
|
||||
var yDiff = Math.round(Math.abs(currNode.y - nextNode.y));
|
||||
if ((xDiff == 0) || (yDiff == 0)) {
|
||||
// Horizontal or Vertical
|
||||
ctx.lineTo((nextNode.x * scale) + xCorr, (nextNode.y * scale) + yCorr);
|
||||
}
|
||||
else if ((xDiff == 1) && (yDiff == 1)) {
|
||||
// 90 degree turn
|
||||
if (nextNode.direction != "")
|
||||
direction = nextNode.direction.toLowerCase();
|
||||
switch (direction) {
|
||||
case "s": xVal = 0; yVal = scale; break;
|
||||
case "e": xVal = scale; yVal = 0; break;
|
||||
case "w": xVal = -1 * scale; yVal = 0; break;
|
||||
default: xVal = 0; yVal = -1 * scale; break;
|
||||
}
|
||||
ctx.quadraticCurveTo((currNode.x * scale) + xVal, (currNode.y * scale) + yVal,
|
||||
(nextNode.x * scale) + xCorr, (nextNode.y * scale) + yCorr);
|
||||
}
|
||||
else if (xDiff == yDiff) {
|
||||
// Symmetric, angular with curves at both ends
|
||||
if (nextNode.x < currNode.x) {
|
||||
if (nextNode.y < currNode.y)
|
||||
direction = "nw";
|
||||
else
|
||||
direction = "sw";
|
||||
}
|
||||
else {
|
||||
if (nextNode.y < currNode.y)
|
||||
direction = "ne";
|
||||
else
|
||||
direction = "se";
|
||||
}
|
||||
var dirVal = 1;
|
||||
switch (direction) {
|
||||
case "nw": xVal = -1 * (scale / 2); yVal = 1; dirVal = 1; break;
|
||||
case "sw": xVal = -1 * (scale / 2); yVal = -1; dirVal = 1; break;
|
||||
case "se": xVal = (scale / 2); yVal = -1; dirVal = -1; break;
|
||||
case "ne": xVal = (scale / 2); yVal = 1; dirVal = -1; break;
|
||||
}
|
||||
this._debug((currNode.x * scale) + xVal + ", " + (currNode.y * scale) + "; " + (nextNode.x + (dirVal * xDiff / 2)) * scale + ", " +
|
||||
(nextNode.y + (yVal * xDiff / 2)) * scale);
|
||||
ctx.bezierCurveTo(
|
||||
(currNode.x * scale) + xVal, (currNode.y * scale),
|
||||
(currNode.x * scale) + xVal, (currNode.y * scale),
|
||||
(nextNode.x + (dirVal * xDiff / 2)) * scale, (nextNode.y + (yVal * xDiff / 2)) * scale);
|
||||
ctx.bezierCurveTo(
|
||||
(nextNode.x * scale) + (dirVal * scale / 2), (nextNode.y) * scale,
|
||||
(nextNode.x * scale) + (dirVal * scale / 2), (nextNode.y) * scale,
|
||||
nextNode.x * scale, nextNode.y * scale);
|
||||
}
|
||||
else
|
||||
ctx.lineTo(nextNode.x * scale, nextNode.y * scale);
|
||||
}
|
||||
}
|
||||
|
||||
if (nodes[0].dotted == "true") { ctx.setLineDash([5, 5]); }
|
||||
ctx.strokeStyle = color;
|
||||
ctx.lineWidth = width;
|
||||
ctx.stroke();
|
||||
|
||||
ctx = this._getCanvasLayer(el, true);
|
||||
for (node = 0; node < nodes.length; node++) {
|
||||
this._drawMarker(el, ctx, scale, color, textClass, width, nodes[node], reverseMarkers);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
_drawMarker: function (el, ctx, scale, color, textClass, width, data, reverseMarkers) {
|
||||
|
||||
if (data.label == "") return;
|
||||
if (data.marker == "") data.marker = "station";
|
||||
|
||||
// Scale coordinates for rendering
|
||||
var x = data.x * scale;
|
||||
var y = data.y * scale;
|
||||
|
||||
// Keep it simple -- black on white, or white on black
|
||||
var fgColor = "#000000";
|
||||
var bgColor = "#ffffff";
|
||||
if (reverseMarkers)
|
||||
{
|
||||
fgColor = "#ffffff";
|
||||
bgColor = "#000000";
|
||||
}
|
||||
|
||||
// Render station and interchange icons
|
||||
ctx.strokeStyle = fgColor;
|
||||
ctx.fillStyle = bgColor;
|
||||
ctx.beginPath();
|
||||
switch(data.marker.toLowerCase())
|
||||
{
|
||||
case "interchange":
|
||||
case "@interchange":
|
||||
ctx.lineWidth = width;
|
||||
if (data.markerInfo == "")
|
||||
ctx.arc(x, y, width * 0.7, 0, Math.PI * 2, true);
|
||||
else
|
||||
{
|
||||
var mDir = data.markerInfo.substr(0,1).toLowerCase();
|
||||
var mSize = parseInt(data.markerInfo.substr(1,10));
|
||||
if (((mDir == "v") || (mDir == "h")) && (mSize > 1))
|
||||
{
|
||||
if (mDir == "v")
|
||||
{
|
||||
ctx.arc(x, y, width * 0.7,290 * Math.PI/180, 250 * Math.PI/180, false);
|
||||
ctx.arc(x, y-(width*mSize), width * 0.7,110 * Math.PI/180, 70 * Math.PI/180, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx.arc(x, y, width * 0.7,20 * Math.PI/180, 340 * Math.PI/180, false);
|
||||
ctx.arc(x+(width*mSize), y, width * 0.7,200 * Math.PI/180, 160 * Math.PI/180, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
ctx.arc(x, y, width * 0.7, 0, Math.PI * 2, true);
|
||||
}
|
||||
break;
|
||||
case "station":
|
||||
case "@station":
|
||||
ctx.lineWidth = width/2;
|
||||
ctx.arc(x, y, width/2, 0, Math.PI * 2, true);
|
||||
break;
|
||||
}
|
||||
ctx.closePath();
|
||||
ctx.stroke();
|
||||
ctx.fill();
|
||||
|
||||
// Render text labels and hyperlinks
|
||||
var pos = "";
|
||||
var offset = width + 4;
|
||||
var topOffset = 0;
|
||||
var centerOffset = "-50px";
|
||||
switch(data.labelPos.toLowerCase())
|
||||
{
|
||||
case "n":
|
||||
pos = "text-align: center; margin: 0 0 " + offset + "px " + centerOffset;
|
||||
topOffset = offset * 2;
|
||||
break;
|
||||
case "w":
|
||||
pos = "text-align: right; margin:0 " + offset + "px 0 -" + (100 + offset) + "px";
|
||||
topOffset = offset;
|
||||
break;
|
||||
case "e":
|
||||
pos = "text-align: left; margin:0 0 0 " + offset + "px";
|
||||
topOffset = offset;
|
||||
break;
|
||||
case "s":
|
||||
pos = "text-align: center; margin:" + offset + "px 0 0 " + centerOffset;
|
||||
break;
|
||||
case "se":
|
||||
pos = "text-align: left; margin:" + offset + "px 0 0 " + offset + "px";
|
||||
break;
|
||||
case "ne":
|
||||
pos = "text-align: left; padding-left: " + offset + "px; margin: 0 0 " + offset + "px 0";
|
||||
topOffset = offset * 2;
|
||||
break;
|
||||
case "sw":
|
||||
pos = "text-align: right; margin:" + offset + "px 0 0 -" + (100 + offset) + "px";
|
||||
topOffset = offset;
|
||||
break;
|
||||
case "nw":
|
||||
pos = "text-align: right; margin: -" + offset + "px 0 0 -" + (100 + offset) + "px";
|
||||
topOffset = offset;
|
||||
break;
|
||||
}
|
||||
var style = (textClass != "" ? "class='" + textClass + "' " : "") + "style='" + (textClass == "" ? "font-size:8pt;font-family:Verdana,Arial,Helvetica,Sans Serif;text-decoration:none;" : "") + "width:100px;" + (pos != "" ? pos : "") + ";position:absolute;top:" + (y + el.offset().top - (topOffset > 0 ? topOffset : 0)) + "px;left:" + (x + el.offset().left) + "px;z-index:3000;'";
|
||||
if (data.link != "")
|
||||
$("<a " + style + " title='" + data.title.replace(/\\n/g,"<br />") + "' href='" + data.link + "' target='_new'>" + data.label.replace(/\\n/g,"<br />") + "</span>").appendTo(el);
|
||||
else
|
||||
$("<span " + style + ">" + data.label.replace(/\\n/g,"<br />") + "</span>").appendTo(el);
|
||||
|
||||
},
|
||||
_drawGrid: function (el, scale, gridNumbers) {
|
||||
|
||||
var ctx = this._getCanvasLayer(el, false);
|
||||
ctx.fillStyle = "#000";
|
||||
ctx.beginPath();
|
||||
var counter = 0;
|
||||
for (var x = 0.5; x < this.options.pixelWidth; x += scale) {
|
||||
if (gridNumbers)
|
||||
{
|
||||
ctx.moveTo(x, 0);
|
||||
ctx.fillText(counter++, x-15, 10);
|
||||
}
|
||||
ctx.moveTo(x, 0);
|
||||
ctx.lineTo(x, this.options.pixelHeight);
|
||||
}
|
||||
ctx.moveTo(this.options.pixelWidth - 0.5, 0);
|
||||
ctx.lineTo(this.options.pixelWidth - 0.5, this.options.pixelHeight);
|
||||
|
||||
counter = 0;
|
||||
for (var y = 0.5; y < this.options.pixelHeight; y += scale) {
|
||||
if (gridNumbers)
|
||||
{
|
||||
ctx.moveTo(0, y);
|
||||
ctx.fillText(counter++, 0, y-15);
|
||||
}
|
||||
ctx.moveTo(0, y);
|
||||
ctx.lineTo(this.options.pixelWidth, y);
|
||||
}
|
||||
ctx.moveTo(0, this.options.pixelHeight - 0.5);
|
||||
ctx.lineTo(this.options.pixelWidth, this.options.pixelHeight - 0.5);
|
||||
ctx.strokeStyle = "#eee";
|
||||
ctx.lineWidth = 1;
|
||||
ctx.stroke();
|
||||
ctx.fill();
|
||||
ctx.closePath();
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
var methods = {
|
||||
|
||||
init: function (options) {
|
||||
|
||||
plugin.options = $.extend({}, plugin.defaults, options);
|
||||
// iterate and reformat each matched element
|
||||
return this.each(function (index) {
|
||||
|
||||
plugin.options = $.meta
|
||||
? $.extend(plugin.options, $(this).data())
|
||||
: plugin.options;
|
||||
|
||||
plugin._debug("BEGIN: " + plugin.identity() + " for element " + index);
|
||||
|
||||
plugin._render($(this));
|
||||
|
||||
plugin._debug("END: " + plugin.identity() + " for element " + index);
|
||||
});
|
||||
|
||||
},
|
||||
drawLine: function (data) {
|
||||
plugin._drawLine(data.element, data.scale, data.rows, data.columns, data.color, data.width, data.nodes);
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.subwayMap = function (method) {
|
||||
|
||||
// Method calling logic
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
} else if (typeof method === 'object' || !method) {
|
||||
return methods.init.apply(this, arguments);
|
||||
} else {
|
||||
$.error('Method ' + method + ' does not exist on jQuery.tooltip');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(jQuery);
|
@ -1,14 +0,0 @@
|
||||
/**
|
||||
* These styles are for one-branch maps.
|
||||
*/
|
||||
.subway-map
|
||||
{
|
||||
margin: 0;
|
||||
width: 500px;
|
||||
height:200px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
div#legend {
|
||||
margin-left: 50px;
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Git Map</title>
|
||||
<script type="text/javascript" src="jquery-1.9.0.min.js"></script>
|
||||
<script type="text/javascript" src="jquery.subwayMap-0.5.0.js"></script>
|
||||
<link href="subway.css" rel="stylesheet">
|
||||
<link href="one_branch.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div class="subway-map" data-columns="10" data-rows="3" data-cellSize="45"
|
||||
data-legendId="legend" data-textClass="text" data-gridNumbers="true"
|
||||
data-grid="false" data-lineWidth="8">
|
||||
|
||||
<ul data-color="#aced00" data-label="master branch">
|
||||
<li data-coords="2,2" data-labelPos="W" data-marker="interchange">83bca09</li>
|
||||
<li data-coords="3,2" data-labelPos="N">a72b587</li>
|
||||
<li data-coords="4,2" data-labelPos="S">bf8a986</li>
|
||||
<li data-coords="5,2" data-labelPos="N">5e6f031</li>
|
||||
<li data-coords="6,2">734b547</li>
|
||||
<li data-coords="7,2" data-labelPos="N">25803aa</li>
|
||||
<li data-coords="8,2">60c0ff0</li>
|
||||
<li data-coords="9,2" data-labelPos="E">70b8130</li>
|
||||
<!--
|
||||
Any additional stations will get cut off on the right side
|
||||
-->
|
||||
</ul>
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
<script type="text/javascript">
|
||||
$(".subway-map").subwayMap({ debug: false });
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
15
pelican/READ_THESE_INSTRUCTIONS.md
Normal file
15
pelican/READ_THESE_INSTRUCTIONS.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Read these instructions
|
||||
|
||||
The subway map materials are not on the `pelican` branch,
|
||||
so you cannot make the `pelican` site without an extra step.
|
||||
|
||||
You will need to clone the `subway` branch to the `subway`
|
||||
folder by executing the following command in the current
|
||||
directory:
|
||||
|
||||
```
|
||||
git clone -b subway https://git.charlesreid1.com/charlesreid1/git-subway-maps.git subway
|
||||
```
|
||||
|
||||
Now the subway branch is located in the `subway/` folder,
|
||||
and running `pelican content` will now generate the content.
|
3
pelican/content/css/theme.css
Normal file
3
pelican/content/css/theme.css
Normal file
@ -0,0 +1,3 @@
|
||||
div.container {
|
||||
width: 66%;
|
||||
}
|
BIN
pelican/content/img/black.jpg
Normal file
BIN
pelican/content/img/black.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
BIN
pelican/content/img/favicon.ico
Normal file
BIN
pelican/content/img/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
pelican/content/img/one_branch.png
Normal file
BIN
pelican/content/img/one_branch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
BIN
pelican/content/img/three_branch.png
Normal file
BIN
pelican/content/img/three_branch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
BIN
pelican/content/img/two_branch.png
Normal file
BIN
pelican/content/img/two_branch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
105
pelican/content/index.html
Normal file
105
pelican/content/index.html
Normal file
@ -0,0 +1,105 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Git Subway Maps</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="css/theme.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
|
||||
<!-- Page Heading -->
|
||||
<h1 class="my-4">Git Subway Maps
|
||||
<!--
|
||||
<small>Diagrams of git repositories in the style of subway maps</small>
|
||||
-->
|
||||
</h1>
|
||||
|
||||
<!-- Project One -->
|
||||
<div class="row">
|
||||
<div class="col-md-7">
|
||||
<a href="one_branch.html">
|
||||
<img class="img-fluid rounded mb-3 mb-md-0" src="img/one_branch.png" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<h3>One Branch</h3>
|
||||
<p>A simple diagram of a git repository with a single branch.
|
||||
</p>
|
||||
<a class="btn btn-primary" href="one_branch.html">View Diagram</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Project Two -->
|
||||
<div class="row">
|
||||
<div class="col-md-7">
|
||||
<a href="two_branches.html">
|
||||
<img class="img-fluid rounded mb-3 mb-md-0" src="img/two_branch.png" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<h3>Two Branches</h3>
|
||||
<p>A diagram of a git repository with two branches.
|
||||
</p>
|
||||
<a class="btn btn-primary" href="two_branches.html">View Diagram</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Project Three -->
|
||||
<div class="row">
|
||||
<div class="col-md-7">
|
||||
<a href="three_branches.html">
|
||||
<img class="img-fluid rounded mb-3 mb-md-0" src="img/three_branch.png" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<h3>Three Branches</h3>
|
||||
<p>A diagram of a git repository with three branches.
|
||||
</p>
|
||||
<a class="btn btn-primary" href="three_branches.html">View Diagram</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<hr>
|
||||
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="py-5 bg-dark">
|
||||
<div class="container">
|
||||
<p class="m-0 text-center text-white">Copyright © Charles Reid 2018, released under the <a href="https://choosealicense.com/licenses/mit/">MIT License</a>.
|
||||
</p>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap core JavaScript -->
|
||||
<script src="vendor/jquery/jquery.min.js"></script>
|
||||
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
7
pelican/content/vendor/bootstrap/css/bootstrap.min.css
vendored
Executable file
7
pelican/content/vendor/bootstrap/css/bootstrap.min.css
vendored
Executable file
File diff suppressed because one or more lines are too long
7
pelican/content/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Executable file
7
pelican/content/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
7
pelican/content/vendor/bootstrap/js/bootstrap.min.js
vendored
Executable file
7
pelican/content/vendor/bootstrap/js/bootstrap.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
2
pelican/content/vendor/jquery/jquery.min.js
vendored
Executable file
2
pelican/content/vendor/jquery/jquery.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
2
pelican/content/vendor/jquery/jquery.slim.min.js
vendored
Executable file
2
pelican/content/vendor/jquery/jquery.slim.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
62
pelican/pelicanconf.py
Normal file
62
pelican/pelicanconf.py
Normal file
@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python
|
||||
import markdown
|
||||
|
||||
AUTHOR = 'charlesreid1'
|
||||
SITENAME = 'Git Subway Maps'
|
||||
SITEURL = ''
|
||||
TIMEZONE = 'America/Los_Angeles'
|
||||
DEFAULT_LANG = 'en'
|
||||
|
||||
PATH = 'content'
|
||||
OUTPUT_PATH = 'output'
|
||||
|
||||
# --------------8<---------------------
|
||||
# Theme
|
||||
|
||||
THEME = 'simple-bootstrap'
|
||||
|
||||
# --------------8<---------------------
|
||||
# Files and content
|
||||
|
||||
# Don't try to turn HTML files into pages
|
||||
READERS = {'html': None}
|
||||
|
||||
# This will look for a directory img/
|
||||
# inside the directory content/
|
||||
# The contents of img/ will be available at
|
||||
# {{ SITEURL }}/img
|
||||
STATIC_PATHS = ['img','css','vendor']
|
||||
|
||||
|
||||
# --------------8<---------------------
|
||||
# apps
|
||||
|
||||
EXTRA_TEMPLATES_PATHS = []
|
||||
TEMPLATE_PAGES = {}
|
||||
TEMPLATE_PAGES['index.html'] = 'index.html'
|
||||
|
||||
EXTRA_TEMPLATES_PATHS.append('subway')
|
||||
TEMPLATE_PAGES['one_branch.html'] = 'one_branch.html'
|
||||
TEMPLATE_PAGES['two_branches.html'] = 'two_branches.html'
|
||||
TEMPLATE_PAGES['three_branches.html'] = 'three_branches.html'
|
||||
|
||||
TEMPLATE_PAGES['subway.css'] = 'subway.css'
|
||||
TEMPLATE_PAGES['one_branch.css'] = 'one_branch.css'
|
||||
TEMPLATE_PAGES['two_branches.css'] = 'two_branches.css'
|
||||
TEMPLATE_PAGES['three_branches.css'] = 'three_branches.css'
|
||||
|
||||
TEMPLATE_PAGES['jquery-1.9.0.min.js'] = 'jquery-1.9.0.min.js'
|
||||
TEMPLATE_PAGES['jquery.subwayMap-0.5.0.js'] = 'jquery.subwayMap-0.5.0.js'
|
||||
|
||||
|
||||
# --------------8<---------------------
|
||||
# idk just some dumb stuff
|
||||
|
||||
DISPLAY_PAGES_ON_MENU = False
|
||||
FEED_ALL_ATOM = None
|
||||
CATEGORY_FEED_ATOM = None
|
||||
TRANSLATION_FEED_ATOM = None
|
||||
AUTHOR_FEED_ATOM = None
|
||||
AUTHOR_FEED_RSS = None
|
||||
DEFAULT_PAGINATION = False
|
||||
|
46
subway.css
46
subway.css
@ -1,46 +0,0 @@
|
||||
/**
|
||||
* These styles are for all subway maps.
|
||||
*/
|
||||
body
|
||||
{
|
||||
font-family: Verdana;
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
/* The main DIV for the map */
|
||||
.subway-map
|
||||
{
|
||||
margin: 0;
|
||||
width: 500px;
|
||||
height:300px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
/* Text labels */
|
||||
.text
|
||||
{
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
#legend
|
||||
{
|
||||
float: left;
|
||||
width: 250px;
|
||||
height:400px;
|
||||
}
|
||||
|
||||
#legend div
|
||||
{
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
#legend span
|
||||
{
|
||||
margin: 5px 5px 5px 0;
|
||||
}
|
||||
.subway-map span
|
||||
{
|
||||
margin: 5px 5px 5px 0;
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
/**
|
||||
* These styles are for two-branch maps.
|
||||
*/
|
||||
.subway-map
|
||||
{
|
||||
margin: 0;
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
div#legend {
|
||||
margin-left: 50px;
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Git Map</title>
|
||||
<script type="text/javascript" src="jquery-1.9.0.min.js"></script>
|
||||
<script type="text/javascript" src="jquery.subwayMap-0.5.0.js"></script>
|
||||
<link href="subway.css" rel="stylesheet">
|
||||
<link href="two_branches.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div class="subway-map" data-columns="15" data-rows="10" data-cellSize="45"
|
||||
data-legendId="legend" data-textClass="text" data-gridNumbers="true"
|
||||
data-grid="false" data-lineWidth="8">
|
||||
|
||||
<ul data-color="#00edac" data-label="master">
|
||||
<li data-coords="2,5" data-labelPos="W" data-marker="interchange">c384c87</li>
|
||||
<li data-coords="3,5" data-labelPos="N">13c4011</li>
|
||||
<li data-coords="4,5">f5cede7</li>
|
||||
<li data-coords="5,4" data-labelPos="N">f0f0ef6</li>
|
||||
<li data-coords="6,4">8c0cb2c</li>
|
||||
<li data-coords="7,4" data-labelPos="N">18a3d79</li>
|
||||
<li data-coords="8,4">457d019</li>
|
||||
</ul>
|
||||
|
||||
<ul data-color="#ac00ed" data-label="bugfix">
|
||||
<li data-coords="5,4" data-labelPos="N" data-marker="interchange"></li>
|
||||
<li data-coords="6,3" data-labelPos="N">bb1341a</li>
|
||||
<li data-coords="8,3" data-labelPos="N">ef86851</li>
|
||||
<li data-coords="10,3" data-labelPos="N">a88eef0</li>
|
||||
<li data-coords="12,3" data-labelPos="N">11510b2</li>
|
||||
</ul>
|
||||
|
||||
<ul data-color="#00aced" data-label="feature">
|
||||
<li data-coords="4,5">f5cede7</li>
|
||||
<li data-coords="5,6" data-dir="S">c384c87</li>
|
||||
<li data-coords="6,6" data-dir="N" data-labelPos="N">57de4f4</li>
|
||||
<li data-coords="7,6" data-dir="E">2576472</li>
|
||||
<li data-coords="8,6" data-labelPos="N">13c4011</li>
|
||||
<li data-coords="9,6">e5e8a5f</li>
|
||||
<li data-coords="10,6" data-labelPos="N">ab317eb</li>
|
||||
<li data-coords="11,6">01cd690</li>
|
||||
<li data-coords="12,6" data-labelPos="N">33876fb</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
<script type="text/javascript">
|
||||
$(".subway-map").subwayMap({ debug: false });
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -1,14 +0,0 @@
|
||||
/**
|
||||
* These styles are for two-branch maps.
|
||||
*/
|
||||
.subway-map
|
||||
{
|
||||
margin: 0;
|
||||
width: 500px;
|
||||
height: 350px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
div#legend {
|
||||
margin-left: 50px;
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Git Map</title>
|
||||
<script type="text/javascript" src="jquery-1.9.0.min.js"></script>
|
||||
<script type="text/javascript" src="jquery.subwayMap-0.5.0.js"></script>
|
||||
<link href="subway.css" rel="stylesheet">
|
||||
<link href="two_branches.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div class="subway-map" data-columns="10" data-rows="5" data-cellSize="60"
|
||||
data-legendId="legend" data-textClass="text" data-gridNumbers="true"
|
||||
data-grid="false" data-lineWidth="8">
|
||||
|
||||
<ul data-color="#aced00" data-label="master">
|
||||
<li data-coords="2,3" data-labelPos="W" data-marker="interchange">c384c87</li>
|
||||
<li data-coords="3,2" data-dir="N">57de4f4</li>
|
||||
<li data-coords="4,2" data-dir="E">2576472</li>
|
||||
<li data-coords="5,2">13c4011</li>
|
||||
<li data-coords="6,2">f5cede7</li>
|
||||
<li data-coords="7,2">3f79bc0</li>
|
||||
<li data-coords="8,2">64ca124</li>
|
||||
<li data-coords="9,2" data-labelPos="E">c047ced</li>
|
||||
</ul>
|
||||
|
||||
<ul data-color="#00aced" data-label="development">
|
||||
<li data-coords="2,3" data-marker="interchange"></li>
|
||||
<li data-coords="3,4" data-dir="S">15343a2</li>
|
||||
<li data-coords="4,4" data-dir="E">e6fa816</li>
|
||||
<li data-coords="5,4">874b8ba</li>
|
||||
<li data-coords="6,4">ee3d025</li>
|
||||
<li data-coords="7,4">3e822fe</li>
|
||||
<li data-coords="8,4">a6c2089</li>
|
||||
<li data-coords="9,4" data-labelPos="E">9cd4434</li>
|
||||
<!--
|
||||
Any additional stations will get cut off on the right side
|
||||
-->
|
||||
</ul>
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
<script type="text/javascript">
|
||||
$(".subway-map").subwayMap({ debug: false });
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user