diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders index 4538749..c07b6ff 100644 --- a/.meteor/.finished-upgraders +++ b/.meteor/.finished-upgraders @@ -16,3 +16,4 @@ notices-for-facebook-graph-api-2 1.4.3-split-account-service-packages 1.5-add-dynamic-import-package 1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/.meteor/packages b/.meteor/packages index ec528d0..2dfa282 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -5,24 +5,23 @@ # but you can also edit it by hand. meteor-base@1.4.0 # Packages every Meteor app needs to have -mobile-experience@1.0.5 # Packages for a great mobile UX -mongo@1.6.2 # The database Meteor supports right now +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.10.0 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views reactive-var@1.0.11 # Reactive variable for tracker -reactive-dict@1.3.0 # ??? tracker@1.2.0 # Meteor's client-side reactive programming library tomwasd:history-polyfill # Adds IE 8/9 support for HTML5 history. -email@1.2.3 # Adds the Meteor/Email package for sending lost password emails +email@2.0.0 # Adds the Meteor/Email package for sending lost password emails -standard-minifier-css@1.5.3 # CSS minifier run for production mode -standard-minifier-js@2.4.1 # JS minifier run for production mode +standard-minifier-css@1.6.0 # CSS minifier run for production mode +standard-minifier-js@2.6.0 # JS minifier run for production mode es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers. poorvavyas:es6-shim -ecmascript@0.12.4 # Enable ECMAScript2015+ syntax in app code +ecmascript@0.14.3 # Enable ECMAScript2015+ syntax in app code #accounts-ui #accounts-base -accounts-password@1.5.1 +accounts-password@1.6.2 useraccounts:core useraccounts:unstyled useraccounts:flow-routing # Configures email flows. Used for AccountsTemplates class. @@ -61,9 +60,10 @@ juliancwirko:s-alert # Client error/alert handling jcbernack:reactive-aggregate # Allows us to create a new client collection (from the server) with the contents being an aggregate of server data. Note that aggregation can only be done on the server currently as mini-mongo does not support it. ostrio:logger ostrio:loggermongo -dynamic-import@0.5.1 +dynamic-import@0.5.2 markdown@1.0.12 wcrisman:jquery-custom-scrollbar underscore@1.0.10 meteorhacks:aggregate # Allows databaseName.aggragate(pipeline) calls the exact same way you would on the command line in the mongo tool. #babrahams:constellation # Provides client side debugging when the server is not run in production mode. +jquery diff --git a/.meteor/release b/.meteor/release index 97064e1..a94c167 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.8.1 +METEOR@1.11 diff --git a/.meteor/versions b/.meteor/versions index f8988d4..df00d97 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,6 +1,6 @@ -accounts-base@1.4.4 -accounts-password@1.5.1 -alanning:roles@1.2.16 +accounts-base@1.7.0 +accounts-password@1.6.2 +alanning:roles@1.2.19 aldeed:collection2@2.10.0 aldeed:collection2-core@1.2.0 aldeed:schema-deny@1.1.0 @@ -10,33 +10,33 @@ aldeed:template-extension@4.1.0 allow-deny@1.1.0 arillo:flow-router-helpers@0.5.2 autoupdate@1.6.0 -babel-compiler@7.3.4 -babel-runtime@1.3.0 +babel-compiler@7.5.3 +babel-runtime@1.5.0 base64@1.0.12 binary-heap@1.0.11 -blaze@2.3.3 +blaze@2.3.4 blaze-html-templates@1.1.2 blaze-tools@1.0.10 -boilerplate-generator@1.6.0 -caching-compiler@1.2.1 +boilerplate-generator@1.7.0 +caching-compiler@1.2.2 caching-html-compiler@1.1.3 -callback-hook@1.1.0 +callback-hook@1.3.0 check@1.3.1 coffeescript@1.0.17 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 -ddp-rate-limiter@1.0.7 -ddp-server@2.3.0 +ddp-rate-limiter@1.0.9 +ddp-server@2.3.2 deps@1.0.12 diff-sequence@1.1.1 -dynamic-import@0.5.1 -ecmascript@0.12.7 +dynamic-import@0.5.2 +ecmascript@0.14.3 ecmascript-runtime@0.7.0 -ecmascript-runtime-client@0.8.0 -ecmascript-runtime-server@0.7.1 -ejson@1.1.0 -email@1.2.3 +ecmascript-runtime-client@0.11.0 +ecmascript-runtime-server@0.10.0 +ejson@1.1.1 +email@2.0.0 es5-shim@4.8.0 fetch@0.1.1 fortawesome:fontawesome@4.7.0 @@ -46,38 +46,38 @@ html-tools@1.0.11 htmljs@1.0.11 http@1.4.2 id-map@1.1.0 -inter-process-messaging@0.1.0 +inter-process-messaging@0.1.1 jcbernack:reactive-aggregate@0.7.0 jquery@1.11.11 juliancwirko:s-alert@3.2.0 kadira:blaze-layout@2.3.0 kadira:flow-router@2.12.1 -launch-screen@1.1.1 +launch-screen@1.2.0 livedata@1.0.18 localstorage@1.2.0 logging@1.1.20 -markdown@1.0.12 +markdown@1.0.14 mdg:validation-error@0.2.0 meteor@1.9.3 meteor-base@1.4.0 meteorhacks:aggregate@1.3.0 meteorhacks:collection-utils@1.2.0 -minifier-css@1.4.2 -minifier-js@2.4.1 -minimongo@1.4.5 -mobile-experience@1.0.5 -mobile-status-bar@1.0.14 -modern-browsers@0.1.4 -modules@0.13.0 -modules-runtime@0.10.3 -momentjs:moment@2.24.0 -mongo@1.6.3 +minifier-css@1.5.2 +minifier-js@2.6.0 +minimongo@1.6.0 +mobile-experience@1.1.0 +mobile-status-bar@1.1.0 +modern-browsers@0.1.5 +modules@0.15.0 +modules-runtime@0.12.0 +momentjs:moment@2.27.0 +mongo@1.10.0 mongo-decimal@0.1.1 mongo-dev-server@1.1.0 mongo-id@1.0.7 mongo-livedata@1.0.12 npm-bcrypt@0.9.3 -npm-mongo@3.1.2 +npm-mongo@3.8.0 observe-sequence@1.0.16 ordered-dict@1.1.0 ostrio:logger@2.0.8 @@ -85,7 +85,7 @@ ostrio:loggermongo@2.0.5 poorvavyas:es6-shim@0.21.1 promise@0.11.2 raix:eventemitter@0.1.3 -random@1.1.0 +random@1.2.0 rate-limit@1.0.9 reactive-dict@1.3.0 reactive-var@1.0.11 @@ -95,13 +95,13 @@ routepolicy@1.1.0 service-configuration@1.0.11 session@1.2.0 sha@1.0.9 -socket-stream-client@0.2.2 +socket-stream-client@0.3.1 softwarerero:accounts-t9n@1.3.11 spacebars@1.0.15 spacebars-compiler@1.1.3 -srp@1.0.12 -standard-minifier-css@1.5.3 -standard-minifier-js@2.4.1 +srp@1.1.0 +standard-minifier-css@1.6.0 +standard-minifier-js@2.6.0 stylus@2.513.14 templating@1.3.2 templating-compiler@1.3.3 @@ -111,11 +111,11 @@ tomwasd:history-polyfill@0.0.1 tracker@1.2.0 ui@1.0.13 underscore@1.0.10 -url@1.2.0 +url@1.3.1 useraccounts:core@1.14.2 useraccounts:flow-routing@1.14.2 useraccounts:unstyled@1.14.2 wcrisman:jquery-custom-scrollbar@3.0.0 -webapp@1.7.4 +webapp@1.9.1 webapp-hashing@1.0.9 zimme:active-route@2.3.2 diff --git a/client/main.css b/client/main.css index 23025b0..4076efe 100644 --- a/client/main.css +++ b/client/main.css @@ -2511,7 +2511,7 @@ input[type="button"].btn-block { color: #bcb95f; padding: 4px 8px; } -#salesMain .separatedTableHeader table thead > tr > th.actions .showOnlyComments:hover { +#salesMain .separatedTableHeader table thead > tr > th.actions .showOnlyCommentshover { color: #fff; text-shadow: 0px 0px 10px #ff6d1f; } @@ -2605,10 +2605,10 @@ input[type="button"].btn-block { margin-left: 8px; border-radius: 8px; } -#salesMain .saleEditor .priceContainer .priceButtons .setDefaultPrice:hover { +#salesMain .saleEditor .priceContainer .priceButtons .setDefaultPricehover { text-shadow: 0px 0px 6px #00b900; } -#salesMain .saleEditor .priceContainer .priceButtons .setDefaultPrice:active { +#salesMain .saleEditor .priceContainer .priceButtons .setDefaultPriceactive { text-shadow: 0px 0px 6px #808080; } #salesMain .insertSaleForm .form-group, @@ -2622,6 +2622,36 @@ input[type="button"].btn-block { font-variant: normal; font-weight: 500; } +#salesMain .insertSaleForm input[name='product'] { + display: table-cell; + width: 100%; +} +#salesMain .insertSaleForm .speechBtn { + display: table-cell; + width: 1px; +} +#salesMain .insertSaleForm .speechLink { + width: 6px; + margin: 3px; + margin-left: 6px; + margin-right: 0; + padding: 6px; + border: 2px solid #000; + border-radius: 4px; +} +#salesMain .insertSaleForm .speechLink:hover { + background-color: #cbcbcb; + border-color: #4b4b4b; +} +#salesMain .insertSaleForm .speechLink:active { + background-color: #b0b0b0; + border-color: #000; +} +#salesMain .insertSaleForm .form-group-line { + display: table; + width: 100%; + white-space: nowrap; +} #saleDuplicates { display: table; content-box: border-box; diff --git a/imports/api/Venue.js b/imports/api/Venue.js index 3e9a64c..5159abf 100644 --- a/imports/api/Venue.js +++ b/imports/api/Venue.js @@ -6,7 +6,7 @@ import {SimpleSchema} from 'meteor/aldeed:simple-schema'; const TYPES = ['Retail', "Farmer's Market", "Restaurant", "Mail"]; const FREQUENCIES = ['Daily', 'Weekly']; -Venues = new Mongo.Collection('Venues'); +let Venues = new Mongo.Collection('Venues'); let VenuesSchema = new SimpleSchema({ name: { type: String, diff --git a/imports/ui/Measures.html b/imports/ui/Measures.html index 125836c..6a96702 100644 --- a/imports/ui/Measures.html +++ b/imports/ui/Measures.html @@ -69,7 +69,7 @@ diff --git a/imports/ui/Production.js b/imports/ui/Production.js index d07b59b..ce2a96b 100644 --- a/imports/ui/Production.js +++ b/imports/ui/Production.js @@ -38,7 +38,7 @@ Template.Production.onCreated(function() { query.deletedAt = {$exists: false}; } - Template.Production.batchesSubscription = Meteor.subscribe("batches", query, sort, QUERY_LIMIT, Session.get(PREFIX + 'skipCount')); + Template.Production.batchesSubscription = Meteor.subscribe("batches", query, sort, Session.get(PREFIX + "queryLimit"), Session.get(PREFIX + 'skipCount')); Session.set(PREFIX + 'batchCount', Meteor.call('getBatchCount', Session.get(PREFIX + 'searchQuery'))); }); }); @@ -463,4 +463,4 @@ Template.BatchDateRangeSearch.dateChanged = function(isStart, event, template) { Session.set(PREFIX + 'searchFields', searchFields); Session.set(PREFIX + 'skipCount', 0); //Reset the paging of the results. Session.set(PREFIX + "queryLimit", QUERY_LIMIT); //Reset the query limit in case we loaded more -}; \ No newline at end of file +}; diff --git a/imports/ui/Sales.html b/imports/ui/Sales.html index 742e0dd..5fc32c2 100644 --- a/imports/ui/Sales.html +++ b/imports/ui/Sales.html @@ -113,7 +113,7 @@
- +
diff --git a/imports/ui/Sales.import.styl b/imports/ui/Sales.import.styl index b07e8c5..fc0c10d 100644 --- a/imports/ui/Sales.import.styl +++ b/imports/ui/Sales.import.styl @@ -1,159 +1,183 @@ #salesMain - display: table - content-box: border-box - padding: 10px 20px - height: 100% - width: 100% - text-align: left + display table + content-box border-box + padding 10px 20px + height 100% + width 100% + text-align left .controls - text-align: left - display: table - width: 100% + text-align left + display table + width 100% .pageControls - padding: 4px 8px - margin: 4px 8px - display: table-cell - width: 240px + padding 4px 8px + margin 4px 8px + display table-cell + width 240px .tableControls - text-align: right - padding: 4px 8px - margin: 4px 12px 4px 8px - display: table-cell + text-align right + padding 4px 8px + margin 4px 12px 4px 8px + display table-cell .table - table-layout: fixed - min-width: 100% + table-layout fixed + min-width 100% thead, tbody > tr > .amount - width: 90px - min-width: 90px + width 90px + min-width 90px > .product - width: 100% - min-width: 140px + width 100% + min-width 140px > .price - width: 140px - min-width: 140px + width 140px + min-width 140px > .measure - width: 100px - min-width: 100px + width 100px + min-width 100px > .saleDate - width: 150px - min-width: 150px + width 150px + min-width 150px > .createdDate - width: 100px - min-width: 100px + width 100px + min-width 100px > .venue - width: 160px - min-width: 160px + width 160px + min-width 160px > .actions - width: 90px - min-width: 90px + width 90px + min-width 90px .separatedTableHeader table thead > tr > th.actions .newSaleButton - padding: 0 12px + padding 0 12px .fa-plus-circle - display: inline-block + display inline-block .fa-times-circle - display: none + display none .newSaleButton.active - background-color: #fb557b - color: black + background-color #fb557b + color black .fa-times-circle - display: inline-block + display inline-block .fa-plus-circle - display: none + display none .showOnlyComments - color: #bcb95f - padding: 4px 8px - .showOnlyComments:hover - color: white - text-shadow: 0px 0px 10px #ff6d1f + color #bcb95f + padding 4px 8px + .showOnlyCommentshover + color white + text-shadow 0px 0px 10px #ff6d1f .showOnlyComments.on - color: white + color white > th.saleDate input - width: 130px + width 130px .listRow - display: table-row + display table-row .listCell - display: table-cell - position: relative - height: 100% - width: 100% + display table-cell + position relative + height 100% + width 100% .tableContainer - position: absolute - top: 0 - bottom: 0 - left: 0 - right: 0 - width: auto - height: auto - border: 0 - font-size: 12.5px - overflow-y: scroll + position absolute + top 0 + bottom 0 + left 0 + right 0 + width auto + height auto + border 0 + font-size 12.5px + overflow-y scroll label - font-size: 10px - font-weight: 800 + font-size 10px + font-weight 800 table thead - visibility: hidden - display: none + visibility hidden + display none .saleRemove - color: red - margin-left: 8px + color red + margin-left 8px .saleEdit - color: darkblue - margin-right: 8px + color darkblue + margin-right 8px .editorApply - color: green + color green .editorCancel - color: red + color red .saleDate - text-align: left + text-align left .createdDate - text-align: left + text-align left .editComment - color: grey + color grey .hasComment - color: black + color black .actionEdit - margin-right: 6px - color: #44F + margin-right 6px + color #44F .saleEditor .heading - font-size: 2em - font-family: verdana, arial, helvetica, sans-serif - text-transform: uppercase - font-weight: 800 - margin: 6px 0 14px 0 + font-size 2em + font-family verdana, arial, helvetica, sans-serif + text-transform uppercase + font-weight 800 + margin 6px 0 14px 0 .priceContainer - display: table - width: 100% + display table + width 100% .price - display: table-cell - padding-right: 10px + display table-cell + padding-right 10px .priceButtons - display: table-cell - width: 1.5em + display table-cell + width 1.5em .setDefaultPrice - font-size: 1.5em - padding: 6px 8px - margin-left: 8px - border-radius: 8px - .setDefaultPrice:hover - text-shadow: 0px 0px 6px #00b900 - .setDefaultPrice:active - text-shadow: 0px 0px 6px grey + font-size 1.5em + padding 6px 8px + margin-left 8px + border-radius 8px + .setDefaultPricehover + text-shadow 0px 0px 6px #00b900 + .setDefaultPriceactive + text-shadow 0px 0px 6px grey .insertSaleForm .form-group, label - text-align: left + text-align left .formGroupHeading - font-size: 1.6em - font-family: "Arial Black", "Arial Bold", Gadget, sans-serif - font-style: normal - font-variant: normal - font-weight: 500 \ No newline at end of file + font-size 1.6em + font-family "Arial Black", "Arial Bold", Gadget, sans-serif + font-style normal + font-variant normal + font-weight 500 + input[name='product'] + display table-cell + width 100% + .speechBtn + display table-cell + width 1px + .speechLink + width 6px + margin 3px + margin-left 6px + margin-right 0 + padding 6px + border 2px solid black + border-radius 4px + .speechLink:hover + background-color #cbcbcb + border-color #4b4b4b + .speechLink:active + background-color #b0b0b0 + border-color #000000 + .form-group-line + display table + width 100% + white-space nowrap \ No newline at end of file diff --git a/imports/ui/Sales.js b/imports/ui/Sales.js index 90f3760..2f2d73b 100644 --- a/imports/ui/Sales.js +++ b/imports/ui/Sales.js @@ -457,6 +457,30 @@ Template.InsertSale.events({ } } }); + }, + "click .speechLink": function(event, template) { + try { + let SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; + let r = new SpeechRecognition(); + + r.lang='en-US'; + r.interimResult = false; + r.maxAlternatives = 0; + r.start(); + r.onresult = function(event) { + let product = template.$('input[name="product"]'); + product.val(event.results[0][0].transcript); + let combo = product.data("de.combo"); + + combo.show(); + combo.filter(); + //Count the number of leaf nodes that are visible. + combo.$list.find('li.visible[role="leaf"]').length + } + } + catch(e) { + console.error(e); + } } }); Template.InsertSale.helpers({ diff --git a/package-lock.json b/package-lock.json index 641e792..430981d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,17 +4,17 @@ "lockfileVersion": 1, "dependencies": { "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" }, "dependencies": { "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, @@ -853,7 +853,7 @@ "integrity": "sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw==", "requires": { "canvg": "1.5.3", - "file-saver": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e", + "file-saver": "github:eligrey/FileSaver.js#1.3.8", "html2canvas": "1.0.0-alpha.12", "omggif": "1.0.7", "promise-polyfill": "8.1.0", diff --git a/package.json b/package.json index ef20b55..a13d91e 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "build": "npm install --product && meteor build --architecture os.linux.x86_64 --server-only ../" }, "dependencies": { - "@babel/runtime": "^7.5.5", + "@babel/runtime": "^7.9.2", "babel-runtime": "^6.18.0", "csv-parse": "^4.4.6", "d3": "^4.4.2", @@ -24,6 +24,6 @@ "pure-svg-code": "^1.0.6", "qrcode-svg": "^1.0.0", "simpl-schema": "latest", - "sweetalert2": "^6.3.8" + "sweetalert2": "^10.2.0" } }