├── .bombino ├── .certignore ├── .certinfo ├── .debug ├── .editorconfig ├── .gitignore ├── .logger └── 12.06.19.md ├── .postcssrc.js ├── .quasar ├── app.js ├── artifacts.json ├── client-entry.js └── import-quasar.js ├── CHANGELOG.md ├── CSXS └── manifest.xml ├── README.md ├── archive └── Quicker1.0.1.zxp ├── babel.config.js ├── dist └── spa │ ├── css │ ├── 082306ef.27d6aa19.css │ ├── 1c620368.c41512eb.css │ ├── 4d7f4d2f.fe4a00e8.css │ └── app.dc67ff60.css │ ├── fonts │ ├── KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff │ ├── KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff │ ├── KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff │ ├── KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff │ ├── KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff │ ├── KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff │ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff │ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2 │ ├── materialdesignicons-webfont.043774d1.woff │ └── materialdesignicons-webfont.27cb2cf1.woff2 │ ├── index.html │ ├── js │ ├── 082306ef.370c0180.js │ ├── 1c620368.f7953729.js │ ├── 4d7f4d2f.d1f61a9f.js │ ├── app.d10e3a3c.js │ ├── runtime.8a3271d3.js │ └── vendor.b0ab807e.js │ └── statics │ ├── app-logo-128x128.png │ ├── icons │ ├── apple-icon-120x120.png │ ├── apple-icon-152x152.png │ ├── apple-icon-167x167.png │ ├── apple-icon-180x180.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── icon-128x128.png │ ├── icon-192x192.png │ ├── icon-256x256.png │ ├── icon-384x384.png │ ├── icon-512x512.png │ ├── ms-icon-144x144.png │ └── safari-pinned-tab.svg │ └── js │ └── CSInterface.js ├── package-lock.json ├── package.json ├── quasar.conf.js ├── src ├── App.vue ├── assets │ ├── fonts │ │ └── OCR B MT.ttf │ ├── quasar-logo-full.svg │ ├── quasarLogo.vue │ ├── sad.svg │ ├── sadLogo.vue │ ├── tutorial-pull.json │ ├── walk.json │ └── welcome.json ├── components │ ├── BarCoder.vue │ ├── BarOptions.vue │ ├── Inputter.vue │ ├── QRCoder.vue │ ├── dev │ │ └── menus.vue │ └── panel │ │ └── tooltipper.vue ├── css │ ├── app.sass │ └── quasar.variables.sass ├── functions │ └── function-show-error-message.js ├── host │ ├── ILST │ │ ├── host.jsx │ │ ├── host.ts │ │ └── tsconfig.json │ └── universal │ │ ├── Console.jsx │ │ ├── ES6_Array_Methods.jsx │ │ └── json2.jsx ├── index-dev.html ├── index.template.html ├── layouts │ └── Panel.vue ├── pages │ ├── BarCode.vue │ ├── Error404.vue │ └── QRCode.vue ├── router │ ├── index.js │ └── routes.js ├── statics │ ├── app-logo-128x128.png │ ├── icons │ │ ├── apple-icon-120x120.png │ │ ├── apple-icon-152x152.png │ │ ├── apple-icon-167x167.png │ │ ├── apple-icon-180x180.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── icon-128x128.png │ │ ├── icon-192x192.png │ │ ├── icon-256x256.png │ │ ├── icon-384x384.png │ │ ├── icon-512x512.png │ │ ├── ms-icon-144x144.png │ │ └── safari-pinned-tab.svg │ └── js │ │ └── CSInterface.js ├── store │ ├── index.js │ └── store-settings.js └── utils │ ├── color │ ├── appHexToRGB.js │ ├── getColorFromDeltaOffset.js │ ├── getPanelBG.js │ ├── hexToRGB.js │ ├── rgbToHex.js │ └── toHex.js │ ├── dev │ ├── .certignore │ ├── certInfo.txt │ └── npmCommands.js │ ├── fs │ ├── mkDir.js │ ├── readFile.js │ └── writeFile.js │ └── main │ ├── getAppName.js │ ├── getAppTheme.js │ ├── getExtRoot.js │ ├── getExtVersion.js │ ├── getLocalHost.js │ └── launchLocalHost.js └── temp ├── a-very long paragraph of a bunch of text hello world hello.png ├── as;lkjasdfl;kjasdf;lkjasdf;lkjasdflkjasdf;lkjasdf;lkjasdf;lkjasdfl;kjasdflkjasdf;lkjasdf.png ├── barcode.svg ├── hello-there.png ├── hello-world.png ├── real.png ├── testing-1 2 3 thelkjasdflkjasdlkjasdfl;kjasdf;lkjasdflkjasdf;lkjasdf.png └── testing-1 2 3.png /.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":"/\\(.*)\\<\\/Menu\\>/"},"targets":["manifest"]},"hostlist":{"value":"$BOMBINO_HOSTLIST$","templateRX":"/\\$BOMBINO_HOSTLIST\\$/gm","settingsKey":"manifestHostlist","panelRX":{"manifest":"/\\([\\w|\\W]*)\\<\\/HostList\\>/"},"targets":["manifest"]},"hostlist_debug":{"value":"$BOMBINO_DEBUG_HOSTLIST$","templateRX":"/\\$BOMBINO_DEBUG_HOSTLIST\\$/","settingsKey":"debugHostlist","panelRX":{"debug":"/(\\[\\w|\\W]*\\<\\/Extension\\>)/"},"targets":["debug"]},"qDesc":{"value":"$BOMBINO_QUASAR_DESC$","templateRX":"/\\$BOMBINO_QUASAR_DESC\\$/","panelRX":{"index":"/content\\=\\\"(.*)\\\"/"},"targets":["index"],"override":"<%= htmlWebpackPlugin.options.productDescription %>"},"qWidth":{"value":"$BOMBINO_QUASAR_WIDTH$","templateRX":"/\\$BOMBINO_QUASAR_WIDTH\\$/","panelRX":{"index":"/width\\=device-width(.*)\\\"/"},"targets":["index"],"override":"<% if (htmlWebpackPlugin.options.ctx.mode.cordova || htmlWebpackPlugin.options.ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>"},"qHeader":{"value":"$BOMBINO_QUASAR_HEADER$","templateRX":"/\\$BOMBINO_QUASAR_HEADER\\$/","panelRX":{"index":"/\\(.*)\\<\\/title\\>/"},"targets":["index"],"override":"<%= htmlWebpackPlugin.options.productName %>"}}} -------------------------------------------------------------------------------- /.certignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | archive 3 | ^(\.git) 4 | ZXPSignCmd.exe -------------------------------------------------------------------------------- /.certinfo: -------------------------------------------------------------------------------- 1 | US;NY;SomeOrg;SomeName -------------------------------------------------------------------------------- /.debug: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.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 -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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"]} -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /CSXS/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | ./dist/spa/index.html 21 | 22 | 23 | --enable-nodejs 24 | --mixed-context 25 | 26 | 27 | 28 | true 29 | 30 | 31 | Panel 32 | Quicker 33 | 34 | 35 | 400 36 | 280 37 | 38 | 39 | 500 40 | 598 41 | 42 | 43 | 300 44 | 260 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | ./dist/spa/index.html 55 | 56 | 57 | --enable-nodejs 58 | --mixed-context 59 | 60 | 61 | 62 | true 63 | 64 | 65 | ModalDialog 66 | 67 | 68 | 500 69 | 600 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # quicker 2 | 3 | Create QRCodes as quickly as you can type: 4 | 5 | ![](https://thumbs.gfycat.com/MintyMilkyHummingbird-size_restricted.gif) 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 | -------------------------------------------------------------------------------- /archive/Quicker1.0.1.zxp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/archive/Quicker1.0.1.zxp -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@quasar/babel-preset-app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /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}} -------------------------------------------------------------------------------- /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} -------------------------------------------------------------------------------- /dist/spa/css/4d7f4d2f.fe4a00e8.css: -------------------------------------------------------------------------------- 1 | .sad-logo{fill:var(--color-btn-disabled-text);fill-opacity:1} -------------------------------------------------------------------------------- /dist/spa/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff -------------------------------------------------------------------------------- /dist/spa/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff -------------------------------------------------------------------------------- /dist/spa/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff -------------------------------------------------------------------------------- /dist/spa/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff -------------------------------------------------------------------------------- /dist/spa/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff -------------------------------------------------------------------------------- /dist/spa/fonts/KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff -------------------------------------------------------------------------------- /dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff -------------------------------------------------------------------------------- /dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2 -------------------------------------------------------------------------------- /dist/spa/fonts/materialdesignicons-webfont.043774d1.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/materialdesignicons-webfont.043774d1.woff -------------------------------------------------------------------------------- /dist/spa/fonts/materialdesignicons-webfont.27cb2cf1.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/dist/spa/fonts/materialdesignicons-webfont.27cb2cf1.woff2 -------------------------------------------------------------------------------- /dist/spa/index.html: -------------------------------------------------------------------------------- 1 | Quasar App
-------------------------------------------------------------------------------- /dist/spa/js/082306ef.370c0180.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["082306ef"],{"11e6":function(t,e,a){"use strict";var n=a("bdfa"),r=a.n(n);r.a},"1a2a":function(t,e,a){"use strict";a.r(e);var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("q-layout",{attrs:{view:"hHh lpR fFf"}},[a("q-header",[a("q-bar",[a("q-btn",{attrs:{dense:"",flat:"",icon:"mdi-palette"},on:{click:t.getColors}},[a("tooltipper",{attrs:{msg:"Grab"}})],1),a("q-input",{staticClass:"q-ml-lg",staticStyle:{width:"80px"},attrs:{suffix:"px",type:"number",dense:"",borderless:""},model:{value:t.size,callback:function(e){t.size=e},expression:"size"}}),a("q-space"),a("q-btn",{attrs:{dense:"",flat:"",icon:"mdi-send"},on:{click:t.openFile}},[a("tooltipper",{attrs:{msg:"Send to AI"}})],1)],1)],1),a("q-page-container",[a("router-view")],1)],1)},r=[],s=(a("8e6e"),a("8a81"),a("6b54"),a("ac6a"),a("cadf"),a("06db"),a("456d"),a("967e")),o=a.n(s),i=(a("96cf"),a("c47a")),c=a.n(i),l=a("2f62"),u=a("ebe6");a("2e38");function p(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function b(t){for(var e=1;e'):t+=''})),t+=""},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"]]]); -------------------------------------------------------------------------------- /dist/spa/js/runtime.8a3271d3.js: -------------------------------------------------------------------------------- 1 | (function(e){function t(t){for(var n,o,i=t[0],f=t[1],c=t[2],l=0,s=[];l -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /quasar.conf.js: -------------------------------------------------------------------------------- 1 | // Configuration for your app 2 | // https://quasar.dev/quasar-cli/quasar-conf-js 3 | 4 | module.exports = function(ctx) { 5 | return { 6 | // app boot file (/src/boot) 7 | // --> boot files are part of "main.js" 8 | // https://quasar.dev/quasar-cli/cli-documentation/boot-files 9 | boot: [], 10 | 11 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css 12 | css: ["app.sass"], 13 | 14 | // https://github.com/quasarframework/quasar/tree/dev/extras 15 | extras: [ 16 | // 'ionicons-v4', 17 | "mdi-v4", 18 | // 'fontawesome-v5', 19 | // 'eva-icons', 20 | // 'themify', 21 | // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! 22 | 23 | "roboto-font", // optional, you are not bound to it 24 | "material-icons" // optional, you are not bound to it 25 | ], 26 | 27 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework 28 | framework: { 29 | // iconSet: 'ionicons-v4', // Quasar icon set 30 | // lang: 'de', // Quasar language pack 31 | 32 | // Possible values for "all": 33 | // * 'auto' - Auto-import needed Quasar components & directives 34 | // (slightly higher compile time; next to minimum bundle size; most convenient) 35 | // * false - Manually specify what to import 36 | // (fastest compile time; minimum bundle size; most tedious) 37 | // * true - Import everything from Quasar 38 | // (not treeshaking Quasar; biggest bundle size; convenient) 39 | all: "auto", 40 | 41 | components: [], 42 | directives: [], 43 | 44 | // Quasar plugins 45 | plugins: ["Dialog", "LocalStorage", "Loading", "Notify"] 46 | }, 47 | 48 | // https://quasar.dev/quasar-cli/cli-documentation/supporting-ie 49 | supportIE: false, 50 | 51 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build 52 | build: { 53 | scopeHoisting: true, 54 | // vueRouterMode: 'history', 55 | // showProgress: false, 56 | // gzip: true, 57 | // analyze: true, 58 | // preloadChunks: false, 59 | // extractCSS: false, 60 | 61 | // https://quasar.dev/quasar-cli/cli-documentation/handling-webpack 62 | extendWebpack(cfg) { 63 | cfg.target = "node-webkit"; // Set the target to node-webkit (https://webpack.js.org/configuration/target/) 64 | cfg.node = false; // Don't set certain Node globals/modules to empty objects (https://webpack.js.org/configuration/node/) 65 | } 66 | }, 67 | 68 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer 69 | devServer: { 70 | // https: true, 71 | // port: 8080, 72 | open: false // opens browser window automatically 73 | }, 74 | 75 | // animations: 'all', // --- includes all animations 76 | // https://quasar.dev/options/animations 77 | animations: [], 78 | 79 | // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr 80 | ssr: { 81 | pwa: false 82 | }, 83 | 84 | // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa 85 | pwa: { 86 | // workboxPluginMode: 'InjectManifest', 87 | // workboxOptions: {}, // only for NON InjectManifest 88 | manifest: { 89 | // name: 'Quasar App', 90 | // short_name: 'Quasar App', 91 | // description: 'A Quasar Framework app', 92 | display: "standalone", 93 | orientation: "portrait", 94 | background_color: "#ffffff", 95 | theme_color: "#027be3", 96 | icons: [ 97 | { 98 | src: "statics/icons/icon-128x128.png", 99 | sizes: "128x128", 100 | type: "image/png" 101 | }, 102 | { 103 | src: "statics/icons/icon-192x192.png", 104 | sizes: "192x192", 105 | type: "image/png" 106 | }, 107 | { 108 | src: "statics/icons/icon-256x256.png", 109 | sizes: "256x256", 110 | type: "image/png" 111 | }, 112 | { 113 | src: "statics/icons/icon-384x384.png", 114 | sizes: "384x384", 115 | type: "image/png" 116 | }, 117 | { 118 | src: "statics/icons/icon-512x512.png", 119 | sizes: "512x512", 120 | type: "image/png" 121 | } 122 | ] 123 | } 124 | }, 125 | 126 | // https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova 127 | cordova: { 128 | // id: 'org.cordova.quasar.app', 129 | // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing 130 | }, 131 | 132 | // https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron 133 | electron: { 134 | // bundler: 'builder', // or 'packager' 135 | 136 | extendWebpack(cfg) { 137 | // do something with Electron main process Webpack cfg 138 | // chainWebpack also available besides this extendWebpack 139 | }, 140 | 141 | packager: { 142 | // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options 143 | // OS X / Mac App Store 144 | // appBundleId: '', 145 | // appCategoryType: '', 146 | // osxSign: '', 147 | // protocol: 'myapp://path', 148 | // Windows only 149 | // win32metadata: { ... } 150 | }, 151 | 152 | builder: { 153 | // https://www.electron.build/configuration/configuration 154 | // appId: 'cep-quasar-cli-plus' 155 | } 156 | } 157 | }; 158 | }; 159 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 185 | 186 | 319 | -------------------------------------------------------------------------------- /src/assets/fonts/OCR B MT.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/assets/fonts/OCR B MT.ttf -------------------------------------------------------------------------------- /src/assets/quasar-logo-full.svg: -------------------------------------------------------------------------------- 1 | 8 | 9 | 23 | 24 | quasar-logo-full 25 | 26 | 30 | 34 | 38 | 42 | 46 | 50 | 51 | 52 | 53 | 57 | 61 | 65 | 69 | 73 | 77 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /src/assets/quasarLogo.vue: -------------------------------------------------------------------------------- 1 | 67 | 68 | 71 | 72 | 89 | -------------------------------------------------------------------------------- /src/assets/sad.svg: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | 17 | sad 18 | 22 | 23 | -------------------------------------------------------------------------------- /src/assets/sadLogo.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | 19 | 25 | -------------------------------------------------------------------------------- /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/components/BarCoder.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 136 | 137 | 159 | -------------------------------------------------------------------------------- /src/components/BarOptions.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 76 | 77 | 82 | -------------------------------------------------------------------------------- /src/components/Inputter.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/QRCoder.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 118 | 119 | 133 | -------------------------------------------------------------------------------- /src/components/dev/menus.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 131 | 132 | 135 | -------------------------------------------------------------------------------- /src/components/panel/tooltipper.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/css/app.sass: -------------------------------------------------------------------------------- 1 | // app global css in Sass form 2 | -------------------------------------------------------------------------------- /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/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/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 | -------------------------------------------------------------------------------- /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/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/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/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 | -------------------------------------------------------------------------------- /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/index-dev.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Quicker 6 | 7 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /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/layouts/Panel.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 122 | 123 | 145 | -------------------------------------------------------------------------------- /src/pages/BarCode.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 36 | 37 | 45 | -------------------------------------------------------------------------------- /src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /src/pages/QRCode.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 36 | 37 | 45 | -------------------------------------------------------------------------------- /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/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/statics/app-logo-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/app-logo-128x128.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-167x167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/apple-icon-167x167.png -------------------------------------------------------------------------------- /src/statics/icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /src/statics/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/favicon-16x16.png -------------------------------------------------------------------------------- /src/statics/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/favicon-32x32.png -------------------------------------------------------------------------------- /src/statics/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/favicon-96x96.png -------------------------------------------------------------------------------- /src/statics/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/favicon.ico -------------------------------------------------------------------------------- /src/statics/icons/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/icon-128x128.png -------------------------------------------------------------------------------- /src/statics/icons/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/icon-192x192.png -------------------------------------------------------------------------------- /src/statics/icons/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/icon-256x256.png -------------------------------------------------------------------------------- /src/statics/icons/icon-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/icon-384x384.png -------------------------------------------------------------------------------- /src/statics/icons/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/icon-512x512.png -------------------------------------------------------------------------------- /src/statics/icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/src/statics/icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /src/statics/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuex from "vuex"; 3 | 4 | import settings from "./store-settings"; 5 | 6 | Vue.use(Vuex); 7 | 8 | /* 9 | * If not building with SSR mode, you can 10 | * directly export the Store instantiation 11 | */ 12 | 13 | export default function(/* { ssrContext } */) { 14 | const Store = new Vuex.Store({ 15 | modules: { 16 | settings 17 | // example 18 | }, 19 | 20 | // enable strict mode (adds overhead!) 21 | // for dev mode only 22 | strict: process.env.DEV 23 | }); 24 | 25 | return Store; 26 | } 27 | -------------------------------------------------------------------------------- /src/store/store-settings.js: -------------------------------------------------------------------------------- 1 | import { LocalStorage } from "quasar"; 2 | 3 | const state = { 4 | settings: { 5 | text: "", 6 | FG: "#000", 7 | BG: "#fff", 8 | size: 200, 9 | // 10 | format: "EAN13", 11 | model: "EAN", 12 | variant: "13", 13 | displayValue: true, 14 | textAlign: "center", 15 | textPosition: "bottom", 16 | textMargin: 2, 17 | fontSize: 20, 18 | margin: 10, 19 | flat: false, 20 | font: "OCR" 21 | } 22 | }; 23 | 24 | const mutations = { 25 | setText(state, value) { 26 | state.settings.text = value; 27 | }, 28 | setFG(state, value) { 29 | state.settings.FG = value; 30 | }, 31 | setBG(state, value) { 32 | state.settings.BG = value; 33 | }, 34 | setSize(state, value) { 35 | state.settings.size = value; 36 | }, 37 | setFormat(state) { 38 | state.settings.format = `${state.settings.model}${state.settings.variant || 39 | ""}`; 40 | }, 41 | setModel(state, value) { 42 | state.settings.model = value; 43 | }, 44 | setVariant(state, value) { 45 | state.settings.variant = value || ""; 46 | }, 47 | setSettings(state, value) { 48 | Object.assign(state.settings, value); 49 | } 50 | }; 51 | 52 | const actions = { 53 | setText({ commit, dispatch }, value) { 54 | commit("setText", value); 55 | dispatch("saveSettings"); 56 | }, 57 | setSize({ commit, dispatch }, value) { 58 | commit("setSize", value); 59 | dispatch("saveSettings"); 60 | }, 61 | setFG({ commit, dispatch }, value) { 62 | commit("setFG", value); 63 | dispatch("saveSettings"); 64 | }, 65 | setBG({ commit, dispatch }, value) { 66 | commit("setBG", value); 67 | dispatch("saveSettings"); 68 | }, 69 | setModel({ commit, dispatch }, value) { 70 | commit("setModel", value); 71 | commit("setFormat"); 72 | dispatch("saveSettings"); 73 | }, 74 | setVariant({ commit, dispatch }, value) { 75 | commit("setVariant", value); 76 | commit("setFormat"); 77 | dispatch("saveSettings"); 78 | }, 79 | getSettings({ commit }) { 80 | let settings = LocalStorage.getItem("settings"); 81 | if (settings) commit("setSettings", settings); 82 | }, 83 | saveSettings({ state }) { 84 | LocalStorage.set("settings", state.settings); 85 | } 86 | }; 87 | 88 | const getters = { 89 | settings: state => { 90 | return state.settings; 91 | }, 92 | format: state => { 93 | return `${state.settings.model}${state.settings.variant}`; 94 | }, 95 | barCodeOptions: state => { 96 | return { 97 | format: `${state.settings.model}${state.settings.variant}`, 98 | text: state.settings.text, 99 | displayValue: state.settings.displayValue, 100 | textAlign: state.settings.textAlign, 101 | textPosition: state.settings.textPosition, 102 | textMargin: state.settings.textMargin, 103 | fontSize: state.settings.fontSize, 104 | margin: state.settings.margin, 105 | flat: state.settings.flat, 106 | font: state.settings.font 107 | }; 108 | } 109 | }; 110 | 111 | export default { 112 | namespaced: true, 113 | state, 114 | mutations, 115 | actions, 116 | getters 117 | }; 118 | -------------------------------------------------------------------------------- /src/utils/color/appHexToRGB.js: -------------------------------------------------------------------------------- 1 | // Universal function assigning a hexadecimal color to valid value for AEFT/ILST 2 | // 3 | export default function appHexToRGB(hex) { 4 | const appName = JSON.parse(window.__adobe_cep__.getHostEnvironment()).appName; 5 | const color = hex 6 | .replace(/\#/, "") 7 | .match(/\w\w/g) 8 | .map(x => 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 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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/utils/dev/.certignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | archive 3 | ^(\.git) -------------------------------------------------------------------------------- /src/utils/dev/certInfo.txt: -------------------------------------------------------------------------------- 1 | US;NY;SomeOrg;SomeName -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /src/utils/main/getAppName.js: -------------------------------------------------------------------------------- 1 | export default function getAppName() { 2 | return JSON.parse(window.__adobe_cep__.getHostEnvironment()).appName; 3 | } 4 | -------------------------------------------------------------------------------- /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/getExtRoot.js: -------------------------------------------------------------------------------- 1 | export default function getRoot() { 2 | return decodeURI(window.__adobe_cep__.getSystemPath("extension")).replace( 3 | /file\:\/{1,}/, 4 | "" 5 | ); 6 | } 7 | -------------------------------------------------------------------------------- /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/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 | `\\123456789999 -------------------------------------------------------------------------------- /temp/hello-there.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/temp/hello-there.png -------------------------------------------------------------------------------- /temp/hello-world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/temp/hello-world.png -------------------------------------------------------------------------------- /temp/real.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/temp/real.png -------------------------------------------------------------------------------- /temp/testing-1 2 3 thelkjasdflkjasdlkjasdfl;kjasdf;lkjasdflkjasdf;lkjasdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/temp/testing-1 2 3 thelkjasdflkjasdlkjasdfl;kjasdf;lkjasdflkjasdf;lkjasdf.png -------------------------------------------------------------------------------- /temp/testing-1 2 3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Inventsable/Quicker/8f62024382ce2522d843c9da802c4ede9ff9454a/temp/testing-1 2 3.png --------------------------------------------------------------------------------