├── .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 | 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 | 11 | 12 | 43 | 44 | 51 | -------------------------------------------------------------------------------- /fe/src/components/FooterBar.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 59 | -------------------------------------------------------------------------------- /fe/src/components/HamburgerIcon.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | 25 | 75 | -------------------------------------------------------------------------------- /fe/src/components/HeaderBar.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 101 | 102 | 148 | -------------------------------------------------------------------------------- /fe/src/components/ListTransition.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 37 | 38 | 40 | -------------------------------------------------------------------------------- /fe/src/components/LoadingBlock.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 57 | 58 | 91 | -------------------------------------------------------------------------------- /fe/src/components/MainContent.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 32 | 33 | 58 | -------------------------------------------------------------------------------- /fe/src/components/MenuFullstatehandler.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 35 | -------------------------------------------------------------------------------- /fe/src/components/MenuOpenstatehandler.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 34 | -------------------------------------------------------------------------------- /fe/src/components/NavMenu.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 106 | 107 | 212 | -------------------------------------------------------------------------------- /fe/src/components/Profile.vue: -------------------------------------------------------------------------------- 1 | 96 | 97 | 108 | 109 | 199 | -------------------------------------------------------------------------------- /fe/src/components/RepoContent.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 60 | 61 | 123 | -------------------------------------------------------------------------------- /fe/src/components/RepoItem.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 23 | 24 | 35 | -------------------------------------------------------------------------------- /fe/src/components/SearchInput.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 31 | 32 | 81 | -------------------------------------------------------------------------------- /fe/src/components/TextHolder.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 31 | 32 | 45 | -------------------------------------------------------------------------------- /fe/src/components/Toast.vue: -------------------------------------------------------------------------------- 1 | 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 | 6 | 7 | 11 | 12 | 22 | -------------------------------------------------------------------------------- /fe/src/views/RepoDetail.vue: -------------------------------------------------------------------------------- 1 | 91 | 92 | 278 | 279 | 588 | -------------------------------------------------------------------------------- /fe/src/views/RepoList.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 127 | 128 | 287 | -------------------------------------------------------------------------------- /fe/src/views/UserPage.vue: -------------------------------------------------------------------------------- 1 | 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