├── .gitignore
├── LICENSE
├── README.md
├── app.js
├── fe
├── .babelrc
├── .editorconfig
├── .eslintignore
├── .gitignore
├── README.md
├── build
│ ├── build.js
│ ├── check-versions.js
│ ├── dev-client.js
│ ├── dev-server.js
│ ├── utils.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
├── config
│ ├── dev.env.js
│ ├── index.js
│ ├── prod.env.js
│ └── test.env.js
├── index.html
├── package-lock.json
├── package.json
├── src
│ ├── App.vue
│ ├── api
│ │ └── index.js
│ ├── assets
│ │ ├── colors.json
│ │ ├── fonts
│ │ │ ├── GothamPro-Bold
│ │ │ │ ├── GothamPro-Bold.eot
│ │ │ │ ├── GothamPro-Bold.otf
│ │ │ │ ├── GothamPro-Bold.svg
│ │ │ │ ├── GothamPro-Bold.ttf
│ │ │ │ ├── GothamPro-Bold.woff
│ │ │ │ ├── preview.html
│ │ │ │ └── styles.css
│ │ │ ├── GothamPro-Medium
│ │ │ │ ├── GothamPro-Medium.eot
│ │ │ │ ├── GothamPro-Medium.otf
│ │ │ │ ├── GothamPro-Medium.svg
│ │ │ │ ├── GothamPro-Medium.ttf
│ │ │ │ ├── GothamPro-Medium.woff
│ │ │ │ ├── preview.html
│ │ │ │ └── styles.css
│ │ │ └── GothamPro
│ │ │ │ ├── GothamPro.eot
│ │ │ │ ├── GothamPro.otf
│ │ │ │ ├── GothamPro.svg
│ │ │ │ ├── GothamPro.ttf
│ │ │ │ ├── GothamPro.woff
│ │ │ │ ├── preview.html
│ │ │ │ └── styles.css
│ │ ├── github-logo.png
│ │ ├── logo.png
│ │ └── notification-icon.png
│ ├── components
│ │ ├── Avatar.vue
│ │ ├── FooterBar.vue
│ │ ├── HamburgerIcon.vue
│ │ ├── HeaderBar.vue
│ │ ├── ListTransition.vue
│ │ ├── LoadingBlock.vue
│ │ ├── MainContent.vue
│ │ ├── MenuFullstatehandler.vue
│ │ ├── MenuOpenstatehandler.vue
│ │ ├── NavMenu.vue
│ │ ├── Profile.vue
│ │ ├── RepoContent.vue
│ │ ├── RepoItem.vue
│ │ ├── SearchInput.vue
│ │ ├── TextHolder.vue
│ │ └── Toast.vue
│ ├── main.js
│ ├── views
│ │ ├── NotFound.vue
│ │ ├── RepoDetail.vue
│ │ ├── RepoList.vue
│ │ └── UserPage.vue
│ └── vuex
│ │ ├── modules
│ │ ├── header.js
│ │ ├── index.js
│ │ ├── navMenu.js
│ │ ├── profile.js
│ │ └── repos.js
│ │ ├── mutation-types.js
│ │ └── store.js
├── static
│ └── .gitkeep
└── test
│ └── unit
│ ├── .eslintrc
│ ├── index.js
│ ├── karma.conf.js
│ └── specs
│ ├── Avatar.spec.js
│ └── FooterBar.spec.js
├── package.json
├── public
├── index.html
└── static
│ ├── css
│ ├── app.d7c90db11f26a37da2c59c2e9e5438ec.css
│ └── app.d7c90db11f26a37da2c59c2e9e5438ec.css.map
│ ├── fonts
│ ├── GothamPro-Bold.1ba6b49.ttf
│ ├── GothamPro-Bold.3f9c5a2.otf
│ ├── GothamPro-Bold.69331bf.eot
│ ├── GothamPro-Bold.c7f92c8.woff
│ ├── GothamPro-Medium.4593d19.ttf
│ ├── GothamPro-Medium.6a20af8.woff
│ ├── GothamPro-Medium.852509f.eot
│ ├── GothamPro-Medium.dd3d9ca.otf
│ ├── GothamPro.1f7329d.eot
│ ├── GothamPro.aafeb23.otf
│ ├── GothamPro.bfecd40.ttf
│ ├── GothamPro.d171b7f.woff
│ ├── fontawesome-webfont.674f50d.eot
│ ├── fontawesome-webfont.af7ae50.woff2
│ ├── fontawesome-webfont.b06871f.ttf
│ └── fontawesome-webfont.fee66e7.woff
│ ├── img
│ ├── GothamPro-Bold.85d01d2.svg
│ ├── GothamPro-Medium.935ff2d.svg
│ ├── GothamPro.bb26490.svg
│ └── fontawesome-webfont.912ec66.svg
│ └── js
│ ├── app.1f73bc6a93c13695758c.js
│ ├── app.1f73bc6a93c13695758c.js.map
│ ├── manifest.c9af7b74846b6944b0c1.js
│ ├── manifest.c9af7b74846b6944b0c1.js.map
│ ├── vendor.ed6411a827240728d10d.js
│ └── vendor.ed6411a827240728d10d.js.map
└── server.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 | selenium-debug.log
6 | fe/test/unit/coverage
7 | fe/test/e2e/reports
8 | start.sh
9 | .avoscloud
10 |
11 | # VIM
12 | *~
13 | *.swp
14 | .avoscloud/
15 | .avoscloud/
16 | .avoscloud/
17 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Sid
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # github-explorer
2 |
3 | > Rebuild with Vue 2.1
4 |
5 | # Introduction
6 |
7 | THIS github-explorer is based on Vue. You can check out the [ORIGINAL](https://github.com/trungdq88/github-explorer) version, which is based on React. If you are interested in Vue 1.0 version, you should visit [this](https://github.com/SidKwok/github-explorer/tree/1.x).
8 |
9 | ## Tips
10 |
11 | I had deployed it on leancloud, so you can see [Live Demo](http://github-e.leanapp.cn). But if you would like to check the source code, you need to step to folder `fe`.
12 |
13 | ## Tech stack:
14 |
15 | - **VueJs** for UI
16 | - **vue-router** for Router
17 | - **vue-resource** for data fetching
18 | - **Vuex** for state management
19 | - **vue-cli** for building the project's structure
20 |
21 | ## Getting started
22 |
23 | Go to The File Folder `fe` to do the command line!
24 |
25 | ```bash
26 | npm install
27 | npm run dev
28 | ```
29 | Checkout `localhost: 3000` in the browser!
30 |
31 | If it doesn't work, try `sudo`。
32 |
33 | To run the unit tests.
34 | ```bash
35 | npm run unit
36 | ```
37 |
38 | ## Goals
39 |
40 | - Add route transition.
41 | - Finish unit tests.
42 |
43 | ## Bugs
44 |
45 |
46 | ## Focus!
47 |
48 | ~~I need stars to fill my holes!~~
49 |
50 | ## Reference
51 |
52 | [github-explorer](https://github.com/trungdq88/github-explorer)
53 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | var express = require('express');
3 | var timeout = require('connect-timeout');
4 | var path = require('path');
5 | var cookieParser = require('cookie-parser');
6 | var bodyParser = require('body-parser');
7 | var AV = require('leanengine');
8 |
9 | var app = express();
10 |
11 | app.use(express.static('public'));
12 |
13 | // 设置默认超时时间
14 | app.use(timeout('15s'));
15 |
16 | // 加载云引擎中间件
17 | app.use(AV.express());
18 | app.use(bodyParser.json());
19 | app.use(bodyParser.urlencoded({ extended: false }));
20 | app.use(cookieParser());
21 |
22 | app.use(function(req, res, next) {
23 | // 如果任何一个路由都没有返回响应,则抛出一个 404 异常给后续的异常处理器
24 | if (!res.headersSent) {
25 | var err = new Error('Not Found');
26 | err.status = 404;
27 | next(err);
28 | }
29 | });
30 |
31 | // error handlers
32 | app.use(function(err, req, res, next) {
33 | res.sendFile(path.dirname(require.main.filename) + '/public/index.html');
34 | });
35 |
36 | module.exports = app;
37 |
--------------------------------------------------------------------------------
/fe/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "stage-2"],
3 | "plugins": ["transform-runtime"],
4 | "comments": false
5 | }
6 |
--------------------------------------------------------------------------------
/fe/.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 |
--------------------------------------------------------------------------------
/fe/.eslintignore:
--------------------------------------------------------------------------------
1 | build/*.js
2 | config/*.js
3 |
--------------------------------------------------------------------------------
/fe/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 |
--------------------------------------------------------------------------------
/fe/README.md:
--------------------------------------------------------------------------------
1 | # github-explorer
2 |
3 | > Rebuild with Vue 2.1
4 |
5 | ## Get start
6 |
7 | ```
8 | npm install
9 | npm run dev
10 | ```
11 |
12 | Checkout localhost: 8080 in the browser! If it doesn't work, try `sudo`.
13 |
--------------------------------------------------------------------------------
/fe/build/build.js:
--------------------------------------------------------------------------------
1 | // https://github.com/shelljs/shelljs
2 | require('./check-versions')()
3 | require('shelljs/global')
4 | env.NODE_ENV = 'production'
5 |
6 | var path = require('path')
7 | var config = require('../config')
8 | var ora = require('ora')
9 | var webpack = require('webpack')
10 | var webpackConfig = require('./webpack.prod.conf')
11 |
12 | console.log(
13 | ' Tip:\n' +
14 | ' Built files are meant to be served over an HTTP server.\n' +
15 | ' Opening index.html over file:// won\'t work.\n'
16 | )
17 |
18 | var spinner = ora('building for production...')
19 | spinner.start()
20 |
21 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory)
22 | rm('-rf', assetsPath)
23 | mkdir('-p', assetsPath)
24 | cp('-R', 'static/*', assetsPath)
25 |
26 | webpack(webpackConfig, function (err, stats) {
27 | spinner.stop()
28 | if (err) throw err
29 | process.stdout.write(stats.toString({
30 | colors: true,
31 | modules: false,
32 | children: false,
33 | chunks: false,
34 | chunkModules: false
35 | }) + '\n')
36 | })
37 |
--------------------------------------------------------------------------------
/fe/build/check-versions.js:
--------------------------------------------------------------------------------
1 | var semver = require('semver')
2 | var chalk = require('chalk')
3 | var packageConfig = require('../package.json')
4 | var exec = function (cmd) {
5 | return require('child_process')
6 | .execSync(cmd).toString().trim()
7 | }
8 |
9 | var versionRequirements = [
10 | {
11 | name: 'node',
12 | currentVersion: semver.clean(process.version),
13 | versionRequirement: packageConfig.engines.node
14 | },
15 | {
16 | name: 'npm',
17 | currentVersion: exec('npm --version'),
18 | versionRequirement: packageConfig.engines.npm
19 | }
20 | ]
21 |
22 | module.exports = function () {
23 | var warnings = []
24 | for (var i = 0; i < versionRequirements.length; i++) {
25 | var mod = versionRequirements[i]
26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
27 | warnings.push(mod.name + ': ' +
28 | chalk.red(mod.currentVersion) + ' should be ' +
29 | chalk.green(mod.versionRequirement)
30 | )
31 | }
32 | }
33 |
34 | if (warnings.length) {
35 | console.log('')
36 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
37 | console.log()
38 | for (var i = 0; i < warnings.length; i++) {
39 | var warning = warnings[i]
40 | console.log(' ' + warning)
41 | }
42 | console.log()
43 | process.exit(1)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/fe/build/dev-client.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | require('eventsource-polyfill')
3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
4 |
5 | hotClient.subscribe(function (event) {
6 | if (event.action === 'reload') {
7 | window.location.reload()
8 | }
9 | })
10 |
--------------------------------------------------------------------------------
/fe/build/dev-server.js:
--------------------------------------------------------------------------------
1 | require('./check-versions')()
2 | var config = require('../config')
3 | if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
4 | var path = require('path')
5 | var express = require('express')
6 | var webpack = require('webpack')
7 | var opn = require('opn')
8 | var proxyMiddleware = require('http-proxy-middleware')
9 | var webpackConfig = require('./webpack.dev.conf')
10 |
11 | // default port where dev server listens for incoming traffic
12 | var port = process.env.PORT || config.dev.port
13 | // Define HTTP proxies to your custom API backend
14 | // https://github.com/chimurai/http-proxy-middleware
15 | var proxyTable = config.dev.proxyTable
16 |
17 | var app = express()
18 | var compiler = webpack(webpackConfig)
19 |
20 | var devMiddleware = require('webpack-dev-middleware')(compiler, {
21 | publicPath: webpackConfig.output.publicPath,
22 | stats: {
23 | colors: true,
24 | chunks: false
25 | }
26 | })
27 |
28 | var hotMiddleware = require('webpack-hot-middleware')(compiler)
29 | // force page reload when html-webpack-plugin template changes
30 | compiler.plugin('compilation', function (compilation) {
31 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
32 | hotMiddleware.publish({ action: 'reload' })
33 | cb()
34 | })
35 | })
36 |
37 | // proxy api requests
38 | Object.keys(proxyTable).forEach(function (context) {
39 | var options = proxyTable[context]
40 | if (typeof options === 'string') {
41 | options = { target: options }
42 | }
43 | app.use(proxyMiddleware(context, options))
44 | })
45 |
46 | // handle fallback for HTML5 history API
47 | app.use(require('connect-history-api-fallback')())
48 |
49 | // serve webpack bundle output
50 | app.use(devMiddleware)
51 |
52 | // enable hot-reload and state-preserving
53 | // compilation error display
54 | app.use(hotMiddleware)
55 |
56 | // serve pure static assets
57 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
58 | app.use(staticPath, express.static('./static'))
59 |
60 | module.exports = app.listen(port, function (err) {
61 | if (err) {
62 | console.log(err)
63 | return
64 | }
65 | var uri = 'http://localhost:' + port
66 | console.log('Listening at ' + uri + '\n')
67 |
68 | // when env is testing, don't need open it
69 | if (process.env.NODE_ENV !== 'testing') {
70 | opn(uri)
71 | }
72 | })
73 |
--------------------------------------------------------------------------------
/fe/build/utils.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var config = require('../config')
3 | var ExtractTextPlugin = require('extract-text-webpack-plugin')
4 |
5 | exports.assetsPath = function (_path) {
6 | var assetsSubDirectory = process.env.NODE_ENV === 'production'
7 | ? config.build.assetsSubDirectory
8 | : config.dev.assetsSubDirectory
9 | return path.posix.join(assetsSubDirectory, _path)
10 | }
11 |
12 | exports.cssLoaders = function (options) {
13 | options = options || {}
14 | // generate loader string to be used with extract text plugin
15 | function generateLoaders (loaders) {
16 | var sourceLoader = loaders.map(function (loader) {
17 | var extraParamChar
18 | if (/\?/.test(loader)) {
19 | loader = loader.replace(/\?/, '-loader?')
20 | extraParamChar = '&'
21 | } else {
22 | loader = loader + '-loader'
23 | extraParamChar = '?'
24 | }
25 | return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '')
26 | }).join('!')
27 |
28 | // Extract CSS when that option is specified
29 | // (which is the case during production build)
30 | if (options.extract) {
31 | return ExtractTextPlugin.extract('vue-style-loader', sourceLoader)
32 | } else {
33 | return ['vue-style-loader', sourceLoader].join('!')
34 | }
35 | }
36 |
37 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html
38 | return {
39 | css: generateLoaders(['css']),
40 | postcss: generateLoaders(['css']),
41 | less: generateLoaders(['css', 'less']),
42 | sass: generateLoaders(['css', 'sass?indentedSyntax']),
43 | scss: generateLoaders(['css', 'sass']),
44 | stylus: generateLoaders(['css', 'stylus']),
45 | styl: generateLoaders(['css', 'stylus'])
46 | }
47 | }
48 |
49 | // Generate loaders for standalone style files (outside of .vue)
50 | exports.styleLoaders = function (options) {
51 | var output = []
52 | var loaders = exports.cssLoaders(options)
53 | for (var extension in loaders) {
54 | var loader = loaders[extension]
55 | output.push({
56 | test: new RegExp('\\.' + extension + '$'),
57 | loader: loader
58 | })
59 | }
60 | return output
61 | }
62 |
--------------------------------------------------------------------------------
/fe/build/webpack.base.conf.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var config = require('../config')
3 | var utils = require('./utils')
4 | var projectRoot = path.resolve(__dirname, '../')
5 |
6 | var env = process.env.NODE_ENV
7 | // check env & config/index.js to decide weither to enable CSS Sourcemaps for the
8 | // various preprocessor loaders added to vue-loader at the end of this file
9 | var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)
10 | var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)
11 | var useCssSourceMap = cssSourceMapDev || cssSourceMapProd
12 |
13 | module.exports = {
14 | entry: {
15 | app: './src/main.js'
16 | },
17 | output: {
18 | path: config.build.assetsRoot,
19 | publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
20 | filename: '[name].js'
21 | },
22 | resolve: {
23 | extensions: ['', '.js', '.vue'],
24 | fallback: [path.join(__dirname, '../node_modules')],
25 | alias: {
26 | 'vue$': 'vue/dist/vue',
27 | 'src': path.resolve(__dirname, '../src'),
28 | 'assets': path.resolve(__dirname, '../src/assets'),
29 | 'components': path.resolve(__dirname, '../src/components')
30 | }
31 | },
32 | resolveLoader: {
33 | fallback: [path.join(__dirname, '../node_modules')]
34 | },
35 | module: {
36 | loaders: [
37 | {
38 | test: /\.vue$/,
39 | loader: 'vue'
40 | },
41 | {
42 | test: /\.js$/,
43 | loader: 'babel',
44 | include: projectRoot,
45 | exclude: /node_modules/
46 | },
47 | {
48 | test: /\.json$/,
49 | loader: 'json'
50 | },
51 | {
52 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
53 | loader: 'url',
54 | query: {
55 | limit: 10000,
56 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
57 | }
58 | },
59 | {
60 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
61 | loader: 'url',
62 | query: {
63 | limit: 10000,
64 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
65 | }
66 | }
67 | ]
68 | },
69 | vue: {
70 | loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }),
71 | postcss: [
72 | require('autoprefixer')({
73 | browsers: ['last 2 versions']
74 | })
75 | ]
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/fe/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | var config = require('../config')
2 | var webpack = require('webpack')
3 | var merge = require('webpack-merge')
4 | var utils = require('./utils')
5 | var baseWebpackConfig = require('./webpack.base.conf')
6 | var HtmlWebpackPlugin = require('html-webpack-plugin')
7 |
8 | // add hot-reload related code to entry chunks
9 | Object.keys(baseWebpackConfig.entry).forEach(function (name) {
10 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
11 | })
12 |
13 | module.exports = merge(baseWebpackConfig, {
14 | module: {
15 | loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
16 | },
17 | // eval-source-map is faster for development
18 | devtool: '#eval-source-map',
19 | plugins: [
20 | new webpack.DefinePlugin({
21 | 'process.env': config.dev.env
22 | }),
23 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
24 | new webpack.optimize.OccurenceOrderPlugin(),
25 | new webpack.HotModuleReplacementPlugin(),
26 | new webpack.NoErrorsPlugin(),
27 | // https://github.com/ampedandwired/html-webpack-plugin
28 | new HtmlWebpackPlugin({
29 | filename: 'index.html',
30 | template: 'index.html',
31 | inject: true
32 | })
33 | ]
34 | })
35 |
--------------------------------------------------------------------------------
/fe/build/webpack.prod.conf.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var config = require('../config')
3 | var utils = require('./utils')
4 | var webpack = require('webpack')
5 | var merge = require('webpack-merge')
6 | var baseWebpackConfig = require('./webpack.base.conf')
7 | var ExtractTextPlugin = require('extract-text-webpack-plugin')
8 | var HtmlWebpackPlugin = require('html-webpack-plugin')
9 | var env = config.build.env
10 |
11 | var webpackConfig = merge(baseWebpackConfig, {
12 | module: {
13 | loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true })
14 | },
15 | devtool: config.build.productionSourceMap ? '#source-map' : false,
16 | output: {
17 | path: config.build.assetsRoot,
18 | filename: utils.assetsPath('js/[name].[chunkhash].js'),
19 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
20 | },
21 | vue: {
22 | loaders: utils.cssLoaders({
23 | sourceMap: config.build.productionSourceMap,
24 | extract: true
25 | })
26 | },
27 | plugins: [
28 | // http://vuejs.github.io/vue-loader/en/workflow/production.html
29 | new webpack.DefinePlugin({
30 | 'process.env': env
31 | }),
32 | new webpack.optimize.UglifyJsPlugin({
33 | compress: {
34 | warnings: false
35 | }
36 | }),
37 | new webpack.optimize.OccurrenceOrderPlugin(),
38 | // extract css into its own file
39 | new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')),
40 | // generate dist index.html with correct asset hash for caching.
41 | // you can customize output by editing /index.html
42 | // see https://github.com/ampedandwired/html-webpack-plugin
43 | new HtmlWebpackPlugin({
44 | filename: config.build.index,
45 | template: 'index.html',
46 | inject: true,
47 | minify: {
48 | removeComments: true,
49 | collapseWhitespace: true,
50 | removeAttributeQuotes: true
51 | // more options:
52 | // https://github.com/kangax/html-minifier#options-quick-reference
53 | },
54 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin
55 | chunksSortMode: 'dependency'
56 | }),
57 | // split vendor js into its own file
58 | new webpack.optimize.CommonsChunkPlugin({
59 | name: 'vendor',
60 | minChunks: function (module, count) {
61 | // any required modules inside node_modules are extracted to vendor
62 | return (
63 | module.resource &&
64 | /\.js$/.test(module.resource) &&
65 | module.resource.indexOf(
66 | path.join(__dirname, '../node_modules')
67 | ) === 0
68 | )
69 | }
70 | }),
71 | // extract webpack runtime and module manifest to its own file in order to
72 | // prevent vendor hash from being updated whenever app bundle is updated
73 | new webpack.optimize.CommonsChunkPlugin({
74 | name: 'manifest',
75 | chunks: ['vendor']
76 | })
77 | ]
78 | })
79 |
80 | if (config.build.productionGzip) {
81 | var CompressionWebpackPlugin = require('compression-webpack-plugin')
82 |
83 | webpackConfig.plugins.push(
84 | new CompressionWebpackPlugin({
85 | asset: '[path].gz[query]',
86 | algorithm: 'gzip',
87 | test: new RegExp(
88 | '\\.(' +
89 | config.build.productionGzipExtensions.join('|') +
90 | ')$'
91 | ),
92 | threshold: 10240,
93 | minRatio: 0.8
94 | })
95 | )
96 | }
97 |
98 | module.exports = webpackConfig
99 |
--------------------------------------------------------------------------------
/fe/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 |
--------------------------------------------------------------------------------
/fe/config/index.js:
--------------------------------------------------------------------------------
1 | // see http://vuejs-templates.github.io/webpack for documentation.
2 | var path = require('path')
3 |
4 | module.exports = {
5 | build: {
6 | env: require('./prod.env'),
7 | index: path.resolve(__dirname, '../../public/index.html'),
8 | assetsRoot: path.resolve(__dirname, '../../public'),
9 | assetsSubDirectory: 'static',
10 | assetsPublicPath: '/',
11 | productionSourceMap: true,
12 | // Gzip off by default as many popular static hosts such as
13 | // Surge or Netlify already gzip all static assets for you.
14 | // Before setting to `true`, make sure to:
15 | // npm install --save-dev compression-webpack-plugin
16 | productionGzip: false,
17 | productionGzipExtensions: ['js', 'css']
18 | },
19 | dev: {
20 | env: require('./dev.env'),
21 | port: 8080,
22 | assetsSubDirectory: 'static',
23 | assetsPublicPath: '/',
24 | proxyTable: {},
25 | // CSS Sourcemaps off by default because relative paths are "buggy"
26 | // with this option, according to the CSS-Loader README
27 | // (https://github.com/webpack/css-loader#sourcemaps)
28 | // In our experience, they generally work as expected,
29 | // just be aware of this issue when enabling this option.
30 | cssSourceMap: false
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/fe/config/prod.env.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | NODE_ENV: '"production"'
3 | }
4 |
--------------------------------------------------------------------------------
/fe/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 |
--------------------------------------------------------------------------------
/fe/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | GitHub Explorer(Vue)
7 |
8 |
9 |
10 |
26 |
27 |
28 |
29 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/fe/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "github-explorer(vue)",
3 | "version": "1.0.0",
4 | "description": "github-explorer(vue)",
5 | "author": "SidKwok ",
6 | "private": true,
7 | "scripts": {
8 | "dev": "node build/dev-server.js",
9 | "build": "node build/build.js"
10 | },
11 | "dependencies": {
12 | "vue": "^2.1.4"
13 | },
14 | "devDependencies": {
15 | "autoprefixer": "^6.4.0",
16 | "axios": "^0.15.3",
17 | "babel-core": "^6.0.0",
18 | "babel-loader": "^6.0.0",
19 | "babel-plugin-transform-runtime": "^6.0.0",
20 | "babel-preset-es2015": "^6.0.0",
21 | "babel-preset-stage-2": "^6.0.0",
22 | "babel-register": "^6.0.0",
23 | "chalk": "^1.1.3",
24 | "connect-history-api-fallback": "^1.1.0",
25 | "css-loader": "^0.25.0",
26 | "dynamics.js": "^1.1.5",
27 | "eventsource-polyfill": "^0.9.6",
28 | "express": "^4.13.3",
29 | "extract-text-webpack-plugin": "^1.0.1",
30 | "file-loader": "^0.9.0",
31 | "filesize": "^3.3.0",
32 | "font-awesome": "^4.7.0",
33 | "function-bind": "^1.0.2",
34 | "github-markdown-css": "^2.4.1",
35 | "html-webpack-plugin": "^2.8.1",
36 | "http-proxy-middleware": "^0.17.2",
37 | "json-loader": "^0.5.4",
38 | "less": "^2.7.1",
39 | "less-loader": "^2.2.3",
40 | "moment": "^2.17.1",
41 | "opn": "^4.0.2",
42 | "ora": "^0.3.0",
43 | "semver": "^5.3.0",
44 | "shelljs": "^0.7.4",
45 | "url-loader": "^0.5.7",
46 | "vue-loader": "^9.4.0",
47 | "vue-markdown": "^2.1.2",
48 | "vue-router": "^2.1.1",
49 | "vue-style-loader": "^1.0.0",
50 | "vue-template-compiler": "^2.1.4",
51 | "vue2-animate": "^1.0.4",
52 | "vuex": "^2.0.0",
53 | "webpack": "^1.13.2",
54 | "webpack-dev-middleware": "^1.8.3",
55 | "webpack-hot-middleware": "^2.12.2",
56 | "webpack-merge": "^0.14.1"
57 | },
58 | "engines": {
59 | "node": ">= 4.0.0",
60 | "npm": ">= 3.0.0"
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/fe/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
39 |
40 |
128 |
--------------------------------------------------------------------------------
/fe/src/api/index.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 |
3 | const TOKEN = '7bf2b13020e1ed2278db4bba3f5e7a53102cbc37';
4 | const option = {
5 | headers: {
6 | 'Authorization': `token ${TOKEN}`
7 | }
8 | };
9 | const api = url => axios
10 | .get(url, option)
11 | .then(response => response.data);
12 |
13 | export default api;
14 |
--------------------------------------------------------------------------------
/fe/src/assets/colors.json:
--------------------------------------------------------------------------------
1 | {"ABAP":{"type":"programming","color":"#E8274B","extensions":[".abap"],"ace_mode":"abap"},"AGS Script":{"type":"programming","color":"#B9D9FF","aliases":["ags"],"extensions":[".asc",".ash"],"tm_scope":"source.c++","ace_mode":"c_cpp"},"AMPL":{"type":"programming","color":"#E6EFBB","extensions":[".ampl",".mod"],"tm_scope":"source.ampl","ace_mode":"text"},"ANTLR":{"type":"programming","color":"#9DC3FF","extensions":[".g4"],"ace_mode":"text"},"API Blueprint":{"type":"markup","color":"#2ACCA8","ace_mode":"markdown","extensions":[".apib"],"tm_scope":"text.html.markdown.source.gfm.apib"},"APL":{"type":"programming","color":"#5A8164","extensions":[".apl",".dyalog"],"interpreters":["apl","aplx","dyalog"],"tm_scope":"source.apl","ace_mode":"text"},"ASP":{"type":"programming","color":"#6a40fd","search_term":"aspx-vb","tm_scope":"text.html.asp","aliases":["aspx","aspx-vb"],"extensions":[".asp",".asax",".ascx",".ashx",".asmx",".aspx",".axd"],"ace_mode":"text"},"ATS":{"type":"programming","color":"#1ac620","aliases":["ats2"],"extensions":[".dats",".hats",".sats"],"tm_scope":"source.ats","ace_mode":"ocaml"},"ActionScript":{"type":"programming","tm_scope":"source.actionscript.3","color":"#882B0F","search_term":"as3","aliases":["actionscript 3","actionscript3","as3"],"extensions":[".as"],"ace_mode":"actionscript"},"Ada":{"type":"programming","color":"#02f88c","extensions":[".adb",".ada",".ads"],"aliases":["ada95","ada2005"],"ace_mode":"ada"},"Agda":{"type":"programming","color":"#315665","extensions":[".agda"],"ace_mode":"text"},"Alloy":{"type":"programming","color":"#64C800","extensions":[".als"],"ace_mode":"text"},"Alpine Abuild":{"type":"programming","group":"Shell","aliases":["abuild","apkbuild"],"filenames":["APKBUILD"],"tm_scope":"source.shell","ace_mode":"sh"},"Ant Build System":{"type":"data","tm_scope":"text.xml.ant","filenames":["ant.xml","build.xml"],"ace_mode":"xml"},"ApacheConf":{"type":"markup","aliases":["aconf","apache"],"extensions":[".apacheconf",".vhost"],"tm_scope":"source.apache-config","ace_mode":"apache_conf"},"Apex":{"type":"programming","extensions":[".cls"],"tm_scope":"source.java","ace_mode":"java"},"Apollo Guidance Computer":{"type":"programming","color":"#0B3D91","group":"Assembly","extensions":[".agc"],"tm_scope":"source.agc","ace_mode":"assembly_x86"},"AppleScript":{"type":"programming","aliases":["osascript"],"extensions":[".applescript",".scpt"],"interpreters":["osascript"],"ace_mode":"applescript","color":"#101F1F"},"Arc":{"type":"programming","color":"#aa2afe","extensions":[".arc"],"tm_scope":"none","ace_mode":"text"},"Arduino":{"type":"programming","color":"#bd79d1","extensions":[".ino"],"tm_scope":"source.c++","ace_mode":"c_cpp"},"AsciiDoc":{"type":"prose","ace_mode":"asciidoc","wrap":true,"extensions":[".asciidoc",".adoc",".asc"],"tm_scope":"text.html.asciidoc"},"AspectJ":{"type":"programming","color":"#a957b0","extensions":[".aj"],"tm_scope":"source.aspectj","ace_mode":"text"},"Assembly":{"type":"programming","color":"#6E4C13","search_term":"nasm","aliases":["nasm"],"extensions":[".asm",".a51",".inc",".nasm"],"tm_scope":"source.assembly","ace_mode":"assembly_x86"},"Augeas":{"type":"programming","extensions":[".aug"],"tm_scope":"none","ace_mode":"text"},"AutoHotkey":{"type":"programming","color":"#6594b9","aliases":["ahk"],"extensions":[".ahk",".ahkl"],"tm_scope":"source.ahk","ace_mode":"autohotkey"},"AutoIt":{"type":"programming","color":"#1C3552","aliases":["au3","AutoIt3","AutoItScript"],"extensions":[".au3"],"tm_scope":"source.autoit","ace_mode":"autohotkey"},"Awk":{"type":"programming","extensions":[".awk",".auk",".gawk",".mawk",".nawk"],"interpreters":["awk","gawk","mawk","nawk"],"ace_mode":"text"},"Batchfile":{"type":"programming","search_term":"bat","aliases":["bat","batch","dosbatch","winbatch"],"extensions":[".bat",".cmd"],"tm_scope":"source.dosbatch","ace_mode":"batchfile","color":"#C1F12E"},"Befunge":{"type":"programming","extensions":[".befunge"],"ace_mode":"text"},"Bison":{"type":"programming","group":"Yacc","tm_scope":"source.bison","extensions":[".bison"],"ace_mode":"text","color":"#6A463F"},"BitBake":{"type":"programming","tm_scope":"none","extensions":[".bb"],"ace_mode":"text"},"Blade":{"type":"markup","group":"HTML","extensions":[".blade",".blade.php"],"tm_scope":"text.html.php.blade","ace_mode":"text"},"BlitzBasic":{"type":"programming","aliases":["b3d","blitz3d","blitzplus","bplus"],"extensions":[".bb",".decls"],"tm_scope":"source.blitzmax","ace_mode":"text"},"BlitzMax":{"type":"programming","color":"#cd6400","extensions":[".bmx"],"aliases":["bmax"],"ace_mode":"text"},"Bluespec":{"type":"programming","extensions":[".bsv"],"tm_scope":"source.bsv","ace_mode":"verilog"},"Boo":{"type":"programming","color":"#d4bec1","extensions":[".boo"],"ace_mode":"text","tm_scope":"source.boo"},"Brainfuck":{"type":"programming","color":"#2F2530","extensions":[".b",".bf"],"tm_scope":"source.bf","ace_mode":"text"},"Brightscript":{"type":"programming","extensions":[".brs"],"tm_scope":"source.brightscript","ace_mode":"text"},"Bro":{"type":"programming","extensions":[".bro"],"ace_mode":"text"},"C":{"type":"programming","color":"#555555","extensions":[".c",".cats",".h",".idc",".w"],"interpreters":["tcc"],"ace_mode":"c_cpp"},"C#":{"type":"programming","ace_mode":"csharp","tm_scope":"source.cs","search_term":"csharp","color":"#178600","aliases":["csharp"],"extensions":[".cs",".cake",".cshtml",".csx"]},"C++":{"type":"programming","ace_mode":"c_cpp","search_term":"cpp","color":"#f34b7d","aliases":["cpp"],"extensions":[".cpp",".c++",".cc",".cp",".cxx",".h",".h++",".hh",".hpp",".hxx",".inc",".inl",".ipp",".tcc",".tpp"]},"C-ObjDump":{"type":"data","extensions":[".c-objdump"],"tm_scope":"objdump.x86asm","ace_mode":"assembly_x86"},"C2hs Haskell":{"type":"programming","group":"Haskell","aliases":["c2hs"],"extensions":[".chs"],"tm_scope":"source.haskell","ace_mode":"haskell"},"CLIPS":{"type":"programming","extensions":[".clp"],"tm_scope":"source.clips","ace_mode":"text"},"CMake":{"type":"programming","extensions":[".cmake",".cmake.in"],"filenames":["CMakeLists.txt"],"ace_mode":"text"},"COBOL":{"type":"programming","extensions":[".cob",".cbl",".ccp",".cobol",".cpy"],"ace_mode":"cobol"},"COLLADA":{"type":"data","extensions":[".dae"],"tm_scope":"text.xml","ace_mode":"xml"},"CSS":{"type":"markup","tm_scope":"source.css","ace_mode":"css","color":"#563d7c","extensions":[".css"]},"CSV":{"type":"data","ace_mode":"text","tm_scope":"none","extensions":[".csv"]},"Cap'n Proto":{"type":"programming","tm_scope":"source.capnp","extensions":[".capnp"],"ace_mode":"text"},"CartoCSS":{"type":"programming","aliases":["Carto"],"extensions":[".mss"],"ace_mode":"text","tm_scope":"source.css.mss"},"Ceylon":{"type":"programming","extensions":[".ceylon"],"ace_mode":"text"},"Chapel":{"type":"programming","color":"#8dc63f","aliases":["chpl"],"extensions":[".chpl"],"ace_mode":"text"},"Charity":{"type":"programming","extensions":[".ch"],"tm_scope":"none","ace_mode":"text"},"ChucK":{"type":"programming","extensions":[".ck"],"tm_scope":"source.java","ace_mode":"java"},"Cirru":{"type":"programming","color":"#ccccff","ace_mode":"cirru","extensions":[".cirru"]},"Clarion":{"type":"programming","color":"#db901e","ace_mode":"text","extensions":[".clw"],"tm_scope":"source.clarion"},"Clean":{"type":"programming","color":"#3F85AF","extensions":[".icl",".dcl"],"tm_scope":"source.clean","ace_mode":"text"},"Click":{"type":"programming","color":"#E4E6F3","extensions":[".click"],"tm_scope":"source.click","ace_mode":"text"},"Clojure":{"type":"programming","ace_mode":"clojure","color":"#db5855","extensions":[".clj",".boot",".cl2",".cljc",".cljs",".cljs.hl",".cljscm",".cljx",".hic"],"filenames":["riemann.config"]},"CoffeeScript":{"type":"programming","tm_scope":"source.coffee","ace_mode":"coffee","color":"#244776","aliases":["coffee","coffee-script"],"extensions":[".coffee","._coffee",".cake",".cjsx",".cson",".iced"],"filenames":["Cakefile"],"interpreters":["coffee"]},"ColdFusion":{"type":"programming","group":"ColdFusion","ace_mode":"coldfusion","color":"#ed2cd6","search_term":"cfm","aliases":["cfm","cfml","coldfusion html"],"extensions":[".cfm",".cfml"],"tm_scope":"text.html.cfm"},"ColdFusion CFC":{"type":"programming","group":"ColdFusion","ace_mode":"coldfusion","color":"#ed2cd6","search_term":"cfc","aliases":["cfc"],"extensions":[".cfc"],"tm_scope":"source.cfscript"},"Common Lisp":{"type":"programming","tm_scope":"source.lisp","color":"#3fb68b","aliases":["lisp"],"extensions":[".lisp",".asd",".cl",".l",".lsp",".ny",".podsl",".sexp"],"interpreters":["lisp","sbcl","ccl","clisp","ecl"],"ace_mode":"lisp"},"Component Pascal":{"type":"programming","color":"#B0CE4E","extensions":[".cp",".cps"],"tm_scope":"source.pascal","aliases":["delphi","objectpascal"],"ace_mode":"pascal"},"Cool":{"type":"programming","extensions":[".cl"],"tm_scope":"source.cool","ace_mode":"text"},"Coq":{"type":"programming","extensions":[".coq",".v"],"ace_mode":"text"},"Cpp-ObjDump":{"type":"data","extensions":[".cppobjdump",".c++-objdump",".c++objdump",".cpp-objdump",".cxx-objdump"],"tm_scope":"objdump.x86asm","aliases":["c++-objdump"],"ace_mode":"assembly_x86"},"Creole":{"type":"prose","wrap":true,"extensions":[".creole"],"tm_scope":"text.html.creole","ace_mode":"text"},"Crystal":{"type":"programming","color":"#776791","extensions":[".cr"],"ace_mode":"ruby","tm_scope":"source.crystal","interpreters":["crystal"]},"Csound":{"type":"programming","aliases":["csound-orc"],"extensions":[".orc",".udo"],"tm_scope":"source.csound","ace_mode":"text"},"Csound Document":{"type":"programming","aliases":["csound-csd"],"extensions":[".csd"],"tm_scope":"source.csound-document","ace_mode":"text"},"Csound Score":{"type":"programming","aliases":["csound-sco"],"extensions":[".sco"],"tm_scope":"source.csound-score","ace_mode":"text"},"Cucumber":{"type":"programming","extensions":[".feature"],"tm_scope":"text.gherkin.feature","aliases":["gherkin"],"ace_mode":"text","color":"#5B2063"},"Cuda":{"type":"programming","extensions":[".cu",".cuh"],"tm_scope":"source.cuda-c++","ace_mode":"c_cpp","color":"#3A4E3A"},"Cycript":{"type":"programming","extensions":[".cy"],"tm_scope":"source.js","ace_mode":"javascript"},"Cython":{"type":"programming","group":"Python","extensions":[".pyx",".pxd",".pxi"],"aliases":["pyrex"],"ace_mode":"text"},"D":{"type":"programming","color":"#ba595e","extensions":[".d",".di"],"ace_mode":"d"},"D-ObjDump":{"type":"data","extensions":[".d-objdump"],"tm_scope":"objdump.x86asm","ace_mode":"assembly_x86"},"DIGITAL Command Language":{"type":"programming","aliases":["dcl"],"extensions":[".com"],"tm_scope":"none","ace_mode":"text"},"DM":{"type":"programming","color":"#447265","extensions":[".dm"],"aliases":["byond"],"tm_scope":"source.dm","ace_mode":"c_cpp"},"DNS Zone":{"type":"data","extensions":[".zone",".arpa"],"tm_scope":"text.zone_file","ace_mode":"text"},"DTrace":{"type":"programming","aliases":["dtrace-script"],"extensions":[".d"],"interpreters":["dtrace"],"tm_scope":"source.c","ace_mode":"c_cpp"},"Darcs Patch":{"type":"data","search_term":"dpatch","aliases":["dpatch"],"extensions":[".darcspatch",".dpatch"],"tm_scope":"none","ace_mode":"text"},"Dart":{"type":"programming","color":"#00B4AB","extensions":[".dart"],"interpreters":["dart"],"ace_mode":"dart"},"Diff":{"type":"data","extensions":[".diff",".patch"],"aliases":["udiff"],"tm_scope":"source.diff","ace_mode":"diff"},"Dockerfile":{"type":"data","tm_scope":"source.dockerfile","extensions":[".dockerfile"],"filenames":["Dockerfile"],"ace_mode":"dockerfile"},"Dogescript":{"type":"programming","color":"#cca760","extensions":[".djs"],"tm_scope":"none","ace_mode":"text"},"Dylan":{"type":"programming","color":"#6c616e","extensions":[".dylan",".dyl",".intr",".lid"],"ace_mode":"text"},"E":{"type":"programming","color":"#ccce35","extensions":[".E"],"interpreters":["rune"],"tm_scope":"none","ace_mode":"text"},"ECL":{"type":"programming","color":"#8a1267","extensions":[".ecl",".eclxml"],"tm_scope":"none","ace_mode":"text"},"ECLiPSe":{"type":"programming","group":"prolog","extensions":[".ecl"],"tm_scope":"source.prolog.eclipse","ace_mode":"prolog"},"EJS":{"type":"markup","color":"#a91e50","group":"HTML","extensions":[".ejs"],"tm_scope":"text.html.js","ace_mode":"ejs"},"EQ":{"type":"programming","color":"#a78649","extensions":[".eq"],"tm_scope":"source.cs","ace_mode":"csharp"},"Eagle":{"type":"markup","color":"#814C05","extensions":[".sch",".brd"],"tm_scope":"text.xml","ace_mode":"xml"},"Ecere Projects":{"type":"data","group":"JavaScript","extensions":[".epj"],"tm_scope":"source.json","ace_mode":"json"},"Eiffel":{"type":"programming","color":"#946d57","extensions":[".e"],"ace_mode":"eiffel"},"Elixir":{"type":"programming","color":"#6e4a7e","extensions":[".ex",".exs"],"ace_mode":"elixir","filenames":["mix.lock"],"interpreters":["elixir"]},"Elm":{"type":"programming","color":"#60B5CC","extensions":[".elm"],"tm_scope":"source.elm","ace_mode":"elm"},"Emacs Lisp":{"type":"programming","tm_scope":"source.lisp","color":"#c065db","aliases":["elisp","emacs"],"filenames":[".emacs",".emacs.desktop"],"extensions":[".el",".emacs",".emacs.desktop"],"ace_mode":"lisp"},"EmberScript":{"type":"programming","color":"#FFF4F3","extensions":[".em",".emberscript"],"tm_scope":"source.coffee","ace_mode":"coffee"},"Erlang":{"type":"programming","color":"#B83998","extensions":[".erl",".app.src",".es",".escript",".hrl",".xrl",".yrl"],"filenames":["rebar.config","rebar.config.lock","rebar.lock"],"ace_mode":"erlang","interpreters":["escript"]},"F#":{"type":"programming","color":"#b845fc","search_term":"fsharp","aliases":["fsharp"],"extensions":[".fs",".fsi",".fsx"],"tm_scope":"source.fsharp","ace_mode":"text"},"FLUX":{"type":"programming","color":"#88ccff","extensions":[".fx",".flux"],"tm_scope":"none","ace_mode":"text"},"FORTRAN":{"type":"programming","color":"#4d41b1","extensions":[".f90",".f",".f03",".f08",".f77",".f95",".for",".fpp"],"tm_scope":"source.fortran.modern","ace_mode":"text"},"Factor":{"type":"programming","color":"#636746","extensions":[".factor"],"filenames":[".factor-boot-rc",".factor-rc"],"ace_mode":"text"},"Fancy":{"type":"programming","color":"#7b9db4","extensions":[".fy",".fancypack"],"filenames":["Fakefile"],"ace_mode":"text"},"Fantom":{"type":"programming","color":"#dbded5","extensions":[".fan"],"tm_scope":"none","ace_mode":"text"},"Filterscript":{"type":"programming","group":"RenderScript","extensions":[".fs"],"tm_scope":"none","ace_mode":"text"},"Formatted":{"type":"data","extensions":[".for",".eam.fs"],"tm_scope":"none","ace_mode":"text"},"Forth":{"type":"programming","color":"#341708","extensions":[".fth",".4th",".f",".for",".forth",".fr",".frt",".fs"],"ace_mode":"forth"},"FreeMarker":{"type":"programming","color":"#0050b2","aliases":["ftl"],"extensions":[".ftl"],"tm_scope":"text.html.ftl","ace_mode":"ftl"},"Frege":{"type":"programming","color":"#00cafe","extensions":[".fr"],"tm_scope":"source.haskell","ace_mode":"haskell"},"G-code":{"type":"data","extensions":[".g",".gco",".gcode"],"tm_scope":"source.gcode","ace_mode":"gcode"},"GAMS":{"type":"programming","extensions":[".gms"],"tm_scope":"none","ace_mode":"text"},"GAP":{"type":"programming","extensions":[".g",".gap",".gd",".gi",".tst"],"tm_scope":"source.gap","ace_mode":"text"},"GAS":{"type":"programming","group":"Assembly","extensions":[".s",".ms"],"tm_scope":"source.assembly","ace_mode":"assembly_x86"},"GCC Machine Description":{"type":"programming","extensions":[".md"],"tm_scope":"source.lisp","ace_mode":"lisp"},"GDB":{"type":"programming","extensions":[".gdb",".gdbinit"],"tm_scope":"source.gdb","ace_mode":"text"},"GDScript":{"type":"programming","extensions":[".gd"],"tm_scope":"source.gdscript","ace_mode":"text"},"GLSL":{"type":"programming","extensions":[".glsl",".fp",".frag",".frg",".fs",".fsh",".fshader",".geo",".geom",".glslv",".gshader",".shader",".vert",".vrx",".vsh",".vshader"],"ace_mode":"glsl"},"Game Maker Language":{"type":"programming","color":"#8fb200","extensions":[".gml"],"tm_scope":"source.c++","ace_mode":"c_cpp"},"Genshi":{"type":"programming","extensions":[".kid"],"tm_scope":"text.xml.genshi","aliases":["xml+genshi","xml+kid"],"ace_mode":"xml"},"Gentoo Ebuild":{"type":"programming","group":"Shell","extensions":[".ebuild"],"tm_scope":"source.shell","ace_mode":"sh"},"Gentoo Eclass":{"type":"programming","group":"Shell","extensions":[".eclass"],"tm_scope":"source.shell","ace_mode":"sh"},"Gettext Catalog":{"type":"prose","search_term":"pot","searchable":false,"aliases":["pot"],"extensions":[".po",".pot"],"tm_scope":"source.po","ace_mode":"text"},"Glyph":{"type":"programming","color":"#e4cc98","extensions":[".glf"],"tm_scope":"source.tcl","ace_mode":"tcl"},"Gnuplot":{"type":"programming","color":"#f0a9f0","extensions":[".gp",".gnu",".gnuplot",".plot",".plt"],"interpreters":["gnuplot"],"ace_mode":"text"},"Go":{"type":"programming","color":"#375eab","extensions":[".go"],"ace_mode":"golang"},"Golo":{"type":"programming","color":"#88562A","extensions":[".golo"],"tm_scope":"source.golo","ace_mode":"text"},"Gosu":{"type":"programming","color":"#82937f","extensions":[".gs",".gst",".gsx",".vark"],"tm_scope":"source.gosu.2","ace_mode":"text"},"Grace":{"type":"programming","extensions":[".grace"],"tm_scope":"source.grace","ace_mode":"text"},"Gradle":{"type":"data","extensions":[".gradle"],"tm_scope":"source.groovy.gradle","ace_mode":"text"},"Grammatical Framework":{"type":"programming","aliases":["gf"],"wrap":false,"extensions":[".gf"],"searchable":true,"color":"#79aa7a","tm_scope":"source.haskell","ace_mode":"haskell"},"Graph Modeling Language":{"type":"data","extensions":[".gml"],"tm_scope":"none","ace_mode":"text"},"GraphQL":{"type":"data","extensions":[".graphql"],"tm_scope":"source.graphql","ace_mode":"text"},"Graphviz (DOT)":{"type":"data","tm_scope":"source.dot","extensions":[".dot",".gv"],"ace_mode":"text"},"Groff":{"type":"markup","color":"#ecdebe","extensions":[".man",".1",".1in",".1m",".1x",".2",".3",".3in",".3m",".3qt",".3x",".4",".5",".6",".7",".8",".9",".l",".me",".ms",".n",".rno",".roff",".tmac"],"filenames":["mmn","mmt"],"tm_scope":"text.roff","aliases":["nroff","troff"],"ace_mode":"text"},"Groovy":{"type":"programming","ace_mode":"groovy","color":"#e69f56","extensions":[".groovy",".grt",".gtpl",".gvy"],"interpreters":["groovy"],"filenames":["Jenkinsfile"]},"Groovy Server Pages":{"type":"programming","group":"Groovy","aliases":["gsp","java server page"],"extensions":[".gsp"],"tm_scope":"text.html.jsp","ace_mode":"jsp"},"HCL":{"type":"programming","extensions":[".hcl",".tf"],"ace_mode":"ruby","tm_scope":"source.ruby"},"HLSL":{"type":"programming","extensions":[".hlsl",".fx",".fxh",".hlsli"],"ace_mode":"text","tm_scope":"none"},"HTML":{"type":"markup","tm_scope":"text.html.basic","ace_mode":"html","color":"#e44b23","aliases":["xhtml"],"extensions":[".html",".htm",".html.hl",".inc",".st",".xht",".xhtml"]},"HTML+Django":{"type":"markup","tm_scope":"text.html.django","group":"HTML","extensions":[".mustache",".jinja"],"aliases":["django","html+django/jinja","html+jinja","htmldjango"],"ace_mode":"django"},"HTML+ECR":{"type":"markup","tm_scope":"text.html.ecr","group":"HTML","aliases":["ecr"],"extensions":[".ecr"],"ace_mode":"text"},"HTML+EEX":{"type":"markup","tm_scope":"text.html.elixir","group":"HTML","aliases":["eex"],"extensions":[".eex"],"ace_mode":"text"},"HTML+ERB":{"type":"markup","tm_scope":"text.html.erb","group":"HTML","aliases":["erb"],"extensions":[".erb",".erb.deface"],"ace_mode":"text"},"HTML+PHP":{"type":"markup","tm_scope":"text.html.php","group":"HTML","extensions":[".phtml"],"ace_mode":"php"},"HTTP":{"type":"data","extensions":[".http"],"tm_scope":"source.httpspec","ace_mode":"text"},"Hack":{"type":"programming","ace_mode":"php","extensions":[".hh",".php"],"tm_scope":"text.html.php","color":"#878787"},"Haml":{"group":"HTML","type":"markup","extensions":[".haml",".haml.deface"],"ace_mode":"haml","color":"#ECE2A9"},"Handlebars":{"type":"markup","color":"#01a9d6","group":"HTML","aliases":["hbs","htmlbars"],"extensions":[".handlebars",".hbs"],"tm_scope":"text.html.handlebars","ace_mode":"handlebars"},"Harbour":{"type":"programming","color":"#0e60e3","extensions":[".hb"],"tm_scope":"source.harbour","ace_mode":"text"},"Haskell":{"type":"programming","color":"#29b544","extensions":[".hs",".hsc"],"interpreters":["runhaskell"],"ace_mode":"haskell"},"Haxe":{"type":"programming","ace_mode":"haxe","color":"#df7900","extensions":[".hx",".hxsl"],"tm_scope":"source.haxe.2"},"Hy":{"type":"programming","ace_mode":"text","color":"#7790B2","extensions":[".hy"],"aliases":["hylang"],"tm_scope":"source.hy"},"HyPhy":{"type":"programming","ace_mode":"text","extensions":[".bf"],"tm_scope":"none"},"IDL":{"type":"programming","color":"#a3522f","extensions":[".pro",".dlm"],"ace_mode":"text"},"IGOR Pro":{"type":"programming","extensions":[".ipf"],"aliases":["igor","igorpro"],"tm_scope":"none","ace_mode":"text"},"INI":{"type":"data","extensions":[".ini",".cfg",".prefs",".pro",".properties"],"tm_scope":"source.ini","aliases":["dosini"],"ace_mode":"ini"},"IRC log":{"type":"data","search_term":"irc","aliases":["irc","irc logs"],"extensions":[".irclog",".weechatlog"],"tm_scope":"none","ace_mode":"text"},"Idris":{"type":"programming","extensions":[".idr",".lidr"],"ace_mode":"text","tm_scope":"source.idris"},"Inform 7":{"type":"programming","wrap":true,"extensions":[".ni",".i7x"],"tm_scope":"source.inform7","aliases":["i7","inform7"],"ace_mode":"text"},"Inno Setup":{"type":"programming","extensions":[".iss"],"tm_scope":"none","ace_mode":"text"},"Io":{"type":"programming","color":"#a9188d","extensions":[".io"],"interpreters":["io"],"ace_mode":"io"},"Ioke":{"type":"programming","color":"#078193","extensions":[".ik"],"interpreters":["ioke"],"ace_mode":"text"},"Isabelle":{"type":"programming","color":"#FEFE00","extensions":[".thy"],"tm_scope":"source.isabelle.theory","ace_mode":"text"},"Isabelle ROOT":{"type":"programming","group":"Isabelle","filenames":["ROOT"],"tm_scope":"source.isabelle.root","ace_mode":"text"},"J":{"type":"programming","color":"#9EEDFF","extensions":[".ijs"],"interpreters":["jconsole"],"tm_scope":"source.j","ace_mode":"text"},"JFlex":{"type":"programming","color":"#DBCA00","group":"Lex","extensions":[".flex",".jflex"],"tm_scope":"source.jflex","ace_mode":"text"},"JSON":{"type":"data","tm_scope":"source.json","group":"JavaScript","ace_mode":"json","searchable":false,"extensions":[".json",".geojson",".JSON-tmLanguage",".topojson"],"filenames":[".arcconfig",".jshintrc","composer.lock","mcmod.info"]},"JSON5":{"type":"data","extensions":[".json5"],"tm_scope":"source.js","ace_mode":"javascript"},"JSONLD":{"type":"data","group":"JavaScript","ace_mode":"javascript","extensions":[".jsonld"],"tm_scope":"source.js"},"JSONiq":{"color":"#40d47e","type":"programming","ace_mode":"jsoniq","extensions":[".jq"],"tm_scope":"source.jq"},"JSX":{"type":"programming","group":"JavaScript","extensions":[".jsx"],"tm_scope":"source.js.jsx","ace_mode":"javascript"},"Jade":{"group":"HTML","type":"markup","extensions":[".jade",".pug"],"tm_scope":"text.jade","ace_mode":"jade"},"Jasmin":{"type":"programming","ace_mode":"java","extensions":[".j"],"tm_scope":"source.jasmin"},"Java":{"type":"programming","ace_mode":"java","color":"#b07219","extensions":[".java"]},"Java Server Pages":{"type":"programming","group":"Java","search_term":"jsp","aliases":["jsp"],"extensions":[".jsp"],"tm_scope":"text.html.jsp","ace_mode":"jsp"},"JavaScript":{"type":"programming","tm_scope":"source.js","ace_mode":"javascript","color":"#f1e05a","aliases":["js","node"],"extensions":[".js","._js",".bones",".es",".es6",".frag",".gs",".jake",".jsb",".jscad",".jsfl",".jsm",".jss",".njs",".pac",".sjs",".ssjs",".sublime-build",".sublime-commands",".sublime-completions",".sublime-keymap",".sublime-macro",".sublime-menu",".sublime-mousemap",".sublime-project",".sublime-settings",".sublime-theme",".sublime-workspace",".sublime_metrics",".sublime_session",".xsjs",".xsjslib"],"filenames":["Jakefile"],"interpreters":["node"]},"Julia":{"type":"programming","extensions":[".jl"],"color":"#a270ba","ace_mode":"julia"},"Jupyter Notebook":{"type":"markup","ace_mode":"json","tm_scope":"source.json","color":"#DA5B0B","extensions":[".ipynb"],"filenames":["Notebook"],"aliases":["IPython Notebook"]},"KRL":{"type":"programming","color":"#28431f","extensions":[".krl"],"tm_scope":"none","ace_mode":"text"},"KiCad":{"type":"programming","extensions":[".sch",".brd",".kicad_pcb"],"tm_scope":"none","ace_mode":"text"},"Kit":{"type":"markup","ace_mode":"html","extensions":[".kit"],"tm_scope":"text.html.basic"},"Kotlin":{"type":"programming","color":"#F18E33","extensions":[".kt",".ktm",".kts"],"tm_scope":"source.Kotlin","ace_mode":"text"},"LFE":{"type":"programming","extensions":[".lfe"],"color":"#004200","group":"Erlang","tm_scope":"source.lisp","ace_mode":"lisp"},"LLVM":{"type":"programming","extensions":[".ll"],"ace_mode":"text","color":"#185619"},"LOLCODE":{"type":"programming","extensions":[".lol"],"color":"#cc9900","tm_scope":"none","ace_mode":"text"},"LSL":{"type":"programming","ace_mode":"lsl","extensions":[".lsl",".lslp"],"interpreters":["lsl"],"color":"#3d9970"},"LabVIEW":{"type":"programming","extensions":[".lvproj"],"tm_scope":"text.xml","ace_mode":"xml"},"Lasso":{"type":"programming","color":"#999999","extensions":[".lasso",".las",".lasso8",".lasso9",".ldml"],"tm_scope":"file.lasso","aliases":["lassoscript"],"ace_mode":"text"},"Latte":{"type":"markup","color":"#A8FF97","group":"HTML","extensions":[".latte"],"tm_scope":"text.html.smarty","ace_mode":"smarty"},"Lean":{"type":"programming","extensions":[".lean",".hlean"],"ace_mode":"text"},"Less":{"type":"markup","group":"CSS","extensions":[".less"],"tm_scope":"source.css.less","ace_mode":"less","color":"#A1D9A1"},"Lex":{"type":"programming","color":"#DBCA00","aliases":["flex"],"extensions":[".l",".lex"],"tm_scope":"none","ace_mode":"text"},"LilyPond":{"type":"programming","extensions":[".ly",".ily"],"ace_mode":"text"},"Limbo":{"type":"programming","extensions":[".b",".m"],"tm_scope":"none","ace_mode":"text"},"Linker Script":{"type":"data","extensions":[".ld",".lds"],"filenames":["ld.script"],"tm_scope":"none","ace_mode":"text"},"Linux Kernel Module":{"type":"data","extensions":[".mod"],"tm_scope":"none","ace_mode":"text"},"Liquid":{"type":"markup","extensions":[".liquid"],"tm_scope":"text.html.liquid","ace_mode":"liquid"},"Literate Agda":{"type":"programming","group":"Agda","extensions":[".lagda"],"tm_scope":"none","ace_mode":"text"},"Literate CoffeeScript":{"type":"programming","tm_scope":"source.litcoffee","group":"CoffeeScript","ace_mode":"text","wrap":true,"search_term":"litcoffee","aliases":["litcoffee"],"extensions":[".litcoffee"]},"Literate Haskell":{"type":"programming","group":"Haskell","search_term":"lhs","aliases":["lhaskell","lhs"],"extensions":[".lhs"],"tm_scope":"text.tex.latex.haskell","ace_mode":"text"},"LiveScript":{"type":"programming","color":"#499886","aliases":["live-script","ls"],"extensions":[".ls","._ls"],"filenames":["Slakefile"],"ace_mode":"livescript"},"Logos":{"type":"programming","extensions":[".xm",".x",".xi"],"ace_mode":"text","tm_scope":"source.logos"},"Logtalk":{"type":"programming","extensions":[".lgt",".logtalk"],"ace_mode":"text"},"LookML":{"type":"programming","ace_mode":"yaml","color":"#652B81","extensions":[".lookml"],"tm_scope":"source.yaml"},"LoomScript":{"type":"programming","extensions":[".ls"],"tm_scope":"source.loomscript","ace_mode":"text"},"Lua":{"type":"programming","ace_mode":"lua","color":"#000080","extensions":[".lua",".fcgi",".nse",".pd_lua",".rbxs",".wlua"],"interpreters":["lua"]},"M":{"type":"programming","aliases":["mumps"],"extensions":[".mumps",".m"],"tm_scope":"source.lisp","ace_mode":"lisp"},"M4":{"type":"programming","extensions":[".m4"],"tm_scope":"none","ace_mode":"text"},"M4Sugar":{"type":"programming","group":"M4","aliases":["autoconf"],"extensions":[".m4"],"filenames":["configure.ac"],"tm_scope":"none","ace_mode":"text"},"MAXScript":{"type":"programming","color":"#00a6a6","extensions":[".ms",".mcr"],"tm_scope":"source.maxscript","ace_mode":"text"},"MTML":{"type":"markup","color":"#b7e1f4","extensions":[".mtml"],"tm_scope":"text.html.basic","ace_mode":"html"},"MUF":{"type":"programming","group":"Forth","extensions":[".muf",".m"],"tm_scope":"none","ace_mode":"forth"},"Makefile":{"type":"programming","color":"#427819","aliases":["bsdmake","make","mf"],"extensions":[".mak",".d",".mk",".mkfile"],"filenames":["BSDmakefile","GNUmakefile","Kbuild","Makefile","Makefile.am","Makefile.frag","Makefile.in","Makefile.inc","makefile","makefile.sco","mkfile"],"interpreters":["make"],"ace_mode":"makefile"},"Mako":{"type":"programming","extensions":[".mako",".mao"],"tm_scope":"text.html.mako","ace_mode":"text"},"Markdown":{"type":"prose","ace_mode":"markdown","wrap":true,"extensions":[".md",".markdown",".mkd",".mkdn",".mkdown",".ron"],"tm_scope":"source.gfm"},"Mask":{"type":"markup","color":"#f97732","ace_mode":"mask","extensions":[".mask"],"tm_scope":"source.mask"},"Mathematica":{"type":"programming","extensions":[".mathematica",".cdf",".m",".ma",".mt",".nb",".nbp",".wl",".wlt"],"aliases":["mma"],"ace_mode":"text"},"Matlab":{"type":"programming","color":"#bb92ac","aliases":["octave"],"extensions":[".matlab",".m"],"ace_mode":"matlab"},"Maven POM":{"type":"data","tm_scope":"text.xml.pom","filenames":["pom.xml"],"ace_mode":"xml"},"Max":{"type":"programming","color":"#c4a79c","aliases":["max/msp","maxmsp"],"search_term":"max/msp","extensions":[".maxpat",".maxhelp",".maxproj",".mxt",".pat"],"tm_scope":"source.json","ace_mode":"json"},"MediaWiki":{"type":"prose","wrap":true,"extensions":[".mediawiki",".wiki"],"tm_scope":"text.html.mediawiki","ace_mode":"text"},"Mercury":{"type":"programming","color":"#ff2b2b","ace_mode":"prolog","interpreters":["mmi"],"extensions":[".m",".moo"],"tm_scope":"source.mercury"},"Metal":{"type":"programming","color":"#8f14e9","extensions":[".metal"],"tm_scope":"source.c++","ace_mode":"c_cpp"},"MiniD":{"type":"programming","searchable":false,"extensions":[".minid"],"tm_scope":"none","ace_mode":"text"},"Mirah":{"type":"programming","search_term":"mirah","color":"#c7a938","extensions":[".druby",".duby",".mir",".mirah"],"tm_scope":"source.ruby","ace_mode":"ruby"},"Modelica":{"type":"programming","extensions":[".mo"],"tm_scope":"source.modelica","ace_mode":"text"},"Modula-2":{"type":"programming","extensions":[".mod"],"tm_scope":"source.modula2","ace_mode":"text"},"Module Management System":{"type":"programming","extensions":[".mms",".mmk"],"filenames":["descrip.mmk","descrip.mms"],"tm_scope":"none","ace_mode":"text"},"Monkey":{"type":"programming","extensions":[".monkey"],"ace_mode":"text","tm_scope":"source.monkey"},"Moocode":{"type":"programming","extensions":[".moo"],"tm_scope":"none","ace_mode":"text"},"MoonScript":{"type":"programming","extensions":[".moon"],"interpreters":["moon"],"ace_mode":"text"},"Myghty":{"type":"programming","extensions":[".myt"],"tm_scope":"none","ace_mode":"text"},"NCL":{"type":"programming","color":"#28431f","extensions":[".ncl"],"tm_scope":"source.ncl","ace_mode":"text"},"NL":{"type":"data","extensions":[".nl"],"tm_scope":"none","ace_mode":"text"},"NSIS":{"type":"programming","extensions":[".nsi",".nsh"],"ace_mode":"text"},"Nemerle":{"type":"programming","color":"#3d3c6e","extensions":[".n"],"ace_mode":"text"},"NetLinx":{"type":"programming","color":"#0aa0ff","extensions":[".axs",".axi"],"tm_scope":"source.netlinx","ace_mode":"text"},"NetLinx+ERB":{"type":"programming","color":"#747faa","extensions":[".axs.erb",".axi.erb"],"tm_scope":"source.netlinx.erb","ace_mode":"text"},"NetLogo":{"type":"programming","color":"#ff6375","extensions":[".nlogo"],"tm_scope":"source.lisp","ace_mode":"lisp"},"NewLisp":{"type":"programming","lexer":"NewLisp","color":"#87AED7","extensions":[".nl",".lisp",".lsp"],"interpreters":["newlisp"],"tm_scope":"source.lisp","ace_mode":"lisp"},"Nginx":{"type":"markup","extensions":[".nginxconf",".vhost"],"filenames":["nginx.conf"],"tm_scope":"source.nginx","aliases":["nginx configuration file"],"ace_mode":"text","color":"#9469E9"},"Nimrod":{"type":"programming","color":"#37775b","extensions":[".nim",".nimrod"],"ace_mode":"text","tm_scope":"source.nim"},"Ninja":{"type":"data","tm_scope":"source.ninja","extensions":[".ninja"],"ace_mode":"text"},"Nit":{"type":"programming","color":"#009917","extensions":[".nit"],"tm_scope":"source.nit","ace_mode":"text"},"Nix":{"type":"programming","color":"#7e7eff","extensions":[".nix"],"aliases":["nixos"],"tm_scope":"source.nix","ace_mode":"nix"},"Nu":{"type":"programming","color":"#c9df40","aliases":["nush"],"extensions":[".nu"],"filenames":["Nukefile"],"tm_scope":"source.nu","ace_mode":"scheme","interpreters":["nush"]},"NumPy":{"type":"programming","group":"Python","extensions":[".numpy",".numpyw",".numsc"],"tm_scope":"none","ace_mode":"text","color":"#9C8AF9"},"OCaml":{"type":"programming","ace_mode":"ocaml","color":"#3be133","extensions":[".ml",".eliom",".eliomi",".ml4",".mli",".mll",".mly"],"interpreters":["ocaml","ocamlrun","ocamlscript"],"tm_scope":"source.ocaml"},"ObjDump":{"type":"data","extensions":[".objdump"],"tm_scope":"objdump.x86asm","ace_mode":"assembly_x86"},"Objective-C":{"type":"programming","tm_scope":"source.objc","color":"#438eff","aliases":["obj-c","objc","objectivec"],"extensions":[".m",".h"],"ace_mode":"objectivec"},"Objective-C++":{"type":"programming","tm_scope":"source.objc++","color":"#6866fb","aliases":["obj-c++","objc++","objectivec++"],"extensions":[".mm"],"ace_mode":"objectivec"},"Objective-J":{"type":"programming","color":"#ff0c5a","aliases":["obj-j","objectivej","objj"],"extensions":[".j",".sj"],"tm_scope":"source.js.objj","ace_mode":"text"},"Omgrofl":{"type":"programming","extensions":[".omgrofl"],"color":"#cabbff","tm_scope":"none","ace_mode":"text"},"Opa":{"type":"programming","extensions":[".opa"],"ace_mode":"text"},"Opal":{"type":"programming","color":"#f7ede0","extensions":[".opal"],"tm_scope":"source.opal","ace_mode":"text"},"OpenCL":{"type":"programming","group":"C","extensions":[".cl",".opencl"],"tm_scope":"source.c","ace_mode":"c_cpp"},"OpenEdge ABL":{"type":"programming","aliases":["progress","openedge","abl"],"extensions":[".p",".cls"],"tm_scope":"source.abl","ace_mode":"text"},"OpenRC runscript":{"type":"programming","group":"Shell","aliases":["openrc"],"interpreters":["openrc-run"],"tm_scope":"source.shell","ace_mode":"sh"},"OpenSCAD":{"type":"programming","extensions":[".scad"],"tm_scope":"none","ace_mode":"scad"},"Org":{"type":"prose","wrap":true,"extensions":[".org"],"tm_scope":"none","ace_mode":"text"},"Ox":{"type":"programming","extensions":[".ox",".oxh",".oxo"],"tm_scope":"source.ox","ace_mode":"text"},"Oxygene":{"type":"programming","color":"#cdd0e3","extensions":[".oxygene"],"tm_scope":"none","ace_mode":"text"},"Oz":{"type":"programming","color":"#fab738","extensions":[".oz"],"tm_scope":"source.oz","ace_mode":"text"},"PAWN":{"type":"programming","color":"#dbb284","extensions":[".pwn",".inc"],"tm_scope":"source.pawn","ace_mode":"text"},"PHP":{"type":"programming","tm_scope":"text.html.php","ace_mode":"php","color":"#4F5D95","extensions":[".php",".aw",".ctp",".fcgi",".inc",".php3",".php4",".php5",".phps",".phpt"],"filenames":["Phakefile"],"interpreters":["php"],"aliases":["inc"]},"PLSQL":{"type":"programming","ace_mode":"sql","tm_scope":"none","color":"#dad8d8","extensions":[".pls",".pck",".pkb",".pks",".plb",".plsql",".sql"]},"PLpgSQL":{"type":"programming","ace_mode":"pgsql","tm_scope":"source.sql","extensions":[".sql"]},"POV-Ray SDL":{"type":"programming","aliases":["pov-ray","povray"],"extensions":[".pov",".inc"],"ace_mode":"text"},"Pan":{"type":"programming","color":"#cc0000","extensions":[".pan"],"tm_scope":"none","ace_mode":"text"},"Papyrus":{"type":"programming","color":"#6600cc","extensions":[".psc"],"tm_scope":"source.papyrus.skyrim","ace_mode":"text"},"Parrot":{"type":"programming","color":"#f3ca0a","extensions":[".parrot"],"tm_scope":"none","ace_mode":"text"},"Parrot Assembly":{"group":"Parrot","type":"programming","aliases":["pasm"],"extensions":[".pasm"],"interpreters":["parrot"],"tm_scope":"none","ace_mode":"text"},"Parrot Internal Representation":{"group":"Parrot","tm_scope":"source.parrot.pir","type":"programming","aliases":["pir"],"extensions":[".pir"],"interpreters":["parrot"],"ace_mode":"text"},"Pascal":{"type":"programming","color":"#E3F171","extensions":[".pas",".dfm",".dpr",".inc",".lpr",".pascal",".pp"],"interpreters":["instantfpc"],"ace_mode":"pascal"},"Perl":{"type":"programming","tm_scope":"source.perl","ace_mode":"perl","color":"#0298c3","extensions":[".pl",".al",".cgi",".fcgi",".perl",".ph",".plx",".pm",".pod",".psgi",".t"],"interpreters":["perl"]},"Perl6":{"type":"programming","color":"#0000fb","extensions":[".6pl",".6pm",".nqp",".p6",".p6l",".p6m",".pl",".pl6",".pm",".pm6",".t"],"filenames":["Rexfile"],"interpreters":["perl6"],"tm_scope":"source.perl6fe","ace_mode":"perl"},"Pickle":{"type":"data","extensions":[".pkl"],"tm_scope":"none","ace_mode":"text"},"PicoLisp":{"type":"programming","extensions":[".l"],"interpreters":["picolisp","pil"],"tm_scope":"source.lisp","ace_mode":"lisp"},"PigLatin":{"type":"programming","color":"#fcd7de","extensions":[".pig"],"tm_scope":"source.pig_latin","ace_mode":"text"},"Pike":{"type":"programming","color":"#005390","extensions":[".pike",".pmod"],"interpreters":["pike"],"ace_mode":"text"},"Pod":{"type":"prose","ace_mode":"perl","wrap":true,"extensions":[".pod"],"tm_scope":"none"},"PogoScript":{"type":"programming","color":"#d80074","extensions":[".pogo"],"tm_scope":"source.pogoscript","ace_mode":"text"},"Pony":{"type":"programming","extensions":[".pony"],"tm_scope":"source.pony","ace_mode":"text"},"PostScript":{"type":"markup","color":"#da291c","extensions":[".ps",".eps"],"tm_scope":"source.postscript","aliases":["postscr"],"ace_mode":"text"},"PowerBuilder":{"type":"programming","color":"#8f0f8d","extensions":[".pbt",".sra",".sru",".srw"],"tm_scope":"none","ace_mode":"text"},"PowerShell":{"type":"programming","ace_mode":"powershell","aliases":["posh"],"extensions":[".ps1",".psd1",".psm1"]},"Processing":{"type":"programming","color":"#0096D8","extensions":[".pde"],"ace_mode":"text"},"Prolog":{"type":"programming","color":"#74283c","extensions":[".pl",".pro",".prolog",".yap"],"interpreters":["swipl","yap"],"tm_scope":"source.prolog","ace_mode":"prolog"},"Propeller Spin":{"type":"programming","color":"#7fa2a7","extensions":[".spin"],"tm_scope":"source.spin","ace_mode":"text"},"Protocol Buffer":{"type":"markup","aliases":["protobuf","Protocol Buffers"],"extensions":[".proto"],"tm_scope":"source.protobuf","ace_mode":"protobuf"},"Public Key":{"type":"data","extensions":[".asc",".pub"],"tm_scope":"none","ace_mode":"text"},"Puppet":{"type":"programming","color":"#302B6D","extensions":[".pp"],"filenames":["Modulefile"],"ace_mode":"text","tm_scope":"source.puppet"},"Pure Data":{"type":"programming","color":"#91de79","extensions":[".pd"],"tm_scope":"none","ace_mode":"text"},"PureBasic":{"type":"programming","color":"#5a6986","extensions":[".pb",".pbi"],"tm_scope":"none","ace_mode":"text"},"PureScript":{"type":"programming","color":"#1D222D","extensions":[".purs"],"tm_scope":"source.purescript","ace_mode":"haskell"},"Python":{"type":"programming","ace_mode":"python","color":"#3572A5","extensions":[".py",".bzl",".cgi",".fcgi",".gyp",".lmi",".pyde",".pyp",".pyt",".pyw",".rpy",".tac",".wsgi",".xpy"],"filenames":["BUCK","BUILD","SConscript","SConstruct","Snakefile","wscript"],"interpreters":["python","python2","python3"],"aliases":["rusthon"]},"Python traceback":{"type":"data","group":"Python","searchable":false,"extensions":[".pytb"],"tm_scope":"text.python.traceback","ace_mode":"text"},"QML":{"type":"programming","color":"#44a51c","extensions":[".qml",".qbs"],"tm_scope":"source.qml","ace_mode":"text"},"QMake":{"type":"programming","extensions":[".pro",".pri"],"interpreters":["qmake"],"ace_mode":"text"},"R":{"type":"programming","color":"#198CE7","aliases":["R","Rscript","splus"],"extensions":[".r",".rd",".rsx"],"filenames":[".Rprofile"],"interpreters":["Rscript"],"ace_mode":"r"},"RAML":{"type":"markup","ace_mode":"yaml","tm_scope":"source.yaml","color":"#77d9fb","extensions":[".raml"]},"RDoc":{"type":"prose","ace_mode":"rdoc","wrap":true,"extensions":[".rdoc"],"tm_scope":"text.rdoc"},"REALbasic":{"type":"programming","extensions":[".rbbas",".rbfrm",".rbmnu",".rbres",".rbtbar",".rbuistate"],"tm_scope":"source.vbnet","ace_mode":"text"},"REXX":{"type":"programming","aliases":["arexx"],"extensions":[".rexx",".pprx",".rex"],"tm_scope":"none","ace_mode":"text"},"RHTML":{"type":"markup","group":"HTML","extensions":[".rhtml"],"tm_scope":"text.html.erb","aliases":["html+ruby"],"ace_mode":"rhtml"},"RMarkdown":{"type":"prose","wrap":true,"ace_mode":"markdown","extensions":[".rmd"],"tm_scope":"source.gfm"},"RUNOFF":{"type":"markup","color":"#665a4e","extensions":[".rnh",".rno"],"tm_scope":"text.runoff","ace_mode":"text"},"Racket":{"type":"programming","color":"#22228f","extensions":[".rkt",".rktd",".rktl",".scrbl"],"interpreters":["racket"],"tm_scope":"source.racket","ace_mode":"lisp"},"Ragel in Ruby Host":{"type":"programming","color":"#9d5200","extensions":[".rl"],"aliases":["ragel-rb","ragel-ruby"],"tm_scope":"none","ace_mode":"text"},"Raw token data":{"type":"data","search_term":"raw","aliases":["raw"],"extensions":[".raw"],"tm_scope":"none","ace_mode":"text"},"Rebol":{"type":"programming","color":"#358a5b","extensions":[".reb",".r",".r2",".r3",".rebol"],"ace_mode":"text","tm_scope":"source.rebol"},"Red":{"type":"programming","color":"#f50000","extensions":[".red",".reds"],"aliases":["red/system"],"tm_scope":"source.red","ace_mode":"text"},"Redcode":{"type":"programming","extensions":[".cw"],"tm_scope":"none","ace_mode":"text"},"Ren'Py":{"type":"programming","aliases":["renpy"],"color":"#ff7f7f","extensions":[".rpy"],"tm_scope":"source.renpy","ace_mode":"python"},"RenderScript":{"type":"programming","extensions":[".rs",".rsh"],"tm_scope":"none","ace_mode":"text"},"RobotFramework":{"type":"programming","extensions":[".robot"],"tm_scope":"text.robot","ace_mode":"text"},"Rouge":{"type":"programming","ace_mode":"clojure","color":"#cc0088","extensions":[".rg"],"tm_scope":"source.clojure"},"Ruby":{"type":"programming","ace_mode":"ruby","color":"#701516","aliases":["jruby","macruby","rake","rb","rbx"],"extensions":[".rb",".builder",".fcgi",".gemspec",".god",".irbrc",".jbuilder",".mspec",".pluginspec",".podspec",".rabl",".rake",".rbuild",".rbw",".rbx",".ru",".ruby",".thor",".watchr"],"interpreters":["ruby","macruby","rake","jruby","rbx"],"filenames":[".pryrc","Appraisals","Berksfile","Brewfile","Buildfile","Deliverfile","Fastfile","Gemfile","Gemfile.lock","Guardfile","Jarfile","Mavenfile","Podfile","Puppetfile","Snapfile","Thorfile","Vagrantfile","buildfile"]},"Rust":{"type":"programming","color":"#dea584","extensions":[".rs",".rs.in"],"ace_mode":"rust"},"SAS":{"type":"programming","color":"#B34936","extensions":[".sas"],"tm_scope":"source.sas","ace_mode":"text"},"SCSS":{"type":"markup","tm_scope":"source.scss","group":"CSS","ace_mode":"scss","extensions":[".scss"],"color":"#CF649A"},"SMT":{"type":"programming","extensions":[".smt2",".smt"],"interpreters":["boolector","cvc4","mathsat5","opensmt","smtinterpol","smt-rat","stp","verit","yices2","z3"],"tm_scope":"source.smt","ace_mode":"text"},"SPARQL":{"type":"data","tm_scope":"source.sparql","ace_mode":"text","extensions":[".sparql",".rq"]},"SQF":{"type":"programming","color":"#3F3F3F","extensions":[".sqf",".hqf"],"tm_scope":"source.sqf","ace_mode":"text"},"SQL":{"type":"data","tm_scope":"source.sql","ace_mode":"sql","extensions":[".sql",".cql",".ddl",".inc",".prc",".tab",".udf",".viw"]},"SQLPL":{"type":"programming","ace_mode":"sql","tm_scope":"source.sql","extensions":[".sql",".db2"]},"SRecode Template":{"type":"markup","color":"#348a34","tm_scope":"source.lisp","ace_mode":"lisp","extensions":[".srt"]},"STON":{"type":"data","group":"Smalltalk","extensions":[".ston"],"tm_scope":"source.smalltalk","ace_mode":"text"},"SVG":{"type":"data","extensions":[".svg"],"tm_scope":"text.xml","ace_mode":"xml"},"Sage":{"type":"programming","group":"Python","extensions":[".sage",".sagews"],"tm_scope":"source.python","ace_mode":"python"},"SaltStack":{"type":"programming","color":"#646464","aliases":["saltstate","salt"],"extensions":[".sls"],"tm_scope":"source.yaml.salt","ace_mode":"yaml"},"Sass":{"type":"markup","tm_scope":"source.sass","group":"CSS","extensions":[".sass"],"ace_mode":"sass","color":"#CF649A"},"Scala":{"type":"programming","ace_mode":"scala","color":"#c22d40","extensions":[".scala",".sbt",".sc"],"interpreters":["scala"]},"Scaml":{"group":"HTML","type":"markup","extensions":[".scaml"],"tm_scope":"source.scaml","ace_mode":"text"},"Scheme":{"type":"programming","color":"#1e4aec","extensions":[".scm",".sld",".sls",".sps",".ss"],"interpreters":["guile","bigloo","chicken","csi","gosh","r6rs"],"ace_mode":"scheme"},"Scilab":{"type":"programming","extensions":[".sci",".sce",".tst"],"ace_mode":"text"},"Self":{"type":"programming","color":"#0579aa","extensions":[".self"],"tm_scope":"none","ace_mode":"text"},"Shell":{"type":"programming","search_term":"bash","color":"#89e051","aliases":["sh","shell-script","bash","zsh"],"extensions":[".sh",".bash",".bats",".cgi",".command",".fcgi",".ksh",".sh.in",".tmux",".tool",".zsh"],"filenames":[".bash_history",".bash_logout",".bash_profile",".bashrc","PKGBUILD","gradlew"],"interpreters":["bash","rc","sh","zsh"],"ace_mode":"sh"},"ShellSession":{"type":"programming","extensions":[".sh-session"],"aliases":["bash session","console"],"tm_scope":"text.shell-session","ace_mode":"sh"},"Shen":{"type":"programming","color":"#120F14","extensions":[".shen"],"tm_scope":"none","ace_mode":"text"},"Slash":{"type":"programming","color":"#007eff","extensions":[".sl"],"tm_scope":"text.html.slash","ace_mode":"text"},"Slim":{"group":"HTML","type":"markup","color":"#ff8f77","extensions":[".slim"],"tm_scope":"text.slim","ace_mode":"text"},"Smali":{"type":"programming","extensions":[".smali"],"ace_mode":"text","tm_scope":"source.smali"},"Smalltalk":{"type":"programming","color":"#596706","extensions":[".st",".cs"],"aliases":["squeak"],"ace_mode":"text"},"Smarty":{"type":"programming","extensions":[".tpl"],"ace_mode":"smarty","tm_scope":"text.html.smarty"},"SourcePawn":{"type":"programming","color":"#5c7611","aliases":["sourcemod"],"extensions":[".sp",".inc",".sma"],"tm_scope":"source.sp","ace_mode":"text"},"Squirrel":{"type":"programming","color":"#800000","extensions":[".nut"],"tm_scope":"source.c++","ace_mode":"c_cpp"},"Stan":{"type":"programming","color":"#b2011d","extensions":[".stan"],"ace_mode":"text","tm_scope":"source.stan"},"Standard ML":{"type":"programming","color":"#dc566d","aliases":["sml"],"extensions":[".ML",".fun",".sig",".sml"],"tm_scope":"source.ml","ace_mode":"text"},"Stata":{"type":"programming","extensions":[".do",".ado",".doh",".ihlp",".mata",".matah",".sthlp"],"ace_mode":"text"},"Stylus":{"type":"markup","group":"CSS","extensions":[".styl"],"tm_scope":"source.stylus","ace_mode":"stylus"},"SubRip Text":{"type":"data","extensions":[".srt"],"ace_mode":"text","tm_scope":"text.srt"},"SuperCollider":{"type":"programming","color":"#46390b","extensions":[".sc",".scd"],"interpreters":["sclang","scsynth"],"tm_scope":"source.supercollider","ace_mode":"text"},"Swift":{"type":"programming","color":"#ffac45","extensions":[".swift"],"ace_mode":"text"},"SystemVerilog":{"type":"programming","color":"#DAE1C2","extensions":[".sv",".svh",".vh"],"ace_mode":"verilog"},"TLA":{"type":"programming","extensions":[".tla"],"tm_scope":"source.tla","ace_mode":"text"},"TOML":{"type":"data","extensions":[".toml"],"tm_scope":"source.toml","ace_mode":"toml"},"TXL":{"type":"programming","extensions":[".txl"],"tm_scope":"source.txl","ace_mode":"text"},"Tcl":{"type":"programming","color":"#e4cc98","extensions":[".tcl",".adp",".tm"],"interpreters":["tclsh","wish"],"ace_mode":"tcl"},"Tcsh":{"type":"programming","group":"Shell","extensions":[".tcsh",".csh"],"tm_scope":"source.shell","ace_mode":"sh"},"TeX":{"type":"markup","color":"#3D6117","ace_mode":"tex","wrap":true,"aliases":["latex"],"extensions":[".tex",".aux",".bbx",".bib",".cbx",".cls",".dtx",".ins",".lbx",".ltx",".mkii",".mkiv",".mkvi",".sty",".toc"]},"Tea":{"type":"markup","extensions":[".tea"],"tm_scope":"source.tea","ace_mode":"text"},"Terra":{"type":"programming","extensions":[".t"],"color":"#00004c","ace_mode":"lua","interpreters":["lua"]},"Text":{"type":"prose","wrap":true,"aliases":["fundamental"],"extensions":[".txt",".fr",".nb",".ncl",".no"],"filenames":["COPYING","INSTALL","LICENSE","NEWS","README.1ST","README.me","click.me","delete.me","keep.me","read.me","test.me"],"tm_scope":"none","ace_mode":"text"},"Textile":{"type":"prose","ace_mode":"textile","wrap":true,"extensions":[".textile"],"tm_scope":"none"},"Thrift":{"type":"programming","tm_scope":"source.thrift","extensions":[".thrift"],"ace_mode":"text"},"Turing":{"type":"programming","color":"#cf142b","extensions":[".t",".tu"],"tm_scope":"source.turing","ace_mode":"text"},"Turtle":{"type":"data","extensions":[".ttl"],"tm_scope":"source.turtle","ace_mode":"text"},"Twig":{"type":"markup","group":"HTML","extensions":[".twig"],"tm_scope":"text.html.twig","ace_mode":"twig"},"TypeScript":{"type":"programming","color":"#2b7489","aliases":["ts"],"extensions":[".ts",".tsx"],"tm_scope":"source.ts","ace_mode":"typescript"},"Unified Parallel C":{"type":"programming","group":"C","ace_mode":"c_cpp","color":"#4e3617","extensions":[".upc"],"tm_scope":"source.c"},"Unity3D Asset":{"type":"data","ace_mode":"yaml","extensions":[".anim",".asset",".mat",".meta",".prefab",".unity"],"tm_scope":"source.yaml"},"Uno":{"type":"programming","extensions":[".uno"],"ace_mode":"csharp","tm_scope":"source.cs"},"UnrealScript":{"type":"programming","color":"#a54c4d","extensions":[".uc"],"tm_scope":"source.java","ace_mode":"java"},"UrWeb":{"type":"programming","aliases":["Ur/Web","Ur"],"extensions":[".ur",".urs"],"tm_scope":"source.ur","ace_mode":"text"},"VCL":{"group":"Perl","type":"programming","extensions":[".vcl"],"tm_scope":"source.varnish.vcl","ace_mode":"text"},"VHDL":{"type":"programming","color":"#adb2cb","extensions":[".vhdl",".vhd",".vhf",".vhi",".vho",".vhs",".vht",".vhw"],"ace_mode":"vhdl"},"Vala":{"type":"programming","color":"#fbe5cd","extensions":[".vala",".vapi"],"ace_mode":"vala"},"Verilog":{"type":"programming","color":"#b2b7f8","extensions":[".v",".veo"],"ace_mode":"verilog"},"VimL":{"type":"programming","color":"#199f4b","search_term":"vim","aliases":["vim","nvim"],"extensions":[".vim"],"filenames":[".nvimrc",".vimrc","_vimrc","gvimrc","nvimrc","vimrc"],"ace_mode":"text"},"Visual Basic":{"type":"programming","color":"#945db7","extensions":[".vb",".bas",".cls",".frm",".frx",".vba",".vbhtml",".vbs"],"tm_scope":"source.vbnet","aliases":["vb.net","vbnet"],"ace_mode":"text"},"Volt":{"type":"programming","color":"#1F1F1F","extensions":[".volt"],"tm_scope":"source.d","ace_mode":"d"},"Vue":{"type":"markup","color":"#2c3e50","extensions":[".vue"],"tm_scope":"text.html.vue","ace_mode":"html"},"Wavefront Material":{"type":"data","extensions":[".mtl"],"tm_scope":"source.wavefront.mtl","ace_mode":"text"},"Wavefront Object":{"type":"data","extensions":[".obj"],"tm_scope":"source.wavefront.obj","ace_mode":"text"},"Web Ontology Language":{"type":"markup","color":"#9cc9dd","extensions":[".owl"],"tm_scope":"text.xml","ace_mode":"xml"},"WebIDL":{"type":"programming","extensions":[".webidl"],"tm_scope":"source.webidl","ace_mode":"text"},"World of Warcraft Addon Data":{"type":"data","extensions":[".toc"],"tm_scope":"source.toc","ace_mode":"text"},"X10":{"type":"programming","aliases":["xten"],"ace_mode":"text","extensions":[".x10"],"color":"#4B6BEF","tm_scope":"source.x10"},"XC":{"type":"programming","color":"#99DA07","extensions":[".xc"],"tm_scope":"source.xc","ace_mode":"c_cpp"},"XML":{"type":"data","ace_mode":"xml","aliases":["rss","xsd","wsdl"],"extensions":[".xml",".ant",".axml",".builds",".ccxml",".clixml",".cproject",".csl",".csproj",".ct",".dita",".ditamap",".ditaval",".dll.config",".dotsettings",".filters",".fsproj",".fxml",".glade",".gml",".grxml",".iml",".ivy",".jelly",".jsproj",".kml",".launch",".mdpolicy",".mm",".mod",".mxml",".nproj",".nuspec",".odd",".osm",".pkgproj",".plist",".pluginspec",".props",".ps1xml",".psc1",".pt",".rdf",".resx",".rss",".scxml",".sfproj",".srdf",".storyboard",".stTheme",".sublime-snippet",".targets",".tmCommand",".tml",".tmLanguage",".tmPreferences",".tmSnippet",".tmTheme",".ts",".tsx",".ui",".urdf",".ux",".vbproj",".vcxproj",".vssettings",".vxml",".wsdl",".wsf",".wxi",".wxl",".wxs",".x3d",".xacro",".xaml",".xib",".xlf",".xliff",".xmi",".xml.dist",".xproj",".xsd",".xul",".zcml"],"filenames":[".classpath",".project","App.config","NuGet.config","Settings.StyleCop","Web.Debug.config","Web.Release.config","Web.config","packages.config"]},"XPages":{"type":"programming","extensions":[".xsp-config",".xsp.metadata"],"tm_scope":"none","ace_mode":"xml"},"XProc":{"type":"programming","extensions":[".xpl",".xproc"],"tm_scope":"text.xml","ace_mode":"xml"},"XQuery":{"type":"programming","color":"#5232e7","extensions":[".xquery",".xq",".xql",".xqm",".xqy"],"ace_mode":"xquery","tm_scope":"source.xq"},"XS":{"type":"programming","extensions":[".xs"],"tm_scope":"source.c","ace_mode":"c_cpp"},"XSLT":{"type":"programming","aliases":["xsl"],"extensions":[".xslt",".xsl"],"tm_scope":"text.xml.xsl","ace_mode":"xml","color":"#EB8CEB"},"Xojo":{"type":"programming","extensions":[".xojo_code",".xojo_menu",".xojo_report",".xojo_script",".xojo_toolbar",".xojo_window"],"tm_scope":"source.vbnet","ace_mode":"text"},"Xtend":{"type":"programming","extensions":[".xtend"],"ace_mode":"text"},"YAML":{"type":"data","tm_scope":"source.yaml","aliases":["yml"],"extensions":[".yml",".reek",".rviz",".sublime-syntax",".syntax",".yaml",".yaml-tmlanguage"],"filenames":[".clang-format"],"ace_mode":"yaml"},"YANG":{"type":"data","extensions":[".yang"],"tm_scope":"source.yang","ace_mode":"text"},"Yacc":{"type":"programming","extensions":[".y",".yacc",".yy"],"tm_scope":"source.bison","ace_mode":"text","color":"#4B6C4B"},"Zephir":{"type":"programming","color":"#118f9e","extensions":[".zep"],"tm_scope":"source.php.zephir","ace_mode":"php"},"Zimpl":{"type":"programming","extensions":[".zimpl",".zmpl",".zpl"],"tm_scope":"none","ace_mode":"text"},"desktop":{"type":"data","extensions":[".desktop",".desktop.in"],"tm_scope":"source.desktop","ace_mode":"text"},"eC":{"type":"programming","color":"#913960","search_term":"ec","extensions":[".ec",".eh"],"tm_scope":"source.c.ec","ace_mode":"text"},"edn":{"type":"data","ace_mode":"clojure","extensions":[".edn"],"tm_scope":"source.clojure"},"fish":{"type":"programming","group":"Shell","interpreters":["fish"],"extensions":[".fish"],"tm_scope":"source.fish","ace_mode":"text"},"mupad":{"type":"programming","extensions":[".mu"],"ace_mode":"text"},"nesC":{"type":"programming","color":"#94B0C7","extensions":[".nc"],"ace_mode":"text","tm_scope":"source.nesc"},"ooc":{"type":"programming","color":"#b0b77e","extensions":[".ooc"],"ace_mode":"text"},"reStructuredText":{"type":"prose","wrap":true,"search_term":"rst","aliases":["rst"],"extensions":[".rst",".rest",".rest.txt",".rst.txt"],"ace_mode":"text"},"wisp":{"type":"programming","ace_mode":"clojure","color":"#7582D1","extensions":[".wisp"],"tm_scope":"source.clojure"},"xBase":{"type":"programming","color":"#403a40","aliases":["advpl","clipper","foxpro"],"extensions":[".prg",".ch",".prw"],"tm_scope":"source.harbour","ace_mode":"text"}}
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.eot
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.otf
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.ttf
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Bold/GothamPro-Bold.woff
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Bold/preview.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GothamPro-Bold
6 | - Web font preview
7 |
8 |
25 |
26 |
27 |
28 |
How to Install
29 |
Step 1
30 |
31 | Upload contents of the zip file to your web server's public directory. For example:
32 | www.yourdomain.com/css/webfont/
33 |
34 |
Step 2
35 |
36 | Add contents of
37 | styles.css
38 | to your site's style sheet.
39 |
40 |
Step 3
41 |
42 | Make sure you adjust the paths in code from
43 | styles.css
44 | to reflect the relative path on your server.
45 |
46 |
47 | For this example you need to prepend
48 | /css/webfont/
49 | to all
50 | src url
51 | definitions. Like this:
52 |
53 |
54 | @font-face {
55 | font-family: 'GothamPro-Bold';
56 | src: url('/css/webfont/GothamPro-Bold.eot?#iefix') format('embedded-opentype'), url('/css/webfont/GothamPro-Bold.otf') format('opentype'),
57 | url('/css/webfont/GothamPro-Bold.woff') format('woff'), url('/css/webfont/GothamPro-Bold.ttf') format('truetype'), url('/css/webfont/GothamPro-Bold.svg#GothamPro-Bold') format('svg');
58 | font-weight: normal;
59 | font-style: normal;
60 | }
61 |
62 |
63 |
64 |
65 | H1
66 | GothamPro-Bold
67 |
68 |
69 | H2
70 | Donec lacinia, felis nec sagittis feugiat
71 |
72 |
73 | H3
74 | Sed ullamcorper tincidunt libero, sed tempus sem rhoncus non.
75 |
76 |
77 | H4
78 | Etiam in nulla eros, quis laoreet orci. Morbi ullamcorper tempor nunc sed ullamcorper.
79 |
80 |
81 | DEFAULT
82 | In hac habitasse platea dictumst. Sed hendrerit scelerisque pellentesque. Suspendisse id eros quis sem tristique varius sed eget velit. Phasellus pellentesque ipsum non quam vulputate euismod. Nullam eget viverra lorem. Ut eu tortor metus. Mauris eget quam nulla, eu suscipit magna. Nullam vitae lectus quam, a consequat tortor. Ut sed arcu arcu. Aliquam aliquet lacinia lorem, id tristique nunc pulvinar eget.
83 |
84 |
85 | SMALL
86 |
87 | Proin volutpat, magna at vehicula blandit, massa lectus aliquam dolor, ut porta magna odio eu nunc. Nam nisi diam, commodo vitae hendrerit non, consequat sed est. Proin fringilla, nunc non vulputate hendrerit, turpis purus vestibulum diam, a venenatis nunc lectus nec quam. Quisque euismod fermentum mauris, at accumsan mi pulvinar in. Fusce libero lectus, fringilla non congue vel, cursus nec metus. Nunc ac ante quam.
88 |
89 |
90 |
91 | BIG
92 |
93 | Curabitur auctor orci vel felis sodales porttitor. Aenean non neque auctor tellus suscipit vulputate ut quis nunc. Integer tellus purus, venenatis a cursus nec, vestibulum eget turpis. Nulla pulvinar dictum elit, vulputate sodales nunc laoreet eget. Aliquam vitae urna ac risus scelerisque iaculis.
94 |
95 |
96 |
97 |
98 |
99 |
100 | H1
101 | GothamPro-Bold
102 |
103 |
104 | H2
105 | Donec lacinia, felis nec sagittis feugiat
106 |
107 |
108 | H3
109 | Sed ullamcorper tincidunt libero, sed tempus sem rhoncus non.
110 |
111 |
112 | H4
113 | Etiam in nulla eros, quis laoreet orci. Morbi ullamcorper tempor nunc sed ullamcorper.
114 |
115 |
116 | DEFAULT
117 | In hac habitasse platea dictumst. Sed hendrerit scelerisque pellentesque. Suspendisse id eros quis sem tristique varius sed eget velit. Phasellus pellentesque ipsum non quam vulputate euismod. Nullam eget viverra lorem. Ut eu tortor metus. Mauris eget quam nulla, eu suscipit magna. Nullam vitae lectus quam, a consequat tortor. Ut sed arcu arcu. Aliquam aliquet lacinia lorem, id tristique nunc pulvinar eget.
118 |
119 |
120 | SMALL
121 |
122 | Proin volutpat, magna at vehicula blandit, massa lectus aliquam dolor, ut porta magna odio eu nunc. Nam nisi diam, commodo vitae hendrerit non, consequat sed est. Proin fringilla, nunc non vulputate hendrerit, turpis purus vestibulum diam, a venenatis nunc lectus nec quam. Quisque euismod fermentum mauris, at accumsan mi pulvinar in. Fusce libero lectus, fringilla non congue vel, cursus nec metus. Nunc ac ante quam.
123 |
124 |
125 |
126 | BIG
127 |
128 | Curabitur auctor orci vel felis sodales porttitor. Aenean non neque auctor tellus suscipit vulputate ut quis nunc. Integer tellus purus, venenatis a cursus nec, vestibulum eget turpis. Nulla pulvinar dictum elit, vulputate sodales nunc laoreet eget. Aliquam vitae urna ac risus scelerisque iaculis.
129 |
130 |
131 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Bold/styles.css:
--------------------------------------------------------------------------------
1 |
2 | @font-face {
3 | font-family: 'GothamPro-Bold';
4 | src: url('GothamPro-Bold.eot?#iefix') format('embedded-opentype'), url('GothamPro-Bold.otf') format('opentype'),
5 | url('GothamPro-Bold.woff') format('woff'), url('GothamPro-Bold.ttf') format('truetype'), url('GothamPro-Bold.svg#GothamPro-Bold') format('svg');
6 | font-weight: normal;
7 | font-style: normal;
8 | }
9 |
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.eot
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.otf
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.ttf
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro-Medium/GothamPro-Medium.woff
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Medium/preview.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GothamPro-Medium
6 | - Web font preview
7 |
8 |
25 |
26 |
27 |
28 |
How to Install
29 |
Step 1
30 |
31 | Upload contents of the zip file to your web server's public directory. For example:
32 | www.yourdomain.com/css/webfont/
33 |
34 |
Step 2
35 |
36 | Add contents of
37 | styles.css
38 | to your site's style sheet.
39 |
40 |
Step 3
41 |
42 | Make sure you adjust the paths in code from
43 | styles.css
44 | to reflect the relative path on your server.
45 |
46 |
47 | For this example you need to prepend
48 | /css/webfont/
49 | to all
50 | src url
51 | definitions. Like this:
52 |
53 |
54 | @font-face {
55 | font-family: 'GothamPro-Medium';
56 | src: url('/css/webfont/GothamPro-Medium.eot?#iefix') format('embedded-opentype'), url('/css/webfont/GothamPro-Medium.otf') format('opentype'),
57 | url('/css/webfont/GothamPro-Medium.woff') format('woff'), url('/css/webfont/GothamPro-Medium.ttf') format('truetype'), url('/css/webfont/GothamPro-Medium.svg#GothamPro-Medium') format('svg');
58 | font-weight: normal;
59 | font-style: normal;
60 | }
61 |
62 |
63 |
64 |
65 | H1
66 | GothamPro-Medium
67 |
68 |
69 | H2
70 | Donec lacinia, felis nec sagittis feugiat
71 |
72 |
73 | H3
74 | Sed ullamcorper tincidunt libero, sed tempus sem rhoncus non.
75 |
76 |
77 | H4
78 | Etiam in nulla eros, quis laoreet orci. Morbi ullamcorper tempor nunc sed ullamcorper.
79 |
80 |
81 | DEFAULT
82 | In hac habitasse platea dictumst. Sed hendrerit scelerisque pellentesque. Suspendisse id eros quis sem tristique varius sed eget velit. Phasellus pellentesque ipsum non quam vulputate euismod. Nullam eget viverra lorem. Ut eu tortor metus. Mauris eget quam nulla, eu suscipit magna. Nullam vitae lectus quam, a consequat tortor. Ut sed arcu arcu. Aliquam aliquet lacinia lorem, id tristique nunc pulvinar eget.
83 |
84 |
85 | SMALL
86 |
87 | Proin volutpat, magna at vehicula blandit, massa lectus aliquam dolor, ut porta magna odio eu nunc. Nam nisi diam, commodo vitae hendrerit non, consequat sed est. Proin fringilla, nunc non vulputate hendrerit, turpis purus vestibulum diam, a venenatis nunc lectus nec quam. Quisque euismod fermentum mauris, at accumsan mi pulvinar in. Fusce libero lectus, fringilla non congue vel, cursus nec metus. Nunc ac ante quam.
88 |
89 |
90 |
91 | BIG
92 |
93 | Curabitur auctor orci vel felis sodales porttitor. Aenean non neque auctor tellus suscipit vulputate ut quis nunc. Integer tellus purus, venenatis a cursus nec, vestibulum eget turpis. Nulla pulvinar dictum elit, vulputate sodales nunc laoreet eget. Aliquam vitae urna ac risus scelerisque iaculis.
94 |
95 |
96 |
97 |
98 |
99 |
100 | H1
101 | GothamPro-Medium
102 |
103 |
104 | H2
105 | Donec lacinia, felis nec sagittis feugiat
106 |
107 |
108 | H3
109 | Sed ullamcorper tincidunt libero, sed tempus sem rhoncus non.
110 |
111 |
112 | H4
113 | Etiam in nulla eros, quis laoreet orci. Morbi ullamcorper tempor nunc sed ullamcorper.
114 |
115 |
116 | DEFAULT
117 | In hac habitasse platea dictumst. Sed hendrerit scelerisque pellentesque. Suspendisse id eros quis sem tristique varius sed eget velit. Phasellus pellentesque ipsum non quam vulputate euismod. Nullam eget viverra lorem. Ut eu tortor metus. Mauris eget quam nulla, eu suscipit magna. Nullam vitae lectus quam, a consequat tortor. Ut sed arcu arcu. Aliquam aliquet lacinia lorem, id tristique nunc pulvinar eget.
118 |
119 |
120 | SMALL
121 |
122 | Proin volutpat, magna at vehicula blandit, massa lectus aliquam dolor, ut porta magna odio eu nunc. Nam nisi diam, commodo vitae hendrerit non, consequat sed est. Proin fringilla, nunc non vulputate hendrerit, turpis purus vestibulum diam, a venenatis nunc lectus nec quam. Quisque euismod fermentum mauris, at accumsan mi pulvinar in. Fusce libero lectus, fringilla non congue vel, cursus nec metus. Nunc ac ante quam.
123 |
124 |
125 |
126 | BIG
127 |
128 | Curabitur auctor orci vel felis sodales porttitor. Aenean non neque auctor tellus suscipit vulputate ut quis nunc. Integer tellus purus, venenatis a cursus nec, vestibulum eget turpis. Nulla pulvinar dictum elit, vulputate sodales nunc laoreet eget. Aliquam vitae urna ac risus scelerisque iaculis.
129 |
130 |
131 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro-Medium/styles.css:
--------------------------------------------------------------------------------
1 |
2 | @font-face {
3 | font-family: 'GothamPro-Medium';
4 | src: url('GothamPro-Medium.eot?#iefix') format('embedded-opentype'), url('GothamPro-Medium.otf') format('opentype'),
5 | url('GothamPro-Medium.woff') format('woff'), url('GothamPro-Medium.ttf') format('truetype'), url('GothamPro-Medium.svg#GothamPro-Medium') format('svg');
6 | font-weight: normal;
7 | font-style: normal;
8 | }
9 |
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro/GothamPro.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro/GothamPro.eot
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro/GothamPro.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro/GothamPro.otf
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro/GothamPro.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro/GothamPro.ttf
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro/GothamPro.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/fonts/GothamPro/GothamPro.woff
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro/preview.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | GothamPro
6 | - Web font preview
7 |
8 |
25 |
26 |
27 |
28 |
How to Install
29 |
Step 1
30 |
31 | Upload contents of the zip file to your web server's public directory. For example:
32 | www.yourdomain.com/css/webfont/
33 |
34 |
Step 2
35 |
36 | Add contents of
37 | styles.css
38 | to your site's style sheet.
39 |
40 |
Step 3
41 |
42 | Make sure you adjust the paths in code from
43 | styles.css
44 | to reflect the relative path on your server.
45 |
46 |
47 | For this example you need to prepend
48 | /css/webfont/
49 | to all
50 | src url
51 | definitions. Like this:
52 |
53 |
54 | @font-face {
55 | font-family: 'GothamPro';
56 | src: url('/css/webfont/GothamPro.eot?#iefix') format('embedded-opentype'), url('/css/webfont/GothamPro.otf') format('opentype'),
57 | url('/css/webfont/GothamPro.woff') format('woff'), url('/css/webfont/GothamPro.ttf') format('truetype'), url('/css/webfont/GothamPro.svg#GothamPro') format('svg');
58 | font-weight: normal;
59 | font-style: normal;
60 | }
61 |
62 |
63 |
64 |
65 | H1
66 | GothamPro
67 |
68 |
69 | H2
70 | Donec lacinia, felis nec sagittis feugiat
71 |
72 |
73 | H3
74 | Sed ullamcorper tincidunt libero, sed tempus sem rhoncus non.
75 |
76 |
77 | H4
78 | Etiam in nulla eros, quis laoreet orci. Morbi ullamcorper tempor nunc sed ullamcorper.
79 |
80 |
81 | DEFAULT
82 | In hac habitasse platea dictumst. Sed hendrerit scelerisque pellentesque. Suspendisse id eros quis sem tristique varius sed eget velit. Phasellus pellentesque ipsum non quam vulputate euismod. Nullam eget viverra lorem. Ut eu tortor metus. Mauris eget quam nulla, eu suscipit magna. Nullam vitae lectus quam, a consequat tortor. Ut sed arcu arcu. Aliquam aliquet lacinia lorem, id tristique nunc pulvinar eget.
83 |
84 |
85 | SMALL
86 |
87 | Proin volutpat, magna at vehicula blandit, massa lectus aliquam dolor, ut porta magna odio eu nunc. Nam nisi diam, commodo vitae hendrerit non, consequat sed est. Proin fringilla, nunc non vulputate hendrerit, turpis purus vestibulum diam, a venenatis nunc lectus nec quam. Quisque euismod fermentum mauris, at accumsan mi pulvinar in. Fusce libero lectus, fringilla non congue vel, cursus nec metus. Nunc ac ante quam.
88 |
89 |
90 |
91 | BIG
92 |
93 | Curabitur auctor orci vel felis sodales porttitor. Aenean non neque auctor tellus suscipit vulputate ut quis nunc. Integer tellus purus, venenatis a cursus nec, vestibulum eget turpis. Nulla pulvinar dictum elit, vulputate sodales nunc laoreet eget. Aliquam vitae urna ac risus scelerisque iaculis.
94 |
95 |
96 |
97 |
98 |
99 |
100 | H1
101 | GothamPro
102 |
103 |
104 | H2
105 | Donec lacinia, felis nec sagittis feugiat
106 |
107 |
108 | H3
109 | Sed ullamcorper tincidunt libero, sed tempus sem rhoncus non.
110 |
111 |
112 | H4
113 | Etiam in nulla eros, quis laoreet orci. Morbi ullamcorper tempor nunc sed ullamcorper.
114 |
115 |
116 | DEFAULT
117 | In hac habitasse platea dictumst. Sed hendrerit scelerisque pellentesque. Suspendisse id eros quis sem tristique varius sed eget velit. Phasellus pellentesque ipsum non quam vulputate euismod. Nullam eget viverra lorem. Ut eu tortor metus. Mauris eget quam nulla, eu suscipit magna. Nullam vitae lectus quam, a consequat tortor. Ut sed arcu arcu. Aliquam aliquet lacinia lorem, id tristique nunc pulvinar eget.
118 |
119 |
120 | SMALL
121 |
122 | Proin volutpat, magna at vehicula blandit, massa lectus aliquam dolor, ut porta magna odio eu nunc. Nam nisi diam, commodo vitae hendrerit non, consequat sed est. Proin fringilla, nunc non vulputate hendrerit, turpis purus vestibulum diam, a venenatis nunc lectus nec quam. Quisque euismod fermentum mauris, at accumsan mi pulvinar in. Fusce libero lectus, fringilla non congue vel, cursus nec metus. Nunc ac ante quam.
123 |
124 |
125 |
126 | BIG
127 |
128 | Curabitur auctor orci vel felis sodales porttitor. Aenean non neque auctor tellus suscipit vulputate ut quis nunc. Integer tellus purus, venenatis a cursus nec, vestibulum eget turpis. Nulla pulvinar dictum elit, vulputate sodales nunc laoreet eget. Aliquam vitae urna ac risus scelerisque iaculis.
129 |
130 |
131 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/fe/src/assets/fonts/GothamPro/styles.css:
--------------------------------------------------------------------------------
1 |
2 | @font-face {
3 | font-family: 'GothamPro';
4 | src: url('GothamPro.eot?#iefix') format('embedded-opentype'), url('GothamPro.otf') format('opentype'),
5 | url('GothamPro.woff') format('woff'), url('GothamPro.ttf') format('truetype'), url('GothamPro.svg#GothamPro') format('svg');
6 | font-weight: normal;
7 | font-style: normal;
8 | }
9 |
--------------------------------------------------------------------------------
/fe/src/assets/github-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/github-logo.png
--------------------------------------------------------------------------------
/fe/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/logo.png
--------------------------------------------------------------------------------
/fe/src/assets/notification-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/src/assets/notification-icon.png
--------------------------------------------------------------------------------
/fe/src/components/Avatar.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
43 |
44 |
51 |
--------------------------------------------------------------------------------
/fe/src/components/FooterBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
23 |
24 |
59 |
--------------------------------------------------------------------------------
/fe/src/components/HamburgerIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
17 |
24 |
25 |
75 |
--------------------------------------------------------------------------------
/fe/src/components/HeaderBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
101 |
102 |
148 |
--------------------------------------------------------------------------------
/fe/src/components/ListTransition.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
11 |
37 |
38 |
40 |
--------------------------------------------------------------------------------
/fe/src/components/LoadingBlock.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
57 |
58 |
91 |
--------------------------------------------------------------------------------
/fe/src/components/MainContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
32 |
33 |
58 |
--------------------------------------------------------------------------------
/fe/src/components/MenuFullstatehandler.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
35 |
--------------------------------------------------------------------------------
/fe/src/components/MenuOpenstatehandler.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
34 |
--------------------------------------------------------------------------------
/fe/src/components/NavMenu.vue:
--------------------------------------------------------------------------------
1 |
2 |
37 |
38 |
39 |
40 |
106 |
107 |
212 |
--------------------------------------------------------------------------------
/fe/src/components/Profile.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
14 | {{profile.name || profile.login}}
15 |
16 |
17 |
18 |
22 | {{profile.login || profile.name}}
23 |
24 |
25 |
26 |
27 |
28 | Follow
29 |
30 |
31 |
32 |
33 |
34 |
39 | {{profile.bio}}
40 |
41 |
42 |
43 |
44 |
45 |
46 |
51 | {{profile.followers}}
52 |
53 |
Followers
54 |
55 |
56 |
57 |
58 |
59 |
60 |
65 | {{profile.public_repos}}
66 |
67 |
Public repos
68 |
69 |
70 |
71 |
72 |
73 |
74 |
79 | {{profile.following}}
80 |
81 |
Following
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | VIEW REPOSITORIES
93 |
94 |
95 |
96 |
97 |
108 |
109 |
199 |
--------------------------------------------------------------------------------
/fe/src/components/RepoContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 | {{ repo.name }}
9 |
10 |
11 |
12 |
16 | {{ repo.description }}
17 |
18 |
19 |
20 |
24 | {{ repo.updated_at | fromNow }}
25 |
26 |
27 |
28 |
29 |
33 | {{repo.language }}
34 |
35 |
36 |
37 | {{repo.watchers_count}}
38 | {{repo.stargazers_count}}
39 | {{repo.forks}}
40 |
41 |
42 |
43 |
44 |
45 |
60 |
61 |
123 |
--------------------------------------------------------------------------------
/fe/src/components/RepoItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 |
14 |
23 |
24 |
35 |
--------------------------------------------------------------------------------
/fe/src/components/SearchInput.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ buttontext }}
8 |
9 |
17 |
18 |
19 |
20 |
31 |
32 |
81 |
--------------------------------------------------------------------------------
/fe/src/components/TextHolder.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
31 |
32 |
45 |
--------------------------------------------------------------------------------
/fe/src/components/Toast.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ toast.message }}
4 | {{ toast.button }}
5 |
6 |
7 |
8 |
13 |
14 |
43 |
--------------------------------------------------------------------------------
/fe/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import VueRouter from 'vue-router';
3 | import App from './App';
4 | import UserPage from './views/UserPage';
5 | import RepoList from './views/RepoList';
6 | import RepoDetail from './views/RepoDetail';
7 | import NotFound from './views/NotFound';
8 |
9 | Vue.use(VueRouter);
10 |
11 | const router = new VueRouter({
12 | mode: 'history',
13 | routes: [
14 | {
15 | path: '/',
16 | name: 'APP',
17 | component: App,
18 | children: [
19 | {
20 | path: 'user/:username',
21 | name: 'USER_DETAIL',
22 | component: UserPage
23 | },
24 | {
25 | path: 'user/:username/repos',
26 | name: 'USER_REPO_LIST',
27 | component: RepoList
28 | },
29 | {
30 | path: 'user/:username/repos/:reponame',
31 | name: 'REPO_DETAIL',
32 | component: RepoDetail
33 | },
34 | {
35 | path: '*',
36 | // name: 'NOT_FOUND',
37 | // component: NotFound
38 | redirect: {
39 | name: 'USER_DETAIL',
40 | params: {
41 | username: 'SidKwok'
42 | }
43 | }
44 | }
45 | ]
46 | }
47 | ]
48 | });
49 |
50 | new Vue({
51 | router
52 | }).$mount('#root');
53 |
--------------------------------------------------------------------------------
/fe/src/views/NotFound.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 404 - Page not found
4 |
5 |
6 |
7 |
11 |
12 |
22 |
--------------------------------------------------------------------------------
/fe/src/views/RepoDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
18 | {{ tab.value }}
19 |
20 |
21 |
22 |
23 | You are offline!
24 |
Try again
25 |
26 |
27 |
34 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
{{ content.name }}
46 |
47 | {{ content.size | transToSize }}
48 |
49 |
50 |
51 |
52 |
No data
53 |
54 |
58 |
61 |
64 |
65 |
{{contrib.login}}
66 |
{{contrib.contributions}} {{' '}}
67 | contribution{{contrib.contributions === 1 ? '' : 's'}}
68 |
69 |
70 |
71 |
No data
72 |
73 |
77 |
78 |
81 |
82 |
{{language.name}}
83 |
{{language.value}}%
84 |
85 |
86 |
No data
87 |
88 |
89 |
90 |
91 |
92 |
278 |
279 |
588 |
--------------------------------------------------------------------------------
/fe/src/views/RepoList.vue:
--------------------------------------------------------------------------------
1 |
2 |
38 |
39 |
40 |
127 |
128 |
287 |
--------------------------------------------------------------------------------
/fe/src/views/UserPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
15 |
16 |
17 |
VIEW ALL REPOS
21 |
22 |
23 |
24 |
76 |
77 |
114 |
--------------------------------------------------------------------------------
/fe/src/vuex/modules/header.js:
--------------------------------------------------------------------------------
1 | import api from '../../api';
2 | import * as types from '../mutation-types';
3 |
4 | const state = {
5 | showLoading: false,
6 | doneLoading: false,
7 | loadFailed: false
8 | };
9 |
10 | const getters = {
11 | getHeaderState: state => state
12 | };
13 |
14 | const actions = {
15 | triggerLoadAnimation({ commit }) {
16 | commit(types.TRIGGER_LOAD_ANIMATION);
17 | },
18 | triggerLoadAnimationDone({ commit }) {
19 | commit(types.TRIGGER_LOAD_ANIMATION_DONE);
20 | setTimeout(() => {
21 | commit(types.HIDE_LOAD_ANIMATION);
22 | }, 600);
23 | },
24 | requestFailed({ commit }) {
25 | commit('REQUEST_FAILED');
26 | }
27 | };
28 |
29 | const mutations = {
30 | [types.TRIGGER_LOAD_ANIMATION](state) {
31 | state.showLoading = !state.loadFailed
32 | },
33 | [types.TRIGGER_LOAD_ANIMATION_DONE](state) {
34 | state.loadFailed = false;
35 | state.doneLoading = true;
36 | },
37 | [types.HIDE_LOAD_ANIMATION](state) {
38 | state.showLoading = false;
39 | state.loadFailed = false;
40 | state.doneLoading = false;
41 | },
42 | [types.REQUEST_FAILED](state) {
43 | state.loadFailed = true;
44 | }
45 | };
46 |
47 | export default {
48 | state,
49 | getters,
50 | actions,
51 | mutations
52 | };
53 |
--------------------------------------------------------------------------------
/fe/src/vuex/modules/index.js:
--------------------------------------------------------------------------------
1 | import header from './header';
2 | import navMenu from './navMenu';
3 | import profile from './profile';
4 | import repos from './repos';
5 |
6 | export default {
7 | header,
8 | navMenu,
9 | profile,
10 | repos
11 | };
12 |
--------------------------------------------------------------------------------
/fe/src/vuex/modules/navMenu.js:
--------------------------------------------------------------------------------
1 | import api from '../../api';
2 | import * as types from '../mutation-types';
3 |
4 | const state = {
5 | full: false,
6 | open: false
7 | };
8 |
9 | const getters = {
10 | getOpenState: state => state.open,
11 | getFullState: state => state.full
12 | };
13 |
14 | const actions = {
15 | fullNavMenu({ commit }) {
16 | commit('FULL_NAV_MENU');
17 | },
18 | openNavMenu({ commit }) {
19 | commit('OPEN_NAV_MENU');
20 | },
21 | closeNavMenu({ commit }) {
22 | commit('CLOSE_NAV_MENU');
23 | },
24 | toggleNavMenu({ commit }) {
25 | commit('TOGGLE_NAV_MENU');
26 | }
27 | };
28 |
29 | const mutations = {
30 | [types.FULL_NAV_MENU](state) {
31 | state.full = true;
32 | },
33 | [types.OPEN_NAV_MENU](state) {
34 | state.full = false;
35 | state.open = true;
36 | },
37 | [types.CLOSE_NAV_MENU](state) {
38 | state.full = false;
39 | state.open = false;
40 | },
41 | [types.TOGGLE_NAV_MENU](state) {
42 | state.open = !state.open;
43 | }
44 | };
45 |
46 | export default {
47 | state,
48 | getters,
49 | actions,
50 | mutations
51 | };
52 |
--------------------------------------------------------------------------------
/fe/src/vuex/modules/profile.js:
--------------------------------------------------------------------------------
1 | import api from '../../api';
2 | import * as types from '../mutation-types';
3 |
4 | const state = {
5 | type: '',
6 | login: '',
7 | avatar_url: '',
8 | gravatar_id: '',
9 | created_at: '',
10 | html_url: '',
11 | followers_url: '',
12 | following_url: '',
13 | gists_url: '',
14 | following: 0,
15 | followers: 0,
16 | bio: '',
17 | hireable: null,
18 | events_url: '',
19 | email: '',
20 | id: 0,
21 | location: null,
22 | blog: '',
23 | company: '',
24 | public_repos: 0,
25 | name: '',
26 | organizations_url: '',
27 | public_gists: 0,
28 | received_events_url: '',
29 | repos_url: '',
30 | site_admin: false,
31 | starred_url: '',
32 | subscriptions_url: '',
33 | updated_at: '',
34 | url: ''
35 | };
36 |
37 | const getters = {
38 | getProfile: state => state
39 | };
40 |
41 | const actions = {
42 | setUserProfile({ commit }, username) {
43 | commit(types.INIT_REPOS);
44 | return api(
45 | `https://api.github.com/users/${username}`
46 | ).then(profile => {
47 | commit(types.SET_PROFILE, { profile });
48 | });
49 | }
50 | };
51 |
52 | const mutations = {
53 | [types.INIT_REPOS](state) {
54 | state.type = '';
55 | state.login = '';
56 | state.avatar_url = '';
57 | state.gravatar_id = '';
58 | state.created_at = '';
59 | state.html_url = '';
60 | state.followers_url = '';
61 | state.following_url = '';
62 | state.gists_url = '';
63 | state.following = 0;
64 | state.followers = 0;
65 | state.bio = '';
66 | state.hireable = null;
67 | state.events_url = '';
68 | state.email = '';
69 | state.id = 0;
70 | state.location = null;
71 | state.blog = '';
72 | state.company = '';
73 | state.public_repos = 0;
74 | state.name = '';
75 | state.organizations_url = '';
76 | state.public_gists = 0;
77 | state.received_events_url = '';
78 | state.repos_url = '';
79 | state.site_admin = false;
80 | state.starred_url = '';
81 | state.subscriptions_url = '';
82 | state.updated_at = '';
83 | state.url = '';
84 | },
85 | [types.SET_PROFILE](state, { profile }) {
86 | state.type = profile.type;
87 | state.login = profile.login;
88 | state.avatar_url = profile.avatar_url;
89 | state.gravatar_id = profile.gravatar_id;
90 | state.created_at = profile.created_at;
91 | state.html_url = profile.html_url;
92 | state.followers_url = profile.followers_url;
93 | state.following_url = profile.following_url;
94 | state.gists_url = profile.gists_url;
95 | state.following = profile.following;
96 | state.followers = profile.followers;
97 | state.bio = profile.bio;
98 | state.hireable = profile.hireable;
99 | state.events_url = profile.events_url;
100 | state.email = profile.email;
101 | state.id = profile.id;
102 | state.location = profile.location;
103 | state.blog = profile.blog;
104 | state.company = profile.company;
105 | state.public_repos = profile.public_repos;
106 | state.name = profile.name;
107 | state.organizations_url = profile.organizations_url;
108 | state.public_gists = profile.public_gists;
109 | state.received_events_url = profile.received_events_url;
110 | state.repos_url = profile.repos_url;
111 | state.site_admin = profile.site_admin;
112 | state.starred_url = profile.starred_url;
113 | state.subscriptions_url = profile.subscriptions_url;
114 | state.updated_at = profile.updated_at;
115 | state.url = profile.url;
116 | }
117 | };
118 |
119 | export default {
120 | state,
121 | getters,
122 | actions,
123 | mutations
124 | };
125 |
--------------------------------------------------------------------------------
/fe/src/vuex/modules/repos.js:
--------------------------------------------------------------------------------
1 | import api from '../../api';
2 | import * as types from '../mutation-types';
3 |
4 | const state = {
5 | repos: []
6 | };
7 |
8 | const getters = {
9 | getRepos: state => state.repos
10 | };
11 |
12 | const actions = {
13 | setUserRepos({ commit }, username) {
14 | commit(types.INIT_REPOS);
15 | return api(
16 | 'https://api.github.com/search/repositories' +`?q=user:${username}&sort=updated`
17 | ).then(data => data.items)
18 | .then(repos => {
19 | commit(types.SET_REPOS, {repos});
20 | })
21 | }
22 | };
23 |
24 | const mutations = {
25 | [types.INIT_REPOS](state) {
26 | state.repos = [];
27 | },
28 | [types.SET_REPOS](state, {repos}) {
29 | state.repos = repos;
30 | }
31 | };
32 |
33 | export default {
34 | state,
35 | getters,
36 | actions,
37 | mutations
38 | };
39 |
--------------------------------------------------------------------------------
/fe/src/vuex/mutation-types.js:
--------------------------------------------------------------------------------
1 | export const INIT_PROFILE = 'INIT_PROFILE';
2 | export const SET_PROFILE = 'SET_PROFILE';
3 | export const INIT_REPOS = 'INIT_REPOS';
4 | export const SET_REPOS = 'SET_REPOS';
5 | export const FULL_NAV_MENU = 'FULL_NAV_MENU';
6 | export const OPEN_NAV_MENU = 'OPEN_NAV_MENU';
7 | export const CLOSE_NAV_MENU = 'CLOSE_NAV_MENU';
8 | export const TOGGLE_NAV_MENU = 'TOGGLE_NAV_MENU';
9 | export const TRIGGER_LOAD_ANIMATION = 'TRIGGER_LOAD_ANIMATION';
10 | export const TRIGGER_LOAD_ANIMATION_DONE = 'TRIGGER_LOAD_ANIMATION_DONE';
11 | export const HIDE_LOAD_ANIMATION = 'HIDE_LOAD_ANIMATION';
12 | export const REQUEST_FAILED = 'REQUEST_FAILED';
13 |
--------------------------------------------------------------------------------
/fe/src/vuex/store.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 | import modules from './modules';
4 |
5 | Vue.use(Vuex);
6 |
7 | export default new Vuex.Store({
8 | modules
9 | });
10 |
--------------------------------------------------------------------------------
/fe/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/fe/static/.gitkeep
--------------------------------------------------------------------------------
/fe/test/unit/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | },
5 | "globals": {
6 | "expect": true,
7 | "sinon": true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/fe/test/unit/index.js:
--------------------------------------------------------------------------------
1 | // Polyfill fn.bind() for PhantomJS
2 | /* eslint-disable no-extend-native */
3 | Function.prototype.bind = require('function-bind')
4 |
5 | // require all test files (files that ends with .spec.js)
6 | var 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 | var srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
13 | srcContext.keys().forEach(srcContext)
14 |
--------------------------------------------------------------------------------
/fe/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 path = require('path')
7 | var merge = require('webpack-merge')
8 | var baseConfig = require('../../build/webpack.base.conf')
9 | var utils = require('../../build/utils')
10 | var webpack = require('webpack')
11 | var projectRoot = path.resolve(__dirname, '../../')
12 |
13 | var webpackConfig = merge(baseConfig, {
14 | // use inline sourcemap for karma-sourcemap-loader
15 | module: {
16 | loaders: utils.styleLoaders()
17 | },
18 | devtool: '#inline-source-map',
19 | vue: {
20 | loaders: {
21 | js: 'isparta'
22 | }
23 | },
24 | plugins: [
25 | new webpack.DefinePlugin({
26 | 'process.env': require('../../config/test.env')
27 | })
28 | ]
29 | })
30 |
31 | // no need for app entry during tests
32 | delete webpackConfig.entry
33 |
34 | // make sure isparta loader is applied before eslint
35 | webpackConfig.module.preLoaders = webpackConfig.module.preLoaders || []
36 | webpackConfig.module.preLoaders.unshift({
37 | test: /\.js$/,
38 | loader: 'isparta',
39 | include: path.resolve(projectRoot, 'src')
40 | })
41 |
42 | // only apply babel for test files when using isparta
43 | webpackConfig.module.loaders.some(function (loader, i) {
44 | if (loader.loader === 'babel') {
45 | loader.include = path.resolve(projectRoot, 'test/unit')
46 | return true
47 | }
48 | })
49 |
50 | module.exports = function (config) {
51 | config.set({
52 | // to run in additional browsers:
53 | // 1. install corresponding karma launcher
54 | // http://karma-runner.github.io/0.13/config/browsers.html
55 | // 2. add it to the `browsers` array below.
56 | browsers: ['PhantomJS'],
57 | frameworks: ['mocha', 'sinon-chai'],
58 | reporters: ['spec', 'coverage'],
59 | files: ['./index.js'],
60 | preprocessors: {
61 | './index.js': ['webpack', 'sourcemap']
62 | },
63 | plugins: [
64 | 'karma-webpack',
65 | 'karma-sourcemap-loader',
66 | 'karma-spec-reporter',
67 | 'karma-coverage',
68 | 'karma-mocha',
69 | 'karma-sinon-chai',
70 | 'karma-phantomjs-launcher'
71 | ],
72 | webpack: webpackConfig,
73 | webpackMiddleware: {
74 | noInfo: true
75 | },
76 | coverageReporter: {
77 | dir: './coverage',
78 | reporters: [
79 | { type: 'lcov', subdir: '.' },
80 | { type: 'text-summary' }
81 | ]
82 | }
83 | })
84 | }
85 |
--------------------------------------------------------------------------------
/fe/test/unit/specs/Avatar.spec.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Avatar from 'src/components/Avatar';
3 | import FooterBar from 'src/components/FooterBar';
4 |
5 | describe('Avatar.vue', () => {
6 | it('should set correct default data', () => {
7 | expect(Avatar.data).to.be.a('function');
8 | let defaultData = Avatar.data();
9 | expect(defaultData.img).to.be.equal(null);
10 | expect(defaultData.loaded).to.be.equal(false);
11 | });
12 |
13 | it('should have suitable props', () => {
14 | expect(Avatar.props).to.be.an('Array');
15 | });
16 | });
17 |
18 | describe('FooterBar.vue', () => {
19 | it('should render correct content', () => {
20 | const vm = new Vue({
21 | template: '
',
22 | components: { FooterBar }
23 | }).$mount();
24 | expect(vm.$el.querySelector('#version').textContent).to.contain('Vue');
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/fe/test/unit/specs/FooterBar.spec.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import FooterBar from 'src/components/FooterBar';
3 |
4 | describe('FooterBar.vue', () => {
5 | it('should render correct content', () => {
6 | const vm = new Vue({
7 | template: '
',
8 | components: { FooterBar }
9 | }).$mount();
10 | expect(vm.$el.querySelector('#version').textContent).to.contain('Vue');
11 | });
12 | });
13 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "github-explorer",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "SidKwok ",
6 | "license": "MIT",
7 | "dependencies": {
8 | "body-parser": "1.12.3",
9 | "connect-timeout": "^1.7.0",
10 | "cookie-parser": "^1.3.5",
11 | "ejs": "2.3.1",
12 | "express": "4.12.3",
13 | "leanengine": "^1.0.0-beta"
14 | },
15 | "engines": {
16 | "node": "4.x"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 | GitHub Explorer(Vue)
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Bold.1ba6b49.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Bold.1ba6b49.ttf
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Bold.3f9c5a2.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Bold.3f9c5a2.otf
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Bold.69331bf.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Bold.69331bf.eot
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Bold.c7f92c8.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Bold.c7f92c8.woff
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Medium.4593d19.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Medium.4593d19.ttf
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Medium.6a20af8.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Medium.6a20af8.woff
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Medium.852509f.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Medium.852509f.eot
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro-Medium.dd3d9ca.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro-Medium.dd3d9ca.otf
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro.1f7329d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro.1f7329d.eot
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro.aafeb23.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro.aafeb23.otf
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro.bfecd40.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro.bfecd40.ttf
--------------------------------------------------------------------------------
/public/static/fonts/GothamPro.d171b7f.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/GothamPro.d171b7f.woff
--------------------------------------------------------------------------------
/public/static/fonts/fontawesome-webfont.674f50d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/fontawesome-webfont.674f50d.eot
--------------------------------------------------------------------------------
/public/static/fonts/fontawesome-webfont.af7ae50.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/fontawesome-webfont.af7ae50.woff2
--------------------------------------------------------------------------------
/public/static/fonts/fontawesome-webfont.b06871f.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/fontawesome-webfont.b06871f.ttf
--------------------------------------------------------------------------------
/public/static/fonts/fontawesome-webfont.fee66e7.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SidKwok/github-explorer/fe21c1f9073b0139f1edbeb2aa7fdde24dbe37ba/public/static/fonts/fontawesome-webfont.fee66e7.woff
--------------------------------------------------------------------------------
/public/static/js/manifest.c9af7b74846b6944b0c1.js:
--------------------------------------------------------------------------------
1 | !function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var n=window.webpackJsonp;window.webpackJsonp=function(c,o){for(var p,s,l=0,i=[];l