├── 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 |
13 |
 
14 |
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 | ![CSSSteal](http://krasimirtsonev.com/blog/articles/CSSSteal/css-steal.jpg) 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"})}},{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 | --------------------------------------------------------------------------------