{"version":3,"sources":["webpack:///./src/plugins/bootstrap-vue.js","webpack:///./src/plugins/globals.js","webpack:///src/components/HeaderBar.vue","webpack:///./src/components/HeaderBar.vue?8927","webpack:///./src/components/HeaderBar.vue","webpack:///src/components/FooterBar.vue","webpack:///./src/components/FooterBar.vue?da7f","webpack:///./src/components/FooterBar.vue","webpack:///src/App.vue","webpack:///./src/App.vue?a89e","webpack:///./src/App.vue","webpack:///./src/service/service.js","webpack:///src/components/Home.vue","webpack:///./src/components/Home.vue?44ab","webpack:///./src/components/Home.vue","webpack:///src/components/Done.vue","webpack:///./src/components/Done.vue?0cf2","webpack:///./src/components/Done.vue","webpack:///src/components/NotFound.vue","webpack:///./src/components/NotFound.vue?cc60","webpack:///./src/components/NotFound.vue","webpack:///src/components/Terms.vue","webpack:///./src/components/Terms.vue?e9ef","webpack:///./src/components/Terms.vue","webpack:///src/components/Privacy.vue","webpack:///./src/components/Privacy.vue?f384","webpack:///./src/components/Privacy.vue","webpack:///./src/router/index.js","webpack:///./src/main.js","webpack:///./src/art/logo.png","webpack:///./src/utils/utils.js","webpack:///./src/config/constants.js"],"names":["Vue","use","BootstrapVue","IconsPlugin","library","add","faUserSecret","faKey","faMask","faCat","faAngry","faBell","component","FontAwesomeIcon","globals","data","var1","var2","methods","myGlobalMethod","console","log","mixin","_data","debug","HeaderBar","name","computed","isLoggedIn","this","$root","hasToken","token","getToken","mounted","components_HeaderBar","render","_h","$createElement","_c","_self","staticClass","attrs","id","cols","src","__webpack_require__","staticRenderFns","FooterBar__data","FooterBar","version","getVersion","build","getBuild","components_FooterBar","staticStyle","background-color","size","_v","align-h","to","max-width","_s","Date","getFullYear","App__data","App","components","header-bar","normalizeComponent","ssrContext","footer-bar","FooterBar_normalizeComponent","testme","created","selectortype_template_index_0_src_App","mode","key","$route","fullPath","src_App","App_normalizeComponent","service","getBook","bookCode","c","axios","get","params","then","res","catch","e","saveBookResponse","post","Home","error","errorMsg","busy","success","email","hash","studentHash","book","bookId","companyId","mediaTypeId","code","hasOptin","title","subtitle","formTitle","photo","blurb","buttonLabel","buttonText","pdf","url","youtubeCode","optinText","payloadLinkText","companyName","jobTitles","form","optin","jobTitle","firstname","lastname","phone","bookHash","props","type","String","required","default","mixins","lib","validations","validators","minLength","Object","optionalPhone","value","req","length","isPdf","constants_default","a","VP_MEDIATYPE","PDF","isYoutube","YOUTUBE","isUrl","URL","getYoutubeUrl","utils_default","validateState","_$v$form$name","$v","$dirty","$error","register","_this","$touch","$anyError","status","finally","registerRepEmpower","_this2","window","location","href","_this3","query","h","bind","components_Home","_vm","show","fluid","lg","_e","on","submit","$event","stopPropagation","preventDefault","label","label-for","label-size","label-class","placeholder","options","state","aria-describedby","model","callback","$$v","$set","trim","expression","is-text","icon","unchecked-value","variant","dismissible","bg-variant","target","src_components_Home","Home_normalizeComponent","Done__data","Done","loading","components_Done","src_components_Done","Done_normalizeComponent","NotFound__data","msg","classHash","username","password","NotFound","s","components_NotFound","hidden","sm","_m","src_components_NotFound","NotFound_normalizeComponent","Terms__data","Terms","goBack","$router","go","nl2br","getBlurb","rowCount","components_Terms","domProps","innerHTML","src_components_Terms","Terms_normalizeComponent","Privacy__data","Privacy","components_Privacy","src_components_Privacy","Privacy_normalizeComponent","VueRouter","router","routes","path","meta","requiresAuth","alias","beforeEach","from","next","localStorage","getItem","rurl","afterEach","nextTick","document","process","config","productionTip","filter","replace","dt","utils","prettyDate","prettyDateTime","seconds","prettySeconds","num","prettyNumber","typeId","aout","constants","CE_TYPEID","HOMESTUDY","PARTICIPATORY","hostMap","defaultRunMode","sites","local","hosts","api","test","prod","keys_default","runMode","getRunMode","host","baseUrl","getApiBaseUrl","defaults","baseURL","el","studentId","studentName","studentEmail","testval","__VERSION__","__BUILD__","template","setToken","setItem","getStudentHash","setStudentHash","module","exports","arg","d","isString","getDay","getMonth","getDate","prettyTime","hr","parseInt","getHours","mn","getMinutes","slice","SECONDS_IN_MINUTE","MINUTES_IN_HOUR","SECONDS_IN_HOUR","SECONDS_IN_DAY","twoDigits","val","toString","plural","suffix","MAX_SEARCH_LENGTH","dateStr","durationSeconds","secs","hours","Math","floor","minutes","toLocaleString","prettyCountdown","deltaSeconds","days","concat","getYoutubeCode","match","autoplay","safeParseInt","defaultVal","parsed","isNaN","safeSearch","q","includes","toLowerCase","hostVal","forcedMode","split","_arr","_i","siteName","runModeArg","CLASS_TYPE","UNDEFINED","LIVE","ARCHIVE","PRODUCED","PRODUCED_ARCHIVE","MOVIE","LUNCHLEARN","PRODUCED_PLAYBACK","SLIDESHOW","SEMINAR","NONCE","VP_AD_EVENTID","VIEW","CLICK","NONE"],"mappings":"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","file":"static/js/app.bf3b8ea2dcaf83884378.js","sourcesContent":["import Vue from 'vue'\r\n\r\n// https://bootstrap-vue.js.org/docs/\r\n// https://developer.okta.com/blog/2018/02/15/build-crud-app-vuejs-node\r\nimport { BootstrapVue, IconsPlugin } from 'bootstrap-vue'\r\nimport 'bootstrap/dist/css/bootstrap.css'\r\nimport 'bootstrap-vue/dist/bootstrap-vue.css'\r\n\r\nimport { library } from '@fortawesome/fontawesome-svg-core'\r\nimport { faUserSecret, faKey, faMask, faCat, faAngry, faBell } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'\r\n\r\nVue.use(BootstrapVue)\r\n// Optionally install the BootstrapVue icon components plugin\r\nVue.use(IconsPlugin)\r\n\r\n// https://github.com/FortAwesome/vue-fontawesome\r\n// add the \"solid\" icons to the core library\r\nlibrary.add(faUserSecret, faKey, faMask, faCat, faAngry, faBell)\r\nVue.component('font-awesome-icon', FontAwesomeIcon)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/bootstrap-vue.js","'use strict'\r\n\r\n// inspired by\r\n// https://developpaper.com/question/how-to-access-vue-global-variables-in-vue-files/\r\n\r\n/* eslint-disable */\r\nimport Vue from 'vue'\r\n\r\nlet globals = {\r\n    data() {\r\n        return {\r\n            var1: 1,\r\n            var2: 'string'\r\n        }\r\n    },\r\n    methods:{\r\n        myGlobalMethod() { console.log(`myGlobalMethod HOWDY!!`) }\r\n    },\r\n}\r\n\r\n// export default globals\r\nexport default {\r\n    globals: globals\r\n}\r\n\r\n// register global mixin\r\nVue.mixin(globals);\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/globals.js","<template>\r\n  <b-row id=\"div-header-bar\" class=\"pt-2\">\r\n      <b-col cols=\"12\">\r\n          <img src=\"@/art/logo.png\" class=\"fluid\" />\r\n      </b-col>\r\n  </b-row>\r\n</template>\r\n\r\n<script>\r\n\r\n'use strict'\r\n/* eslint-disable */\r\n\r\nvar data = {\r\n  debug: false\r\n };\r\n\r\nexport default {\r\n  name: \"HeaderBar\",\r\n  data() {\r\n    return data;\r\n  },\r\n  computed: {\r\n    isLoggedIn() { \r\n      return this.$root.hasToken() \r\n    },\r\n    token() {\r\n      return this.$root.getToken()\r\n    }\r\n  },\r\n  methods: {},\r\n  mounted() {}\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n#div-header-bar {\r\n    margin: -60px auto 10px auto;\r\n}\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/HeaderBar.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-row',{staticClass:\"pt-2\",attrs:{\"id\":\"div-header-bar\"}},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('img',{staticClass:\"fluid\",attrs:{\"src\":require(\"@/art/logo.png\")}})])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-f91d80a8\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/HeaderBar.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-f91d80a8\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HeaderBar.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HeaderBar.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HeaderBar.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-f91d80a8\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./HeaderBar.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-f91d80a8\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/HeaderBar.vue\n// module id = null\n// module chunks = ","<template>\r\n  <b-container>\r\n    <b-row class=\"mt-2 mb-2\">\r\n      <b-col>\r\n        <hr size=1 style=\"background-color:#CCC;\">\r\n      </b-col>\r\n    </b-row>\r\n    <b-row align-h=\"center\">\r\n      <b-col cols=\"12\" class=\"text-center\">\r\n        <b-link to=\"/home\"><img src=\"@/art/logo.png\" class=\"fluid\" style=\"max-width:180px;\" /></b-link>\r\n      </b-col>\r\n    </b-row>\r\n    <b-row class=\"mb-3\">\r\n      <b-col class=\"text-center\">\r\n        &copy; {{(new Date).getFullYear()}}  Viva Learning LLC\r\n        <div>All rights reserved.</div>\r\n      </b-col>\r\n    </b-row>\r\n    <!-- <b-row class=\"mt-3 mb-3\">\r\n      <b-col class=\"text-center\">\r\n        <b-link to=\"/privacy\">Privacy Policy</b-link>\r\n        &nbsp;&nbsp;&bull;&nbsp;&nbsp;\r\n        <b-link to=\"/terms\">Terms &amp; Conditions</b-link>\r\n      </b-col>\r\n    </b-row> -->\r\n    <!-- <b-row class=\"mt-3 mb-3\">\r\n      <b-col class=\"text-center\">\r\n        Version: {{version}}\r\n        &nbsp;&nbsp;&bull;&nbsp;&nbsp;\r\n        Build: {{build}}\r\n      </b-col>\r\n    </b-row> -->\r\n  </b-container>\r\n</template>\r\n<script>\r\n/* eslint-disable */\r\n// import router from \"../router\"\r\n\r\nvar data = {\r\n  debug: false\r\n };\r\n\r\nexport default {\r\n  name: \"FooterBar\",\r\n  data() {\r\n    return data;\r\n  },\r\n  computed: {\r\n    isLoggedIn() { \r\n      return this.$root.hasToken() \r\n    },\r\n    token() {\r\n      return this.$root.getToken()\r\n    },\r\n    version() { return this.$root.getVersion() },\r\n    build() { return this.$root.getBuild() }\r\n  },\r\n  methods: {},\r\n  mounted() {}\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.menu-links a {\r\n  display: inline-block;\r\n  text-decoration: none;\r\n  color: #fff;\r\n}\r\n\r\n.nav-item-left {\r\n  text-align: left;\r\n}\r\n\r\n.nav-item-right {\r\n  text-align: right;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/FooterBar.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-container',[_c('b-row',{staticClass:\"mt-2 mb-2\"},[_c('b-col',[_c('hr',{staticStyle:{\"background-color\":\"#CCC\"},attrs:{\"size\":\"1\"}})])],1),_vm._v(\" \"),_c('b-row',{attrs:{\"align-h\":\"center\"}},[_c('b-col',{staticClass:\"text-center\",attrs:{\"cols\":\"12\"}},[_c('b-link',{attrs:{\"to\":\"/home\"}},[_c('img',{staticClass:\"fluid\",staticStyle:{\"max-width\":\"180px\"},attrs:{\"src\":require(\"@/art/logo.png\")}})])],1)],1),_vm._v(\" \"),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{staticClass:\"text-center\"},[_vm._v(\"\\n      © \"+_vm._s((new Date).getFullYear())+\"  Viva Learning LLC\\n      \"),_c('div',[_vm._v(\"All rights reserved.\")])])],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-7deab781\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/FooterBar.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-7deab781\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./FooterBar.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./FooterBar.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./FooterBar.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7deab781\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./FooterBar.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-7deab781\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/FooterBar.vue\n// module id = null\n// module chunks = ","<template>\r\n  <div id=\"app\">\r\n    <header-bar></header-bar>\r\n      <transition name=\"fade\" mode=\"out-in\">\r\n        <div class=\"div-view pt-2 pb-2\">\r\n        <router-view :key=\"$route.fullPath\"></router-view>\r\n        </div>\r\n      </transition>\r\n      <footer-bar></footer-bar>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\n\r\n'use strict'\r\n\r\n/* eslint-disable */\r\nimport HeaderBar from \"@/components/HeaderBar\"\r\nimport FooterBar from \"@/components/FooterBar\"\r\n\r\nlet data = {\r\n}\r\n\r\nexport default {\r\n  name: \"App\",\r\n  data() { return data },\r\n  components: {\r\n    \"header-bar\": HeaderBar,\r\n    \"footer-bar\": FooterBar\r\n  },\r\n  methods: {\r\n    testme() { \r\n      // call using this.$parent.testme()\r\n      console.log(`APP testme!!`) \r\n    },\r\n  },\r\n  created() { console.log(`APP created`)},\r\n  mounted() { console.log(`APP mounted`)}\r\n}\r\n</script>\r\n\r\n<style>\r\nbody {\r\n  line-height: 1.5;\r\n}\r\n\r\n#app {\r\n  background-color: #f3f4f9;  /* light gray background */\r\n  font-family: \"Avenir\", Helvetica, Arial, sans-serif;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  /* text-align: center; */\r\n  color: #2c3e50;\r\n  margin-top: 60px;\r\n}\r\n\r\n.div-view {\r\n  background-color: #FFF;\r\n}\r\n\r\n.div-section-header {\r\n  /* border: 1px solid #77F; */\r\n  background-color: #f3f4f9;\r\n  margin: 15px 5px 10px 0;\r\n}\r\n.div-section-body {\r\n  padding: 1px 0px 0px 10px;\r\n  background-color: #FFF;\r\n  border: 1px solid #DDD;\r\n}\r\n\r\n.div-padding {\r\n  padding: 10px 5px 10px 5px;\r\n}\r\n\r\n.txt-section-title {\r\n  font-weight: bold;\r\n  color: black;\r\n  font-size: 1.2rem;\r\n}\r\n.txt-section-subtitle {\r\n  font-weight: bold;\r\n  color: #3471b3;;\r\n  font-size: .9rem;\r\n}\r\n\r\n.divPlayerApp {\r\n    z-index: 100;\r\n    background-color: #FFF;\r\n    margin: 5px auto 0 auto;\r\n    position: fixed;\r\n    /* position: sticky; */\r\n    /* left: 20px; */\r\n    bottom: 0;\r\n}\r\n\r\n.divPlayerApp2 {\r\n    padding: 5px 20px;\r\n    border: 2px solid gray;\r\n}\r\n\r\n.page-header h2 {\r\n  font-size: 1.1em;\r\n  color: white;\r\n  background-color: black;\r\n  padding: 10px 0px;\r\n  text-align: center;\r\n}\r\n\r\n.class-title {\r\n   font-size: .9rem; \r\n   font-weight: bold;\r\n}\r\n.class-details {\r\n  font-size: .71rem;\r\n}\r\n\r\n.txt-class-blurb {\r\n  font-size: .95rem;\r\n}\r\n\r\n.pointer {\r\n   cursor: pointer;\r\n}\r\n\r\n.red {\r\n  color: red;\r\n}\r\n\r\n.reserved {  /* subtitle under photo */\r\n  font-size: .7rem;\r\n  font-weight: bold;\r\n  letter-spacing: 1px;\r\n  color: white;\r\n  background-color: rgba(255, 0, 0, 1.0);;\r\n  margin-top: 0;\r\n  max-width: 150px;\r\n}\r\n\r\n.waitlist {  /* subtitle under photo */\r\n  font-size: .7rem;\r\n  font-weight: bold;\r\n  letter-spacing: 1px;\r\n  color: white;\r\n  background-color: #3471b3;\r\n  margin-top: 0;\r\n  max-width: 150px;  \r\n}\r\n\r\n/* transitions */\r\n\r\n.fade-enter-to {\r\n  opacity: 1;\r\n}\r\n\r\n.fade-enter {\r\n  opacity: 0;\r\n}\r\n\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n  transition: opacity .4s ease-out;\r\n}\r\n\r\n.fade-leave-to {\r\n  opacity: 0;\r\n}\r\n\r\n/* misc */\r\n.col,\r\n.col-1,\r\n.col-2,\r\n.col-3,\r\n.col-4,\r\n.col-5,\r\n.col-6,\r\n.col-7,\r\n.col-8,\r\n.col-9,\r\n.col-10,\r\n.col-11,\r\n.col-12 {\r\n  /* border: 1px solid #ccc; */\r\n  font-size: auto;\r\n}\r\n\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header-bar'),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('div',{staticClass:\"div-view pt-2 pb-2\"},[_c('router-view',{key:_vm.$route.fullPath})],1)]),_vm._v(\" \"),_c('footer-bar')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-2ceae0d6\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-2ceae0d6\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2ceae0d6\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","'use strict'\r\nimport axios from 'axios'\r\n\r\n/* eslint-disable */\r\n\r\n// axios example\r\n// https://github.com/axios/axios\r\n\r\n// service naming conventions\r\n// https://restfulapi.net/resource-naming/\r\n// -- use hyphens, not underscore, for readability\r\n\r\n// axios tutorial\r\n// https://medium.com/codingthesmartway-com-blog/getting-started-with-axios-166cb0035237\r\n// video\r\n// https://www.youtube.com/watch?v=1vbpBDWu1AQ\r\n\r\nexport default {\r\n    getBook(bookCode) {\r\n        let data = { c: bookCode }\r\n        return axios.get('/api/book',{params: data}).then(res => res.data).catch(e => console.log(e) )\r\n    },\r\n    saveBookResponse(data) {\r\n        return axios.post('/api/book-response',data).then(res => res.data).catch(e => console.log(e) )\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/service/service.js","<template>\r\n  <b-overlay :show=\"busy\">\r\n    <b-container fluid>\r\n      <b-row align-h=\"center\">\r\n        <b-col cols=\"10\" lg=\"8\">\r\n\r\n          <b-row>\r\n\r\n            <b-col cols=\"12\" lg=\"8\" class=\"mb-4\">\r\n              <div class=\"div-book-title\">{{book.title}}</div>\r\n              <div class=\"div-book-subtitle\">{{book.subtitle}}</div>\r\n              <div>\r\n                <img :src=\"book.photo\" class=\"w-100\" style=\"max-width:600px;\" />\r\n              </div>\r\n              <div class=\"mt-2 div-book-blurb\">{{book.blurb}}</div>\r\n            </b-col>\r\n\r\n            <b-col cols=\"12\" lg=\"4\" class=\"mt-2 mb-2\">\r\n              <div class=\"div-form\">\r\n                <div v-if=\"!success\" class=\"div-book-formtitle\">{{book.formTitle}}</div>\r\n                <b-form v-if=\"!success\" @submit.stop.prevent=\"register\">\r\n\r\n                  <b-form-group label=\"Position\" label-for=\"position\" label-size=\"sm\" class=\"mb-2\" label-class=\"mb-0 pt-2 font-weight-bold\">\r\n                    <b-form-select id=\"position\" placeholder=\"\" v-model.trim=\"$v.form.jobTitle.$model\" :options=\"jobTitles\" :state=\"validateState('jobTitle')\" aria-describedby=\"support-position-feedback\"></b-form-select>\r\n                    <b-form-invalid-feedback id=\"support-position-feedback\">Select position.</b-form-invalid-feedback>\r\n                  </b-form-group>\r\n\r\n                  <!-- First Name -->\r\n                  <b-form-group label=\"First Name\" label-for=\"firstname\" label-size=\"sm\" class=\"mb-2\" label-class=\"mb-0 pt-2 font-weight-bold\">\r\n                    <b-form-input\r\n                        id=\"firstname\"\r\n                        v-model.trim=\"$v.form.firstname.$model\"\r\n                        type=\"text\"\r\n                        placeholder=\"Your first name\"\r\n                        :state=\"validateState('firstname')\"\r\n                        aria-describedby=\"support-firstname-feedback\"\r\n                    ></b-form-input>\r\n                    <b-form-invalid-feedback id=\"support-firstname-feedback\">First name is a required field and must be at least 2 characters.</b-form-invalid-feedback>\r\n                  </b-form-group>\r\n\r\n                  <!-- Last Name -->\r\n                  <b-form-group label=\"Last Name\" label-for=\"lastname\" label-size=\"sm\" class=\"mb-2\" label-class=\"mb-0 pt-2 font-weight-bold\">\r\n                    <b-form-input\r\n                        id=\"lastname\"\r\n                        v-model.trim=\"$v.form.lastname.$model\"\r\n                        type=\"text\"\r\n                        placeholder=\"Your last name\"\r\n                        :state=\"validateState('lastname')\"\r\n                        aria-describedby=\"support-lastname-feedback\"\r\n                    ></b-form-input>\r\n                    <b-form-invalid-feedback id=\"support-lastname-feedback\">Last name is a required field and must be at least 2 characters.</b-form-invalid-feedback>\r\n                  </b-form-group>\r\n\r\n                  <!-- Email -->\r\n                  <b-form-group label=\"Email\" label-for=\"email\" label-size=\"sm\" class=\"mb-2\" label-class=\"mb-0 pt-2 font-weight-bold\">\r\n                    <b-input-group class=\"mb-2\">\r\n                      <b-input-group-prepend is-text>\r\n                        <b-icon icon=\"envelope\"></b-icon>\r\n                      </b-input-group-prepend>\r\n                      <b-form-input\r\n                        id=\"email\"\r\n                        v-model.trim.lazy=\"$v.form.email.$model\"\r\n                        type=\"email\"\r\n                        placeholder=\"Your email\"\r\n                        :state=\"validateState('email')\"\r\n                        aria-describedby=\"support-email-feedback\"\r\n                      ></b-form-input>\r\n                      <b-form-invalid-feedback v-if=\"!$v.form.email.required\">Email is required.</b-form-invalid-feedback>\r\n                      <b-form-invalid-feedback v-if=\"!$v.form.email.email\">Enter valid email address.</b-form-invalid-feedback>\r\n                    </b-input-group>\r\n                  </b-form-group>\r\n\r\n                  <!-- Phone -->\r\n                  <b-form-group label=\"Telephone (optional)\" label-for=\"phone\" label-size=\"sm\" class=\"mb-2\" label-class=\"mb-0 pt-2 font-weight-bold\">\r\n                    <b-input-group class=\"mb-2\">\r\n                      <b-input-group-prepend is-text>\r\n                        <b-icon icon=\"phone\"></b-icon>\r\n                      </b-input-group-prepend>\r\n                      <b-form-input\r\n                        id=\"phone\"\r\n                        v-model.trim.lazy=\"$v.form.phone.$model\"\r\n                        type=\"tel\"\r\n                        placeholder=\"Your phone number\"\r\n                        :state=\"validateState('phone')\"\r\n                        aria-describedby=\"support-phone-feedback\"\r\n                      ></b-form-input>\r\n                      <b-form-invalid-feedback v-if=\"!$v.form.phone.optionalPhone\">Provide full phone number.</b-form-invalid-feedback>\r\n                    </b-input-group>\r\n                  </b-form-group>\r\n\r\n                  <b-form-checkbox\r\n                    id=\"optin\"\r\n                    v-if=\"book.hasOptin\"\r\n                    v-model=\"$v.form.optin.$model\"\r\n                    name=\"optin\"\r\n                    value=\"1\"\r\n                    unchecked-value=\"0\"\r\n                    class=\"mb-2\"\r\n                  >\r\n                    {{book.optinText || \"Text not available.\"}}\r\n                  </b-form-checkbox>\r\n\r\n                  <transition name=\"fade\" mode=\"out-in\">\r\n                    <b-alert v-model=\"error\" key=\"error-box\" show variant=\"danger\" dismissible class=\"mt-2\">\r\n                      {{errorMsg}}\r\n                    </b-alert>\r\n                  </transition>\r\n\r\n                  <b-card bg-variant=\"light\" class=\"mb-2\">\r\n                    {{book.buttonLabel || \"Complete all fields and click button below to get this eBook.\"}}\r\n                    <div class=\"text-center mt-2 mb-2\">\r\n                      <b-button type=\"submit\" variant=\"danger\">\r\n                        <span class=\"text-nowrap\">&nbsp;{{ book.buttonText || \"Get eBook\" }}&nbsp;</span>\r\n                      </b-button>\r\n                    </div>\r\n                  </b-card>\r\n\r\n                </b-form>\r\n\r\n                <!-- Success -->\r\n                <transition name=\"fade\" mode=\"out-in\">\r\n                  <b-alert v-model=\"success\" key=\"success-box\" show variant=\"secondary\" class=\"mt-2\">\r\n                    <div>\r\n                      <h4>Thanks for submitting the form!</h4>\r\n                    </div>\r\n                    <div v-if=\"isPdf\" class=\"div-pdf-link\">\r\n                      <a :href=\"book.pdf\" target=\"_blank\">{{ book.payloadLinkText || \"View eBook Now\"}}</a>\r\n                    </div>\r\n                    <div v-if=\"isYoutube\" class=\"div-pdf-link\">\r\n                      <a :href=\"getYoutubeUrl\" target=\"_blank\">{{ book.payloadLinkText || \"View Video Now\"}}</a>\r\n                    </div>\r\n                    <div v-if=\"isUrl\" class=\"div-pdf-link\">\r\n                      <a :href=\"book.url\" target=\"_blank\">{{ book.payloadLinkText || \"View URL Now\"}}</a>\r\n                    </div>\r\n\r\n                  </b-alert>\r\n                </transition>\r\n\r\n              </div>\r\n\r\n            </b-col>\r\n\r\n          </b-row>\r\n\r\n        </b-col>\r\n      </b-row>\r\n    </b-container>\r\n  </b-overlay>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n\r\nimport service from \"@/service/service\"\r\nimport utils from \"@/utils/utils\"\r\nimport constants from \"@/config/constants\"\r\n\r\nimport { validationMixin } from 'vuelidate'\r\nimport { required, email, minLength, maxLength, between, sameAs, helpers } from 'vuelidate/lib/validators'\r\nimport { T } from \"caniuse-lite/data/browserVersions\"\r\n\r\n// optional phone validator\r\n// https://vuelidate.js.org/#sub-optional-validator\r\nconst optionalPhone = (value) => !helpers.req(value) || value.length >= 10\r\n\r\nexport default {\r\n  name: \"Home\",\r\n  data() {\r\n    return {\r\n      debug:false,   // logs to console\r\n      error: false,\r\n      errorMsg: null,\r\n      busy: false,\r\n      success: false,\r\n      bookCode: null,\r\n      email: null,    // optional: provided via query parameter \"e\"\r\n      hash: null,     // optional: newsletterEmails.hash value via query parameter \"h\"\r\n      studentHash: null,\r\n      book: {\r\n        bookId: 0,\r\n        companyId: 0,\r\n        mediaTypeId: 0,\r\n        code: null,\r\n        hasOptin: false,\r\n        title: null,\r\n        subtitle: null,\r\n        formTitle: null,\r\n        photo: null,\r\n        blurb: null,\r\n        buttonLabel: null,\r\n        buttonText: null,\r\n        pdf: null,\r\n        url: null,\r\n        youtubeCode: null,\r\n        optinText: null,\r\n        payloadLinkText: null,\r\n        hash: null,\r\n        companyName: null\r\n      },\r\n      jobTitles: null,\r\n      form: {\r\n        optin: \"0\",\r\n        jobTitle: null,\r\n        firstname: null,\r\n        lastname: null,\r\n        phone: null,\r\n        email: null,\r\n        bookHash: null,\r\n        hash: null\r\n      }\r\n    }\r\n  },\r\n  props: {\r\n    // Ebook.code\r\n    c: {\r\n      type: String,\r\n      required: true,\r\n      default: \"\"\r\n    }\r\n  },\r\n  mixins: [validationMixin],\r\n  validations: {\r\n    form: {\r\n      optin: {},\r\n      jobTitle: {\r\n        required\r\n      },\r\n      firstname: {\r\n        required,\r\n        minLength: minLength(2)\r\n      },\r\n      lastname: {\r\n        required,\r\n        minLength: minLength(2)\r\n      },\r\n      phone: {\r\n        optionalPhone\r\n        // required,\r\n        // minLength: minLength(10)\r\n      },\r\n      email: {\r\n        required,\r\n        email\r\n      }\r\n    }\r\n  },\r\n  computed: {\r\n    isPdf() {\r\n      return this.book.mediaTypeId == constants.VP_MEDIATYPE.PDF\r\n    },\r\n    isYoutube() {\r\n      return this.book.mediaTypeId == constants.VP_MEDIATYPE.YOUTUBE\r\n    },\r\n    isUrl() {\r\n      return this.book.mediaTypeId == constants.VP_MEDIATYPE.URL\r\n    },\r\n    getYoutubeUrl() {\r\n      return utils.getYoutubeUrl(this.book.youtubeCode, true)\r\n    }\r\n  },\r\n  methods: {\r\n    validateState(name) {\r\n      // console.log(`name: ${name}`)\r\n      const { $dirty, $error } = this.$v.form[name]\r\n      return $dirty ? !$error : null;\r\n    },\r\n    register(e) {  // user filled out form.\r\n\r\n        this.$v.form.$touch()\r\n        if (this.$v.form.$anyError) {\r\n          console.log(`ERROR!!`)\r\n          this.errorMsg = 'Correct errors and resubmit.'\r\n          this.error = true\r\n          return\r\n        }\r\n\r\n        this.error = false\r\n        this.success = false\r\n        this.busy = true\r\n        service\r\n          .saveBookResponse(this.form)\r\n          .then( res => {\r\n            if (this.debug) console.log(res.data)\r\n            if (res.status) {\r\n\r\n              // this.$router.push(`/done/${this.book.code}`)\r\n\r\n              console.log(`mediaTypeId: ${this.book.mediaTypeId}  VP_MEDIATYPE.PDF: ${constants.VP_MEDIATYPE.PDF}`)\r\n\r\n              this.error = false\r\n              this.success = true\r\n\r\n              // Re-init whole form\r\n              this.form.firstname = null\r\n              this.form.lastname = null\r\n              this.form.phone = null\r\n              this.form.email = null\r\n\r\n            } else {\r\n                this.success = false\r\n                this.errorMsg = res.errorMsg || 'System Error from Register Service.'\r\n                this.error = true\r\n            }\r\n          })\r\n          .finally( () => {\r\n            this.busy = false\r\n          })\r\n          .catch(e => {\r\n            console.log(e);\r\n            this.error = true\r\n          })\r\n    },\r\n    registerRepEmpower() {  // email or hash provided - short circuit\r\n\r\n      this.form.jobTitle = 'Sales Rep'\r\n      this.form.firstname = 'Undefined'\r\n      this.form.lastname = 'Undefined'\r\n      this.form.phone = null\r\n\r\n      // Validate form fields if hash not provided.\r\n      if (!this.form.hash) {\r\n        this.$v.form.$touch()\r\n        if (this.$v.form.$anyError) {\r\n          console.log(`ERROR!!`)\r\n          this.errorMsg = 'Correct errors and resubmit.'\r\n          this.error = true\r\n          return\r\n        }\r\n      }\r\n\r\n      this.error = false\r\n      this.success = false\r\n      this.busy = true\r\n      service\r\n        .saveBookResponse(this.form)\r\n        .then( res => {\r\n          if (this.debug) console.log(res.data)\r\n          if (res.status) {\r\n\r\n            // this.$router.push(`/done/${this.book.code}`)\r\n            this.error = false\r\n            this.success = true\r\n\r\n            // Re-init whole form\r\n            this.form.firstname = null\r\n            this.form.lastname = null\r\n            this.form.phone = null\r\n            this.form.email = null\r\n\r\n            if (this.book.mediaTypeId === constants.VP_MEDIATYPE.URL) {\r\n              // proceed directly to url\r\n              window.location.href = this.book.url\r\n            }\r\n            else {\r\n              console.log(`mediaTypeId: ${this.book.mediaTypeId}  VP_MEDIATYPE.PDF: ${constants.VP_MEDIATYPE.PDF}`)\r\n            }\r\n          } else {\r\n              this.success = false\r\n              this.errorMsg = res.errorMsg || 'System Error from Register Service.'\r\n              this.error = true\r\n          }\r\n        })\r\n        .finally(() => {\r\n          this.busy = false\r\n        })\r\n        .catch(e => {\r\n          console.log(e);\r\n          this.error = true\r\n        })\r\n    }\r\n  },\r\n  created() {\r\n\r\n    this.bookCode = this.c || this.$route.query.c || null\r\n    this.email = this.$route.query.e || null  // optional email address\r\n    this.hash = this.$route.query.h || null   // optional newsletterEmails.hash\r\n    this.busy = true\r\n\r\n    service\r\n      .getBook(this.bookCode)\r\n      .then(\r\n        (res => {\r\n          console.log(`back from getBook`);\r\n          if (this.debug) console.log(res);\r\n          if (res.status) {\r\n            this.book = res.book\r\n            this.form.bookHash = this.book.hash\r\n            this.jobTitles = res.jobTitles\r\n            if (this.email || this.hash) {  // store response if email or hash provided\r\n              if(this.debug) console.log(`Calling registerRepEmpower e: |${this.email}|  hash: |${this.hash}|`)\r\n              this.form.email = this.email\r\n              this.form.hash = this.hash\r\n              this.registerRepEmpower()\r\n            }\r\n          }\r\n          else {\r\n            this.error = true\r\n          }\r\n        }).bind(this)\r\n      )\r\n      .finally(e => {\r\n        this.busy = false\r\n      })\r\n      .catch(e => {\r\n        this.error = true\r\n        console.log(e)\r\n      });\r\n  }\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.div-book-title {\r\n  color: #c51749;\r\n  font-family: Poppins,Arial,Sans-Serif;\r\n  margin: 0 0 15px 0;\r\n  font-size: 30px;\r\n  font-weight: 700;\r\n  font-style: normal;\r\n}\r\n\r\n.div-book-subtitle {\r\n  font-family: Poppins,Arial,Sans-Serif;\r\n  margin: 0 0 15px 0;\r\n  color: #0d78c0;\r\n  font-weight: 700;\r\n  font-style: normal;\r\n  font-size: 26px;\r\n}\r\n\r\n.div-book-blurb {\r\n  color: #000;\r\n  font-family: \"Arial\",\"Sans-Serif\";\r\n  font-size: 16px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.div-book-formtitle {\r\n    font-size: 30px;\r\n    font-weight: 400;\r\n    color: #c51749;\r\n    font-family: Poppins,Arial,Sans-Serif;\r\n    margin: 0 0 15px 0;\r\n    font-style: normal;\r\n}\r\n\r\n.div-form {\r\n    box-shadow: 0px 0px 50px -16px rgba(0,0,0,0.75);\r\n    padding: 20px 22px;\r\n}\r\n\r\n.div-pdf-link a, .div-pdf-link a:visited {\r\n    font-weight: bold;\r\n    font-size: 1.1rem;\r\n    color: #c51749;\r\n}\r\n\r\n.div-pdf-link a:active {\r\n    font-weight: bold;\r\n    font-size: 1.1rem;\r\n    color: #F00;\r\n}\r\n\r\n.txt-home-title-part1 {\r\n  font-weight: bold;\r\n  color: #939393;\r\n  font-size: 2rem;\r\n}\r\n.txt-home-title-part2 {\r\n  /* font-weight: bold; */\r\n  color: #3471b3;\r\n  font-size: 1.9rem;\r\n}\r\n.txt-home-subtitle {\r\n  font-weight: bold;\r\n  font-size: 1.1rem;\r\n  line-height: 130%;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Home.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-overlay',{attrs:{\"show\":_vm.busy}},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('b-row',{attrs:{\"align-h\":\"center\"}},[_c('b-col',{attrs:{\"cols\":\"10\",\"lg\":\"8\"}},[_c('b-row',[_c('b-col',{staticClass:\"mb-4\",attrs:{\"cols\":\"12\",\"lg\":\"8\"}},[_c('div',{staticClass:\"div-book-title\"},[_vm._v(_vm._s(_vm.book.title))]),_vm._v(\" \"),_c('div',{staticClass:\"div-book-subtitle\"},[_vm._v(_vm._s(_vm.book.subtitle))]),_vm._v(\" \"),_c('div',[_c('img',{staticClass:\"w-100\",staticStyle:{\"max-width\":\"600px\"},attrs:{\"src\":_vm.book.photo}})]),_vm._v(\" \"),_c('div',{staticClass:\"mt-2 div-book-blurb\"},[_vm._v(_vm._s(_vm.book.blurb))])]),_vm._v(\" \"),_c('b-col',{staticClass:\"mt-2 mb-2\",attrs:{\"cols\":\"12\",\"lg\":\"4\"}},[_c('div',{staticClass:\"div-form\"},[(!_vm.success)?_c('div',{staticClass:\"div-book-formtitle\"},[_vm._v(_vm._s(_vm.book.formTitle))]):_vm._e(),_vm._v(\" \"),(!_vm.success)?_c('b-form',{on:{\"submit\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.register($event)}}},[_c('b-form-group',{staticClass:\"mb-2\",attrs:{\"label\":\"Position\",\"label-for\":\"position\",\"label-size\":\"sm\",\"label-class\":\"mb-0 pt-2 font-weight-bold\"}},[_c('b-form-select',{attrs:{\"id\":\"position\",\"placeholder\":\"\",\"options\":_vm.jobTitles,\"state\":_vm.validateState('jobTitle'),\"aria-describedby\":\"support-position-feedback\"},model:{value:(_vm.$v.form.jobTitle.$model),callback:function ($$v) {_vm.$set(_vm.$v.form.jobTitle, \"$model\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"$v.form.jobTitle.$model\"}}),_vm._v(\" \"),_c('b-form-invalid-feedback',{attrs:{\"id\":\"support-position-feedback\"}},[_vm._v(\"Select position.\")])],1),_vm._v(\" \"),_c('b-form-group',{staticClass:\"mb-2\",attrs:{\"label\":\"First Name\",\"label-for\":\"firstname\",\"label-size\":\"sm\",\"label-class\":\"mb-0 pt-2 font-weight-bold\"}},[_c('b-form-input',{attrs:{\"id\":\"firstname\",\"type\":\"text\",\"placeholder\":\"Your first name\",\"state\":_vm.validateState('firstname'),\"aria-describedby\":\"support-firstname-feedback\"},model:{value:(_vm.$v.form.firstname.$model),callback:function ($$v) {_vm.$set(_vm.$v.form.firstname, \"$model\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"$v.form.firstname.$model\"}}),_vm._v(\" \"),_c('b-form-invalid-feedback',{attrs:{\"id\":\"support-firstname-feedback\"}},[_vm._v(\"First name is a required field and must be at least 2 characters.\")])],1),_vm._v(\" \"),_c('b-form-group',{staticClass:\"mb-2\",attrs:{\"label\":\"Last Name\",\"label-for\":\"lastname\",\"label-size\":\"sm\",\"label-class\":\"mb-0 pt-2 font-weight-bold\"}},[_c('b-form-input',{attrs:{\"id\":\"lastname\",\"type\":\"text\",\"placeholder\":\"Your last name\",\"state\":_vm.validateState('lastname'),\"aria-describedby\":\"support-lastname-feedback\"},model:{value:(_vm.$v.form.lastname.$model),callback:function ($$v) {_vm.$set(_vm.$v.form.lastname, \"$model\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"$v.form.lastname.$model\"}}),_vm._v(\" \"),_c('b-form-invalid-feedback',{attrs:{\"id\":\"support-lastname-feedback\"}},[_vm._v(\"Last name is a required field and must be at least 2 characters.\")])],1),_vm._v(\" \"),_c('b-form-group',{staticClass:\"mb-2\",attrs:{\"label\":\"Email\",\"label-for\":\"email\",\"label-size\":\"sm\",\"label-class\":\"mb-0 pt-2 font-weight-bold\"}},[_c('b-input-group',{staticClass:\"mb-2\"},[_c('b-input-group-prepend',{attrs:{\"is-text\":\"\"}},[_c('b-icon',{attrs:{\"icon\":\"envelope\"}})],1),_vm._v(\" \"),_c('b-form-input',{attrs:{\"id\":\"email\",\"type\":\"email\",\"placeholder\":\"Your email\",\"state\":_vm.validateState('email'),\"aria-describedby\":\"support-email-feedback\"},model:{value:(_vm.$v.form.email.$model),callback:function ($$v) {_vm.$set(_vm.$v.form.email, \"$model\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"$v.form.email.$model\"}}),_vm._v(\" \"),(!_vm.$v.form.email.required)?_c('b-form-invalid-feedback',[_vm._v(\"Email is required.\")]):_vm._e(),_vm._v(\" \"),(!_vm.$v.form.email.email)?_c('b-form-invalid-feedback',[_vm._v(\"Enter valid email address.\")]):_vm._e()],1)],1),_vm._v(\" \"),_c('b-form-group',{staticClass:\"mb-2\",attrs:{\"label\":\"Telephone (optional)\",\"label-for\":\"phone\",\"label-size\":\"sm\",\"label-class\":\"mb-0 pt-2 font-weight-bold\"}},[_c('b-input-group',{staticClass:\"mb-2\"},[_c('b-input-group-prepend',{attrs:{\"is-text\":\"\"}},[_c('b-icon',{attrs:{\"icon\":\"phone\"}})],1),_vm._v(\" \"),_c('b-form-input',{attrs:{\"id\":\"phone\",\"type\":\"tel\",\"placeholder\":\"Your phone number\",\"state\":_vm.validateState('phone'),\"aria-describedby\":\"support-phone-feedback\"},model:{value:(_vm.$v.form.phone.$model),callback:function ($$v) {_vm.$set(_vm.$v.form.phone, \"$model\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"$v.form.phone.$model\"}}),_vm._v(\" \"),(!_vm.$v.form.phone.optionalPhone)?_c('b-form-invalid-feedback',[_vm._v(\"Provide full phone number.\")]):_vm._e()],1)],1),_vm._v(\" \"),(_vm.book.hasOptin)?_c('b-form-checkbox',{staticClass:\"mb-2\",attrs:{\"id\":\"optin\",\"name\":\"optin\",\"value\":\"1\",\"unchecked-value\":\"0\"},model:{value:(_vm.$v.form.optin.$model),callback:function ($$v) {_vm.$set(_vm.$v.form.optin, \"$model\", $$v)},expression:\"$v.form.optin.$model\"}},[_vm._v(\"\\n                  \"+_vm._s(_vm.book.optinText || \"Text not available.\")+\"\\n                \")]):_vm._e(),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('b-alert',{key:\"error-box\",staticClass:\"mt-2\",attrs:{\"show\":\"\",\"variant\":\"danger\",\"dismissible\":\"\"},model:{value:(_vm.error),callback:function ($$v) {_vm.error=$$v},expression:\"error\"}},[_vm._v(\"\\n                    \"+_vm._s(_vm.errorMsg)+\"\\n                  \")])],1),_vm._v(\" \"),_c('b-card',{staticClass:\"mb-2\",attrs:{\"bg-variant\":\"light\"}},[_vm._v(\"\\n                  \"+_vm._s(_vm.book.buttonLabel || \"Complete all fields and click button below to get this eBook.\")+\"\\n                  \"),_c('div',{staticClass:\"text-center mt-2 mb-2\"},[_c('b-button',{attrs:{\"type\":\"submit\",\"variant\":\"danger\"}},[_c('span',{staticClass:\"text-nowrap\"},[_vm._v(\" \"+_vm._s(_vm.book.buttonText || \"Get eBook\")+\" \")])])],1)])],1):_vm._e(),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('b-alert',{key:\"success-box\",staticClass:\"mt-2\",attrs:{\"show\":\"\",\"variant\":\"secondary\"},model:{value:(_vm.success),callback:function ($$v) {_vm.success=$$v},expression:\"success\"}},[_c('div',[_c('h4',[_vm._v(\"Thanks for submitting the form!\")])]),_vm._v(\" \"),(_vm.isPdf)?_c('div',{staticClass:\"div-pdf-link\"},[_c('a',{attrs:{\"href\":_vm.book.pdf,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.book.payloadLinkText || \"View eBook Now\"))])]):_vm._e(),_vm._v(\" \"),(_vm.isYoutube)?_c('div',{staticClass:\"div-pdf-link\"},[_c('a',{attrs:{\"href\":_vm.getYoutubeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.book.payloadLinkText || \"View Video Now\"))])]):_vm._e(),_vm._v(\" \"),(_vm.isUrl)?_c('div',{staticClass:\"div-pdf-link\"},[_c('a',{attrs:{\"href\":_vm.book.url,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.book.payloadLinkText || \"View URL Now\"))])]):_vm._e()])],1)],1)])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-0a33b8e8\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Home.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-0a33b8e8\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Home.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Home.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Home.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0a33b8e8\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Home.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-0a33b8e8\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Home.vue\n// module id = null\n// module chunks = ","<template>\r\n  <h1>{{ bookCode }}</h1>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n\r\nimport service from \"@/service/service\";\r\n\r\nvar data = {\r\n  busy: false,\r\n  bookCode: null,\r\n  book: null\r\n}\r\n\r\nexport default {\r\n  name: \"Done\",\r\n  data() {\r\n    return data\r\n  },\r\n  props: {\r\n    // Ebook.code\r\n    c: {\r\n      type: String,\r\n      required: true,      \r\n      default: \"\"\r\n    }    \r\n  },\r\n  created() {\r\n    this.bookCode = this.c || this.$route.query.c || null\r\n    this.busy = true\r\n\r\n    service\r\n      .getBook(this.bookCode)\r\n      .then(\r\n        (res => {\r\n          console.log(`back from getBook`);\r\n          if (this.debug) console.log(res);\r\n          if (res.status) {\r\n            this.book = res.book\r\n            this.form.hash = this.book.hash\r\n            this.jobTitles = res.jobTitles\r\n          }\r\n          else {\r\n            this.error = true\r\n          }\r\n        }).bind(this)\r\n      )\r\n      .finally(e => {\r\n        this.loading = false;\r\n        console.log(`finally...`)\r\n      })\r\n      .catch(e => {\r\n        this.error = true;\r\n        console.log(e)\r\n      });\r\n  }\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Done.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h1',[_vm._v(_vm._s(_vm.bookCode))])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-7495a488\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Done.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-7495a488\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Done.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Done.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Done.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7495a488\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Done.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-7495a488\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Done.vue\n// module id = null\n// module chunks = ","<template>\r\n  <b-container fluid>\r\n    <b-row hidden>\r\n      <b-col>1</b-col>\r\n      <b-col>2</b-col>\r\n      <b-col>3</b-col>\r\n      <b-col>4</b-col>\r\n      <b-col>5</b-col>\r\n      <b-col>6</b-col>\r\n      <b-col>7</b-col>\r\n      <b-col>8</b-col>\r\n      <b-col>9</b-col>\r\n      <b-col>10</b-col>\r\n      <b-col>11</b-col>\r\n      <b-col>12</b-col>\r\n    </b-row>\r\n\r\n    <b-row align-h=\"center\">\r\n      <b-col cols=\"12\" sm=\"8\" lg=\"4\">\r\n        <div class=\"page-header\">\r\n          <h2>{{ msg }}</h2>\r\n        </div>Unable to locate this resource.\r\n        <div>\r\n          <b-link to=\"/login\">Home</b-link>\r\n        </div>\r\n      </b-col>\r\n    </b-row>\r\n    <div v-if=\"debug\">\r\n      <h2 v-once>s: {{ studentHash }}</h2>\r\n      <h2 v-once>c: {{ classHash }}</h2>\r\n    </div>\r\n  </b-container>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n\r\nimport service from \"@/service/service\";\r\n\r\nvar data = {\r\n  msg: \"Page Not Found\",\r\n  show: true,\r\n  debug: false,\r\n  loading: true,\r\n  error: false,\r\n  studentHash: \"\",\r\n  classHash: \"\",\r\n  form: { username: \"\", password: \"\" }\r\n};\r\n\r\n// using props for url parameters\r\n// https://www.youtube.com/watch?v=ESg0k2zdME4\r\n\r\nexport default {\r\n  name: \"NotFound\",\r\n  data() {\r\n    return data;\r\n  },\r\n  props: {\r\n    // route set to use props mapped to url parameters\r\n    s: {\r\n      type: String,\r\n      default: \"\"\r\n    },\r\n    c: {\r\n      type: String,\r\n      default: \"\"\r\n    }\r\n  },\r\n  methods: {  }\r\n};\r\n\r\nfunction handleInit(data) {\r\n  console.log(`status: ${data.status}`);\r\n  console.log(`studentHash: ${studentHash}`);\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/NotFound.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-container',{attrs:{\"fluid\":\"\"}},[_c('b-row',{attrs:{\"hidden\":\"\"}},[_c('b-col',[_vm._v(\"1\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"2\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"3\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"4\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"5\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"6\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"7\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"8\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"9\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"10\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"11\")]),_vm._v(\" \"),_c('b-col',[_vm._v(\"12\")])],1),_vm._v(\" \"),_c('b-row',{attrs:{\"align-h\":\"center\"}},[_c('b-col',{attrs:{\"cols\":\"12\",\"sm\":\"8\",\"lg\":\"4\"}},[_c('div',{staticClass:\"page-header\"},[_c('h2',[_vm._v(_vm._s(_vm.msg))])]),_vm._v(\"Unable to locate this resource.\\n      \"),_c('div',[_c('b-link',{attrs:{\"to\":\"/login\"}},[_vm._v(\"Home\")])],1)])],1),_vm._v(\" \"),(_vm.debug)?_c('div',[_vm._m(0),_vm._v(\" \"),_vm._m(1)]):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h2',[_vm._v(\"s: \"+_vm._s(_vm.studentHash))])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h2',[_vm._v(\"c: \"+_vm._s(_vm.classHash))])}]\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-d00aa95a\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/NotFound.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-d00aa95a\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./NotFound.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./NotFound.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./NotFound.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d00aa95a\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./NotFound.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-d00aa95a\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/NotFound.vue\n// module id = null\n// module chunks = ","<template>\r\n  <b-overlay :show=\"loading\">\r\n    <b-container fluid>\r\n      <b-row align-h=\"center\">\r\n        <b-col cols=\"12\" lg=\"8\">\r\n\r\n          <b-alert v-if=\"error\" show variant=\"danger\" class=\"mt-2\">No class selected.</b-alert>\r\n\r\n          <b-alert v-if=\"error\" show variant=\"danger\" class=\"mt-2\">\r\n            System error - contact tech support.\r\n            <!-- TBD error component. -->\r\n          </b-alert>\r\n\r\n          <div class=\"div-section-header\">\r\n            <b-row>\r\n              <b-col cols=\"12\">\r\n                <div>\r\n                  <span class=\"txt-section-title\">{{msg}}</span>\r\n                </div>\r\n              </b-col>\r\n            </b-row>\r\n          </div>\r\n\r\n          <div class=\"div-section-body\">\r\n            <div class=\"div-padding\" v-html=\"blurb\"></div>\r\n          </div>\r\n\r\n        </b-col>\r\n      </b-row>\r\n    </b-container>\r\n  </b-overlay>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n\r\nimport service from \"@/service/service\";\r\nimport utils from \"@/utils/utils\";\r\n\r\nvar data = {\r\n  debug: false,\r\n  error: false,\r\n  loading: true,\r\n  msg: \"Terms & Conditions\",\r\n  code: \"terms\",\r\n  blurb: \"\",\r\n  studentHash: '',\r\n};\r\n\r\nexport default {\r\n  name: \"Terms\",\r\n  data() {\r\n    return data;\r\n  },\r\n  props: {},\r\n  computed: {},\r\n    methods: {\r\n    goBack() {\r\n      this.$router.go(-1);\r\n    },\r\n    nl2br(msg) {\r\n        return utils.nl2br(msg)\r\n    }\r\n  },\r\n  created() {\r\n    this.studentHash = this.$root.getToken() || '';\r\n    if (this.code) {\r\n      service\r\n        .getBlurb(this.code)\r\n        .then(\r\n          (res => {\r\n            console.log(`back from getBlurb!`);\r\n            if (this.debug) console.log(res);\r\n            if (res.status && res.rowCount !== 0) {\r\n              // this.blurb = res.data[0].blurb.replace('\\r\\n','').replace('<br>','')\r\n              this.blurb = res.data[0].blurb\r\n            }\r\n            else {\r\n              this.error = true\r\n            }\r\n          }).bind(this)\r\n        )\r\n        .finally(e => {\r\n          this.loading = false;\r\n          console.log(`finally...`);\r\n        })\r\n        .catch(e => {\r\n          this.error = true;\r\n          console.log(e);\r\n        });\r\n    }\r\n    else {\r\n        // flag error!\r\n    }\r\n    // this.error = this.$root.getClassId() === 0;\r\n  }\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Terms.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-overlay',{attrs:{\"show\":_vm.loading}},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('b-row',{attrs:{\"align-h\":\"center\"}},[_c('b-col',{attrs:{\"cols\":\"12\",\"lg\":\"8\"}},[(_vm.error)?_c('b-alert',{staticClass:\"mt-2\",attrs:{\"show\":\"\",\"variant\":\"danger\"}},[_vm._v(\"No class selected.\")]):_vm._e(),_vm._v(\" \"),(_vm.error)?_c('b-alert',{staticClass:\"mt-2\",attrs:{\"show\":\"\",\"variant\":\"danger\"}},[_vm._v(\"\\n          System error - contact tech support.\\n          \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"div-section-header\"},[_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('div',[_c('span',{staticClass:\"txt-section-title\"},[_vm._v(_vm._s(_vm.msg))])])])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"div-section-body\"},[_c('div',{staticClass:\"div-padding\",domProps:{\"innerHTML\":_vm._s(_vm.blurb)}})])],1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-59c54de1\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Terms.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-59c54de1\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Terms.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Terms.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Terms.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-59c54de1\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Terms.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-59c54de1\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Terms.vue\n// module id = null\n// module chunks = ","<template>\r\n  <b-overlay :show=\"loading\">\r\n    <b-container fluid>\r\n      <b-row align-h=\"center\">\r\n        <b-col cols=\"12\" lg=\"8\">\r\n\r\n          <b-alert v-if=\"error\" show variant=\"danger\" class=\"mt-2\">\r\n            System error - contact tech support.\r\n            <!-- TBD error component. -->\r\n          </b-alert>\r\n\r\n          <div class=\"div-section-header\">\r\n            <b-row>\r\n              <b-col cols=\"12\">\r\n                <div>\r\n                  <span class=\"txt-section-title\">{{msg}}</span>\r\n                </div>\r\n              </b-col>\r\n            </b-row>\r\n          </div>\r\n\r\n          <div class=\"div-section-body\">\r\n            <div class=\"div-padding\" v-html=\"nl2br(blurb)\"></div>\r\n          </div>\r\n\r\n        </b-col>\r\n      </b-row>\r\n    </b-container>\r\n  </b-overlay>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n\r\nimport service from \"@/service/service\";\r\nimport utils from \"@/utils/utils\";\r\n\r\nvar data = {\r\n  debug: false,\r\n  error: false,\r\n  loading: true,\r\n  msg: \"Privacy\",\r\n  code: \"privacy\",\r\n  blurb: \"\",\r\n  studentHash: '',\r\n};\r\n\r\nexport default {\r\n  name: \"Privacy\",\r\n  data() {\r\n    return data;\r\n  },\r\n  props: {},\r\n  computed: {},\r\n    methods: {\r\n    goBack() {\r\n      this.$router.go(-1);\r\n    },\r\n    nl2br(msg) {\r\n        return utils.nl2br(msg)\r\n    }\r\n  },\r\n  created() {\r\n    this.studentHash = this.$root.getToken() || '';\r\n    if (this.code) {\r\n      service\r\n        .getBlurb(this.code)\r\n        .then(\r\n          (res => {\r\n            console.log(`back from getBlurb!`);\r\n            if (this.debug) console.log(res);\r\n            if (res.status && res.rowCount !== 0) {\r\n              this.blurb = res.data[0].blurb\r\n            }\r\n            else {\r\n              this.error = true\r\n            }\r\n          }).bind(this)\r\n        )\r\n        .finally(e => {\r\n          this.loading = false;\r\n          console.log(`finally...`);\r\n        })\r\n        .catch(e => {\r\n          this.error = true;\r\n          console.log(e);\r\n        });\r\n    }\r\n    else {\r\n        // flag error!\r\n    }\r\n    // this.error = this.$root.getClassId() === 0;\r\n  }\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Privacy.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-overlay',{attrs:{\"show\":_vm.loading}},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('b-row',{attrs:{\"align-h\":\"center\"}},[_c('b-col',{attrs:{\"cols\":\"12\",\"lg\":\"8\"}},[(_vm.error)?_c('b-alert',{staticClass:\"mt-2\",attrs:{\"show\":\"\",\"variant\":\"danger\"}},[_vm._v(\"\\n          System error - contact tech support.\\n          \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"div-section-header\"},[_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('div',[_c('span',{staticClass:\"txt-section-title\"},[_vm._v(_vm._s(_vm.msg))])])])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"div-section-body\"},[_c('div',{staticClass:\"div-padding\",domProps:{\"innerHTML\":_vm._s(_vm.nl2br(_vm.blurb))}})])],1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-8794aa46\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Privacy.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n  require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-8794aa46\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Privacy.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Privacy.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Privacy.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-8794aa46\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Privacy.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-8794aa46\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Privacy.vue\n// module id = null\n// module chunks = ","import Vue from 'vue'\r\nimport VueRouter from 'vue-router'\r\nimport Home from '@/components/Home'\r\nimport Done from '@/components/Done'\r\nimport NotFound from '@/components/NotFound'\r\nimport Terms from '@/components/Terms'\r\nimport Privacy from '@/components/Privacy'\r\n\r\n/* eslint-disable */\r\n\r\nVue.use(VueRouter)\r\n\r\n// Put Login routes last since they have URL paramaters\r\n// Base Url is:\r\n// https://site.com/{studentHash}/{classHash}\r\n// eg\r\n// https://site.com/111-22-33/55-asdf-99\r\n\r\nconst router = new VueRouter({\r\n  mode: 'history',\r\n  // beforeEach: function(to, from, next) {\r\n  //   console.log(`router`)\r\n  //   console.log(this)\r\n  //   if(to.meta.requiresAuth) {\r\n  //       if (this.isLoggedIn()) {  //authUser.access_token\r\n  //         next();\r\n  //       }\r\n  //       else {\r\n  //         next({ name: 'login' });\r\n  //       }\r\n  //   }\r\n  //   next();\r\n  // },\r\n  // isLoggedIn:  () => {  // not used!!\r\n  //   console.log(`router -  NEVER CALLED?`)\r\n  //   console.log(`ls: ${localStorage.getItem('id_token')}`)\r\n  //   return (localStorage.getItem('id_token') !== null);\r\n  // },\r\n  routes: [\r\n    {\r\n      path: '/terms',\r\n      name: 'Terms',\r\n      component: Terms,\r\n      props: true,\r\n      meta: {\r\n        title: 'Terms and Conditions | Viva Learning',\r\n        requiresAuth: false\r\n      },\r\n    },\r\n    {\r\n      path: '/privacy',\r\n      name: 'Privacy',\r\n      component: Privacy,\r\n      props: true,\r\n      meta: {\r\n        title: 'Privacy | Viva Learning',\r\n        requiresAuth: false\r\n      }\r\n    },\r\n    {\r\n      path: '/done/:c',\r\n      name: 'Done',\r\n      component: Done,\r\n      props: true,\r\n      meta: {\r\n        title: 'Free Offer | Viva Learning',\r\n        requiresAuth: false\r\n      },\r\n    },\r\n    {   // 2nd to last\r\n      path: '/home/:c',\r\n      name: 'Home',\r\n      component: Home,\r\n      props: true,\r\n      meta: {\r\n        title: 'Free Offer | Viva Learning',\r\n        requiresAuth: false\r\n      },\r\n      alias: '/:c'\r\n    },\r\n    {  // 404 page - last\r\n      path: '*',\r\n      name: 'NotFound',\r\n      component: NotFound,\r\n      props: true,\r\n      meta: {\r\n        title: '404 | Viva Learning',\r\n        requiresAuth: false\r\n      },\r\n      alias: '/404'\r\n    }\r\n  ]\r\n})\r\n\r\nrouter.beforeEach((to, from, next) => {\r\n  console.log(`router to`)\r\n  console.log(to)\r\n  if(to.meta.requiresAuth) {\r\n    console.log(`router1a`)\r\n    if (!isLoggedIn()) {\r\n        // next({ name: 'Login' });\r\n        // this.to('/login')\r\n        next( {path: '/login', query: {rurl: to.fullPath}})\r\n      }\r\n      else {\r\n        next();\r\n      }\r\n  }\r\n  // console.log(`router1b`)\r\n  next();\r\n\r\n  function isLoggedIn() {   // internal function\r\n    console.log(`isLoggedIn internal...`)\r\n    // console.log(`ls: ${localStorage.getItem('id_token')}`)\r\n    return (localStorage.getItem('id_token') && true);\r\n  }\r\n})\r\n\r\nconst DEFAULT_TITLE = 'DEFAULT VIVA TITLE'\r\n\r\n// https://stackoverflow.com/questions/51639850/how-to-change-page-titles-when-using-vue-router\r\nrouter.afterEach((to, from) => {\r\n  // Use next tick to handle router history correctly\r\n  // see: https://github.com/vuejs/vue-router/issues/914#issuecomment-384477609\r\n  Vue.nextTick(() => {\r\n      document.title = to.meta.title || DEFAULT_TITLE;\r\n  })\r\n})\r\n\r\nexport default router\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","'use strict'\r\n\r\n/* eslint-disable */\r\n\r\n// serve with hot reload at localhost:8080\r\n//#npm run dev\r\n// build for production with minification\r\n//#npm run build\r\n\r\n// The Vue build version to load with the `import` command\r\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\r\n\r\n// polyfill all `core-js` features:\r\nimport \"core-js\";\r\n// import 'babel-polyfill'\r\n// import '@babel/polyfill'\r\n// import 'mutationobserver-shim'\r\n\r\nimport Vue from 'vue'\r\nimport '@/plugins/bootstrap-vue'\r\nimport '@/plugins/globals'\r\nimport App from './App'\r\nimport router from './router'\r\nimport axios from 'axios'\r\nimport { BIconVolumeDown } from \"bootstrap-vue\";\r\nimport constants from \"@/config/constants\"\r\nimport utils from \"@/utils/utils\"\r\n\r\n// console.log(`defined in webpack.[dev,prod].conf.js?`)\r\nconsole.log(`process.env ${process.env}  __VERSION__  ${__VERSION__}  __BUILD__  ${__BUILD__}` )\r\n\r\n// import '@/plugins/bootstrap-vue'\r\n\r\n// https://bootstrap-vue.js.org/docs/\r\n// https://developer.okta.com/blog/2018/02/15/build-crud-app-vuejs-node\r\n/// import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'\r\n/// import 'bootstrap/dist/css/bootstrap.css'\r\n/// import 'bootstrap-vue/dist/bootstrap-vue.css'\r\n\r\n/// import { library } from '@fortawesome/fontawesome-svg-core'\r\n/// import { faUserSecret, faKey, faMask, faCat, faAngry, faBell } from '@fortawesome/free-solid-svg-icons'\r\n/// import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'\r\n\r\n/* eslint-disable no-new */\r\n\r\n/// Vue.use(BootstrapVue)\r\n// Optionally install the BootstrapVue icon components plugin\r\n/// Vue.use(IconsPlugin)\r\n\r\nVue.config.productionTip = false\r\n\r\n// https://v1.vuejs.org/guide/custom-filter.html\r\n// replace newline with <br>\r\nVue.filter('nl2br', function (value) {\r\n  // here `input` === `this.userInput`\r\n  return (value) ? value.replace(/\\r\\n/g,'<br>') : value\r\n})\r\n\r\n// Converts seconds to HH:MM:SS\r\nVue.filter('prettyDate', dt => utils.prettyDate(dt))\r\nVue.filter('prettyDateTime', dt => utils.prettyDateTime(dt))\r\nVue.filter('prettySeconds', seconds => utils.prettySeconds(seconds))\r\nVue.filter('prettyNumber', num => utils.prettyNumber(num))\r\nVue.filter('prettyCEType', typeId => {\r\n  // Tried to put this into utils.  Turbulence.\r\n  // console.log(`prettyCEType  typeId ${typeId} home ${typeId == constants.CE_TYPEID.HOME_STUDY} live ${constants.CE_TYPEID.PARTICIPATORY}`)\r\n  let aout = 'undefined'\r\n  if (typeId == constants.CE_TYPEID.HOMESTUDY) {\r\n      aout = 'Self-study'\r\n  }\r\n  else if (typeId == constants.CE_TYPEID.PARTICIPATORY) {\r\n      aout = 'Live, Interactive'\r\n  }\r\n  return aout\r\n})\r\n\r\n// TBD add to config\r\n// https://github.com/axios/axios\r\n// https://blog.jscrambler.com/build-a-task-management-app-using-vue-js-and-a-node-js-backend/\r\n\r\nconst hostMap = {\r\n  defaultRunMode: 'prod',\r\n  sites: {\r\n    local: {\r\n      hosts: ['localhost'],\r\n      api: 'http://localhost:3000'\r\n    },\r\n    test: {\r\n      hosts: ['ebook.viva9.us','forms.viva9.us','viva-ebook-test.azurewebsites.net'],\r\n      api: 'https://appapi.vivalearning.viva9.us'\r\n      // api: 'https://vp-mobile-api-test.azurewebsites.net'\r\n    },\r\n    prod: {\r\n      hosts: ['ebook.vivalearning.com','forms.vivalearning.com','viva-ebook.azurewebsites.net'],\r\n      api: 'https://appapi.vivalearning.com'\r\n      // api: 'https://vp-mobile-api.azurewebsites.net'\r\n    }\r\n}}\r\n\r\nconst RUN_MODE_FORCED = ''  // set to local, test, prod to force backend choice\r\nconsole.log(Object.keys(hostMap.sites))\r\nlet runMode = utils.getRunMode(location.host, hostMap, RUN_MODE_FORCED)\r\n\r\n// let runMode = 'prod'\r\nlet baseUrl = utils.getApiBaseUrl(runMode, hostMap)\r\nconsole.log(`runMode: ${runMode}  baseUrl: ${baseUrl}`)\r\naxios.defaults.baseURL = baseUrl\r\n// if (runMode == 'local') {\r\n//   axios.defaults.baseURL = 'http://localhost:3030'\r\n// }\r\n// else if (runMode == 'test') {\r\n//   axios.defaults.baseURL = 'https://vp-mobile-api-test.azurewebsites.net'\r\n// }\r\n// else {  // default production\r\n//   axios.defaults.baseURL = 'https://vp-mobile-api.azurewebsites.net'\r\n// }\r\n\r\n// https://github.com/FortAwesome/vue-fontawesome\r\n// add the \"solid\" icons to the core library\r\n/// library.add(faUserSecret, faKey, faMask, faCat, faAngry, faBell)\r\n/// Vue.component('font-awesome-icon', FontAwesomeIcon)\r\n\r\n// Global Data\r\nvar data = {\r\n  token: '',  // student token students.hash\r\n  studentId: 0,\r\n  studentHash: '',\r\n  studentName: '',\r\n  studentEmail: '',\r\n  bookId: 0,\r\n  bookHash: '',\r\n  testval: 'TESTVAL',\r\n  version: __VERSION__,\r\n  build: __BUILD__,\r\n}\r\n\r\nvar vm = new Vue({\r\n  el: '#app',\r\n  data: data,\r\n  router,\r\n  components: { App },\r\n  template: '<App/>',\r\n  methods: {\r\n    getToken() {\r\n      return this.token || localStorage.getItem('id_token') || ''\r\n    },\r\n    setToken(token) {\r\n      this.token = token\r\n      localStorage.setItem('id_token', token)   // used by router(temporarily) and to provide persistence\r\n    },\r\n    getVersion() { return this.version },\r\n    getBuild() { return this.build },\r\n    getStudentHash () { return this.studentHash },\r\n    setStudentHash (hash) { this.studentHash = hash }\r\n  }\r\n})\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","module.exports = \"data:image/png;base64,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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/art/logo.png\n// module id = li2B\n// module chunks = 1","/* eslint-disable */\r\n\r\n'use strict'\r\n\r\n/* Escape newlines with <br> - also a filter*/\r\nfunction nl2br(val) {\r\n    let aout = (val) ? val.replace(/\\r\\n/gi, '<br>') : ''\r\n    return aout;\r\n}\r\n\r\n// Date object\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\r\n\r\n// The \"pretty\" functions are used to format date values for display.\r\n// Returns blank if invalid data.  Coding originally checked for\r\n// specific data validity, but seemed quicker to wrap in try blocks\r\n// and bail on any errors.\r\nfunction prettyDateTime(dateStr) {\r\n    let aout = ''\r\n    try {\r\n        let d = new Date(dateStr)\r\n        aout = `${prettyDate(d)} at ${prettyTime(d)} (local)`\r\n    }\r\n    catch(e) {}\r\n    return aout\r\n}\r\n\r\nfunction prettyDate(arg) {\r\n    let aout = ''\r\n    try {\r\n        let d = (isString(arg)) ? new Date(arg) : arg\r\n        aout = `${getDayShort(d.getDay())} ${getMonthShort(d.getMonth())} ${d.getDate()}, ${d.getFullYear()}`\r\n    } catch(e) {}\r\n    return aout\r\n}\r\n\r\nfunction prettyTime(arg) {\r\n    let aout = ''\r\n    try {\r\n        let d = (isString(arg)) ? new Date(arg) : arg\r\n        let hr = parseInt(d.getHours())\r\n        let mn = ('0'+d.getMinutes()).slice(-2)\r\n        aout = `${(hr > 12) ? hr-12: hr}:${mn} ${(hr >= 12) ? 'PM' : 'AM'}`\r\n    }\r\n    catch(e) {}\r\n    return aout\r\n}\r\n\r\nfunction getDayShort(day) {\r\n    let days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\r\n    return days[day]\r\n}\r\n\r\nfunction getMonthShort(month) {\r\n    let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']\r\n    return months[month]\r\n}\r\n\r\nfunction isString(arg) {\r\n    return (typeof arg === 'string')\r\n}\r\n\r\nconst SECONDS_IN_MINUTE = 60\r\nconst MINUTES_IN_HOUR = 60\r\nconst SECONDS_IN_HOUR = 3600  // 3600 seconds per hour\r\nconst SECONDS_IN_DAY = 24*SECONDS_IN_HOUR\r\n\r\nfunction prettySeconds(durationSeconds) {\r\n    // console.log('prettySeconds')\r\n    let aout = \"00:00:00\"\r\n    try {\r\n        let secs = parseInt(durationSeconds)\r\n        let hours = Math.floor(secs/SECONDS_IN_HOUR)  \r\n        let minutes = Math.floor( (secs % SECONDS_IN_HOUR)/MINUTES_IN_HOUR )\r\n        let seconds = (secs % SECONDS_IN_HOUR) % SECONDS_IN_MINUTE\r\n        aout = (hours > 0) \r\n            ? `${twoDigits(hours)}:${twoDigits(minutes)}:${twoDigits(seconds)}`\r\n            : `${twoDigits(minutes)}:${twoDigits(seconds)}`\r\n    }\r\n    catch (e) { console.log(e) }\r\n    return aout\r\n}\r\n\r\n/* Converts 1234 to 1,234 in locale-sensitive way. */\r\nfunction prettyNumber(num) {\r\n    let aout = 0\r\n    try {\r\n        aout = num.toLocaleString()\r\n    }\r\n    catch (e) { console.log(e) }\r\n    return aout\r\n}\r\n\r\nfunction prettyCountdown(deltaSeconds) {\r\n    let aout = `ERROR: ${deltaSeconds}`\r\n    try {\r\n        let secs = parseInt(deltaSeconds)\r\n        if (secs <= 0) {\r\n            aout = 'Webinar in Progress...'\r\n        }\r\n        else {\r\n            // console.log(`prettyCountdown secs ${secs}`)\r\n            let days = Math.floor(secs/SECONDS_IN_DAY)  // 24*3600 seconds in day\r\n            let hours = Math.floor((secs-(days*SECONDS_IN_DAY))/SECONDS_IN_HOUR)  // 3600 seconds per hour\r\n            let minutes = Math.floor( (secs % SECONDS_IN_HOUR)/SECONDS_IN_MINUTE )\r\n            let seconds = (secs % SECONDS_IN_HOUR) % SECONDS_IN_MINUTE\r\n            aout = ''\r\n            if (days > 0) {\r\n                aout = aout.concat(`${days} Day${plural(days,'s')}, `)\r\n            }\r\n            if (hours > 0) {\r\n                aout = aout.concat(`${hours} Hour${plural(hours,'s')}`)\r\n            }\r\n            if (aout !== '' || minutes > 0) {\r\n                if (hours > 0) aout = aout.concat(' and ')\r\n                aout = aout.concat(`${minutes} Minute${plural(minutes,'s')}`)\r\n            }\r\n            // if (aout === '' && seconds > 0) {\r\n            if (days === 0 && hours === 0 && minutes < 5 && seconds > 0) {\r\n                if (minutes > 0) aout = aout.concat(' and ')\r\n                aout = aout.concat(`${seconds} Second${plural(seconds,'s')}`)\r\n            }\r\n            if (aout === '') {\r\n                aout = 'Webinar in Progress...'\r\n            }\r\n        }\r\n    }\r\n    catch (e) { console.log(e) }\r\n    // console.log(`prettyCountdown: ${aout}`)\r\n    return aout\r\n}\r\n\r\n// Given integer val returns 2 digit string.  Useful for HH:MM:SS\r\nfunction twoDigits(val) {\r\n    return ('00'+val.toString()).slice(-2)\r\n}\r\n\r\n// Returns suffix if integer val is not equal to 1.\r\nfunction plural(val, suffix) {\r\n    return (val === 1) ? '' : suffix\r\n}\r\n\r\n// Extracts youtube code from these templates:\r\n// https://www.youtube.com/watch?v=SR4Eec9F89M&list=RDmg7netw1JuM\r\n// https://youtu.be/SR4Eec9F89M?list=RDmg7netw1JuM\r\n// Extracts code:  SR4Eec9F89M\r\nfunction getYoutubeCode( url ) {\r\n    var arr = url.match(/(?:https?:\\/{2})?(?:w{3}\\.)?youtu(?:be)?\\.(?:com|be)(?:\\/watch\\?v=|\\/)([^\\s&]+)/);\r\n    var code = arr[1];\r\n    // console.log( `getYoutubeCode: ${code}`);\r\n    return code;\r\n}\r\n\r\n// Builds YouTube Url from code.\r\n// Suitable for b-embed\r\nfunction getYoutubeUrl( code, autoplay ) {\r\n    var url = `https://www.youtube.com/embed/${code}?rel=0`\r\n    url += (autoplay) ? '&autoplay=1' : ''\r\n    // console.log( `getYoutubeUrl: ${url}`);\r\n    return url;\r\n}\r\n\r\n/* Parses val, returns defaultVal if val cannot be parsed. */\r\nfunction safeParseInt(val, defaultVal) {\r\n    const parsed = parseInt(val)\r\n    let aout = ((defaultVal) ? defaultVal : 0)\r\n    if (!isNaN(parsed)) { aout = parsed }\r\n    return aout;\r\n}\r\n\r\n// Processes a search string for safety.\r\nconst MAX_SEARCH_LENGTH = 30\r\nfunction safeSearch(q) {\r\n    let aout = ''\r\n    if (isString(q) && q.length > 0) {\r\n        q = q.replace(\"'\",\"\")        \r\n        if (q.length > 2) {\r\n            aout = q.slice(0,MAX_SEARCH_LENGTH)\r\n        }\r\n        else {\r\n            // safe 2 letter words.\r\n            let arr = ['3m']\r\n            if (arr.includes(q.toLowerCase())) {\r\n                aout = q\r\n            }\r\n        }\r\n    }\r\n    return aout\r\n}\r\n\r\n// returns local, test, prod\r\n// forced optional setting overrides hostVal (created using location.host)\r\n// hostVal may have port number; eg domain:port, localhost:8080\r\nfunction getRunMode(hostVal, hostMap, forcedMode) {\r\n    let aout = hostMap.defaultRunMode\r\n    if (forcedMode && forcedMode.length !== 0) {\r\n        aout = forcedMode  //\r\n    }\r\n    else if (hostVal && hostVal.length !== 0) {\r\n        let host = hostVal.split(':')[0].toLowerCase()\r\n        // Wanted to use Object.keys(hostMap.sites) but got error.\r\n        // In array put prod first for faster production search.\r\n        for(let siteName of ['prod','test','local'] ) {\r\n            if (hostMap.sites[siteName].hosts.includes(host)) {\r\n                aout = siteName\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return aout\r\n}\r\n\r\n// uses runMode to extract baseUrl from hostMap\r\nfunction getApiBaseUrl(runModeArg, hostMap) {\r\n    let runMode = runModeArg || hostMap.defaultRunMode\r\n    let baseUrl = hostMap.sites[runMode].api\r\n    return baseUrl\r\n}\r\n\r\n/* Define module */\r\nlet utils = {\r\n    nl2br: nl2br,\r\n    prettyDateTime: prettyDateTime,\r\n    prettyDate: prettyDate,\r\n    prettyTime: prettyTime,\r\n    prettySeconds: prettySeconds,\r\n    prettyNumber: prettyNumber,\r\n    prettyCountdown: prettyCountdown,\r\n    isString: isString,\r\n    getYoutubeCode: getYoutubeCode,\r\n    getYoutubeUrl: getYoutubeUrl,\r\n    safeParseInt: safeParseInt,\r\n    safeSearch: safeSearch,\r\n    getRunMode: getRunMode,\r\n    getApiBaseUrl: getApiBaseUrl    \r\n}\r\n\r\nmodule.exports = utils\n\n\n// WEBPACK FOOTER //\n// ./src/utils/utils.js","'use strict'\r\n/* eslint-disable */\r\n\r\nconst NUM_EVAL_QUESTIONS = 10\t// count of required questions.\r\nconst EXAM_MIN_SCORE_TO_PASS = 80  // min score to pass exam\r\n\r\n// Constants used in logEvent()\r\nconst VIVA_EVENT_LOGIN = 1\r\nconst VIVA_EVENT_LOGOUT = 2\r\nconst VIVA_EVENT_VIEW_CLASS = 3\r\nconst VIVA_EVENT_EVALUATION = 4\r\nconst VIVA_EVENT_FAIL_EXAM = 5\r\nconst VIVA_EVENT_PASS_EXAM = 6\r\nconst VIVA_EVENT_VIEW_MOVIE = 19\r\nconst VIVA_EVENT_VIEW_PODCAST = 20\r\n\r\nconst VPAD_LOGIN = 1\r\nconst VPAD_TOP = 2\r\nconst VPAD_SLIDER = 3\t\t// Old home page slides\r\nconst VPAD_HOMESLIDE = 4  \t// New home page slider.\r\nconst VPAD_RIGHT = 5\r\nconst VPAD_LEFT = 6\t\t\t// Left side banner ad.\r\nconst VPAD_CONTENT_TOP = 7\r\nconst VPAD_CONTENT_LIST1 = 8\t// Pos 1 of 4\r\nconst VPAD_CAT_TOP = 9\r\nconst VPAD_CAT_LIST1 = 10\t\t// see 2,3,4 below\r\nconst VPAD_TRENDING = 11\r\nconst VPAD_CE = 12\t\t\t\t// Uses classes.isVpFeatured\r\nconst VPAD_TIP = 13\t\t\t    // Uses tips.isVpFeatured\r\nconst VPAD_PRODUCT = 14\t\t\t// Uses classes.isVpFeatured (tutorials)\r\nconst VPAD_PROMOTION = 15\r\nconst VPAD_NEW_PRODUCT = 16\t\t// Used for uploading photo.\r\nconst VPAD_PRESS = 17\r\nconst VPAD_ACTIVITY = 18\t\t// Ad on user activity pages.\r\nconst VPAD_CAT_ALT_TOP = 19\t\t// Alternate small banner ad on classroom page.\r\nconst VPAD_CAT_ALT_LIST = 20\t// Alternate small banner ad on classroom page.\r\nconst VPAD_CESPOTLIGHT = 21\t\t// Left side on home page. Uses classes.isCeSpotlight\r\nconst VPAD_EXAMBLURBLINK = 22\t// Click tracking for exam blurb links\r\nconst VPAD_PODCAST_PROMOTION = 23\t// Click tracking for Podcast Special Offers\r\nconst VPAD_EXAM = 24\t\t\t// Click tracking for exam ads\r\nconst VPAD_EXAMEMAIL = 25\t\t// Tracking for exam emails.\r\nconst VPAD_LEFTCONTENT = 26\t\t// Tracking for left side content\r\nconst VPAD_CONTENT_LIST2 = 27\t// Pos 2 of 4\r\nconst VPAD_CONTENT_LIST3 = 28\t// Pos 3 of 4\r\nconst VPAD_CONTENT_LIST4 = 29\t// Pos 4 of 4\r\nconst VPAD_CAT_LIST2 = 30\t\t// see 1 above\r\nconst VPAD_CAT_LIST3 = 31\r\nconst VPAD_CAT_LIST4 = 32\r\n\r\nconst constants = {\r\n    CLASS_TYPE: {\r\n        UNDEFINED: 0,\r\n        PDF: 10,\r\n        LIVE: 20,\r\n        ARCHIVE: 30,\r\n        PRODUCED: 40,\t\t    // regular flash class and produced live classes\r\n        PRODUCED_ARCHIVE: 50,\t// produced classes from live classes (old style)\r\n        MOVIE: 55,\t\t        // WMV, MP3 or MOV\r\n        LUNCHLEARN: 60,\r\n        PRODUCED_PLAYBACK: 70,\t// playback classes from live classes (kerman style)\r\n        SLIDESHOW: 80,\t\t\t//  TBD\r\n        SEMINAR: 90\t\t\t    // Edge Endo Seminar - live CE\r\n    },\r\n    CE_TYPEID: {\r\n        NONCE: 0,            // Placeholder for NON-CE tutorials\r\n        HOMESTUDY: 1,       // Self-Study\r\n        PARTICIPATORY: 2    // Live Interactive\r\n    },\r\n    VP_AD_EVENTID: {\r\n        VIEW: 1,    // View of VP Ad\r\n        CLICK: 2    // Click of VP Ad\r\n    },\r\n    VP_MEDIATYPE: {\r\n        NONE: 0,\r\n        PDF: 1,\r\n        YOUTUBE: 2,\r\n        URL: 3\r\n    }\r\n}\r\n\r\nmodule.exports = constants\n\n\n// WEBPACK FOOTER //\n// ./src/config/constants.js"],"sourceRoot":""}