diff --git a/.circleci/config.yml b/.circleci/config.yml index 06714db..7c60177 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,29 +25,6 @@ install_save_cache: &install_save_cache jobs: - test: - <<: *vm_settings - steps: - - checkout - - # Install dependencies - - restore_cache: *install_restore_cache - - run: *install_run - - save_cache: *install_save_cache - - - run: - name: Run tests - # Install libgconf, needed by Cypress' Electron, then run tests - command: sudo apt-get install libgconf-2-4 && yarn test:ci - - # Store test artifacts - - store_artifacts: - path: tests/unit/coverage - - store_artifacts: - path: tests/e2e/videos - - store_artifacts: - path: tests/e2e/screenshots - build: <<: *vm_settings steps: @@ -66,31 +43,35 @@ jobs: - store_artifacts: path: dist - # deploy: - # <<: *vm_settings - # steps: - # # Install dependencies - # - restore_cache: *install_restore_cache - # - run: *install_run - # - save_cache: *install_save_cache - - # # Build the app for production - # - run: yarn build - - # ADD YOUR DEPLOYMENT PROCESS HERE - # https://circleci.com/docs/2.0/deployment-integrations/ + deploy_develop: + <<: *vm_settings + steps: + - run: ./node_modules/.bin/firebase use develop --token $FIREBASE_TOKEN + - run: ./node_modules/.bin/firebase deploy --token $FIREBASE_TOKEN + + deploy_master: + <<: *vm_settings + steps: + - run: ./node_modules/.bin/firebase use default --token $FIREBASE_TOKEN + - run: ./node_modules/.bin/firebase deploy --token $FIREBASE_TOKEN workflows: version: 2 - test_and_deploy: + deploy_develop: + jobs: + - build + - deploy_develop: + requires: + - build + filters: + branches: + only: develop + deploy_master: jobs: - - test - build - # - deploy: - # # Only deploy if tests pass - # requires: - # - test - # # Only deploy the master branch - # filters: - # branches: - # only: master + - deploy_master: + requires: + - build + filters: + branches: + only: master diff --git a/.eslintrc.js b/.eslintrc.js index 00f1ac8..8b4a2db 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,6 +21,10 @@ module.exports = { ? ['error', { allow: ['warn', 'error'] }] : 'off', 'prettier/prettier': 'error', + 'vue/multiline-html-element-content-newline': 'error', + 'vue/singleline-html-element-content-newline': ['error', { ignores: ['v-icon']}], + 'vue/no-spaces-around-equal-signs-in-attribute': 'error', + 'vue/script-indent': ['error', 2, { baseIndent: 0 }], 'vue/max-attributes-per-line': [ 2, { diff --git a/.gitignore b/.gitignore index 11f293a..dc2ce74 100644 --- a/.gitignore +++ b/.gitignore @@ -28,5 +28,7 @@ yarn-error.log* *.njsproj *.sln .vscode/* +.firebase lighthouse/ +jsconfig.json \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a95cda0..0000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: node_js -node_js: - - "10.8.0" -cache: yarn -branches: - only: - - develop -install: - - npm install -g firebase-tools - - yarn - -script: - - yarn build -after_success: -- firebase use --token ${FIREBASE_TOKEN} -- firebase use --add ${PROJECT_ID} -- firebase deploy --non-interactive --token "${FIREBASE_TOKEN}" \ No newline at end of file diff --git a/README.md b/README.md index 434d1e4..d2d71a0 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # GDG Bali Website + +[![CircleCI](https://circleci.com/gh/gdg-bali/webapp.svg?style=svg)](https://circleci.com/gh/gdg-bali/webapp) diff --git a/_templates/new/view/view.ejs.t b/_templates/new/view/view.ejs.t index 72ba5fa..d0651fc 100644 --- a/_templates/new/view/view.ejs.t +++ b/_templates/new/view/view.ejs.t @@ -8,7 +8,7 @@ to: "src/router/views/<%= h.inflection.dasherize(name) %>.vue" import Layout from '@layouts/main' export default { - page: { + metaInfo: { title: '<%= importName %>', meta: [{ name: 'description', content: '<%= importName %>' }], }, diff --git a/aliases.config.js b/aliases.config.js index 5a83b3c..141eb87 100644 --- a/aliases.config.js +++ b/aliases.config.js @@ -1,10 +1,9 @@ const path = require('path'); - -function resolveSrc(_path) { - return path.join(__dirname, _path); -} +const fs = require('fs'); +const prettier = require('prettier'); const aliases = { + '@': '.', '@src': 'src', '@router': 'src/router', '@views': 'src/router/views', @@ -14,15 +13,59 @@ const aliases = { '@utils': 'src/utils', '@state': 'src/state', '@design': 'src/design/index.scss', + '@api': 'src/api', }; module.exports = { webpack: {}, jest: {}, + jsconfig: {}, }; for (const alias in aliases) { - module.exports.webpack[alias] = resolveSrc(aliases[alias]); - module.exports.jest['^' + alias + '/(.*)$'] = - '/' + aliases[alias] + '/$1'; + const aliasTo = aliases[alias]; + module.exports.webpack[alias] = resolveSrc(aliasTo); + module.exports.jest['^' + alias + '/(.*)$'] = '/' + aliasTo + '/$1'; + module.exports.jsconfig[alias + '/*'] = [aliasTo + '/*']; + module.exports.jsconfig[alias] = aliasTo.includes('/index.') + ? [aliasTo] + : [ + aliasTo + '/index.js', + aliasTo + '/index.json', + aliasTo + '/index.vue', + aliasTo + '/index.scss', + aliasTo + '/index.css', + ]; +} + +const jsconfigTemplate = require('./jsconfig.template') || {}; +const jsconfigPath = path.resolve(__dirname, 'jsconfig.json'); + +fs.writeFile( + jsconfigPath, + prettier.format( + JSON.stringify({ + ...jsconfigTemplate, + compilerOptions: { + ...(jsconfigTemplate.compilerOptions || {}), + paths: module.exports.jsconfig, + }, + }), + { + ...require('./.prettierrc'), + parser: 'json', + } + ), + error => { + if (error) { + console.error( + 'Error while creating jsconfig.json from aliases.config.js.' + ); + throw error; + } + } +); + +function resolveSrc(_path) { + return path.join(__dirname, _path); } diff --git a/dev/service-worker.js b/dev/service-worker.js index 6a5f137..626c1c9 100644 --- a/dev/service-worker.js +++ b/dev/service-worker.js @@ -4,6 +4,19 @@ workbox.precaching.precacheAndRoute(self.__precacheManifest || []); workbox.routing.registerNavigationRoute('/index.html'); +workbox.routing.registerRoute( + /.*\.(?:png|gif|jpg|jpeg|svg|webp)((\?.*)$|$)/, + workbox.strategies.staleWhileRevalidate({ + cacheName: 'images', + plugins: [ + new workbox.expiration.Plugin({ + maxEntries: 60, + maxAgeSeconds: 30 * 24 * 60 * 60, // 30 Days + }), + ], + }) +); + self.addEventListener('message', event => { if (!event.data) return; diff --git a/jest.config.js b/jest.config.js index 449a79c..1613a70 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,8 +1,8 @@ -const _ = require('lodash') +const _ = require('lodash'); // Use a random port number for the mock API by default, // to support multiple instances of Jest running // simultaneously, like during pre-commit lint. -process.env.MOCK_API_PORT = process.env.MOCK_API_PORT || _.random(9000, 9999) +process.env.MOCK_API_PORT = process.env.MOCK_API_PORT || _.random(9000, 9999); module.exports = { setupFiles: ['/tests/unit/setup'], @@ -15,7 +15,13 @@ module.exports = { '^.+\\.vue$': 'vue-jest', '^.+\\.js$': 'babel-jest', }, - moduleNameMapper: require('./aliases.config').jest, + moduleNameMapper: { + // Transform any static assets to empty strings + '\\.(jpe?g|png|gif|webp|svg|mp4|webm|ogg|mp3|wav|flac|aac|woff2?|eot|ttf|otf)$': + '/tests/unit/fixtures/empty-string.js', + '.styl(|us)$': '/tests/unit/__mocks__/styleMock.js', + ...require('./aliases.config').jest, + }, snapshotSerializers: ['jest-serializer-vue'], coverageDirectory: '/tests/unit/coverage', collectCoverageFrom: [ @@ -41,4 +47,4 @@ module.exports = { experimentalCSSCompile: false, }, }, -} +}; diff --git a/jsconfig.template.js b/jsconfig.template.js new file mode 100644 index 0000000..ba474ce --- /dev/null +++ b/jsconfig.template.js @@ -0,0 +1,14 @@ +// This is a template for a jsconfig.json file which will be +// generated when starting the dev server or a build. +module.exports = { + baseUrl: '.', + include: ['src/**/*', 'tests/**/*'], + compilerOptions: { + baseUrl: '.', + target: 'es6', + module: 'es6', + // ... + // `paths` will be automatically generated using aliases.config.js + // ... + }, +} diff --git a/package.json b/package.json index 2de05e8..66303f4 100644 --- a/package.json +++ b/package.json @@ -4,86 +4,98 @@ "private": true, "scripts": { "serve": "firebase serve", - "build:modern": "vue-cli-service build --modern", "build": "vue-cli-service build", "test": "yarn unit && yarn e2e", "e2e": "vue-cli-service test:e2e --headless", "lint": "eslint --ext .js,.vue --fix . && stylelint --fix \"src/**/*.vue\" \"src/**/*.scss\" && markdownlint docs/*.md *.md && prettier --list-different --write \"**/*.{js,json,css,scss,vue,md}\"", + "build:ci": "yarn build --report", + "analyze": "yarn build:ci && open dist/report.html", + "build:modern": "vue-cli-service build --modern", "dev": "vue-cli-service serve --fix", - "unit": "vue-cli-service test:unit \\.unit\\.js$", "dev:e2e": "vue-cli-service test:e2e --mode=development", - "build:ci": "yarn build --report", "docs": "vuepress dev", - "test:ci": "yarn lint && yarn unit --coverage --ci && yarn e2e", "new": "hygen new", - "unit:watch": "yarn unit --watch --notify --notifyMode change", + "perf": "lighthouse --output-path=./lighthouse/report.html --view http://localhost:5000/", "perf:dev": "lighthouse --output-path=./lighthouse/report-dev.html --view http://localhost:5000/", - "perf:staging": "lighthouse --output-path=./lighthouse/report-staging.html --view https://dev-gdg-bali.firebaseapp.com/", "perf:prod": "lighthouse --output-path=./lighthouse/report-production.html --view https://gdgbali.com/", - "perf": "lighthouse --output-path=./lighthouse/report.html --view http://localhost:5000/" + "perf:staging": "lighthouse --output-path=./lighthouse/report-staging.html --view https://dev-gdg-bali.firebaseapp.com/", + "test:ci": "yarn lint && yarn unit --coverage --ci && yarn e2e", + "unit": "vue-cli-service test:unit", + "unit:watch": "yarn unit --watch --notify --notifyMode change" }, "dependencies": { + "@casl/ability": "^2.5.0", + "@casl/vue": "^0.4.3", "axios": "0.18.0", - "lazysizes": "^4.1.1", + "date-fns": "^1.29.0", + "idb": "^2.1.3", "lodash": "4.17.10", "nprogress": "0.2.0", "register-service-worker": "^1.5.2", "vue": "^2.5.17", - "vue-i18n": "^8.0.0", - "vue-meta": "^1.5.3", + "vue-analytics": "^5.16.0", + "vue-google-oauth2-gapi": "^1.0.11", + "vue-i18n": "^8.3.0", + "vue-meta": "^1.5.5", + "vue-qr": "^1.5.2", "vue-router": "3.0.1", - "vuetify": "^1.2.1", + "vue-tiny-slider": "^0.1.30", + "vuelidate": "^0.7.4", + "vuetify": "^1.3.5", "vuex": "3.0.1" }, "devDependencies": { - "@babel/core": "^7.0.0", + "@babel/core": "^7.1.0", "@babel/polyfill": "^7.0.0", - "@vue/cli-plugin-babel": "^3.0.x", - "@vue/cli-plugin-e2e-cypress": "^3.0.x", - "@vue/cli-plugin-eslint": "^3.0.x", - "@vue/cli-plugin-pwa": "^3.0.x", - "@vue/cli-plugin-unit-jest": "^3.0.x", - "@vue/cli-service": "^3.0.x", - "@vue/eslint-config-prettier": "^3.0.x", - "@vue/eslint-config-standard": "^3.0.x", - "@vue/test-utils": "^1.0.0-beta.17", - "babel-core": "^6.26.3", - "babel-jest": "^23.4.2", + "@vue/cli-plugin-babel": "^3.1.x", + "@vue/cli-plugin-e2e-cypress": "^3.1.x", + "@vue/cli-plugin-eslint": "^3.1.x", + "@vue/cli-plugin-pwa": "^3.1.x", + "@vue/cli-plugin-unit-jest": "^3.1.x", + "@vue/cli-service": "^3.1.x", + "@vue/eslint-config-prettier": "^4.0.x", + "@vue/eslint-config-standard": "^4.0.x", + "@vue/test-utils": "^1.0.0-beta.24", + "babel-core": "7.0.0-bridge.0", + "babel-jest": "23.4.x", "babel-loader": "^8.0.0", - "babel-plugin-transform-imports": "^1.4.1", + "babel-plugin-transform-imports": "^1.5.1", "cross-env": "5.2.x", + "eslint-plugin-vue": "5.0.0-beta.3", "express": "4.16.x", "html-critical-webpack-plugin": "^2.1.0", "hygen": "^1.6.x", "imagemin-lint-staged": "0.3.x", - "lighthouse": "^3.0.3", - "lint-staged": "7.2.x", - "markdownlint-cli": "^0.12.x", - "node-sass": "4.9.x", + "lighthouse": "^3.2.x", + "lint-staged": "8.0.x", + "markdownlint-cli": "^0.13.x", + "node-sass": "4.10.x", "sass-loader": "^7.1.x", - "stylelint": "^9.4.x", + "style-loader": "^0.23.1", + "stylelint": "^9.5.x", "stylelint-config-css-modules": "^1.3.x", - "stylelint-config-prettier": "^3.3.x", + "stylelint-config-prettier": "^4.0.x", "stylelint-config-recess-order": "2.0.x", "stylelint-config-standard": "18.2.x", "stylelint-scss": "^3.1.x", "stylus": "^0.54.5", - "stylus-loader": "^3.0.1", - "vue-cli-plugin-vuetify": "^0.1.6", + "stylus-loader": "^3.0.2", + "vue-cli-plugin-vuetify": "^0.4.5", "vue-jest": "2.6.x", - "vue-template-compiler": "^2.5.16", - "vuepress": "^0.14.x" + "vue-template-compiler": "^2.5.17", + "vuepress": "^0.14.x", + "vuetify-loader": "^1.0.6" }, "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ], - "gitHooks": { - "pre-commit": "cross-env PRE_COMMIT=true lint-staged" - }, "engines": { - "node": ">=8.9.0", + "node": ">=10.8.0", "yarn": ">=1.0.0" + }, + "gitHooks": { + "pre-commit": "cross-env PRE_COMMIT=true lint-staged" } } diff --git a/public/images/logo-black.svg b/public/images/logo-black.svg new file mode 100644 index 0000000..53918ea --- /dev/null +++ b/public/images/logo-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/logo.svg b/public/images/logo.svg index 53918ea..c6a5e0f 100644 --- a/public/images/logo.svg +++ b/public/images/logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/public/index.html b/public/index.html index b58e9e2..e9b7a90 100644 --- a/public/index.html +++ b/public/index.html @@ -6,10 +6,16 @@ - - - - + + + + + + <%= webpackConfig.name %> diff --git a/src/api/admin/requests.js b/src/api/admin/requests.js new file mode 100644 index 0000000..ed71bdb --- /dev/null +++ b/src/api/admin/requests.js @@ -0,0 +1,18 @@ +import api from '@api'; + +const postRequest = ({ endpoint, data }) => + api.post(endpoint, { + ...data, + }); + +const request = async ({ endpoint, options }) => { + try { + const { data } = options; + const response = await postRequest({ endpoint, data: { ...data } }); + return response.data; + } catch (error) { + return error; + } +}; + +export default request; diff --git a/src/api/apiRequest.js b/src/api/apiRequest.js new file mode 100644 index 0000000..ba1f163 --- /dev/null +++ b/src/api/apiRequest.js @@ -0,0 +1,41 @@ +// import db from '@api/database'; +import api from '@api'; + +export const registerEvent = async (fields, eventId) => { + const response = await api + .post('/attendees', { + attendee: { + registeredAt: new Date(), + eventId: eventId, + }, + user: { + ...fields, + }, + }) + .catch(err => ({ error: true, err })); + return response; +}; + +export const postSubmission = async ({ reasons, submissionType }) => { + const response = await api + .post('/submissions', { + reasons, + submissionType, + }) + .catch(err => ({ error: true, err })); + return response; +}; + +export const getUserProfile = async () => { + const response = await api + .get('/users/profile') + .catch(err => ({ error: true, err })); + return response; +}; + +export const validateUser = async () => { + const response = await api + .get('/users/validate') + .catch(err => ({ error: true, err })); + return response; +}; diff --git a/src/api/database.js b/src/api/database.js new file mode 100644 index 0000000..fa67555 --- /dev/null +++ b/src/api/database.js @@ -0,0 +1,47 @@ +import idb from 'idb'; + +const openDb = () => { + if (!navigator.serviceWorker) { + return Promise.resolve(); + } + + return idb.open('gdgbali', 1, upgradeDb => { + upgradeDb.createObjectStore('events', { keyPath: 'id' }); + upgradeDb.createObjectStore('eventSessions', { keyPath: 'slugUrl' }); + }); +}; + +const dbTx = async (objStore, txMode) => { + const db = await openDb(); + return db.transaction(objStore, txMode).objectStore(objStore); +}; + +const save = async (reqVerb, objStore, responseData) => { + const tx = await dbTx(objStore, 'readwrite'); + + switch (reqVerb) { + case 'GET_SINGLE': + tx.put(responseData); + break; + default: + responseData.forEach(item => { + tx.put(item); + }); + break; + } +}; + +const getFromLocal = async (reqVerb, objStore, id) => { + const tx = await dbTx(objStore, 'readonly'); + + if (reqVerb === 'GET_LIST') { + return tx.getAll(); + } + + return tx.get(id); +}; + +export default { + save, + getFromLocal, +}; diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..d8be710 --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,16 @@ +import axios from 'axios'; + +const apiUrl = () => `${apiRootUrl()}/api/v1`; + +export const apiRootUrl = () => { + switch (process.env.NODE_ENV) { + case 'production': + return 'https://gdg-bali.herokuapp.com'; + default: + return 'http://localhost:3007'; + } +}; + +export default axios.create({ + baseURL: apiUrl(), +}); diff --git a/src/app.vue b/src/app.vue index aba9f86..35b193c 100644 --- a/src/app.vue +++ b/src/app.vue @@ -4,22 +4,17 @@ Even when routes use the same component, treat them as distinct and create the component again. --> - - - - - - + + + + + diff --git a/src/components/AdminNavBar.vue b/src/components/AdminNavBar.vue new file mode 100644 index 0000000..a684236 --- /dev/null +++ b/src/components/AdminNavBar.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/Auth/AuthDialog.vue b/src/components/Auth/AuthDialog.vue new file mode 100644 index 0000000..b766883 --- /dev/null +++ b/src/components/Auth/AuthDialog.vue @@ -0,0 +1,39 @@ + + diff --git a/src/components/Auth/AuthMenu.vue b/src/components/Auth/AuthMenu.vue new file mode 100644 index 0000000..1a685b5 --- /dev/null +++ b/src/components/Auth/AuthMenu.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/components/Auth/GoogleSignIn.vue b/src/components/Auth/GoogleSignIn.vue new file mode 100644 index 0000000..16de32f --- /dev/null +++ b/src/components/Auth/GoogleSignIn.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/components/Auth/Providers.vue b/src/components/Auth/Providers.vue new file mode 100644 index 0000000..08528cb --- /dev/null +++ b/src/components/Auth/Providers.vue @@ -0,0 +1,14 @@ + + diff --git a/src/components/Base/_base-snackbar.vue b/src/components/Base/BaseSnackbar.vue similarity index 59% rename from src/components/Base/_base-snackbar.vue rename to src/components/Base/BaseSnackbar.vue index f7b3e8f..d18af56 100644 --- a/src/components/Base/_base-snackbar.vue +++ b/src/components/Base/BaseSnackbar.vue @@ -1,6 +1,6 @@ diff --git a/src/components/Base/_base-gdg-logo.vue b/src/components/Base/_base-gdg-logo.vue deleted file mode 100644 index 0453fba..0000000 --- a/src/components/Base/_base-gdg-logo.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - diff --git a/src/components/Base/_base-lazy-bg.vue b/src/components/Base/_base-lazy-bg.vue deleted file mode 100644 index 1f9ac29..0000000 --- a/src/components/Base/_base-lazy-bg.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/src/components/Events/CoverImg.vue b/src/components/Events/CoverImg.vue new file mode 100644 index 0000000..81580cd --- /dev/null +++ b/src/components/Events/CoverImg.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/components/Events/EventCard.vue b/src/components/Events/EventCard.vue new file mode 100644 index 0000000..1f0907c --- /dev/null +++ b/src/components/Events/EventCard.vue @@ -0,0 +1,69 @@ + + + + diff --git a/src/components/Events/EventCardDetails.vue b/src/components/Events/EventCardDetails.vue new file mode 100644 index 0000000..cbc476e --- /dev/null +++ b/src/components/Events/EventCardDetails.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/components/Events/EventDetails.vue b/src/components/Events/EventDetails.vue new file mode 100644 index 0000000..d0f510f --- /dev/null +++ b/src/components/Events/EventDetails.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/src/components/Events/EventsList.vue b/src/components/Events/EventsList.vue new file mode 100644 index 0000000..276f1fb --- /dev/null +++ b/src/components/Events/EventsList.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/components/Events/FabOrange.vue b/src/components/Events/FabOrange.vue new file mode 100644 index 0000000..0e778cf --- /dev/null +++ b/src/components/Events/FabOrange.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/Events/FutureEvents.vue b/src/components/Events/FutureEvents.vue deleted file mode 100644 index fcfcc61..0000000 --- a/src/components/Events/FutureEvents.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - diff --git a/src/components/Events/QrCode.vue b/src/components/Events/QrCode.vue new file mode 100644 index 0000000..6c9c2d2 --- /dev/null +++ b/src/components/Events/QrCode.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/components/Events/Register.vue b/src/components/Events/Register.vue new file mode 100644 index 0000000..b8f3f49 --- /dev/null +++ b/src/components/Events/Register.vue @@ -0,0 +1,230 @@ + + + + + + diff --git a/src/components/Events/Schedule.vue b/src/components/Events/Schedule.vue new file mode 100644 index 0000000..3174647 --- /dev/null +++ b/src/components/Events/Schedule.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/components/Events/Speakers.vue b/src/components/Events/Speakers.vue new file mode 100644 index 0000000..2e7cd0a --- /dev/null +++ b/src/components/Events/Speakers.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/components/Base/_base-footer.vue b/src/components/Footer.vue similarity index 52% rename from src/components/Base/_base-footer.vue rename to src/components/Footer.vue index 531e824..9a18ba2 100644 --- a/src/components/Base/_base-footer.vue +++ b/src/components/Footer.vue @@ -1,50 +1,37 @@ diff --git a/src/components/Submissions/Form.vue b/src/components/Submissions/Form.vue new file mode 100644 index 0000000..5642b36 --- /dev/null +++ b/src/components/Submissions/Form.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/components/Submissions/Speaker.vue b/src/components/Submissions/Speaker.vue new file mode 100644 index 0000000..236ded7 --- /dev/null +++ b/src/components/Submissions/Speaker.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/Submissions/Topic.vue b/src/components/Submissions/Topic.vue new file mode 100644 index 0000000..d44d445 --- /dev/null +++ b/src/components/Submissions/Topic.vue @@ -0,0 +1,42 @@ + + + + + + diff --git a/src/components/_globals.js b/src/components/_globals.js deleted file mode 100644 index 45b039e..0000000 --- a/src/components/_globals.js +++ /dev/null @@ -1,35 +0,0 @@ -// Globally register all base components for convenience, because they -// will be used very frequently. Components are registered using the -// PascalCased version of their file name. - -import Vue from 'vue'; -import upperFirst from 'lodash/upperFirst'; -import camelCase from 'lodash/camelCase'; - -// https://webpack.js.org/guides/dependency-management/#require-context -const requireComponent = require.context( - // Look for files in the current directory - './Base', - // Do not look in subdirectories - false, - // Only include "_base-" prefixed .vue files - /_base-[\w-]+\.vue$/ -); - -// For each matching file name... -requireComponent.keys().forEach(fileName => { - // Get the component config - const componentConfig = requireComponent(fileName); - // Get the PascalCase version of the component name - const componentName = upperFirst( - camelCase( - fileName - // Remove the "./_" from the beginning - .replace(/^\.\/_/, '') - // Remove the file extension from the end - .replace(/\.\w+$/, '') - ) - ); - // Globally register the component - Vue.component(componentName, componentConfig.default || componentConfig); -}); diff --git a/src/components/shared/ComingSoon.vue b/src/components/shared/ComingSoon.vue index 42b3e3b..f74b367 100644 --- a/src/components/shared/ComingSoon.vue +++ b/src/components/shared/ComingSoon.vue @@ -1,8 +1,12 @@