├── chrome
├── devtools.html
├── css-steal.zip
├── img
│ ├── icon.psd
│ ├── icon16.png
│ ├── icon19.png
│ ├── icon38.png
│ ├── icon48.png
│ └── icon128.png
├── fonts
│ ├── FontAwesome.otf
│ ├── fontawesome-webfont.eot
│ ├── fontawesome-webfont.ttf
│ └── fontawesome-webfont.woff
├── css
│ ├── neaHiVpEUkuPmSawsrNWSg.woff
│ ├── s7gftie1JANC-QmDJvMWZj8E0i7KZn-EPnyo3HZu7kw.woff
│ ├── Roboto.css
│ ├── styles.css
│ ├── font-awesome.min.css
│ └── font-awesome.css
├── js
│ ├── src
│ │ ├── DOMhelpers.js
│ │ ├── execute.js
│ │ ├── index.js
│ │ ├── CSSPreview.js
│ │ ├── Page.js
│ │ ├── vendor
│ │ │ └── dompath.js
│ │ └── Links.js
│ ├── script.min.js
│ └── script.js
├── devtools.js
├── manifest.json
└── index.html
├── .gitignore
├── .DS_Store
├── package.json
├── LICENSE
├── gulpfile.js
├── README.md
├── lib
├── index.js
└── csssteal.min.js
└── src
└── index.js
/chrome/devtools.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | testing
2 | node_modules
3 | npm-debug.log
4 | .DS_Store
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/.DS_Store
--------------------------------------------------------------------------------
/chrome/css-steal.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/css-steal.zip
--------------------------------------------------------------------------------
/chrome/img/icon.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/img/icon.psd
--------------------------------------------------------------------------------
/chrome/img/icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/img/icon16.png
--------------------------------------------------------------------------------
/chrome/img/icon19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/img/icon19.png
--------------------------------------------------------------------------------
/chrome/img/icon38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/img/icon38.png
--------------------------------------------------------------------------------
/chrome/img/icon48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/img/icon48.png
--------------------------------------------------------------------------------
/chrome/img/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/img/icon128.png
--------------------------------------------------------------------------------
/chrome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/chrome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/chrome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/chrome/css/neaHiVpEUkuPmSawsrNWSg.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/css/neaHiVpEUkuPmSawsrNWSg.woff
--------------------------------------------------------------------------------
/chrome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/chrome/js/src/DOMhelpers.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export default {
4 | $: sel => document.querySelector(sel),
5 | $$: sel => document.querySelectorAll(sel)
6 | };
7 |
--------------------------------------------------------------------------------
/chrome/css/s7gftie1JANC-QmDJvMWZj8E0i7KZn-EPnyo3HZu7kw.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krasimir/css-steal/master/chrome/css/s7gftie1JANC-QmDJvMWZj8E0i7KZn-EPnyo3HZu7kw.woff
--------------------------------------------------------------------------------
/chrome/devtools.js:
--------------------------------------------------------------------------------
1 | chrome.devtools.panels.elements.createSidebarPane(
2 | "CSSSteal",
3 | function(sidebar) {
4 | sidebar.setPage("index.html");
5 | sidebar.setHeight("2500px");
6 | }
7 | );
--------------------------------------------------------------------------------
/chrome/js/src/execute.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export default function execute(fn, args = [], callback = null) {
4 | var code = '(' + fn.toString() + ').apply(this, [' + args.toString() + ']);';
5 |
6 | chrome.devtools.inspectedWindow.eval(code, callback ? callback.bind(this) : () => {});
7 | };
8 |
--------------------------------------------------------------------------------
/chrome/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "name": "CSSSteal",
4 | "description": "Given DOM element returns styles applied to it and all its children.",
5 | "version": "1.0.2",
6 | "icons": { "16": "img/icon16.png", "48": "img/icon48.png", "128": "img/icon128.png" },
7 | "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
8 | "devtools_page": "devtools.html"
9 | }
10 |
--------------------------------------------------------------------------------
/chrome/js/src/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import Links from './Links';
4 | import CSSPreview from './CSSPreview';
5 | import Page from './Page';
6 | import { $ } from './DOMhelpers';
7 |
8 | var cssPreview = new CSSPreview();
9 | var links = new Links({
10 | onLinkSelected: cssPreview.render.bind(cssPreview),
11 | onClear: cssPreview.clear.bind(cssPreview)
12 | });
13 | var page = new Page({
14 | onElementSelected: links.addLink.bind(links)
15 | });
--------------------------------------------------------------------------------
/chrome/css/Roboto.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Roboto';
3 | font-style: normal;
4 | font-weight: 400;
5 | src: local('Roboto Regular'), local('Roboto-Regular'), url(neaHiVpEUkuPmSawsrNWSg.woff) format('woff');
6 | }
7 | @font-face {
8 | font-family: 'Roboto';
9 | font-style: normal;
10 | font-weight: 900;
11 | src: local('Roboto Black'), local('Roboto-Black'), url(s7gftie1JANC-QmDJvMWZj8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
12 | }
13 |
--------------------------------------------------------------------------------
/chrome/js/src/CSSPreview.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import CSSSteal from '../../../src/';
4 | import execute from './execute';
5 | import { $ } from './DOMhelpers';
6 |
7 | export default class CSSPreview {
8 | constructor() {
9 | this.container = $('.js-css-holder');
10 | }
11 | render(els) {
12 | var selectors = els.map(el => el.selector);
13 |
14 | execute(
15 | this._CSSSteal,
16 | [CSSSteal, '[' + selectors.map(s => '"' + s + '"').join(',') + ']'],
17 | css => {
18 | this.container.innerHTML = '
' + css + '
';
19 | }
20 | );
21 | }
22 | clear() {
23 | this.container.innerHTML = '';
24 | }
25 | _CSSSteal(CSSSteal, selectors) {
26 | var elements = selectors.map(sel => document.querySelector(sel));
27 |
28 | return CSSSteal.apply(null, elements).toCSSText();
29 | }
30 | }
--------------------------------------------------------------------------------
/chrome/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CSSSteal
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/chrome/js/src/Page.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import dompath from './vendor/dompath';
4 | import execute from './execute';
5 |
6 | export default class Page {
7 | constructor({ onElementSelected=null }) {
8 | this.selected = 1;
9 | this.onElementSelected = onElementSelected;
10 | var handleElementSelected = this.handleElementSelected.bind(this);
11 |
12 | chrome.devtools.panels.elements.onSelectionChanged.addListener(handleElementSelected);
13 |
14 | }
15 | handleElementSelected() {
16 | execute(
17 | this._getLastlyInspectedElement,
18 | [dompath],
19 | el => {
20 | if (el) this.onElementSelected(el)
21 | }
22 | );
23 | }
24 |
25 | // eval functions
26 | _getLastlyInspectedElement(dompath) {
27 | var el = $0;
28 | var nodeName = el.nodeName.toString().toLowerCase();
29 | var classes = el.getAttribute('class');
30 |
31 | return {
32 | label: nodeName + (classes ? ' class="' + classes + '"' : ''),
33 | selector: dompath($0).toCSS()
34 | }
35 | }
36 | };
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "css-steal",
3 | "version": "1.0.4",
4 | "description": "Given DOM element returns styles applied to it and all its children.",
5 | "main": "src/index.js",
6 | "dependencies": {},
7 | "author": {
8 | "name": "Krasimir Tsonev",
9 | "email": "info@krasimirtsonev.com",
10 | "url": "http://krasimirtsonev.com"
11 | },
12 | "license": "MIT",
13 | "keywords": [
14 | "css",
15 | "dom",
16 | "extract",
17 | "fetch"
18 | ],
19 | "repository": {
20 | "type": "git",
21 | "url": "https://github.com/krasimir/css-steal.git"
22 | },
23 | "scripts": {
24 | "build": "./node_modules/.bin/gulp",
25 | "dev": "./node_modules/.bin/gulp dev"
26 | },
27 | "devDependencies": {
28 | "browserify": "^11.1.0",
29 | "buffer": "^3.4.3",
30 | "gulp": "3.9.0",
31 | "gulp-babel": "5.2.1",
32 | "gulp-browserify": "0.5.1",
33 | "gulp-plumber": "1.0.1",
34 | "gulp-rename": "1.2.2",
35 | "gulp-uglify": "1.4.1",
36 | "vinyl-buffer": "^1.0.0",
37 | "vinyl-source-stream": "^1.1.0"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Krasimir Tsonev
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var gulp = require('gulp');
2 | var uglify = require('gulp-uglify');
3 | var rename = require('gulp-rename');
4 | var babelify = require('babelify');
5 | var browserify = require('browserify');
6 | var plumber = require('gulp-plumber');
7 | var source = require('vinyl-source-stream');
8 | var buffer = require('vinyl-buffer');
9 |
10 | gulp.task('build-lib', function() {
11 | return gulp.src('src/*.js')
12 | .pipe(plumber())
13 | .pipe(uglify())
14 | .pipe(gulp.dest('lib'))
15 | .pipe(rename('csssteal.min.js'))
16 | .pipe(gulp.dest('lib'));
17 | });
18 |
19 | gulp.task('chrome', function () {
20 | browserify({ entries: 'chrome/js/src/index.js', debug: true })
21 | .transform(babelify)
22 | .bundle()
23 | .on('error', function(err){
24 | console.log(err.message);
25 | })
26 | .pipe(source('script.js'))
27 | .pipe(gulp.dest('chrome/js'))
28 | .pipe(buffer())
29 | .pipe(rename('script.min.js'))
30 | .pipe(uglify())
31 | .pipe(gulp.dest('chrome/js'));
32 | });
33 |
34 | gulp.task('watch', function() {
35 | gulp.watch(['chrome/js/src/*.js', 'src/index.js'], ['chrome', 'build-lib']);
36 | });
37 |
38 | gulp.task('default', ['build-lib', 'chrome']);
39 | gulp.task('dev', ['build-lib', 'chrome', 'watch']);
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CSS steal
2 |
3 | Given DOM element returns styles applied to it and all its children.
4 |
5 | ## Installation
6 |
7 | ```js
8 | npm install css-steal
9 | ```
10 |
11 | ## Usage
12 |
13 | ```js
14 | var CSSSteal = require('css-steal');
15 | var css = CSSSteal(document.querySelector('.my-class'));
16 | css.toCSSText(); // produces formatted CSS styles
17 | css.toJS(): // returns an array of objects containing the styles
18 | ```
19 |
20 | `CSSSteal` accepts multiple DOM elements. For example:
21 |
22 | ```js
23 | var a = document.querySelector('.a-class');
24 | var b = document.querySelector('.b-class');
25 | var c = document.querySelector('.c-class');
26 |
27 | var css = CSSSteal(a, b, c);
28 | ```
29 | It merges the CSS used by the elements.
30 |
31 | ## Chrome extension
32 |
33 | Download [here](https://chrome.google.com/webstore/detail/csssteal/ellabkgcnhflepncdcnelhgclfkgmanh).
34 |
35 | 
36 |
37 | ## Development
38 |
39 | ```js
40 | npm run dev
41 | ```
42 |
43 | ## Resources
44 |
45 | * [CSSSteal - Chrome extension that extracts CSS](http://krasimirtsonev.com/blog/article/csssteal-chrome-extension-that-extracts-css)
46 | * [StackOverflow: Find all CSS rules that apply to an element](http://stackoverflow.com/questions/2952667/find-all-css-rules-that-apply-to-an-element)
47 |
--------------------------------------------------------------------------------
/chrome/js/src/vendor/dompath.js:
--------------------------------------------------------------------------------
1 | // credits: https://github.com/jhartikainen/dompath
2 |
3 | export default function(el, parent) {
4 |
5 | var getSelector = function(node) {
6 | if(node.id !== '') {
7 | return '#' + node.id;
8 | }
9 |
10 | var root = '';
11 | if(node.parent) {
12 | root = getSelector(node.parent) + ' > ';
13 | }
14 |
15 | return root + node.name + ':nth-child(' + (node.index + 1) + ')';
16 | };
17 |
18 | var DomPath = function(node) { this.node = node; };
19 | DomPath.prototype = {
20 | toCSS: function() {
21 | return getSelector(this.node);
22 | },
23 |
24 | select: function() {
25 | if(this.node.id !== '') {
26 | return document.getElementById(this.node.id);
27 | }
28 |
29 | return document.querySelector(this.toCSS());
30 | }
31 | };
32 |
33 | var pathNode = function(el, root) {
34 | var node = {
35 | id: el.id,
36 | name: el.nodeName.toLowerCase(),
37 | index: childIndex(el),
38 | parent: null
39 | };
40 |
41 | if(el.parentElement && el.parentElement !== root) {
42 | node.parent = pathNode(el.parentElement, root);
43 | }
44 |
45 | return node;
46 | };
47 |
48 | var childIndex = function(el) {
49 | var idx = 0;
50 | while(el = el.previousSibling) {
51 | if(el.nodeType == 1) {
52 | idx++;
53 | }
54 | }
55 |
56 | return idx;
57 | };
58 |
59 | parent = parent || document.body;
60 | if(el.nodeName) {
61 | return new DomPath(pathNode(el, parent));
62 | }
63 |
64 | return new DomPath(el.node);
65 | };
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | (function(){var e=function(){var e={},t=null,n=[],r=" ",o=!1,u=arguments,s=function(){if(0===u.length)throw new Error("CSSSteal expects at least one argument (DOM element)");if(!document.styleSheets)throw new Error("CSSSteal: document.styleSheets is not available in this browser.");o=l(u,!0)},c=function(){return o.outerHTML},l=function(e,t){var n,r=[];for(n=0;n0?r[0]:{selector:e,styles:{}}},r=function(e,n){var r=t(e.selector,n);0===r.length&&n.push(e)},o=[];return e.forEach(function(e){e.forEach(function(e){for(var t=n(e.selectorText,o),u=0;u0?r[0]:{selector:e,styles:{}}},r=function(e,n){var r=t(e.selector,n);0===r.length&&n.push(e)},o=[];return e.forEach(function(e){e.forEach(function(e){for(var t=n(e.selectorText,o),u=0;u {
43 | var html = '';
44 | var selected = el.selected ? ' class="selected"' : '';
45 |
46 | html += '';
47 | html += ' <';
48 | html += el.label;
49 | html += '>';
50 | return html;
51 | })
52 | .join('');
53 |
54 | this.container.innerHTML = html === '' ? ' ' : html;
55 |
56 | return this;
57 | }
58 | _getRecordByElement(el) {
59 | var id = el.target ? el.target.getAttribute('data-index') : false;
60 | var filtered = this.elements.filter(record => record.id === id);
61 |
62 | return filtered.length > 0 ? filtered[0] : false;
63 | }
64 | _getRecordBySelector(selector) {
65 | var filtered = this.elements.filter(record => record.selector === selector);
66 |
67 | return filtered.length > 0 ? filtered[0] : false;
68 | }
69 | _handleLink(el) {
70 | var record = this._getRecordByElement(el);
71 |
72 | if (record) {
73 | record.selected = !record.selected;
74 | record.selected ? el.target.classList.add('selected') : el.target.classList.remove('selected');
75 | this.steal.disabled = !(this._selected().length > 0);
76 | }
77 | }
78 | _selected() {
79 | return this.elements.filter(el => el.selected);
80 | }
81 | _handleGetCSS() {
82 | this.onLinkSelected(this._selected());
83 | }
84 | _handleMouseOver(el) {
85 | var record = this._getRecordByElement(el);
86 |
87 | if (record) {
88 | execute(this._inspect, ['"' + record.selector + '"']);
89 | }
90 | }
91 | _handleClear() {
92 | this.elements = [];
93 | this.clear.disabled = true;
94 | this.steal.disabled = true
95 | this._render();
96 | this.onClear();
97 | }
98 |
99 | _inspect(selector) {
100 | inspect(document.querySelector(selector));
101 | }
102 | };
103 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 |
3 | var CSSSteal = function () {
4 | var api = {}, html = null, styles = [], indent = ' ', elements = false, args = arguments;
5 |
6 | var requirements = function () {
7 | if (args.length === 0) {
8 | throw new Error('CSSSteal expects at least one argument (DOM element)');
9 | }
10 | if (!document.styleSheets) {
11 | throw new Error('CSSSteal: document.styleSheets is not available in this browser.');
12 | }
13 | elements = toArray(args, true);
14 | };
15 | var getHTMLAsString = function () {
16 | return elements.outerHTML;
17 | };
18 | var toArray = function(obj, ignoreFalsy) {
19 | var arr = [], i;
20 |
21 | for (i = 0; i < obj.length; i++) {
22 | if (!ignoreFalsy || obj[i]) {
23 | arr[i] = obj[i];
24 | }
25 | }
26 | return arr;
27 | }
28 | var getRules = function (a) {
29 | var sheets = document.styleSheets, result = [], selectorText;
30 |
31 | a.matches = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector;
32 | for (var i in sheets) {
33 | var rules = sheets[i].rules || sheets[i].cssRules;
34 | for (var r in rules) {
35 | selectorText = rules[r].selectorText ? rules[r].selectorText.split(' ').map(function(piece) {
36 | return piece ? piece.split(/(:|::)/)[0] : false;
37 | }).join(' ') : false;
38 | try {
39 | if (a.matches(selectorText)) {
40 | result.push(rules[r]);
41 | }
42 | } catch(e) {
43 | // can not run matches on this selector
44 | }
45 | }
46 | }
47 | return result;
48 | }
49 | var readStyles = function (els) {
50 | return els.reduce(function (s, el) {
51 | s.push(getRules(el));
52 | s = s.concat(readStyles(toArray(el.children)));
53 | return s;
54 | }, []);
55 | };
56 | var flattenRules = function (s) {
57 | var filterBySelector = function (selector, result) {
58 | return result.filter(function (item) {
59 | return item.selector === selector;
60 | });
61 | }
62 | var getItem = function (selector, result) {
63 | var arr = filterBySelector(selector, result);
64 | return arr.length > 0 ? arr[0] : {
65 | selector: selector,
66 | styles: {}
67 | };
68 | }
69 | var pushItem = function (item, result) {
70 | var arr = filterBySelector(item.selector, result);
71 | if (arr.length === 0) result.push(item);
72 | }
73 | var all = [];
74 | s.forEach(function (rules) {
75 | rules.forEach(function (rule) {
76 | var item = getItem(rule.selectorText, all);
77 | for (var i=0; i"+e+""})}},{key:"clear",value:function(){this.container.innerHTML=""}},{key:"_CSSSteal",value:function(e,t){var n=t.map(function(e){return document.querySelector(e)});return e.apply(null,n).toCSSText()}}]),e}();n["default"]=d,t.exports=n["default"]},{"../../../src/":8,"./DOMhelpers":2,"./execute":5}],2:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]={$:function(e){return document.querySelector(e)},$$:function(e){return document.querySelectorAll(e)}},t.exports=n["default"]},{}],3:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n",t+=' <',t+=e.label,t+=">"}).join("");return this.container.innerHTML=""===e?" ":e,this}},{key:"_getRecordByElement",value:function(e){var t=e.target?e.target.getAttribute("data-index"):!1,n=this.elements.filter(function(e){return e.id===t});return n.length>0?n[0]:!1}},{key:"_getRecordBySelector",value:function(e){var t=this.elements.filter(function(t){return t.selector===e});return t.length>0?t[0]:!1}},{key:"_handleLink",value:function(e){var t=this._getRecordByElement(e);t&&(t.selected=!t.selected,t.selected?e.target.classList.add("selected"):e.target.classList.remove("selected"),this.steal.disabled=!(this._selected().length>0))}},{key:"_selected",value:function(){return this.elements.filter(function(e){return e.selected})}},{key:"_handleGetCSS",value:function(){this.onLinkSelected(this._selected())}},{key:"_handleMouseOver",value:function(e){var t=this._getRecordByElement(e);t&&s["default"](this._inspect,['"'+t.selector+'"'])}},{key:"_handleClear",value:function(){this.elements=[],this.clear.disabled=!0,this.steal.disabled=!0,this._render(),this.onClear()}},{key:"_inspect",value:function(e){inspect(document.querySelector(e))}}]),e}();n["default"]=a,t.exports=n["default"]},{"./DOMhelpers":2,"./execute":5}],4:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n "),t+e.name+":nth-child("+(e.index+1)+")"},r=function(e){this.node=e};r.prototype={toCSS:function(){return n(this.node)},select:function(){return""!==this.node.id?document.getElementById(this.node.id):document.querySelector(this.toCSS())}};var i=function l(e,t){var n={id:e.id,name:e.nodeName.toLowerCase(),index:o(e),parent:null};return e.parentElement&&e.parentElement!==t&&(n.parent=l(e.parentElement,t)),n},o=function(e){for(var t=0;e=e.previousSibling;)1==e.nodeType&&t++;return t};return t=t||document.body,new r(e.nodeName?i(e,t):e.node)},t.exports=n["default"]},{}],8:[function(e,t,n){"use strict";(function(){var e=function(){var e={},t=null,n=[],r=" ",i=!1,o=arguments,u=function(){if(0===o.length)throw new Error("CSSSteal expects at least one argument (DOM element)");if(!document.styleSheets)throw new Error("CSSSteal: document.styleSheets is not available in this browser.");i=s(o,!0)},l=function(){return i.outerHTML},s=function(e,t){var n,r=[];for(n=0;n0?r[0]:{selector:e,styles:{}}},r=function(e,n){var r=t(e.selector,n);0===r.length&&n.push(e)},i=[];return e.forEach(function(e){e.forEach(function(e){for(var t=n(e.selectorText,i),o=0;oli{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}
--------------------------------------------------------------------------------
/chrome/css/font-awesome.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 | /* FONT PATH
6 | * -------------------------- */
7 | @font-face {
8 | font-family: 'FontAwesome';
9 | src: url('../fonts/fontawesome-webfont.eot?v=4.1.0');
10 | src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
11 | font-weight: normal;
12 | font-style: normal;
13 | }
14 | .fa {
15 | display: inline-block;
16 | font-family: FontAwesome;
17 | font-style: normal;
18 | font-weight: normal;
19 | line-height: 1;
20 | -webkit-font-smoothing: antialiased;
21 | -moz-osx-font-smoothing: grayscale;
22 | }
23 | /* makes the font 33% larger relative to the icon container */
24 | .fa-lg {
25 | font-size: 1.33333333em;
26 | line-height: 0.75em;
27 | vertical-align: -15%;
28 | }
29 | .fa-2x {
30 | font-size: 2em;
31 | }
32 | .fa-3x {
33 | font-size: 3em;
34 | }
35 | .fa-4x {
36 | font-size: 4em;
37 | }
38 | .fa-5x {
39 | font-size: 5em;
40 | }
41 | .fa-fw {
42 | width: 1.28571429em;
43 | text-align: center;
44 | }
45 | .fa-ul {
46 | padding-left: 0;
47 | margin-left: 2.14285714em;
48 | list-style-type: none;
49 | }
50 | .fa-ul > li {
51 | position: relative;
52 | }
53 | .fa-li {
54 | position: absolute;
55 | left: -2.14285714em;
56 | width: 2.14285714em;
57 | top: 0.14285714em;
58 | text-align: center;
59 | }
60 | .fa-li.fa-lg {
61 | left: -1.85714286em;
62 | }
63 | .fa-border {
64 | padding: .2em .25em .15em;
65 | border: solid 0.08em #eeeeee;
66 | border-radius: .1em;
67 | }
68 | .pull-right {
69 | float: right;
70 | }
71 | .pull-left {
72 | float: left;
73 | }
74 | .fa.pull-left {
75 | margin-right: .3em;
76 | }
77 | .fa.pull-right {
78 | margin-left: .3em;
79 | }
80 | .fa-spin {
81 | -webkit-animation: spin 2s infinite linear;
82 | -moz-animation: spin 2s infinite linear;
83 | -o-animation: spin 2s infinite linear;
84 | animation: spin 2s infinite linear;
85 | }
86 | @-moz-keyframes spin {
87 | 0% {
88 | -moz-transform: rotate(0deg);
89 | }
90 | 100% {
91 | -moz-transform: rotate(359deg);
92 | }
93 | }
94 | @-webkit-keyframes spin {
95 | 0% {
96 | -webkit-transform: rotate(0deg);
97 | }
98 | 100% {
99 | -webkit-transform: rotate(359deg);
100 | }
101 | }
102 | @-o-keyframes spin {
103 | 0% {
104 | -o-transform: rotate(0deg);
105 | }
106 | 100% {
107 | -o-transform: rotate(359deg);
108 | }
109 | }
110 | @keyframes spin {
111 | 0% {
112 | -webkit-transform: rotate(0deg);
113 | transform: rotate(0deg);
114 | }
115 | 100% {
116 | -webkit-transform: rotate(359deg);
117 | transform: rotate(359deg);
118 | }
119 | }
120 | .fa-rotate-90 {
121 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
122 | -webkit-transform: rotate(90deg);
123 | -moz-transform: rotate(90deg);
124 | -ms-transform: rotate(90deg);
125 | -o-transform: rotate(90deg);
126 | transform: rotate(90deg);
127 | }
128 | .fa-rotate-180 {
129 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
130 | -webkit-transform: rotate(180deg);
131 | -moz-transform: rotate(180deg);
132 | -ms-transform: rotate(180deg);
133 | -o-transform: rotate(180deg);
134 | transform: rotate(180deg);
135 | }
136 | .fa-rotate-270 {
137 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
138 | -webkit-transform: rotate(270deg);
139 | -moz-transform: rotate(270deg);
140 | -ms-transform: rotate(270deg);
141 | -o-transform: rotate(270deg);
142 | transform: rotate(270deg);
143 | }
144 | .fa-flip-horizontal {
145 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
146 | -webkit-transform: scale(-1, 1);
147 | -moz-transform: scale(-1, 1);
148 | -ms-transform: scale(-1, 1);
149 | -o-transform: scale(-1, 1);
150 | transform: scale(-1, 1);
151 | }
152 | .fa-flip-vertical {
153 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
154 | -webkit-transform: scale(1, -1);
155 | -moz-transform: scale(1, -1);
156 | -ms-transform: scale(1, -1);
157 | -o-transform: scale(1, -1);
158 | transform: scale(1, -1);
159 | }
160 | .fa-stack {
161 | position: relative;
162 | display: inline-block;
163 | width: 2em;
164 | height: 2em;
165 | line-height: 2em;
166 | vertical-align: middle;
167 | }
168 | .fa-stack-1x,
169 | .fa-stack-2x {
170 | position: absolute;
171 | left: 0;
172 | width: 100%;
173 | text-align: center;
174 | }
175 | .fa-stack-1x {
176 | line-height: inherit;
177 | }
178 | .fa-stack-2x {
179 | font-size: 2em;
180 | }
181 | .fa-inverse {
182 | color: #ffffff;
183 | }
184 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
185 | readers do not read off random characters that represent icons */
186 | .fa-glass:before {
187 | content: "\f000";
188 | }
189 | .fa-music:before {
190 | content: "\f001";
191 | }
192 | .fa-search:before {
193 | content: "\f002";
194 | }
195 | .fa-envelope-o:before {
196 | content: "\f003";
197 | }
198 | .fa-heart:before {
199 | content: "\f004";
200 | }
201 | .fa-star:before {
202 | content: "\f005";
203 | }
204 | .fa-star-o:before {
205 | content: "\f006";
206 | }
207 | .fa-user:before {
208 | content: "\f007";
209 | }
210 | .fa-film:before {
211 | content: "\f008";
212 | }
213 | .fa-th-large:before {
214 | content: "\f009";
215 | }
216 | .fa-th:before {
217 | content: "\f00a";
218 | }
219 | .fa-th-list:before {
220 | content: "\f00b";
221 | }
222 | .fa-check:before {
223 | content: "\f00c";
224 | }
225 | .fa-times:before {
226 | content: "\f00d";
227 | }
228 | .fa-search-plus:before {
229 | content: "\f00e";
230 | }
231 | .fa-search-minus:before {
232 | content: "\f010";
233 | }
234 | .fa-power-off:before {
235 | content: "\f011";
236 | }
237 | .fa-signal:before {
238 | content: "\f012";
239 | }
240 | .fa-gear:before,
241 | .fa-cog:before {
242 | content: "\f013";
243 | }
244 | .fa-trash-o:before {
245 | content: "\f014";
246 | }
247 | .fa-home:before {
248 | content: "\f015";
249 | }
250 | .fa-file-o:before {
251 | content: "\f016";
252 | }
253 | .fa-clock-o:before {
254 | content: "\f017";
255 | }
256 | .fa-road:before {
257 | content: "\f018";
258 | }
259 | .fa-download:before {
260 | content: "\f019";
261 | }
262 | .fa-arrow-circle-o-down:before {
263 | content: "\f01a";
264 | }
265 | .fa-arrow-circle-o-up:before {
266 | content: "\f01b";
267 | }
268 | .fa-inbox:before {
269 | content: "\f01c";
270 | }
271 | .fa-play-circle-o:before {
272 | content: "\f01d";
273 | }
274 | .fa-rotate-right:before,
275 | .fa-repeat:before {
276 | content: "\f01e";
277 | }
278 | .fa-refresh:before {
279 | content: "\f021";
280 | }
281 | .fa-list-alt:before {
282 | content: "\f022";
283 | }
284 | .fa-lock:before {
285 | content: "\f023";
286 | }
287 | .fa-flag:before {
288 | content: "\f024";
289 | }
290 | .fa-headphones:before {
291 | content: "\f025";
292 | }
293 | .fa-volume-off:before {
294 | content: "\f026";
295 | }
296 | .fa-volume-down:before {
297 | content: "\f027";
298 | }
299 | .fa-volume-up:before {
300 | content: "\f028";
301 | }
302 | .fa-qrcode:before {
303 | content: "\f029";
304 | }
305 | .fa-barcode:before {
306 | content: "\f02a";
307 | }
308 | .fa-tag:before {
309 | content: "\f02b";
310 | }
311 | .fa-tags:before {
312 | content: "\f02c";
313 | }
314 | .fa-book:before {
315 | content: "\f02d";
316 | }
317 | .fa-bookmark:before {
318 | content: "\f02e";
319 | }
320 | .fa-print:before {
321 | content: "\f02f";
322 | }
323 | .fa-camera:before {
324 | content: "\f030";
325 | }
326 | .fa-font:before {
327 | content: "\f031";
328 | }
329 | .fa-bold:before {
330 | content: "\f032";
331 | }
332 | .fa-italic:before {
333 | content: "\f033";
334 | }
335 | .fa-text-height:before {
336 | content: "\f034";
337 | }
338 | .fa-text-width:before {
339 | content: "\f035";
340 | }
341 | .fa-align-left:before {
342 | content: "\f036";
343 | }
344 | .fa-align-center:before {
345 | content: "\f037";
346 | }
347 | .fa-align-right:before {
348 | content: "\f038";
349 | }
350 | .fa-align-justify:before {
351 | content: "\f039";
352 | }
353 | .fa-list:before {
354 | content: "\f03a";
355 | }
356 | .fa-dedent:before,
357 | .fa-outdent:before {
358 | content: "\f03b";
359 | }
360 | .fa-indent:before {
361 | content: "\f03c";
362 | }
363 | .fa-video-camera:before {
364 | content: "\f03d";
365 | }
366 | .fa-photo:before,
367 | .fa-image:before,
368 | .fa-picture-o:before {
369 | content: "\f03e";
370 | }
371 | .fa-pencil:before {
372 | content: "\f040";
373 | }
374 | .fa-map-marker:before {
375 | content: "\f041";
376 | }
377 | .fa-adjust:before {
378 | content: "\f042";
379 | }
380 | .fa-tint:before {
381 | content: "\f043";
382 | }
383 | .fa-edit:before,
384 | .fa-pencil-square-o:before {
385 | content: "\f044";
386 | }
387 | .fa-share-square-o:before {
388 | content: "\f045";
389 | }
390 | .fa-check-square-o:before {
391 | content: "\f046";
392 | }
393 | .fa-arrows:before {
394 | content: "\f047";
395 | }
396 | .fa-step-backward:before {
397 | content: "\f048";
398 | }
399 | .fa-fast-backward:before {
400 | content: "\f049";
401 | }
402 | .fa-backward:before {
403 | content: "\f04a";
404 | }
405 | .fa-play:before {
406 | content: "\f04b";
407 | }
408 | .fa-pause:before {
409 | content: "\f04c";
410 | }
411 | .fa-stop:before {
412 | content: "\f04d";
413 | }
414 | .fa-forward:before {
415 | content: "\f04e";
416 | }
417 | .fa-fast-forward:before {
418 | content: "\f050";
419 | }
420 | .fa-step-forward:before {
421 | content: "\f051";
422 | }
423 | .fa-eject:before {
424 | content: "\f052";
425 | }
426 | .fa-chevron-left:before {
427 | content: "\f053";
428 | }
429 | .fa-chevron-right:before {
430 | content: "\f054";
431 | }
432 | .fa-plus-circle:before {
433 | content: "\f055";
434 | }
435 | .fa-minus-circle:before {
436 | content: "\f056";
437 | }
438 | .fa-times-circle:before {
439 | content: "\f057";
440 | }
441 | .fa-check-circle:before {
442 | content: "\f058";
443 | }
444 | .fa-question-circle:before {
445 | content: "\f059";
446 | }
447 | .fa-info-circle:before {
448 | content: "\f05a";
449 | }
450 | .fa-crosshairs:before {
451 | content: "\f05b";
452 | }
453 | .fa-times-circle-o:before {
454 | content: "\f05c";
455 | }
456 | .fa-check-circle-o:before {
457 | content: "\f05d";
458 | }
459 | .fa-ban:before {
460 | content: "\f05e";
461 | }
462 | .fa-arrow-left:before {
463 | content: "\f060";
464 | }
465 | .fa-arrow-right:before {
466 | content: "\f061";
467 | }
468 | .fa-arrow-up:before {
469 | content: "\f062";
470 | }
471 | .fa-arrow-down:before {
472 | content: "\f063";
473 | }
474 | .fa-mail-forward:before,
475 | .fa-share:before {
476 | content: "\f064";
477 | }
478 | .fa-expand:before {
479 | content: "\f065";
480 | }
481 | .fa-compress:before {
482 | content: "\f066";
483 | }
484 | .fa-plus:before {
485 | content: "\f067";
486 | }
487 | .fa-minus:before {
488 | content: "\f068";
489 | }
490 | .fa-asterisk:before {
491 | content: "\f069";
492 | }
493 | .fa-exclamation-circle:before {
494 | content: "\f06a";
495 | }
496 | .fa-gift:before {
497 | content: "\f06b";
498 | }
499 | .fa-leaf:before {
500 | content: "\f06c";
501 | }
502 | .fa-fire:before {
503 | content: "\f06d";
504 | }
505 | .fa-eye:before {
506 | content: "\f06e";
507 | }
508 | .fa-eye-slash:before {
509 | content: "\f070";
510 | }
511 | .fa-warning:before,
512 | .fa-exclamation-triangle:before {
513 | content: "\f071";
514 | }
515 | .fa-plane:before {
516 | content: "\f072";
517 | }
518 | .fa-calendar:before {
519 | content: "\f073";
520 | }
521 | .fa-random:before {
522 | content: "\f074";
523 | }
524 | .fa-comment:before {
525 | content: "\f075";
526 | }
527 | .fa-magnet:before {
528 | content: "\f076";
529 | }
530 | .fa-chevron-up:before {
531 | content: "\f077";
532 | }
533 | .fa-chevron-down:before {
534 | content: "\f078";
535 | }
536 | .fa-retweet:before {
537 | content: "\f079";
538 | }
539 | .fa-shopping-cart:before {
540 | content: "\f07a";
541 | }
542 | .fa-folder:before {
543 | content: "\f07b";
544 | }
545 | .fa-folder-open:before {
546 | content: "\f07c";
547 | }
548 | .fa-arrows-v:before {
549 | content: "\f07d";
550 | }
551 | .fa-arrows-h:before {
552 | content: "\f07e";
553 | }
554 | .fa-bar-chart-o:before {
555 | content: "\f080";
556 | }
557 | .fa-twitter-square:before {
558 | content: "\f081";
559 | }
560 | .fa-facebook-square:before {
561 | content: "\f082";
562 | }
563 | .fa-camera-retro:before {
564 | content: "\f083";
565 | }
566 | .fa-key:before {
567 | content: "\f084";
568 | }
569 | .fa-gears:before,
570 | .fa-cogs:before {
571 | content: "\f085";
572 | }
573 | .fa-comments:before {
574 | content: "\f086";
575 | }
576 | .fa-thumbs-o-up:before {
577 | content: "\f087";
578 | }
579 | .fa-thumbs-o-down:before {
580 | content: "\f088";
581 | }
582 | .fa-star-half:before {
583 | content: "\f089";
584 | }
585 | .fa-heart-o:before {
586 | content: "\f08a";
587 | }
588 | .fa-sign-out:before {
589 | content: "\f08b";
590 | }
591 | .fa-linkedin-square:before {
592 | content: "\f08c";
593 | }
594 | .fa-thumb-tack:before {
595 | content: "\f08d";
596 | }
597 | .fa-external-link:before {
598 | content: "\f08e";
599 | }
600 | .fa-sign-in:before {
601 | content: "\f090";
602 | }
603 | .fa-trophy:before {
604 | content: "\f091";
605 | }
606 | .fa-github-square:before {
607 | content: "\f092";
608 | }
609 | .fa-upload:before {
610 | content: "\f093";
611 | }
612 | .fa-lemon-o:before {
613 | content: "\f094";
614 | }
615 | .fa-phone:before {
616 | content: "\f095";
617 | }
618 | .fa-square-o:before {
619 | content: "\f096";
620 | }
621 | .fa-bookmark-o:before {
622 | content: "\f097";
623 | }
624 | .fa-phone-square:before {
625 | content: "\f098";
626 | }
627 | .fa-twitter:before {
628 | content: "\f099";
629 | }
630 | .fa-facebook:before {
631 | content: "\f09a";
632 | }
633 | .fa-github:before {
634 | content: "\f09b";
635 | }
636 | .fa-unlock:before {
637 | content: "\f09c";
638 | }
639 | .fa-credit-card:before {
640 | content: "\f09d";
641 | }
642 | .fa-rss:before {
643 | content: "\f09e";
644 | }
645 | .fa-hdd-o:before {
646 | content: "\f0a0";
647 | }
648 | .fa-bullhorn:before {
649 | content: "\f0a1";
650 | }
651 | .fa-bell:before {
652 | content: "\f0f3";
653 | }
654 | .fa-certificate:before {
655 | content: "\f0a3";
656 | }
657 | .fa-hand-o-right:before {
658 | content: "\f0a4";
659 | }
660 | .fa-hand-o-left:before {
661 | content: "\f0a5";
662 | }
663 | .fa-hand-o-up:before {
664 | content: "\f0a6";
665 | }
666 | .fa-hand-o-down:before {
667 | content: "\f0a7";
668 | }
669 | .fa-arrow-circle-left:before {
670 | content: "\f0a8";
671 | }
672 | .fa-arrow-circle-right:before {
673 | content: "\f0a9";
674 | }
675 | .fa-arrow-circle-up:before {
676 | content: "\f0aa";
677 | }
678 | .fa-arrow-circle-down:before {
679 | content: "\f0ab";
680 | }
681 | .fa-globe:before {
682 | content: "\f0ac";
683 | }
684 | .fa-wrench:before {
685 | content: "\f0ad";
686 | }
687 | .fa-tasks:before {
688 | content: "\f0ae";
689 | }
690 | .fa-filter:before {
691 | content: "\f0b0";
692 | }
693 | .fa-briefcase:before {
694 | content: "\f0b1";
695 | }
696 | .fa-arrows-alt:before {
697 | content: "\f0b2";
698 | }
699 | .fa-group:before,
700 | .fa-users:before {
701 | content: "\f0c0";
702 | }
703 | .fa-chain:before,
704 | .fa-link:before {
705 | content: "\f0c1";
706 | }
707 | .fa-cloud:before {
708 | content: "\f0c2";
709 | }
710 | .fa-flask:before {
711 | content: "\f0c3";
712 | }
713 | .fa-cut:before,
714 | .fa-scissors:before {
715 | content: "\f0c4";
716 | }
717 | .fa-copy:before,
718 | .fa-files-o:before {
719 | content: "\f0c5";
720 | }
721 | .fa-paperclip:before {
722 | content: "\f0c6";
723 | }
724 | .fa-save:before,
725 | .fa-floppy-o:before {
726 | content: "\f0c7";
727 | }
728 | .fa-square:before {
729 | content: "\f0c8";
730 | }
731 | .fa-navicon:before,
732 | .fa-reorder:before,
733 | .fa-bars:before {
734 | content: "\f0c9";
735 | }
736 | .fa-list-ul:before {
737 | content: "\f0ca";
738 | }
739 | .fa-list-ol:before {
740 | content: "\f0cb";
741 | }
742 | .fa-strikethrough:before {
743 | content: "\f0cc";
744 | }
745 | .fa-underline:before {
746 | content: "\f0cd";
747 | }
748 | .fa-table:before {
749 | content: "\f0ce";
750 | }
751 | .fa-magic:before {
752 | content: "\f0d0";
753 | }
754 | .fa-truck:before {
755 | content: "\f0d1";
756 | }
757 | .fa-pinterest:before {
758 | content: "\f0d2";
759 | }
760 | .fa-pinterest-square:before {
761 | content: "\f0d3";
762 | }
763 | .fa-google-plus-square:before {
764 | content: "\f0d4";
765 | }
766 | .fa-google-plus:before {
767 | content: "\f0d5";
768 | }
769 | .fa-money:before {
770 | content: "\f0d6";
771 | }
772 | .fa-caret-down:before {
773 | content: "\f0d7";
774 | }
775 | .fa-caret-up:before {
776 | content: "\f0d8";
777 | }
778 | .fa-caret-left:before {
779 | content: "\f0d9";
780 | }
781 | .fa-caret-right:before {
782 | content: "\f0da";
783 | }
784 | .fa-columns:before {
785 | content: "\f0db";
786 | }
787 | .fa-unsorted:before,
788 | .fa-sort:before {
789 | content: "\f0dc";
790 | }
791 | .fa-sort-down:before,
792 | .fa-sort-desc:before {
793 | content: "\f0dd";
794 | }
795 | .fa-sort-up:before,
796 | .fa-sort-asc:before {
797 | content: "\f0de";
798 | }
799 | .fa-envelope:before {
800 | content: "\f0e0";
801 | }
802 | .fa-linkedin:before {
803 | content: "\f0e1";
804 | }
805 | .fa-rotate-left:before,
806 | .fa-undo:before {
807 | content: "\f0e2";
808 | }
809 | .fa-legal:before,
810 | .fa-gavel:before {
811 | content: "\f0e3";
812 | }
813 | .fa-dashboard:before,
814 | .fa-tachometer:before {
815 | content: "\f0e4";
816 | }
817 | .fa-comment-o:before {
818 | content: "\f0e5";
819 | }
820 | .fa-comments-o:before {
821 | content: "\f0e6";
822 | }
823 | .fa-flash:before,
824 | .fa-bolt:before {
825 | content: "\f0e7";
826 | }
827 | .fa-sitemap:before {
828 | content: "\f0e8";
829 | }
830 | .fa-umbrella:before {
831 | content: "\f0e9";
832 | }
833 | .fa-paste:before,
834 | .fa-clipboard:before {
835 | content: "\f0ea";
836 | }
837 | .fa-lightbulb-o:before {
838 | content: "\f0eb";
839 | }
840 | .fa-exchange:before {
841 | content: "\f0ec";
842 | }
843 | .fa-cloud-download:before {
844 | content: "\f0ed";
845 | }
846 | .fa-cloud-upload:before {
847 | content: "\f0ee";
848 | }
849 | .fa-user-md:before {
850 | content: "\f0f0";
851 | }
852 | .fa-stethoscope:before {
853 | content: "\f0f1";
854 | }
855 | .fa-suitcase:before {
856 | content: "\f0f2";
857 | }
858 | .fa-bell-o:before {
859 | content: "\f0a2";
860 | }
861 | .fa-coffee:before {
862 | content: "\f0f4";
863 | }
864 | .fa-cutlery:before {
865 | content: "\f0f5";
866 | }
867 | .fa-file-text-o:before {
868 | content: "\f0f6";
869 | }
870 | .fa-building-o:before {
871 | content: "\f0f7";
872 | }
873 | .fa-hospital-o:before {
874 | content: "\f0f8";
875 | }
876 | .fa-ambulance:before {
877 | content: "\f0f9";
878 | }
879 | .fa-medkit:before {
880 | content: "\f0fa";
881 | }
882 | .fa-fighter-jet:before {
883 | content: "\f0fb";
884 | }
885 | .fa-beer:before {
886 | content: "\f0fc";
887 | }
888 | .fa-h-square:before {
889 | content: "\f0fd";
890 | }
891 | .fa-plus-square:before {
892 | content: "\f0fe";
893 | }
894 | .fa-angle-double-left:before {
895 | content: "\f100";
896 | }
897 | .fa-angle-double-right:before {
898 | content: "\f101";
899 | }
900 | .fa-angle-double-up:before {
901 | content: "\f102";
902 | }
903 | .fa-angle-double-down:before {
904 | content: "\f103";
905 | }
906 | .fa-angle-left:before {
907 | content: "\f104";
908 | }
909 | .fa-angle-right:before {
910 | content: "\f105";
911 | }
912 | .fa-angle-up:before {
913 | content: "\f106";
914 | }
915 | .fa-angle-down:before {
916 | content: "\f107";
917 | }
918 | .fa-desktop:before {
919 | content: "\f108";
920 | }
921 | .fa-laptop:before {
922 | content: "\f109";
923 | }
924 | .fa-tablet:before {
925 | content: "\f10a";
926 | }
927 | .fa-mobile-phone:before,
928 | .fa-mobile:before {
929 | content: "\f10b";
930 | }
931 | .fa-circle-o:before {
932 | content: "\f10c";
933 | }
934 | .fa-quote-left:before {
935 | content: "\f10d";
936 | }
937 | .fa-quote-right:before {
938 | content: "\f10e";
939 | }
940 | .fa-spinner:before {
941 | content: "\f110";
942 | }
943 | .fa-circle:before {
944 | content: "\f111";
945 | }
946 | .fa-mail-reply:before,
947 | .fa-reply:before {
948 | content: "\f112";
949 | }
950 | .fa-github-alt:before {
951 | content: "\f113";
952 | }
953 | .fa-folder-o:before {
954 | content: "\f114";
955 | }
956 | .fa-folder-open-o:before {
957 | content: "\f115";
958 | }
959 | .fa-smile-o:before {
960 | content: "\f118";
961 | }
962 | .fa-frown-o:before {
963 | content: "\f119";
964 | }
965 | .fa-meh-o:before {
966 | content: "\f11a";
967 | }
968 | .fa-gamepad:before {
969 | content: "\f11b";
970 | }
971 | .fa-keyboard-o:before {
972 | content: "\f11c";
973 | }
974 | .fa-flag-o:before {
975 | content: "\f11d";
976 | }
977 | .fa-flag-checkered:before {
978 | content: "\f11e";
979 | }
980 | .fa-terminal:before {
981 | content: "\f120";
982 | }
983 | .fa-code:before {
984 | content: "\f121";
985 | }
986 | .fa-mail-reply-all:before,
987 | .fa-reply-all:before {
988 | content: "\f122";
989 | }
990 | .fa-star-half-empty:before,
991 | .fa-star-half-full:before,
992 | .fa-star-half-o:before {
993 | content: "\f123";
994 | }
995 | .fa-location-arrow:before {
996 | content: "\f124";
997 | }
998 | .fa-crop:before {
999 | content: "\f125";
1000 | }
1001 | .fa-code-fork:before {
1002 | content: "\f126";
1003 | }
1004 | .fa-unlink:before,
1005 | .fa-chain-broken:before {
1006 | content: "\f127";
1007 | }
1008 | .fa-question:before {
1009 | content: "\f128";
1010 | }
1011 | .fa-info:before {
1012 | content: "\f129";
1013 | }
1014 | .fa-exclamation:before {
1015 | content: "\f12a";
1016 | }
1017 | .fa-superscript:before {
1018 | content: "\f12b";
1019 | }
1020 | .fa-subscript:before {
1021 | content: "\f12c";
1022 | }
1023 | .fa-eraser:before {
1024 | content: "\f12d";
1025 | }
1026 | .fa-puzzle-piece:before {
1027 | content: "\f12e";
1028 | }
1029 | .fa-microphone:before {
1030 | content: "\f130";
1031 | }
1032 | .fa-microphone-slash:before {
1033 | content: "\f131";
1034 | }
1035 | .fa-shield:before {
1036 | content: "\f132";
1037 | }
1038 | .fa-calendar-o:before {
1039 | content: "\f133";
1040 | }
1041 | .fa-fire-extinguisher:before {
1042 | content: "\f134";
1043 | }
1044 | .fa-rocket:before {
1045 | content: "\f135";
1046 | }
1047 | .fa-maxcdn:before {
1048 | content: "\f136";
1049 | }
1050 | .fa-chevron-circle-left:before {
1051 | content: "\f137";
1052 | }
1053 | .fa-chevron-circle-right:before {
1054 | content: "\f138";
1055 | }
1056 | .fa-chevron-circle-up:before {
1057 | content: "\f139";
1058 | }
1059 | .fa-chevron-circle-down:before {
1060 | content: "\f13a";
1061 | }
1062 | .fa-html5:before {
1063 | content: "\f13b";
1064 | }
1065 | .fa-css3:before {
1066 | content: "\f13c";
1067 | }
1068 | .fa-anchor:before {
1069 | content: "\f13d";
1070 | }
1071 | .fa-unlock-alt:before {
1072 | content: "\f13e";
1073 | }
1074 | .fa-bullseye:before {
1075 | content: "\f140";
1076 | }
1077 | .fa-ellipsis-h:before {
1078 | content: "\f141";
1079 | }
1080 | .fa-ellipsis-v:before {
1081 | content: "\f142";
1082 | }
1083 | .fa-rss-square:before {
1084 | content: "\f143";
1085 | }
1086 | .fa-play-circle:before {
1087 | content: "\f144";
1088 | }
1089 | .fa-ticket:before {
1090 | content: "\f145";
1091 | }
1092 | .fa-minus-square:before {
1093 | content: "\f146";
1094 | }
1095 | .fa-minus-square-o:before {
1096 | content: "\f147";
1097 | }
1098 | .fa-level-up:before {
1099 | content: "\f148";
1100 | }
1101 | .fa-level-down:before {
1102 | content: "\f149";
1103 | }
1104 | .fa-check-square:before {
1105 | content: "\f14a";
1106 | }
1107 | .fa-pencil-square:before {
1108 | content: "\f14b";
1109 | }
1110 | .fa-external-link-square:before {
1111 | content: "\f14c";
1112 | }
1113 | .fa-share-square:before {
1114 | content: "\f14d";
1115 | }
1116 | .fa-compass:before {
1117 | content: "\f14e";
1118 | }
1119 | .fa-toggle-down:before,
1120 | .fa-caret-square-o-down:before {
1121 | content: "\f150";
1122 | }
1123 | .fa-toggle-up:before,
1124 | .fa-caret-square-o-up:before {
1125 | content: "\f151";
1126 | }
1127 | .fa-toggle-right:before,
1128 | .fa-caret-square-o-right:before {
1129 | content: "\f152";
1130 | }
1131 | .fa-euro:before,
1132 | .fa-eur:before {
1133 | content: "\f153";
1134 | }
1135 | .fa-gbp:before {
1136 | content: "\f154";
1137 | }
1138 | .fa-dollar:before,
1139 | .fa-usd:before {
1140 | content: "\f155";
1141 | }
1142 | .fa-rupee:before,
1143 | .fa-inr:before {
1144 | content: "\f156";
1145 | }
1146 | .fa-cny:before,
1147 | .fa-rmb:before,
1148 | .fa-yen:before,
1149 | .fa-jpy:before {
1150 | content: "\f157";
1151 | }
1152 | .fa-ruble:before,
1153 | .fa-rouble:before,
1154 | .fa-rub:before {
1155 | content: "\f158";
1156 | }
1157 | .fa-won:before,
1158 | .fa-krw:before {
1159 | content: "\f159";
1160 | }
1161 | .fa-bitcoin:before,
1162 | .fa-btc:before {
1163 | content: "\f15a";
1164 | }
1165 | .fa-file:before {
1166 | content: "\f15b";
1167 | }
1168 | .fa-file-text:before {
1169 | content: "\f15c";
1170 | }
1171 | .fa-sort-alpha-asc:before {
1172 | content: "\f15d";
1173 | }
1174 | .fa-sort-alpha-desc:before {
1175 | content: "\f15e";
1176 | }
1177 | .fa-sort-amount-asc:before {
1178 | content: "\f160";
1179 | }
1180 | .fa-sort-amount-desc:before {
1181 | content: "\f161";
1182 | }
1183 | .fa-sort-numeric-asc:before {
1184 | content: "\f162";
1185 | }
1186 | .fa-sort-numeric-desc:before {
1187 | content: "\f163";
1188 | }
1189 | .fa-thumbs-up:before {
1190 | content: "\f164";
1191 | }
1192 | .fa-thumbs-down:before {
1193 | content: "\f165";
1194 | }
1195 | .fa-youtube-square:before {
1196 | content: "\f166";
1197 | }
1198 | .fa-youtube:before {
1199 | content: "\f167";
1200 | }
1201 | .fa-xing:before {
1202 | content: "\f168";
1203 | }
1204 | .fa-xing-square:before {
1205 | content: "\f169";
1206 | }
1207 | .fa-youtube-play:before {
1208 | content: "\f16a";
1209 | }
1210 | .fa-dropbox:before {
1211 | content: "\f16b";
1212 | }
1213 | .fa-stack-overflow:before {
1214 | content: "\f16c";
1215 | }
1216 | .fa-instagram:before {
1217 | content: "\f16d";
1218 | }
1219 | .fa-flickr:before {
1220 | content: "\f16e";
1221 | }
1222 | .fa-adn:before {
1223 | content: "\f170";
1224 | }
1225 | .fa-bitbucket:before {
1226 | content: "\f171";
1227 | }
1228 | .fa-bitbucket-square:before {
1229 | content: "\f172";
1230 | }
1231 | .fa-tumblr:before {
1232 | content: "\f173";
1233 | }
1234 | .fa-tumblr-square:before {
1235 | content: "\f174";
1236 | }
1237 | .fa-long-arrow-down:before {
1238 | content: "\f175";
1239 | }
1240 | .fa-long-arrow-up:before {
1241 | content: "\f176";
1242 | }
1243 | .fa-long-arrow-left:before {
1244 | content: "\f177";
1245 | }
1246 | .fa-long-arrow-right:before {
1247 | content: "\f178";
1248 | }
1249 | .fa-apple:before {
1250 | content: "\f179";
1251 | }
1252 | .fa-windows:before {
1253 | content: "\f17a";
1254 | }
1255 | .fa-android:before {
1256 | content: "\f17b";
1257 | }
1258 | .fa-linux:before {
1259 | content: "\f17c";
1260 | }
1261 | .fa-dribbble:before {
1262 | content: "\f17d";
1263 | }
1264 | .fa-skype:before {
1265 | content: "\f17e";
1266 | }
1267 | .fa-foursquare:before {
1268 | content: "\f180";
1269 | }
1270 | .fa-trello:before {
1271 | content: "\f181";
1272 | }
1273 | .fa-female:before {
1274 | content: "\f182";
1275 | }
1276 | .fa-male:before {
1277 | content: "\f183";
1278 | }
1279 | .fa-gittip:before {
1280 | content: "\f184";
1281 | }
1282 | .fa-sun-o:before {
1283 | content: "\f185";
1284 | }
1285 | .fa-moon-o:before {
1286 | content: "\f186";
1287 | }
1288 | .fa-archive:before {
1289 | content: "\f187";
1290 | }
1291 | .fa-bug:before {
1292 | content: "\f188";
1293 | }
1294 | .fa-vk:before {
1295 | content: "\f189";
1296 | }
1297 | .fa-weibo:before {
1298 | content: "\f18a";
1299 | }
1300 | .fa-renren:before {
1301 | content: "\f18b";
1302 | }
1303 | .fa-pagelines:before {
1304 | content: "\f18c";
1305 | }
1306 | .fa-stack-exchange:before {
1307 | content: "\f18d";
1308 | }
1309 | .fa-arrow-circle-o-right:before {
1310 | content: "\f18e";
1311 | }
1312 | .fa-arrow-circle-o-left:before {
1313 | content: "\f190";
1314 | }
1315 | .fa-toggle-left:before,
1316 | .fa-caret-square-o-left:before {
1317 | content: "\f191";
1318 | }
1319 | .fa-dot-circle-o:before {
1320 | content: "\f192";
1321 | }
1322 | .fa-wheelchair:before {
1323 | content: "\f193";
1324 | }
1325 | .fa-vimeo-square:before {
1326 | content: "\f194";
1327 | }
1328 | .fa-turkish-lira:before,
1329 | .fa-try:before {
1330 | content: "\f195";
1331 | }
1332 | .fa-plus-square-o:before {
1333 | content: "\f196";
1334 | }
1335 | .fa-space-shuttle:before {
1336 | content: "\f197";
1337 | }
1338 | .fa-slack:before {
1339 | content: "\f198";
1340 | }
1341 | .fa-envelope-square:before {
1342 | content: "\f199";
1343 | }
1344 | .fa-wordpress:before {
1345 | content: "\f19a";
1346 | }
1347 | .fa-openid:before {
1348 | content: "\f19b";
1349 | }
1350 | .fa-institution:before,
1351 | .fa-bank:before,
1352 | .fa-university:before {
1353 | content: "\f19c";
1354 | }
1355 | .fa-mortar-board:before,
1356 | .fa-graduation-cap:before {
1357 | content: "\f19d";
1358 | }
1359 | .fa-yahoo:before {
1360 | content: "\f19e";
1361 | }
1362 | .fa-google:before {
1363 | content: "\f1a0";
1364 | }
1365 | .fa-reddit:before {
1366 | content: "\f1a1";
1367 | }
1368 | .fa-reddit-square:before {
1369 | content: "\f1a2";
1370 | }
1371 | .fa-stumbleupon-circle:before {
1372 | content: "\f1a3";
1373 | }
1374 | .fa-stumbleupon:before {
1375 | content: "\f1a4";
1376 | }
1377 | .fa-delicious:before {
1378 | content: "\f1a5";
1379 | }
1380 | .fa-digg:before {
1381 | content: "\f1a6";
1382 | }
1383 | .fa-pied-piper-square:before,
1384 | .fa-pied-piper:before {
1385 | content: "\f1a7";
1386 | }
1387 | .fa-pied-piper-alt:before {
1388 | content: "\f1a8";
1389 | }
1390 | .fa-drupal:before {
1391 | content: "\f1a9";
1392 | }
1393 | .fa-joomla:before {
1394 | content: "\f1aa";
1395 | }
1396 | .fa-language:before {
1397 | content: "\f1ab";
1398 | }
1399 | .fa-fax:before {
1400 | content: "\f1ac";
1401 | }
1402 | .fa-building:before {
1403 | content: "\f1ad";
1404 | }
1405 | .fa-child:before {
1406 | content: "\f1ae";
1407 | }
1408 | .fa-paw:before {
1409 | content: "\f1b0";
1410 | }
1411 | .fa-spoon:before {
1412 | content: "\f1b1";
1413 | }
1414 | .fa-cube:before {
1415 | content: "\f1b2";
1416 | }
1417 | .fa-cubes:before {
1418 | content: "\f1b3";
1419 | }
1420 | .fa-behance:before {
1421 | content: "\f1b4";
1422 | }
1423 | .fa-behance-square:before {
1424 | content: "\f1b5";
1425 | }
1426 | .fa-steam:before {
1427 | content: "\f1b6";
1428 | }
1429 | .fa-steam-square:before {
1430 | content: "\f1b7";
1431 | }
1432 | .fa-recycle:before {
1433 | content: "\f1b8";
1434 | }
1435 | .fa-automobile:before,
1436 | .fa-car:before {
1437 | content: "\f1b9";
1438 | }
1439 | .fa-cab:before,
1440 | .fa-taxi:before {
1441 | content: "\f1ba";
1442 | }
1443 | .fa-tree:before {
1444 | content: "\f1bb";
1445 | }
1446 | .fa-spotify:before {
1447 | content: "\f1bc";
1448 | }
1449 | .fa-deviantart:before {
1450 | content: "\f1bd";
1451 | }
1452 | .fa-soundcloud:before {
1453 | content: "\f1be";
1454 | }
1455 | .fa-database:before {
1456 | content: "\f1c0";
1457 | }
1458 | .fa-file-pdf-o:before {
1459 | content: "\f1c1";
1460 | }
1461 | .fa-file-word-o:before {
1462 | content: "\f1c2";
1463 | }
1464 | .fa-file-excel-o:before {
1465 | content: "\f1c3";
1466 | }
1467 | .fa-file-powerpoint-o:before {
1468 | content: "\f1c4";
1469 | }
1470 | .fa-file-photo-o:before,
1471 | .fa-file-picture-o:before,
1472 | .fa-file-image-o:before {
1473 | content: "\f1c5";
1474 | }
1475 | .fa-file-zip-o:before,
1476 | .fa-file-archive-o:before {
1477 | content: "\f1c6";
1478 | }
1479 | .fa-file-sound-o:before,
1480 | .fa-file-audio-o:before {
1481 | content: "\f1c7";
1482 | }
1483 | .fa-file-movie-o:before,
1484 | .fa-file-video-o:before {
1485 | content: "\f1c8";
1486 | }
1487 | .fa-file-code-o:before {
1488 | content: "\f1c9";
1489 | }
1490 | .fa-vine:before {
1491 | content: "\f1ca";
1492 | }
1493 | .fa-codepen:before {
1494 | content: "\f1cb";
1495 | }
1496 | .fa-jsfiddle:before {
1497 | content: "\f1cc";
1498 | }
1499 | .fa-life-bouy:before,
1500 | .fa-life-saver:before,
1501 | .fa-support:before,
1502 | .fa-life-ring:before {
1503 | content: "\f1cd";
1504 | }
1505 | .fa-circle-o-notch:before {
1506 | content: "\f1ce";
1507 | }
1508 | .fa-ra:before,
1509 | .fa-rebel:before {
1510 | content: "\f1d0";
1511 | }
1512 | .fa-ge:before,
1513 | .fa-empire:before {
1514 | content: "\f1d1";
1515 | }
1516 | .fa-git-square:before {
1517 | content: "\f1d2";
1518 | }
1519 | .fa-git:before {
1520 | content: "\f1d3";
1521 | }
1522 | .fa-hacker-news:before {
1523 | content: "\f1d4";
1524 | }
1525 | .fa-tencent-weibo:before {
1526 | content: "\f1d5";
1527 | }
1528 | .fa-qq:before {
1529 | content: "\f1d6";
1530 | }
1531 | .fa-wechat:before,
1532 | .fa-weixin:before {
1533 | content: "\f1d7";
1534 | }
1535 | .fa-send:before,
1536 | .fa-paper-plane:before {
1537 | content: "\f1d8";
1538 | }
1539 | .fa-send-o:before,
1540 | .fa-paper-plane-o:before {
1541 | content: "\f1d9";
1542 | }
1543 | .fa-history:before {
1544 | content: "\f1da";
1545 | }
1546 | .fa-circle-thin:before {
1547 | content: "\f1db";
1548 | }
1549 | .fa-header:before {
1550 | content: "\f1dc";
1551 | }
1552 | .fa-paragraph:before {
1553 | content: "\f1dd";
1554 | }
1555 | .fa-sliders:before {
1556 | content: "\f1de";
1557 | }
1558 | .fa-share-alt:before {
1559 | content: "\f1e0";
1560 | }
1561 | .fa-share-alt-square:before {
1562 | content: "\f1e1";
1563 | }
1564 | .fa-bomb:before {
1565 | content: "\f1e2";
1566 | }
1567 |
--------------------------------------------------------------------------------
/chrome/js/script.js:
--------------------------------------------------------------------------------
1 | (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o';
44 | });
45 | }
46 | }, {
47 | key: 'clear',
48 | value: function clear() {
49 | this.container.innerHTML = '';
50 | }
51 | }, {
52 | key: '_CSSSteal',
53 | value: function _CSSSteal(CSSSteal, selectors) {
54 | var elements = selectors.map(function (sel) {
55 | return document.querySelector(sel);
56 | });
57 |
58 | return CSSSteal.apply(null, elements).toCSSText();
59 | }
60 | }]);
61 |
62 | return CSSPreview;
63 | })();
64 |
65 | exports['default'] = CSSPreview;
66 | module.exports = exports['default'];
67 |
68 | },{"../../../src/":8,"./DOMhelpers":2,"./execute":5}],2:[function(require,module,exports){
69 | 'use strict';
70 |
71 | Object.defineProperty(exports, '__esModule', {
72 | value: true
73 | });
74 | exports['default'] = {
75 | $: function $(sel) {
76 | return document.querySelector(sel);
77 | },
78 | $$: function $$(sel) {
79 | return document.querySelectorAll(sel);
80 | }
81 | };
82 | module.exports = exports['default'];
83 |
84 | },{}],3:[function(require,module,exports){
85 | 'use strict';
86 |
87 | Object.defineProperty(exports, '__esModule', {
88 | value: true
89 | });
90 |
91 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
92 |
93 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
94 |
95 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
96 |
97 | var _DOMhelpers = require('./DOMhelpers');
98 |
99 | var _execute = require('./execute');
100 |
101 | var _execute2 = _interopRequireDefault(_execute);
102 |
103 | var Links = (function () {
104 | function Links(ops) {
105 | _classCallCheck(this, Links);
106 |
107 | this.ids = 0;
108 | this.elements = [];
109 | this.container = (0, _DOMhelpers.$)('.js-items-selected .items-holder');
110 | this.onLinkSelected = ops.onLinkSelected;
111 | this.onClear = ops.onClear;
112 | this.steal = (0, _DOMhelpers.$)('.js-steal');
113 | this.clear = (0, _DOMhelpers.$)('.js-clear');
114 |
115 | this.container.addEventListener('click', this._handleLink.bind(this));
116 | this.container.addEventListener('mouseover', this._handleMouseOver.bind(this));
117 | this.steal.addEventListener('click', this._handleGetCSS.bind(this));
118 | this.clear.addEventListener('click', this._handleClear.bind(this));
119 | }
120 |
121 | _createClass(Links, [{
122 | key: 'addLink',
123 | value: function addLink(_ref) {
124 | var label = _ref.label;
125 | var selector = _ref.selector;
126 |
127 | if (this._isThereSuchElement(selector)) return;
128 | this.elements.push({
129 | label: label,
130 | selector: selector,
131 | id: this._getId(),
132 | selected: false
133 | });
134 | this.clear.disabled = false;
135 | return this._render();
136 | }
137 | }, {
138 | key: '_isThereSuchElement',
139 | value: function _isThereSuchElement(selector) {
140 | return !!this._getRecordBySelector(selector);
141 | }
142 | }, {
143 | key: '_getId',
144 | value: function _getId() {
145 | return 'item' + ++this.ids;
146 | }
147 | }, {
148 | key: '_render',
149 | value: function _render() {
150 | var html = Array.prototype.slice.call(this.elements).reverse().map(function (el) {
151 | var html = '';
152 | var selected = el.selected ? ' class="selected"' : '';
153 |
154 | html += '';
155 | html += ' <';
156 | html += el.label;
157 | html += '>';
158 | return html;
159 | }).join('');
160 |
161 | this.container.innerHTML = html === '' ? ' ' : html;
162 |
163 | return this;
164 | }
165 | }, {
166 | key: '_getRecordByElement',
167 | value: function _getRecordByElement(el) {
168 | var id = el.target ? el.target.getAttribute('data-index') : false;
169 | var filtered = this.elements.filter(function (record) {
170 | return record.id === id;
171 | });
172 |
173 | return filtered.length > 0 ? filtered[0] : false;
174 | }
175 | }, {
176 | key: '_getRecordBySelector',
177 | value: function _getRecordBySelector(selector) {
178 | var filtered = this.elements.filter(function (record) {
179 | return record.selector === selector;
180 | });
181 |
182 | return filtered.length > 0 ? filtered[0] : false;
183 | }
184 | }, {
185 | key: '_handleLink',
186 | value: function _handleLink(el) {
187 | var record = this._getRecordByElement(el);
188 |
189 | if (record) {
190 | record.selected = !record.selected;
191 | record.selected ? el.target.classList.add('selected') : el.target.classList.remove('selected');
192 | this.steal.disabled = !(this._selected().length > 0);
193 | }
194 | }
195 | }, {
196 | key: '_selected',
197 | value: function _selected() {
198 | return this.elements.filter(function (el) {
199 | return el.selected;
200 | });
201 | }
202 | }, {
203 | key: '_handleGetCSS',
204 | value: function _handleGetCSS() {
205 | this.onLinkSelected(this._selected());
206 | }
207 | }, {
208 | key: '_handleMouseOver',
209 | value: function _handleMouseOver(el) {
210 | var record = this._getRecordByElement(el);
211 |
212 | if (record) {
213 | (0, _execute2['default'])(this._inspect, ['"' + record.selector + '"']);
214 | }
215 | }
216 | }, {
217 | key: '_handleClear',
218 | value: function _handleClear() {
219 | this.elements = [];
220 | this.clear.disabled = true;
221 | this.steal.disabled = true;
222 | this._render();
223 | this.onClear();
224 | }
225 | }, {
226 | key: '_inspect',
227 | value: function _inspect(selector) {
228 | inspect(document.querySelector(selector));
229 | }
230 | }]);
231 |
232 | return Links;
233 | })();
234 |
235 | exports['default'] = Links;
236 | ;
237 | module.exports = exports['default'];
238 |
239 | },{"./DOMhelpers":2,"./execute":5}],4:[function(require,module,exports){
240 | 'use strict';
241 |
242 | Object.defineProperty(exports, '__esModule', {
243 | value: true
244 | });
245 |
246 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
247 |
248 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
249 |
250 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
251 |
252 | var _vendorDompath = require('./vendor/dompath');
253 |
254 | var _vendorDompath2 = _interopRequireDefault(_vendorDompath);
255 |
256 | var _execute = require('./execute');
257 |
258 | var _execute2 = _interopRequireDefault(_execute);
259 |
260 | var Page = (function () {
261 | function Page(_ref) {
262 | var _ref$onElementSelected = _ref.onElementSelected;
263 | var onElementSelected = _ref$onElementSelected === undefined ? null : _ref$onElementSelected;
264 |
265 | _classCallCheck(this, Page);
266 |
267 | this.selected = 1;
268 | this.onElementSelected = onElementSelected;
269 | var handleElementSelected = this.handleElementSelected.bind(this);
270 |
271 | chrome.devtools.panels.elements.onSelectionChanged.addListener(handleElementSelected);
272 | }
273 |
274 | _createClass(Page, [{
275 | key: 'handleElementSelected',
276 | value: function handleElementSelected() {
277 | var _this = this;
278 |
279 | (0, _execute2['default'])(this._getLastlyInspectedElement, [_vendorDompath2['default']], function (el) {
280 | if (el) _this.onElementSelected(el);
281 | });
282 | }
283 |
284 | // eval functions
285 | }, {
286 | key: '_getLastlyInspectedElement',
287 | value: function _getLastlyInspectedElement(dompath) {
288 | var el = $0;
289 | var nodeName = el.nodeName.toString().toLowerCase();
290 | var classes = el.getAttribute('class');
291 |
292 | return {
293 | label: nodeName + (classes ? ' class="' + classes + '"' : ''),
294 | selector: dompath($0).toCSS()
295 | };
296 | }
297 | }]);
298 |
299 | return Page;
300 | })();
301 |
302 | exports['default'] = Page;
303 | ;
304 | module.exports = exports['default'];
305 |
306 | },{"./execute":5,"./vendor/dompath":7}],5:[function(require,module,exports){
307 | 'use strict';
308 |
309 | Object.defineProperty(exports, '__esModule', {
310 | value: true
311 | });
312 | exports['default'] = execute;
313 |
314 | function execute(fn) {
315 | var args = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];
316 | var callback = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];
317 |
318 | var code = '(' + fn.toString() + ').apply(this, [' + args.toString() + ']);';
319 |
320 | chrome.devtools.inspectedWindow.eval(code, callback ? callback.bind(this) : function () {});
321 | }
322 |
323 | ;
324 | module.exports = exports['default'];
325 |
326 | },{}],6:[function(require,module,exports){
327 | 'use strict';
328 |
329 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
330 |
331 | var _Links = require('./Links');
332 |
333 | var _Links2 = _interopRequireDefault(_Links);
334 |
335 | var _CSSPreview = require('./CSSPreview');
336 |
337 | var _CSSPreview2 = _interopRequireDefault(_CSSPreview);
338 |
339 | var _Page = require('./Page');
340 |
341 | var _Page2 = _interopRequireDefault(_Page);
342 |
343 | var _DOMhelpers = require('./DOMhelpers');
344 |
345 | var cssPreview = new _CSSPreview2['default']();
346 | var links = new _Links2['default']({
347 | onLinkSelected: cssPreview.render.bind(cssPreview),
348 | onClear: cssPreview.clear.bind(cssPreview)
349 | });
350 | var page = new _Page2['default']({
351 | onElementSelected: links.addLink.bind(links)
352 | });
353 |
354 | },{"./CSSPreview":1,"./DOMhelpers":2,"./Links":3,"./Page":4}],7:[function(require,module,exports){
355 | // credits: https://github.com/jhartikainen/dompath
356 |
357 | 'use strict';
358 |
359 | Object.defineProperty(exports, '__esModule', {
360 | value: true
361 | });
362 |
363 | exports['default'] = function (el, parent) {
364 |
365 | var getSelector = function getSelector(node) {
366 | if (node.id !== '') {
367 | return '#' + node.id;
368 | }
369 |
370 | var root = '';
371 | if (node.parent) {
372 | root = getSelector(node.parent) + ' > ';
373 | }
374 |
375 | return root + node.name + ':nth-child(' + (node.index + 1) + ')';
376 | };
377 |
378 | var DomPath = function DomPath(node) {
379 | this.node = node;
380 | };
381 | DomPath.prototype = {
382 | toCSS: function toCSS() {
383 | return getSelector(this.node);
384 | },
385 |
386 | select: function select() {
387 | if (this.node.id !== '') {
388 | return document.getElementById(this.node.id);
389 | }
390 |
391 | return document.querySelector(this.toCSS());
392 | }
393 | };
394 |
395 | var pathNode = function pathNode(el, root) {
396 | var node = {
397 | id: el.id,
398 | name: el.nodeName.toLowerCase(),
399 | index: childIndex(el),
400 | parent: null
401 | };
402 |
403 | if (el.parentElement && el.parentElement !== root) {
404 | node.parent = pathNode(el.parentElement, root);
405 | }
406 |
407 | return node;
408 | };
409 |
410 | var childIndex = function childIndex(el) {
411 | var idx = 0;
412 | while (el = el.previousSibling) {
413 | if (el.nodeType == 1) {
414 | idx++;
415 | }
416 | }
417 |
418 | return idx;
419 | };
420 |
421 | parent = parent || document.body;
422 | if (el.nodeName) {
423 | return new DomPath(pathNode(el, parent));
424 | }
425 |
426 | return new DomPath(el.node);
427 | };
428 |
429 | ;
430 | module.exports = exports['default'];
431 |
432 | },{}],8:[function(require,module,exports){
433 | 'use strict';
434 |
435 | (function () {
436 |
437 | var CSSSteal = function CSSSteal() {
438 | var api = {},
439 | html = null,
440 | styles = [],
441 | indent = ' ',
442 | elements = false,
443 | args = arguments;
444 |
445 | var requirements = function requirements() {
446 | if (args.length === 0) {
447 | throw new Error('CSSSteal expects at least one argument (DOM element)');
448 | }
449 | if (!document.styleSheets) {
450 | throw new Error('CSSSteal: document.styleSheets is not available in this browser.');
451 | }
452 | elements = toArray(args, true);
453 | };
454 | var getHTMLAsString = function getHTMLAsString() {
455 | return elements.outerHTML;
456 | };
457 | var toArray = function toArray(obj, ignoreFalsy) {
458 | var arr = [],
459 | i;
460 |
461 | for (i = 0; i < obj.length; i++) {
462 | if (!ignoreFalsy || obj[i]) {
463 | arr[i] = obj[i];
464 | }
465 | }
466 | return arr;
467 | };
468 | var getRules = function getRules(a) {
469 | var sheets = document.styleSheets,
470 | result = [],
471 | selectorText;
472 |
473 | a.matches = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector;
474 | for (var i in sheets) {
475 | var rules = sheets[i].rules || sheets[i].cssRules;
476 | for (var r in rules) {
477 | selectorText = rules[r].selectorText ? rules[r].selectorText.split(' ').map(function (piece) {
478 | return piece ? piece.split(/(:|::)/)[0] : false;
479 | }).join(' ') : false;
480 | try {
481 | if (a.matches(selectorText)) {
482 | result.push(rules[r]);
483 | }
484 | } catch (e) {
485 | // can not run matches on this selector
486 | }
487 | }
488 | }
489 | return result;
490 | };
491 | var readStyles = function readStyles(els) {
492 | return els.reduce(function (s, el) {
493 | s.push(getRules(el));
494 | s = s.concat(readStyles(toArray(el.children)));
495 | return s;
496 | }, []);
497 | };
498 | var flattenRules = function flattenRules(s) {
499 | var filterBySelector = function filterBySelector(selector, result) {
500 | return result.filter(function (item) {
501 | return item.selector === selector;
502 | });
503 | };
504 | var getItem = function getItem(selector, result) {
505 | var arr = filterBySelector(selector, result);
506 | return arr.length > 0 ? arr[0] : {
507 | selector: selector,
508 | styles: {}
509 | };
510 | };
511 | var pushItem = function pushItem(item, result) {
512 | var arr = filterBySelector(item.selector, result);
513 | if (arr.length === 0) result.push(item);
514 | };
515 | var all = [];
516 | s.forEach(function (rules) {
517 | rules.forEach(function (rule) {
518 | var item = getItem(rule.selectorText, all);
519 | for (var i = 0; i < rule.style.length; i++) {
520 | var property = rule.style[i];
521 | item.styles[property] = rule.style.getPropertyValue(property);
522 | }
523 | pushItem(item, all);
524 | });
525 | });
526 | return all;
527 | };
528 |
529 | requirements();
530 |
531 | html = getHTMLAsString();
532 | styles = flattenRules(readStyles(elements));
533 |
534 | api.toCSSText = function () {
535 | return styles.reduce(function (text, item) {
536 | text += item.selector + ' {\n';
537 | text += Object.keys(item.styles).reduce(function (lines, prop) {
538 | lines.push(indent + prop + ': ' + item.styles[prop] + ';');
539 | return lines;
540 | }, []).join('\n');
541 | text += '\n}\n';
542 | return text;
543 | }, '');
544 | };
545 | api.toJS = function () {
546 | return styles;
547 | };
548 |
549 | return api;
550 | };
551 |
552 | var root = this;
553 | if (typeof exports !== 'undefined') {
554 | if (typeof module !== 'undefined' && module.exports) {
555 | exports = module.exports = CSSSteal;
556 | }
557 | exports.CSSSteal = CSSSteal;
558 | } else {
559 | root.CSSSteal = CSSSteal;
560 | }
561 | }).call(undefined);
562 |
563 | },{}]},{},[6])
564 | //# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMva3Jhc2ltaXIvV29yay9LcmFzaW1pci9jc3Mtc3RlYWwvY2hyb21lL2pzL3NyYy9DU1NQcmV2aWV3LmpzIiwiL1VzZXJzL2tyYXNpbWlyL1dvcmsvS3Jhc2ltaXIvY3NzLXN0ZWFsL2Nocm9tZS9qcy9zcmMvRE9NaGVscGVycy5qcyIsIi9Vc2Vycy9rcmFzaW1pci9Xb3JrL0tyYXNpbWlyL2Nzcy1zdGVhbC9jaHJvbWUvanMvc3JjL0xpbmtzLmpzIiwiL1VzZXJzL2tyYXNpbWlyL1dvcmsvS3Jhc2ltaXIvY3NzLXN0ZWFsL2Nocm9tZS9qcy9zcmMvUGFnZS5qcyIsIi9Vc2Vycy9rcmFzaW1pci9Xb3JrL0tyYXNpbWlyL2Nzcy1zdGVhbC9jaHJvbWUvanMvc3JjL2V4ZWN1dGUuanMiLCIvVXNlcnMva3Jhc2ltaXIvV29yay9LcmFzaW1pci9jc3Mtc3RlYWwvY2hyb21lL2pzL3NyYy9pbmRleC5qcyIsIi9Vc2Vycy9rcmFzaW1pci9Xb3JrL0tyYXNpbWlyL2Nzcy1zdGVhbC9jaHJvbWUvanMvc3JjL3ZlbmRvci9kb21wYXRoLmpzIiwiL1VzZXJzL2tyYXNpbWlyL1dvcmsvS3Jhc2ltaXIvY3NzLXN0ZWFsL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7O21CQUVRLGVBQWU7Ozs7dUJBQ2hCLFdBQVc7Ozs7MEJBQ2IsY0FBYzs7SUFFWCxVQUFVO0FBQ2xCLFdBRFEsVUFBVSxHQUNmOzBCQURLLFVBQVU7O0FBRTNCLFFBQUksQ0FBQyxTQUFTLEdBQUcsbUJBQUUsZ0JBQWdCLENBQUMsQ0FBQztHQUN0Qzs7ZUFIa0IsVUFBVTs7V0FJdkIsZ0JBQUMsR0FBRyxFQUFFOzs7QUFDVixVQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQUEsRUFBRTtl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QUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztLQUNyQztBQUNELFdBQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0dBQzdCLE1BQU07QUFDTCxRQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztHQUMxQjtDQUNBLENBQUEsQ0FBRSxJQUFJLFdBQU0sQ0FBQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDU1NTdGVhbCBmcm9tICcuLi8uLi8uLi9zcmMvJztcbmltcG9ydCBleGVjdXRlIGZyb20gJy4vZXhlY3V0ZSc7XG5pbXBvcnQgeyAkIH0gZnJvbSAnLi9ET01oZWxwZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUHJldmlldyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gJCgnLmpzLWNzcy1ob2xkZXInKTtcbiAgfVxuICByZW5kZXIoZWxzKSB7XG4gICAgdmFyIHNlbGVjdG9ycyA9IGVscy5tYXAoZWwgPT4gZWwuc2VsZWN0b3IpO1xuXG4gICAgZXhlY3V0ZShcbiAgICAgIHRoaXMuX0NTU1N0ZWFsLFxuICAgICAgW0NTU1N0ZWFsLCAnWycgKyBzZWxlY3RvcnMubWFwKHMgPT4gJ1wiJyArIHMgKyAnXCInKS5qb2luKCcsJykgKyAnXSddLFxuICAgICAgY3NzID0+IHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuaW5uZXJIVE1MID0gJzxwcmU+JyArIGNzcyArICc8L3ByZT4nO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gIH1cbiAgX0NTU1N0ZWFsKENTU1N0ZWFsLCBzZWxlY3RvcnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBzZWxlY3RvcnMubWFwKHNlbCA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbCkpO1xuICAgIFxuICAgIHJldHVybiBDU1NTdGVhbC5hcHBseShudWxsLCBlbGVtZW50cykudG9DU1NUZXh0KCk7XG4gIH1cbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgJDogc2VsID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsKSxcbiAgJCQ6IHNlbCA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbClcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ICQgfSBmcm9tICcuL0RPTWhlbHBlcnMnO1xuaW1wb3J0IGV4ZWN1dGUgZnJvbSAnLi9leGVjdXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua3Mge1xuICBjb25zdHJ1Y3RvcihvcHMpIHtcbiAgICB0aGlzLmlkcyA9IDA7XG4gICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gJCgnLmpzLWl0ZW1zLXNlbGVjdGVkIC5pdGVtcy1ob2xkZXInKTtcbiAgICB0aGlzLm9uTGlua1NlbGVjdGVkID0gb3BzLm9uTGlua1NlbGVjdGVkO1xuICAgIHRoaXMub25DbGVhciA9IG9wcy5vbkNsZWFyO1xuICAgIHRoaXMuc3RlYWwgPSAkKCcuanMtc3RlYWwnKTtcbiAgICB0aGlzLmNsZWFyID0gJCgnLmpzLWNsZWFyJyk7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2hhbmRsZUxpbmsuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5faGFuZGxlTW91c2VPdmVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuc3RlYWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVHZXRDU1MuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jbGVhci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2hhbmRsZUNsZWFyLmJpbmQodGhpcykpO1xuICB9XG4gIGFkZExpbmsoeyBsYWJlbCwgc2VsZWN0b3IgfSkge1xuICAgIGlmICh0aGlzLl9pc1RoZXJlU3VjaEVsZW1lbnQoc2VsZWN0b3IpKSByZXR1cm47XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKHtcbiAgICAgIGxhYmVsLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBpZDogdGhpcy5fZ2V0SWQoKSxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuY2xlYXIuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyKCk7XG4gIH1cbiAgX2lzVGhlcmVTdWNoRWxlbWVudChzZWxlY3Rvcikge1xuICAgIHJldHVybiAhIXRoaXMuX2dldFJlY29yZEJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9XG4gIF9nZXRJZCgpIHtcbiAgICByZXR1cm4gJ2l0ZW0nICsgKCsrdGhpcy5pZHMpO1xuICB9XG4gIF9yZW5kZXIoKSB7XG4gICAgdmFyIGh0bWwgPSBcbiAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmVsZW1lbnRzKVxuICAgIC5yZXZlcnNlKClcbiAgICAubWFwKChlbCkgPT4ge1xuICAgICAgdmFyIGh0bWwgPSAnJztcbiAgICAgIHZhciBzZWxlY3RlZCA9IGVsLnNlbGVjdGVkID8gJyBjbGFzcz1cInNlbGVjdGVkXCInIDogJyc7XG5cbiAgICAgIGh0bWwgKz0gJzxhIGhyZWY9XCIjXCIgZGF0YS1pbmRleD1cIicgKyBlbC5pZCArICdcIicgKyBzZWxlY3RlZCArICc+JztcbiAgICAgIGh0bWwgKz0gJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2stc3F1YXJlLW9cIj48L2k+ICZsdDsnO1xuICAgICAgaHRtbCArPSBlbC5sYWJlbDtcbiAgICAgIGh0bWwgKz0gJyZndDs8L2E+JztcbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0pXG4gICAgLmpvaW4oJycpO1xuXG4gICAgdGhpcy5jb250YWluZXIuaW5uZXJIVE1MID0gaHRtbCA9PT0gJycgPyAnJm5ic3A7JyA6IGh0bWw7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBfZ2V0UmVjb3JkQnlFbGVtZW50KGVsKSB7XG4gICAgdmFyIGlkID0gZWwudGFyZ2V0ID8gZWwudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpIDogZmFsc2U7XG4gICAgdmFyIGZpbHRlcmVkID0gdGhpcy5lbGVtZW50cy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5pZCA9PT0gaWQpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFswXSA6IGZhbHNlO1xuICB9XG4gIF9nZXRSZWNvcmRCeVNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gICAgdmFyIGZpbHRlcmVkID0gdGhpcy5lbGVtZW50cy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5zZWxlY3RvciA9PT0gc2VsZWN0b3IpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFswXSA6IGZhbHNlO1xuICB9XG4gIF9oYW5kbGVMaW5rKGVsKSB7XG4gICAgdmFyIHJlY29yZCA9IHRoaXMuX2dldFJlY29yZEJ5RWxlbWVudChlbCk7XG5cbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICByZWNvcmQuc2VsZWN0ZWQgPSAhcmVjb3JkLnNlbGVjdGVkO1xuICAgICAgcmVjb3JkLnNlbGVjdGVkID8gZWwudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJykgOiBlbC50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTtcbiAgICAgIHRoaXMuc3RlYWwuZGlzYWJsZWQgPSAhKHRoaXMuX3NlbGVjdGVkKCkubGVuZ3RoID4gMCk7XG4gICAgfVxuICB9XG4gIF9zZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZWwgPT4gZWwuc2VsZWN0ZWQpO1xuICB9XG4gIF9oYW5kbGVHZXRDU1MoKSB7XG4gICAgdGhpcy5vbkxpbmtTZWxlY3RlZCh0aGlzLl9zZWxlY3RlZCgpKTtcbiAgfVxuICBfaGFuZGxlTW91c2VPdmVyKGVsKSB7XG4gICAgdmFyIHJlY29yZCA9IHRoaXMuX2dldFJlY29yZEJ5RWxlbWVudChlbCk7XG5cbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICBleGVjdXRlKHRoaXMuX2luc3BlY3QsIFsnXCInICsgcmVjb3JkLnNlbGVjdG9yICsgJ1wiJ10pO1xuICAgIH1cbiAgfVxuICBfaGFuZGxlQ2xlYXIoKSB7XG4gICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIHRoaXMuY2xlYXIuZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuc3RlYWwuZGlzYWJsZWQgPSB0cnVlXG4gICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgdGhpcy5vbkNsZWFyKCk7XG4gIH1cblxuICBfaW5zcGVjdChzZWxlY3Rvcikge1xuICAgIGluc3BlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgZG9tcGF0aCBmcm9tICcuL3ZlbmRvci9kb21wYXRoJztcbmltcG9ydCBleGVjdXRlIGZyb20gJy4vZXhlY3V0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2Uge1xuICBjb25zdHJ1Y3Rvcih7IG9uRWxlbWVudFNlbGVjdGVkPW51bGwgfSkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSAxO1xuICAgIHRoaXMub25FbGVtZW50U2VsZWN0ZWQgPSBvbkVsZW1lbnRTZWxlY3RlZDtcbiAgICB2YXIgaGFuZGxlRWxlbWVudFNlbGVjdGVkID0gdGhpcy5oYW5kbGVFbGVtZW50U2VsZWN0ZWQuYmluZCh0aGlzKTtcblxuICAgIGNocm9tZS5kZXZ0b29scy5wYW5lbHMuZWxlbWVudHMub25TZWxlY3Rpb25DaGFuZ2VkLmFkZExpc3RlbmVyKGhhbmRsZUVsZW1lbnRTZWxlY3RlZCk7XG4gICAgXG4gIH1cbiAgaGFuZGxlRWxlbWVudFNlbGVjdGVkKCkge1xuICAgIGV4ZWN1dGUoXG4gICAgICB0aGlzLl9nZXRMYXN0bHlJbnNwZWN0ZWRFbGVtZW50LFxuICAgICAgW2RvbXBhdGhdLFxuICAgICAgZWwgPT4ge1xuICAgICAgICBpZiAoZWwpIHRoaXMub25FbGVtZW50U2VsZWN0ZWQoZWwpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIGV2YWwgZnVuY3Rpb25zXG4gIF9nZXRMYXN0bHlJbnNwZWN0ZWRFbGVtZW50KGRvbXBhdGgpIHtcbiAgICB2YXIgZWwgPSAkMDtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbC5ub2RlTmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGNsYXNzZXMgPSBlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IG5vZGVOYW1lICsgKGNsYXNzZXMgPyAnIGNsYXNzPVwiJyArIGNsYXNzZXMgKyAnXCInIDogJycpLFxuICAgICAgc2VsZWN0b3I6IGRvbXBhdGgoJDApLnRvQ1NTKClcbiAgICB9XG4gIH1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleGVjdXRlKGZuLCBhcmdzID0gW10sIGNhbGxiYWNrID0gbnVsbCkge1xuICB2YXIgY29kZSA9ICcoJyArIGZuLnRvU3RyaW5nKCkgKyAnKS5hcHBseSh0aGlzLCBbJyArIGFyZ3MudG9TdHJpbmcoKSArICddKTsnO1xuICBcbiAgY2hyb21lLmRldnRvb2xzLmluc3BlY3RlZFdpbmRvdy5ldmFsKGNvZGUsIGNhbGxiYWNrID8gY2FsbGJhY2suYmluZCh0aGlzKSA6ICgpID0+IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBMaW5rcyBmcm9tICcuL0xpbmtzJztcbmltcG9ydCBDU1NQcmV2aWV3IGZyb20gJy4vQ1NTUHJldmlldyc7XG5pbXBvcnQgUGFnZSBmcm9tICcuL1BhZ2UnO1xuaW1wb3J0IHsgJCB9IGZyb20gJy4vRE9NaGVscGVycyc7XG5cbnZhciBjc3NQcmV2aWV3ID0gbmV3IENTU1ByZXZpZXcoKTtcbnZhciBsaW5rcyA9IG5ldyBMaW5rcyh7XG4gIG9uTGlua1NlbGVjdGVkOiBjc3NQcmV2aWV3LnJlbmRlci5iaW5kKGNzc1ByZXZpZXcpLFxuICBvbkNsZWFyOiBjc3NQcmV2aWV3LmNsZWFyLmJpbmQoY3NzUHJldmlldylcbn0pO1xudmFyIHBhZ2UgPSBuZXcgUGFnZSh7XG4gIG9uRWxlbWVudFNlbGVjdGVkOiBsaW5rcy5hZGRMaW5rLmJpbmQobGlua3MpXG59KTsiLCIvLyBjcmVkaXRzOiBodHRwczovL2dpdGh1Yi5jb20vamhhcnRpa2FpbmVuL2RvbXBhdGhcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZWwsIHBhcmVudCkge1xuXG4gIHZhciBnZXRTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZihub2RlLmlkICE9PSAnJykge1xuICAgICAgcmV0dXJuICcjJyArIG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgdmFyIHJvb3QgPSAnJztcbiAgICBpZihub2RlLnBhcmVudCkge1xuICAgICAgcm9vdCA9IGdldFNlbGVjdG9yKG5vZGUucGFyZW50KSArICcgPiAnO1xuICAgIH1cblxuICAgIHJldHVybiByb290ICsgbm9kZS5uYW1lICsgJzpudGgtY2hpbGQoJyArIChub2RlLmluZGV4ICsgMSkgKyAnKSc7XG4gIH07XG5cbiAgdmFyIERvbVBhdGggPSBmdW5jdGlvbihub2RlKSB7IHRoaXMubm9kZSA9IG5vZGU7IH07XG4gIERvbVBhdGgucHJvdG90eXBlID0ge1xuICAgIHRvQ1NTOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBnZXRTZWxlY3Rvcih0aGlzLm5vZGUpO1xuICAgIH0sXG4gIFxuICAgIHNlbGVjdDogZnVuY3Rpb24oKSB7XG4gICAgICBpZih0aGlzLm5vZGUuaWQgIT09ICcnKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm5vZGUuaWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnRvQ1NTKCkpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGF0aE5vZGUgPSBmdW5jdGlvbihlbCwgcm9vdCkge1xuICAgIHZhciBub2RlID0ge1xuICAgICAgaWQ6IGVsLmlkLFxuICAgICAgbmFtZTogZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgIGluZGV4OiBjaGlsZEluZGV4KGVsKSxcbiAgICAgIHBhcmVudDogbnVsbFxuICAgIH07XG5cbiAgICBpZihlbC5wYXJlbnRFbGVtZW50ICYmIGVsLnBhcmVudEVsZW1lbnQgIT09IHJvb3QpIHtcbiAgICAgIG5vZGUucGFyZW50ID0gcGF0aE5vZGUoZWwucGFyZW50RWxlbWVudCwgcm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgdmFyIGNoaWxkSW5kZXggPSBmdW5jdGlvbihlbCkge1xuICAgIHZhciBpZHggPSAwO1xuICAgIHdoaWxlKGVsID0gZWwucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBpZihlbC5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICAgIGlkeCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpZHg7XG4gIH07XG5cbiAgcGFyZW50ID0gcGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gIGlmKGVsLm5vZGVOYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBEb21QYXRoKHBhdGhOb2RlKGVsLCBwYXJlbnQpKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgRG9tUGF0aChlbC5ub2RlKTtcbn07IiwiKGZ1bmN0aW9uKCkge1xuXG52YXIgQ1NTU3RlYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcGkgPSB7fSwgaHRtbCA9IG51bGwsIHN0eWxlcyA9IFtdLCBpbmRlbnQgPSAnICAnLCBlbGVtZW50cyA9IGZhbHNlLCBhcmdzID0gYXJndW1lbnRzO1xuXG4gIHZhciByZXF1aXJlbWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NTU1N0ZWFsIGV4cGVjdHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChET00gZWxlbWVudCknKTtcbiAgICB9XG4gICAgaWYgKCFkb2N1bWVudC5zdHlsZVNoZWV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDU1NTdGVhbDogZG9jdW1lbnQuc3R5bGVTaGVldHMgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIuJyk7IFxuICAgIH1cbiAgICBlbGVtZW50cyA9IHRvQXJyYXkoYXJncywgdHJ1ZSk7XG4gIH07XG4gIHZhciBnZXRIVE1MQXNTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLm91dGVySFRNTDtcbiAgfTtcbiAgdmFyIHRvQXJyYXkgPSBmdW5jdGlvbihvYmosIGlnbm9yZUZhbHN5KSB7XG4gICAgdmFyIGFyciA9IFtdLCBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpZ25vcmVGYWxzeSB8fCBvYmpbaV0pIHtcbiAgICAgICAgYXJyW2ldID0gb2JqW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG4gIHZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHNoZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzLCByZXN1bHQgPSBbXSwgc2VsZWN0b3JUZXh0O1xuXG4gICAgYS5tYXRjaGVzID0gYS5tYXRjaGVzIHx8IGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGEubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGEubXNNYXRjaGVzU2VsZWN0b3IgfHwgYS5vTWF0Y2hlc1NlbGVjdG9yO1xuICAgIGZvciAodmFyIGkgaW4gc2hlZXRzKSB7XG4gICAgICB2YXIgcnVsZXMgPSBzaGVldHNbaV0ucnVsZXMgfHwgc2hlZXRzW2ldLmNzc1J1bGVzO1xuICAgICAgZm9yICh2YXIgciBpbiBydWxlcykge1xuICAgICAgICBzZWxlY3RvclRleHQgPSBydWxlc1tyXS5zZWxlY3RvclRleHQgPyBydWxlc1tyXS5zZWxlY3RvclRleHQuc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24ocGllY2UpIHtcbiAgICAgICAgICByZXR1cm4gcGllY2UgPyBwaWVjZS5zcGxpdCgvKDp8OjopLylbMF0gOiBmYWxzZTtcbiAgICAgICAgfSkuam9pbignICcpIDogZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGEubWF0Y2hlcyhzZWxlY3RvclRleHQpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChydWxlc1tyXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAvLyBjYW4gbm90IHJ1biBtYXRjaGVzIG9uIHRoaXMgc2VsZWN0b3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciByZWFkU3R5bGVzID0gZnVuY3Rpb24gKGVscykge1xuICAgIHJldHVybiBlbHMucmVkdWNlKGZ1bmN0aW9uIChzLCBlbCkge1xuICAgICAgcy5wdXNoKGdldFJ1bGVzKGVsKSk7XG4gICAgICBzID0gcy5jb25jYXQocmVhZFN0eWxlcyh0b0FycmF5KGVsLmNoaWxkcmVuKSkpO1xuICAgICAgcmV0dXJuIHM7ICBcbiAgICB9LCBbXSk7XG4gIH07XG4gIHZhciBmbGF0dGVuUnVsZXMgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBmaWx0ZXJCeVNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yLCByZXN1bHQpIHtcbiAgICAgIHJldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnNlbGVjdG9yID09PSBzZWxlY3RvcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgZ2V0SXRlbSA9IGZ1bmN0aW9uIChzZWxlY3RvciwgcmVzdWx0KSB7XG4gICAgICB2YXIgYXJyID0gZmlsdGVyQnlTZWxlY3RvcihzZWxlY3RvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IGFyclswXSA6IHtcbiAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgICBzdHlsZXM6IHt9XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgcHVzaEl0ZW0gPSBmdW5jdGlvbiAoaXRlbSwgcmVzdWx0KSB7XG4gICAgICB2YXIgYXJyID0gZmlsdGVyQnlTZWxlY3RvcihpdGVtLnNlbGVjdG9yLCByZXN1bHQpO1xuICAgICAgaWYgKGFyci5sZW5ndGggPT09IDApIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICB2YXIgYWxsID0gW107XG4gICAgcy5mb3JFYWNoKGZ1bmN0aW9uIChydWxlcykge1xuICAgICAgcnVsZXMuZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICB2YXIgaXRlbSA9IGdldEl0ZW0ocnVsZS5zZWxlY3RvclRleHQsIGFsbCk7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTxydWxlLnN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcnVsZS5zdHlsZVtpXTtcbiAgICAgICAgICBpdGVtLnN0eWxlc1twcm9wZXJ0eV0gPSBydWxlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hJdGVtKGl0ZW0sIGFsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWxsO1xuICB9O1xuXG4gIHJlcXVpcmVtZW50cygpO1xuXG4gIGh0bWwgPSBnZXRIVE1MQXNTdHJpbmcoKTtcbiAgc3R5bGVzID0gZmxhdHRlblJ1bGVzKHJlYWRTdHlsZXMoZWxlbWVudHMpKTtcblxuICBhcGkudG9DU1NUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdHlsZXMucmVkdWNlKGZ1bmN0aW9uICh0ZXh0LCBpdGVtKSB7XG4gICAgICB0ZXh0ICs9IGl0ZW0uc2VsZWN0b3IgKyAnIHtcXG4nO1xuICAgICAgdGV4dCArPSBPYmplY3Qua2V5cyhpdGVtLnN0eWxlcykucmVkdWNlKGZ1bmN0aW9uIChsaW5lcywgcHJvcCkge1xuICAgICAgICBsaW5lcy5wdXNoKGluZGVudCArIHByb3AgKyAnOiAnICsgaXRlbS5zdHlsZXNbcHJvcF0gKyAnOycpO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgICB9LCBbXSkuam9pbignXFxuJyk7XG4gICAgICB0ZXh0ICs9ICdcXG59XFxuJztcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH0sICcnKTtcbiAgfTtcbiAgYXBpLnRvSlMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuXG4gIHJldHVybiBhcGk7XG59O1xuXG52YXIgcm9vdCA9IHRoaXM7XG5pZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IENTU1N0ZWFsO1xuICB9XG4gIGV4cG9ydHMuQ1NTU3RlYWwgPSBDU1NTdGVhbDtcbn0gZWxzZSB7XG4gIHJvb3QuQ1NTU3RlYWwgPSBDU1NTdGVhbDtcbn1cbn0pLmNhbGwodGhpcyk7XG5cblxuIl19
565 |
--------------------------------------------------------------------------------