├── .gitignore
├── .certinfo
├── src
├── utils
│ ├── dev
│ │ ├── certInfo.txt
│ │ ├── .certignore
│ │ └── npmCommands.js
│ ├── color
│ │ ├── hexToRGB.js
│ │ ├── getColorFromDeltaOffset.js
│ │ ├── getPanelBG.js
│ │ ├── appHexToRGB.js
│ │ ├── toHex.js
│ │ └── rgbToHex.js
│ ├── main
│ │ ├── getAppName.js
│ │ ├── getExtRoot.js
│ │ ├── getExtVersion.js
│ │ ├── getAppTheme.js
│ │ ├── getLocalHost.js
│ │ └── launchLocalHost.js
│ └── fs
│ │ ├── writeFile.js
│ │ ├── readFile.js
│ │ └── mkDir.js
├── css
│ ├── app.sass
│ └── quasar.variables.sass
├── assets
│ ├── fonts
│ │ └── OCR B MT.ttf
│ ├── sad.svg
│ ├── sadLogo.vue
│ ├── quasar-logo-full.svg
│ ├── quasarLogo.vue
│ └── tutorial-pull.json
├── statics
│ ├── icons
│ │ ├── favicon.ico
│ │ ├── icon-128x128.png
│ │ ├── icon-192x192.png
│ │ ├── icon-256x256.png
│ │ ├── icon-384x384.png
│ │ ├── icon-512x512.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon-96x96.png
│ │ ├── ms-icon-144x144.png
│ │ ├── apple-icon-120x120.png
│ │ ├── apple-icon-152x152.png
│ │ ├── apple-icon-167x167.png
│ │ ├── apple-icon-180x180.png
│ │ └── safari-pinned-tab.svg
│ └── app-logo-128x128.png
├── functions
│ └── function-show-error-message.js
├── components
│ ├── panel
│ │ └── tooltipper.vue
│ ├── Inputter.vue
│ ├── BarOptions.vue
│ ├── QRCoder.vue
│ ├── dev
│ │ └── menus.vue
│ └── BarCoder.vue
├── host
│ ├── ILST
│ │ ├── tsconfig.json
│ │ ├── host.ts
│ │ └── host.jsx
│ └── universal
│ │ ├── Console.jsx
│ │ ├── ES6_Array_Methods.jsx
│ │ └── json2.jsx
├── index-dev.html
├── pages
│ ├── Error404.vue
│ ├── QRCode.vue
│ └── BarCode.vue
├── store
│ ├── index.js
│ └── store-settings.js
├── router
│ ├── routes.js
│ └── index.js
├── index.template.html
├── layouts
│ └── Panel.vue
└── App.vue
├── .certignore
├── temp
├── real.png
├── hello-there.png
├── hello-world.png
├── testing-1 2 3.png
├── a-very long paragraph of a bunch of text hello world hello.png
├── testing-1 2 3 thelkjasdflkjasdlkjasdfl;kjasdf;lkjasdflkjasdf;lkjasdf.png
├── as;lkjasdfl;kjasdf;lkjasdf;lkjasdflkjasdf;lkjasdf;lkjasdf;lkjasdfl;kjasdflkjasdf;lkjasdf.png
└── barcode.svg
├── dist
└── spa
│ ├── css
│ ├── 4d7f4d2f.fe4a00e8.css
│ ├── 1c620368.c41512eb.css
│ └── 082306ef.27d6aa19.css
│ ├── statics
│ ├── icons
│ │ ├── favicon.ico
│ │ ├── icon-128x128.png
│ │ ├── icon-192x192.png
│ │ ├── icon-256x256.png
│ │ ├── icon-384x384.png
│ │ ├── icon-512x512.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon-96x96.png
│ │ ├── ms-icon-144x144.png
│ │ ├── apple-icon-120x120.png
│ │ ├── apple-icon-152x152.png
│ │ ├── apple-icon-167x167.png
│ │ ├── apple-icon-180x180.png
│ │ └── safari-pinned-tab.svg
│ └── app-logo-128x128.png
│ ├── fonts
│ ├── KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff
│ ├── KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff
│ ├── KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff
│ ├── KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff
│ ├── KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff
│ ├── KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff
│ ├── materialdesignicons-webfont.043774d1.woff
│ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff
│ ├── materialdesignicons-webfont.27cb2cf1.woff2
│ └── flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2
│ ├── index.html
│ └── js
│ ├── runtime.8a3271d3.js
│ ├── 4d7f4d2f.d1f61a9f.js
│ ├── 082306ef.370c0180.js
│ └── app.d10e3a3c.js
├── archive
└── Quicker1.0.1.zxp
├── babel.config.js
├── .editorconfig
├── .quasar
├── artifacts.json
├── import-quasar.js
├── client-entry.js
└── app.js
├── .postcssrc.js
├── README.md
├── .debug
├── CHANGELOG.md
├── .logger
└── 12.06.19.md
├── package.json
├── .bombino
├── CSXS
└── manifest.xml
└── quasar.conf.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/.certinfo:
--------------------------------------------------------------------------------
1 | US;NY;SomeOrg;SomeName
--------------------------------------------------------------------------------
/src/utils/dev/certInfo.txt:
--------------------------------------------------------------------------------
1 | US;NY;SomeOrg;SomeName
--------------------------------------------------------------------------------
/src/css/app.sass:
--------------------------------------------------------------------------------
1 | // app global css in Sass form
2 |
--------------------------------------------------------------------------------
/src/utils/dev/.certignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | archive
3 | ^(\.git)
--------------------------------------------------------------------------------
/.certignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | archive
3 | ^(\.git)
4 | ZXPSignCmd.exe
--------------------------------------------------------------------------------
/temp/real.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/real.png
--------------------------------------------------------------------------------
/dist/spa/css/4d7f4d2f.fe4a00e8.css:
--------------------------------------------------------------------------------
1 | .sad-logo{fill:var(--color-btn-disabled-text);fill-opacity:1}
--------------------------------------------------------------------------------
/temp/hello-there.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/hello-there.png
--------------------------------------------------------------------------------
/temp/hello-world.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/hello-world.png
--------------------------------------------------------------------------------
/archive/Quicker1.0.1.zxp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/archive/Quicker1.0.1.zxp
--------------------------------------------------------------------------------
/temp/testing-1 2 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/testing-1 2 3.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@quasar/babel-preset-app'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/src/assets/fonts/OCR B MT.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/assets/fonts/OCR B MT.ttf
--------------------------------------------------------------------------------
/src/statics/icons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/favicon.ico
--------------------------------------------------------------------------------
/dist/spa/statics/icons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/favicon.ico
--------------------------------------------------------------------------------
/src/statics/app-logo-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/app-logo-128x128.png
--------------------------------------------------------------------------------
/src/statics/icons/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/icon-128x128.png
--------------------------------------------------------------------------------
/src/statics/icons/icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/icon-192x192.png
--------------------------------------------------------------------------------
/src/statics/icons/icon-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/icon-256x256.png
--------------------------------------------------------------------------------
/src/statics/icons/icon-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/icon-384x384.png
--------------------------------------------------------------------------------
/src/statics/icons/icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/icon-512x512.png
--------------------------------------------------------------------------------
/src/statics/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/src/statics/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/src/statics/icons/favicon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/favicon-96x96.png
--------------------------------------------------------------------------------
/dist/spa/statics/app-logo-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/app-logo-128x128.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/icon-128x128.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/icon-192x192.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/icon-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/icon-256x256.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/icon-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/icon-384x384.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/icon-512x512.png
--------------------------------------------------------------------------------
/src/statics/icons/ms-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/ms-icon-144x144.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/favicon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/favicon-96x96.png
--------------------------------------------------------------------------------
/src/statics/icons/apple-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/apple-icon-120x120.png
--------------------------------------------------------------------------------
/src/statics/icons/apple-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/apple-icon-152x152.png
--------------------------------------------------------------------------------
/src/statics/icons/apple-icon-167x167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/apple-icon-167x167.png
--------------------------------------------------------------------------------
/src/statics/icons/apple-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/src/statics/icons/apple-icon-180x180.png
--------------------------------------------------------------------------------
/src/utils/color/hexToRGB.js:
--------------------------------------------------------------------------------
1 | export default function hexToRGB(hex) {
2 | return hex.match(/\w\w/g).map(x => parseInt(x, 16));
3 | }
4 |
--------------------------------------------------------------------------------
/dist/spa/statics/icons/ms-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/ms-icon-144x144.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/apple-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/apple-icon-120x120.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/apple-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/apple-icon-152x152.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/apple-icon-167x167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/apple-icon-167x167.png
--------------------------------------------------------------------------------
/dist/spa/statics/icons/apple-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/statics/icons/apple-icon-180x180.png
--------------------------------------------------------------------------------
/dist/spa/fonts/KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff
--------------------------------------------------------------------------------
/src/utils/main/getAppName.js:
--------------------------------------------------------------------------------
1 | export default function getAppName() {
2 | return JSON.parse(window.__adobe_cep__.getHostEnvironment()).appName;
3 | }
4 |
--------------------------------------------------------------------------------
/dist/spa/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/materialdesignicons-webfont.043774d1.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/materialdesignicons-webfont.043774d1.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff
--------------------------------------------------------------------------------
/dist/spa/fonts/materialdesignicons-webfont.27cb2cf1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/materialdesignicons-webfont.27cb2cf1.woff2
--------------------------------------------------------------------------------
/dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2
--------------------------------------------------------------------------------
/temp/a-very long paragraph of a bunch of text hello world hello.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/a-very long paragraph of a bunch of text hello world hello.png
--------------------------------------------------------------------------------
/src/utils/main/getExtRoot.js:
--------------------------------------------------------------------------------
1 | export default function getRoot() {
2 | return decodeURI(window.__adobe_cep__.getSystemPath("extension")).replace(
3 | /file\:\/{1,}/,
4 | ""
5 | );
6 | }
7 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.quasar/artifacts.json:
--------------------------------------------------------------------------------
1 | {"folders":["C:\\Users\\TRSch\\AppData\\Roaming\\Adobe\\CEP\\extensions\\inner-joystick\\dist\\spa","C:\\Users\\TRSch\\AppData\\Roaming\\Adobe\\CEP\\extensions\\Quicker\\dist\\spa"]}
--------------------------------------------------------------------------------
/temp/testing-1 2 3 thelkjasdflkjasdlkjasdfl;kjasdf;lkjasdflkjasdf;lkjasdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/testing-1 2 3 thelkjasdflkjasdlkjasdfl;kjasdf;lkjasdflkjasdf;lkjasdf.png
--------------------------------------------------------------------------------
/dist/spa/css/1c620368.c41512eb.css:
--------------------------------------------------------------------------------
1 | .centered,.qr-wrapper{display:flex;justify-content:center;align-items:center;flex-wrap:wrap}.blank{width:200px;height:200px}.main-page{display:flex;justify-content:center;align-items:flex-start;flex-wrap:wrap}
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | plugins: [
5 | // to edit target browsers: use "browserslist" field in package.json
6 | require('autoprefixer')
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/src/utils/fs/writeFile.js:
--------------------------------------------------------------------------------
1 | export default function writeFile(path, data, toJSON = false) {
2 | return window.cep.fs.writeFile(
3 | decodeURI(path).replace(/file\:\/{1,}/, ""),
4 | toJSON ? JSON.stringify(data) : data
5 | );
6 | }
7 |
--------------------------------------------------------------------------------
/temp/as;lkjasdfl;kjasdf;lkjasdf;lkjasdflkjasdf;lkjasdf;lkjasdf;lkjasdfl;kjasdflkjasdf;lkjasdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Inventsable/Quicker/HEAD/temp/as;lkjasdfl;kjasdf;lkjasdf;lkjasdflkjasdf;lkjasdf;lkjasdf;lkjasdfl;kjasdflkjasdf;lkjasdf.png
--------------------------------------------------------------------------------
/dist/spa/css/082306ef.27d6aa19.css:
--------------------------------------------------------------------------------
1 | .q-layout__section--marginal{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;background-color:var(--color-header-border)}@media screen and (max-width:260px){.toolbar-title{display:none}}
--------------------------------------------------------------------------------
/src/utils/color/getColorFromDeltaOffset.js:
--------------------------------------------------------------------------------
1 | import rgbToHex from "./rgbToHex";
2 |
3 | export default function getColorFromDeltaOffset(color, delta) {
4 | return rgbToHex(
5 | color.map(col => {
6 | return +col + +delta;
7 | })
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/src/functions/function-show-error-message.js:
--------------------------------------------------------------------------------
1 | import { Dialog, Loading } from "quasar";
2 |
3 | export default function showErrorMessage(errorMessage) {
4 | Loading.hide();
5 | Dialog.create({
6 | title: "Error",
7 | message: errorMessage
8 | });
9 | }
10 |
--------------------------------------------------------------------------------
/src/utils/fs/readFile.js:
--------------------------------------------------------------------------------
1 | export default function readFile(path) {
2 | if (!window.cep.fs.readFile(decodeURI(path).replace(/file\:\/{1,}/, "")).err)
3 | return window.cep.fs.readFile(decodeURI(path).replace(/file\:\/{1,}/, ""))
4 | .data;
5 | else return false;
6 | }
7 |
--------------------------------------------------------------------------------
/src/components/panel/tooltipper.vue:
--------------------------------------------------------------------------------
1 |
2 | {{msg}}
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/host/ILST/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": true,
3 | "compilerOptions": {
4 | "outFile": "./host.jsx",
5 | "allowJs": true,
6 | "noLib": true,
7 | "types": ["types-for-adobe/illustrator/2015.3"]
8 | },
9 | "files": ["host.ts"],
10 | "exclude": ["node_modules"]
11 | }
12 |
--------------------------------------------------------------------------------
/src/utils/color/getPanelBG.js:
--------------------------------------------------------------------------------
1 | export default function getPanelBG() {
2 | return getRGBArray(
3 | JSON.parse(window.__adobe_cep__.getHostEnvironment()).appSkinInfo
4 | .panelBackgroundColor.color
5 | );
6 | function getRGBArray(color) {
7 | return [color.red, color.green, color.blue];
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # quicker
2 |
3 | Create QRCodes as quickly as you can type:
4 |
5 | 
6 |
7 | ## Installation
8 |
9 | - Click [download here](https://github.com/Inventsable/Quicker/blob/master/archive/Quicker1.0.1.zxp) and use with any valid ZXP installer
10 |
--------------------------------------------------------------------------------
/src/index-dev.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Quicker
6 |
7 |
8 |
9 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.debug:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/utils/main/getExtVersion.js:
--------------------------------------------------------------------------------
1 | export default function getExtVersion() {
2 | const xml = window.cep.fs.readFile(
3 | `${decodeURI(window.__adobe_cep__.getSystemPath("extension")).replace(
4 | /file\:\/{1,}/,
5 | ""
6 | )}/CSXS/manifest.xml`
7 | );
8 | const bundleVersion = /ExtensionBundleVersion\=\"(\d|\.)*(?=\")/;
9 | const matches = xml.data.match(bundleVersion);
10 | return matches.length ? matches[0].replace(/\w*\=\"/, "") : "Unknown";
11 | }
12 |
--------------------------------------------------------------------------------
/src/pages/Error404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
Sorry, nothing here...(404)
7 |
8 |
9 |
10 |
11 |
19 |
--------------------------------------------------------------------------------
/src/utils/main/getAppTheme.js:
--------------------------------------------------------------------------------
1 | export default function getAppTheme() {
2 | const appName = JSON.parse(window.__adobe_cep__.getHostEnvironment()).appName;
3 | if (/aeft|ppro/i.test(appName)) return "gradient";
4 | const alpha = JSON.parse(window.__adobe_cep__.getHostEnvironment())
5 | .appSkinInfo.panelBackgroundColor.color.red;
6 | if (alpha > 220) return "lightest";
7 | else if (alpha > 150) return "light";
8 | else if (alpha > 80) return "dark";
9 | else return "darkest";
10 | }
11 |
--------------------------------------------------------------------------------
/src/utils/main/getLocalHost.js:
--------------------------------------------------------------------------------
1 | export default function getLocalHost() {
2 | const debug = window.cep.fs.readFile(
3 | `${decodeURI(window.__adobe_cep__.getSystemPath("extension")).replace(
4 | /file:\/{1,}/,
5 | ""
6 | )}/.debug`
7 | );
8 | const port = new RegExp(
9 | `\\ parseInt(x, 16));
9 | return /aeft/i.test(appName)
10 | ? color.map(a => a / 255)
11 | : /ilst/i.test(appName)
12 | ? {
13 | red: color[0],
14 | green: color[1],
15 | blue: color[2]
16 | }
17 | : color;
18 | }
19 |
--------------------------------------------------------------------------------
/.quasar/import-quasar.js:
--------------------------------------------------------------------------------
1 | /**
2 | * THIS FILE IS GENERATED AUTOMATICALLY.
3 | * DO NOT EDIT.
4 | *
5 | * You are probably looking on adding startup/initialization code.
6 | * Use "quasar new boot " and add it there.
7 | * One boot file per concern. Then reference the file(s) in quasar.conf.js > boot:
8 | * boot: ['file', ...] // do not add ".js" extension to it.
9 | *
10 | * Boot files are your "main.js"
11 | **/
12 |
13 |
14 | import Vue from 'vue'
15 |
16 | import {Quasar,Dialog,LocalStorage,Loading,Notify} from 'quasar'
17 |
18 |
19 | Vue.use(Quasar, { config: {},plugins: {Dialog,LocalStorage,Loading,Notify} })
20 |
--------------------------------------------------------------------------------
/src/host/universal/Console.jsx:
--------------------------------------------------------------------------------
1 | var console = {
2 | log: function(data) {
3 | JSXEvent(data, "console");
4 | }
5 | };
6 |
7 | // Thanks Davide Barranca
8 | //
9 | // NOTE: This does not work in Animate. Currently asking the Adobe team for an alternative
10 | function JSXEvent(payload, eventType) {
11 | try {
12 | var xLib = new ExternalObject("lib:PlugPlugExternalObject");
13 | } catch (e) {
14 | // JSXEvent(e, "console");
15 | }
16 | if (xLib) {
17 | var eventObj = new CSXSEvent();
18 | eventObj.type = eventType;
19 | eventObj.data = payload;
20 | eventObj.dispatch();
21 | }
22 | return;
23 | }
24 |
--------------------------------------------------------------------------------
/src/router/routes.js:
--------------------------------------------------------------------------------
1 | const routes = [
2 | {
3 | path: "/",
4 | component: () => import("layouts/Panel.vue"),
5 | children: [
6 | {
7 | path: "qr",
8 | name: "QRCode",
9 | component: () => import("pages/QRCode.vue")
10 | },
11 | {
12 | path: "bar",
13 | name: "Barcode",
14 | component: () => import("pages/BarCode.vue")
15 | }
16 | ]
17 | }
18 | ];
19 |
20 | // Always leave this as last one
21 | if (process.env.MODE !== "ssr") {
22 | routes.push({
23 | path: "*",
24 | component: () => import("pages/Error404.vue")
25 | });
26 | }
27 |
28 | export default routes;
29 |
--------------------------------------------------------------------------------
/src/utils/fs/mkDir.js:
--------------------------------------------------------------------------------
1 | // BROKEN
2 | //
3 | export default function makeDir(path) {
4 | window.cep.fs.readFile(decodeURI(path).replace(/file\:\/{1,}/, "")).err
5 | ? new Promise((resolve, reject) => {
6 | window.__adobe_cep__.evalScript(
7 | `
8 | var folder = new Folder(${decodeURI(path)});
9 | if (!folder.exists) {
10 | var parts = path.split("/");
11 | parts.pop();
12 | mkdir(parts.join("/"));
13 | folder.create();
14 | }
15 | `,
16 | resolve("Done")
17 | );
18 | }).catch(err => {
19 | resolve(err);
20 | })
21 | : null;
22 | }
23 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ### 12.06.19
2 |
3 | - **[09:36PM]** Overriding textFont of textFrames for "OCRBMT" if user has locally installed
4 | - **[09:36PM]** Adding recursive scan for textframes within barcode
5 | - **[09:03PM]** Split format into model and variation select/dropdowns
6 | - **[09:02PM]** Basic dynamic barcode format successful but throws console errors due to validation, need to validate Inputter by active model
7 | - **[09:02PM]** Compartmentalized input as a standalone component
8 | - **[09:01PM]** Barcode SVG export/import successful
9 | - **[09:01PM]** Adding jsbarcode component
10 | - **[09:01PM]** Reconfigured router and toolbar for button routing
11 | - **[09:01PM]** Added barcode route
--------------------------------------------------------------------------------
/.logger/12.06.19.md:
--------------------------------------------------------------------------------
1 | ### 12.06.19
2 |
3 | - **[09:36PM]** Overriding textFont of textFrames for "OCRBMT" if user has locally installed
4 | - **[09:36PM]** Adding recursive scan for textframes within barcode
5 | - **[09:03PM]** Split format into model and variation select/dropdowns
6 | - **[09:02PM]** Basic dynamic barcode format successful but throws console errors due to validation, need to validate Inputter by active model
7 | - **[09:02PM]** Compartmentalized input as a standalone component
8 | - **[09:01PM]** Barcode SVG export/import successful
9 | - **[09:01PM]** Adding jsbarcode component
10 | - **[09:01PM]** Reconfigured router and toolbar for button routing
11 | - **[09:01PM]** Added barcode route
--------------------------------------------------------------------------------
/src/utils/color/toHex.js:
--------------------------------------------------------------------------------
1 | export default function toHex(color, delta) {
2 | function computeValue(value, delta) {
3 | var computedValue = !isNaN(delta) ? value + delta : value;
4 | if (computedValue < 0) {
5 | computedValue = 0;
6 | } else if (computedValue > 255) {
7 | computedValue = 255;
8 | }
9 |
10 | computedValue = Math.round(computedValue).toString(16);
11 | return computedValue.length == 1 ? '0' + computedValue : computedValue;
12 | }
13 | var hex = '';
14 | if (color) {
15 | hex =
16 | computeValue(color.red, delta) +
17 | computeValue(color.green, delta) +
18 | computeValue(color.blue, delta);
19 | }
20 | return '#' + hex;
21 | }
22 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import VueRouter from 'vue-router'
3 |
4 | import routes from './routes'
5 |
6 | Vue.use(VueRouter)
7 |
8 | /*
9 | * If not building with SSR mode, you can
10 | * directly export the Router instantiation
11 | */
12 |
13 | export default function (/* { store, ssrContext } */) {
14 | const Router = new VueRouter({
15 | scrollBehavior: () => ({ x: 0, y: 0 }),
16 | routes,
17 |
18 | // Leave these as is and change from quasar.conf.js instead!
19 | // quasar.conf.js -> build -> vueRouterMode
20 | // quasar.conf.js -> build -> publicPath
21 | mode: process.env.VUE_ROUTER_MODE,
22 | base: process.env.VUE_ROUTER_BASE
23 | })
24 |
25 | return Router
26 | }
27 |
--------------------------------------------------------------------------------
/src/css/quasar.variables.sass:
--------------------------------------------------------------------------------
1 | // Quasar Sass (& SCSS) Variables
2 | // --------------------------------------------------
3 | // To customize the look and feel of this app, you can override
4 | // the Sass/SCSS variables found in Quasar's source Sass/SCSS files.
5 |
6 | // Check documentation for full list of Quasar variables
7 |
8 | // Your own variables (that are declared here) and Quasar's own
9 | // ones will be available out of the box in your .vue/.scss/.sass files
10 |
11 | // It's highly recommended to change the default colors
12 | // to match your app's branding.
13 | // Tip: Use the "Theme Builder" on Quasar's documentation website.
14 |
15 | $primary : #027BE3
16 | $secondary : #26A69A
17 | $accent : #9C27B0
18 |
19 | $positive : #21BA45
20 | $negative : #C10015
21 | $info : #31CCEC
22 | $warning : #F2C037
23 |
--------------------------------------------------------------------------------
/src/components/Inputter.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/utils/color/rgbToHex.js:
--------------------------------------------------------------------------------
1 | // Universal function for color conversion to hexadecimal
2 | //
3 | export default function rgbToHex(rgbArray, delta = 0) {
4 | !(rgbArray instanceof Array)
5 | ? [
6 | rgbArray.r || rgbArray.red,
7 | rgbArray.g || rgbArray.green,
8 | rgbArray.b || rgbArray.blue
9 | ]
10 | : rgbArray;
11 | while (rgbArray.length > 3) rgbArray.pop();
12 | rgbArray =
13 | /aeft/i.test(
14 | JSON.parse(window.__adobe_cep__.getHostEnvironment()).appName
15 | ) && rgbArray.reduce((a, b) => a + b, 0) <= 3
16 | ? rgbArray.map(a => a * 255)
17 | : rgbArray;
18 | return (
19 | "#" +
20 | rgbArray
21 | .map(c => {
22 | c = c + +delta < 255 ? Math.abs(c + +delta).toString(16) : 0;
23 | return c.length < 2 ? `0${c}` : c;
24 | })
25 | .join("")
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/src/index.template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= htmlWebpackPlugin.options.productName %>
5 |
6 |
7 |
8 |
9 |
10 |
14 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/pages/QRCode.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
36 |
37 |
45 |
--------------------------------------------------------------------------------
/src/pages/BarCode.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
36 |
37 |
45 |
--------------------------------------------------------------------------------
/dist/spa/index.html:
--------------------------------------------------------------------------------
1 | Quasar App
--------------------------------------------------------------------------------
/.quasar/client-entry.js:
--------------------------------------------------------------------------------
1 | /**
2 | * THIS FILE IS GENERATED AUTOMATICALLY.
3 | * DO NOT EDIT.
4 | *
5 | * You are probably looking on adding startup/initialization code.
6 | * Use "quasar new boot " and add it there.
7 | * One boot file per concern. Then reference the file(s) in quasar.conf.js > boot:
8 | * boot: ['file', ...] // do not add ".js" extension to it.
9 | *
10 | * Boot files are your "main.js"
11 | **/
12 |
13 |
14 |
15 | import '@quasar/extras/mdi-v4/mdi-v4.css'
16 |
17 | import '@quasar/extras/roboto-font/roboto-font.css'
18 |
19 | import '@quasar/extras/material-icons/material-icons.css'
20 |
21 |
22 |
23 |
24 | // We load Quasar stylesheet file
25 | import 'quasar/dist/quasar.sass'
26 |
27 |
28 |
29 |
30 | import 'src/css/app.sass'
31 |
32 |
33 | import Vue from 'vue'
34 | import createApp from './app.js'
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Vue.config.devtools = true
46 | Vue.config.productionTip = false
47 |
48 |
49 |
50 | console.info('[Quasar] Running SPA.')
51 |
52 |
53 |
54 | const { app, store, router } = createApp()
55 |
56 |
57 |
58 | async function start () {
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | new Vue(app)
68 |
69 |
70 |
71 |
72 |
73 | }
74 |
75 | start()
76 |
--------------------------------------------------------------------------------
/src/host/universal/ES6_Array_Methods.jsx:
--------------------------------------------------------------------------------
1 | // Support for filter()
2 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
3 | //
4 | Array.prototype.filter = function(callback) {
5 | var filtered = [];
6 | for (var i = 0; i < this.length; i++)
7 | if (callback(this[i], i, this)) filtered.push(this[i]);
8 | return filtered;
9 | };
10 |
11 | // Support for find()
12 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
13 | //
14 | Array.prototype.find = function(callback) {
15 | var filtered = [];
16 | for (var i = 0; i < this.length; i++)
17 | if (callback(this[i], i, this)) return this[i];
18 | };
19 |
20 | // Support for map()
21 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
22 | //
23 | Array.prototype.map = function(callback) {
24 | var mappedParam = [];
25 | for (var i = 0; i < this.length; i++)
26 | mappedParam.push(callback(this[i], i, this));
27 | return mappedParam;
28 | };
29 |
30 | // Support for forEach()
31 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
32 | //
33 | Array.prototype.forEach = function(callback) {
34 | for (var i = 0; i < this.length; i++) callback(this[i], i, this);
35 | };
36 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "quicker",
3 | "version": "1.0.1",
4 | "description": "A Quasar Framework app",
5 | "productName": "Quasar App",
6 | "cordovaId": "org.cordova.quasar.app",
7 | "capacitorId": "",
8 | "private": true,
9 | "scripts": {
10 | "serve": "quasar dev",
11 | "build": "quasar build",
12 | "sign": "bombino-cmd sign",
13 | "switch": "bombino-cmd switch",
14 | "update": "bombino-cmd update",
15 | "register": "bombino-cmd register",
16 | "help": "bombino-cmd help"
17 | },
18 | "dependencies": {
19 | "@quasar/extras": "^1.0.0",
20 | "cep-spy": "^1.1.1",
21 | "cluecumber": "0.0.3",
22 | "jsbarcode": "^3.11.0",
23 | "lottie-web": "^5.5.9",
24 | "qrcode": "^1.4.4",
25 | "quasar": "^1.0.0",
26 | "starlette": "^0.4.4",
27 | "vue-drag-resize": "^1.3.2",
28 | "xmldom": "^0.1.27"
29 | },
30 | "devDependencies": {
31 | "@quasar/app": "^1.0.0",
32 | "bombino-commands": "^1.0.1",
33 | "boxen": "^4.1.0",
34 | "chalk": "^2.4.2",
35 | "fs-extra": "^8.1.0",
36 | "inquirer": "^7.0.0",
37 | "ora": "^4.0.2",
38 | "shelljs": "^0.8.3",
39 | "types-for-adobe": "^1.5.0"
40 | },
41 | "engines": {
42 | "node": ">= 8.9.0",
43 | "npm": ">= 5.6.0",
44 | "yarn": ">= 1.6.0"
45 | },
46 | "browserslist": [
47 | "last 1 version, not dead, ie >= 11"
48 | ]
49 | }
50 |
--------------------------------------------------------------------------------
/src/host/ILST/host.ts:
--------------------------------------------------------------------------------
1 | console.log("Host is online");
2 |
3 | function getColors() {
4 | return JSON.stringify({
5 | fg: app.activeDocument.defaultStrokeColor,
6 | bg: app.activeDocument.defaultFillColor
7 | });
8 | }
9 |
10 | function placeImage(path, name) {
11 | let file = new File(path);
12 | let imagePlace = app.activeDocument.activeLayer.placedItems.add();
13 | imagePlace.file = file;
14 | imagePlace.name = name;
15 | }
16 |
17 | function placeSVG(path, name) {
18 | app.selection = null;
19 | let file = new File(path);
20 | let groupItem = app.activeDocument.groupItems.createFromFile(file);
21 | groupItem.name = name;
22 | groupItem.selected = true;
23 | return true;
24 | }
25 |
26 | function findAllTextFrames(item) {
27 | if (/text/i.test(item.typename)) convertFontToOCRB(item);
28 | if (item.pageItems && item.pageItems.length)
29 | for (let i = 0; i < item.pageItems.length; i++)
30 | findAllTextFrames(item.pageItems[i]);
31 | }
32 |
33 | function replaceFontWithOCRB() {
34 | let selection = app.selection[0];
35 | findAllTextFrames(selection);
36 | }
37 |
38 | function convertFontToOCRB(item) {
39 | if (hasOCRBMT())
40 | item.textRange.characterAttributes.textFont = app.textFonts.getByName(
41 | "OCRBMT"
42 | );
43 | }
44 |
45 | function hasOCRBMT() {
46 | let found = false;
47 | for (let i = 0; i < app.textFonts.length; i++)
48 | if (/ocrbmt/i.test(app.textFonts[i].name)) found = true;
49 | return found;
50 | }
51 |
--------------------------------------------------------------------------------
/src/host/ILST/host.jsx:
--------------------------------------------------------------------------------
1 | console.log("Host is online");
2 | function getColors() {
3 | return JSON.stringify({
4 | fg: app.activeDocument.defaultStrokeColor,
5 | bg: app.activeDocument.defaultFillColor
6 | });
7 | }
8 | function placeImage(path, name) {
9 | var file = new File(path);
10 | var imagePlace = app.activeDocument.activeLayer.placedItems.add();
11 | imagePlace.file = file;
12 | imagePlace.name = name;
13 | }
14 | function placeSVG(path, name) {
15 | app.selection = null;
16 | var file = new File(path);
17 | var groupItem = app.activeDocument.groupItems.createFromFile(file);
18 | groupItem.name = name;
19 | groupItem.selected = true;
20 | return true;
21 | }
22 | function findAllTextFrames(item) {
23 | if (/text/i.test(item.typename))
24 | convertFontToOCRB(item);
25 | if (item.pageItems && item.pageItems.length)
26 | for (var i = 0; i < item.pageItems.length; i++)
27 | findAllTextFrames(item.pageItems[i]);
28 | }
29 | function replaceFontWithOCRB() {
30 | var selection = app.selection[0];
31 | findAllTextFrames(selection);
32 | }
33 | function convertFontToOCRB(item) {
34 | if (hasOCRBMT())
35 | item.textRange.characterAttributes.textFont = app.textFonts.getByName("OCRBMT");
36 | }
37 | function hasOCRBMT() {
38 | var found = false;
39 | for (var i = 0; i < app.textFonts.length; i++)
40 | if (/ocrbmt/i.test(app.textFonts[i].name))
41 | found = true;
42 | return found;
43 | }
44 |
--------------------------------------------------------------------------------
/.quasar/app.js:
--------------------------------------------------------------------------------
1 | /**
2 | * THIS FILE IS GENERATED AUTOMATICALLY.
3 | * DO NOT EDIT.
4 | *
5 | * You are probably looking on adding startup/initialization code.
6 | * Use "quasar new boot " and add it there.
7 | * One boot file per concern. Then reference the file(s) in quasar.conf.js > boot:
8 | * boot: ['file', ...] // do not add ".js" extension to it.
9 | *
10 | * Boot files are your "main.js"
11 | **/
12 | import Vue from 'vue'
13 | import './import-quasar.js'
14 |
15 |
16 |
17 | import App from 'app/src/App.vue'
18 |
19 |
20 | import createStore from 'app/src/store/index'
21 |
22 | import createRouter from 'app/src/router/index'
23 |
24 |
25 |
26 |
27 |
28 | export default function () {
29 | // create store and router instances
30 |
31 | const store = typeof createStore === 'function'
32 | ? createStore({Vue})
33 | : createStore
34 |
35 | const router = typeof createRouter === 'function'
36 | ? createRouter({Vue, store})
37 | : createRouter
38 |
39 | // make router instance available in store
40 | store.$router = router
41 |
42 |
43 | // Create the app instantiation Object.
44 | // Here we inject the router, store to all child components,
45 | // making them available everywhere as `this.$router` and `this.$store`.
46 | const app = {
47 | el: '#q-app',
48 | router,
49 | store,
50 | render: h => h(App)
51 | }
52 |
53 |
54 |
55 | // expose the app, the router and the store.
56 | // note we are not mounting the app here, since bootstrapping will be
57 | // different depending on whether we are in a browser or on the server.
58 | return {
59 | app,
60 | store,
61 | router
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/components/BarOptions.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
18 |
19 |
20 |
21 |
76 |
77 |
82 |
--------------------------------------------------------------------------------
/temp/barcode.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.bombino:
--------------------------------------------------------------------------------
1 | {"VUE":{"paths":{"index":"./public/index.html","dev":"./public/index-dev.html","manifest":"./CSXS/manifest.xml","debug":"./.debug","package":"./package.json","packageLock":"./package-lock.json"},"host":"./src/host"},"QUASAR":{"paths":{"index":"./src/index.template.html","dev":"./src/index-dev.html","manifest":"./CSXS/manifest.xml","debug":"./.debug","package":"./package.json","packageLock":"./package-lock.json"},"host":"./src/host"},"_MODELS":[{"name":"VUE","label":"Vue-CLI","placeholders":["name","title","hostlist","hostlist_debug"],"exclusive":"./vue.config.js","isCustom":false},{"name":"QUASAR","label":"Quasar-CLI","placeholders":["name","title","hostlist","hostlist_debug","qDesc","qWidth","qHeader"],"exclusive":"./quasar.conf.js","isCustom":false}],"_TEMPLATES":[],"_OPTIONS":{"dirty":true,"lastTemplate":"Inventsable/bombino-quasar-slim"},"_PLACEHOLDERS":{"name":{"value":"$BOMBINO_NAME$","templateRX":"/\\$BOMBINO_NAME\\$/gm","settingsKey":"extName","panelRX":{"manifest":"/\\(.*)\\<\\/title\\>/","dev":"/\\(.*)\\<\\/title\\>/","package":"/\\\"name\\\"\\:\\s\\\"(.*)\\\"/","packageLock":"/\\\"name\\\"\\:\\s\\\"(.*)\\\"/"},"targets":["manifest","dev","package","packageLock"]},"title":{"value":"$BOMBINO_TITLE$","templateRX":"/\\$BOMBINO_TITLE\\$/gm","settingsKey":"dirName","panelRX":{"manifest":"/\\"},localhost:function(){return c["default"].localhost}},watch:{contextMenu:function(t){this.setContextMenu()},flyoutMenu:function(t){this.setFlyoutMenu()}},mounted:function(){this.init()},methods:{contextMenuClicked:function(t){"refresh"==t?location.reload():"localhost"==t?c["default"].launchLocalhost():"modal"==t&&this.app.launchModal()},flyoutMenuClicked:function(t){var e=t.data.menuId;"refresh"==e&&location.reload()},setContextMenu:function(){window.__adobe_cep__.invokeAsync("setContextMenuByJSON",JSON.stringify(this.context),this.contextMenuClicked)},setFlyoutMenu:function(){window.__adobe_cep__.invokeSync("setPanelFlyoutMenu",this.flyoutMenu),window.__adobe_cep__.addEventListener("com.adobe.csxs.events.flyoutMenuClicked",this.flyoutMenuClicked)},init:function(){this.setContextMenu(),this.setFlyoutMenu(),this.app.menus=this}}},r=i,s=(n("2348"),n("2877")),u=Object(s["a"])(r,o,a,!1,null,null,null);e["default"]=u.exports},"8cad":function(t,e){t.exports=require("util")},"9ac2":function(t,e){t.exports=require("stream")},"9b0f":function(t,e){t.exports=require("fs")},a32b:function(t,e){t.exports=require("path")},c4ee:function(t,e,n){},c89b:function(t,e,n){},d54e:function(t,e,n){"use strict";var o=n("c89b"),a=n.n(o);a.a},e1f5:function(t,e,n){"use strict";n.r(e);var o=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("q-ajax-bar",{ref:"bar",attrs:{position:t.position,size:"6px","skip-hijack":""}})},a=[],c={props:{position:{type:String,default:"bottom"}},computed:{app:function(){return this.$root.$children[0]}},mounted:function(){this.app.loadingBar=this},methods:{trigger:function(){var t=this,e=this.$refs.bar;e.start(),this.timer=setTimeout((function(){t.$refs.bar&&t.$refs.bar.stop()}),3e3*Math.random()+1e3)}}},i=c,r=(n("d54e"),n("2877")),s=n("fe09"),u=Object(r["a"])(i,o,a,!1,null,"241fe89a",null);e["default"]=u.exports;u.options.components=Object.assign({QAjaxBar:s["a"]},u.options.components||{})}},[[0,"runtime","vendor"]]]);
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
185 |
186 |
319 |
--------------------------------------------------------------------------------
/src/assets/tutorial-pull.json:
--------------------------------------------------------------------------------
1 | {"v":"5.5.9","fr":30,"ip":0,"op":168,"w":400,"h":400,"nm":"tutorial_Refresh","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"masterLoader","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-52,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[60,60,100],"ix":6}},"ao":0,"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"masterSync","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.48,"y":0.04},"t":27,"s":[200,10,0],"to":[0,30.833,0],"ti":[0,-30.833,0]},{"i":{"x":0.1,"y":0.1},"o":{"x":0.167,"y":0.167},"t":57,"s":[200,195,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.52,"y":0.96},"o":{"x":0.9,"y":0},"t":120,"s":[200,195,0],"to":[0,-30.833,0],"ti":[0,30.833,0]},{"t":150,"s":[200,10,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"masterCursor","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,101,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"arrow","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.84],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[100]},{"t":67,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.5,-6.321,0],"ix":2},"a":{"a":0,"k":[-0.5,-6.321,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,-28.858],[0,-43],[0,-57.142],[14.142,-43]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.160784313725,0.827450980392,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":".anim-selection","mn":"ADBE Vector Graphic - Stroke","hd":false,"cl":"anim-selection"},{"ty":"fl","c":{"a":0,"k":[0.133041127523,0.160273353726,0.827450980392,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":".anim-selection","mn":"ADBE Vector Graphic - Fill","hd":false,"cl":"anim-selection"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-12.15],[7.962,-7.962],[12.15,0],[7.962,7.962],[0,12.15],[-7.962,7.962],[-12.15,0]],"o":[[0,12.15],[-7.962,7.962],[-12.15,0],[-7.962,-7.962],[0,-12.15],[7.962,-7.962],[12.15,0]],"v":[[43.5,0.5],[30.613,31.613],[-0.5,44.5],[-31.613,31.613],[-44.5,0.5],[-31.613,-30.613],[-0.5,-43.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.160784313725,0.827450980392,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":".anim-selection","mn":"ADBE Vector Graphic - Stroke","hd":false,"cl":"anim-selection"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"spinner","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[100]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":99,"s":[100]},{"t":119,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.5,0.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[88,88],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.160784313725,0.827450980392,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":".anim-selection","mn":"ADBE Vector Graphic - Stroke","hd":false,"cl":"anim-selection"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[25]},{"i":{"x":[0.671],"y":[1.001]},"o":{"x":[0.338],"y":[0]},"t":89,"s":[75]},{"i":{"x":[0.88],"y":[0.595]},"o":{"x":[0.636],"y":[0.012]},"t":90,"s":[87.986]},{"i":{"x":[-0.004],"y":[1]},"o":{"x":[0.184],"y":[0.474]},"t":112,"s":[55.025]},{"t":140,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.338],"y":[0.683]},"o":{"x":[0.264],"y":[0.143]},"t":57,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.227],"y":[0.146]},"t":71,"s":[192.518]},{"i":{"x":[0.891],"y":[0.873]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[326]},{"i":{"x":[0.009],"y":[1]},"o":{"x":[0.164],"y":[0.292]},"t":106,"s":[683.62]},{"t":132,"s":[958]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"spinnerBG","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":66,"s":[100]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.84],"y":[0]},"t":99,"s":[100]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":119,"s":[0]},{"t":141,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.84],"y":[0]},"t":37,"s":[90]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[360]},{"t":67,"s":[511]}],"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[148,148],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.887581646442,0.748353123665,0.748353123665,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":".anim-loaderbg","mn":"ADBE Vector Graphic - Fill","hd":false,"cl":"anim-loaderbg"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"cursor","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[17.375,43.917,0],"ix":2},"a":{"a":0,"k":[17.375,43.917,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.1,88.934],[25.984,62.866],[62.849,62.866],[-0.1,-0.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":".anim-bg","mn":"ADBE Vector Graphic - Stroke","hd":false,"cl":"anim-bg"},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":".anim-default","mn":"ADBE Vector Graphic - Fill","hd":false,"cl":"anim-default"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"clickIndicator 2","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.42],"y":[0]},"t":17,"s":[0]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":27,"s":[25]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.42],"y":[0]},"t":54,"s":[25]},{"t":65,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[120,120],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.549019607843,0.070588235294,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":".anim-indicator","mn":"ADBE Vector Graphic - Stroke","hd":false,"cl":"anim-indicator"},{"ty":"fl","c":{"a":0,"k":[1,0.549019607843,0.070588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":".anim-indicator","mn":"ADBE Vector Graphic - Fill","hd":false,"cl":"anim-indicator"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\n$bm_rt = thisComp.layer('clickIndicator').content('Group 1').transform.scale;"},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"clickIndicator","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.9],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.42],"y":[0]},"t":17,"s":[100]},{"i":{"x":[0.58],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":27,"s":[50]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.42],"y":[0]},"t":54,"s":[50]},{"t":65,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[120,120],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.741176486015,0.109803922474,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":".anim-indicator","mn":"ADBE Vector Graphic - Fill","hd":true,"cl":"anim-indicator"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.58,0.58],"y":[1,1]},"o":{"x":[0.9,0.9],"y":[0,0]},"t":6,"s":[50,50]},{"i":{"x":[0.58,0.58],"y":[1,1]},"o":{"x":[0.42,0.42],"y":[0,0]},"t":17,"s":[111,111]},{"i":{"x":[0.58,0.58],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0,0]},"t":27,"s":[100,100]},{"i":{"x":[0.1,0.1],"y":[1,1]},"o":{"x":[0.42,0.42],"y":[0,0]},"t":54,"s":[100,100]},{"t":65,"s":[50,50]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":0,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.549019634724,0.070588238537,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":".anim-indicator","mn":"ADBE Vector Graphic - Stroke","hd":false,"cl":"anim-indicator"}],"ip":0,"op":168,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"bg","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[200,200],[-200,200],[-200,-200],[200,-200]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":168,"st":0,"bm":0}],"markers":[]}
--------------------------------------------------------------------------------
/src/host/universal/json2.jsx:
--------------------------------------------------------------------------------
1 | // https://github.com/douglascrockford/JSON-js/blob/master/json2.js
2 | // json2.js
3 | // 2017-06-12
4 | // Public Domain.
5 | // NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
6 |
7 | // USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
8 | // NOT CONTROL.
9 |
10 | // This file creates a global JSON object containing two methods: stringify
11 | // and parse. This file provides the ES5 JSON capability to ES3 systems.
12 | // If a project might run on IE8 or earlier, then this file should be included.
13 | // This file does nothing on ES5 systems.
14 |
15 | // JSON.stringify(value, replacer, space)
16 | // value any JavaScript value, usually an object or array.
17 | // replacer an optional parameter that determines how object
18 | // values are stringified for objects. It can be a
19 | // function or an array of strings.
20 | // space an optional parameter that specifies the indentation
21 | // of nested structures. If it is omitted, the text will
22 | // be packed without extra whitespace. If it is a number,
23 | // it will specify the number of spaces to indent at each
24 | // level. If it is a string (such as "\t" or " "),
25 | // it contains the characters used to indent at each level.
26 | // This method produces a JSON text from a JavaScript value.
27 | // When an object value is found, if the object contains a toJSON
28 | // method, its toJSON method will be called and the result will be
29 | // stringified. A toJSON method does not serialize: it returns the
30 | // value represented by the name/value pair that should be serialized,
31 | // or undefined if nothing should be serialized. The toJSON method
32 | // will be passed the key associated with the value, and this will be
33 | // bound to the value.
34 |
35 | // For example, this would serialize Dates as ISO strings.
36 |
37 | // Date.prototype.toJSON = function (key) {
38 | // function f(n) {
39 | // // Format integers to have at least two digits.
40 | // return (n < 10)
41 | // ? "0" + n
42 | // : n;
43 | // }
44 | // return this.getUTCFullYear() + "-" +
45 | // f(this.getUTCMonth() + 1) + "-" +
46 | // f(this.getUTCDate()) + "T" +
47 | // f(this.getUTCHours()) + ":" +
48 | // f(this.getUTCMinutes()) + ":" +
49 | // f(this.getUTCSeconds()) + "Z";
50 | // };
51 |
52 | // You can provide an optional replacer method. It will be passed the
53 | // key and value of each member, with this bound to the containing
54 | // object. The value that is returned from your method will be
55 | // serialized. If your method returns undefined, then the member will
56 | // be excluded from the serialization.
57 |
58 | // If the replacer parameter is an array of strings, then it will be
59 | // used to select the members to be serialized. It filters the results
60 | // such that only members with keys listed in the replacer array are
61 | // stringified.
62 |
63 | // Values that do not have JSON representations, such as undefined or
64 | // functions, will not be serialized. Such values in objects will be
65 | // dropped; in arrays they will be replaced with null. You can use
66 | // a replacer function to replace those with JSON values.
67 |
68 | // JSON.stringify(undefined) returns undefined.
69 |
70 | // The optional space parameter produces a stringification of the
71 | // value that is filled with line breaks and indentation to make it
72 | // easier to read.
73 |
74 | // If the space parameter is a non-empty string, then that string will
75 | // be used for indentation. If the space parameter is a number, then
76 | // the indentation will be that many spaces.
77 |
78 | // Example:
79 |
80 | // text = JSON.stringify(["e", {pluribus: "unum"}]);
81 | // // text is '["e",{"pluribus":"unum"}]'
82 |
83 | // text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
84 | // // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
85 |
86 | // text = JSON.stringify([new Date()], function (key, value) {
87 | // return this[key] instanceof Date
88 | // ? "Date(" + this[key] + ")"
89 | // : value;
90 | // });
91 | // // text is '["Date(---current time---)"]'
92 |
93 | // JSON.parse(text, reviver)
94 | // This method parses a JSON text to produce an object or array.
95 | // It can throw a SyntaxError exception.
96 |
97 | // The optional reviver parameter is a function that can filter and
98 | // transform the results. It receives each of the keys and values,
99 | // and its return value is used instead of the original value.
100 | // If it returns what it received, then the structure is not modified.
101 | // If it returns undefined then the member is deleted.
102 |
103 | // Example:
104 |
105 | // // Parse the text. Values that look like ISO date strings will
106 | // // be converted to Date objects.
107 |
108 | // myData = JSON.parse(text, function (key, value) {
109 | // var a;
110 | // if (typeof value === "string") {
111 | // a =
112 | // /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
113 | // if (a) {
114 | // return new Date(Date.UTC(
115 | // +a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]
116 | // ));
117 | // }
118 | // return value;
119 | // }
120 | // });
121 |
122 | // myData = JSON.parse(
123 | // "[\"Date(09/09/2001)\"]",
124 | // function (key, value) {
125 | // var d;
126 | // if (
127 | // typeof value === "string"
128 | // && value.slice(0, 5) === "Date("
129 | // && value.slice(-1) === ")"
130 | // ) {
131 | // d = new Date(value.slice(5, -1));
132 | // if (d) {
133 | // return d;
134 | // }
135 | // }
136 | // return value;
137 | // }
138 | // );
139 |
140 | // This is a reference implementation. You are free to copy, modify, or
141 | // redistribute.
142 |
143 | /*jslint
144 | eval, for, this
145 | */
146 |
147 | /*property
148 | JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
149 | getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
150 | lastIndex, length, parse, prototype, push, replace, slice, stringify,
151 | test, toJSON, toString, valueOf
152 | */
153 |
154 |
155 | // Create a JSON object only if one does not already exist. We create the
156 | // methods in a closure to avoid creating global variables.
157 |
158 | if (typeof JSON !== "object") {
159 | JSON = {};
160 | }
161 |
162 | (function () {
163 | "use strict";
164 |
165 | var rx_one = /^[\],:{}\s]*$/;
166 | var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
167 | var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
168 | var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
169 | var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
170 | var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
171 |
172 | function f(n) {
173 | // Format integers to have at least two digits.
174 | return (n < 10)
175 | ? "0" + n
176 | : n;
177 | }
178 |
179 | function this_value() {
180 | return this.valueOf();
181 | }
182 |
183 | if (typeof Date.prototype.toJSON !== "function") {
184 |
185 | Date.prototype.toJSON = function () {
186 |
187 | return isFinite(this.valueOf())
188 | ? (
189 | this.getUTCFullYear()
190 | + "-"
191 | + f(this.getUTCMonth() + 1)
192 | + "-"
193 | + f(this.getUTCDate())
194 | + "T"
195 | + f(this.getUTCHours())
196 | + ":"
197 | + f(this.getUTCMinutes())
198 | + ":"
199 | + f(this.getUTCSeconds())
200 | + "Z"
201 | )
202 | : null;
203 | };
204 |
205 | Boolean.prototype.toJSON = this_value;
206 | Number.prototype.toJSON = this_value;
207 | String.prototype.toJSON = this_value;
208 | }
209 |
210 | var gap;
211 | var indent;
212 | var meta;
213 | var rep;
214 |
215 |
216 | function quote(string) {
217 |
218 | // If the string contains no control characters, no quote characters, and no
219 | // backslash characters, then we can safely slap some quotes around it.
220 | // Otherwise we must also replace the offending characters with safe escape
221 | // sequences.
222 |
223 | rx_escapable.lastIndex = 0;
224 | return rx_escapable.test(string)
225 | ? "\"" + string.replace(rx_escapable, function (a) {
226 | var c = meta[a];
227 | return typeof c === "string"
228 | ? c
229 | : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
230 | }) + "\""
231 | : "\"" + string + "\"";
232 | }
233 |
234 |
235 | function str(key, holder) {
236 |
237 | // Produce a string from holder[key].
238 |
239 | var i; // The loop counter.
240 | var k; // The member key.
241 | var v; // The member value.
242 | var length;
243 | var mind = gap;
244 | var partial;
245 | var value = holder[key];
246 |
247 | // If the value has a toJSON method, call it to obtain a replacement value.
248 |
249 | if (
250 | value
251 | && typeof value === "object"
252 | && typeof value.toJSON === "function"
253 | ) {
254 | value = value.toJSON(key);
255 | }
256 |
257 | // If we were called with a replacer function, then call the replacer to
258 | // obtain a replacement value.
259 |
260 | if (typeof rep === "function") {
261 | value = rep.call(holder, key, value);
262 | }
263 |
264 | // What happens next depends on the value's type.
265 |
266 | switch (typeof value) {
267 | case "string":
268 | return quote(value);
269 |
270 | case "number":
271 |
272 | // JSON numbers must be finite. Encode non-finite numbers as null.
273 |
274 | return (isFinite(value))
275 | ? String(value)
276 | : "null";
277 |
278 | case "boolean":
279 | case "null":
280 |
281 | // If the value is a boolean or null, convert it to a string. Note:
282 | // typeof null does not produce "null". The case is included here in
283 | // the remote chance that this gets fixed someday.
284 |
285 | return String(value);
286 |
287 | // If the type is "object", we might be dealing with an object or an array or
288 | // null.
289 |
290 | case "object":
291 |
292 | // Due to a specification blunder in ECMAScript, typeof null is "object",
293 | // so watch out for that case.
294 |
295 | if (!value) {
296 | return "null";
297 | }
298 |
299 | // Make an array to hold the partial results of stringifying this object value.
300 |
301 | gap += indent;
302 | partial = [];
303 |
304 | // Is the value an array?
305 |
306 | if (Object.prototype.toString.apply(value) === "[object Array]") {
307 |
308 | // The value is an array. Stringify every element. Use null as a placeholder
309 | // for non-JSON values.
310 |
311 | length = value.length;
312 | for (i = 0; i < length; i += 1) {
313 | partial[i] = str(i, value) || "null";
314 | }
315 |
316 | // Join all of the elements together, separated with commas, and wrap them in
317 | // brackets.
318 |
319 | v = partial.length === 0
320 | ? "[]"
321 | : gap
322 | ? (
323 | "[\n"
324 | + gap
325 | + partial.join(",\n" + gap)
326 | + "\n"
327 | + mind
328 | + "]"
329 | )
330 | : "[" + partial.join(",") + "]";
331 | gap = mind;
332 | return v;
333 | }
334 |
335 | // If the replacer is an array, use it to select the members to be stringified.
336 |
337 | if (rep && typeof rep === "object") {
338 | length = rep.length;
339 | for (i = 0; i < length; i += 1) {
340 | if (typeof rep[i] === "string") {
341 | k = rep[i];
342 | v = str(k, value);
343 | if (v) {
344 | partial.push(quote(k) + (
345 | (gap)
346 | ? ": "
347 | : ":"
348 | ) + v);
349 | }
350 | }
351 | }
352 | } else {
353 |
354 | // Otherwise, iterate through all of the keys in the object.
355 |
356 | for (k in value) {
357 | if (Object.prototype.hasOwnProperty.call(value, k)) {
358 | v = str(k, value);
359 | if (v) {
360 | partial.push(quote(k) + (
361 | (gap)
362 | ? ": "
363 | : ":"
364 | ) + v);
365 | }
366 | }
367 | }
368 | }
369 |
370 | // Join all of the member texts together, separated with commas,
371 | // and wrap them in braces.
372 |
373 | v = partial.length === 0
374 | ? "{}"
375 | : gap
376 | ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
377 | : "{" + partial.join(",") + "}";
378 | gap = mind;
379 | return v;
380 | }
381 | }
382 |
383 | // If the JSON object does not yet have a stringify method, give it one.
384 |
385 | if (typeof JSON.stringify !== "function") {
386 | meta = { // table of character substitutions
387 | "\b": "\\b",
388 | "\t": "\\t",
389 | "\n": "\\n",
390 | "\f": "\\f",
391 | "\r": "\\r",
392 | "\"": "\\\"",
393 | "\\": "\\\\"
394 | };
395 | JSON.stringify = function (value, replacer, space) {
396 |
397 | // The stringify method takes a value and an optional replacer, and an optional
398 | // space parameter, and returns a JSON text. The replacer can be a function
399 | // that can replace values, or an array of strings that will select the keys.
400 | // A default replacer method can be provided. Use of the space parameter can
401 | // produce text that is more easily readable.
402 |
403 | var i;
404 | gap = "";
405 | indent = "";
406 |
407 | // If the space parameter is a number, make an indent string containing that
408 | // many spaces.
409 |
410 | if (typeof space === "number") {
411 | for (i = 0; i < space; i += 1) {
412 | indent += " ";
413 | }
414 |
415 | // If the space parameter is a string, it will be used as the indent string.
416 |
417 | } else if (typeof space === "string") {
418 | indent = space;
419 | }
420 |
421 | // If there is a replacer, it must be a function or an array.
422 | // Otherwise, throw an error.
423 |
424 | rep = replacer;
425 | if (replacer && typeof replacer !== "function" && (
426 | typeof replacer !== "object"
427 | || typeof replacer.length !== "number"
428 | )) {
429 | throw new Error("JSON.stringify");
430 | }
431 |
432 | // Make a fake root object containing our value under the key of "".
433 | // Return the result of stringifying the value.
434 |
435 | return str("", {"": value});
436 | };
437 | }
438 |
439 |
440 | // If the JSON object does not yet have a parse method, give it one.
441 |
442 | if (typeof JSON.parse !== "function") {
443 | JSON.parse = function (text, reviver) {
444 |
445 | // The parse method takes a text and an optional reviver function, and returns
446 | // a JavaScript value if the text is a valid JSON text.
447 |
448 | var j;
449 |
450 | function walk(holder, key) {
451 |
452 | // The walk method is used to recursively walk the resulting structure so
453 | // that modifications can be made.
454 |
455 | var k;
456 | var v;
457 | var value = holder[key];
458 | if (value && typeof value === "object") {
459 | for (k in value) {
460 | if (Object.prototype.hasOwnProperty.call(value, k)) {
461 | v = walk(value, k);
462 | if (v !== undefined) {
463 | value[k] = v;
464 | } else {
465 | delete value[k];
466 | }
467 | }
468 | }
469 | }
470 | return reviver.call(holder, key, value);
471 | }
472 |
473 |
474 | // Parsing happens in four stages. In the first stage, we replace certain
475 | // Unicode characters with escape sequences. JavaScript handles many characters
476 | // incorrectly, either silently deleting them, or treating them as line endings.
477 |
478 | text = String(text);
479 | rx_dangerous.lastIndex = 0;
480 | if (rx_dangerous.test(text)) {
481 | text = text.replace(rx_dangerous, function (a) {
482 | return (
483 | "\\u"
484 | + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
485 | );
486 | });
487 | }
488 |
489 | // In the second stage, we run the text against regular expressions that look
490 | // for non-JSON patterns. We are especially concerned with "()" and "new"
491 | // because they can cause invocation, and "=" because it can cause mutation.
492 | // But just to be safe, we want to reject all unexpected forms.
493 |
494 | // We split the second stage into 4 regexp operations in order to work around
495 | // crippling inefficiencies in IE's and Safari's regexp engines. First we
496 | // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
497 | // replace all simple value tokens with "]" characters. Third, we delete all
498 | // open brackets that follow a colon or comma or that begin the text. Finally,
499 | // we look to see that the remaining characters are only whitespace or "]" or
500 | // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
501 |
502 | if (
503 | rx_one.test(
504 | text
505 | .replace(rx_two, "@")
506 | .replace(rx_three, "]")
507 | .replace(rx_four, "")
508 | )
509 | ) {
510 |
511 | // In the third stage we use the eval function to compile the text into a
512 | // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
513 | // in JavaScript: it can begin a block or an object literal. We wrap the text
514 | // in parens to eliminate the ambiguity.
515 |
516 | j = eval("(" + text + ")");
517 |
518 | // In the optional fourth stage, we recursively walk the new structure, passing
519 | // each name/value pair to a reviver function for possible transformation.
520 |
521 | return (typeof reviver === "function")
522 | ? walk({"": j}, "")
523 | : j;
524 | }
525 |
526 | // If the text is not JSON parseable, then a SyntaxError is thrown.
527 |
528 | throw new SyntaxError("JSON.parse");
529 | };
530 | }
531 | }());
532 |
--------------------------------------------------------------------------------
/src/utils/dev/npmCommands.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | const chalk = require("chalk");
4 | const fse = require("fs-extra");
5 | const fs = require("fs");
6 | const shell = require("shelljs");
7 | const inquirer = require("inquirer");
8 |
9 | // Box-style message for end
10 | const boxen = require("boxen");
11 | const BOXEN_OPTS = {
12 | padding: 1,
13 | margin: 1,
14 | align: "center",
15 | borderColor: "yellow",
16 | borderStyle: "round"
17 | };
18 |
19 | const osPrefix = process.platform === "win32" ? "" : `./`;
20 |
21 | // Spinner component for terminal
22 | const ora = require("ora");
23 | const ORA_SPINNER = {
24 | interval: 80,
25 | frames: [
26 | " ⠋",
27 | " ⠙",
28 | " ⠚",
29 | " ⠞",
30 | " ⠖",
31 | " ⠦",
32 | " ⠴",
33 | " ⠲",
34 | " ⠳",
35 | " ⠓"
36 | ]
37 | };
38 |
39 | const cepBlock = `${chalk.black.bgBlue(" CEP ")}`;
40 | const helpPrompt = `${cepBlock} Didn't mean to do that? Use ${chalk.yellow(
41 | "npm run help"
42 | )} to see a full list of commands`;
43 |
44 | module.exports = {
45 | ignore: async function() {
46 | let ignores;
47 | },
48 | help: async function() {
49 | const extVersion = getExtVersion();
50 | const extName = getExtName();
51 | console.log(" Welcome! You can run these commands at any time:");
52 | console.log("");
53 | console.log(
54 | `${chalk.black.bgGreen(" QUA ")} ${chalk.yellow(
55 | "quasar dev"
56 | )} — Run the development server (${chalk.blue("DEVELOPER")})`
57 | );
58 | console.log(
59 | `${chalk.black.bgGreen(" QUA ")} ${chalk.yellow(
60 | "quasar build"
61 | )} — Compile to ${chalk.green("./dist/spa/")} directory (${chalk.blue(
62 | "PRODUCTION"
63 | )})`
64 | );
65 | console.log(
66 | `${cepBlock} ${chalk.yellow(
67 | "npm run switch"
68 | )} — Switch between ${chalk.blue("DEVELOPER")} and ${chalk.blue(
69 | "PRODUCTION"
70 | )}`
71 | );
72 | console.log(
73 | `${cepBlock} ${chalk.yellow(
74 | "npm run update"
75 | )} — Update the panel's version`
76 | );
77 | console.log(
78 | `${cepBlock} ${chalk.yellow(
79 | "npm run register"
80 | )} — Register the info to be used in ${chalk.yellow("npm run sign")}`
81 | );
82 | console.log(
83 | `${cepBlock} ${chalk.yellow(
84 | "npm run sign"
85 | )} — Stage, sign, and certify panel with result as ${chalk.green(
86 | `./archive/${extName}${extVersion}.zxp`
87 | )}`
88 | );
89 | console.log("");
90 | console.log(
91 | ` - Documentation per template can be found at the generator repo here:`
92 | );
93 | console.log(
94 | ` ${chalk.blue(
95 | "https://github.com/Inventsable/generator-cep-quasar-cli#templates"
96 | )}`
97 | );
98 | console.log("");
99 | console.log(
100 | ` - An outline of how to use this workflow and what each command does can be found here:`
101 | );
102 | console.log(
103 | ` ${chalk.blue(
104 | "https://github.com/Inventsable/CEP-Self-Signing-Panel#usage"
105 | )}`
106 | );
107 | console.log(
108 | ` ${chalk.blue(
109 | "https://github.com/Inventsable/CEP-Self-Signing-Panel#what-do-they-do"
110 | )}`
111 | );
112 | return "";
113 | },
114 | register: async function() {
115 | console.log(`${helpPrompt}`);
116 | console.log(``);
117 | let user = shell.exec("git config user.name", { silent: true }).stdout;
118 | user = user.replace(" ", "-").trim();
119 | let certInfo;
120 | if (fs.existsSync(`./src/utils/dev/certInfo.txt`)) {
121 | certInfo = fs.readFileSync(`./src/utils/dev/certInfo.txt`, {
122 | encoding: "utf-8"
123 | });
124 | console.log(
125 | `${cepBlock} Current string for certs is ${chalk.green(
126 | certInfo.split(";").join(" ")
127 | )}`
128 | );
129 | console.log("");
130 | } else {
131 | certInfo = "US;NY;SomeOrg";
132 | console.log(
133 | `${chalk.red(
134 | "✘ "
135 | )} No user data was found! It will default to ${chalk.green(
136 | certInfo.split(";").join(" ")
137 | )}`
138 | );
139 | }
140 | certInfo = certInfo.split(";");
141 | if (certInfo.length < 4) certInfo = [].concat(certInfo, [user]);
142 | promptRegister(certInfo).then(answer => {
143 | let fulldetails = [answer.country, answer.state, answer.org, answer.name];
144 | let finaldetails = fulldetails.map(ans => {
145 | return /\s/.test(ans) ? ans.split(" ").join("-") : ans;
146 | });
147 | fs.writeFileSync(`./src/utils/dev/certInfo.txt`, finaldetails.join(";"));
148 | console.log("");
149 | console.log(
150 | ` ${chalk.green("✔ ")} Config has been saved to ${chalk.green(
151 | "./src/utils/dev/certInfo.txt"
152 | )}`
153 | );
154 | console.log(
155 | ` Self-signed certificates via ${chalk.yellow(
156 | "npm run sign"
157 | )} will use this data!`
158 | );
159 | console.log("");
160 | });
161 | },
162 | sign: async function() {
163 | console.log(`${helpPrompt}`);
164 | console.log(``);
165 | // gathering data
166 | const extVersion = getExtVersion();
167 | const extName = getExtName();
168 | const extString = `${extName}${extVersion}`;
169 |
170 | shell.config.silent = true;
171 | let pwd = shell.pwd();
172 | const rootDir = pwd.match(/[^\\|\/]*$/)[0];
173 | shell.config.silent = false;
174 |
175 | // beginning the prompts
176 |
177 | console.log(`${cepBlock} Signing ${chalk.blue(extString)}!`);
178 | console.log("");
179 | console.log(
180 | ` Be sure to run ${chalk.yellow(
181 | "npm run register"
182 | )} prior to this command.`
183 | );
184 | console.log(
185 | ` You can add any valid regex or phrases to ${chalk.green(
186 | "./src/utils/dev/.certignore"
187 | )} to exclude them from staging.`
188 | );
189 | console.log("");
190 |
191 | promptUser().then(answer => {
192 | let spinner = ora({
193 | text: `Staging temp files...`,
194 | spinner: ORA_SPINNER
195 | }).start();
196 | stageExtensionFolder(extString).then(res => {
197 | spinner.stopAndPersist({
198 | symbol: chalk.green(" ✔ "),
199 | text: `Staging complete.`
200 | });
201 | spinner = ora({
202 | text: `Running ${chalk.yellow("ZXPSignCmd")} for you...`,
203 | spinner: ORA_SPINNER
204 | }).start();
205 | setTimeout(() => {
206 | signCommands(res, rootDir, answer.password, answer.createZip).then(
207 | () => {
208 | console.log("");
209 | spinner.stopAndPersist({
210 | symbol: chalk.green(" ✔ "),
211 | text: `Signing is complete.`
212 | });
213 | fse.removeSync(`./${extString}-tmp`);
214 | fse.removeSync(`./${rootDir}/archive/temp1.p12`);
215 | console.log(
216 | boxen(`${chalk.blue(`${extString}.zxp`)} is ready!`, {
217 | ...BOXEN_OPTS,
218 | ...{
219 | borderColor: "blue"
220 | }
221 | })
222 | );
223 | console.log(
224 | ` You can find it in ${chalk.green(
225 | `./archive/${extString}.zxp`
226 | )}`
227 | );
228 | console.log("");
229 | }
230 | );
231 | }, 1000);
232 | });
233 | });
234 | return "";
235 | },
236 | switch: async function() {
237 | console.log(`${helpPrompt}`);
238 | console.log(``);
239 | const extVersion = getExtVersion();
240 | const extName = getExtName();
241 | const extString = `${extName}${extVersion}`;
242 |
243 | let isDev = await getCurrentContext();
244 | console.log(
245 | `${cepBlock} ${chalk.blue(extString)} is in ${chalk.blue(
246 | `${isDev ? "DEVELOPER" : "PRODUCTION"}`
247 | )}`
248 | );
249 | console.log("");
250 | await inquirer
251 | .prompt([
252 | {
253 | type: "confirm",
254 | name: "shouldSwitch",
255 | message: `Would you like to switch to ${chalk.blue(
256 | `${!isDev ? "DEVELOPER" : "PRODUCTION"}`
257 | )}?`,
258 | default: true
259 | }
260 | ])
261 | .then(answer => {
262 | if (answer.shouldSwitch)
263 | switchContext()
264 | .then(res => {
265 | console.log(
266 | boxen(`Context switched to ${chalk.blue(res)}`, {
267 | ...BOXEN_OPTS,
268 | ...{
269 | borderColor: "blue"
270 | }
271 | })
272 | );
273 | console.log(` ${chalk.green("✔ ")} Switch successful!`);
274 | endMessage(true);
275 | })
276 | .catch(err => {
277 | console.log(
278 | `${chalk.red(
279 | "✘ "
280 | )} Something went wrong! Double-check your ${chalk.green(
281 | "manifest.xml"
282 | )} file.`
283 | );
284 | return null;
285 | });
286 | else {
287 | console.log("");
288 | console.log(` All right! No changes have been made.`);
289 | endMessage();
290 | }
291 | })
292 | .catch(err => {
293 | console.log("Closing...");
294 | });
295 |
296 | return "";
297 | },
298 | update: async function() {
299 | console.log(`${helpPrompt}`);
300 | const extVersion = getExtVersion();
301 | const extName = getExtName();
302 | console.log("");
303 | console.log(
304 | `${cepBlock} ${chalk.blue(extName)} is currently ${chalk.green(
305 | `v${extVersion}`
306 | )}`
307 | );
308 | console.log("");
309 | await inquirer
310 | .prompt([
311 | {
312 | type: "confirm",
313 | name: "shouldUpdate",
314 | message: `Update version?`,
315 | default: true
316 | }
317 | ])
318 | .then(answer => {
319 | if (answer.shouldUpdate) {
320 | findTier(extVersion.split(".")).then(answerver => {
321 | let chosen = extVersion.split(".")[answerver.versionIndex];
322 | promptNewNumber(chosen).then(ans => {
323 | let newVersion = extVersion.split(".");
324 | newVersion[answerver.versionIndex] = ans.newTier;
325 | setExtVersion(extVersion, newVersion).then(updated => {
326 | console.log("");
327 | console.log(` ${chalk.green("✔ ")} Update successful!`);
328 | console.log(
329 | boxen(
330 | `${chalk.blue(extName)} updated to ${chalk.green(
331 | `v${updated}`
332 | )}`,
333 | {
334 | ...BOXEN_OPTS,
335 | ...{
336 | borderColor: "blue"
337 | }
338 | }
339 | )
340 | );
341 | });
342 | });
343 | });
344 | } else {
345 | console.log("");
346 | console.log(` All right! No changes will be made.`);
347 | endMessage();
348 | }
349 | })
350 | .catch(err => {
351 | //
352 | });
353 |
354 | return "";
355 | }
356 | };
357 |
358 | // GLOBAL
359 | function getExtVersion() {
360 | const xml = fs.readFileSync(`./CSXS/manifest.xml`, { encoding: "utf-8" });
361 | const bundleVersion = /ExtensionBundleVersion\=\"(\d|\.)*(?=\")/;
362 | const matches = xml.match(bundleVersion);
363 | return matches.length ? matches[0].replace(/\w*\=\"/, "") : "Unknown";
364 | }
365 |
366 | function getExtName() {
367 | const xml = fs.readFileSync(`./CSXS/manifest.xml`, { encoding: "utf-8" });
368 | const bundleVersion = /Menu\>.*(?=\<)/;
369 | const matches = xml.match(bundleVersion);
370 | return matches.length
371 | ? matches[0]
372 | .replace(/Menu\>/, "")
373 | .split(" ")
374 | .join("-")
375 | : "Unknown";
376 | }
377 | // ----------------------------------
378 |
379 | // SIGN
380 | //
381 | async function promptUser() {
382 | return await inquirer.prompt([
383 | {
384 | type: "input",
385 | name: "password",
386 | message: "Password for certificate",
387 | default: "hello-world"
388 | },
389 | {
390 | type: "confirm",
391 | name: "createZip",
392 | message: "Create a ZIP aswell?",
393 | default: true
394 | }
395 | ]);
396 | }
397 |
398 | function getIgnores() {
399 | if (fs.existsSync(`./src/utils/dev/.certignore`)) {
400 | ignores = fs.readFileSync(`./src/utils/dev/.certignore`, {
401 | encoding: "utf-8"
402 | });
403 | ignores = ignores.trim().split(/(\r\n|\n|\r)/);
404 | ignores = ignores.filter(item => {
405 | return item.length > 2;
406 | });
407 | ignores = ignores.map(item => {
408 | return item.replace(
409 | /[-\/\\^$*+?.()|[\]{}]/,
410 | `\\${item.match(/[-\/\\^$*+?.()|[\]{}]/)}`
411 | );
412 | });
413 | } else {
414 | ignores = ["node_modules", "archive", "^(\\.git)"];
415 | fs.writeFileSync(`./src/utils/dev/.certignore`, ignores.join("\r\n"));
416 | }
417 | return new RegExp(ignores.join("|"));
418 | }
419 |
420 | async function confirmSign() {
421 | return await inquirer.prompt([
422 | {
423 | type: "Confirm",
424 | message: "Are you ready to proceed?",
425 | name: "confirmation",
426 | default: true
427 | }
428 | ]);
429 | }
430 |
431 | function stageExtensionFolder(extString) {
432 | return new Promise((resolve, reject) => {
433 | let tempdir = [];
434 | let omitted = getIgnores();
435 | fs.readdir("./", (err, list) => {
436 | if (err) reject("Error encountered while reading directory for staging.");
437 | list.forEach(filename => {
438 | if (!omitted.test(filename)) {
439 | if (filename) tempdir.push(filename);
440 | }
441 | });
442 | try {
443 | fs.mkdirSync(`../${extString}-tmp`);
444 | tempdir.forEach(file => {
445 | fse.copy(`./${file}`, `../${extString}-tmp/${file}`);
446 | });
447 | try {
448 | fs.mkdirSync(`./archive`);
449 | } catch (err) {
450 | //
451 | }
452 | resolve(`${extString}`);
453 | } catch (err) {
454 | reject(err);
455 | }
456 | });
457 | });
458 | }
459 |
460 | function signCommands(path, rootpath, password, includeZip) {
461 | return new Promise((resolve, reject) => {
462 | let certInfo;
463 | if (fs.existsSync(`./src/utils/dev/certInfo.txt`)) {
464 | certInfo = fs.readFileSync(`./src/utils/dev/certInfo.txt`, {
465 | encoding: "utf-8"
466 | });
467 | } else {
468 | certInfo = "US;NY;SomeOrg;SomeName";
469 | fs.writeFileSync(`./src/utils/dev/certInfo.txt`, certInfo);
470 | }
471 | certInfo = certInfo.split(";");
472 | shell.cd(`..`);
473 | console.log(
474 | `${osPrefix}ZXPSignCmd -selfSignedCert ${certInfo[0]} ${certInfo[1]} ${
475 | certInfo[2]
476 | } ${certInfo[3]} ${password} ./${rootpath}/archive/temp1.p12`
477 | );
478 | shell.exec(
479 | `${osPrefix}ZXPSignCmd -selfSignedCert ${certInfo[0]} ${certInfo[1]} ${
480 | certInfo[2]
481 | } ${certInfo[3]} ${password} ./${rootpath}/archive/temp1.p12`
482 | );
483 | setTimeout(() => {
484 | console.log(
485 | `${osPrefix}ZXPSignCmd -sign ./${path}-tmp ./${rootpath}/archive/${path}.zxp ./${rootpath}/archive/temp1.p12 ${password} -tsa http://time.certum.pl`
486 | );
487 | shell.exec(
488 | `${osPrefix}ZXPSignCmd -sign ./${path}-tmp ./${rootpath}/archive/${path}.zxp ./${rootpath}/archive/temp1.p12 ${password} -tsa http://time.certum.pl`
489 | );
490 |
491 | if (includeZip)
492 | setTimeout(() => {
493 | shell.exec(
494 | `${osPrefix}ZXPSignCmd -sign ./${path}-tmp ./${rootpath}/archive/${path}.zip ./${rootpath}/archive/temp1.p12 ${password} -tsa http://time.certum.pl`
495 | );
496 | }, 1000);
497 | setTimeout(() => {
498 | console.log(
499 | `${osPrefix}ZXPSignCmd -verify ./${rootpath}/archive/${path}.zxp -certinfo`
500 | );
501 | shell.exec(
502 | `${osPrefix}ZXPSignCmd -verify ./${rootpath}/archive/${path}.zxp -certinfo`
503 | );
504 |
505 | resolve();
506 | }, 1000);
507 | }, 1000);
508 | // shell.cd(`./${path.replace(`-tmp`, '')}`);
509 | }).catch(err => {
510 | //
511 | });
512 | }
513 | // -----------------------------
514 |
515 | // SWITCH
516 | //
517 | async function endMessage(switched = false) {
518 | let finalstate = await getCurrentContext();
519 | if (finalstate)
520 | console.log(
521 | ` ${chalk.blue("DEVELOPER")}: Use ${chalk.yellow("npm run serve")} ${
522 | switched ? "and restart the app to continue developing" : "to continue"
523 | }.`
524 | );
525 | else
526 | console.log(
527 | ` ${chalk.blue("PRODUCTION")}: Ready for ${chalk.yellow(
528 | "quasar build"
529 | )} or ${chalk.yellow("npm run sign")}.`
530 | );
531 | }
532 |
533 | async function getCurrentContext() {
534 | return new Promise((resolve, reject) => {
535 | const xml = fs.readFileSync(`./CSXS/manifest.xml`, { encoding: "utf-8" });
536 | const isDev = /\<\!\--\s\\.\/dist\/spa\/index\.html\<\/MainPath\>\s\-\-\>/;
537 | const isBuild = /\<\!\--\s\\.\/src\/index\-dev\.html\<\/MainPath\>\s\-\-\>/;
538 | resolve(isDev.test(xml));
539 | });
540 | }
541 |
542 | function switchContext() {
543 | return new Promise((resolve, reject) => {
544 | let xml = fs.readFileSync(`./CSXS/manifest.xml`, { encoding: "utf-8" });
545 | const isDev = /\<\!\--\s\\.\/dist\/spa\/index\.html\<\/MainPath\>\s\-\-\>/gm;
546 | const isBuild = /\<\!\--\s\\.\/src\/index\-dev\.html\<\/MainPath\>\s\-\-\>/gm;
547 | const isDevVanilla = /\\.\/dist\/spa\/index\.html\<\/MainPath\>/gm;
548 | const isBuildVanilla = /\\.\/src\/index\-dev\.html\<\/MainPath\>/gm;
549 | const devString = `./src/index-dev.html`;
550 | const buildString = `./dist/spa/index.html`;
551 | const commentedDevString = ``;
552 | const commentedBuildString = ``;
553 | if (isDev.test(xml)) {
554 | xml = xml.replace(isDev, buildString);
555 | xml = xml.replace(isBuildVanilla, commentedDevString);
556 | fs.writeFileSync(`./CSXS/manifest.xml`, xml);
557 | resolve("PRODUCTION");
558 | } else if (isBuild.test(xml)) {
559 | xml = xml.replace(isBuild, devString);
560 | xml = xml.replace(isDevVanilla, commentedBuildString);
561 | fs.writeFileSync(`./CSXS/manifest.xml`, xml);
562 | resolve("DEVELOPER");
563 | } else {
564 | reject("Something went wrong with RegEx matching.");
565 | }
566 | });
567 | }
568 | // ----------------------------
569 |
570 | // UPDATE
571 | //
572 | async function findTier(original) {
573 | return await inquirer.prompt([
574 | {
575 | type: "list",
576 | name: "versionIndex",
577 | message: "Choose tier to update",
578 | choices: [
579 | {
580 | name: `Major (${original[0]}.x.x)`,
581 | value: 0
582 | },
583 | {
584 | name: `Minor (x.${original[1]}.x)`,
585 | value: 1
586 | },
587 | {
588 | name: `Micro (x.x.${original[2]})`,
589 | value: 2
590 | }
591 | ]
592 | }
593 | ]);
594 | }
595 |
596 | async function promptNewNumber(old) {
597 | return await inquirer.prompt([
598 | {
599 | type: "Number",
600 | message: "Enter new value for tier",
601 | default: +old + 1,
602 | name: "newTier"
603 | }
604 | ]);
605 | }
606 |
607 | function setExtVersion(older, newer) {
608 | return new Promise((resolve, reject) => {
609 | let xml = fs.readFileSync(`./CSXS/manifest.xml`, { encoding: "utf-8" });
610 | let rx = new RegExp(`${older.split(".").join("\\.")}`);
611 | xml = xml.split(rx).join(newer.join("."));
612 | fs.writeFileSync(`./CSXS/manifest.xml`, xml);
613 |
614 | let jsondata = fs.readFileSync("./package.json", { encoding: "utf-8" });
615 | let jsonrx = /\"version\"\:\s\"[^\"]*/;
616 | jsondata = jsondata
617 | .split(jsonrx)
618 | .join(`\"version\"\: \"${newer.join(".")}`);
619 | fs.writeFileSync(`./package.json`, jsondata);
620 | resolve(newer.join("."));
621 | });
622 | }
623 | // -----------------------------------
624 |
625 | // REGISTER
626 | //
627 | async function promptRegister(data) {
628 | return await inquirer.prompt([
629 | {
630 | type: "input",
631 | name: "country",
632 | message: "Country Code",
633 | default: data[0]
634 | },
635 | {
636 | type: "input",
637 | name: "state",
638 | message: "State or Province",
639 | default: data[1]
640 | },
641 | {
642 | type: "input",
643 | name: "org",
644 | message: "Organization",
645 | default: data[2]
646 | },
647 | {
648 | type: "input",
649 | name: "name",
650 | message: "Common name",
651 | default: data[3]
652 | }
653 | ]);
654 | }
655 | // -----------------------------------
656 |
657 | require("make-runnable/custom")({
658 | printOutputFrame: false
659 | });
660 |
--------------------------------------------------------------------------------