li > .active",vn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',En=".dropdown-toggle",yn="> .dropdown-menu .active",Tn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&rn(this._element).hasClass(cn)||rn(this._element).hasClass(un))){var t,i,e=rn(this._element).closest(gn)[0],r=Cn.getSelectorFromElement(this._element);if(e){var s="UL"===e.nodeName?pn:mn;i=(i=rn.makeArray(rn(e).find(s)))[i.length-1]}var o=rn.Event(ln.HIDE,{relatedTarget:this._element}),a=rn.Event(ln.SHOW,{relatedTarget:i});if(i&&rn(i).trigger(o),rn(this._element).trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){r&&(t=rn(r)[0]),this._activate(this._element,e);var l=function(){var t=rn.Event(ln.HIDDEN,{relatedTarget:n._element}),e=rn.Event(ln.SHOWN,{relatedTarget:i});rn(i).trigger(t),rn(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){rn.removeData(this._element,sn),this._element=null},t._activate=function(t,e,n){var i=this,r=("UL"===e.nodeName?rn(e).find(pn):rn(e).children(mn))[0],s=n&&r&&rn(r).hasClass(fn),o=function(){return i._transitionComplete(t,r,n)};if(r&&s){var a=Cn.getTransitionDurationFromElement(r);rn(r).one(Cn.TRANSITION_END,o).emulateTransitionEnd(a)}else o()},t._transitionComplete=function(t,e,n){if(e){rn(e).removeClass(dn+" "+cn);var i=rn(e.parentNode).find(yn)[0];i&&rn(i).removeClass(cn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(rn(t).addClass(cn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),Cn.reflow(t),rn(t).addClass(dn),t.parentNode&&rn(t.parentNode).hasClass(hn)){var r=rn(t).closest(_n)[0];r&&rn(r).find(En).addClass(cn),t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=rn(this),e=t.data(sn);if(e||(e=new i(this),t.data(sn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},o(i,null,[{key:"VERSION",get:function(){return"4.1.1"}}]),i}(),rn(document).on(ln.CLICK_DATA_API,vn,function(t){t.preventDefault(),Tn._jQueryInterface.call(rn(this),"show")}),rn.fn.tab=Tn._jQueryInterface,rn.fn.tab.Constructor=Tn,rn.fn.tab.noConflict=function(){return rn.fn.tab=an,Tn._jQueryInterface},Tn);!function(t){if("undefined"==typeof t)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(e),t.Util=Cn,t.Alert=In,t.Button=An,t.Carousel=Dn,t.Collapse=bn,t.Dropdown=Sn,t.Modal=wn,t.Popover=On,t.Scrollspy=kn,t.Tab=Pn,t.Tooltip=Nn,Object.defineProperty(t,"__esModule",{value:!0})});
7 | //# sourceMappingURL=bootstrap.min.js.map
--------------------------------------------------------------------------------
/.jekyll/assets/css/main.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*# sourceMappingURL=main.css.map */
4 |
--------------------------------------------------------------------------------
/.jekyll/assets/css/main.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "",
4 | "sources": [],
5 | "names": [],
6 | "file": "main.css"
7 | }
8 |
--------------------------------------------------------------------------------
/.jekyll/assets/css/main.scss:
--------------------------------------------------------------------------------
1 | // @import "1-tools/_-tools-dir.sass";
2 | // @import "2-base/_-base-dir.sass";
3 | // @import "3-sections/_-sections-dir.sass";
4 | // @import "4-interactions/_-interactions-dir.sass";
5 |
--------------------------------------------------------------------------------
/.jekyll/assets/js/functions.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/.jekyll/assets/js/functions.js
--------------------------------------------------------------------------------
/.jekyll/assets/js/functions.min.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/.jekyll/assets/js/functions.min.js
--------------------------------------------------------------------------------
/.jekyll/humans.txt:
--------------------------------------------------------------------------------
1 | # The humans responsible & technology colophon
2 |
3 | /* TEAM */
4 |
5 | Sean Henderson - Your Title
6 | Site: https://sean.sh/
7 | Email: mail@sean.sh
8 | Twitter: your Twitter username
9 | Location: City, Country
10 |
11 | /* THANKS */
12 |
13 | # John Doe's Team
14 |
15 | John Doe
16 | Jane Doe
17 | Baby Doe
18 |
19 | # Others
20 |
21 | Jonnie Doe
22 |
23 |
24 |
25 | /* SITE */
26 |
27 | Last update: YYYY/MM/DD
28 | Standards: HTML5, CSS3, ...
29 | Components: jQuery, Normalize, Jekyll, ...
30 | Software: Software used for the development
31 |
--------------------------------------------------------------------------------
/.jekyll/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | HELLO WORLD
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/.jekyll/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "markdownizr",
3 | "short_name": "markdownizr",
4 | "icons": [{
5 | "src": "",
6 | "sizes": "128x128",
7 | "type": "image/jpg"
8 | }, {
9 | "src": "",
10 | "sizes": "144x144",
11 | "type": "image/jpg"
12 | }, {
13 | "src": "",
14 | "sizes": "152x152",
15 | "type": "image/jpg"
16 | }, {
17 | "src": "",
18 | "sizes": "192x192",
19 | "type": "image/jpg"
20 | }, {
21 | "src": "",
22 | "sizes": "512x512",
23 | "type": "image/jpg"
24 | }],
25 | "start_url": "/index.html",
26 | "display": "standalone",
27 | "background_color": "",
28 | "theme_color": ""
29 | }
30 |
--------------------------------------------------------------------------------
/.jekyll/robots.txt:
--------------------------------------------------------------------------------
1 | # www.robotstxt.org/
2 |
3 | # Allow crawling of all content
4 | User-agent: *
5 | Disallow:
6 |
--------------------------------------------------------------------------------
/.sass-cache/defa1b9dbbef5b1866adfbd4abf2d59927de7d9f/main.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/.sass-cache/defa1b9dbbef5b1866adfbd4abf2d59927de7d9f/main.scssc
--------------------------------------------------------------------------------
/.yo-rc.json:
--------------------------------------------------------------------------------
1 | {
2 | "generator-mocha": {
3 | "ui": "bdd",
4 | "rjs": false
5 | }
6 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Markdownizr
2 |
3 | Website for [Markdownizr](https://github.com/sh78/markdownizr-chrome), a Google Chrome extension for copying markdown from web
4 | pages.
5 |
6 | ## License
7 |
8 |
9 |
10 |
12 |
13 |
14 | This work (Markdownizr , by Sean Henderson ), identified by Sean Henderson , is free of known copyright restrictions.
15 |
16 |
--------------------------------------------------------------------------------
/app/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/apple-touch-icon.png
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/favicon.ico
--------------------------------------------------------------------------------
/app/images/allthethings.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/images/allthethings.jpg
--------------------------------------------------------------------------------
/app/images/button.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/images/button.gif
--------------------------------------------------------------------------------
/app/images/keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/images/keyboard.png
--------------------------------------------------------------------------------
/app/images/mouse.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/images/mouse.gif
--------------------------------------------------------------------------------
/app/images/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/app/images/settings.png
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Markdownizr :: Chrome Extension
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
35 |
36 |
37 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | Markdownizr
90 |
91 |
Copy Website Content As (clean!) Markdown
92 |
Markdownizr is a Google Chrome extension that lets you extract clean Markdown from web pages. If you like Markdown, plain text files, or being productive, then keep scrolling.
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
About Markdown
103 |
Markdown is a simple markup language that adds semantics to plain text files. It was created by John Gruber in 2004 .
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
Anything is possible, if you just use Markdown
114 |
Once content is in Markdown format, the possibilities are endless - create PDFs, Word/RTFs, HTML websites, books, and more instantly. There are a veritable plethora of free (and paid) tools for Linux , macOS , iOS, Android , other operating systems, and even your browser .
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
Markdownizr has your back
125 |
With Markdownizr, you don't have to manually format any content from a website to reference it in notes, cite it in your documentation, or whatever you may be plotting.
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
How to use
136 |
To get started, select some text on a web page and click the Markdownizr "M" icon in the Chrome toolbar. The Markdown will be copied to your computer's clipboard so you can paste it anywhere. You can also right click and select "Get Markdown" if that makes you happy.
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
Get the whole page, and nothing but the page
151 |
If you want to copy the content of the entire page, just make sure that no text is selected and click the "M" button or right-click option. Done!
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
Keyboard shortcuts == winning;
166 |
Want even more power? Try adding a keyboard shortcut to super-charge your workflow. You can set keyboard shortcuts for plugins from the chrome://extensions page .
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
Flexible and damn-near future-proof
183 |
While other Markdown extraction browser extensions are locked in to a prescribed method of filtering out the html code, Markdownizr puts you in the driver's seat with simple yet powerful settings.
184 |
185 |
186 |
187 |
188 |
189 |
190 |
We've added some sensible defaults in hopes that your Markdown turns out well-formed, but the internet is a wild place. Here are the avilable options:
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
Strip Elements
199 |
This first text box is a comma-separated list of HTML elements that Markdownizr will take the content from, but delete the surrounding HTML tags (code).
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
Delete Elements
208 |
This box is the same as the first, but any elements here will be deleted entirely - inner content and all. Use this to get rid of unexpected cruft from <script>
tags, etc.
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
Free and open-source, forever
219 |
Markdownizr is and always will be free, open-source software. It was developed for fun and released because... well why not?
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
The extension is 100% free of malware, ads, trackers, and gremlins. You can check out the source code on GitHub .
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
Ready to up your markdown game?
238 |
Markdownizr is available on the Chrome Webstore for free! If you're still not convinced, check out the interactive demo below.
239 |
240 |
241 |
242 |
243 |
244 |
245 |
Demo
246 |
Here's a behind-the-scenes-sneak-peak at how Markdownizr chops up your HTML into sweet, glorious Markdown. Try pasting some random HTML into the HTML box!
247 |
248 |
249 |
HTML
250 |
251 | HTML
252 |
253 |
269 |
270 |
271 |
MARKDOWN
272 |
273 | MDWN
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
Credits
283 |
Markdownizr is made possible by:
284 |
296 |
297 |
298 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
--------------------------------------------------------------------------------
/app/robots.txt:
--------------------------------------------------------------------------------
1 | # robotstxt.org/
2 |
3 | User-agent: *
4 | Disallow:
5 |
--------------------------------------------------------------------------------
/app/scripts/main.js:
--------------------------------------------------------------------------------
1 | console.log('\'Allo \'Allo!'); // eslint-disable-line no-console
2 | jQuery.easing.def = 'easeOutElastic';
3 |
4 | // helper to check if elem is visible on screen
5 | function isSeen(elem) {
6 | var docViewTop = $(window).scrollTop();
7 | var docViewBottom = docViewTop + $(window).height();
8 |
9 | var elemTop = $(elem).offset().top;
10 | var elemBottom = elemTop + $(elem).height();
11 |
12 | return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
13 | }
14 |
15 |
16 | $(document).ready(function() {
17 |
18 | // auto close BS mobile nav upon selecting link
19 | $(document).on('click', '.navbar-collapse.in', function(e) {
20 | if($(e.target).is('a')) {
21 | $(this).collapse('hide');
22 | }
23 | });
24 |
25 | // live markdownizing demo
26 |
27 | var mdOpts = {
28 | // filter out stuff
29 | converters: [{
30 | // grab the settings
31 | filter: ['div', 'span', 'small', 'aside', 'section', 'article', 'header', 'footer', 'hgroup', 'time', 'address', 'button'],
32 | replacement: function (innerHTML) { return innerHTML }
33 | }, {
34 | // don't include these in the final markdown
35 | filter: ['script', 'noscript', 'canvas', 'embed', 'object', 'param', 'svg', 'source', 'nav', 'iframe',],
36 | replacement: function () { return '' }
37 | }]
38 | };
39 |
40 | // start with default html converted to md
41 | var mdOut = toMarkdown($('#toMarkdown_input').val(), mdOpts);
42 | $('#toMarkdown_output').val(mdOut);
43 | // watch the user. if they make a move, update the MD damnit!
44 | $('#toMarkdown_input').bind('change paste keyup', function() {
45 | $('#toMarkdown_output').val(toMarkdown($(this).val()));
46 | });
47 |
48 |
49 | // surpise demo unicorn
50 |
51 | // set a unicorn counter
52 | var unicount = 0;
53 | // create a function for the animation
54 | function animateSecret() {
55 | $('#secret')
56 | .animate({
57 | top: '30%',
58 | right: '40%'
59 | }, 3000, 'swing' ).animate({
60 | top: '-100%',
61 | right: '-100%'
62 | }, 5000, 'swing' )
63 | }
64 |
65 | // nice nav scrolling
66 | $('a[href^="#"]').on('click', function(e) {
67 | var link = $(this).attr('href');
68 | // check if it's a local anchor
69 | if ( link.length > 1 && link.indexOf('#') === 0 ) {
70 | e.preventDefault();
71 | var target = $(this).attr('href');
72 | $('html, body').animate({
73 | scrollTop: $(target).offset().top - 70
74 | }, 400, 'linear');
75 | } else if ( link.length === 1 && link.indexOf('#') === 0 ) {
76 | $('html, body').animate({
77 | scrollTop: 0
78 | }, 400, 'linear');
79 | }
80 | });
81 |
82 |
83 | // watch the user as they scroll... O.o
84 | $(window).scroll(function() {
85 |
86 | // make sure unicorn hasn't been spotted yet
87 | if (isSeen($('#demo h1'))) {
88 | // check if demo section is visible
89 | if (unicount === 0) {
90 | // hold a sec and start the show
91 | setTimeout(animateSecret, 4000);
92 | // bump the counter
93 | unicount += 1;
94 | }
95 | }
96 |
97 | // only show the navbar brand when intro logo is out of sight
98 | if (!isSeen($('#logo'))) {
99 | $('#brand').fadeIn().css('display','inline-block');
100 | } else if (window.innerWidth > 767) {
101 | // fade logo out on large screens
102 | $('#brand').fadeOut();
103 | }
104 |
105 | });
106 |
107 | // auto icon for external links
108 | var icon = ' ';
109 | $('a').not('nav a').filter(function() {
110 | return this.hostname && this.hostname !== location.hostname;
111 | }).append(' ' + icon);
112 |
113 | });
114 |
115 |
--------------------------------------------------------------------------------
/app/styles/main.scss:
--------------------------------------------------------------------------------
1 | $icon-font-path: '../fonts/';
2 |
3 | // bower:scss
4 | @import "bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss";
5 | @import "bower_components/animatewithsass/animate.scss";
6 | // endbower
7 |
8 | // Vars
9 | $main-bg: #1c1e29;
10 | $main-light: #f5f5f5;
11 | $main-light-alt: #d5d5d5;
12 | $features-1: lighten(#cb4b16, 10%); // solarized orange
13 | $features-2: lighten(#dc322f, 10%); // solarized red
14 | $features-3: lighten(#d33682, 10%); // solarized magenta
15 | $features-4: lighten(#6c71c4, 10%); // solarized violet
16 | $features-5: lighten(#268bd2, 10%); // solarized blue
17 | $features-6: lighten(#2aa198, 10%); // solarized cyan
18 | $features-7: lighten(#859900, 10%); // solarized green
19 | $features-8: lighten(#b58900, 10%); // solarized yellow
20 |
21 |
22 | .browsehappy {
23 | margin: 0.2em 0;
24 | background: #ccc;
25 | color: #000;
26 | padding: 0.2em 0;
27 | }
28 |
29 | // fix bootstrap sidescroll bs
30 | .row {
31 | margin-right: 0;
32 | margin-left: 0;
33 | }
34 |
35 | /* Space out content a bit */
36 | body {
37 | background-color: $main-bg;
38 | color: $main-light;
39 | font-family: 'Open Sans', sans-serif;
40 | font-size: 1.7em;
41 | }
42 |
43 | a {
44 | &:link {
45 | color: white;
46 | font-weight: bold;
47 | text-decoration: none;
48 | }
49 |
50 | &:visited {
51 | color: white;
52 | }
53 |
54 | &:hover {
55 | text-decoration: underline;
56 | }
57 | }
58 |
59 | img {
60 | width: 100%;
61 | }
62 |
63 | h1 {
64 | font-family: 'Orbitron', sans-serif;
65 | font-size: 3em;
66 | }
67 |
68 | h1, h2, h3, h4 {
69 | font-weight: bold;
70 | text-transform: capitalize;
71 | }
72 |
73 | .headline-font {
74 | font-family: 'Orbitron', sans-serif;
75 | }
76 |
77 | .navbar, footer {
78 | background-color: lighten($main-bg, 10%);
79 | border: 0;
80 | }
81 |
82 | .navbar-default .navbar-nav > li > a {
83 | color: $main-light;
84 | text-decoration: none;
85 | font-size: 1.3em;
86 | line-height: 2;
87 | }
88 |
89 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
90 | color: darken($main-light-alt, 10%);
91 | }
92 |
93 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {
94 | background: $main-bg;
95 | color: darken($main-light-alt, 10%);
96 | }
97 |
98 | .navbar-default .navbar-toggle {
99 | border: 0;
100 | color: $main-light;
101 | margin-right: .5em;
102 | line-height: 2;
103 | }
104 |
105 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
106 | color: $main-light-alt;
107 | background-color: transparent;
108 | }
109 |
110 | .navbar-default .navbar-collapse, .navbar-default .navbar-form {
111 | border: 0;
112 | }
113 |
114 | #logo i {
115 | position: absolute;
116 | }
117 |
118 | #logo {
119 | position: relative;
120 | display: none;
121 |
122 | @include bounceInDown(
123 | $duration: 1s,
124 | $count: 1,
125 | $delay: .5s,
126 | $function: ease,
127 | $fill: both
128 | );
129 | }
130 |
131 | #logo i {
132 | @include tada(
133 | $duration: 1s,
134 | $count: 1,
135 | $delay: 3s,
136 | $function: ease,
137 | $fill: both
138 | );
139 |
140 | &:hover {
141 | @include tada(
142 | $duration: 1s,
143 | $count: 1,
144 | $delay: .1s,
145 | $function: ease,
146 | $fill: both
147 | );
148 | }
149 | }
150 |
151 | #logo i.fa-code {
152 | font-size: .25em;
153 | left: 4.2%;
154 | }
155 |
156 | #logo i.fa-angle-double-down {
157 | font-size: .6em;
158 | left: 3.8%;
159 | top: 40%;
160 | }
161 |
162 | .navbar-header a {
163 | color: white;
164 | }
165 |
166 | #brand {
167 | position: relative;
168 | display: inline;
169 | font-size: 2em;
170 | display: inline-block;
171 | margin-top: 15px;
172 | margin-left: .5em;
173 | }
174 |
175 | #brand i {
176 | position: absolute;
177 | }
178 |
179 | #brand i.fa-code {
180 | font-size: .25em;
181 | left: 4.2%;
182 | }
183 |
184 | #brand i.fa-angle-double-down {
185 | font-size: .6em;
186 | left: 3.7%;
187 | top: 42%;
188 | }
189 |
190 |
191 | #intro h2, #intro p {
192 | @include slideInUp(
193 | $duration: .5s,
194 | $count: 1,
195 | $delay: .5s,
196 | $function: ease,
197 | $fill: both
198 | );
199 | }
200 |
201 | section.main {
202 | margin: 9em auto;
203 | text-align: center;
204 | }
205 |
206 | .container-fluid .row {
207 | max-width: 1200px;
208 | }
209 |
210 | .feature-icon i {
211 | font-size: 5em;
212 | margin: 20px auto;
213 | }
214 |
215 | #demo textarea {
216 | width: 100%;
217 | height: 30em;
218 | background-color: transparent;
219 | padding: 1em;
220 | position: relative;
221 | }
222 |
223 | .text-background {
224 | position: absolute;
225 | z-index: 1;
226 | overflow: hidden;
227 | opacity: .2;
228 | font-family: 'Orbitron', sans-serif;
229 | font-size: 5em;
230 | }
231 |
232 | .text-background.html {
233 | top: 30%;
234 | left: 20%;
235 | transform: rotate(-33deg);
236 | }
237 |
238 | .text-background.md {
239 | top: 36%;
240 | right: 20%;
241 | transform: rotate(33deg);
242 | }
243 |
244 | // features
245 |
246 | #features .container-fluid {
247 | padding: 5em 0;
248 | border-width: 2em;
249 | border-top-style: dashed;
250 |
251 | img {
252 | margin-bottom: 3em;
253 | }
254 | }
255 |
256 | #features .container-fluid.first-feature:first-child {
257 | border-top-color: $main-bg;
258 | }
259 | #features .container-fluid:nth-child(7n+1) {
260 | background-color: $features-1;
261 | border-top-color: $features-6;
262 | }
263 | #features .container-fluid:nth-child(7n+2) {
264 | background-color: $features-2;
265 | border-top-color: $features-1;
266 | }
267 | #features .container-fluid:nth-child(7n+3) {
268 | background-color: $features-3;
269 | border-top-color: $features-2;
270 | }
271 | #features .container-fluid:nth-child(7n+4) {
272 | background-color: $features-4;
273 | border-top-color: $features-3;
274 | }
275 | #features .container-fluid:nth-child(7n+5) {
276 | background-color: $features-5;
277 | border-top-color: $features-4;
278 | }
279 | #features .container-fluid:nth-child(7n+6) {
280 | background-color: $features-6;
281 | border-top-color: $features-5;
282 | }
283 | #features .container-fluid:nth-child(7n+7) {
284 | background-color: $features-7;
285 | border-top-color: $features-6;
286 | }
287 | #features .container-fluid.last-feature:last-child {
288 | border-bottom-style: dashed;
289 | border-bottom-color: $main-bg;
290 | }
291 | // secret unicorn
292 |
293 | #secret {
294 | background-color: transparent;
295 | position: fixed;
296 | right: -100%;
297 | top: -100%;
298 | z-index: 100;
299 | color: red;
300 | font-size: 5em;
301 | transform: rotate(-25deg);
302 | font-family: 'orbitron';
303 | }
304 |
305 | #credits {
306 | ul {
307 | list-style: none;
308 | padding-left: 0;
309 | }
310 | }
311 |
312 | footer {
313 | padding: 1em 0;
314 | font-size: .7em;
315 | text-align: center;
316 | }
317 |
318 | // for larger screens
319 | @media(min-width:48em){
320 | #brand {
321 | display: none;
322 | font-size: 1em;
323 | margin-top: 1.25em;
324 | }
325 | #logo {
326 | display: inline;
327 | }
328 | .navbar-default .navbar-nav > li > a {
329 | font-size: 1em;
330 | line-height: 2;
331 | }
332 | .feature-description {
333 | text-align: left;
334 | }
335 | .container-fluid .row {
336 | margin-bottom: 10px;
337 | display: flex;
338 |
339 | .col {
340 | display: flex;
341 | justify-content: center;
342 | }
343 | }
344 | body {
345 | font-size: 2em;
346 | }
347 | h1 {
348 | font-size: 4em;
349 | }
350 | .brand-container {
351 | position: absolute;
352 | margin-left: auto;
353 | margin-right: auto;
354 | right: 0;
355 | left: 0;
356 | text-align: center;
357 | }
358 | }
359 |
360 | // override bs container md size
361 | @media (min-width: 768px) {
362 | .container {
363 | width: auto;
364 | }
365 | }
366 |
--------------------------------------------------------------------------------
/app/terms.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Privacy Policy
6 |
7 |
31 |
32 |
33 | Terms of Service
34 | 1. Terms
35 | By accessing the Chrome Browser Extension "Markdownizr", you are agreeing to be bound by these terms of service, all applicable laws and regulations, and agree that you are responsible for compliance with any applicable local laws. If you do not agree with any of these terms, you are prohibited from using or accessing this site. The materials contained in The Application are protected by applicable copyright and trademark law.
36 | "Markdownizr", hereon referred to as "The Applicationlication", is not a commercial website. It is intended to be entertaining, educational, utilitarian, or serve as a reference for contact information.
37 | 2. Use License
38 |
39 | Permission is granted to temporarily download one copy of the materials (information or software) on The Application's website for personal, non-commercial transitory viewing only. This is the grant of a license, not a transfer of title, and under this license you may not:
40 |
41 | use the materials for any commercial purpose, or public display;
42 | remove any copyright or other proprietary notations from the materials.
43 |
44 |
45 |
46 | 3. Disclaimer
47 |
48 | The materials on The Application's website are provided on an 'as is' basis. The Application makes no warranties, expressed or implied, and hereby disclaims and negates all other warranties including, without limitation, implied warranties or conditions of merchantability, fitness for a particular purpose, or non-infringement of intellectual property or other violation of rights.
49 | Further, The Application does not warrant or make any representations concerning the accuracy, likely results, or reliability of the use of the materials on its website or otherwise relating to such materials or on any sites linked to this site.
50 |
51 | 4. Limitations
52 | In no event shall The Application or its suppliers be liable for any damages (including, without limitation, damages for loss of data or profit, or due to business interruption) arising out of the use or inability to use the materials on The Application's website, even if The Application or a The Application authorized representative has been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not allow limitations on implied warranties, or limitations of liability for consequential or incidental damages, these limitations may not apply to you.
53 | 5. Accuracy of materials
54 | The materials appearing on The Application's website could include technical, typographical, or photographic errors. The Application does not warrant that any of the materials on its website are accurate, complete or current. The Application may make changes to the materials contained on its website at any time without notice. However The Application does not make any commitment to update the materials.
55 | 6. Links
56 | The Application has not reviewed all of the sites linked to its website and is not responsible for the contents of any such linked site. The inclusion of any link does not imply endorsement by The Application of the site. Use of any such linked website is at the user's own risk.
57 | 7. Modifications
58 | The Application may revise these terms of service for its website at any time without notice. By using The Application you are agreeing to be bound by the then current version of these terms of service.
59 | 8. Governing Law
60 | These terms and conditions are governed by and construed in accordance with the laws of California and you irrevocably submit to the exclusive jurisdiction of the courts in that State or location.
61 | Privacy Policy
62 | Your privacy is important to us. It is The Application's policy to respect your privacy regarding any information we may collect.
63 | Personal Data & Tracking
64 | The Application may use Google Analytics for non-commercial statistical analysis.
65 | Other than Google Analytics, The Application does not intentionally collect any personal information whatsoever. Should any personally identifying information become available as a resulted of undesired circumstances, such as hacking, reasonable effort would be made to alert the affected parties and those data would be immediately and securely deleted after said notifications.
66 | Cookies & Caches
67 | The Application may use cookies and/or your browser's local storage methods to save its state/configuration or increase performance. These data are not used for any commercial purpose nor for personal identification.
68 | Tracking
69 | The Application does not contain nor employ any functionality to track, monitor, or record personal information. It does not attempt to identify or cross-reference users with internal or third party resources.
70 | Advertisements ("Ads")
71 | The Application does not contain any commercial advertisements.
72 |
73 |
74 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "markdownizr",
3 | "private": true,
4 | "dependencies": {
5 | "bootstrap-sass": "~3.3.5",
6 | "modernizr": "~2.8.1",
7 | "animatewithsass": "^3.2.2",
8 | "to-markdown": "~1.3.0"
9 | },
10 | "overrides": {
11 | "bootstrap-sass": {
12 | "main": [
13 | "assets/stylesheets/_bootstrap.scss",
14 | "assets/fonts/bootstrap/*",
15 | "assets/javascripts/bootstrap.js"
16 | ]
17 | }
18 | },
19 | "devDependencies": {
20 | "chai": "^4.1.2",
21 | "mocha": "^5.2.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/dist/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/apple-touch-icon.png
--------------------------------------------------------------------------------
/dist/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/favicon.ico
--------------------------------------------------------------------------------
/dist/images/allthethings.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/images/allthethings.jpg
--------------------------------------------------------------------------------
/dist/images/button.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/images/button.gif
--------------------------------------------------------------------------------
/dist/images/keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/images/keyboard.png
--------------------------------------------------------------------------------
/dist/images/mouse.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/images/mouse.gif
--------------------------------------------------------------------------------
/dist/images/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sh78/markdownizr/bedb2bae4e76d6bf12f87f8e9822fcbcd2994365/dist/images/settings.png
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 | Markdownizr :: Chrome Extension MarkdownizrCopy Website Content As (clean!) Markdown Markdownizr is a Google Chrome extension that lets you extract clean Markdown from web pages. If you like Markdown, plain text files, or being productive, then keep scrolling.
Anything is possible, if you just use Markdown Once content is in Markdown format, the possibilities are endless - create PDFs, Word/RTFs, HTML websites, books, and more instantly. There are a veritable plethora of free (and paid) tools for Linux , macOS , iOS, Android , other operating systems, and even your browser .
Markdownizr has your back With Markdownizr, you don't have to manually format any content from a website to reference it in notes, cite it in your documentation, or whatever you may be plotting.
How to use To get started, select some text on a web page and click the Markdownizr "M" icon in the Chrome toolbar. The Markdown will be copied to your computer's clipboard so you can paste it anywhere. You can also right click and select "Get Markdown" if that makes you happy.
Get the whole page, and nothing but the page If you want to copy the content of the entire page, just make sure that no text is selected and click the "M" button or right-click option. Done!
Keyboard shortcuts == winning; Want even more power? Try adding a keyboard shortcut to super-charge your workflow. You can set keyboard shortcuts for plugins from the chrome://extensions page .
Flexible and damn-near future-proof While other Markdown extraction browser extensions are locked in to a prescribed method of filtering out the html code, Markdownizr puts you in the driver's seat with simple yet powerful settings.
We've added some sensible defaults in hopes that your Markdown turns out well-formed, but the internet is a wild place. Here are the avilable options:
Strip Elements This first text box is a comma-separated list of HTML elements that Markdownizr will take the content from, but delete the surrounding HTML tags (code).
Delete Elements This box is the same as the first, but any elements here will be deleted entirely - inner content and all. Use this to get rid of unexpected cruft from <script>
tags, etc.
Free and open-source, forever Markdownizr is and always will be free, open-source software. It was developed for fun and released because... well why not?
The extension is 100% free of malware, ads, trackers, and gremlins. You can check out the source code on GitHub .
Ready to up your markdown game? Markdownizr is available on the Chrome Webstore for free! If you're still not convinced, check out the interactive demo below.
Demo Here's a behind-the-scenes-sneak-peak at how Markdownizr chops up your HTML into sweet, glorious Markdown. Try pasting some random HTML into the HTML box!
Credits Markdownizr is made possible by:
--------------------------------------------------------------------------------
/dist/robots.txt:
--------------------------------------------------------------------------------
1 | # robotstxt.org/
2 |
3 | User-agent: *
4 | Disallow:
5 |
--------------------------------------------------------------------------------
/dist/scripts/main.js:
--------------------------------------------------------------------------------
1 | "use strict";function isSeen(t){var e=$(window).scrollTop(),n=e+$(window).height(),a=$(t).offset().top;return a+$(t).height()<=n&&a>=e}jQuery.easing.def="easeOutElastic",$(document).ready(function(){function t(){$("#secret").animate({top:"30%",right:"40%"},3e3,"swing").animate({top:"-100%",right:"-100%"},5e3,"swing")}$(document).on("click",".navbar-collapse.in",function(t){$(t.target).is("a")&&$(this).collapse("hide")});var e={converters:[{filter:["div","span","small","aside","section","article","header","footer","hgroup","time","address","button"],replacement:function(t){return t}},{filter:["script","noscript","canvas","embed","object","param","svg","source","nav","iframe"],replacement:function(){return""}}]},n=toMarkdown($("#toMarkdown_input").val(),e);$("#toMarkdown_output").val(n),$("#toMarkdown_input").bind("change paste keyup",function(){$("#toMarkdown_output").val(toMarkdown($(this).val()))});var a=0;$('a[href^="#"]').on("click",function(t){var e=$(this).attr("href");if(e.length>1&&0===e.indexOf("#")){t.preventDefault();var n=$(this).attr("href");$("html, body").animate({scrollTop:$(n).offset().top-70},400,"linear")}else 1===e.length&&0===e.indexOf("#")&&$("html, body").animate({scrollTop:0},400,"linear")}),$(window).scroll(function(){isSeen($("#demo h1"))&&0===a&&(setTimeout(t,4e3),a+=1),isSeen($("#logo"))?window.innerWidth>767&&$("#brand").fadeOut():$("#brand").fadeIn().css("display","inline-block")});$("a").not("nav a").filter(function(){return this.hostname&&this.hostname!==location.hostname}).append(' ')});
--------------------------------------------------------------------------------
/dist/scripts/plugins.js:
--------------------------------------------------------------------------------
1 | +function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n=t-o&&"bottom"},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.7",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===s?[]:s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=n.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&l
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)}},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-cu.width?"left":"left"==r&&d.left-pa.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},i.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),function(t){"use strict";function e(e,o){return this.each(function(){var n=t(this),s=n.data("bs.modal"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);s||n.data("bs.modal",s=new i(this,a)),"string"==typeof e?s[e](o):a.show&&s.show(o)})}var i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var o=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var n=t.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),n&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var s=t.Event("shown.bs.modal",{relatedTarget:e});n?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(s)}).emulateTransitionEnd(i.TRANSITION_DURATION):o.$element.trigger("focus").trigger(s)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=function(e){var o=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&n;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+n).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){if(this.ignoreBackdropClick)return void(this.ignoreBackdropClick=!1);t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){o.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
'}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o="prev"==t?-1:1,n=(i+o)%this.$items.length;return this.$items.eq(n)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){if(!this.sliding)return this.slide("next")},i.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||e .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery);
--------------------------------------------------------------------------------
/dist/scripts/vendor/modernizr.js:
--------------------------------------------------------------------------------
1 | window.Modernizr=function(e,t,n){function r(e){g.cssText=e}function o(e,t){return r(E.join(e+";")+(t||""))}function a(e,t){return typeof e===t}function i(e,t){return!!~(""+e).indexOf(t)}function c(e,t){for(var r in e){var o=e[r];if(!i(o,"-")&&g[o]!==n)return"pfx"!=t||o}return!1}function s(e,t,r){for(var o in e){var i=t[e[o]];if(i!==n)return!1===r?e[o]:a(i,"function")?i.bind(r||t):i}return!1}function u(e,t,n){var r=e.charAt(0).toUpperCase()+e.slice(1),o=(e+" "+w.join(r+" ")+r).split(" ");return a(t,"string")||a(t,"undefined")?c(o,t):(o=(e+" "+S.join(r+" ")+r).split(" "),s(o,t,n))}var l,d,f={},m=t.documentElement,p="modernizr",h=t.createElement(p),g=h.style,v=t.createElement("input"),y=":)",b={}.toString,E=" -webkit- -moz- -o- -ms- ".split(" "),x="Webkit Moz O ms",w=x.split(" "),S=x.toLowerCase().split(" "),C={svg:"http://www.w3.org/2000/svg"},k={},T={},N={},M=[],P=M.slice,j=function(e,n,r,o){var a,i,c,s,u=t.createElement("div"),l=t.body,d=l||t.createElement("body");if(parseInt(r,10))for(;r--;)c=t.createElement("div"),c.id=o?o[r]:p+(r+1),u.appendChild(c);return a=["",'"].join(""),u.id=p,(l?u:d).innerHTML+=a,d.appendChild(u),l||(d.style.background="",d.style.overflow="hidden",s=m.style.overflow,m.style.overflow="hidden",m.appendChild(d)),i=n(u,e),l?u.parentNode.removeChild(u):(d.parentNode.removeChild(d),m.style.overflow=s),!!i},$=function(t){var n=e.matchMedia||e.msMatchMedia;if(n)return n(t)&&n(t).matches||!1;var r;return j("@media "+t+" { #"+p+" { position: absolute; } }",function(t){r="absolute"==(e.getComputedStyle?getComputedStyle(t,null):t.currentStyle).position}),r},D=function(){function e(e,o){o=o||t.createElement(r[e]||"div"),e="on"+e;var i=e in o;return i||(o.setAttribute||(o=t.createElement("div")),o.setAttribute&&o.removeAttribute&&(o.setAttribute(e,""),i=a(o[e],"function"),a(o[e],"undefined")||(o[e]=n),o.removeAttribute(e))),o=null,i}var r={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return e}(),F={}.hasOwnProperty;d=a(F,"undefined")||a(F.call,"undefined")?function(e,t){return t in e&&a(e.constructor.prototype[t],"undefined")}:function(e,t){return F.call(e,t)},Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError;var n=P.call(arguments,1),r=function(){if(this instanceof r){var o=function(){};o.prototype=t.prototype;var a=new o,i=t.apply(a,n.concat(P.call(arguments)));return Object(i)===i?i:a}return t.apply(e,n.concat(P.call(arguments)))};return r}),k.flexbox=function(){return u("flexWrap")},k.flexboxlegacy=function(){return u("boxDirection")},k.canvas=function(){var e=t.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))},k.canvastext=function(){return!(!f.canvas||!a(t.createElement("canvas").getContext("2d").fillText,"function"))},k.webgl=function(){return!!e.WebGLRenderingContext},k.touch=function(){var n;return"ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch?n=!0:j(["@media (",E.join("touch-enabled),("),p,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(e){n=9===e.offsetTop}),n},k.geolocation=function(){return"geolocation"in navigator},k.postmessage=function(){return!!e.postMessage},k.websqldatabase=function(){return!!e.openDatabase},k.indexedDB=function(){return!!u("indexedDB",e)},k.hashchange=function(){return D("hashchange",e)&&(t.documentMode===n||t.documentMode>7)},k.history=function(){return!(!e.history||!history.pushState)},k.draganddrop=function(){var e=t.createElement("div");return"draggable"in e||"ondragstart"in e&&"ondrop"in e},k.websockets=function(){return"WebSocket"in e||"MozWebSocket"in e},k.rgba=function(){return r("background-color:rgba(150,255,150,.5)"),i(g.backgroundColor,"rgba")},k.hsla=function(){return r("background-color:hsla(120,40%,100%,.5)"),i(g.backgroundColor,"rgba")||i(g.backgroundColor,"hsla")},k.multiplebgs=function(){return r("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(g.background)},k.backgroundsize=function(){return u("backgroundSize")},k.borderimage=function(){return u("borderImage")},k.borderradius=function(){return u("borderRadius")},k.boxshadow=function(){return u("boxShadow")},k.textshadow=function(){return""===t.createElement("div").style.textShadow},k.opacity=function(){return o("opacity:.55"),/^0.55$/.test(g.opacity)},k.cssanimations=function(){return u("animationName")},k.csscolumns=function(){return u("columnCount")},k.cssgradients=function(){var e="background-image:";return r((e+"-webkit- ".split(" ").join("gradient(linear,left top,right bottom,from(#9f9),to(white));"+e)+E.join("linear-gradient(left top,#9f9, white);"+e)).slice(0,-e.length)),i(g.backgroundImage,"gradient")},k.cssreflections=function(){return u("boxReflect")},k.csstransforms=function(){return!!u("transform")},k.csstransforms3d=function(){var e=!!u("perspective");return e&&"webkitPerspective"in m.style&&j("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(t,n){e=9===t.offsetLeft&&3===t.offsetHeight}),e},k.csstransitions=function(){return u("transition")},k.fontface=function(){var e;return j('@font-face {font-family:"font";src:url("https://")}',function(n,r){var o=t.getElementById("smodernizr"),a=o.sheet||o.styleSheet,i=a?a.cssRules&&a.cssRules[0]?a.cssRules[0].cssText:a.cssText||"":"";e=/src/i.test(i)&&0===i.indexOf(r.split(" ")[0])}),e},k.generatedcontent=function(){var e;return j(["#",p,"{font:0/0 a}#",p,':after{content:"',y,'";visibility:hidden;font:3px/1 a}'].join(""),function(t){e=t.offsetHeight>=3}),e},k.video=function(){var e=t.createElement("video"),n=!1;try{(n=!!e.canPlayType)&&(n=new Boolean(n),n.ogg=e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),n.h264=e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),n.webm=e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(e){}return n},k.audio=function(){var e=t.createElement("audio"),n=!1;try{(n=!!e.canPlayType)&&(n=new Boolean(n),n.ogg=e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),n.mp3=e.canPlayType("audio/mpeg;").replace(/^no$/,""),n.wav=e.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),n.m4a=(e.canPlayType("audio/x-m4a;")||e.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(e){}return n},k.localstorage=function(){try{return localStorage.setItem(p,p),localStorage.removeItem(p),!0}catch(e){return!1}},k.sessionstorage=function(){try{return sessionStorage.setItem(p,p),sessionStorage.removeItem(p),!0}catch(e){return!1}},k.webworkers=function(){return!!e.Worker},k.applicationcache=function(){return!!e.applicationCache},k.svg=function(){return!!t.createElementNS&&!!t.createElementNS(C.svg,"svg").createSVGRect},k.inlinesvg=function(){var e=t.createElement("div");return e.innerHTML=" ",(e.firstChild&&e.firstChild.namespaceURI)==C.svg},k.smil=function(){return!!t.createElementNS&&/SVGAnimate/.test(b.call(t.createElementNS(C.svg,"animate")))},k.svgclippaths=function(){return!!t.createElementNS&&/SVGClipPath/.test(b.call(t.createElementNS(C.svg,"clipPath")))};for(var z in k)d(k,z)&&(l=z.toLowerCase(),f[l]=k[z](),M.push((f[l]?"":"no-")+l));return f.input||function(){f.input=function(n){for(var r=0,o=n.length;r",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=v.elements;return"string"==typeof e?e.split(" "):e}function o(e){var t=g[e[p]];return t||(t={},h++,e[p]=h,g[h]=t),t}function a(e,n,r){if(n||(n=t),l)return n.createElement(e);r||(r=o(n));var a;return a=r.cache[e]?r.cache[e].cloneNode():m.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!a.canHaveChildren||f.test(e)||a.tagUrn?a:r.frag.appendChild(a)}function i(e,n){if(e||(e=t),l)return e.createDocumentFragment();n=n||o(e);for(var a=n.frag.cloneNode(),i=0,c=r(),s=c.length;i",u="hidden"in e,l=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return void 0===e.cloneNode||void 0===e.createDocumentFragment||void 0===e.createElement}()}catch(e){u=!0,l=!0}}();var v={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==d.shivCSS,supportsUnknownElements:l,shivMethods:!1!==d.shivMethods,type:"default",shivDocument:s,createElement:a,createDocumentFragment:i};e.html5=v,s(t)}(this,t),f._version="2.8.3",f._prefixes=E,f._domPrefixes=S,f._cssomPrefixes=w,f.mq=$,f.hasEvent=D,f.testProp=function(e){return c([e])},f.testAllProps=u,f.testStyles=j,f.prefixed=function(e,t,n){return t?u(e,t,n):u(e,"pfx")},m.className=m.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+" js "+M.join(" "),f}(this,this.document);
--------------------------------------------------------------------------------
/dist/terms.html:
--------------------------------------------------------------------------------
1 | Privacy Policy Terms of Service 1. Terms By accessing the Chrome Browser Extension "Markdownizr", you are agreeing to be bound by these terms of service, all applicable laws and regulations, and agree that you are responsible for compliance with any applicable local laws. If you do not agree with any of these terms, you are prohibited from using or accessing this site. The materials contained in The Application are protected by applicable copyright and trademark law.
"Markdownizr", hereon referred to as "The Applicationlication", is not a commercial website. It is intended to be entertaining, educational, utilitarian, or serve as a reference for contact information.
2. Use License Permission is granted to temporarily download one copy of the materials (information or software) on The Application's website for personal, non-commercial transitory viewing only. This is the grant of a license, not a transfer of title, and under this license you may not:use the materials for any commercial purpose, or public display; remove any copyright or other proprietary notations from the materials. 3. Disclaimer The materials on The Application's website are provided on an 'as is' basis. The Application makes no warranties, expressed or implied, and hereby disclaims and negates all other warranties including, without limitation, implied warranties or conditions of merchantability, fitness for a particular purpose, or non-infringement of intellectual property or other violation of rights. Further, The Application does not warrant or make any representations concerning the accuracy, likely results, or reliability of the use of the materials on its website or otherwise relating to such materials or on any sites linked to this site. 4. Limitations In no event shall The Application or its suppliers be liable for any damages (including, without limitation, damages for loss of data or profit, or due to business interruption) arising out of the use or inability to use the materials on The Application's website, even if The Application or a The Application authorized representative has been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not allow limitations on implied warranties, or limitations of liability for consequential or incidental damages, these limitations may not apply to you.
5. Accuracy of materials The materials appearing on The Application's website could include technical, typographical, or photographic errors. The Application does not warrant that any of the materials on its website are accurate, complete or current. The Application may make changes to the materials contained on its website at any time without notice. However The Application does not make any commitment to update the materials.
6. Links The Application has not reviewed all of the sites linked to its website and is not responsible for the contents of any such linked site. The inclusion of any link does not imply endorsement by The Application of the site. Use of any such linked website is at the user's own risk.
7. Modifications The Application may revise these terms of service for its website at any time without notice. By using The Application you are agreeing to be bound by the then current version of these terms of service.
8. Governing Law These terms and conditions are governed by and construed in accordance with the laws of California and you irrevocably submit to the exclusive jurisdiction of the courts in that State or location.
Privacy Policy Your privacy is important to us. It is The Application's policy to respect your privacy regarding any information we may collect.
Personal Data & Tracking The Application may use Google Analytics for non-commercial statistical analysis.
Other than Google Analytics, The Application does not intentionally collect any personal information whatsoever. Should any personally identifying information become available as a resulted of undesired circumstances, such as hacking, reasonable effort would be made to alert the affected parties and those data would be immediately and securely deleted after said notifications.
Cookies & Caches The Application may use cookies and/or your browser's local storage methods to save its state/configuration or increase performance. These data are not used for any commercial purpose nor for personal identification.
Tracking The Application does not contain nor employ any functionality to track, monitor, or record personal information. It does not attempt to identify or cross-reference users with internal or third party resources.
Advertisements ("Ads") The Application does not contain any commercial advertisements.
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | // generated on 2018-05-30 using generator-webapp 3.0.1
2 | const gulp = require('gulp');
3 | const gulpLoadPlugins = require('gulp-load-plugins');
4 | const browserSync = require('browser-sync').create();
5 | const del = require('del');
6 | const wiredep = require('wiredep').stream;
7 | const runSequence = require('run-sequence');
8 |
9 | const $ = gulpLoadPlugins();
10 | const reload = browserSync.reload;
11 |
12 | let dev = true;
13 |
14 | gulp.task('styles', () => {
15 | return gulp.src('app/styles/*.scss')
16 | .pipe($.plumber())
17 | .pipe($.if(dev, $.sourcemaps.init()))
18 | .pipe($.sass.sync({
19 | outputStyle: 'expanded',
20 | precision: 10,
21 | includePaths: ['.']
22 | }).on('error', $.sass.logError))
23 | .pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']}))
24 | .pipe($.if(dev, $.sourcemaps.write()))
25 | .pipe(gulp.dest('.tmp/styles'))
26 | .pipe(reload({stream: true}));
27 | });
28 |
29 | gulp.task('scripts', () => {
30 | return gulp.src('app/scripts/**/*.js')
31 | .pipe($.plumber())
32 | .pipe($.if(dev, $.sourcemaps.init()))
33 | .pipe($.babel())
34 | .pipe($.if(dev, $.sourcemaps.write('.')))
35 | .pipe(gulp.dest('.tmp/scripts'))
36 | .pipe(reload({stream: true}));
37 | });
38 |
39 | function lint(files) {
40 | return gulp.src(files)
41 | .pipe($.eslint({ fix: true }))
42 | .pipe(reload({stream: true, once: true}))
43 | .pipe($.eslint.format())
44 | .pipe($.if(!browserSync.active, $.eslint.failAfterError()));
45 | }
46 |
47 | gulp.task('lint', () => {
48 | return lint('app/scripts/**/*.js')
49 | .pipe(gulp.dest('app/scripts'));
50 | });
51 | gulp.task('lint:test', () => {
52 | return lint('test/spec/**/*.js')
53 | .pipe(gulp.dest('test/spec'));
54 | });
55 |
56 | gulp.task('html', ['styles', 'scripts'], () => {
57 | return gulp.src('app/*.html')
58 | .pipe($.useref({searchPath: ['.tmp', 'app', '.']}))
59 | .pipe($.if(/\.js$/, $.uglify({compress: {drop_console: true}})))
60 | .pipe($.if(/\.css$/, $.cssnano({safe: true, autoprefixer: false})))
61 | .pipe($.if(/\.html$/, $.htmlmin({
62 | collapseWhitespace: true,
63 | minifyCSS: true,
64 | minifyJS: {compress: {drop_console: true}},
65 | processConditionalComments: true,
66 | removeComments: true,
67 | removeEmptyAttributes: true,
68 | removeScriptTypeAttributes: true,
69 | removeStyleLinkTypeAttributes: true
70 | })))
71 | .pipe(gulp.dest('dist'));
72 | });
73 |
74 | gulp.task('images', () => {
75 | return gulp.src('app/images/**/*')
76 | .pipe($.cache($.imagemin()))
77 | .pipe(gulp.dest('dist/images'));
78 | });
79 |
80 | gulp.task('fonts', () => {
81 | return gulp.src(require('main-bower-files')('**/*.{eot,svg,ttf,woff,woff2}', function (err) {})
82 | .concat('app/fonts/**/*'))
83 | .pipe($.if(dev, gulp.dest('.tmp/fonts'), gulp.dest('dist/fonts')));
84 | });
85 |
86 | gulp.task('extras', () => {
87 | return gulp.src([
88 | 'app/*',
89 | '!app/*.html'
90 | ], {
91 | dot: true
92 | }).pipe(gulp.dest('dist'));
93 | });
94 |
95 | gulp.task('clean', del.bind(null, ['.tmp', 'dist']));
96 |
97 | gulp.task('serve', () => {
98 | runSequence(['clean', 'wiredep'], ['styles', 'scripts', 'fonts'], () => {
99 | browserSync.init({
100 | notify: false,
101 | port: 9000,
102 | server: {
103 | baseDir: ['.tmp', 'app'],
104 | routes: {
105 | '/bower_components': 'bower_components'
106 | }
107 | }
108 | });
109 |
110 | gulp.watch([
111 | 'app/*.html',
112 | 'app/images/**/*',
113 | '.tmp/fonts/**/*'
114 | ]).on('change', reload);
115 |
116 | gulp.watch('app/styles/**/*.scss', ['styles']);
117 | gulp.watch('app/scripts/**/*.js', ['scripts']);
118 | gulp.watch('app/fonts/**/*', ['fonts']);
119 | gulp.watch('bower.json', ['wiredep', 'fonts']);
120 | });
121 | });
122 |
123 | gulp.task('serve:dist', ['default'], () => {
124 | browserSync.init({
125 | notify: false,
126 | port: 9000,
127 | server: {
128 | baseDir: ['dist']
129 | }
130 | });
131 | });
132 |
133 | gulp.task('serve:test', ['scripts'], () => {
134 | browserSync.init({
135 | notify: false,
136 | port: 9000,
137 | ui: false,
138 | server: {
139 | baseDir: 'test',
140 | routes: {
141 | '/scripts': '.tmp/scripts',
142 | '/bower_components': 'bower_components'
143 | }
144 | }
145 | });
146 |
147 | gulp.watch('app/scripts/**/*.js', ['scripts']);
148 | gulp.watch(['test/spec/**/*.js', 'test/index.html']).on('change', reload);
149 | gulp.watch('test/spec/**/*.js', ['lint:test']);
150 | });
151 |
152 | // inject bower components
153 | gulp.task('wiredep', () => {
154 | gulp.src('app/styles/*.scss')
155 | .pipe($.filter(file => file.stat && file.stat.size))
156 | .pipe(wiredep({
157 | ignorePath: /^(\.\.\/)+/
158 | }))
159 | .pipe(gulp.dest('app/styles'));
160 |
161 | gulp.src('app/*.html')
162 | .pipe(wiredep({
163 | exclude: ['bootstrap-sass'],
164 | ignorePath: /^(\.\.\/)*\.\./
165 | }))
166 | .pipe(gulp.dest('app'));
167 | });
168 |
169 | gulp.task('build', ['lint', 'html', 'images', 'fonts', 'extras'], () => {
170 | return gulp.src('dist/**/*').pipe($.size({title: 'build', gzip: true}));
171 | });
172 |
173 | gulp.task('default', () => {
174 | return new Promise(resolve => {
175 | dev = false;
176 | runSequence(['clean', 'wiredep'], 'build', resolve);
177 | });
178 | });
179 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "deploy": "gulp build && git add dist && git commit -m 'build' && git push origin `git subtree split --prefix dist`:gh-pages --force && cfcli purge https://sean.sh"
4 | },
5 | "private": true,
6 | "engines": {
7 | "node": ">=4"
8 | },
9 | "devDependencies": {
10 | "babel-core": "^6.4.0",
11 | "babel-preset-es2015": "^6.3.13",
12 | "babel-register": "^6.5.2",
13 | "browser-sync": "^2.2.1",
14 | "del": "^2.2.0",
15 | "gulp-autoprefixer": "^3.0.1",
16 | "gulp-babel": "^6.1.1",
17 | "gulp-cache": "^0.4.2",
18 | "gulp-cssnano": "^2.0.0",
19 | "gulp-eslint": "^3.0.0",
20 | "gulp-filter": "^4.0.0",
21 | "gulp-htmlmin": "^3.0.0",
22 | "gulp-if": "^2.0.2",
23 | "gulp-imagemin": "^3.0.1",
24 | "gulp-load-plugins": "^1.2.4",
25 | "gulp-plumber": "^1.0.1",
26 | "gulp-sass": "^3.0.0",
27 | "gulp-size": "^2.1.0",
28 | "gulp-sourcemaps": "^2.2.0",
29 | "gulp-uglify": "^2.0.0",
30 | "gulp-useref": "^3.0.0",
31 | "main-bower-files": "^2.5.0",
32 | "run-sequence": "^1.2.2",
33 | "wiredep": "^4.0.0"
34 | },
35 | "eslintConfig": {
36 | "env": {
37 | "es6": true,
38 | "node": true,
39 | "browser": true
40 | },
41 | "rules": {
42 | "quotes": [
43 | 2,
44 | "single"
45 | ]
46 | }
47 | },
48 | "dependencies": {
49 | "gulp": "^3.9.1"
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Mocha Spec Runner
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
20 |
21 |
22 |
23 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/test/spec/test.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | describe('Give it some context', function () {
5 | describe('maybe a bit more context here', function () {
6 | it('should run here few assertions', function () {
7 |
8 | });
9 | });
10 | });
11 | })();
12 |
--------------------------------------------------------------------------------