├── boilerplate
├── app
│ ├── assets
│ │ └── .gitkeep
│ ├── package.json
│ └── pages
│ │ └── main.html
├── src
│ ├── renderer
│ │ ├── models
│ │ │ └── .gitkeep
│ │ ├── services
│ │ │ └── .gitkeep
│ │ ├── components
│ │ │ └── .gitkeep
│ │ ├── assets
│ │ │ └── yay.jpg
│ │ ├── index.js
│ │ ├── router.js
│ │ ├── main-dev.html
│ │ └── routes
│ │ │ ├── IndexPage.css
│ │ │ └── IndexPage.js
│ ├── shared
│ │ └── constants.js
│ └── main
│ │ ├── configs
│ │ └── config.js
│ │ ├── services
│ │ ├── application.js
│ │ ├── window.js
│ │ └── menu.js
│ │ └── index.js
├── .dvarc
├── build
│ ├── icon.icns
│ └── icon.ico
├── extensions
│ ├── redux-devtools
│ │ └── 2.11.1_0
│ │ │ ├── background.html
│ │ │ ├── img
│ │ │ ├── logo
│ │ │ │ ├── 16x16.png
│ │ │ │ ├── 38x38.png
│ │ │ │ ├── 48x48.png
│ │ │ │ ├── error.png
│ │ │ │ ├── 128x128.png
│ │ │ │ └── scalable.png
│ │ │ └── loading.svg
│ │ │ ├── devtools.html
│ │ │ ├── js
│ │ │ ├── devtools.bundle.js
│ │ │ ├── content.bundle.js
│ │ │ └── pagewrap.bundle.js
│ │ │ ├── remote.html
│ │ │ ├── devpanel.html
│ │ │ ├── window.html
│ │ │ ├── css
│ │ │ ├── night.css
│ │ │ └── codemirror.css
│ │ │ ├── options.html
│ │ │ ├── manifest.json
│ │ │ └── _metadata
│ │ │ ├── verified_contents.json
│ │ │ └── computed_hashes.json
│ └── react-developer-tools
│ │ └── 0.15.4_0
│ │ ├── icons
│ │ ├── icon48.png
│ │ └── icon128.png
│ │ ├── main.html
│ │ ├── panel.html
│ │ ├── manifest.json
│ │ ├── build
│ │ ├── contentScript.js
│ │ ├── main.js
│ │ ├── background.js
│ │ └── inject.js
│ │ └── _metadata
│ │ ├── verified_contents.json
│ │ └── computed_hashes.json
├── test
│ └── setup.js
├── .gitignore
├── .babelrc
├── .editorconfig
├── README.md
├── webpack.config.js
├── .roadhogrc
├── webpack.config.main.babel.js
├── .eslintrc
└── package.json
└── README.md
/boilerplate/app/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/models/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/services/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/components/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplate/.dvarc:
--------------------------------------------------------------------------------
1 | {
2 | "base": "src/renderer"
3 | }
4 |
--------------------------------------------------------------------------------
/boilerplate/src/shared/constants.js:
--------------------------------------------------------------------------------
1 |
2 | export const IPC_CHANNEL = 'ipc';
3 |
--------------------------------------------------------------------------------
/boilerplate/build/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/build/icon.icns
--------------------------------------------------------------------------------
/boilerplate/build/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/build/icon.ico
--------------------------------------------------------------------------------
/boilerplate/src/main/configs/config.js:
--------------------------------------------------------------------------------
1 | import Config from 'electron-config';
2 |
3 | export default new Config({ name: 'config' });
4 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/assets/yay.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/src/renderer/assets/yay.jpg
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/background.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/boilerplate/test/setup.js:
--------------------------------------------------------------------------------
1 | import { join } from 'path';
2 |
3 | const baseDir = join(__dirname, '..', 'app', 'node_modules');
4 | require('app-module-path').addPath(baseDir);
5 |
--------------------------------------------------------------------------------
/boilerplate/.gitignore:
--------------------------------------------------------------------------------
1 | # system files
2 | .DS_Store
3 |
4 | # dependencies
5 | node_modules
6 |
7 | # build output
8 | dist
9 | app/dist
10 |
11 | # logs
12 | npm-debug.log
13 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/16x16.png
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/38x38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/38x38.png
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/48x48.png
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/error.png
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/128x128.png
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/icons/icon48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/react-developer-tools/0.15.4_0/icons/icon48.png
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/scalable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/redux-devtools/2.11.1_0/img/logo/scalable.png
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/icons/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sorrycc/dva-boilerplate-electron/HEAD/boilerplate/extensions/react-developer-tools/0.15.4_0/icons/icon128.png
--------------------------------------------------------------------------------
/boilerplate/src/main/services/application.js:
--------------------------------------------------------------------------------
1 | import { create, getPath } from './window';
2 |
3 | export function init() {
4 | const win = create({ width: 800, height: 600 });
5 | win.loadURL(getPath());
6 | }
7 |
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/boilerplate/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "es2015",
4 | "stage-0"
5 | ],
6 | "plugins": [
7 | "add-module-exports",
8 | "transform-runtime",
9 | "transform-decorators-legacy"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/devtools.html:
--------------------------------------------------------------------------------
1 | Redux DevTools
--------------------------------------------------------------------------------
/boilerplate/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/index.js:
--------------------------------------------------------------------------------
1 | import dva from 'dva';
2 | import './main-dev.html';
3 |
4 | // 1. Initialize
5 | const app = dva();
6 |
7 | // 2. Plugins
8 | // app.use({});
9 |
10 | // 3. Model
11 | // app.model(require('./models/example'));
12 |
13 | // 4. Router
14 | app.router(require('./router'));
15 |
16 | // 5. Start
17 | app.start('#root');
18 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/router.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Router, Route } from 'dva/router';
3 | import IndexPage from './routes/IndexPage';
4 |
5 | function RouterConfig({ history }) {
6 | return (
7 |
8 |
9 |
10 | );
11 | }
12 |
13 | export default RouterConfig;
14 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/js/devtools.bundle.js:
--------------------------------------------------------------------------------
1 | !function(e){function t(r){if(o[r])return o[r].exports;var n=o[r]={exports:{},id:r,loaded:!1};return e[r].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)}({0:function(e,t,o){e.exports=o(1315)},1315:function(e,t){"use strict";chrome.devtools.panels.create("Redux","img/logo/scalable.png","devpanel.html",function(){})}});
--------------------------------------------------------------------------------
/boilerplate/README.md:
--------------------------------------------------------------------------------
1 | # app
2 |
3 | > My superb app
4 |
5 | ## Dev
6 |
7 | Install dependencies.
8 |
9 | ```bash
10 | $ npm install
11 | ```
12 |
13 | Start webpack and watch.
14 |
15 | ```bash
16 | $ npm run dev
17 | ```
18 |
19 | Then open another terminal, and run start.
20 |
21 | ```bash
22 | $ npm start
23 | ```
24 |
25 | ## Build
26 |
27 | ```bash
28 | $ npm run pack
29 | ```
30 |
31 | ## License
32 |
33 | MIT
34 |
--------------------------------------------------------------------------------
/boilerplate/webpack.config.js:
--------------------------------------------------------------------------------
1 |
2 | export default function (webpackConfig) {
3 | return {
4 | ...webpackConfig,
5 | externals(context, request, callback) {
6 | let isExternal = false;
7 | const load = [
8 | 'electron',
9 | ];
10 | if (load.includes(request)) {
11 | isExternal = `require("${request}")`;
12 | }
13 | callback(null, isExternal);
14 | },
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/boilerplate/.roadhogrc:
--------------------------------------------------------------------------------
1 | {
2 | "entry": "./src/renderer/index.js",
3 | "outputPath": "./app/dist",
4 | "define": {
5 | "$dirname": "__dirname"
6 | },
7 | "env": {
8 | "development": {
9 | "extraBabelPlugins": [
10 | "dva-hmr",
11 | "transform-runtime"
12 | ]
13 | },
14 | "production": {
15 | "extraBabelPlugins": [
16 | "transform-runtime"
17 | ]
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/boilerplate/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dva-boilerplate-electron",
3 | "version": "0.1.0",
4 | "productName": "Boilerplate",
5 | "description": "Yet another boilerplate for dva.",
6 | "main": "dist/main.js",
7 | "author": {
8 | "name": "chencheng",
9 | "email": "sorrycc@gmail.com"
10 | },
11 | "dependencies": {
12 | "electron-config": "^0.2.1",
13 | "electron-is": "^2.3.0",
14 | "electron-log": "^1.2.2"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/main-dev.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/boilerplate/app/pages/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/routes/IndexPage.css:
--------------------------------------------------------------------------------
1 |
2 | .normal {
3 | font-family: Georgia, sans-serif;
4 | margin-top: 3em;
5 | text-align: center;
6 | }
7 |
8 | .title {
9 | font-size: 2.5rem;
10 | font-weight: normal;
11 | letter-spacing: -1px;
12 | }
13 |
14 | .welcome {
15 | height: 328px;
16 | background: url(../assets/yay.jpg) no-repeat center 0;
17 | background-size: 388px 328px;
18 | }
19 |
20 | .list {
21 | font-size: 1.2em;
22 | margin-top: 1.8em;
23 | list-style: none;
24 | line-height: 1.5em;
25 | }
26 |
27 | .list code {
28 | background: #f7f7f7;
29 | }
30 |
--------------------------------------------------------------------------------
/boilerplate/src/main/services/window.js:
--------------------------------------------------------------------------------
1 | import is from 'electron-is';
2 | import { join } from 'path';
3 | import { BrowserWindow } from 'electron';
4 |
5 | let count = 0;
6 |
7 | export function create(opts) {
8 | count += 1;
9 | let win = new BrowserWindow(opts);
10 | win.on('close', () => {
11 | count -= 1;
12 | win = null;
13 | });
14 | return win;
15 | }
16 |
17 | export function getCount() {
18 | return count;
19 | }
20 |
21 | export function getPath() {
22 | let path = `file://${join($dirname, '..', 'pages')}/main.html`;
23 | if (is.dev()) {
24 | path = 'http://127.0.0.1:8000/main-dev.html';
25 | }
26 | return path;
27 | }
28 |
--------------------------------------------------------------------------------
/boilerplate/src/renderer/routes/IndexPage.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { connect } from 'dva';
3 | import styles from './IndexPage.css';
4 |
5 | function IndexPage() {
6 | return (
7 |
8 |
Yay! Welcome to dva!
9 |
10 |
11 | - To get started, edit
src/index.js and save to reload.
12 | - Getting Started
13 |
14 |
15 | );
16 | }
17 |
18 | export default connect()(IndexPage);
19 |
--------------------------------------------------------------------------------
/boilerplate/webpack.config.main.babel.js:
--------------------------------------------------------------------------------
1 | import webpack from 'webpack';
2 | import path from 'path';
3 |
4 | const outputPath = path.join(__dirname, 'app', 'dist');
5 | export default {
6 | target: 'electron',
7 | entry: {
8 | main: './src/main/index.js',
9 | },
10 | output: {
11 | path: outputPath,
12 | filename: '[name].js',
13 | },
14 | externals(context, request, callback) {
15 | callback(null, request.charAt(0) === '.' ? false : `require("${request}")`);
16 | },
17 | module: {
18 | loaders: [
19 | {
20 | test: /\.js$/,
21 | exclude: /node_modules/,
22 | loader: 'babel-loader',
23 | },
24 | ],
25 | },
26 | plugins: [
27 | new webpack.DefinePlugin({
28 | $dirname: '__dirname',
29 | }),
30 | ],
31 | };
32 |
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/panel.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
27 |
28 |
29 |
30 | Unable to find React on the page.
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/boilerplate/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "babel-eslint",
3 | "extends": "airbnb",
4 | "env": {
5 | "mocha": true
6 | },
7 | "rules": {
8 | "generator-star-spacing": [0],
9 | "consistent-return": [0],
10 | "react/forbid-prop-types": [0],
11 | "react/jsx-filename-extension": [1, { "extensions": [".js"] }],
12 | "global-require": [1],
13 | "import/prefer-default-export": [0],
14 | "react/jsx-no-bind": [0],
15 | "react/prop-types": [0],
16 | "react/prefer-stateless-function": [0],
17 | "no-else-return": [0],
18 | "no-restricted-syntax": [0],
19 | "import/no-extraneous-dependencies": [0],
20 | "no-use-before-define": [0],
21 | "jsx-a11y/no-static-element-interactions": [0],
22 | "no-nested-ternary": [0],
23 | "arrow-body-style": [0],
24 | "import/extensions": [0],
25 | "no-bitwise": [0],
26 | "no-cond-assign": [0],
27 | "import/no-unresolved": [0],
28 | "require-yield": [1]
29 | },
30 | "parserOptions": {
31 | "ecmaFeatures": {
32 | "experimentalObjectRestSpread": true
33 | }
34 | },
35 | "globals": {
36 | "window": true,
37 | "document": true,
38 | "$dirname": true
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/boilerplate/src/main/services/menu.js:
--------------------------------------------------------------------------------
1 | import { Menu } from 'electron';
2 | import log from 'electron-log';
3 |
4 | function getTemplate() {
5 | return [
6 | {
7 | label: 'MyApp',
8 | submenu: [
9 | { role: 'hide' },
10 | { role: 'hideothers' },
11 | { role: 'unhide' },
12 | { type: 'separator' },
13 | { role: 'quit' },
14 | ],
15 | },
16 | {
17 | label: 'Edit',
18 | submenu: [
19 | { role: 'undo' },
20 | { role: 'redo' },
21 | { type: 'separator' },
22 | { role: 'cut' },
23 | { role: 'copy' },
24 | { role: 'paste' },
25 | { role: 'selectall' },
26 | ],
27 | },
28 | {
29 | label: 'View',
30 | submenu: [
31 | { role: 'reload' },
32 | { role: 'toggledevtools' },
33 | { type: 'separator' },
34 | { role: 'togglefullscreen' },
35 | ],
36 | },
37 | {
38 | role: 'window',
39 | label: 'Window',
40 | submenu: [
41 | { role: 'minimize' },
42 | { role: 'close' },
43 | ],
44 | },
45 | ];
46 | }
47 |
48 | export function init() {
49 | log.info('(menu) init');
50 | const menu = Menu.buildFromTemplate(getTemplate());
51 | Menu.setApplicationMenu(menu);
52 | }
53 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/remote.html:
--------------------------------------------------------------------------------
1 | RemoteDev
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "background": {
3 | "persistent": false,
4 | "scripts": [ "build/background.js" ]
5 | },
6 | "content_scripts": [ {
7 | "js": [ "build/inject.js" ],
8 | "matches": [ "\u003Call_urls>" ],
9 | "run_at": "document_start"
10 | } ],
11 | "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
12 | "description": "Adds React debugging tools to the Chrome Developer Tools.",
13 | "devtools_page": "main.html",
14 | "icons": {
15 | "128": "icons/icon128.png",
16 | "48": "icons/icon48.png"
17 | },
18 | "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA39Lr82J1eer+RvXeQG6HYHb2A6xU/83bcIyOcu+Wu2vYO/jbBvlD3m/xqrU4xSXJ/uAC1XY/YtlRs2X2RE1XiYMMlnqw27QdI5tVcSnKedmTFNAsnSaQ/OZT5tzH3HntLDfrFof5BC5RmFuie+kQKGTh673JW0ZdKTUsW406Fckagl9WpPL+qp3Gah3Jw02zxfQX9yUd5gJHYvv8T31DO9+HsI8lPeEjanURY59rRUfg3JKy1aPfts6eISy9kpHC+LrRSHU2Zp5AuUkOh8qEg6DoHFwBNYX20bdd6ekj0OZiIz/9xj9ceNhAr85QYB0641Tzhs3Tg96k56VNwjdN2QIDAQAB",
19 | "manifest_version": 2,
20 | "minimum_chrome_version": "43",
21 | "name": "React Developer Tools",
22 | "permissions": [ "file:///*", "http://*/*", "https://*/*" ],
23 | "update_url": "https://clients2.google.com/service/update2/crx",
24 | "version": "0.15.4",
25 | "web_accessible_resources": [ "main.html", "panel.html", "build/backend.js" ]
26 | }
27 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/devpanel.html:
--------------------------------------------------------------------------------
1 | Redux DevTools
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/window.html:
--------------------------------------------------------------------------------
1 | Redux DevTools
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # dva-boilerplate-electron
2 |
3 | > Boilerplate to kickstart creating an app with Electron and [dva](https://github.com/dvajs/dva).
4 |
5 | 详见[Electron 应用实战 (架构篇)](https://github.com/sorrycc/blog/issues/13),解释为何这样组织。
6 |
7 | ## Getting started
8 |
9 | In your directory, run:
10 |
11 | ```bash
12 | $ curl -fsSL https://github.com/sorrycc/dva-boilerplate-electron/archive/master.tar.gz | tar -xz --strip-components 2
13 | ```
14 |
15 | You can also `git clone` or [download](https://github.com/sorrycc/dva-boilerplate-electron/archive/master.zip) this repo and get contents of the boilerplate folder.
16 |
17 | ## Features
18 |
19 | - Two-Package.json Structure
20 | - Build src with webpack and babel, no grunt or gulp
21 | - Do communicate between main and renderer with `electron.remote`
22 | - Integrate two chrome extensions: redux devtool and react devtool
23 | - Livereload js and css
24 | - ...
25 |
26 | ## Directory Structure
27 |
28 | ```js
29 | + dist // pack 完后的输出,.dmg, .exe, .zip, .app 等文件
30 | + build // background.png, icon.icns, icon.ico
31 | + app // 用于 pack 给用户的目录
32 | + dist // src 目录打包完放这里
33 | + assets // 字体、图片等资源文件
34 | + pages // 存放页面
35 | - package.json // 生产依赖,存 dependencies
36 | + src // 源码
37 | + main // main
38 | + renderer // renderer
39 | + shared // main 和 renderer 公用文件
40 | - package.json // 开发依赖,存 devDependencies
41 | ```
42 |
43 | ## Screenshot
44 |
45 |
46 |
47 | ## License
48 |
49 | [MIT](https://tldrlegal.com/license/mit-license)
50 |
--------------------------------------------------------------------------------
/boilerplate/src/main/index.js:
--------------------------------------------------------------------------------
1 | import { app, BrowserWindow } from 'electron';
2 | import is from 'electron-is';
3 | import { join } from 'path';
4 | import log from 'electron-log';
5 | import * as application from './services/application';
6 | import * as window from './services/window';
7 | import * as menu from './services/menu';
8 | import * as config from './configs/config';
9 |
10 | log.transports.file.level = 'info';
11 |
12 | log.info('(main/index) >>>>>>>>>>>>>>>>>>');
13 | log.info('(main/index) app start');
14 | log.info(`(main/index) log file at ${log.findLogPath()}`);
15 |
16 | if (is.dev()) {
17 | require('electron-debug')(); // eslint-disable-line global-require
18 | }
19 |
20 | app.on('ready', () => {
21 | log.info('(main/index) app ready');
22 | application.init();
23 | menu.init();
24 |
25 | // 加载 devtools extension
26 | if (is.dev()) {
27 | BrowserWindow.addDevToolsExtension(
28 | join($dirname, '../../extensions/redux-devtools/2.11.1_0'),
29 | );
30 | BrowserWindow.addDevToolsExtension(
31 | join($dirname, '../../extensions/react-developer-tools/0.15.4_0'),
32 | );
33 | }
34 | });
35 |
36 | app.on('window-all-closed', () => {
37 | if (process.platform !== 'darwin') {
38 | app.quit();
39 | }
40 | });
41 |
42 | app.on('activate', () => {
43 | if (window.getCount() === 0) {
44 | application.init();
45 | }
46 | });
47 |
48 | app.on('quit', () => {
49 | log.info('(main/index) app quit');
50 | log.info('(main/index) <<<<<<<<<<<<<<<<<<<');
51 | });
52 |
53 | // Register to global, so renderer can access these with remote.getGlobal
54 | global.services = {
55 | application,
56 | window,
57 | };
58 | global.configs = {
59 | config,
60 | };
61 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/css/night.css:
--------------------------------------------------------------------------------
1 | /* Loosely based on the Midnight Textmate theme */
2 |
3 | .cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }
4 | .cm-s-night div.CodeMirror-selected { background: #447; }
5 | .cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); }
6 | .cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); }
7 | .cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
8 | .cm-s-night .CodeMirror-guttermarker { color: white; }
9 | .cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; }
10 | .cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }
11 | .cm-s-night .CodeMirror-cursor { border-left: 1px solid white; }
12 |
13 | .cm-s-night span.cm-comment { color: #8900d1; }
14 | .cm-s-night span.cm-atom { color: #845dc4; }
15 | .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
16 | .cm-s-night span.cm-keyword { color: #599eff; }
17 | .cm-s-night span.cm-string { color: #37f14a; }
18 | .cm-s-night span.cm-meta { color: #7678e2; }
19 | .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
20 | .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
21 | .cm-s-night span.cm-bracket { color: #8da6ce; }
22 | .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
23 | .cm-s-night span.cm-link { color: #845dc4; }
24 | .cm-s-night span.cm-error { color: #9d1e15; }
25 |
26 | .cm-s-night .CodeMirror-activeline-background { background: #1C005A; }
27 | .cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
28 |
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/build/contentScript.js:
--------------------------------------------------------------------------------
1 | !function(modules) {
2 | function __webpack_require__(moduleId) {
3 | if (installedModules[moduleId]) return installedModules[moduleId].exports;
4 | var module = installedModules[moduleId] = {
5 | exports: {},
6 | id: moduleId,
7 | loaded: !1
8 | };
9 | return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
10 | module.loaded = !0, module.exports;
11 | }
12 | var installedModules = {};
13 | return __webpack_require__.m = modules, __webpack_require__.c = installedModules,
14 | __webpack_require__.p = "", __webpack_require__(0);
15 | }([ function(module, exports) {
16 | "use strict";
17 | function handleMessageFromDevtools(message) {
18 | window.postMessage({
19 | source: "react-devtools-content-script",
20 | payload: message
21 | }, "*");
22 | }
23 | function handleMessageFromPage(evt) {
24 | evt.data && "react-devtools-bridge" === evt.data.source && port.postMessage(evt.data.payload);
25 | }
26 | function handleDisconnect() {
27 | window.removeEventListener("message", handleMessageFromPage), window.postMessage({
28 | source: "react-devtools-content-script",
29 | payload: {
30 | type: "event",
31 | evt: "shutdown"
32 | }
33 | }, "*");
34 | }
35 | var port = chrome.runtime.connect({
36 | name: "content-script"
37 | });
38 | port.onMessage.addListener(handleMessageFromDevtools), port.onDisconnect.addListener(handleDisconnect),
39 | window.addEventListener("message", handleMessageFromPage), window.postMessage({
40 | source: "react-devtools-content-script",
41 | hello: !0
42 | }, "*");
43 | } ]);
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/build/main.js:
--------------------------------------------------------------------------------
1 | !function(modules) {
2 | function __webpack_require__(moduleId) {
3 | if (installedModules[moduleId]) return installedModules[moduleId].exports;
4 | var module = installedModules[moduleId] = {
5 | exports: {},
6 | id: moduleId,
7 | loaded: !1
8 | };
9 | return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
10 | module.loaded = !0, module.exports;
11 | }
12 | var installedModules = {};
13 | return __webpack_require__.m = modules, __webpack_require__.c = installedModules,
14 | __webpack_require__.p = "", __webpack_require__(0);
15 | }([ function(module, exports) {
16 | "use strict";
17 | function createPanelIfReactLoaded() {
18 | panelCreated || chrome.devtools.inspectedWindow.eval("!!(\n Object.keys(window.__REACT_DEVTOOLS_GLOBAL_HOOK__._renderers).length || window.React\n )", function(pageHasReact, err) {
19 | pageHasReact && !panelCreated && (clearInterval(loadCheckInterval), panelCreated = !0,
20 | chrome.devtools.panels.create("React", "", "panel.html", function(panel) {
21 | var reactPanel = null;
22 | panel.onShown.addListener(function(window) {
23 | window.panel.getNewSelection(), reactPanel = window.panel, reactPanel.resumeTransfer();
24 | }), panel.onHidden.addListener(function() {
25 | reactPanel && (reactPanel.hideHighlight(), reactPanel.pauseTransfer());
26 | });
27 | }));
28 | });
29 | }
30 | var panelCreated = !1;
31 | chrome.devtools.network.onNavigated.addListener(function() {
32 | createPanelIfReactLoaded();
33 | });
34 | var loadCheckInterval = setInterval(function() {
35 | createPanelIfReactLoaded();
36 | }, 1e3);
37 | createPanelIfReactLoaded();
38 | } ]);
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/img/loading.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/options.html:
--------------------------------------------------------------------------------
1 | Redux DevTools Options
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/build/background.js:
--------------------------------------------------------------------------------
1 | !function(modules) {
2 | function __webpack_require__(moduleId) {
3 | if (installedModules[moduleId]) return installedModules[moduleId].exports;
4 | var module = installedModules[moduleId] = {
5 | exports: {},
6 | id: moduleId,
7 | loaded: !1
8 | };
9 | return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
10 | module.loaded = !0, module.exports;
11 | }
12 | var installedModules = {};
13 | return __webpack_require__.m = modules, __webpack_require__.c = installedModules,
14 | __webpack_require__.p = "", __webpack_require__(0);
15 | }([ function(module, exports) {
16 | "use strict";
17 | function isNumeric(str) {
18 | return +str + "" === str;
19 | }
20 | function installContentScript(tabId) {
21 | chrome.tabs.executeScript(tabId, {
22 | file: "/build/contentScript.js"
23 | }, function() {});
24 | }
25 | function doublePipe(one, two) {
26 | function lOne(message) {
27 | two.postMessage(message);
28 | }
29 | function lTwo(message) {
30 | one.postMessage(message);
31 | }
32 | function shutdown() {
33 | one.onMessage.removeListener(lOne), two.onMessage.removeListener(lTwo), one.disconnect(),
34 | two.disconnect();
35 | }
36 | one.onMessage.addListener(lOne), two.onMessage.addListener(lTwo), one.onDisconnect.addListener(shutdown),
37 | two.onDisconnect.addListener(shutdown);
38 | }
39 | var ports = {};
40 | chrome.runtime.onConnect.addListener(function(port) {
41 | var tab = null, name = null;
42 | isNumeric(port.name) ? (tab = port.name, name = "devtools", installContentScript(+port.name)) : (tab = port.sender.tab.id,
43 | name = "content-script"), ports[tab] || (ports[tab] = {
44 | devtools: null,
45 | "content-script": null
46 | }), ports[tab][name] = port, ports[tab].devtools && ports[tab]["content-script"] && doublePipe(ports[tab].devtools, ports[tab]["content-script"]);
47 | });
48 | } ]);
--------------------------------------------------------------------------------
/boilerplate/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "author": {
4 | "name": "chencheng",
5 | "email": "sorrycc@gmail.com"
6 | },
7 | "scripts": {
8 | "start": "electron app/dist/main",
9 | "postinstall": "cd app && tnpm i && cd .. && npm run rebuild",
10 | "dev:renderer": "roadhog server --no-open",
11 | "dev:main": "webpack -w --config ./webpack.config.main.babel.js",
12 | "dev": "concurrently \"npm run dev:renderer\" \"npm run dev:main\"",
13 | "clean": "chmod u+x dist && rm -rf node_modules app/node_modules dist app/dist",
14 | "build": "roadhog build && webpack --config ./webpack.config.main.babel.js",
15 | "lint": "eslint --ext .js src test webpack.config.babel.js",
16 | "test": "mocha test/**/*-test.js --require babel-register --require ./test/setup --no-timeouts",
17 | "rebuild": "electron-rebuild -m ./app",
18 | "pack": "npm run build && npm run rebuild && build",
19 | "pack:dir": "npm run build && npm run rebuild && build --dir",
20 | "pack:justBuild": "build --dir",
21 | "precommit": "npm run lint"
22 | },
23 | "build": {
24 | "appId": "com.sorrycc.dva-boilerplate",
25 | "category": "public.app-category.developer-tools",
26 | "asar": false
27 | },
28 | "devDependencies": {
29 | "babel-core": "^6.18.2",
30 | "babel-eslint": "^7.1.1",
31 | "babel-loader": "^6.2.8",
32 | "babel-plugin-add-module-exports": "^0.2.1",
33 | "babel-plugin-dva-hmr": "^0.3.2",
34 | "babel-plugin-transform-decorators-legacy": "^1.3.4",
35 | "babel-plugin-transform-runtime": "^6.15.0",
36 | "babel-preset-es2015": "^6.18.0",
37 | "babel-preset-stage-0": "^6.16.0",
38 | "babel-register": "^6.18.0",
39 | "babel-runtime": "^6.20.0",
40 | "concurrently": "^3.1.0",
41 | "devtron": "^1.4.0",
42 | "dva": "^1.1.0",
43 | "electron": "^1.4.7",
44 | "electron-builder": "^8.6.0",
45 | "electron-debug": "^1.1.0",
46 | "electron-rebuild": "^1.4.0",
47 | "eslint": "^3.10.2",
48 | "eslint-config-airbnb": "^13.0.0",
49 | "eslint-plugin-import": "^2.2.0",
50 | "eslint-plugin-jsx-a11y": "^2.2.3",
51 | "eslint-plugin-react": "^6.7.1",
52 | "eslint-plugin-unicorn": "^1.0.0",
53 | "husky": "^0.11.9",
54 | "mocha": "^3.2.0",
55 | "react": "^15.4.0",
56 | "react-dom": "^15.4.0",
57 | "redbox-react": "^1.3.3",
58 | "roadhog": "^0.5.2",
59 | "webpack": "^1.13.3"
60 | },
61 | "license": "MIT"
62 | }
63 |
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/_metadata/verified_contents.json:
--------------------------------------------------------------------------------
1 | [{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJidWlsZC9iYWNrZW5kLmpzIiwicm9vdF9oYXNoIjoiX3M0YUU0c2g4MG9hc2FSTmRTTlJTYmhucGlwN1BHZHU0bnVGSEN2TjBWRSJ9LHsicGF0aCI6ImJ1aWxkL2JhY2tncm91bmQuanMiLCJyb290X2hhc2giOiJSMjFBQmpybVc3cWVJUVppUEpyLTROdEN3TUFCMzB0YmxTa3FFRTJNVU9BIn0seyJwYXRoIjoiYnVpbGQvY29udGVudFNjcmlwdC5qcyIsInJvb3RfaGFzaCI6IkozakF1LTdERVd3UnZNem8za0ZBT2I4WjJQeDVoRXRtbVRuSnY2cTVjLWsifSx7InBhdGgiOiJidWlsZC9pbmplY3QuanMiLCJyb290X2hhc2giOiJsaFZ5NzRWRVF4UTRTbFFiOGZjQ19BcUY4a1M5UjBycS1LLTl2R3RPRDF3In0seyJwYXRoIjoiYnVpbGQvbWFpbi5qcyIsInJvb3RfaGFzaCI6InotVjU3amloYTNqM2REN09pVXNlb1F0SGZudzEyRXBVVFhOVHpfd3BuRGcifSx7InBhdGgiOiJidWlsZC9wYW5lbC5qcyIsInJvb3RfaGFzaCI6IkhRRjlqMXZOWGJpNzRfa01Sb0p5Tm44bFJpOHlLQ3NqM1RSY2JORnhNZGsifSx7InBhdGgiOiJpY29ucy9pY29uMTI4LnBuZyIsInJvb3RfaGFzaCI6ImVaN2FyZEt5dHpNZW1MMGtMX3Fnb3JoU2VlNGpfTmFyMC1iZzR1Y1QwTWsifSx7InBhdGgiOiJpY29ucy9pY29uNDgucG5nIiwicm9vdF9oYXNoIjoibjdYX2xURkVZWl8ydzFVVUcwRkFOUXRQR2l5bU5KNzNPOW5uRUhVTXB3USJ9LHsicGF0aCI6Im1haW4uaHRtbCIsInJvb3RfaGFzaCI6Ik81Qm5xMVJ3UldLcGdBZTN4S3dfcXpvTGV0Ty1NVGpRbDlxS3hiVnpfb3cifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlVCZENKVlNkdTBLNVBUcE9aNE5IZzJHWlZxTTZ4LTVUZGJ3b1FUYW1MZm8iLCJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6IkhwT1ZMX3hBYVJzdk5lSlFVNlRaNWRkd0dFUENyWE5tTjhJM2tXY2gtUUUifSx7InBhdGgiOiJwYW5lbC5odG1sIiwicm9vdF9oYXNoIjoiZlRMRzFmczcxZGJLM2tCZFhEdGZaaVpjRHc3bDJaR2l5ZVM4Z1JxVnExUSJ9XSwiZm9ybWF0IjoidHJlZWhhc2giLCJoYXNoX2Jsb2NrX3NpemUiOjQwOTZ9XSwiaXRlbV9pZCI6ImZta2FkbWFwZ29mYWRvcGxqYmpma2FwZGtvaWVuaWhpIiwiaXRlbV92ZXJzaW9uIjoiMC4xNS40IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"1WELBeMa-KdbiEdWOd3EM9PqZ_e7YtbBIxxnR3AY8kQwnbT6JhpHl6evO3NrdV7qhHogSs_CZOnNkMEzn3JAqpK35EmsFImod5Is82BMJnXIUQkAldzTg6IMy7L9J4uTEWCZll1eK5ypiFM-KY5gunUtBHLsd2VKUQfX35rlFAfz_wND-6U9CHnIgxYyUisLEaVfibIg8378YRIXWdTuI9FwggNumNqun0EkYp2pg110Gl6c2Qj60wSR5saJ-lpXzZoUoVBcdDKtK--1hsqj54LwpMta4kNEdgOYCKimkvKMyoLWDbdhqWWv4sCC6o6hPs_IUMrww7q0UiKiUv2Vew"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"YqcXr65sbQDu50QzbNCdT7P77I9fUzmWvqxFWFEdvXtoH4igY6HeafLCvZn_6sYSBxJRhWVWQBiLm3i7u4BwI5h5b3Gpfsq661-kseJ_qzFYOBIgx0vYwFz97cq5O3XjU7RX7S9QTzDt_Dew7DJPdMJcOI3teqYS-dvuR_myJUoG7_xcbQyaISiRs4HK7kh7cZ0pbf3Ja8jYQ94c81FndLm1ZUUrlp8RHDX-jjU6Ea9G-NLpyteled81n5u85X5M4l8pOvs_F49If2KyBdym8PQ9cjUoqwSrkqBsB-VGMmMhKNSZ8yaIuV26lmFkUK696l29Ml900nNzUwnjcbnh5w"}]}}]
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "background": {
3 | "persistent": false,
4 | "scripts": [ "js/background.bundle.js" ]
5 | },
6 | "commands": {
7 | "_execute_page_action": {
8 | "suggested_key": {
9 | "default": "Ctrl+Shift+E"
10 | }
11 | },
12 | "devtools-bottom": {
13 | "description": "DevTools window to bottom"
14 | },
15 | "devtools-left": {
16 | "description": "DevTools window to left"
17 | },
18 | "devtools-remote": {
19 | "description": "Remote DevTools"
20 | },
21 | "devtools-right": {
22 | "description": "DevTools window to right"
23 | }
24 | },
25 | "content_scripts": [ {
26 | "all_frames": true,
27 | "exclude_globs": [ "https://www.google*" ],
28 | "js": [ "js/content.bundle.js", "js/pagewrap.bundle.js" ],
29 | "matches": [ "\u003Call_urls>" ],
30 | "run_at": "document_start"
31 | } ],
32 | "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'; style-src * 'unsafe-inline'; img-src 'self' data:;",
33 | "description": "DevTools for Redux with actions history, undo and replay.",
34 | "devtools_page": "devtools.html",
35 | "externally_connectable": {
36 | "ids": [ "*" ]
37 | },
38 | "homepage_url": "https://github.com/zalmoxisus/redux-devtools-extension",
39 | "icons": {
40 | "128": "img/logo/128x128.png",
41 | "16": "img/logo/16x16.png",
42 | "48": "img/logo/48x48.png"
43 | },
44 | "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsdJEPwY92xUACA9CcDBDBmbdbp8Ap3cKQ0DJTUuVQvqb4FQAv8RtKY3iUjGvdwuAcSJQIZwHXcP2aNDH3TiFik/NhRK2GRW8X3OZyTdkuDueABGP2KEX8q1WQDgjX/rPIinGYztUrvoICw/UerMPwNW62jwGoVU3YhAGf+15CgX2Y6a4tppnf/+1mPedKPidh0RsM+aJY98rX+r1SPAHPcGzMjocLkqcT75DZBXer8VQN14tOOzRCd6T6oy7qm7eWru8lJwcY66qMQvhk0osqEod2G3nA7aTWpmqPFS66VEiecP9PgZlp8gQdgZ3dFhA62exydlD55JuRhiMIR63yQIDAQAB",
45 | "manifest_version": 2,
46 | "name": "Redux DevTools",
47 | "options_ui": {
48 | "chrome_style": true,
49 | "page": "options.html"
50 | },
51 | "page_action": {
52 | "default_icon": "img/logo/38x38.png",
53 | "default_popup": "window.html#popup",
54 | "default_title": "Redux DevTools"
55 | },
56 | "permissions": [ "notifications", "contextMenus", "tabs", "storage", "\u003Call_urls>" ],
57 | "short_name": "Redux DevTools",
58 | "update_url": "https://clients2.google.com/service/update2/crx",
59 | "version": "2.11.1",
60 | "web_accessible_resources": [ "js/page.bundle.js", "js/inject.bundle.js", "js/redux-devtools-extension.js" ]
61 | }
62 |
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/_metadata/verified_contents.json:
--------------------------------------------------------------------------------
1 | [{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJiYWNrZ3JvdW5kLmh0bWwiLCJyb290X2hhc2giOiJNeDNkd1hLZTNLdXRUYk1GWWlhU1gySVF3Yi0tLTl0bG1kQTlGSlhTYmgwIn0seyJwYXRoIjoiY3NzL2NvZGVtaXJyb3IuY3NzIiwicm9vdF9oYXNoIjoiOEF4ZGQ1UGJNU1JKdXBtVmVGQWVzUzVUeXB3V1k5TTJhY2RHYzlub3hQbyJ9LHsicGF0aCI6ImNzcy9uaWdodC5jc3MiLCJyb290X2hhc2giOiJ4NlZPODlHMjBkWlFXM3RubXNZeEQ5N2tLdTVCc0E0ZFFlZWZ3UTU0V0tzIn0seyJwYXRoIjoiZGV2cGFuZWwuaHRtbCIsInJvb3RfaGFzaCI6InIzMFZfNUZPYmNteHpfVDBRTkF3d3JucDF2ODJnV2s1cG4xU3p6czFtS2cifSx7InBhdGgiOiJkZXZ0b29scy5odG1sIiwicm9vdF9oYXNoIjoiNzRSdkVRX3VhOVVvYWpzclJzYVZrUzV0M3ptLVpkMGlEd0NsX0dGeGNkVSJ9LHsicGF0aCI6ImltZy9sb2FkaW5nLnN2ZyIsInJvb3RfaGFzaCI6IjJJYzJqeGlxUklQVm9tZW9iUl8xMG1vSkJJdXh5VHdLeWROMDVEZ0JRMEkifSx7InBhdGgiOiJpbWcvbG9nby8xMjh4MTI4LnBuZyIsInJvb3RfaGFzaCI6IlRKX210OERaUTJjWWJQNk04Q1pubEYwaUREQUJ3aDhBM0FtRC1BNk11Rk0ifSx7InBhdGgiOiJpbWcvbG9nby8xNngxNi5wbmciLCJyb290X2hhc2giOiJZZjF1Y3ljekxvcjI1cWVIbWN0ZFNnM1JpVDZ5OEFZT3ljdmlqOFVSa3JNIn0seyJwYXRoIjoiaW1nL2xvZ28vMzh4MzgucG5nIiwicm9vdF9oYXNoIjoidDVfTjhhNUNPWGpyZW0zTFhZWm5jNVRHeWlFYTkyY0lRWlpkbUlTcFA2USJ9LHsicGF0aCI6ImltZy9sb2dvLzQ4eDQ4LnBuZyIsInJvb3RfaGFzaCI6IkRaV0lVbUhrNlctYXpMR2FIcmY5VTZ4ZUJpeVpuSzRNTVdWTFRSbFd2Q3cifSx7InBhdGgiOiJpbWcvbG9nby9lcnJvci5wbmciLCJyb290X2hhc2giOiJvUUhHUEJiQ21BQ3lSUW01SHM1Q1VvTGJEY21GaWJTU0hzOXpEdF9jZTZJIn0seyJwYXRoIjoiaW1nL2xvZ28vc2NhbGFibGUucG5nIiwicm9vdF9oYXNoIjoiTEs3OTNmaUF3V0FqRGM0ZmhiT1hCNGQ2WXRUcjAyc3M5VGlTSGZ5Sk5PcyJ9LHsicGF0aCI6ImpzL2JhY2tncm91bmQuYnVuZGxlLmpzIiwicm9vdF9oYXNoIjoia0VhVzZNY25vOFdtV1dhVnJlZ2NwTHVPZDZSWFJKSkQ2azliR0J2SE9MRSJ9LHsicGF0aCI6ImpzL2NvbnRlbnQuYnVuZGxlLmpzIiwicm9vdF9oYXNoIjoia290XzQxbFZmS25aQ2J5X01sWGFWY3lQQlFQamhOYXVPbVZtOXNYSUlISSJ9LHsicGF0aCI6ImpzL2RldnBhbmVsLmJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6IlZsdDlJQUVtdDJIRXVESV96ZUozVnFiXzZ6bkl6MG1zVk9qN3N6RE1Pa00ifSx7InBhdGgiOiJqcy9kZXZ0b29scy5idW5kbGUuanMiLCJyb290X2hhc2giOiJubHBKUUNEc1djT1hMa2VaZnVLT2JPT3UySEZkXzdlODJhUktsVUZRd1ZrIn0seyJwYXRoIjoianMvaW5qZWN0LmJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6ImdQYU1Pb2ZFZXJMQnVpbFA2QUFsRk5jTHRmRGhncnRjZkRSbGhmM0VaLVkifSx7InBhdGgiOiJqcy9vcHRpb25zLmJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6IjJKQTV6VnVieF9QaHk2Ml9YWXpJclVrR2VaMUM1M2pwdU9xQUdSQ21sWWMifSx7InBhdGgiOiJqcy9wYWdld3JhcC5idW5kbGUuanMiLCJyb290X2hhc2giOiJIMi1Yc09lRXp6RWVaT052OW1HVTBUU0s0ZWR0cl9qX1ZrTlJSVGJMSmJNIn0seyJwYXRoIjoianMvcmVkdXgtZGV2dG9vbHMtZXh0ZW5zaW9uLmpzIiwicm9vdF9oYXNoIjoiRXp6RFVMUlVaMjVrR09PZWNRRjdjN0g3SVBzQXp3amtuSHk2cEkwNmlycyJ9LHsicGF0aCI6ImpzL3JlbW90ZS5idW5kbGUuanMiLCJyb290X2hhc2giOiJtYmM1bHR6Wkw0WVlaT19DRkVoT2Q5TUhQY0s0LWhmbko2bGVzcHp0STRBIn0seyJwYXRoIjoianMvd2luZG93LmJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6Iks0UGVUOVg5aVQ1VGxjWGMtRDZEVllwSWJqTTd2blB1dUpSM0FIdG5LMUUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IkxIeXBZNk9UbjBqZDZOTjRuTV9jRDlmc3pWbnN5bzN0RWl3OGFmSXBncTQiLCJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6InhOTGd0VjJhQ0l3cVFNUFhiakxIY0NySTNtU0ZJTC1sR1Y2T2pRc2hFM1EifSx7InBhdGgiOiJvcHRpb25zLmh0bWwiLCJyb290X2hhc2giOiJyUmFiSEVvUzY2VjB6UTJLSjlzakNjZVZ4MlpMWGtZeS13NTZZZlBtQjI4In0seyJwYXRoIjoicmVtb3RlLmh0bWwiLCJyb290X2hhc2giOiItb2lsZnNZWFN4azFvT2hUYVRpc0VpdG9XYlo2a3VpSkdCV2h4bzhBakY0In0seyJwYXRoIjoid2luZG93Lmh0bWwiLCJyb290X2hhc2giOiI0RTFXdVR1UTFRWUIwNy1qMnA2RFhjRlBzSzI4V2ozdmJJbjJWUjFrS21JIn1dLCJmb3JtYXQiOiJ0cmVlaGFzaCIsImhhc2hfYmxvY2tfc2l6ZSI6NDA5Nn1dLCJpdGVtX2lkIjoibG1oa3BtYmVrY3Bta25rbGlvZWliZmtwbW1maWJsamQiLCJpdGVtX3ZlcnNpb24iOiIyLjExLjEiLCJwcm90b2NvbF92ZXJzaW9uIjoxfQ","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"MbYMkUjCUFNNLfBvyqPnpFrnFw0zdHxixDcKwtA8YgL2Pu0IPqNMlBFTBT4vWB0KwZihyeVF6f4YWum7dzcElqt0LcvVFOo5BdsVc_VW4qH_qctA2E18H8Hmeo9CUbD8y98WyYChh8z6UahDyx4mLjMWImAQTTIT989zU8e7LxWydn2Nix6-_r_oGLORQTwuwjmNo5w4EiYd056BCKbBgIXHMimYC5rgpjIQIepYXz3NqCQiQJfJ2J8SrrLKe1JjMM8QTlh5YyICoZqcoSe2QujxbLgdBrR_lLJbLZfBCAUv1XtXFbZq0SpbJy0iALmNpjetWfEUmt9QA3_1sbrjIQ"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"HBcEf1VpsTp3UGlRNydR-u8kxsreg6KKuPX5mPVqdEeiu6tot6UqGoFuK4iQhmoThLbqif0pvQ3eZW-FAyoPJJECjA-OCYn8AsVNbZ5i8aUHS1IOBuTfxiYEAHT4h-AzYAFJ_5iW5472N2Ndtr2bKDDXSJ91WgIG1T7iZYwFa75Xz9im32fCvBpiWKcCFZDKyOkhzuMjstGevGVg4mdyccdNwQzaAMlLXYSKTnwZwoVGkUhIXABjB9aGaYasHoPMlNOLDIQERCsJE3WCQimKHEjpcV3ZGbihlR7VIv7Bd8n8snmpbjiP4z1Mn5HX5szcvp0avOC4tit6mMhMzcnZYQ"}]}}]
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/build/inject.js:
--------------------------------------------------------------------------------
1 | !function(modules) {
2 | function __webpack_require__(moduleId) {
3 | if (installedModules[moduleId]) return installedModules[moduleId].exports;
4 | var module = installedModules[moduleId] = {
5 | exports: {},
6 | id: moduleId,
7 | loaded: !1
8 | };
9 | return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
10 | module.loaded = !0, module.exports;
11 | }
12 | var installedModules = {};
13 | return __webpack_require__.m = modules, __webpack_require__.c = installedModules,
14 | __webpack_require__.p = "", __webpack_require__(0);
15 | }([ function(module, exports, __webpack_require__) {
16 | "use strict";
17 | var installGlobalHook = __webpack_require__(1), installRelayHook = __webpack_require__(2), saveNativeValues = "\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.nativeObjectCreate = Object.create;\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.nativeMap = Map;\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.nativeWeakMap = WeakMap;\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.nativeSet = Set;\n", js = ";(" + installGlobalHook.toString() + "(window));(" + installRelayHook.toString() + "(window))" + saveNativeValues, script = document.createElement("script");
18 | script.textContent = js + saveNativeValues, document.documentElement.appendChild(script),
19 | script.parentNode.removeChild(script);
20 | }, function(module, exports) {
21 | "use strict";
22 | function installGlobalHook(window) {
23 | window.__REACT_DEVTOOLS_GLOBAL_HOOK__ || Object.defineProperty(window, "__REACT_DEVTOOLS_GLOBAL_HOOK__", {
24 | value: {
25 | _renderers: {},
26 | helpers: {},
27 | inject: function(renderer) {
28 | var id = Math.random().toString(16).slice(2);
29 | this._renderers[id] = renderer, this.emit("renderer", {
30 | id: id,
31 | renderer: renderer
32 | });
33 | },
34 | _listeners: {},
35 | sub: function(evt, fn) {
36 | var _this = this;
37 | return this.on(evt, fn), function() {
38 | return _this.off(evt, fn);
39 | };
40 | },
41 | on: function(evt, fn) {
42 | this._listeners[evt] || (this._listeners[evt] = []), this._listeners[evt].push(fn);
43 | },
44 | off: function(evt, fn) {
45 | if (this._listeners[evt]) {
46 | var ix = this._listeners[evt].indexOf(fn);
47 | ix !== -1 && this._listeners[evt].splice(ix, 1), this._listeners[evt].length || (this._listeners[evt] = null);
48 | }
49 | },
50 | emit: function(evt, data) {
51 | this._listeners[evt] && this._listeners[evt].map(function(fn) {
52 | return fn(data);
53 | });
54 | }
55 | }
56 | });
57 | }
58 | module.exports = installGlobalHook;
59 | }, function(module, exports) {
60 | "use strict";
61 | function installRelayHook(window) {
62 | function decorate(obj, attr, fn) {
63 | var old = obj[attr];
64 | obj[attr] = function() {
65 | var res = old.apply(this, arguments);
66 | return fn.apply(this, arguments), res;
67 | };
68 | }
69 | function emit(name, data) {
70 | _eventQueue.push({
71 | name: name,
72 | data: data
73 | }), _listener && _listener(name, data);
74 | }
75 | function setRequestListener(listener) {
76 | if (_listener) throw new Error("Relay Devtools: Called only call setRequestListener once.");
77 | return _listener = listener, _eventQueue.forEach(function(_ref) {
78 | var name = _ref.name, data = _ref.data;
79 | listener(name, data);
80 | }), function() {
81 | _listener = null;
82 | };
83 | }
84 | function recordRequest(type, start, request, requestNumber) {
85 | var id = Math.random().toString(16).substr(2);
86 | request.then(function(response) {
87 | emit("relay:success", {
88 | id: id,
89 | end: performance.now(),
90 | response: response.response
91 | });
92 | }, function(error) {
93 | emit("relay:failure", {
94 | id: id,
95 | end: performance.now(),
96 | error: error
97 | });
98 | });
99 | for (var textChunks = [], text = request.getQueryString(); text.length > 0; ) textChunks.push(text.substr(0, TEXT_CHUNK_LENGTH)),
100 | text = text.substr(TEXT_CHUNK_LENGTH);
101 | return {
102 | id: id,
103 | name: request.getDebugName(),
104 | requestNumber: requestNumber,
105 | start: start,
106 | text: textChunks,
107 | type: type,
108 | variables: request.getVariables()
109 | };
110 | }
111 | function instrumentRelayRequests(relayInternals) {
112 | var NetworkLayer = relayInternals.NetworkLayer;
113 | decorate(NetworkLayer, "sendMutation", function(mutation) {
114 | requestNumber++, emit("relay:pending", [ recordRequest("mutation", performance.now(), mutation, requestNumber) ]);
115 | }), decorate(NetworkLayer, "sendQueries", function(queries) {
116 | requestNumber++;
117 | var start = performance.now();
118 | emit("relay:pending", queries.map(function(query) {
119 | return recordRequest("query", start, query, requestNumber);
120 | }));
121 | });
122 | var instrumented = {};
123 | for (var key in relayInternals) relayInternals.hasOwnProperty(key) && (instrumented[key] = relayInternals[key]);
124 | return instrumented.setRequestListener = setRequestListener, instrumented;
125 | }
126 | var TEXT_CHUNK_LENGTH = 500, hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
127 | if (hook) {
128 | var _eventQueue = [], _listener = null, requestNumber = 0, _relayInternals = null;
129 | Object.defineProperty(hook, "_relayInternals", {
130 | set: function(relayInternals) {
131 | _relayInternals = instrumentRelayRequests(relayInternals);
132 | },
133 | get: function() {
134 | return _relayInternals;
135 | }
136 | });
137 | }
138 | }
139 | module.exports = installRelayHook;
140 | } ]);
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/css/codemirror.css:
--------------------------------------------------------------------------------
1 | /* BASICS */
2 |
3 | .CodeMirror {
4 | /* Set height, width, borders, and global font properties here */
5 | font-family: monospace;
6 | height: 300px;
7 | color: black;
8 | }
9 |
10 | /* PADDING */
11 |
12 | .CodeMirror-lines {
13 | padding: 4px 0; /* Vertical padding around content */
14 | }
15 | .CodeMirror pre {
16 | padding: 0 4px; /* Horizontal padding of content */
17 | }
18 |
19 | .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
20 | background-color: white; /* The little square between H and V scrollbars */
21 | }
22 |
23 | /* GUTTER */
24 |
25 | .CodeMirror-gutters {
26 | border-right: 1px solid #ddd;
27 | background-color: #f7f7f7;
28 | white-space: nowrap;
29 | }
30 | .CodeMirror-linenumbers {}
31 | .CodeMirror-linenumber {
32 | padding: 0 3px 0 5px;
33 | min-width: 20px;
34 | text-align: right;
35 | color: #999;
36 | white-space: nowrap;
37 | }
38 |
39 | .CodeMirror-guttermarker { color: black; }
40 | .CodeMirror-guttermarker-subtle { color: #999; }
41 |
42 | /* CURSOR */
43 |
44 | .CodeMirror-cursor {
45 | border-left: 1px solid black;
46 | border-right: none;
47 | width: 0;
48 | }
49 | /* Shown when moving in bi-directional text */
50 | .CodeMirror div.CodeMirror-secondarycursor {
51 | border-left: 1px solid silver;
52 | }
53 | .cm-fat-cursor .CodeMirror-cursor {
54 | width: auto;
55 | border: 0 !important;
56 | background: #7e7;
57 | }
58 | .cm-fat-cursor div.CodeMirror-cursors {
59 | z-index: 1;
60 | }
61 |
62 | .cm-animate-fat-cursor {
63 | width: auto;
64 | border: 0;
65 | -webkit-animation: blink 1.06s steps(1) infinite;
66 | -moz-animation: blink 1.06s steps(1) infinite;
67 | animation: blink 1.06s steps(1) infinite;
68 | background-color: #7e7;
69 | }
70 | @-moz-keyframes blink {
71 | 0% {}
72 | 50% { background-color: transparent; }
73 | 100% {}
74 | }
75 | @-webkit-keyframes blink {
76 | 0% {}
77 | 50% { background-color: transparent; }
78 | 100% {}
79 | }
80 | @keyframes blink {
81 | 0% {}
82 | 50% { background-color: transparent; }
83 | 100% {}
84 | }
85 |
86 | /* Can style cursor different in overwrite (non-insert) mode */
87 | .CodeMirror-overwrite .CodeMirror-cursor {}
88 |
89 | .cm-tab { display: inline-block; text-decoration: inherit; }
90 |
91 | .CodeMirror-rulers {
92 | position: absolute;
93 | left: 0; right: 0; top: -50px; bottom: -20px;
94 | overflow: hidden;
95 | }
96 | .CodeMirror-ruler {
97 | border-left: 1px solid #ccc;
98 | top: 0; bottom: 0;
99 | position: absolute;
100 | }
101 |
102 | /* DEFAULT THEME */
103 |
104 | .cm-s-default .cm-header {color: blue;}
105 | .cm-s-default .cm-quote {color: #090;}
106 | .cm-negative {color: #d44;}
107 | .cm-positive {color: #292;}
108 | .cm-header, .cm-strong {font-weight: bold;}
109 | .cm-em {font-style: italic;}
110 | .cm-link {text-decoration: underline;}
111 | .cm-strikethrough {text-decoration: line-through;}
112 |
113 | .cm-s-default .cm-keyword {color: #708;}
114 | .cm-s-default .cm-atom {color: #219;}
115 | .cm-s-default .cm-number {color: #164;}
116 | .cm-s-default .cm-def {color: #00f;}
117 | .cm-s-default .cm-variable,
118 | .cm-s-default .cm-punctuation,
119 | .cm-s-default .cm-property,
120 | .cm-s-default .cm-operator {}
121 | .cm-s-default .cm-variable-2 {color: #05a;}
122 | .cm-s-default .cm-variable-3 {color: #085;}
123 | .cm-s-default .cm-comment {color: #a50;}
124 | .cm-s-default .cm-string {color: #a11;}
125 | .cm-s-default .cm-string-2 {color: #f50;}
126 | .cm-s-default .cm-meta {color: #555;}
127 | .cm-s-default .cm-qualifier {color: #555;}
128 | .cm-s-default .cm-builtin {color: #30a;}
129 | .cm-s-default .cm-bracket {color: #997;}
130 | .cm-s-default .cm-tag {color: #170;}
131 | .cm-s-default .cm-attribute {color: #00c;}
132 | .cm-s-default .cm-hr {color: #999;}
133 | .cm-s-default .cm-link {color: #00c;}
134 |
135 | .cm-s-default .cm-error {color: #f00;}
136 | .cm-invalidchar {color: #f00;}
137 |
138 | .CodeMirror-composing { border-bottom: 2px solid; }
139 |
140 | /* Default styles for common addons */
141 |
142 | div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
143 | div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
144 | .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
145 | .CodeMirror-activeline-background {background: #e8f2ff;}
146 |
147 | /* STOP */
148 |
149 | /* The rest of this file contains styles related to the mechanics of
150 | the editor. You probably shouldn't touch them. */
151 |
152 | .CodeMirror {
153 | position: relative;
154 | overflow: hidden;
155 | background: white;
156 | }
157 |
158 | .CodeMirror-scroll {
159 | overflow: scroll !important; /* Things will break if this is overridden */
160 | /* 30px is the magic margin used to hide the element's real scrollbars */
161 | /* See overflow: hidden in .CodeMirror */
162 | margin-bottom: -30px; margin-right: -30px;
163 | padding-bottom: 30px;
164 | height: 100%;
165 | outline: none; /* Prevent dragging from highlighting the element */
166 | position: relative;
167 | }
168 | .CodeMirror-sizer {
169 | position: relative;
170 | border-right: 30px solid transparent;
171 | }
172 |
173 | /* The fake, visible scrollbars. Used to force redraw during scrolling
174 | before actual scrolling happens, thus preventing shaking and
175 | flickering artifacts. */
176 | .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
177 | position: absolute;
178 | z-index: 6;
179 | display: none;
180 | }
181 | .CodeMirror-vscrollbar {
182 | right: 0; top: 0;
183 | overflow-x: hidden;
184 | overflow-y: scroll;
185 | }
186 | .CodeMirror-hscrollbar {
187 | bottom: 0; left: 0;
188 | overflow-y: hidden;
189 | overflow-x: scroll;
190 | }
191 | .CodeMirror-scrollbar-filler {
192 | right: 0; bottom: 0;
193 | }
194 | .CodeMirror-gutter-filler {
195 | left: 0; bottom: 0;
196 | }
197 |
198 | .CodeMirror-gutters {
199 | position: absolute; left: 0; top: 0;
200 | min-height: 100%;
201 | z-index: 3;
202 | }
203 | .CodeMirror-gutter {
204 | white-space: normal;
205 | height: 100%;
206 | display: inline-block;
207 | vertical-align: top;
208 | margin-bottom: -30px;
209 | }
210 | .CodeMirror-gutter-wrapper {
211 | position: absolute;
212 | z-index: 4;
213 | background: none !important;
214 | border: none !important;
215 | }
216 | .CodeMirror-gutter-background {
217 | position: absolute;
218 | top: 0; bottom: 0;
219 | z-index: 4;
220 | }
221 | .CodeMirror-gutter-elt {
222 | position: absolute;
223 | cursor: default;
224 | z-index: 4;
225 | }
226 | .CodeMirror-gutter-wrapper {
227 | -webkit-user-select: none;
228 | -moz-user-select: none;
229 | user-select: none;
230 | }
231 |
232 | .CodeMirror-lines {
233 | cursor: text;
234 | min-height: 1px; /* prevents collapsing before first draw */
235 | }
236 | .CodeMirror pre {
237 | /* Reset some styles that the rest of the page might have set */
238 | -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
239 | border-width: 0;
240 | background: transparent;
241 | font-family: inherit;
242 | font-size: inherit;
243 | margin: 0;
244 | white-space: pre;
245 | word-wrap: normal;
246 | line-height: inherit;
247 | color: inherit;
248 | z-index: 2;
249 | position: relative;
250 | overflow: visible;
251 | -webkit-tap-highlight-color: transparent;
252 | -webkit-font-variant-ligatures: none;
253 | font-variant-ligatures: none;
254 | }
255 | .CodeMirror-wrap pre {
256 | word-wrap: break-word;
257 | white-space: pre-wrap;
258 | word-break: normal;
259 | }
260 |
261 | .CodeMirror-linebackground {
262 | position: absolute;
263 | left: 0; right: 0; top: 0; bottom: 0;
264 | z-index: 0;
265 | }
266 |
267 | .CodeMirror-linewidget {
268 | position: relative;
269 | z-index: 2;
270 | overflow: auto;
271 | }
272 |
273 | .CodeMirror-widget {}
274 |
275 | .CodeMirror-code {
276 | outline: none;
277 | }
278 |
279 | /* Force content-box sizing for the elements where we expect it */
280 | .CodeMirror-scroll,
281 | .CodeMirror-sizer,
282 | .CodeMirror-gutter,
283 | .CodeMirror-gutters,
284 | .CodeMirror-linenumber {
285 | -moz-box-sizing: content-box;
286 | box-sizing: content-box;
287 | }
288 |
289 | .CodeMirror-measure {
290 | position: absolute;
291 | width: 100%;
292 | height: 0;
293 | overflow: hidden;
294 | visibility: hidden;
295 | }
296 |
297 | .CodeMirror-cursor {
298 | position: absolute;
299 | pointer-events: none;
300 | }
301 | .CodeMirror-measure pre { position: static; }
302 |
303 | div.CodeMirror-cursors {
304 | visibility: hidden;
305 | position: relative;
306 | z-index: 3;
307 | }
308 | div.CodeMirror-dragcursors {
309 | visibility: visible;
310 | }
311 |
312 | .CodeMirror-focused div.CodeMirror-cursors {
313 | visibility: visible;
314 | }
315 |
316 | .CodeMirror-selected { background: #d9d9d9; }
317 | .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
318 | .CodeMirror-crosshair { cursor: crosshair; }
319 | .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
320 | .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
321 |
322 | .cm-searching {
323 | background: #ffa;
324 | background: rgba(255, 255, 0, .4);
325 | }
326 |
327 | /* Used to force a border model for a node */
328 | .cm-force-border { padding-right: .1px; }
329 |
330 | @media print {
331 | /* Hide the cursor when printing */
332 | .CodeMirror div.CodeMirror-cursors {
333 | visibility: hidden;
334 | }
335 | }
336 |
337 | /* See issue #2901 */
338 | .cm-tab-wrap-hack:after { content: ''; }
339 |
340 | /* Help users use markselection to safely style text background */
341 | span.CodeMirror-selectedtext { background: none; }
342 |
--------------------------------------------------------------------------------
/boilerplate/extensions/react-developer-tools/0.15.4_0/_metadata/computed_hashes.json:
--------------------------------------------------------------------------------
1 | {"file_hashes":[{"block_hashes":["lcJxOEKL9Y120vnl3hHSRXY4cS8mURKjsTXmRClrSk4=","Qu0mBL6Uh2I/Q+ZLXtlKRW0lSFBgk/MqbYEKGoGdb9M=","lTCGuIbJOHeSJ2sUJS1wsboYiiQjSO2IjTqXSgX4WKM=","giMGvZ0zjJFp3CAd81LeBcM+iqPv7nhL8pMf5q4q6cU=","v3tHCBabRZOp/wGXp0OvOMVwDetrZR/wYkHkfHrobpc=","iZOBW4Ny1hmT1Ngm2JTUOEP2tdFLA3gOkjsAfesr7mA=","ylY+8jP5kCTQQvcp30UpksJK3QhyOKpVzrfXhuYamWI=","j6RGtw92sKRK9dFU0u+c7dGd+mIQ2kv2+fsoDJVfv9E=","wDfRm9WIty25I3kNHklFJtlYT0f6du2mwoYSkIgqDzQ=","VWd2V8FaDxTwZOECfRWKvnPIHpmqbdX+dNrtRs3smKA=","k+e6eedWC/vovqJyo1LUM3vZFYQruPNgxj0DntnMnMc=","5C5upXw2vLqWYx+8rd4rkBEZ2qxg84BCa3qn4LJCoBI=","sG+vrf8sm91Hx68FGhPU3KfP8WRHWDtRC29Dtq6TeWc=","i2vrch6vEo8er+YNCF4uVkP68TI7p4J8ZSoGJO+tu/Q=","5kt8TnjylVXNjzHw2QqAxT7GzucFKiydhE6xRS+S2KQ=","4J1RsZTzd0rRJq9qz9NAEXF2JkQL1101oEBkepMyRsw=","+0Z5vJzC9eitwjOlgMv5oxOo2qoYUSTPB8g5KhqjvPI=","VefPdxZoC7H9vKZBoryOqMmX+Bhr7qD3eZ5VSQp1qWc=","qsVSgpcQzqa6BviDi65TxZvm31BMWpNzna5yimbtHAo=","q/CBuK8g6EyxW1UrvladK3ohXk3qcb/L1wNkb7JcVtc=","HYTRdnEuQFEFZn3CmK/nEV9+L0SRr65YA2RKTtv2yMw=","Ftb9JathOLAU6hhApOThTXtqadbBkv1rHw0/qIbobHA=","zZm3J7ZKjEK2CYeYTp2LeqER/pjGM+/g1A8ZbyWmWN0=","7DKsWw7LO5LSZnQh9+9ebQbB8QdFLUkGGFKqLOa9ObQ=","dXZngiHLg9GJ5GZq/MS8/1yXUwFq0cgJdJUMAmro7yc=","VSusuM85UpollLR3GtdKZNiANRk4X6rBPNfxypxqy6E=","PwTbaoiUm2DFJTLJ3gN7Vj4ZT/HLq2MuNfBkgpT40dA=","GEvsWHRpuZTWvx5wcmokdv5xX3F+SkJ8X9HWGcf/I2Y=","VclKjGU15ztOlVoFBL/and/T4nyxWDoZIgIArST/65M=","ISgxTuXGYmaKIUWazaK2+20e4XH4zvz889+J+p15zR0=","4jYiKQwr1P6uYwCKyD6c6Z8abTrc4M4XlQ0qLYc+AXA=","xlQXiD4Kl3M/xvmwKSupjZ4sg+ggLEgLxl6NW9LaA1E=","no8QmIHlPweg8nw0yKRUpYAWYCDV1Pmk4BCNRk67mp8=","5D/KggtPbUgq7XrG9FKENiheulceO+DQE+OZAtywgo4=","zpf5yglNm0AiAcBJfV+qTHOFtPZXUQg+L8j0CKPEUsY=","4NGu3EIyoufaBrr7Qwbozv2qkkGeZqrEbgNWCx3UYEg=","Wr70T2ax6xMdId9NGJS2kZjz273j94w9Llhy73fXk2s=","iZnPi0c4zvAkS0MVec5TIRvLEX2h9mgIoj3f0mF33po=","lHrUSQ7RZp1nTewYT8GGUtqvatY1iyWf8y5nugH2CGg=","5MwoOztL2BauSQju/NqPWdtcpClU3MlHP6mtUQoCvn4=","tjPL+DY76BZ5dOp6WXhngtjAdtfPzI6aSOjn66VJ5W0=","QqZAzccQwt/gPLBxcV2Kny73A0Elr9SywEKCdDon2HI=","GDOIVfHgMrSmhuuDnbdmGF0W9uZSOsmwdeEg/2Hgca0=","Va8M+drpgHOOF9Ew3Taw6XpiGPBCIGbjvT9Z6pnXYUg=","d5yYspWkUxq+SczkY90yBu6ffMIbfaFlIJehnXS2Rhs=","SSOqAK3OFHEnbq2aHKyPcmrGE2Lxvg3e528+Vf/bcfg=","BHmmkHTO/MYim17ojFtxGq61qK4Vh8V0OIQXEU3OtXo=","GXHkGxtw+mu5UohrRv1SPPLMIn6LraO3sjgXorb2f0Q=","m4t60uN38RqLamc67wGe/mi2OE3De/F6j6Bxhp25t2c=","JneM5gl29AS51EBjpHE5PbRteK/n7EDqnmeQH629QmY=","sXzs9Coyy5lGReAtHbGxBFYLZdiq9LD5nbozbRyNdWM=","yfI3v6TeQDqe+CGoHSpMTnB/J5SnxgiqEBK29KAzdQ0=","bExnEvZ7rBCtP6A1iH9nRj/0nAwJNP8gpy6G1BaAI3o=","yEJyl42VVq3W1b0WyDekqmCIe12m6k64cu2u0ii/cx8=","V+9Le4QqyQ4lU0dwXf6HghJPpUekiU93RKC/nzfEPQk=","qcYwQM8FqUM/DbHKcLe2gnkkh7PCKzyYCf0k6u3SkCc=","k1LFpm9PAsSyTmEWQsXqK2OJw4zDhir3ro9/NWHaaak=","prnEPyY3sNHBNPGW3mHuDEXedqdI0FzzvJKgzUzoTrQ=","TsvRwNnnR96vQbbdxhU9xs36SkUALdvQVnwQ3cZx5AU=","ZWn6eniP53OSHlSP0NiJEW720/eHX+L44reBoLY4a5U=","7+J4AgVuiHXEdKGc7XTyRHQdOetJhqBJr5IuV2Z44h8=","lakhn72ut5lxxhJCYJ+f/+mNakcYK8yzRUyjQQCojEU=","Dwe6C4yctvYpSX8+OQCuVvyTEVwWYYLjdTOK68Y2z/8=","EA9pgdtt2xT8xbS10w3ldRStDCb20+ayp4QlSZWIQZ8=","SmJb5PJqJtnGgiGrpaXt4I0jogyTLRlcHC2LeOUFsC8=","PUIdbSe2kkj+//UPWExui6RxTGuylQdwhyZ/UmOdUJ0=","2CRqbE0BlFRdSBlnuxZbe+5AKb2T6/zpa1fKU+7f024=","6KhqDy/UopNmAVrECuFT5Vcf2jStysEGvxkRedu+2Gg=","z4nG5boyDew9DhEqjJkNHxXDOL/zYtpGO4MlrID7Ll4=","/RVrSZEAzk0P17K7V+bUHTKwyBZlzsDGAxj79UMoV/M=","oVeBV1oGMiLDiidrT3yVDmp1a9jWUa+wCMFAS4hu0AE="],"block_size":4096,"path":"build/backend.js"},{"block_hashes":["R21ABjrmW7qeIQZiPJr+4NtCwMAB30tblSkqEE2MUOA="],"block_size":4096,"path":"build/background.js"},{"block_hashes":["J3jAu+7DEWwRvMzo3kFAOb8Z2Px5hEtmmTnJv6q5c+k="],"block_size":4096,"path":"build/contentScript.js"},{"block_hashes":["H3AoqbznDBwiZs7L9Z+SS/tbvF7nGmp/KlAbq/d1is4=","kM+5DqYvkq/uCaQJpMpaE1uCwCgOk9ETHmOXrq6Qx40="],"block_size":4096,"path":"build/inject.js"},{"block_hashes":["z+V57jiha3j3dD7OiUseoQtHfnw12EpUTXNTz/wpnDg="],"block_size":4096,"path":"build/main.js"},{"block_hashes":["BguO+RrNp3V2Gwib6VdjY6T0z+l4nHQ4MdvO4QXoioc=","zxPEJ/4cdokjRSCpePzWQn5lSCdOicKHACqHgT2y6vQ=","eY2YMOV3EPGVDh1JA0QCwdojFIo8IGKqG+3aP4CSOdw=","LXYIua8jR9JkYD1B1FrxQ4R6z4STFKyXsChMg6sq3RY=","GmK/PpdNmd1DBacmt5Ll/p3h9y4HmgLqzD2ppRO4LPI=","OehoYMYN74ColvmqxaKMtyMF0VS819sDHSyU19bTesk=","j3QmodeTkhRHzaqStKUVjfarNrwJgYkcNNWxtrCGuX8=","FDAzEcxBX/KEVfLoHFxDFqKVr50cytKjvAZs988eBFI=","zaxXWy3c1kDnqxmPgpQtDEnx71bqpY5wa0NYCm2Mnm0=","H8PZcUfudbx1eOkVq0DA7wg5pEdMMtNLJVFf7Cf7VRo=","jF/y1K0aRXvnXthI/ZKHLSKckZrTU2zJqhHKYDLuRXk=","nJsTaqTC93HkhXSfnp/w7RGTqgjrzct6QXoHjuvFv+k=","XfdQFiJbsfrq5gyIY0/jxnxbWl65peO6TpnbhrCm1nI=","EfEMye8wZhV6KRo/g7yYwJEwgETMdeHCOz2C3mUz8AQ=","dt24a0729vAJJ+DsOplyRUrzUhHkWy9j+yKGB2b6pn4=","KfNnWhOdLb+t31KyuVExM6jZuQ00VYDoPb60c/IG/jY=","k9e0+aZjRfS99lNYGM1ePn6qDtHv6Vy47yoHpPtsVPI=","hepSBuX8P1c3DakxG+pJTGMsqe/gLk7FTj+IJhcs8bQ=","9tz1PnvpgSfsVktqjsDAl/GHNGi8Nhos+N/RJNSfjIU=","vvAz6uTBgvxoZ9eoTHrLjK9pSUmPSdwHlEg/XfqdyMM=","qERvAxV4swJd9rzIST9PR68n719G9XEVTz/wTRbdtLc=","k1rxiww3giBChKSFfpbm+l1S/U5rqYqos8KkRzEkvlI=","RKUS1x0E/t0yabMNTm5AfNIrq4dCmnQcDUvHGjoj1cA=","7GlW4Q93purB9pRxW6h2owGMz1hwLrBO2Yl2alEdetA=","RAsGKghp47BkeJG/dwPG4zS0ox1KZmhzbJMsr7vSfFU=","JPxMRMkS46K6W3mNXZYqdUvUPIJtHrXg8QJ5O3N9sQc=","RikcgduM2/KwbtbceSmeJLlZB6mA9Xzsjo2bC6z2Gj0=","b2ZZrvgzW/IitUeAx/dsTwK0ms7MxItmfO1HM0InJUg=","LPD6WtiZEy4kgj+fo1OzXSvQddM3T3k4PDyuGCSwp+M=","LfI4ZerC8/pA1GuTHKqHA8JQe5e1//642xdhSfYjORQ=","j4rihyj2RTk7gOQMmGq1IjfSp3oikN3Q0Nqidn7XIIE=","WSdwBONg/rsbdbQCoKHxBrbchJngP/butpnTZM0Ig6I=","7UrX6kLjWFmWYZPrNvBnnGVQCGTkVcEkM4Ow86MznRI=","XNP+eBhsCALDoKtwdVROnYP+f4enaH+UulyFmtyI1Ig=","aTB7cmnfEW+KOBQVs+bXiglN38ssfkOPnVhfnkTm1xk=","z46nAK5biGKaI0NyuRkJRaT/yqkoL7SS9vf06rTWF1Y=","NZTWCiErJopFHXCTS+gVDHsMdydqSUn8Ojg+BTYqhaU=","D8gbkbI6jJOjLkbYXwFrV1Vp0IO+z46tBhxWSLiF9ag=","FmgUAX69zAU5M9X7MZ//s5hKCu8HyzGRvuEv2DCZWDc=","rYIVloHoXV8Tn52q+N0qMvZe8yNRPlxU5whE94ao7Zk=","9JRLPy47Ua947gBXO2NDf/ecZRpsmWGXi0XzmvGYtCY=","jO6jUipX0j7ZFOyRDrFONfuf4uSwuflklb1iVst+gac=","TbGa9OZGvB9hVauouGiWR+9xzwCbcFnT+Bs5RO45Qk4=","TAL8nLsWlAzkP+OyOkAyh6oMxzfz0naiPH+sCwhC9vo=","v/uKY7YHQ/wWDmZsan4uxaZGgvM4dQW8APjk0PxKy6Y=","itGHhoj00YIOFbijagNaHT0DxvmcZEBhFKU01ETo13w=","rDuFT1TBlDsKm40xLUyqgZ3PBX30SBguqo9L9y3PsW4=","yHNfxE1rSZ58nyfzoWCrvBEBM5DP5P41H25ifIP5AJ0=","ZBYxsj6mcBkYJbSjvWXmR2+72pNcv6WMFeaTFxH87y4=","AIaPXqvdAOWy6ZISCK1thJGuAXeyluE+NaT8/WUNBvU=","MFF+i73C0mw4X1yEsxT/s7o+kGdrPXVEC7076wIRz84=","uJkkp5QRqrHINzSyJ3qH8SI1eKJApzSaT/7Mtm2tFQ0=","aTReQZn80k1pYmB7WFEkF2Bd4a8YrWyjPNuDFhqg2DY=","QvdBOIsJ9pC2KMQhEQUklOSZ1DvRsGOcISNJtmsSUSA=","CwreH74wFxnIj9Mjg0bp0UR5my9XClD/Pxdz2Ny4Pc8=","cb9pKuPuV9qaFXYhBG9qJepZLW+2tjaCZwNUeX9k9M8=","v15YeNa/sI9xaoBH73hUaNChF1EC3FtNTkiPKW0E7Zs=","Ui0NP89KkXzLfzOJ3apXGofLd41hU29grtGxt5aKf60=","30ItTbDo+I+KdAZTXdzkD7tgh82oQkLYvp/SiE2xGTk=","3ZvzPqf4O3DZ38nR10Khbx0soUX3aCme4DKUkA0nLSs=","3MRGPc1kFGn1J39gCsgB5ZvOIHHfu83pxh6Sr1D5JY0=","ppTWBBkw45S8lH/0vjiGeXC+jF3XaZaM78zdwi2KqdA=","Bd9bx/1paC8z6par6DuS3XROOxEiZUY/N4+lB3ZrIFw=","bnA7n4r2AxCbleQ9eryTwxyqzfuHujy7SVNGb/OZ68I=","4MSIcfh3toDurLGWe7fr2tyUE5IzBXb1SWAkaPhN6cY=","JsLaXIBc+EElcFtcoHHaBi3DLVhxM2dWGZiSaWN9+CU=","wTvC29qzx90BA1BZSdsCHQGBjBfIhrSSIGUzctiQ9Kw=","lDM6zu02aDh5sfiNMAZuDC0Niu6ZfrSft2TBLLug4IE=","hPYez3BicE1FSkzZ28KHhys/ilxB6Pd14FXzS7whRaM=","0wN5gqJxE64j3VuRG/G/0E5ftGAUdBMQgM0XdWmHXBs=","gLlPxoOE9wFq8YXNyMyZtDwiWkcNANabuMF2drD0Lxw=","DpNgvHwhAjblj/Lv+cV96K43o7kmwmWL5Cp0Yrraga8=","5j3x2AVox0uef9W2hOlBsGkTd/ar+TRK1GRvgx+Xjho=","HH+WHrNHfOhGqEzOOMNmlL95Yc2hL477nSY7GF8WCdM=","WVx02T9b+bf1gQZirRXZz70jAJsuBNvwhhxBFo+7T3c=","y5kUPEWwUXAbQuSFG3d9GgKq8KZC0eC74cdDYTQBCSU=","DRu75NYWrlJVU0W/eBYGnupkEwYwQi1l4c/WPakSfYE=","7HWvM/kb1YD3wRllKe5fFyS6BRY0taggylqW/VmJeF0=","Dh4S1U0u7TBHGgksd9crRRZiM++lwQNj2YoXqgXbFrE=","TTWEk0W1fPaTSMQHQ34jWpL+KYkNcjR3t/8XaZ9rYP4=","nnDERBm23bw/H1rEUIashKhLrFWIE0jH88cK/AQur/8=","5RZgjFN0M7Cj0huvfW0ZMCsKvkXQx0RLRnjMrxSj3B0=","ddw0eCQSSB/TRAg86PXK9J8yrbEYJLam5VibsBPPrfw=","1ISUBXXYbVxWHaLtyVGKSDVvM/7nG3haVgfjHkEE/Bc=","EVymVBw0Qenh79lVJv53Pgsxeh8taQQUZnvHJ/RiZk0=","GNCiXt0j9U1g5I9a/caARsbc5ZWzLihyy7TnBzsUbAY=","17ml2zbDw2kMTD4fmZlH+oGXH11wP5jukfUnOEYsnRg=","WGVu/SRO4p6HnsE0v4fOK7onnap7f47XgrQEMYnuum4=","x1HaqVliOJyv2w3+yf7D6LqgDHobmhuHTDrELU+CzoQ=","BbhhXdjkISz5ZzVAswoK5fCYY60WCbKNBFzRj+db9n0=","STZlx1M5O+DBEi6jB2bq7cCedjBo/re3BlUWIjdiUOI=","+M6CHfoR6NXNMst/zio9sdOnyui+TurpkN6jkichKEI=","3PKW6eerlbdI+SZPEKaSxMqjZQDFEE5rkTnGa+LBdWc=","tom7+nvO/8V9dz66CjfuUyn1uKUM2UOkVp8BttffZqY=","e5VLep79k/5Fmdo6S0HG3vup3WoMqJg456V6r8EJdvY=","Gwux4yYCxJMyvznm60xd+RLDhwmbnsORo2yYBJcJvkI=","3QQttHk71lLfm6QIMgPwJx5AU/lLloavjJ6523E86Rk=","BPQq3huFkiX4i/6NJgMtGcjtp0by+PqmOGS+ysHZTz0=","cKBMDeAYERNg6RcmZN+Vpn00TEcSPVW0LeBwEdZ/LH4=","g9R5HhiiwQFWBxZ1eu+3I3QbokEG2qeodBSn9f5ecZo=","9kt7jF0JQZumhYadrHnG2rj+DoFu6KPNovXZ4x/l2n8=","ObQLeO/f5x9mZ4jqQE6qNteGkvvwFZwn3iq5kvs7TIw=","+86deZFgAjF3c2Xa+iISKykujJHtRLCpEdAR8p2eHUQ=","DAI/Vk9wC58S9CrtTRuI75RZdroiJs33DNWNn9YVel0=","wqgzd1MxytgNxVEwOSi0HyqbX1YmLrZbV8N0jRKybpY=","VtC0BcTPNZfOGRC3axva0xkrflYdcOYtUvh3TgjRkLY=","kTVdzJWAj3T02vfCO/+eyt79W6noMKFFgU+Z1klqkUg=","kQIAT2Gd6fV2AcN+sz0zSp/DteG9Jf/StBYWZA4Ovmo=","Rk+DXzE5l4nYbZhb2rQwVMNXDZ7KGLlOWjaO25UqKIE=","n6otueCvS/XesohrdTUnaVE9K/LiwUN06ol4DuTFC0k=","u7g9Z/T9i8v54BJYHeKJksVdsk22v+XMkDIVoU5eo14=","kinK+Ex+3Wd39WMdhQAXPnqsos/M7G+7F1G6O8FcnBU=","/9lgUrXZ1eZxTOKrwun5atZ+IOd5WyNngY5cgmOixGk=","jhhcxfvi4/gX2BLscgO61JwW0kHBcfyeWxHgjWeUlS0=","Cd4q1jS0Vxtd2Rdww/H6Wz3bZbQUw7oyH4/CF1JfGws=","B4s1DbMRNF/g6MtiM2/OJvE65b152VeIVsm8pJw2Y70=","5B6iYFMFf7jlbct1/XaXwhOzFm1e9R254wj2m7GtfaE=","xlMyf0DHrfQMKsz50E04RB4nb2RTPrHMjk+OB7sVkSI=","LUZu0xgx2Ava21gZiJzi4opoNPAvhxBC4DAn+W2Xa7Q=","0NLt4I1GbKQy/GkDMETvSGE8AeS2DBFpCiIe9H9Gjlo=","eMOCq3yDodF3D3KmwSs6uX8l6HcDe8kNlQw8tjfmI9s=","sN7ibIz2qYfohWIAxvx4gu95f8nYMgbWoZ0NqjeIP1Q=","wIpAE5DN6aMmlYNtWIK/Usf7FcdOglkgi3aXJiKBhC8=","QwANip8CkhqOpl4n0MaMy0R6s7FV/q+PzEqCjBhqLl4=","HFCBUOQQNPcxMHdMg4nP/EId+tcfXlxwGsgImDeg9vA=","IA5cTV/QrgIIrGjY2kRICdg4w0svgDUxFw3NsMrVR/4=","ZNId3K3MkqFwY9K+AoBbnGkddoADfeEPv6NczNCwk98=","WXuxAzSbTnFGy0QKuQEsIFwtVOrLPN7onfBuQa1yTVQ=","oWM3Stgq9lBM02PpVxzXXwkNDwfXmRyFdhPRZX91ElE=","WInHqq4hGts4DXCY54gL87Wghxx31QDklZg5VnecSS8=","O6rKgj38FGnaAJ26/bfE0KPBkuIS8aIlzbFNJ9Axw6U=","Sd1idWSjN5g9jymMKQsZpc8jaxzFXwKA1z55h/F78L8=","e8b6p7mqQ7vRAB8p4c0KSxKwkpBmzX+rmrTuHUrF1b0=","Yb+289V10ZK53um6dCkkiqMcRqlZrLx+QqY1k4KzQlw=","9l0GkbVM06B8npYeZ7KRjAaFe4PIaYt4X3oLXawvDHs=","UODN2pMr/luBkH8oPV/Z48jtPTsYlJukeCRK0+Uoan0=","EzwFq+QgiLfbuhgwIzxGtXzVd/Yyxtt0hNVkk8lkJUs=","DcGM4iHU97Gh72MCF1ENw0kD9wpVzkFrHRivTWYq9JY=","Qg6UEcw55qEJmXjq98RWmQ/QV0gOQwocjTpZ5B4Lfbo=","bWdScXwznzk+yyriXSgaQeOc/LI4HPHoz7M/44TtLK0=","Z0lS9tIbS4LR7xXTkuXFtvkiqDB0cCP5++F1ILKNkjo=","sMaZVxuCBqrH6XwyWHUac20A3Xai21Umtl1paNynXJE=","WkizH37d1HmxKu2H6sPMAPgWyuZ7o+fpxUVMYzOypgA=","h6JvxbPF7d/O9ktcP9+1v48fBo/ukAPpTuZzEgwWNhE=","AXgTbw3rRpXwsuFCJE31Hz2nb2UO/VUYo985DPzV7EA=","osXPtGeG77yyS04CEtqDkuJ/E0+S3ybjblqtXlMgu8c=","0WZA/kXkrAqf/zJkK6Hi5v+mL+k7dy0dpETSWzrqORA=","S6fQIsE8n0GKg8JfwM63eicAncJfEJq5iet3+nvOLQ4=","vNvgbVOsKn59G3BZfDP5Xp9sHl4cBmMs4llwi23l+3U=","N74AEk9bwZDS3ZJUC1hQ0bNWNcTEF8AbIeMJNSAGqf4=","Ihki9CZzxWt5l9sCfbdaBRS3lnyxvwvxmJq5EUHxZsI=","0jSV41XNjPrt4CeZkmgWJfc3txtTNrhd7ppfLY/8znc=","PjPScZnVoPukV7u0l7SUORxwk/HsZheWGNg6LSWm4AA=","AFpiFzKtJPXiqpI5BQoEITMpFxklCXE4/IrjO3BbQmU=","wN4PnGfxeYawi2+UYt2GG9xsBKLVaW/XioFfbR0o7OA=","UjwsuB+B3uKkJ/rN2R87o0M7DbuiWG0am6cvjYdX4ic=","Ffm1+ERvecgkC0a1Id+MqQh8XFK8zJjjLoppnoXxpbo=","pYrUnOp2mTBFZtSlBlH+OdRm6HL15UuACSdv9CXJHbE=","R98wZjx/dczAWFFa6OCSE2i1Te27N0kjuvw2wJHkjvE=","uuQWiRIwa3N7pG9m6UzruD2OOT8KorqCbPzGR5wlGAE=","Ig4O8BB6SUAsI7tIiNdsCmR8yIZsWoUSEBaAHQ84xjo=","fQmH00JLoCbytENYeeHwsD6K4yPOeBKEqUkKBcUx/rE=","V1UPv4ACpkLHKWK3XGDk3EpAdAWWJfVBTmI7ICrBa4I=","hz+S6i7F1f7/GG6sYnde/pVHxz+4roXenPw7oJL1tow=","Un98y8xMvUguVwRn0BZQY7w2Antm3vTMGajanGkW8Y8=","x/BcSS8if0HEvft+T+YYbepB3jbMAzDRdATp+Jbysxg=","Hrg/lgCzZVwelreCRR2WcjJKr/OCQdamwpIyEIebzuw=","kUqbbv8qzk9iQm5BWzJ2zONjarDmTHkxB4ZTglcBCPE=","8sRixTLqG/4sYiQKhOWUHtWE4hFE8qnGxalypNAPP1Q=","D9ADhV5jw2maWdNPF9iA44yyWbQY+s/vpJzAdBa2N04=","CyuRtdPDkluDDAy/Aw75V1LGqZc0rs0idSfKJub+DIk=","8tumI5F6COw/0MZ9N3Z0g3cDw6IBn0rZkiBBLTuxBIs=","RgO2AbG4Dwr6+ytyYMEeHLX4ecrwRKxId3chyCxECCc=","xNSkKS3PuN0QQ9l99XOEWFEQXX0GWmTlCo7UU7SBPJU=","j3/mxtv/cOPmZWbrM1Q+aJqi+2WkaMphskEeQ9pr0DY="],"block_size":4096,"path":"build/panel.js"},{"block_hashes":["O5Bnq1RwRWKpgAe3xKw/qzoLetO+MTjQl9qKxbVz/ow="],"block_size":4096,"path":"main.html"},{"block_hashes":["fTLG1fs71dbK3kBdXDtfZiZcDw7l2ZGiyeS8gRqVq1Q="],"block_size":4096,"path":"panel.html"}],"version":2}
--------------------------------------------------------------------------------
/boilerplate/extensions/redux-devtools/2.11.1_0/js/content.bundle.js:
--------------------------------------------------------------------------------
1 | !function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var e={};return n.m=t,n.c=e,n.p="",n(0)}([function(t,n,e){e(1),t.exports=e(232)},function(t,n,e){"use strict";window.isElectron=window.navigator&&window.navigator.userAgent.indexOf("Electron")!==-1,(window.isElectron&&"/_generated_background_page.html"===location.pathname||navigator.userAgent.indexOf("Firefox")!==-1)&&(chrome.runtime.onConnectExternal={addListener:function(){}},chrome.runtime.onMessageExternal={addListener:function(){}},window.isElectron?(chrome.notifications={onClicked:{addListener:function(){}},create:function(){},clear:function(){}},chrome.contextMenus={onClicked:{addListener:function(){}}}):(chrome.storage.sync=chrome.storage.local,chrome.runtime.onInstalled||(chrome.runtime.onInstalled={addListener:function(t){return t()}}))),window.isElectron&&!function(){chrome.storage.local&&chrome.storage.local.remove||(chrome.storage.local={set:function(t,n){Object.keys(t).forEach(function(n){localStorage.setItem(n,t[n])}),n&&n()},get:function(t,n){var e={};Object.keys(t).forEach(function(n){e[n]=localStorage.getItem(n)||t[n]}),n&&n(e)},remove:function(t,n){Array.isArray(t)?t.forEach(function(t){localStorage.removeItem(t)}):localStorage.removeItem(t),n&&n()}});var t=chrome.runtime.sendMessage;chrome.runtime.sendMessage=function(){return"function"==typeof arguments[arguments.length-1]&&Array.prototype.pop.call(arguments),t.apply(void 0,arguments)}}()},,,,,,function(t,n,e){function r(t){return null==t?void 0===t?a:u:(t=Object(t),s&&s in t?i(t):c(t))}var o=e(8),i=e(11),c=e(12),u="[object Null]",a="[object Undefined]",s=o?o.toStringTag:void 0;t.exports=r},function(t,n,e){var r=e(9),o=r.Symbol;t.exports=o},function(t,n,e){var r=e(10),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,n){(function(n){var e="object"==typeof n&&n&&n.Object===Object&&n;t.exports=e}).call(n,function(){return this}())},function(t,n,e){function r(t){var n=c.call(t,a),e=t[a];try{t[a]=void 0;var r=!0}catch(t){}var o=u.call(t);return r&&(n?t[a]=e:delete t[a]),o}var o=e(8),i=Object.prototype,c=i.hasOwnProperty,u=i.toString,a=o?o.toStringTag:void 0;t.exports=r},function(t,n){function e(t){return o.call(t)}var r=Object.prototype,o=r.toString;t.exports=e},,function(t,n){function e(t,n){return function(e){return t(n(e))}}t.exports=e},function(t,n){function e(t){return null!=t&&"object"==typeof t}t.exports=e},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,n){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},,,,,,,,,,,,,,function(t,n,e){function r(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new o;++n-1}var o=e(85);t.exports=r},function(t,n,e){function r(t,n){var e=this.__data__,r=o(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this}var o=e(85);t.exports=r},function(t,n,e){var r=e(70),o=e(9),i=r(o,"Map");t.exports=i},function(t,n,e){function r(t){var n=o(this,t).delete(t);return this.size-=n?1:0,n}var o=e(92);t.exports=r},function(t,n,e){function r(t,n){var e=t.__data__;return o(n)?e["string"==typeof n?"string":"hash"]:e.map}var o=e(93);t.exports=r},function(t,n){function e(t){var n=typeof t;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==t:null===t}t.exports=e},function(t,n,e){function r(t){return o(this,t).get(t)}var o=e(92);t.exports=r},function(t,n,e){function r(t){return o(this,t).has(t)}var o=e(92);t.exports=r},function(t,n,e){function r(t,n){var e=o(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this}var o=e(92);t.exports=r},function(t,n){function e(t){return this.__data__.set(t,r),this}var r="__lodash_hash_undefined__";t.exports=e},function(t,n){function e(t){return this.__data__.has(t)}t.exports=e},,,,,,,function(t,n){function e(t,n){for(var e=-1,r=null==t?0:t.length,o=Array(r);++e-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=e},,,function(t,n,e){function r(t){var n=this.__data__=new o(t);this.size=n.size}var o=e(82),i=e(129),c=e(130),u=e(131),a=e(132),s=e(133);r.prototype.clear=i,r.prototype.delete=c,r.prototype.get=u,r.prototype.has=a,r.prototype.set=s,t.exports=r},function(t,n,e){function r(){this.__data__=new o,this.size=0}var o=e(82);t.exports=r},function(t,n){function e(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e}t.exports=e},function(t,n){function e(t){return this.__data__.get(t)}t.exports=e},function(t,n){function e(t){return this.__data__.has(t)}t.exports=e},function(t,n,e){function r(t,n){var e=this.__data__;if(e instanceof o){var r=e.__data__;if(!i||r.length-1&&t%1==0&&t0?n.filter=o.FilterState.WHITELIST_SPECIFIC:t.filter?n.filter=o.FilterState.BLACKLIST_SPECIFIC:n.filter=o.FilterState.DO_NOT_FILTER),n},s=function(t){i?t(i):chrome.storage.sync.get({maxAge:50,filter:o.FilterState.DO_NOT_FILTER,whitelist:"",blacklist:"",shouldCatchErrors:!1,inject:!0,urls:"^https?://localhost|0\\.0\\.0\\.0:\\d+\n^https?://.+\\.github\\.io"},function(n){i=a(n),t(i)})},f=function(t){c=c.concat(t)},p=function(t){return""!==t?t.split("\n").filter(Boolean).join("|"):null},l=n.injectOptions=function(t){if(t){t.filter!==o.FilterState.DO_NOT_FILTER&&(t.whitelist=p(t.whitelist),t.blacklist=p(t.blacklist)),i=t;var n=document.createElement("script");n.type="text/javascript",n.appendChild(document.createTextNode("window.devToolsOptions = Object.assign(window.devToolsOptions||{},"+JSON.stringify(i)+");")),(document.head||document.documentElement).appendChild(n),n.parentNode.removeChild(n)}};n.getOptionsFromBg=function(){chrome.runtime.sendMessage({type:"GET_OPTIONS"},function(t){t&&t.options&&l(t.options)})},n.isAllowed=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i;return!t||t.inject||!t.urls||location.href.match(p(t.urls))}},function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(t.actionsBlacklist||t.actionsWhitelist)return{whitelist:t.actionsWhitelist&&t.actionsWhitelist.join("|"),blacklist:t.actionsBlacklist&&t.actionsBlacklist.join("|")}}function i(t,n){if(!n&&window.devToolsOptions.filter===d.DO_NOT_FILTER||"function"!=typeof t.type.match)return!1;var e=n||window.devToolsOptions,r=e.whitelist,o=e.blacklist;return r&&!t.type.match(r)||o&&t.type.match(o)}function c(t,n){return n?(0,v.default)(t,function(t,e){return p({},t,{action:n(t.action,e)})}):t}function u(t,n){return n?t.map(function(t,e){return p({},t,{state:n(t.state,e)})}):t}function a(t,n,e,r,o,a,s){if("ACTION"===n)return r?r(t,a-1):t;if("STATE"!==n)return t;if(s||e||window.devToolsOptions.filter!==d.DO_NOT_FILTER){var l=function(){var n=[],c=[],u=o&&{},a=t.actionsById,f=t.computedStates;return t.stagedActionIds.forEach(function(t,l){var v=a[t],d=v.action,h=f[l],y=h.state;if(l){if(s&&!s(y,d))return;if(i(d,e))return}n.push(t),c.push(r?p({},h,{state:r(y,l)}):h),o&&(u[t]=p({},v,{action:o(d,t)}))}),{v:p({},t,{actionsById:u||a,stagedActionIds:n,computedStates:c})}}();if("object"===("undefined"==typeof l?"undefined":f(l)))return l.v}return r||o?p({},t,{actionsById:c(t.actionsById,o),computedStates:u(t.computedStates,r)}):t}function s(t,n,e,r,o,c){var u=n.stagedActionIds;if(t<=u[1])return n;var a=u.indexOf(t);if(a===-1)return n;for(var s=c||e||window.devToolsOptions.filter!==d.DO_NOT_FILTER,f=s?[0]:u,l=n.actionsById,v=n.computedStates,h={},y=[],_=void 0,b=void 0,x=void 0,g=s?1:a;gl))return!1;var d=f.get(t);if(d&&f.get(n))return d==n;var h=-1,y=!0,_=e&a?new o:void 0;for(f.set(t,n),f.set(n,t);++h=e||n<0||E&&r>=m}function p(){var t=i();return l(t)?v(t):void(x=setTimeout(p,d(t)))}function v(t){return x=void 0,A&&b?r(t):(b=_=void 0,S)}function y(){void 0!==x&&clearTimeout(x),w=0,b=O=_=x=void 0}function h(){return void 0===x?S:v(i())}function g(){var t=i(),n=l(t);if(b=arguments,_=this,O=t,n){if(void 0===x)return f(O);if(E)return x=setTimeout(p,e),r(O)}return void 0===x&&(x=setTimeout(p,e)),S}var b,_,m,S,x,O,w=0,T=!1,E=!1,A=!0;if("function"!=typeof t)throw new TypeError(a);return e=u(e)||0,o(n)&&(T=!!n.leading,E="maxWait"in n,m=E?c(u(n.maxWait)||0,e):m,A="trailing"in n?!!n.trailing:A),g.cancel=y,g.flush=h,g}var o=n(6),i=n(7),u=n(10),a="Expected a function",c=Math.max,s=Math.min;t.exports=r},function(t,e){function n(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}t.exports=n},function(t,e,n){var r=n(8),o=function(){return r.Date.now()};t.exports=o},function(t,e,n){var r=n(9),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,function(){return this}())},function(t,e,n){function r(t){if("number"==typeof t)return t;if(i(t))return u;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(a,"");var n=s.test(t);return n||f.test(t)?d(t.slice(2),n?2:8):c.test(t)?u:+t}var o=n(6),i=n(11),u=NaN,a=/^\\s+|\\s+$/g,c=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,f=/^0o[0-7]+$/i,d=parseInt;t.exports=r},function(t,e,n){function r(t){return"symbol"==typeof t||i(t)&&o(t)==u}var o=n(12),i=n(16),u="[object Symbol]";t.exports=r},function(t,e,n){function r(t){return null==t?void 0===t?c:a:(t=Object(t),s&&s in t?i(t):u(t))}var o=n(13),i=n(14),u=n(15),a="[object Null]",c="[object Undefined]",s=o?o.toStringTag:void 0;t.exports=r},function(t,e,n){var r=n(8),o=r.Symbol;t.exports=o},function(t,e,n){function r(t){var e=u.call(t,c),n=t[c];try{t[c]=void 0;var r=!0}catch(t){}var o=a.call(t);return r&&(e?t[c]=n:delete t[c]),o}var o=n(13),i=Object.prototype,u=i.hasOwnProperty,a=i.toString,c=o?o.toStringTag:void 0;t.exports=r},function(t,e){function n(t){return o.call(t)}var r=Object.prototype,o=r.toString;t.exports=n},function(t,e){function n(t){return null!=t&&"object"==typeof t}t.exports=n},function(t,e,n){"use strict";function r(t,e,n){return(0,o.createStore)(t,e,n())}Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var o=n(18);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0,e.compose=e.applyMiddleware=e.bindActionCreators=e.combineReducers=e.createStore=void 0;var o=n(19),i=r(o),u=n(25),a=r(u),c=n(27),s=r(c),f=n(28),d=r(f),l=n(29),p=r(l),v=n(26);r(v);e.createStore=i.default,e.combineReducers=a.default,e.bindActionCreators=s.default,e.applyMiddleware=d.default,e.compose=p.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){function r(){g===h&&(g=h.slice())}function i(){return y}function a(t){if("function"!=typeof t)throw new Error("Expected listener to be a function.");var e=!0;return r(),g.push(t),function(){if(e){e=!1,r();var n=g.indexOf(t);g.splice(n,1)}}}function f(t){if(!(0,u.default)(t))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if("undefined"==typeof t.type)throw new Error(\'Actions may not have an undefined "type" property. Have you misspelled a constant?\');if(b)throw new Error("Reducers may not dispatch actions.");try{b=!0,y=v(y,t)}finally{b=!1}for(var e=h=g,n=0;n0?e[1]:null}function i(t,e,n){return(0,u.compose)((0,c.default)(e,{maxAge:n.maxAge||window.devToolsOptions.maxAge||50,shouldCatchErrors:n.shouldCatchErrors||window.shouldCatchErrors,shouldHotReload:n.shouldHotReload,shouldRecordChanges:n.shouldRecordChanges,shouldStartLocked:n.shouldStartLocked,pauseActionType:n.pauseActionType||"@@PAUSED"}),(0,f.default)(o("debug_session"),n.deserializeState,n.deserializeAction))(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.getUrlParam=o,e.default=i;var u=n(18),a=n(31),c=r(a),s=n(101),f=r(s)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){var r=n,o=void 0;try{r=t(n,e)}catch(t){o=t.toString(),"object"===("undefined"==typeof window?"undefined":p(window))&&("undefined"!=typeof window.chrome||"undefined"!=typeof window.process&&"renderer"===window.process.type)?setTimeout(function(){throw t}):console.error(t)}return{state:r,error:o}}function i(t,e,n,r){return r?o(t,e,n):{state:t(n,e)}}function u(t,e,n,r,o,u,a,c){if(!t||e===-1||e>=t.length&&t.length===u.length)return t;for(var s=t.slice(0,e),f=e;f-1,h=void 0;h=y?p:c&&p&&p.error?{state:v,error:"Interrupted by an error up the chain"}:i(n,l,v,c),s.push(h)}return s}function a(t){return O.performAction(t)}function c(t,e,n,r){var o={monitorState:n(void 0,{}),nextActionId:1,actionsById:{0:a(w)},stagedActionIds:[0],skippedActionIds:[],committedState:e,currentStateIndex:0,computedStates:[],isLocked:r.shouldStartLocked===!0,isPaused:r.shouldRecordChanges===!1};return function(c,s){function f(t){for(var e=t,n=_.slice(1,e+1),r=0;re?O-e:0}function d(e){var o,u=void 0;return e?(u=T[O],v=n(v,s)):u=i(t,s.action,T[O].state,!1),r.pauseActionType&&1!==b?(e&&(O===_.length-1&&O++,_=[].concat(_,[b]),b++),{monitorState:v,actionsById:l({},h,(o={},o[b-1]=a({type:r.pauseActionType}),o)),nextActionId:b,stagedActionIds:_,skippedActionIds:m,committedState:S,currentStateIndex:O,computedStates:[].concat(T.slice(0,_.length-1),[u]),isLocked:E,isPaused:!0}):{monitorState:v,actionsById:{0:a(w)},nextActionId:1,stagedActionIds:[0],skippedActionIds:[],committedState:u.state,currentStateIndex:0,computedStates:[u],isLocked:E,isPaused:!0}}var p=c||o,v=p.monitorState,h=p.actionsById,b=p.nextActionId,_=p.stagedActionIds,m=p.skippedActionIds,S=p.committedState,O=p.currentStateIndex,T=p.computedStates,E=p.isLocked,A=p.isPaused;c||(h=l({},h));var I=0;switch(s.type){case x.PERFORM_ACTION:if(E)return c||o;if(A)return d();r.maxAge&&_.length===r.maxAge&&f(1),O===_.length-1&&O++;var j=b++;h[j]=s,_=[].concat(_,[j]),I=_.length-1;break;case x.RESET:h={0:a(w)},b=1,_=[0],m=[],S=e,O=0,T=[];break;case x.COMMIT:h={0:a(w)},b=1,_=[0],m=[],S=T[O].state,O=0,T=[];break;case x.ROLLBACK:h={0:a(w)},b=1,_=[0],m=[],O=0,T=[];break;case x.TOGGLE_ACTION:var C=function(){var t=s.id,e=m.indexOf(t);return m=e===-1?[t].concat(m):m.filter(function(e){return e!==t}),I=_.indexOf(t),"break"}();if("break"===C)break;case x.SET_ACTIONS_ACTIVE:for(var R=s.start,N=s.end,P=s.active,M=[],L=R;Lr.maxAge&&(T=u(T,I,t,S,h,_,m,r.shouldCatchErrors),f(_.length-r.maxAge),I=1/0);break;default:I=1/0}return T=u(T,I,t,S,h,_,m,r.shouldCatchErrors),v=n(v,s),{monitorState:v,actionsById:h,nextActionId:b,stagedActionIds:_,skippedActionIds:m,committedState:S,currentStateIndex:O,computedStates:T,isLocked:E,isPaused:A}}}function s(t){var e=t.computedStates,n=t.currentStateIndex,r=e[n].state;return r}function f(t,e){function n(){var e=s(t.getState());return void 0!==e&&(o=e),o}var r,o=void 0;return l({},t,(r={liftedStore:t,dispatch:function(e){return t.dispatch(a(e)),e},getState:n,replaceReducer:function(n){t.replaceReducer(e(n))}},r[S.default]=function(){return l({},t[S.default](),{subscribe:function(e){function r(){e.next&&e.next(n())}if("object"!==("undefined"==typeof e?"undefined":p(e)))throw new TypeError("Expected the observer to be an object.");r();var o=t.subscribe(r);return{unsubscribe:o}}})},r))}function d(){var t=arguments.length<=0||void 0===arguments[0]?function(){return null}:arguments[0],e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if(null!=e.maxAge&&e.maxAge<2)throw new Error("DevTools.instrument({ maxAge }) option, if specified, may not be less than 2.");return function(n){return function(r,o,i){function u(n){if("function"!=typeof n){if(n&&"function"==typeof n.default)throw new Error(\'Expected the reducer to be a function. Instead got an object with a "default" field. Did you pass a module instead of the default export? Try passing require(...).default instead.\');throw new Error("Expected the reducer to be a function.")}return c(n,o,t,e)}var a=n(u(r),i);if(a.liftedStore)throw new Error("DevTools instrumentation should not be applied more than once. Check your store configuration.");return f(a,u)}}}e.__esModule=!0,e.INIT_ACTION=e.ActionCreators=e.ActionTypes=void 0;var l=Object.assign||function(t){for(var e=1;e=f&&(l=s,p=!1,e=new o(e));t:for(;++d-1}var o=n(54);t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__,r=o(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var o=n(54);t.exports=r},function(t,e,n){var r=n(40),o=n(8),i=r(o,"Map");t.exports=i},function(t,e,n){function r(t){var e=o(this,t).delete(t);return this.size-=e?1:0,e}var o=n(61);t.exports=r},function(t,e,n){function r(t,e){var n=t.__data__;return o(e)?n["string"==typeof e?"string":"hash"]:n.map}var o=n(62);t.exports=r},function(t,e){function n(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}t.exports=n},function(t,e,n){function r(t){return o(this,t).get(t)}var o=n(61);t.exports=r},function(t,e,n){function r(t){return o(this,t).has(t)}var o=n(61);t.exports=r},function(t,e,n){function r(t,e){var n=o(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}var o=n(61);t.exports=r},function(t,e){function n(t){return this.__data__.set(t,r),this}var r="__lodash_hash_undefined__";t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e,n){function r(t,e){var n=null==t?0:t.length;return!!n&&o(t,e,0)>-1}var o=n(69);t.exports=r},function(t,e,n){function r(t,e,n){return e===e?u(t,e,n):o(t,i,n)}var o=n(70),i=n(71),u=n(72);t.exports=r},function(t,e){function n(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i0&&n(f)?e>1?r(f,e-1,n,u,a):o(a,f):u||(a[a.length]=f)}return a}var o=n(78),i=n(79);t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=e.length,o=t.length;++n0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,o=16,i=Date.now;t.exports=n},function(t,e,n){function r(t){return i(t)&&o(t)}var o=n(93),i=n(16);t.exports=r},function(t,e,n){function r(t){return null!=t&&i(t.length)&&!o(t)}var o=n(42),i=n(94);t.exports=r},function(t,e){function n(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e,n){var r=n(77),o=n(83),i=n(96),u=n(92),a=o(function(t){return i(r(t,1,u,!0))});t.exports=a},function(t,e,n){function r(t,e,n){var r=-1,d=i,l=t.length,p=!0,v=[],y=v;if(n)p=!1,d=u;else if(l>=f){var h=e?null:c(t);if(h)return s(h);p=!1,d=a,y=new o}else y=e?[]:v;t:for(;++r-1&&t%1==0&&tl))return!1;var v=f.get(t);if(v&&f.get(e))return v==e;var y=-1,h=!0,g=n&c?new o:void 0;for(f.set(t,e),f.set(e,t);++y0?e.filter=o.FilterState.WHITELIST_SPECIFIC:t.filter?e.filter=o.FilterState.BLACKLIST_SPECIFIC:e.filter=o.FilterState.DO_NOT_FILTER),e},s=function(t){i?t(i):chrome.storage.sync.get({maxAge:50,filter:o.FilterState.DO_NOT_FILTER,whitelist:"",blacklist:"",shouldCatchErrors:!1,inject:!0,urls:"^https?://localhost|0\\\\.0\\\\.0\\\\.0:\\\\d+\\n^https?://.+\\\\.github\\\\.io"},function(e){i=c(e),t(i)})},f=function(t){u=u.concat(t)},d=function(t){return""!==t?t.split("\\n").filter(Boolean).join("|"):null},l=e.injectOptions=function(t){if(t){t.filter!==o.FilterState.DO_NOT_FILTER&&(t.whitelist=d(t.whitelist),t.blacklist=d(t.blacklist)),i=t;var e=document.createElement("script");e.type="text/javascript",e.appendChild(document.createTextNode("window.devToolsOptions = Object.assign(window.devToolsOptions||{},"+JSON.stringify(i)+");")),(document.head||document.documentElement).appendChild(e),e.parentNode.removeChild(e)}};e.getOptionsFromBg=function(){chrome.runtime.sendMessage({type:"GET_OPTIONS"},function(t){t&&t.options&&l(t.options)})},e.isAllowed=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i;return!t||t.inject||!t.urls||location.href.match(d(t.urls))}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(t.actionsBlacklist||t.actionsWhitelist)return{whitelist:t.actionsWhitelist&&t.actionsWhitelist.join("|"),blacklist:t.actionsBlacklist&&t.actionsBlacklist.join("|")}}function i(t,e){if(!e&&window.devToolsOptions.filter===v.DO_NOT_FILTER||"function"!=typeof t.type.match)return!1;var n=e||window.devToolsOptions,r=n.whitelist,o=n.blacklist;return r&&!t.type.match(r)||o&&t.type.match(o)}function u(t,e){return e?(0,p.default)(t,function(t,n){return d({},t,{action:e(t.action,n)})}):t}function a(t,e){return e?t.map(function(t,n){return d({},t,{state:e(t.state,n)})}):t}function c(t,e,n,r,o,c,s){if("ACTION"===e)return r?r(t,c-1):t;if("STATE"!==e)return t;if(s||n||window.devToolsOptions.filter!==v.DO_NOT_FILTER){var l=function(){var e=[],u=[],a=o&&{},c=t.actionsById,f=t.computedStates;return t.stagedActionIds.forEach(function(t,l){var p=c[t],v=p.action,y=f[l],h=y.state;if(l){if(s&&!s(h,v))return;if(i(v,n))return}e.push(t),u.push(r?d({},y,{state:r(h,l)}):y),o&&(a[t]=d({},p,{action:o(v,t)}))}),{v:d({},t,{actionsById:a||c,stagedActionIds:e,computedStates:u})}}();if("object"===("undefined"==typeof l?"undefined":f(l)))return l.v}return r||o?d({},t,{actionsById:u(t.actionsById,o),computedStates:a(t.computedStates,r)}):t}function s(t,e,n,r,o,u){var a=e.stagedActionIds;if(t<=a[1])return e;var c=a.indexOf(t);if(c===-1)return e;for(var s=u||n||window.devToolsOptions.filter!==v.DO_NOT_FILTER,f=s?[0]:a,l=e.actionsById,p=e.computedStates,y={},h=[],g=void 0,b=void 0,_=void 0,m=s?1:c;m0&&void 0!==arguments[0]?arguments[0]:{},e=arguments[1];return r.active?(r.lastAction=e.type,"LOCK_CHANGES"===e.type?window.__REDUX_DEVTOOLS_EXTENSION_LOCKED__=e.status:"PAUSE_RECORDING"===e.type?r.paused=e.status:r.isHotReloaded()&&setTimeout(r.update,0),t):t},this.start=function(t){r.active=!0,t||r.update()},this.stop=function(){r.active=!1,clearTimeout(r.waitingTimeout)},this.isHotReloaded=function(){return"@@redux/INIT"===r.lastAction},this.isMonitorAction=function(){return r.lastAction&&"PERFORM_ACTION"!==r.lastAction},this.isTimeTraveling=function(){return"JUMP_TO_STATE"===r.lastAction},this.isPaused=function(){return!!r.paused&&("BLOCKED"===r.lastAction||(window.__REDUX_DEVTOOLS_EXTENSION_LOCKED__||(r.lastAction="BLOCKED"),!1))},this.isLocked=function(){return!!window.__REDUX_DEVTOOLS_EXTENSION_LOCKED__&&("BLOCKED"===r.lastAction||(r.lastAction="BLOCKED",!1))},this.update=e};e.default=r,t.exports=e.default},function(t,e){"use strict";function n(t){var e=1;return function(n){if(n)return e=1,0;var r=Math.pow(2,e-1);return e<5&&(e+=1),r*t}}function r(t){u&&!u()||window.postMessage({source:"@devtools-page",type:"ERROR",message:t},"*")}function o(t){window.devToolsOptions&&!window.devToolsOptions.shouldCatchErrors||t.timeStamp-a/),o=r?r[0]:" ",i="}"===n[n.length-1]?"}":"";return o.replace(/\\r\\n|\\n/g," ").replace(/\\s+/g," ")+" /* ... */ "+i},e.restore=function(t,e){var n=t[0],o=t.slice(1);switch(n){case"$":return r(e,t);case"r":var i=o.indexOf(","),u=o.slice(0,i),a=o.slice(i+1);return RegExp(a,u);case"d":return new Date(+o);case"f":var c=function(){throw new Error("can\'t run jsan parsed function")};return c.toString=function(){return o},c;case"u":return;case"e":var s=new Error(o);return s.stack="Stack is unavailable for jsan parsed errors",s;case"s":return Symbol(o);default:return console.warn("unknown type",t),t}}},function(t,e){"use strict";function n(t){window.postMessage({source:"@devtools-page",type:"OPEN",position:t||"right"},"*")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){var n={};for(var r in t)e.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function i(t){try{return JSON.stringify(t)}catch(e){return m.default.stringify(t,null,null,{circular:"[CIRCULAR]"})}}function u(t,e){return"undefined"==typeof e?i(t):e===!0?m.default.stringify(t,function(t,e){return e&&"function"==typeof e.toJS?e.toJS():e},null,!0):m.default.stringify(t,e.replacer,null,e.options)}function a(t){return t||Math.random().toString(36).substr(2)}function c(t){window.postMessage(t,"*")}function s(t,e,n){if("ACTION"===t.type)t.action=u(t.action,n),t.payload=u(t.payload,e);else if("STATE"===t.type||"PARTIAL_STATE"===t.type){var r=t.payload,i=r.actionsById,a=r.computedStates,s=r.committedState,f=o(r,["actionsById","computedStates","committedState"]);t.payload=f,t.actionsById=u(i,n),t.computedStates=u(a,e),t.committedState="undefined"!=typeof s}else"EXPORT"===t.type&&(t.payload=u(t.payload,n),"undefined"!=typeof t.committedState&&(t.committedState=u(t.committedState,e)));c(t)}function f(t,e,n,r,o){var i={payload:e,source:w,name:o||"",instanceId:r};t?(i.type="ACTION",i.action=t.action?t:{action:"object"===("undefined"==typeof t?"undefined":b(t))?t:{type:t}}):i.type="STATE",s(i)}function d(t){if("test"==={NODE_ENV:"production"}.BABEL_ENV||t&&t.source===window){var e=t.data;e&&"@devtools-extension"===e.source&&Object.keys(O).forEach(function(t){e.id&&t!==e.id||("IMPORT"===e.type&&(e.type="DISPATCH",e.payload=g({type:"IMPORT_STATE"},(0,x.default)(e.state,{})),e.state=void 0),"function"==typeof O[t]?O[t](e):O[t].forEach(function(t){t(e)}))})}}function l(t,e){O[e]=t,window.addEventListener("message",d,!1)}function p(){window.removeEventListener("message",d),c({type:"DISCONNECT",source:w})}function v(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=a(t.instanceId),n=t.name||document.title||e,r=function(t){if(t)return O[e]||(O[e]=[]),O[e].push(t),function(){var n=O[e].indexOf(t);O[e].splice(n,1)}},o=function(){delete O[e]},i=function(t,r){f(t,r,!0,e,n)},s=function(t,r){c({type:"INIT",payload:u(t),action:u(r||{}),instanceId:e,name:n,source:w})},l=function(t){c({type:"ERROR",payload:t,id:e,source:w})};return window.addEventListener("message",d,!1),c({type:"INIT_INSTANCE",instanceId:e,source:w}),{init:s,subscribe:r,unsubscribe:o,send:i,error:l}}function y(t){return function(e,n){console.warn("`devToolsExtension.updateStore` is deprecated, remove it and just use `__REDUX_DEVTOOLS_EXTENSION_COMPOSE__` instead of the extension\'s store enhancer: https://github.com/zalmoxisus/redux-devtools-extension#12-advanced-store-setup");var r=t[n||Object.keys(t)[0]];r.liftedStore=e.liftedStore,r.getState=e.getState,r.dispatch=e.dispatch}}function h(){try{return window.self!==window.top}catch(t){return!0}}Object.defineProperty(e,"__esModule",{value:!0}),e.source=void 0;var g=Object.assign||function(t){for(var e=1;e