├── static ├── .gitkeep ├── favicon │ ├── favicon.ico │ ├── apple-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── ms-icon-70x70.png │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── apple-icon-precomposed.png │ ├── browserconfig.xml │ └── manifest.json └── timer.html ├── .eslintignore ├── config ├── prod.env.js ├── test.env.js ├── dev.env.js └── index.js ├── .firebaserc ├── docs ├── googleaee6aa66bb8d9a73.html ├── static │ ├── favicon │ │ ├── favicon.ico │ │ ├── apple-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── ms-icon-70x70.png │ │ ├── ms-icon-144x144.png │ │ ├── ms-icon-150x150.png │ │ ├── ms-icon-310x310.png │ │ ├── android-icon-36x36.png │ │ ├── android-icon-48x48.png │ │ ├── android-icon-72x72.png │ │ ├── android-icon-96x96.png │ │ ├── apple-icon-114x114.png │ │ ├── apple-icon-120x120.png │ │ ├── apple-icon-144x144.png │ │ ├── apple-icon-152x152.png │ │ ├── apple-icon-180x180.png │ │ ├── apple-icon-57x57.png │ │ ├── apple-icon-60x60.png │ │ ├── apple-icon-72x72.png │ │ ├── apple-icon-76x76.png │ │ ├── android-icon-144x144.png │ │ ├── android-icon-192x192.png │ │ ├── apple-icon-precomposed.png │ │ ├── browserconfig.xml │ │ └── manifest.json │ ├── img │ │ ├── full_map.1c5bbdc.jpg │ │ ├── hackntu-logo.90bac1a.png │ │ └── hacking_area_scaled.7d66c4a.png │ ├── fonts │ │ └── element-icons.b02bdc1.ttf │ ├── js │ │ ├── manifest.d5807afe22759a8597b1.js │ │ └── manifest.d5807afe22759a8597b1.js.map │ └── timer.html └── index.html ├── firebase.json ├── src ├── assets │ ├── loading.gif │ ├── full_map.jpg │ ├── hacking_area.png │ ├── hackntu-icon.png │ ├── hackntu-logo.png │ ├── facebook-logo.jpg │ ├── google-logo-bg.png │ ├── hacking_area_scaled.png │ ├── hackntu-logo-title.png │ └── hacking_area_scaled_old.png ├── appconfig_SAMPLE.js ├── style_config.sass ├── main.js ├── components │ ├── x-audio.vue │ ├── home │ │ ├── Home.vue │ │ ├── hackingmap │ │ │ ├── FullMapView.vue │ │ │ ├── MyPosts.vue │ │ │ ├── ListView.vue │ │ │ ├── PostSummary.vue │ │ │ ├── PostDetail.vue │ │ │ ├── MapView.vue │ │ │ └── Editor.vue │ │ ├── Announcement.vue │ │ ├── Schedule.vue │ │ └── HackingMap.vue │ ├── Intro.vue │ ├── templates │ │ ├── counter.vue │ │ ├── FirebaseDB.vue │ │ └── VueFire-todoApp.html │ ├── Sponsor.vue │ ├── LiveAwards.vue │ ├── MentorView.vue │ ├── Expo.vue │ ├── AskMentor.vue │ ├── AdminView.vue │ ├── banner │ │ ├── Banner.vue │ │ └── OAuthLogin.vue │ ├── Loading.vue │ └── Speaker.vue ├── service │ └── firebase.js ├── appconfig.js ├── router │ └── index.js └── App.vue ├── screenshots └── 20170609_map-view.png ├── test ├── unit │ ├── .eslintrc │ ├── specs │ │ └── Hello.spec.js │ ├── index.js │ └── karma.conf.js └── e2e │ ├── specs │ └── test.js │ ├── custom-assertions │ └── elementCount.js │ ├── runner.js │ └── nightwatch.conf.js ├── .editorconfig ├── .postcssrc.js ├── .gitignore ├── .babelrc ├── .eslintrc.js ├── .sass-lint.yml ├── .jsbeautifyrc ├── README.md ├── database.rules.json ├── index.html ├── package.json └── LICENSE /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "hacking-map" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /docs/googleaee6aa66bb8d9a73.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googleaee6aa66bb8d9a73.html -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "rules": "database.rules.json" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/assets/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/loading.gif -------------------------------------------------------------------------------- /src/assets/full_map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/full_map.jpg -------------------------------------------------------------------------------- /src/assets/hacking_area.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/hacking_area.png -------------------------------------------------------------------------------- /src/assets/hackntu-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/hackntu-icon.png -------------------------------------------------------------------------------- /src/assets/hackntu-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/hackntu-logo.png -------------------------------------------------------------------------------- /static/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/favicon.ico -------------------------------------------------------------------------------- /src/assets/facebook-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/facebook-logo.jpg -------------------------------------------------------------------------------- /src/assets/google-logo-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/google-logo-bg.png -------------------------------------------------------------------------------- /static/favicon/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon.png -------------------------------------------------------------------------------- /docs/static/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/favicon.ico -------------------------------------------------------------------------------- /static/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /static/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /static/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /static/favicon/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/ms-icon-70x70.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon.png -------------------------------------------------------------------------------- /screenshots/20170609_map-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/screenshots/20170609_map-view.png -------------------------------------------------------------------------------- /src/assets/hacking_area_scaled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/hacking_area_scaled.png -------------------------------------------------------------------------------- /src/assets/hackntu-logo-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/hackntu-logo-title.png -------------------------------------------------------------------------------- /static/favicon/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/ms-icon-144x144.png -------------------------------------------------------------------------------- /static/favicon/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/ms-icon-150x150.png -------------------------------------------------------------------------------- /static/favicon/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/ms-icon-310x310.png -------------------------------------------------------------------------------- /docs/static/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /docs/static/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /docs/static/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /docs/static/favicon/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/ms-icon-70x70.png -------------------------------------------------------------------------------- /docs/static/img/full_map.1c5bbdc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/img/full_map.1c5bbdc.jpg -------------------------------------------------------------------------------- /static/favicon/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/android-icon-36x36.png -------------------------------------------------------------------------------- /static/favicon/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/android-icon-48x48.png -------------------------------------------------------------------------------- /static/favicon/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/android-icon-72x72.png -------------------------------------------------------------------------------- /static/favicon/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/android-icon-96x96.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-114x114.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-120x120.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-144x144.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-152x152.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-180x180.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-57x57.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-60x60.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-72x72.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-76x76.png -------------------------------------------------------------------------------- /docs/static/favicon/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/ms-icon-144x144.png -------------------------------------------------------------------------------- /docs/static/favicon/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/ms-icon-150x150.png -------------------------------------------------------------------------------- /docs/static/favicon/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/ms-icon-310x310.png -------------------------------------------------------------------------------- /src/assets/hacking_area_scaled_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/src/assets/hacking_area_scaled_old.png -------------------------------------------------------------------------------- /static/favicon/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/android-icon-144x144.png -------------------------------------------------------------------------------- /static/favicon/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/android-icon-192x192.png -------------------------------------------------------------------------------- /docs/static/favicon/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/android-icon-36x36.png -------------------------------------------------------------------------------- /docs/static/favicon/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/android-icon-48x48.png -------------------------------------------------------------------------------- /docs/static/favicon/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/android-icon-72x72.png -------------------------------------------------------------------------------- /docs/static/favicon/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/android-icon-96x96.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-114x114.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-120x120.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-144x144.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-152x152.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-180x180.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-57x57.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-60x60.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-72x72.png -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-76x76.png -------------------------------------------------------------------------------- /docs/static/img/hackntu-logo.90bac1a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/img/hackntu-logo.90bac1a.png -------------------------------------------------------------------------------- /static/favicon/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/static/favicon/apple-icon-precomposed.png -------------------------------------------------------------------------------- /docs/static/favicon/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/android-icon-144x144.png -------------------------------------------------------------------------------- /docs/static/favicon/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/android-icon-192x192.png -------------------------------------------------------------------------------- /docs/static/fonts/element-icons.b02bdc1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/fonts/element-icons.b02bdc1.ttf -------------------------------------------------------------------------------- /docs/static/favicon/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/favicon/apple-icon-precomposed.png -------------------------------------------------------------------------------- /docs/static/img/hacking_area_scaled.7d66c4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HackNTU/HackingMap/HEAD/docs/static/img/hacking_area_scaled.7d66c4a.png -------------------------------------------------------------------------------- /test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /static/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /docs/static/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | // Credential for Firebase and Discord 2 | src/appconfig.jss 3 | 4 | // Add by choznerol 5 | deprecated/ 6 | 7 | // Default 8 | .DS_Store 9 | node_modules/ 10 | dist/ 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | test/unit/coverage 15 | test/e2e/reports 16 | selenium-debug.log 17 | 18 | note\.md 19 | -------------------------------------------------------------------------------- /test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from '@/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const Constructor = Vue.extend(Hello) 7 | const vm = new Constructor().$mount() 8 | expect(vm.$el.querySelector('.hello h1').textContent) 9 | .to.equal('Welcome to Your Vue.js App') 10 | }) 11 | }) 12 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": [ 7 | ["transform-runtime"], 8 | ["component", [{ 9 | "libraryName": "element-ui", 10 | "styleLibraryName": "theme-default" 11 | }]] 12 | ], 13 | "comments": false, 14 | "env": { 15 | "test": { 16 | "presets": ["env", "stage-2"], 17 | "plugins": [ "istanbul" ] 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/appconfig_SAMPLE.js: -------------------------------------------------------------------------------- 1 | const appconfig = { 2 | 'firebase_config': { 3 | apiKey: 'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO', 4 | authDomain: 'OOOOOOOOOOO.firebaseapp.com', 5 | databaseURL: 'https://OOOOOOOOOOO.firebaseio.com', 6 | projectId: 'OOOOOOOOOOO', 7 | storageBucket: 'OOOOOOOOOOO.appspot.com', 8 | messagingSenderId: 'OOOOOOOOOOOO' 9 | }, 10 | 'discord_config': { 11 | turnOn: false 12 | } 13 | } 14 | export default appconfig 15 | -------------------------------------------------------------------------------- /test/unit/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | Vue.config.productionTip = false 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /test/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // For authoring Nightwatch tests, see 2 | // http://nightwatchjs.org/guide#usage 3 | 4 | module.exports = { 5 | 'default e2e tests': function (browser) { 6 | // automatically uses dev Server port from /config.index.js 7 | // default: http://localhost:8080 8 | // see nightwatch.conf.js 9 | const devServer = browser.globals.devServerURL 10 | 11 | browser 12 | .url(devServer) 13 | .waitForElementVisible('#app', 5000) 14 | .assert.elementPresent('.hello') 15 | .assert.containsText('h1', 'Welcome to Your Vue.js App') 16 | .assert.elementCount('img', 1) 17 | .end() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/style_config.sass: -------------------------------------------------------------------------------- 1 | // banner 2 | $nav_bg_color: WhiteSmoke 3 | $nav_height: 48px 4 | 5 | // sponsor 6 | $footer_bg_color: WhiteSmoke 7 | $footer_height: 48px 8 | 9 | // container for map and list 10 | $hackingmap_bg_color: White 11 | 12 | // HackingMap (map view) 13 | $map_bg_color: white 14 | $toolbar_bg_color: White 15 | // $statue_proposal: #BADAF9 16 | $statue_proposal: RoyalBlue 17 | // $statue_recruit: #F9E8BC 18 | $statue_recruit: Orange 19 | // $statue_hacking: #F4FBBD 20 | $statue_hacking: Red 21 | // $statue_demo: #AAFECB 22 | $statue_demo: LimeGreen 23 | // $statue_giveup: #FFB9CE 24 | $statue_giveup: LightGrey 25 | 26 | // HackingMap (list view) 27 | $list_bg_color: white 28 | 29 | // Chat 30 | $chat_bg_color: Gainsboro 31 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // allow debugger during development 25 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import ElementUI from 'element-ui' 7 | import VueFire from 'vuefire' 8 | import 'element-ui/lib/theme-default/index.css' 9 | import './service/firebase' 10 | 11 | // vue-awesome icons 12 | import 'vue-awesome/icons/' 13 | import Icon from 'vue-awesome/components/Icon' 14 | 15 | Vue.use(ElementUI) 16 | Vue.use(VueFire) 17 | Vue.config.productionTip = false 18 | Vue.component('icon', Icon) 19 | 20 | /* eslint-disable no-new */ 21 | new Vue({ 22 | el: '#app', 23 | router, 24 | template: '', 25 | components: { App } 26 | }) 27 | -------------------------------------------------------------------------------- /static/favicon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /test/e2e/custom-assertions/elementCount.js: -------------------------------------------------------------------------------- 1 | // A custom Nightwatch assertion. 2 | // the name of the method is the filename. 3 | // can be used in tests like this: 4 | // 5 | // browser.assert.elementCount(selector, count) 6 | // 7 | // for how to write custom assertions see 8 | // http://nightwatchjs.org/guide#writing-custom-assertions 9 | exports.assertion = function (selector, count) { 10 | this.message = 'Testing if element <' + selector + '> has count: ' + count 11 | this.expected = count 12 | this.pass = function (val) { 13 | return val === this.expected 14 | } 15 | this.value = function (res) { 16 | return res.value 17 | } 18 | this.command = function (cb) { 19 | var self = this 20 | return this.api.execute(function (selector) { 21 | return document.querySelectorAll(selector).length 22 | }, [selector], function (res) { 23 | cb.call(self, res) 24 | }) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /docs/static/favicon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /src/components/x-audio.vue: -------------------------------------------------------------------------------- 1 | 13 | 44 | 46 | -------------------------------------------------------------------------------- /test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | // This is a karma config file. For more details see 2 | // http://karma-runner.github.io/0.13/config/configuration-file.html 3 | // we are also using it with karma-webpack 4 | // https://github.com/webpack/karma-webpack 5 | 6 | var webpackConfig = require('../../build/webpack.test.conf') 7 | 8 | module.exports = function (config) { 9 | config.set({ 10 | // to run in additional browsers: 11 | // 1. install corresponding karma launcher 12 | // http://karma-runner.github.io/0.13/config/browsers.html 13 | // 2. add it to the `browsers` array below. 14 | browsers: ['PhantomJS'], 15 | frameworks: ['mocha', 'sinon-chai', 'phantomjs-shim'], 16 | reporters: ['spec', 'coverage'], 17 | files: ['./index.js'], 18 | preprocessors: { 19 | './index.js': ['webpack', 'sourcemap'] 20 | }, 21 | webpack: webpackConfig, 22 | webpackMiddleware: { 23 | noInfo: true 24 | }, 25 | coverageReporter: { 26 | dir: './coverage', 27 | reporters: [ 28 | { type: 'lcov', subdir: '.' }, 29 | { type: 'text-summary' } 30 | ] 31 | } 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /src/service/firebase.js: -------------------------------------------------------------------------------- 1 | // import store from '@/vuex' 2 | import Firebase from 'firebase' 3 | import appconfig from '@/appconfig' 4 | 5 | // 初始化 Firebase 6 | export const FirebaseApp = Firebase.initializeApp(appconfig.firebase_config) 7 | 8 | // 以 VueFire 操作 database 9 | export let VueFireDB = FirebaseApp.database() 10 | 11 | // 棄用 vuex 12 | // 監控登入狀態的變化,隨時更新 Vuex 中的數據 13 | // Firebase.auth().onAuthStateChanged(firebaseUser => { 14 | // if (firebaseUser) { 15 | // console.log('[firebase.js] 使用者登入了: ', firebaseUser.email, firebaseUser.uid) 16 | // 17 | // // TODO: 改到Signup.vue處理了! 18 | // // 將使用者資料更新入 Firebase Databse 19 | // // Firebase.database().ref('users/' + firebaseUser.uid).set({ 20 | // // username: firebaseUser.displayName, 21 | // // email: firebaseUser.email, 22 | // // profile_picture: firebaseUser.photoURL 23 | // // }) 24 | // 25 | // // TODO: startDatabaseQueries() 26 | // 27 | // // 將使用者資料寫入 Vuex 28 | // store.commit('setUser', firebaseUser) 29 | // } else { 30 | // console.log('[firebase.js] 使用者登出了', firebaseUser) 31 | // store.commit('clearUser', firebaseUser) 32 | // } 33 | // }) 34 | -------------------------------------------------------------------------------- /src/components/home/Home.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 32 | s 33 | 56 | -------------------------------------------------------------------------------- /src/components/Intro.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 29 | 30 | 53 | -------------------------------------------------------------------------------- /test/e2e/runner.js: -------------------------------------------------------------------------------- 1 | // 1. start the dev server using production config 2 | process.env.NODE_ENV = 'testing' 3 | var server = require('../../build/dev-server.js') 4 | 5 | server.ready.then(() => { 6 | // 2. run the nightwatch test suite against it 7 | // to run in additional browsers: 8 | // 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings" 9 | // 2. add it to the --env flag below 10 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` 11 | // For more information on Nightwatch's config file, see 12 | // http://nightwatchjs.org/guide#settings-file 13 | var opts = process.argv.slice(2) 14 | if (opts.indexOf('--config') === -1) { 15 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) 16 | } 17 | if (opts.indexOf('--env') === -1) { 18 | opts = opts.concat(['--env', 'chrome']) 19 | } 20 | 21 | var spawn = require('cross-spawn') 22 | var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) 23 | 24 | runner.on('exit', function (code) { 25 | server.close() 26 | process.exit(code) 27 | }) 28 | 29 | runner.on('error', function (err) { 30 | server.close() 31 | throw err 32 | }) 33 | }) 34 | -------------------------------------------------------------------------------- /test/e2e/nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | var config = require('../../config') 3 | 4 | // http://nightwatchjs.org/gettingstarted#settings-file 5 | module.exports = { 6 | src_folders: ['test/e2e/specs'], 7 | output_folder: 'test/e2e/reports', 8 | custom_assertions_path: ['test/e2e/custom-assertions'], 9 | 10 | selenium: { 11 | start_process: true, 12 | server_path: require('selenium-server').path, 13 | host: '127.0.0.1', 14 | port: 4444, 15 | cli_args: { 16 | 'webdriver.chrome.driver': require('chromedriver').path 17 | } 18 | }, 19 | 20 | test_settings: { 21 | default: { 22 | selenium_port: 4444, 23 | selenium_host: 'localhost', 24 | silent: true, 25 | globals: { 26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 27 | } 28 | }, 29 | 30 | chrome: { 31 | desiredCapabilities: { 32 | browserName: 'chrome', 33 | javascriptEnabled: true, 34 | acceptSslCerts: true 35 | } 36 | }, 37 | 38 | firefox: { 39 | desiredCapabilities: { 40 | browserName: 'firefox', 41 | javascriptEnabled: true, 42 | acceptSslCerts: true 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /.sass-lint.yml: -------------------------------------------------------------------------------- 1 | ######################### 2 | ## Sample Sass Lint File 3 | ######################### 4 | # Linter Options 5 | options: 6 | # Don't merge default rules 7 | merge-default-rules: false 8 | # Set the formatter to 'html' 9 | formatter: html 10 | # Output file instead of logging results 11 | output-file: 'linters/sass-lint.html' 12 | # Raise an error if more than 50 warnings are generated 13 | max-warnings: 50 14 | # File Options 15 | files: 16 | include: 'sass/**/*.s+(a|c)ss' 17 | ignore: 18 | - 'sass/vendor/**/*.*' 19 | # Rule Configuration 20 | rules: 21 | extends-before-mixins: 2 22 | extends-before-declarations: 2 23 | placeholder-in-extend: 2 24 | mixins-before-declarations: 25 | - 2 26 | - 27 | exclude: 28 | - breakpoint 29 | - mq 30 | 31 | no-warn: 1 32 | no-debug: 1 33 | no-ids: 2 34 | no-important: 2 35 | hex-notation: 36 | - 2 37 | - 38 | style: uppercase 39 | indentation: 40 | - 2 41 | - 42 | size: 2 43 | property-sort-order: 44 | - 1 45 | - 46 | order: 47 | - display 48 | - margin 49 | ignore-custom-properties: true 50 | variable-for-property: 51 | - 2 52 | - 53 | properties: 54 | - margin 55 | - content 56 | -------------------------------------------------------------------------------- /src/components/templates/counter.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 50 | 51 | 52 | 56 | -------------------------------------------------------------------------------- /src/appconfig.js: -------------------------------------------------------------------------------- 1 | const appconfig = { 2 | general: { 3 | sponsor: false, 4 | discord: false, 5 | tutorial_for_non_login: false 6 | }, 7 | 'firebase_config': { 8 | apiKey: 'AIzaSyCK5_1a6NghhFZxL4a6csnrzHLkiouOQM4', 9 | authDomain: 'hacking-map.firebaseapp.com', 10 | databaseURL: 'https://hacking-map.firebaseio.com', 11 | projectId: 'hacking-map', 12 | storageBucket: 'hacking-map.appspot.com', 13 | messagingSenderId: '729739716516' 14 | }, 15 | event_info: { 16 | start_date: new Date('Mon Jul 21 2017 00:09:00 GMT+0800 (CST)'), 17 | end_date: new Date('Mon Jul 23 2017 00:17:00 GMT+0800 (CST)') 18 | }, 19 | map: { 20 | map_width: 842, 21 | map_height: 1286, 22 | table_coor: null // added below 23 | } 24 | } 25 | 26 | const coorX = [341, 384, 430, 523, 569, 614, 660] 27 | const coorY = [301, 364, 429, 492, 557, 621, 685, 748, 812, 876, 940, 1004, 1068, 1132, 1196] 28 | 29 | // Generate table coordinate 30 | function generateTableCoor (xs, ys) { 31 | let tableCoor = { 32 | 0: { 33 | no: 0, 34 | x: -150, 35 | y: 400 36 | } 37 | } 38 | for (let i = 0; i < xs.length * ys.length; i++) { 39 | tableCoor[i + 1] = { 40 | no: i + 1, 41 | x: xs[i % xs.length], 42 | y: ys[Math.floor(i / xs.length) % ys.length] 43 | } 44 | } 45 | return tableCoor 46 | } 47 | appconfig.map.table_coor = generateTableCoor(coorX, coorY) 48 | 49 | export default appconfig 50 | -------------------------------------------------------------------------------- /docs/static/js/manifest.d5807afe22759a8597b1.js: -------------------------------------------------------------------------------- 1 | !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s and sections 16 | "indent_scripts": "keep", // [keep|separate|normal] 17 | "indent_size": 2, // Indentation size 18 | "max_preserve_newlines": 0, // Maximum number of line breaks to be preserved in one chunk (0 disables) 19 | "preserve_newlines": true, // Whether existing line breaks before elements should be preserved (only works before elements, not inside tags or for text) 20 | "unformatted": ["a", "span", "img", "code", "pre", "sub", "sup", "em", "strong", "b", "i", "u", "strike", "big", "small", "pre", "h1", "h2", "h3", "h4", "h5", "h6"], // List of tags that should not be reformatted 21 | "wrap_line_length": 0 // Lines should wrap at next opportunity after this number of characters (0 disables) 22 | }, 23 | "css": {}, 24 | "js": {} 25 | } 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HackingMap 2 | 3 | ## Introduction 4 | HackingMap is a realtime map of project for hackathon events. Hackers can post, update and share their project with each other. With the `heart` and `star` icon, anyone login with Facebook can vote for projects they like. 5 | 6 | HackingMap for HackNTU2017: https://hackntu.github.io/HackingMap/#/projects 7 | 8 | ## Features 9 | ### Post a project and embed custom content 10 | ![](https://i.imgur.com/GmP0NUh.gif) 11 | 12 | ### Revel project on map 13 | ![](https://i.imgur.com/yEvF2LB.gif) 14 | 15 | ### Project status filter 16 | ![](https://i.imgur.com/fnBtLzz.gif) 17 | 18 | ## Tools 19 | - Vue.js 2.0 20 | - A prograssive front-end framework perfact for single-page applications. Check out [vue-cli Webpack boilerplate](https://vuejs-templates.github.io/webpack/) for the project structure. 21 | - Firebase 22 | - We use [Firebase Realtime Database](https://firebase.google.com/docs/database/web/start) and [VueFire](https://github.com/vuejs/vuefire) to achieve the dynamic update of project content and ranking. 23 | - ElementUI 24 | - A Vue based component/UI library, check out [ElementUI vue components](http://element.eleme.io/#/zh-CN/component/installation) for all avalible components. 25 | - Airtable 26 | - The full schedule of hackathon is co-edited in an Airtable base and display on the right column (Desktop only), with the current event highlighted. Check out [Airtable API](https://airtable.com/api). 27 | 28 | 29 | ## Usage 30 | ``` 31 | # Clone the project 32 | git clone https://github.com/HackNTU/HackingMap.git && cd hackingmap 33 | 34 | # Install dependancies 35 | yarn 36 | 37 | # (optional) Create a Firebase project and modify src/appconfig.js accordingly 38 | 39 | # Develope 40 | yarn dev 41 | 42 | # Build 43 | yarn build 44 | ``` 45 | -------------------------------------------------------------------------------- /src/components/templates/FirebaseDB.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 63 | 64 | 66 | -------------------------------------------------------------------------------- /src/components/Sponsor.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 63 | 64 | 84 | -------------------------------------------------------------------------------- /database.rules.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "public": { 4 | ".read": false, 5 | ".write": false, 6 | "announcement": { 7 | ".write": "newData.child('pwd').val() === data.parent().child('password').val()", 8 | "title": { 9 | ".read": true 10 | }, 11 | "detail": { 12 | ".read": true 13 | }, 14 | } 15 | }, 16 | "sponsor": { 17 | ".read": true, 18 | ".write": false 19 | }, 20 | "posts": { 21 | ".read": true, 22 | "$post_id": { 23 | ".write": "!data.exists() || !newData.exists()", 24 | "hearts": { 25 | "$uid": { 26 | ".write": "$uid === auth.uid" 27 | } 28 | }, 29 | "stars": { 30 | "$uid": { 31 | ".write": "$uid === auth.uid" 32 | } 33 | }, 34 | // Deprecated (dummy value) 35 | "starCount": { 36 | ".write": true 37 | }, 38 | // Deprecated (dummy value) 39 | "heartCount": { 40 | ".write": true 41 | }, 42 | "$other": { 43 | ".write": "data.parent().child('uid').val() === auth.uid" 44 | } 45 | } 46 | }, 47 | "user-posts": { 48 | "$uid": { 49 | ".read": true, 50 | "$post_id": { 51 | ".write": "!data.exists() || !newData.exists()", 52 | "hearts": { 53 | "$uid": { 54 | ".write": "$uid === auth.uid" 55 | } 56 | }, 57 | "stars": { 58 | "$uid": { 59 | ".write": "$uid === auth.uid" 60 | } 61 | }, 62 | // Deprecated (dummy value) 63 | "starCount": { 64 | ".write": true 65 | }, 66 | // Deprecated (dummy value) 67 | "heartCount": { 68 | ".write": true 69 | }, 70 | "$other": { 71 | ".write": "data.parent().child('uid').val() === auth.uid" 72 | } 73 | } 74 | } 75 | }, 76 | "users": { 77 | "$uid": { 78 | ".read": "$uid === auth.uid", 79 | ".write": "$uid === auth.uid" 80 | } 81 | } 82 | } 83 | } -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 47 | 48 | 82 | 96 | -------------------------------------------------------------------------------- /src/components/templates/VueFire-todoApp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VueFire Todo App Demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 23 | 24 |
25 | 30 |
    31 |
  • 32 | 36 | 37 |
  • 38 |
