|
| 1 | +function strapdown(window, document) { |
| 2 | + |
| 3 | +// From: https://github.com/arturadib/strapdown/blob/gh-pages/src/strapdown.js |
| 4 | + |
| 5 | +////////////////////////////////////////////////////////////////////// |
| 6 | +// |
| 7 | +// Shims for IE < 9 |
| 8 | +// |
| 9 | + |
| 10 | +document.head = document.getElementsByTagName('head')[0]; |
| 11 | + |
| 12 | +if (!('getElementsByClassName' in document)) { |
| 13 | + document.getElementsByClassName = function(name) { |
| 14 | + function getElementsByClassName(node, classname) { |
| 15 | + var a = []; |
| 16 | + var re = new RegExp('(^| )'+classname+'( |$)'); |
| 17 | + var els = node.getElementsByTagName("*"); |
| 18 | + for(var i=0,j=els.length; i<j; i++) |
| 19 | + if(re.test(els[i].className))a.push(els[i]); |
| 20 | + return a; |
| 21 | + } |
| 22 | + return getElementsByClassName(document.body, name); |
| 23 | + } |
| 24 | +} |
| 25 | + |
| 26 | +////////////////////////////////////////////////////////////////////// |
| 27 | +// |
| 28 | +// Get user elements we need |
| 29 | +// |
| 30 | + |
| 31 | +var markdownEl = document.getElementsByTagName('xmp')[0] || document.getElementsByTagName('textarea')[0], |
| 32 | + titleEl = document.getElementsByTagName('title')[0], |
| 33 | + scriptEls = document.getElementsByTagName('script'), |
| 34 | + navbarEl = document.getElementsByClassName('navbar')[0]; |
| 35 | + |
| 36 | +if (!markdownEl) { |
| 37 | + console.warn('No embedded Markdown found in this document for Strapdown.js to work on! Visit http://strapdownjs.com/ to learn more.'); |
| 38 | + return; |
| 39 | +} |
| 40 | + |
| 41 | +// Hide body until we're done fiddling with the DOM |
| 42 | +document.body.style.display = 'none'; |
| 43 | + |
| 44 | +////////////////////////////////////////////////////////////////////// |
| 45 | +// |
| 46 | +// <head> stuff |
| 47 | +// |
| 48 | + |
| 49 | +// Use <meta> viewport so that Bootstrap is actually responsive on mobile |
| 50 | +var metaEl = document.createElement('meta'); |
| 51 | +metaEl.name = 'viewport'; |
| 52 | +metaEl.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'; |
| 53 | +if (document.head.firstChild) |
| 54 | + document.head.insertBefore(metaEl, document.head.firstChild); |
| 55 | +else |
| 56 | + document.head.appendChild(metaEl); |
| 57 | + |
| 58 | +// Get origin of script |
| 59 | +var origin = ''; |
| 60 | +for (var i = 0; i < scriptEls.length; i++) { |
| 61 | + if (scriptEls[i].src.match('strapdown')) { |
| 62 | + origin = scriptEls[i].src; |
| 63 | + } |
| 64 | +} |
| 65 | +var originBase = origin.substr(0, origin.lastIndexOf('/')); |
| 66 | + |
| 67 | +// Get theme |
| 68 | +var theme = markdownEl.getAttribute('theme') || 'bootstrap'; |
| 69 | +theme = theme.toLowerCase(); |
| 70 | + |
| 71 | +// Stylesheets |
| 72 | +var linkEl = document.createElement('link'); |
| 73 | +linkEl.href = originBase + '/themes/'+theme+'.min.css'; |
| 74 | +linkEl.rel = 'stylesheet'; |
| 75 | +document.head.appendChild(linkEl); |
| 76 | + |
| 77 | +var linkEl = document.createElement('link'); |
| 78 | +linkEl.href = originBase + '/strapdown.css'; |
| 79 | +linkEl.rel = 'stylesheet'; |
| 80 | +document.head.appendChild(linkEl); |
| 81 | + |
| 82 | +var linkEl = document.createElement('link'); |
| 83 | +linkEl.href = originBase + '/themes/bootstrap-responsive.min.css'; |
| 84 | +linkEl.rel = 'stylesheet'; |
| 85 | +document.head.appendChild(linkEl); |
| 86 | + |
| 87 | +////////////////////////////////////////////////////////////////////// |
| 88 | +// |
| 89 | +// <body> stuff |
| 90 | +// |
| 91 | + |
| 92 | +var markdown = markdownEl.textContent || markdownEl.innerText; |
| 93 | + |
| 94 | +var newNode = document.createElement('div'); |
| 95 | +newNode.className = 'container'; |
| 96 | +newNode.id = 'content'; |
| 97 | +document.body.replaceChild(newNode, markdownEl); |
| 98 | + |
| 99 | +// Insert navbar if there's none |
| 100 | +var newNode = document.createElement('div'); |
| 101 | +newNode.className = 'navbar navbar-fixed-top'; |
| 102 | +if (!navbarEl && titleEl) { |
| 103 | + newNode.innerHTML = '<div class="navbar-inner"> <div class="container"> <div id="headline" class="brand"> </div> </div> </div>'; |
| 104 | + document.body.insertBefore(newNode, document.body.firstChild); |
| 105 | + var title = titleEl.innerHTML; |
| 106 | + var headlineEl = document.getElementById('headline'); |
| 107 | + if (headlineEl) |
| 108 | + headlineEl.innerHTML = title; |
| 109 | +} |
| 110 | + |
| 111 | +////////////////////////////////////////////////////////////////////// |
| 112 | +// |
| 113 | +// Markdown! |
| 114 | +// |
| 115 | + |
| 116 | +// Generate Markdown |
| 117 | +var html = marked(markdown); |
| 118 | +document.getElementById('content').innerHTML = html; |
| 119 | + |
| 120 | +// Prettify |
| 121 | +var codeEls = document.getElementsByTagName('code'); |
| 122 | +for (var i=0, ii=codeEls.length; i<ii; i++) { |
| 123 | + var codeEl = codeEls[i]; |
| 124 | + var lang = codeEl.className; |
| 125 | + codeEl.className = 'prettyprint lang-' + lang; |
| 126 | +} |
| 127 | +prettyPrint(); |
| 128 | + |
| 129 | +// Style tables |
| 130 | +var tableEls = document.getElementsByTagName('table'); |
| 131 | +for (var i=0, ii=tableEls.length; i<ii; i++) { |
| 132 | + var tableEl = tableEls[i]; |
| 133 | + tableEl.className = 'table table-striped table-bordered'; |
| 134 | +} |
| 135 | + |
| 136 | +// All done - show body |
| 137 | +document.body.style.display = ''; |
| 138 | + |
| 139 | +} |
0 commit comments