39 |
40 | 41 | 73 | 74 | s 75 | -------------------------------------------------------------------------------- /src/components/home/hackingmap/FullMapView.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 57 | 58 | 80 | -------------------------------------------------------------------------------- /src/components/LiveAwards.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 85 | 86 | 87 | 95 | -------------------------------------------------------------------------------- /src/components/MentorView.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 84 | 85 | 86 | 103 | -------------------------------------------------------------------------------- /src/components/Expo.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 94 | 95 | 107 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | HackingMap | HackNTU 2017
-------------------------------------------------------------------------------- /static/timer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 73 | 74 | 75 | 76 |
77 |

Hacking Countdown

78 |
79 |
80 |

{{time}}

81 |
82 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/static/timer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 73 | 74 | 75 | 76 |
77 |

Hacking Countdown

78 |
79 |
80 |

{{time}}

81 |
82 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HackingMap | HackNTU 2017 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 40 | 41 | 42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 64 | -------------------------------------------------------------------------------- /src/components/home/hackingmap/MyPosts.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 112 | 113 | 118 | -------------------------------------------------------------------------------- /src/components/home/Announcement.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 81 | 82 | 130 | -------------------------------------------------------------------------------- /src/components/AskMentor.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 | 116 | 117 | 118 | 123 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hackingmap", 3 | "version": "0.6.0", 4 | "description": "A project map for hackathon events, showing the hacking process.", 5 | "author": "choznerol ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "start": "node build/dev-server.js", 10 | "build": "node build/build.js", 11 | "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", 12 | "e2e": "node test/e2e/runner.js", 13 | "test": "npm run unit && npm run e2e", 14 | "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" 15 | }, 16 | "dependencies": { 17 | "airtable": "^0.5.0", 18 | "element-ui": "^1.3.1", 19 | "firebase": "^3.9.0", 20 | "lodash": "^4.17.4", 21 | "node-sass": "^4.5.2", 22 | "sass-loader": "^6.0.4", 23 | "svg-pan-zoom": "github:ariutta/svg-pan-zoom", 24 | "vue": "^2.3.3", 25 | "vue-awesome": "^2.3.1", 26 | "vue-keyboard": "^3.1.0", 27 | "vue-popper": "^0.3.8", 28 | "vue-router": "^2.3.1", 29 | "vue-template-compiler": "^2.3.3", 30 | "vuefire": "^1.4.2", 31 | "vuex": "^2.3.1" 32 | }, 33 | "devDependencies": { 34 | "autoprefixer": "^6.7.2", 35 | "babel-core": "^6.22.1", 36 | "babel-eslint": "^7.1.1", 37 | "babel-loader": "^6.2.10", 38 | "babel-plugin-component": "^0.9.1", 39 | "babel-plugin-istanbul": "^4.1.1", 40 | "babel-plugin-transform-runtime": "^6.22.0", 41 | "babel-preset-env": "^1.3.2", 42 | "babel-preset-stage-2": "^6.22.0", 43 | "babel-register": "^6.22.0", 44 | "chai": "^3.5.0", 45 | "chalk": "^1.1.3", 46 | "chromedriver": "^2.27.2", 47 | "connect-history-api-fallback": "^1.3.0", 48 | "copy-webpack-plugin": "^4.0.1", 49 | "cross-env": "^4.0.0", 50 | "cross-spawn": "^5.0.1", 51 | "css-loader": "^0.28.0", 52 | "eslint": "^3.19.0", 53 | "eslint-config-standard": "^6.2.1", 54 | "eslint-friendly-formatter": "^2.0.7", 55 | "eslint-loader": "^1.7.1", 56 | "eslint-plugin-html": "^2.0.0", 57 | "eslint-plugin-promise": "^3.4.0", 58 | "eslint-plugin-standard": "^2.0.1", 59 | "eventsource-polyfill": "^0.9.6", 60 | "express": "^4.14.1", 61 | "extract-text-webpack-plugin": "^2.0.0", 62 | "file-loader": "^0.11.1", 63 | "friendly-errors-webpack-plugin": "^1.1.3", 64 | "html-webpack-plugin": "^2.28.0", 65 | "http-proxy-middleware": "^0.17.3", 66 | "inject-loader": "^3.0.0", 67 | "karma": "^1.4.1", 68 | "karma-coverage": "^1.1.1", 69 | "karma-mocha": "^1.3.0", 70 | "karma-phantomjs-launcher": "^1.0.2", 71 | "karma-phantomjs-shim": "^1.4.0", 72 | "karma-sinon-chai": "^1.3.1", 73 | "karma-sourcemap-loader": "^0.3.7", 74 | "karma-spec-reporter": "0.0.30", 75 | "karma-webpack": "^2.0.2", 76 | "lolex": "^1.5.2", 77 | "mocha": "^3.2.0", 78 | "nightwatch": "^0.9.12", 79 | "opn": "^4.0.2", 80 | "optimize-css-assets-webpack-plugin": "^1.3.0", 81 | "ora": "^1.2.0", 82 | "phantomjs-prebuilt": "^2.1.14", 83 | "rimraf": "^2.6.0", 84 | "selenium-server": "^3.0.1", 85 | "semver": "^5.3.0", 86 | "shelljs": "^0.7.6", 87 | "sinon": "^2.1.0", 88 | "sinon-chai": "^2.8.0", 89 | "url-loader": "^0.5.8", 90 | "vue-loader": "^11.3.4", 91 | "vue-style-loader": "^2.0.5", 92 | "webpack": "^2.3.3", 93 | "webpack-bundle-analyzer": "^2.2.1", 94 | "webpack-dev-middleware": "^1.10.0", 95 | "webpack-hot-middleware": "^2.18.0", 96 | "webpack-merge": "^4.1.0" 97 | }, 98 | "engines": { 99 | "node": ">= 4.0.0", 100 | "npm": ">= 3.0.0" 101 | }, 102 | "browserslist": [ 103 | "> 1%", 104 | "last 2 versions", 105 | "not ie <= 8" 106 | ], 107 | "sasslintConfig": "./.sass-lint.yml" 108 | } 109 | -------------------------------------------------------------------------------- /src/components/AdminView.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 111 | 112 | 113 | 128 | -------------------------------------------------------------------------------- /src/components/home/hackingmap/ListView.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 107 | 108 | 130 | 131 | 132 | 151 | -------------------------------------------------------------------------------- /src/components/banner/Banner.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 102 | 103 | 145 | -------------------------------------------------------------------------------- /src/components/Loading.vue: -------------------------------------------------------------------------------- 1 | 35 | 50 | 130 | 131 | 171 | -------------------------------------------------------------------------------- /src/components/Speaker.vue: -------------------------------------------------------------------------------- 1 | 22 | 139 | 173 | -------------------------------------------------------------------------------- /src/components/home/Schedule.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 159 | 160 | 172 | 177 | -------------------------------------------------------------------------------- /src/components/home/hackingmap/PostSummary.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 223 | 224 | 307 | -------------------------------------------------------------------------------- /src/components/home/HackingMap.vue: -------------------------------------------------------------------------------- 1 | 89 | 90 | 220 | 221 | 222 | 261 | 266 | -------------------------------------------------------------------------------- /src/components/banner/OAuthLogin.vue: -------------------------------------------------------------------------------- 1 | 77 | 78 | 227 | 228 | 270 | -------------------------------------------------------------------------------- /src/components/home/hackingmap/PostDetail.vue: -------------------------------------------------------------------------------- 1 | 80 | 81 | 231 | 232 | 363 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /src/components/home/hackingmap/MapView.vue: -------------------------------------------------------------------------------- 1 | 67 | 68 | 122 | 123 | 124 | 125 | 126 |
127 | 128 | 點擊篩選 129 | 130 | 134 | 135 | {{ symble }} 136 | 137 | 141 | 142 | 全部 143 | 144 |
145 | 146 | 147 |
148 |
  • 149 | 150 |
  • 151 |
  • 152 | 153 |
  • 154 |
  • 155 | 156 |
  • 157 |
    158 | 159 | 160 | 161 | 162 | 326 | 327 | 430 | -------------------------------------------------------------------------------- /docs/static/js/manifest.d5807afe22759a8597b1.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///static/js/manifest.d5807afe22759a8597b1.js","webpack:///webpack/bootstrap f76d4c02705f62e2a469"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","result","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","s","2","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","0","1","setTimeout","appendChild","m","c","value","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"CAAS,SAAUA,GCuCnB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QA1DA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,GAAAX,GAAAY,EAAAC,EAAAT,EAAA,EAAAU,KACQV,EAAAK,EAAAM,OAAoBX,IAC5BQ,EAAAH,EAAAL,GACAY,EAAAJ,IACAE,EAAAG,KAAAD,EAAAJ,GAAA,IAEAI,EAAAJ,GAAA,CAEA,KAAAZ,IAAAU,GACAQ,OAAAC,UAAAC,eAAAd,KAAAI,EAAAV,KACAF,EAAAE,GAAAU,EAAAV,GAIA,KADAO,KAAAE,EAAAC,EAAAC,GACAG,EAAAC,QACAD,EAAAO,SAEA,IAAAV,EACA,IAAAP,EAAA,EAAYA,EAAAO,EAAAI,OAA2BX,IACvCS,EAAAd,IAAAuB,EAAAX,EAAAP,GAGA,OAAAS,GAIA,IAAAZ,MAGAe,GACAO,EAAA,EA6BAxB,GAAAyB,EAAA,SAAAZ,GA+BA,QAAAa,KAEAC,EAAAC,QAAAD,EAAAE,OAAA,KACAC,aAAAC,EACA,IAAAC,GAAAf,EAAAJ,EACA,KAAAmB,IACAA,GACAA,EAAA,MAAAC,OAAA,iBAAApB,EAAA,aAEAI,EAAAJ,OAAAqB,IAvCA,GAAAC,GAAAlB,EAAAJ,EACA,QAAAsB,EACA,UAAAC,SAAA,SAAAC,GAA0CA,KAI1C,IAAAF,EACA,MAAAA,GAAA,EAIA,IAAAG,GAAA,GAAAF,SAAA,SAAAC,EAAAE,GACAJ,EAAAlB,EAAAJ,IAAAwB,EAAAE,IAEAJ,GAAA,GAAAG,CAGA,IAAAE,GAAAC,SAAAC,qBAAA,WACAf,EAAAc,SAAAE,cAAA,SACAhB,GAAAiB,KAAA,kBACAjB,EAAAkB,QAAA,QACAlB,EAAAmB,OAAA,EACAnB,EAAAI,QAAA,KAEA/B,EAAA+C,IACApB,EAAAqB,aAAA,QAAAhD,EAAA+C,IAEApB,EAAAsB,IAAAjD,EAAAkD,EAAA,aAAArC,EAAA,KAAwEsC,EAAA,uBAAAC,EAAA,wBAAsDvC,GAAA,KAC9H,IAAAkB,GAAAsB,WAAA3B,EAAA,KAgBA,OAfAC,GAAAC,QAAAD,EAAAE,OAAAH,EAaAc,EAAAc,YAAA3B,GAEAW,GAIAtC,EAAAuD,EAAAxD,EAGAC,EAAAwD,EAAAtD,EAGAF,EAAAK,EAAA,SAAAoD,GAA2C,MAAAA,IAG3CzD,EAAA0D,EAAA,SAAAvD,EAAAwD,EAAAC,GACA5D,EAAA6D,EAAA1D,EAAAwD,IACAxC,OAAA2C,eAAA3D,EAAAwD,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMA5D,EAAAkE,EAAA,SAAA9D,GACA,GAAAwD,GAAAxD,KAAA+D,WACA,WAA2B,MAAA/D,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAA0D,EAAAE,EAAA,IAAAA,GACAA,GAIA5D,EAAA6D,EAAA,SAAAO,EAAAC,GAAsD,MAAAlD,QAAAC,UAAAC,eAAAd,KAAA6D,EAAAC,IAGtDrE,EAAAkD,EAAA,eAGAlD,EAAAsE,GAAA,SAAAC,GAA8D,KAApBC,SAAAC,MAAAF,GAAoBA","file":"static/js/manifest.d5807afe22759a8597b1.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/ \t\tif(executeModules) {\n/******/ \t\t\tfor(i=0; i < executeModules.length; i++) {\n/******/ \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\treturn result;\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t2: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = 'text/javascript';\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"0252bf6f4d4cf90c8039\",\"1\":\"a6a57199332a2960791b\"}[chunkId] + \".js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/HackingMap/\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/ })\n/************************************************************************/\n/******/ ([]);\n\n\n// WEBPACK FOOTER //\n// static/js/manifest.d5807afe22759a8597b1.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"0252bf6f4d4cf90c8039\",\"1\":\"a6a57199332a2960791b\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/HackingMap/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f76d4c02705f62e2a469"],"sourceRoot":""} -------------------------------------------------------------------------------- /src/components/home/hackingmap/Editor.vue: -------------------------------------------------------------------------------- 1 | 224 | 225 | 450 | 451 | 461 | --------------------------------------------------------------------------------