├── .gitattributes
├── app
├── CNAME
├── styles
│ ├── .DS_Store
│ ├── main.css
│ └── hoodie.css
├── favicons
│ ├── favicon.ico
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon-96x96.png
│ ├── mstile-70x70.png
│ ├── favicon-160x160.png
│ ├── favicon-192x192.png
│ ├── mstile-144x144.png
│ ├── mstile-150x150.png
│ ├── mstile-310x150.png
│ ├── mstile-310x310.png
│ ├── apple-touch-icon.png
│ ├── apple-touch-icon-57x57.png
│ ├── apple-touch-icon-60x60.png
│ ├── apple-touch-icon-72x72.png
│ ├── apple-touch-icon-76x76.png
│ ├── apple-touch-icon-114x114.png
│ ├── apple-touch-icon-120x120.png
│ ├── apple-touch-icon-144x144.png
│ ├── apple-touch-icon-152x152.png
│ ├── apple-touch-icon-180x180.png
│ ├── apple-touch-icon-precomposed.png
│ └── browserconfig.xml
├── images
│ ├── logo_cut.png
│ ├── hoodie_logo.png
│ ├── logo_cut_blue.png
│ ├── logo_cut_gray.png
│ ├── logo_cut_green.png
│ ├── logo_cut_lilac.png
│ ├── logo_cut_yellow.png
│ ├── logo_cut_negativ.png
│ ├── font
│ │ ├── FiraSans-Light.eot
│ │ ├── FiraSans-Light.otf
│ │ ├── FiraSans-Light.ttf
│ │ ├── FiraSans-Light.woff
│ │ ├── FiraSans-Medium.eot
│ │ ├── FiraSans-Medium.otf
│ │ ├── FiraSans-Medium.ttf
│ │ ├── FiraSans-Thin.otf
│ │ ├── FiraMono-Regular.eot
│ │ ├── FiraMono-Regular.otf
│ │ ├── FiraMono-Regular.ttf
│ │ ├── FiraMono-Regular.woff
│ │ ├── FiraSans-Medium.woff
│ │ ├── FiraSans-Regular.eot
│ │ ├── FiraSans-Regular.otf
│ │ ├── FiraSans-Regular.ttf
│ │ ├── FiraSans-Regular.woff
│ │ └── FiraMono-Regular.svg
│ ├── logo_cut_negativ_blue.png
│ ├── logo_cut_negativ_gray.png
│ ├── logo_cut_negativ_green.png
│ ├── logo_cut_negativ_lilac.png
│ ├── logo_cut_negativ_yellow.png
│ └── logo.svg
├── scripts
│ ├── controllers
│ │ ├── main.js
│ │ └── question.js
│ ├── services
│ │ ├── categorydata.js
│ │ └── questiondata.js
│ └── app.js
├── views
│ ├── question.html
│ └── index.html
└── index.html
├── .bowerrc
├── .DS_Store
├── .gitignore
├── .github
└── first-timers.yml
├── .travis.yml
├── test
├── spec
│ ├── services
│ │ ├── categorydata.js
│ │ └── questiondata.js
│ └── controllers
│ │ ├── main.js
│ │ └── question.js
├── .jshintrc
└── karma.conf.js
├── .editorconfig
├── .jshintrc
├── bower.json
├── package.json
├── README.md
└── Gruntfile.js
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
--------------------------------------------------------------------------------
/app/CNAME:
--------------------------------------------------------------------------------
1 | faq.hood.ie
2 |
--------------------------------------------------------------------------------
/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "bower_components"
3 | }
4 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/.DS_Store
--------------------------------------------------------------------------------
/app/styles/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/styles/.DS_Store
--------------------------------------------------------------------------------
/app/favicons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/favicon.ico
--------------------------------------------------------------------------------
/app/images/logo_cut.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut.png
--------------------------------------------------------------------------------
/app/images/hoodie_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/hoodie_logo.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .tmp
4 | .sass-cache
5 | bower_components
6 | .DS_Store
7 | *.log
8 |
--------------------------------------------------------------------------------
/app/favicons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/favicon-16x16.png
--------------------------------------------------------------------------------
/app/favicons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/favicon-32x32.png
--------------------------------------------------------------------------------
/app/favicons/favicon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/favicon-96x96.png
--------------------------------------------------------------------------------
/app/favicons/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/mstile-70x70.png
--------------------------------------------------------------------------------
/app/images/logo_cut_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_blue.png
--------------------------------------------------------------------------------
/app/images/logo_cut_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_gray.png
--------------------------------------------------------------------------------
/app/images/logo_cut_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_green.png
--------------------------------------------------------------------------------
/app/images/logo_cut_lilac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_lilac.png
--------------------------------------------------------------------------------
/app/images/logo_cut_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_yellow.png
--------------------------------------------------------------------------------
/app/favicons/favicon-160x160.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/favicon-160x160.png
--------------------------------------------------------------------------------
/app/favicons/favicon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/favicon-192x192.png
--------------------------------------------------------------------------------
/app/favicons/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/mstile-144x144.png
--------------------------------------------------------------------------------
/app/favicons/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/mstile-150x150.png
--------------------------------------------------------------------------------
/app/favicons/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/mstile-310x150.png
--------------------------------------------------------------------------------
/app/favicons/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/mstile-310x310.png
--------------------------------------------------------------------------------
/app/images/logo_cut_negativ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_negativ.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon.png
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Light.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Light.eot
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Light.otf
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Light.ttf
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Light.woff
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Medium.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Medium.eot
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Medium.otf
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Medium.ttf
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Thin.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Thin.otf
--------------------------------------------------------------------------------
/app/images/font/FiraMono-Regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraMono-Regular.eot
--------------------------------------------------------------------------------
/app/images/font/FiraMono-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraMono-Regular.otf
--------------------------------------------------------------------------------
/app/images/font/FiraMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraMono-Regular.ttf
--------------------------------------------------------------------------------
/app/images/font/FiraMono-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraMono-Regular.woff
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Medium.woff
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Regular.eot
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Regular.otf
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Regular.ttf
--------------------------------------------------------------------------------
/app/images/font/FiraSans-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/font/FiraSans-Regular.woff
--------------------------------------------------------------------------------
/app/images/logo_cut_negativ_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_negativ_blue.png
--------------------------------------------------------------------------------
/app/images/logo_cut_negativ_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_negativ_gray.png
--------------------------------------------------------------------------------
/app/images/logo_cut_negativ_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_negativ_green.png
--------------------------------------------------------------------------------
/app/images/logo_cut_negativ_lilac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_negativ_lilac.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-57x57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-57x57.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-60x60.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-72x72.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-76x76.png
--------------------------------------------------------------------------------
/app/images/logo_cut_negativ_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/images/logo_cut_negativ_yellow.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-114x114.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-120x120.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-144x144.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-152x152.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-180x180.png
--------------------------------------------------------------------------------
/app/favicons/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoodiehq/faq/HEAD/app/favicons/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/.github/first-timers.yml:
--------------------------------------------------------------------------------
1 | repository: camp
2 | labels:
3 | - first-timers-only
4 | - hacktoberfest
5 | - available
6 | template: .github/FIRST_TIMERS_ISSUE_TEMPLATE.md
--------------------------------------------------------------------------------
/app/scripts/controllers/main.js:
--------------------------------------------------------------------------------
1 | angular.module('faqApp').controller('MainCtrl', function ($scope, categoryData) {
2 | 'use strict';
3 | $scope.categories = [];
4 |
5 | categoryData().then(function(data) {
6 | $scope.categories = data;
7 | });
8 | });
9 |
--------------------------------------------------------------------------------
/app/scripts/services/categorydata.js:
--------------------------------------------------------------------------------
1 | angular.module('faqApp').service('categoryData', function (questionData) {
2 | 'use strict';
3 |
4 | return function() {
5 | return questionData().then(function(questions) {
6 | return _.groupBy(questions, 'category');
7 | });
8 | };
9 | });
10 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '0.10'
4 | notifications:
5 | email: false
6 | after_success:
7 | - npm run deploy
8 | env:
9 | global:
10 | - secure: TwDaYnvCKwRqiqlRpKXTTsR7z+YxTLL3Ls16QHQVuwRkIHJk2MUce7Y6ZtMU/OizSciqZ8YWMl12UovpyxERPfmLpWYPb3V2ud/9zCIDfujgm6XExO8vrZW3kkhW97Qmtpf+OcFFkgARzr2A9Piw3Dzew/LUNMemg7JCxGvYfuw=
11 | cache:
12 | directories:
13 | - node_modules
14 | sudo: false
15 |
--------------------------------------------------------------------------------
/test/spec/services/categorydata.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Service: categoryData', function () {
4 |
5 | // load the service's module
6 | beforeEach(module('faqApp'));
7 |
8 | // instantiate service
9 | var categoryData;
10 | beforeEach(inject(function (_categoryData_) {
11 | categoryData = _categoryData_;
12 | }));
13 |
14 | it('should do something', function () {
15 | expect(!!categoryData).toBe(true);
16 | });
17 |
18 | });
19 |
--------------------------------------------------------------------------------
/test/spec/services/questiondata.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Service: questionData', function () {
4 |
5 | // load the service's module
6 | beforeEach(module('faqApp'));
7 |
8 | // instantiate service
9 | var questionData;
10 | beforeEach(inject(function (_questionData_) {
11 | questionData = _questionData_;
12 | }));
13 |
14 | it('should do something', function () {
15 | expect(!!questionData).toBe(true);
16 | });
17 |
18 | });
19 |
--------------------------------------------------------------------------------
/app/favicons/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | #ffc40d
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 |
10 | # Change these settings to your own preference
11 | indent_style = space
12 | indent_size = 2
13 |
14 | # We recommend you to keep these unchanged
15 | end_of_line = lf
16 | charset = utf-8
17 | trim_trailing_whitespace = true
18 | insert_final_newline = true
19 |
20 | [*.md]
21 | trim_trailing_whitespace = false
22 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "node": true,
3 | "browser": true,
4 | "esnext": true,
5 | "bitwise": true,
6 | "camelcase": true,
7 | "curly": true,
8 | "eqeqeq": true,
9 | "immed": true,
10 | "indent": 2,
11 | "latedef": true,
12 | "newcap": true,
13 | "noarg": true,
14 | "quotmark": "single",
15 | "regexp": true,
16 | "undef": true,
17 | "unused": true,
18 | "strict": true,
19 | "trailing": true,
20 | "smarttabs": true,
21 | "globals": {
22 | "angular": false,
23 | "_": false
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/test/spec/controllers/main.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Controller: MainCtrl', function () {
4 |
5 | // load the controller's module
6 | beforeEach(module('faqApp'));
7 |
8 | var MainCtrl;
9 | var scope;
10 |
11 | // Initialize the controller and a mock scope
12 | beforeEach(inject(function ($controller, $rootScope) {
13 | scope = $rootScope.$new();
14 | MainCtrl = $controller('MainCtrl', {
15 | $scope: scope
16 | });
17 | }));
18 |
19 | // it('should attach a list of awesomeThings to the scope', function () {
20 | // expect(scope.awesomeThings.length).toBe(3);
21 | // });
22 | });
23 |
--------------------------------------------------------------------------------
/test/spec/controllers/question.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Controller: QuestionctrlCtrl', function () {
4 |
5 | // load the controller's module
6 | beforeEach(module('faqApp'));
7 |
8 | var QuestionctrlCtrl,
9 | scope;
10 |
11 | // Initialize the controller and a mock scope
12 | beforeEach(inject(function ($controller, $rootScope) {
13 | scope = $rootScope.$new();
14 | QuestionctrlCtrl = $controller('QuestionctrlCtrl', {
15 | $scope: scope
16 | });
17 | }));
18 |
19 | // it('should attach a list of awesomeThings to the scope', function () {
20 | // expect(scope.awesomeThings.length).toBe(3);
21 | // });
22 | });
23 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "faq",
3 | "version": "0.0.0",
4 | "dependencies": {
5 | "angular": "~1.4.3",
6 | "json3": "~3.3.1",
7 | "es5-shim": "~3.1.0",
8 | "angular-resource": "~1.4.3",
9 | "angular-sanitize": "~1.4.3",
10 | "angular-animate": "~1.4.3",
11 | "angular-touch": "~1.4.3",
12 | "normalize.css": "~3.0.1",
13 | "angular-ui-router": "~0.2.15",
14 | "lodash": "~3.10.0",
15 | "angular-loading-bar": "~0.8.0",
16 | "ngstorage": "~0.3.0",
17 | "angular-aria": "~1.4.3"
18 | },
19 | "devDependencies": {
20 | "angular-mocks": "~1.4.3",
21 | "angular-scenario": "~1.4.3"
22 | },
23 | "appPath": "app"
24 | }
25 |
--------------------------------------------------------------------------------
/app/scripts/controllers/question.js:
--------------------------------------------------------------------------------
1 | angular.module('faqApp').controller('QuestionCtrl', function ($scope, $state, $sanitize, questionData) {
2 | 'use strict';
3 |
4 | $scope.question = {};
5 |
6 | $scope.isOutDated = function(question) {
7 | if (!question.updated) {
8 | return false;
9 | }
10 | if (Date.now() - question.updated > 30 * 24 * 60 * 60 * 1e3 * 3) {
11 | return true;
12 | }
13 | return false;
14 | };
15 |
16 | questionData().then(function(questions) {
17 | var question = _.find(questions, function(question) {
18 | return question.id+'' === $state.params.id+'';
19 | });
20 |
21 | question.answer = $sanitize(question.answer);
22 |
23 | $scope.question = question;
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/test/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "node": true,
3 | "browser": true,
4 | "esnext": true,
5 | "bitwise": true,
6 | "camelcase": true,
7 | "curly": true,
8 | "eqeqeq": true,
9 | "immed": true,
10 | "indent": 2,
11 | "latedef": true,
12 | "newcap": true,
13 | "noarg": true,
14 | "quotmark": "single",
15 | "regexp": true,
16 | "undef": true,
17 | "unused": true,
18 | "strict": true,
19 | "trailing": true,
20 | "smarttabs": true,
21 | "globals": {
22 | "after": false,
23 | "afterEach": false,
24 | "angular": false,
25 | "before": false,
26 | "beforeEach": false,
27 | "browser": false,
28 | "describe": false,
29 | "expect": false,
30 | "inject": false,
31 | "it": false,
32 | "jasmine": false,
33 | "spyOn": false
34 | }
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/app/views/question.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 | {{ question.title }}
9 |
10 |
11 | This question hasn't been updated in three months.
12 | If in doubt visit our chat or ping us
13 | on Twitter (@hoodiehq).
14 |
15 |
16 | Improve this answer →
17 |
18 |
19 |
20 |
23 |
24 |
--------------------------------------------------------------------------------
/app/views/index.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
12 |
13 |
14 |
{{ category[0].category }}
15 |
22 |
23 |
24 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/scripts/app.js:
--------------------------------------------------------------------------------
1 | angular.module('faqApp', [
2 | 'ngAnimate',
3 | 'ngAria',
4 | 'ngResource',
5 | 'ngSanitize',
6 | 'ngTouch',
7 | 'ui.router',
8 | 'angular-loading-bar',
9 | 'ngStorage'
10 | ]).config(function($urlRouterProvider, $stateProvider, cfpLoadingBarProvider) {
11 | 'use strict';
12 |
13 | cfpLoadingBarProvider.includeSpinner = false;
14 |
15 | $urlRouterProvider.otherwise('/');
16 |
17 | $stateProvider
18 | .state('index', {
19 | url: '/',
20 | templateUrl: 'views/index.html',
21 | controller: 'MainCtrl'
22 | })
23 | .state('question', {
24 | url: '/question/:id',
25 | templateUrl: 'views/question.html',
26 | controller: 'QuestionCtrl'
27 | });
28 | }).run(function($q, $window) {
29 | 'use strict';
30 |
31 | var defer = $q.defer();
32 | var cache = $window.applicationCache;
33 | cache.addEventListener('updateready', defer.resolve);
34 |
35 | defer.promise.then(function() {
36 | $window.location.reload();
37 | });
38 |
39 | if (cache.status === cache.UPDATEREADY) {
40 | defer.resolve();
41 | }
42 | });
43 |
--------------------------------------------------------------------------------
/test/karma.conf.js:
--------------------------------------------------------------------------------
1 | module.exports = function(config) {
2 | 'use strict';
3 |
4 | config.set({
5 | autoWatch: true,
6 |
7 | basePath: '../',
8 |
9 | frameworks: ['jasmine'],
10 |
11 | files: [
12 | 'bower_components/angular/angular.js',
13 | 'bower_components/angular-mocks/angular-mocks.js',
14 | 'bower_components/angular-animate/angular-animate.js',
15 | 'bower_components/angular-aria/angular-aria.js',
16 | 'bower_components/angular-resource/angular-resource.js',
17 | 'bower_components/angular-sanitize/angular-sanitize.js',
18 | 'bower_components/angular-touch/angular-touch.js',
19 | 'bower_components/angular-ui-router/release/angular-ui-router.js',
20 | 'bower_components/lodash/dist/lodash.compat.js',
21 | 'bower_components/angular-loading-bar/src/loading-bar.js',
22 | 'bower_components/ngstorage/ngStorage.js',
23 | 'bower_components/marked/lib/marked.js',
24 | 'app/scripts/**/*.js',
25 | 'test/mock/**/*.js',
26 | 'test/spec/**/*.js'
27 | ],
28 |
29 | exclude: [],
30 |
31 | port: 8080,
32 |
33 | browsers: [
34 | 'PhantomJS'
35 | ],
36 |
37 | plugins: [
38 | 'karma-phantomjs-launcher',
39 | 'karma-jasmine'
40 | ],
41 |
42 | singleRun: false,
43 |
44 | colors: true,
45 |
46 | logLevel: config.LOG_INFO,
47 |
48 | });
49 | };
50 |
--------------------------------------------------------------------------------
/app/scripts/services/questiondata.js:
--------------------------------------------------------------------------------
1 | angular.module('faqApp').service('questionData', function ($http, $q, $localStorage) {
2 | 'use strict';
3 |
4 | var fresh = $http.get('https://api.github.com/repos/hoodiehq/faq/issues', {
5 | cache: true,
6 | headers: {
7 | 'Accept': 'application/vnd.github.v3.html+json'
8 | },
9 | params: {
10 | state: 'all',
11 | labels: 'answered'
12 | }
13 | });
14 |
15 | var promise = $localStorage.rawResponse ? $q.when($localStorage.rawResponse) : fresh;
16 |
17 | fresh.then(function(response) {
18 | $localStorage.rawResponse = response;
19 | });
20 |
21 | return function() {
22 | return promise.then(function(response) {
23 | var questions = _.map(response.data, function(question) {
24 | /*jshint camelcase: false */
25 | var result = {
26 | id: question.id,
27 | url: question.html_url,
28 | title: question.title,
29 | answer: question.body_html,
30 | updated: new Date(question.updated_at || question.created_at)
31 | };
32 |
33 | var categoryPattern = /^cat\:/;
34 | _.each(question.labels, function(label) {
35 |
36 | if (categoryPattern.test(label.name)) {
37 | result.category = label.name.replace(categoryPattern, '').trim();
38 | }
39 | });
40 |
41 | return result;
42 | });
43 |
44 | return _.sortBy(questions, function (question) {
45 | return question.category + question.title;
46 | });
47 | });
48 | };
49 | });
50 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "faq",
3 | "description": "Frequently asked questions about Hoodie",
4 | "version": "0.0.0",
5 | "author": "Stephan Bönnemann ",
6 | "bugs": {
7 | "url": "https://github.com/hoodiehq/faq/issues"
8 | },
9 | "dependencies": {},
10 | "devDependencies": {
11 | "bower": "^1.3.12",
12 | "grunt": "^0.4.1",
13 | "grunt-autoprefixer": "^2.2.0",
14 | "grunt-cli": "^0.1.13",
15 | "grunt-concurrent": "^1.0.0",
16 | "grunt-contrib-clean": "^0.6.0",
17 | "grunt-contrib-concat": "^0.5.0",
18 | "grunt-contrib-connect": "^0.9.0",
19 | "grunt-contrib-copy": "^0.7.0",
20 | "grunt-contrib-cssmin": "^0.11.0",
21 | "grunt-contrib-htmlmin": "^0.3.0",
22 | "grunt-contrib-imagemin": "^0.9.2",
23 | "grunt-contrib-jshint": "^0.11.0",
24 | "grunt-contrib-uglify": "^0.7.0",
25 | "grunt-contrib-watch": "^0.6.1",
26 | "grunt-filerev": "^2.1.2",
27 | "grunt-gh-pages": "^0.9.1",
28 | "grunt-google-cdn": "^0.4.0",
29 | "grunt-karma": "^0.10.1",
30 | "grunt-manifest": "^0.4.0",
31 | "grunt-newer": "^1.1.0",
32 | "grunt-ngmin": "^0.0.3",
33 | "grunt-svgmin": "^2.0.0",
34 | "grunt-usemin": "^3.0.0",
35 | "grunt-wiredep": "^2.0.0",
36 | "jasmine-core": "^2.2.0",
37 | "jshint-stylish": "^1.0.0",
38 | "karma": "^0.12.17",
39 | "karma-jasmine": "^0.3.5",
40 | "karma-phantomjs-launcher": "^0.1.4",
41 | "load-grunt-tasks": "^3.1.0",
42 | "time-grunt": "^1.0.0"
43 | },
44 | "engines": {
45 | "node": ">=0.10.0"
46 | },
47 | "homepage": "http://faq.hood.ie/",
48 | "keywords": [
49 | "answers",
50 | "faq",
51 | "issues",
52 | "no-backend",
53 | "questions"
54 | ],
55 | "license": "MIT",
56 | "main": "Gruntfile.js",
57 | "repository": {
58 | "type": "git",
59 | "url": "https://github.com/hoodiehq/faq.git"
60 | },
61 | "scripts": {
62 | "deploy": "grunt gh-pages",
63 | "install": "bower install",
64 | "start": "grunt serve",
65 | "test": "grunt"
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Frequently asked Hoodies
2 | [](https://travis-ci.org/hoodiehq/faq)
3 | [](https://david-dm.org/hoodiehq/faq)
4 | [](https://david-dm.org/hoodiehq/faq#info=devDependencies)
5 |
6 | ## FAQ Workflow - How to display questions and answers on faq.hood.ie
7 |
8 | First, a question must be asked! All questions are issues within the [issue tracker](https://github.com/hoodiehq/faq/issues) of this repository. A question will not show up on [faq.hood.ie](http://faq.hood.ie) until a hoodie contributor believes it has been answered correctly. When the question has been answered, a label of `answered` must be added to the GitHub issue for it to appear within the app.
9 |
10 | The FAQ app takes the issue's title and uses this as the question title on the app. The first post on the GitHub issue is assumed to be the answer. This can be problematic if the original post in the GitHub Issue is the question asked. In order to have the question and answer show up in the app, you should close the answered issue (make sure it does not have a label of `answered`) and create a new issue.
11 |
12 | This new issue's title should be the question, and the first post should be the answer. It should also have the `answered` label and a `cat:` (category) label so it shows up in helpful categories within the app. See an example [here](https://github.com/hoodiehq/faq/issues/30). This makes sure that our FAQ provides the best information possible and everyone can get the answers they need!
13 |
14 | If a better answer comes along, the previous issue within the now incorrect answer can be closed; and a new issue can be created.
15 |
16 | Comments and resources are encouraged on each question, dicussion is good and answers may change as time passes. Only the first post will be displayed on the question, but each question comes with a link to the issue to add/view more discussions.
17 |
18 |
19 | ## Development
20 |
21 | Install dependencies
22 |
23 | ```bash
24 | npm install
25 | ```
26 |
27 | Start development server
28 |
29 | ```bash
30 | npm start
31 | ```
32 |
33 | # License
34 |
35 | This app is MIT licensed. Feel free to reuse this for your own project.
36 |
--------------------------------------------------------------------------------
/app/styles/main.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'FiraMono';
3 | src: url('../images/font/FiraMono-Regular.eot');
4 | src: url('../images/font/FiraMono-Regular.eot?#iefix') format('embedded-opentype'),
5 | url('../images/font/FiraMono-Regular.woff') format('woff'),
6 | url('../images/font/FiraMono-Regular.ttf') format('truetype'),
7 | url('../images/font/FiraMono-Regular.svg#FiraSansMono') format('svg');
8 | font-weight: 300;
9 | font-style: normal;
10 |
11 | }
12 |
13 | .faq .content > h2{
14 | text-align: center;
15 | }
16 |
17 | .faq a {
18 | text-decoration: none;
19 | background-image: none;
20 | }
21 |
22 | .faq b {
23 | position: absolute;
24 | left: -999em;
25 | }
26 |
27 | .faq input#search {
28 | border: solid #CCC;
29 | border-width: 0 0 1px 0;
30 | padding: 0.25em 0.5em 0.1em;
31 | font-size: 25px;
32 | font-weight: 300;
33 | color: #312783;
34 | width: 100%;
35 | margin-top: 5px;
36 | margin-bottom: 35px;
37 | line-height: 32px;
38 | text-align: center;
39 | font-family: "FiraSansLight",sans-serif;
40 | }
41 |
42 | .faq input#search:focus,
43 | .faq input#search:hover{;
44 | outline: none;
45 | }
46 |
47 | .faq .cb{
48 | padding-bottom: 0;
49 | max-width: 80%;
50 | width: 41rem;
51 | }
52 |
53 | .faq h4{
54 | margin-top: 30px;
55 | }
56 |
57 | .faq .content ul,
58 | .faq .content li {
59 | margin-bottom: 0;
60 | }
61 |
62 | .cb p,
63 | .question li {
64 | font-size: 1.1em;
65 | line-height: 1.6;
66 | }
67 |
68 | .faq .task-list {
69 | font-size: 1em;
70 | line-height: 1.4;
71 | }
72 |
73 | .faq .sitemap {
74 | text-align: center;
75 | }
76 |
77 | .faq .footer ul {
78 | display: block;
79 | width: 100%;
80 | }
81 |
82 | .faq .footer li {
83 | display: inline-block;
84 | color: #fff;
85 | }
86 |
87 | .faq .footer li a {
88 | color: #fff;
89 | }
90 |
91 | .faq code,
92 | .faq kbd,
93 | .faq pre,
94 | .faq samp {
95 | font-family: "FiraMono",sans-serif;
96 | font-size: 1em;
97 | padding-top: 0;
98 | margin-top: 10px !important;
99 | white-space: pre-wrap !important;
100 | background-color: #F8F8FB !important;
101 | padding: 0.2em 0.5em 0.2em;
102 | margin-bottom: 25px;
103 | }
104 |
105 | .faq .note {
106 | margin: 1em 0;
107 | }
108 |
109 | .faq .note .btn {
110 | padding: 0.4em 1em 0.2em;
111 | background-color: #312783;
112 | color: #FFF;
113 | border: 0;
114 | text-decoration: none;
115 | text-shadow: none;
116 | font-weight: 500;
117 | margin-top: 2em;
118 | }
119 |
120 | .fly.ng-enter {
121 | transition: 100ms ease-in all;
122 | opacity: 0;
123 | }
124 |
125 | .fly.ng-enter-stagger {
126 | transition-delay: 100ms;
127 | }
128 |
129 | .fly.ng-enter-active {
130 | opacity: 1;
131 | }
132 |
133 | .fly.ng-leave {
134 | transition: 100ms ease-out all 30ms;
135 | opacity: 1;
136 | }
137 |
138 | .fly.ng-leave-active {
139 | opacity: 0;
140 | }
141 |
142 | .faq .question ul {
143 | margin: 1em 0;
144 | }
145 |
146 | .faq .question a {
147 | text-decoration: underline;
148 | }
149 |
150 | .faq #loading-bar .bar {
151 | background: #FFF;
152 | }
153 |
154 | .faq #loading-bar .peg {
155 | box-shadow: #FFF 1px 0 6px 1px;
156 | }
157 |
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
17 |
18 | Hoodie - Frequently Asked Questions
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
53 |
101 |
102 |
109 |
110 |
111 |
112 |
122 |
123 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 | 'use strict';
3 |
4 | require('load-grunt-tasks')(grunt);
5 | require('time-grunt')(grunt);
6 |
7 | var appConfig = {
8 | app: 'app',
9 | dist: 'dist'
10 | };
11 |
12 | grunt.initConfig({
13 |
14 | yeoman: appConfig,
15 |
16 | watch: {
17 | bower: {
18 | files: ['bower.json'],
19 | tasks: ['wiredep']
20 | },
21 | js: {
22 | files: ['<%= yeoman.app %>/scripts/**/*.js'],
23 | tasks: ['newer:jshint:all'],
24 | options: {
25 | livereload: '<%= connect.options.livereload %>'
26 | }
27 | },
28 | jsTest: {
29 | files: ['test/spec/**/*.js'],
30 | tasks: ['newer:jshint:test', 'karma']
31 | },
32 | styles: {
33 | files: ['<%= yeoman.app %>/styles/**/*.css'],
34 | tasks: ['newer:copy:styles', 'autoprefixer']
35 | },
36 | gruntfile: {
37 | files: ['Gruntfile.js']
38 | },
39 | livereload: {
40 | options: {
41 | livereload: '<%= connect.options.livereload %>'
42 | },
43 | files: [
44 | '<%= yeoman.app %>/**/*.html',
45 | '.tmp/styles/**/*.css',
46 | '<%= yeoman.app %>/images/**/*.{png,jpg,jpeg,gif,webp,svg}'
47 | ]
48 | }
49 | },
50 |
51 | connect: {
52 | options: {
53 | port: 9000,
54 | hostname: '0.0.0.0',
55 | livereload: 35729
56 | },
57 | livereload: {
58 | options: {
59 | open: true,
60 | middleware: function (connect) {
61 | return [
62 | connect.static('.tmp'),
63 | connect().use(
64 | '/bower_components',
65 | connect.static('./bower_components')
66 | ),
67 | connect.static(appConfig.app)
68 | ];
69 | }
70 | }
71 | },
72 | test: {
73 | options: {
74 | port: 9001,
75 | middleware: function (connect) {
76 | return [
77 | connect.static('.tmp'),
78 | connect.static('test'),
79 | connect().use(
80 | '/bower_components',
81 | connect.static('./bower_components')
82 | ),
83 | connect.static(appConfig.app)
84 | ];
85 | }
86 | }
87 | },
88 | dist: {
89 | options: {
90 | open: true,
91 | base: '<%= yeoman.dist %>'
92 | }
93 | }
94 | },
95 |
96 | jshint: {
97 | options: {
98 | jshintrc: '.jshintrc',
99 | reporter: require('jshint-stylish')
100 | },
101 | all: {
102 | src: [
103 | 'Gruntfile.js',
104 | '<%= yeoman.app %>/scripts/**/*.js'
105 | ]
106 | },
107 | test: {
108 | options: {
109 | jshintrc: 'test/.jshintrc'
110 | },
111 | src: ['test/spec/**/*.js']
112 | }
113 | },
114 |
115 | clean: {
116 | dist: {
117 | files: [{
118 | dot: true,
119 | src: [
120 | '.tmp',
121 | '<%= yeoman.dist %>/**/*',
122 | '!<%= yeoman.dist %>/.git*'
123 | ]
124 | }]
125 | },
126 | server: '.tmp'
127 | },
128 |
129 | autoprefixer: {
130 | options: {
131 | browsers: ['last 1 version']
132 | },
133 | dist: {
134 | files: [{
135 | expand: true,
136 | cwd: '.tmp/styles/',
137 | src: '**/*.css',
138 | dest: '.tmp/styles/'
139 | }]
140 | }
141 | },
142 |
143 | wiredep: {
144 | options: {
145 | cwd: ''
146 | },
147 | app: {
148 | src: ['<%= yeoman.app %>/index.html'],
149 | ignorePath: /\.\.\//
150 | }
151 | },
152 |
153 | filerev: {
154 | dist: {
155 | src: [
156 | '<%= yeoman.dist %>/scripts/**/*.js',
157 | '<%= yeoman.dist %>/styles/**/*.css',
158 | '<%= yeoman.dist %>/images/**/*.{png,jpg,jpeg,gif,webp,svg}',
159 | ]
160 | }
161 | },
162 |
163 | useminPrepare: {
164 | html: '<%= yeoman.app %>/index.html',
165 | options: {
166 | dest: '<%= yeoman.dist %>',
167 | flow: {
168 | html: {
169 | steps: {
170 | js: ['concat', 'uglifyjs'],
171 | css: ['cssmin']
172 | },
173 | post: {}
174 | }
175 | }
176 | }
177 | },
178 |
179 | usemin: {
180 | html: ['<%= yeoman.dist %>/**/*.html'],
181 | css: ['<%= yeoman.dist %>/styles/**/*.css'],
182 | options: {
183 | assetsDirs: ['<%= yeoman.dist %>','<%= yeoman.dist %>/images']
184 | }
185 | },
186 |
187 | imagemin: {
188 | dist: {
189 | files: [{
190 | expand: true,
191 | cwd: '<%= yeoman.app %>/images',
192 | src: '**/*.{png,jpg,jpeg,gif}',
193 | dest: '<%= yeoman.dist %>/images'
194 | }]
195 | }
196 | },
197 |
198 | svgmin: {
199 | dist: {
200 | files: [{
201 | expand: true,
202 | cwd: '<%= yeoman.app %>/images',
203 | src: '**/*.svg',
204 | dest: '<%= yeoman.dist %>/images'
205 | }]
206 | }
207 | },
208 |
209 | htmlmin: {
210 | dist: {
211 | options: {
212 | collapseWhitespace: true,
213 | conservativeCollapse: true,
214 | collapseBooleanAttributes: true,
215 | removeCommentsFromCDATA: true,
216 | removeOptionalTags: true
217 | },
218 | files: [{
219 | expand: true,
220 | cwd: '<%= yeoman.dist %>',
221 | src: ['*.html', 'views/**/*.html'],
222 | dest: '<%= yeoman.dist %>'
223 | }]
224 | }
225 | },
226 |
227 | ngmin: {
228 | dist: {
229 | files: [{
230 | expand: true,
231 | cwd: '.tmp/concat/scripts',
232 | src: '*.js',
233 | dest: '.tmp/concat/scripts'
234 | }]
235 | }
236 | },
237 |
238 | cdnify: {
239 | dist: {
240 | html: ['<%= yeoman.dist %>/*.html']
241 | }
242 | },
243 |
244 | copy: {
245 | dist: {
246 | files: [{
247 | expand: true,
248 | dot: true,
249 | cwd: '<%= yeoman.app %>',
250 | dest: '<%= yeoman.dist %>',
251 | src: [
252 | 'CNAME',
253 | 'favicons/*',
254 | '*.{ico,png,txt}',
255 | '.htaccess',
256 | '*.html',
257 | 'views/**/*.html',
258 | 'images/**/*.{webp,svg}',
259 | 'styles/fonts/*',
260 | 'images/font/**/*'
261 | ]
262 | }, {
263 | expand: true,
264 | cwd: '.tmp/images',
265 | dest: '<%= yeoman.dist %>/images',
266 | src: ['generated/*']
267 | }]
268 | },
269 | styles: {
270 | expand: true,
271 | cwd: '<%= yeoman.app %>/styles',
272 | dest: '.tmp/styles/',
273 | src: '**/*.css'
274 | }
275 | },
276 |
277 | concurrent: {
278 | server: [
279 | 'copy:styles'
280 | ],
281 | test: [
282 | 'copy:styles'
283 | ],
284 | dist: [
285 | 'copy:styles',
286 | 'imagemin'
287 | // 'svgmin'
288 | ]
289 | },
290 |
291 | karma: {
292 | unit: {
293 | configFile: 'test/karma.conf.js',
294 | singleRun: true
295 | }
296 | },
297 |
298 | 'gh-pages': {
299 | options: {
300 | base: 'dist',
301 | repo: 'https://' + process.env.GH_TOKEN + '@github.com/hoodiehq/faq',
302 | user: {
303 | name: 'Hoodie Bot',
304 | email: 'stephan@thehoodiefirm.com'
305 | }
306 | },
307 | src: '**/*'
308 | },
309 |
310 | manifest: {
311 | generate: {
312 | options: {
313 | basePath: '<%= yeoman.dist %>',
314 | preferOnline: true,
315 | verbose: false,
316 | },
317 | src: [
318 | '**/{,*}.*',
319 | '!index.html',
320 | '!manifest.appcache'
321 | ],
322 | dest: '<%= yeoman.dist %>/manifest.appcache'
323 | }
324 | }
325 | });
326 |
327 |
328 | grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
329 | if (target === 'dist') {
330 | return grunt.task.run(['build', 'connect:dist:keepalive']);
331 | }
332 |
333 | grunt.task.run([
334 | 'clean:server',
335 | 'wiredep',
336 | 'concurrent:server',
337 | 'autoprefixer',
338 | 'connect:livereload',
339 | 'watch'
340 | ]);
341 | });
342 |
343 | grunt.registerTask('test', [
344 | 'clean:server',
345 | 'concurrent:test',
346 | 'autoprefixer',
347 | 'connect:test',
348 | 'karma'
349 | ]);
350 |
351 | grunt.registerTask('build', [
352 | 'clean:dist',
353 | 'wiredep',
354 | 'useminPrepare',
355 | 'concurrent:dist',
356 | 'autoprefixer',
357 | 'concat',
358 | 'ngmin',
359 | 'copy:dist',
360 | 'cdnify',
361 | 'cssmin',
362 | 'uglify',
363 | 'filerev',
364 | 'usemin',
365 | 'htmlmin',
366 | 'manifest'
367 | ]);
368 |
369 | grunt.registerTask('default', [
370 | 'newer:jshint',
371 | 'test',
372 | 'build'
373 | ]);
374 | };
375 |
--------------------------------------------------------------------------------
/app/images/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
102 |
--------------------------------------------------------------------------------
/app/styles/hoodie.css:
--------------------------------------------------------------------------------
1 | html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}body{line-height:1;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after{content:'';content:none;}q:before,q:after{content:'';content:none;}table{border-collapse:collapse;border-spacing:0;}*{box-sizing:border-box;}img{max-width:100%;}section:before,.main-nav:before,.sub-nav:before,.cb:before,.friends:before,section:after,.main-nav:after,.sub-nav:after,.cb:after,.friends:after{content:" ";display:table;}section:after,.main-nav:after,.sub-nav:after,.cb:after,.friends:after{clear:both;}section,.main-nav,.sub-nav{width:100%;}header{z-index:1;}header section li,header section a{display:inline-block;}footer{padding-top:5.625rem;}@media (min-width: 30em){footer{margin-top:5.3125rem;}}.nav{height:4.0625rem;}.sub-nav{top:4.0625rem;padding:0.5rem 0 0.3125rem 0;}.sub-nav,.cb,.main-nav,.blog-list,.blog-post .comments{margin:0 auto;}.nav,.sub-nav{position:absolute;}.cb{width:100%;max-width:51.875rem;padding-bottom:2.625rem;}.cb.teaser{padding-bottom:3.5625rem;}.cb article{width:100%;max-width:37.5rem;margin:0 auto;}@media (min-width: 57.5em){.cb article{float:right;}}.cb aside{width:100%;margin:0 auto;max-width:37.5rem;}.cb aside br{display:none;}@media (min-width: 57.5em){.cb aside br{display:inline;}}@media (min-width: 57.5em){.cb aside{max-width:11.25rem;float:left;margin:0 3.125rem 0 0;}}.cb table{width:100%;}.cb tr:nth-child(even){background-color:#e1e1e1;}.cb td{padding:5px 8px;}.cb td:nth-child(1){width:60%;}.content{padding:10rem 1rem 0;}@media (min-width: 30em){.content{padding:12.5rem 1rem 0;}}@media (min-width: 57.5em){.content{padding:16.875rem 1rem 0;}}code{padding-top:1.5625rem;display:block;}.grid-9{width:100%;max-width:37.5rem;}.grid-9 figure figcaption{padding-bottom:1.875rem;}.grid-6{width:65%;max-width:28.125rem;}.grid-3{min-width:10.625rem;max-width:10.625rem;}.grid-3-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}.l{float:left;}.r{float:right;}.blog-post article{float:none;}.hide{display:none;}.centered{text-align:center;display:block;}.switch-on-break{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.switch-on-break .contribute-aside-icon{-webkit-order:1;-ms-flex-order:1;order:1;}.switch-on-break article{-webkit-order:2;-ms-flex-order:2;order:2;}@media (min-width: 57.5em){.switch-on-break{display:block;}}.vat{display:block;margin-top:0.9375rem;font-size:0.8em;}body{color:#404040;background-color:#fff;}.orange .content{background-image:url('../img/logo_cut_orange.png');background-repeat:no-repeat;background-position:center 3.5rem;}.orange footer{background-image:url('../img/logo_cut_negativ_orange.png');background-repeat:no-repeat;background-position:center 0;}.orange h1,.orange h2,.orange h3,.orange h4,.orange a{color:#e94e1b;}.orange a{background-image:linear-gradient(to bottom, #e94e1b 75%, rgba(233, 78, 27, 0.8) 75%);}.orange .nav,.orange .footer{background-color:#e94e1b;}.orange .footer .sitemap-link{color:#fff;}.orange .sub-nav{background-color:#f9c4b3;}.blue .content{background-image:url('../images/logo_cut_blue.png');background-repeat:no-repeat;background-position:center 3.5rem;}.blue footer{background-image:url('../images/logo_cut_negativ_blue.png');background-repeat:no-repeat;background-position:center 0;}.blue h1,.blue h2,.blue h3,.blue h4,.blue a{color:#273183;}.blue a{background-image:linear-gradient(to bottom, #273183 75%, rgba(39, 49, 131, 0.8) 75%);}.blue .nav,.blue .footer{background-color:#273183;}.blue .footer .sitemap-link{color:#fff;}.blue .sub-nav{background-color:#bfbcd8;}.green .content{background-image:url('../img/logo_cut_green.png');background-repeat:no-repeat;background-position:center 3.5rem;}.green footer{background-image:url('../img/logo_cut_negativ_green.png');background-repeat:no-repeat;background-position:center 0;}.green h1,.green h2,.green h3,.green h4,.green a{color:#0b8e36;}.green a{background-image:linear-gradient(to bottom, #0b8e36 75%, rgba(11, 142, 54, 0.8) 75%);}.green .nav,.green .footer{background-color:#0b8e36;}.green .footer .sitemap-link{color:#fff;}.green .sub-nav{background-color:#a9d6b8;}.yellow .content{background-image:url('../img/logo_cut_yellow.png');background-repeat:no-repeat;background-position:center 3.5rem;}.yellow footer{background-image:url('../img/logo_cut_negativ_yellow.png');background-repeat:no-repeat;background-position:center 0;}.yellow h1,.yellow h2,.yellow h3,.yellow h4,.yellow a{color:#f9b233;}.yellow a{background-image:linear-gradient(to bottom, #f9b233 75%, rgba(249, 178, 51, 0.8) 75%);}.yellow .nav,.yellow .footer{background-color:#f9b233;}.yellow .footer .sitemap-link{color:#fff;}.yellow .sub-nav{background-color:#fce3b6;}.lilac .content{background-image:url('../img/logo_cut_lilac.png');background-repeat:no-repeat;background-position:center 3.5rem;}.lilac footer{background-image:url('../img/logo_cut_negativ_lilac.png');background-repeat:no-repeat;background-position:center 0;}.lilac h1,.lilac h2,.lilac h3,.lilac h4,.lilac a{color:#520644;}.lilac a{background-image:linear-gradient(to bottom, #520644 75%, rgba(82, 6, 68, 0.8) 75%);}.lilac .nav,.lilac .footer{background-color:#520644;}.lilac .footer .sitemap-link{color:#fff;}.lilac .sub-nav{background-color:#c1a7bc;}.gray .content{background-image:url('../img/logo_cut_gray.png');background-repeat:no-repeat;background-position:center 3.5rem;}.gray footer{background-image:url('../img/logo_cut_negativ_gray.png');background-repeat:no-repeat;background-position:center 0;}.gray h1,.gray h2,.gray h3,.gray h4,.gray a{color:#282828;}.gray a{background-image:linear-gradient(to bottom, #282828 75%, rgba(40, 40, 40, 0.8) 75%);}.gray .nav,.gray .footer{background-color:#282828;}.gray .footer .sitemap-link{color:#fff;}.gray .sub-nav{background-color:#b3b3b3;}aside{color:#999;}.box:nth-child(even){background-color:#fefefe;}.sub-nav a{color:#404040 !important;}.main-nav a,.meta-nav a{color:#fff !important;}.cb:odd{background-color:#b3b3b3;}.cb aside a{color:#999;}article figure figcaption{color:#999;}.api-nav li a{color:#273183;}@font-face{font-family:'FiraSans';src:url('../images/font/FiraSans-Light.otf') format('truetype');font-weight:300;font-style:normal;}@font-face{font-family:'FiraSans';src:url('../images/font/FiraSans-Regular.otf') format('truetype'); font-weight:400;font-style:normal;}@font-face{font-family:'FiraSans';src:url('../images/font/FiraSans-Medium.otf') format('truetype');font-weight:500;font-style:normal;}body{font-family:'FiraSans',sans-serif;font-weight:300;font-size:100%;line-height:1.618;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}h1,.h1{font-size:2.25em;font-weight:500;line-height:1.363;margin-bottom:1.25rem;}h1 a,.h1 a{background-position:0 1.15em;}@-moz-document url-prefix(){h1 a,.h1 a{background-position:0 0.93em;}}h2,.h2{font-size:1.4em;font-weight:500;line-height:1.363;margin-bottom:1.188rem;text-transform:uppercase;}h3,.h3{font-size:1.375em;line-height:1.361;font-weight:500;margin-bottom:0.734rem;}h4,.h4{font-size:1.1em;line-height:1.363;font-weight:500;text-transform:uppercase;margin-bottom:0.734rem;}h5,.h5{font-size:1.1em;line-height:1.363;font-weight:500;text-transform:uppercase;margin-bottom:0.734rem;}h5 a,.h5 a{background-position:0 1.15em;}h6,.h6{font-size:0.875em;font-weight:500;line-height:1.6;}.h-section{max-width:37.5rem;margin:0 auto 1.1875rem;}@media (min-width: 57.5em){.h-section{margin:0 auto 1.1875rem 14.375rem;}}p{font-size:1.1875em;line-height:1.618;margin-bottom:1.625rem;}.teaser p{font-size:1.7em;line-height:1.618;}.teaser a{background-position:0 2.0625rem;}.teaser aside a{background-position:0 1.4375rem;}@media (min-width: 57.5em){aside{text-align:right;}}aside a{background-image:linear-gradient(to bottom, #999999 75%, rgba(153, 153, 153, 0.8) 75%) !important;background-position:0 1.3125rem;}@-moz-document url-prefix(){.teaser a{background-position:0 1.5625rem;}.teaser aside a{background-position:0 1.1875rem;}aside a{background-position:0 1.0625rem;}}blockquote p{font-style:italic;}small{font-size:0.8em;line-height:1.3;display:inline-block;}em{font-style:italic;}strong{font-weight:500;}a{text-decoration:none;background-repeat:repeat-x;background-size:1px 1px;background-position:0 1.375rem;text-shadow:1px 0 0 #fff,-1px 0 0 #fff;}@-moz-document url-prefix(){a{background-position:0 1.125rem;}}.main .teaser-index-section a,.orange-box a{text-shadow:1px 0 0 #e94e1b,-1px 0 0 #e94e1b;}.feature a,.contribute a,.merch a{text-shadow:none;}.sub-nav,.main-nav{text-align:center;}.meta-nav{text-align:right;}.meta-nav,.main-nav{font-size:1.094em;}.sub-nav{font-size:0.938em;}.sub-nav .sub-nav-list-item{margin-right:0.5625rem;}.sub-nav-list-item.current a{text-decoration:underline;}.nav,.sub-nav{text-transform:uppercase;}.nav a,.meta-nav .meta-nav-list-item{margin-right:0.5625rem;}.nav a:last-child,.sub-nav .sub-nav-list-item:last-child,.meta-nav .meta-nav-list-item:last-child{margin-right:0;}ul,ol{font-size:1.1875em;}ul ul,ul ol,ol ol,ol ul{font-size:1em;margin-top:0.75rem;}.cb aside{font-size:1.1em;line-height:1.618;}.cb.teaser{font-size:0.8em;}@media (min-width: 30em){.cb.teaser{font-size:1em;}}.cb.teaser aside{font-size:1.2em;line-height:1.618;}.cb li{margin-bottom:0.75rem;}article figure figcaption{font-size:1.1em;line-height:1.45;}code{font-family:'Fira Mono';font-size:1.2em;line-height:1.8;}input,textarea{font-family:"FiraSansLight",sans-serif;}.api-nav{font-size:1.1em;line-height:1.8;}.no-border,.bio-link a,.grid-3-container a{background-image:none !important;border:0 !important;}.friends .grid-3 a{background-position:0 7.55em;}.text-transform-reverse{text-transform:initial;}.emoji{border:none;}.contribute-topic-headline{text-align:center;}.person-bio .h3,.person-bio .h6,.person-bio article p,.person-bio .bio-link{padding-left:0;}@media (min-width: 30em){.person-bio .h3,.person-bio .h6,.person-bio article p,.person-bio .bio-link{padding-left:10.9375rem;}}.person-bio .h6{display:block;}.person-bio p{margin-bottom:0.75rem;}@media (min-width: 30em){.person-bio p{margin-bottom:1.625rem;}}.person-bio .grid-3{margin-top:0.3125rem;max-width:9.375rem;position:relative;}.person-bio .grid-3 .sw{position:absolute;left:0;opacity:1;transition:opacity 0.25s;}.person-bio .grid-3 .sw:hover{opacity:0;}.person-bio .bio-link{padding-top:0;width:100%;max-width:37.5rem;margin:0 auto;}@media (min-width: 57.5em){.person-bio .bio-link{max-width:11.25rem;padding-left:0;padding-top:8.0625rem;}}.person-bio figure.grid-3.l{float:none;}@media (min-width: 30em){.person-bio figure.grid-3.l{float:left;}}.friends .grid-3{margin-bottom:1.25rem;text-align:center;}@media (min-width: 30em){.friends .grid-3{margin-bottom:2.5rem;}}@media (min-width: 57.5em){.friends .grid-3{margin-bottom:3.75rem;}}.friends .grid-3 figure{min-height:9.375rem;margin-bottom:1rem;}.friends .grid-3 figure.contribute-topic-image-wrap{min-height:5.625rem;}.friends .grid-3 figure .contribute-topic-image{width:5rem;opacity:0.4;}.friends .grid-svg{margin-bottom:1.25rem;color:rgba(0, 0, 0, 0.3);}.api-nav{position:absolute;top:21.6875rem;width:12.5rem;text-align:right;padding:2.8125rem 1.875rem 2.1875rem 1.875rem;margin-left:13.75rem;background-color:#fefefe;border-radius:0.75rem;}.api-nav ul{margin-bottom:2.1875rem;}code{white-space:normal !important;border:0 none !important;background-color:transparent !important;margin-top:1.5625rem !important;}ul,ol{margin-bottom:1.625rem;}article ol{list-style-type:decimal;}ul{padding-left:1.625rem;list-style:inherit;}ol{padding-left:1.875rem;}img{border-radius:3px;border:1px solid #f1f1f1;}aside img{border:0;}.jump-mark{background-image:none !important;padding-top:3.125rem;margin-top:-3.125rem;background-clip:content-box;}.jump-mark:hover{background-image:none;}.friends svg,.contribute-aside-icon svg{width:5rem;height:5rem;display:block;margin:0 auto;}.friends use,.contribute-aside-icon use{-webkit-transform:scale(2.5);-ms-transform:scale(2.5);transform:scale(2.5);}@media (min-width: 57.5em){.contribute-aside-icon{text-align:right;}}.contribute-aside-icon svg{margin:0;display:inline-block;}.blog h1{text-transform:uppercase;}.blog h2{margin-top:2.5rem;}.blog p{margin-bottom:1rem;}.blog .entry{margin-bottom:1.25rem;}.blog blockquote{position:relative;padding:1rem 1rem 0.6875rem;margin-bottom:1.25rem;border-left:3px solid #b3b3b3;}.blog blockquote:before{position:absolute;content:'\201C';top:-1rem;font-size:4.5em;color:#b3b3b3;}.blog blockquote p{text-indent:2em;margin-bottom:0;}.blog blockquote cite{font-style:normal;display:block;text-align:right;margin-top:0.625rem;text-indent:6em;}.blog .blog-post-end{margin-top:5rem;}.blog__hr{background-color:#282828;border:0;width:10rem;height:1px;margin:1.25rem auto;}.blog-meta{display:block;margin-bottom:1.25rem;}.blog-post article{margin-bottom:3.75rem;}.blog-post article>p:first-of-type{font-style:italic;font-weight:500;font-size:1.7em;padding-bottom:3.5625rem;}.blog-post article>p:first-of-type a{background-position:0 35px;}.blog-post a{display:inline;}@-moz-document url-prefix(){.blog-post article>p:first-of-type a{background-position:0 25px;}}.blog-post-link{background-image:none !important;}.blog-post-link-more{font-weight:500;text-transform:uppercase;background-position:0 1.1875rem;}@-moz-document url-prefix(){.blog-post-link-more{background-position:0 0.9375rem;}}.blog-greetings{font-weight:500;font-size:1.125em;font-style:italic;}.pagination{float:right;margin-top:1.875rem;}.blog-post-excerpt img:not(.emoji){width:100%;}.blog-post-excerpt .emoji{vertical-align:sub;}.footer{padding:0 1rem;}.footer .grid-3{width:100%;max-width:none;}@media (min-width: 34.375em){.footer .grid-3{width:33%;}}.sitemap{padding:2.1875rem 0 0.9375rem;}.sitemap-list{line-height:1.6;list-style:none;padding-left:0;text-align:center;}.sitemap-list:last-child{margin-right:0;}.sitemap-list .sitemap-item{margin-bottom:0;}.sitemap-list .sitemap-item.smaller{font-size:0.8em;-moz-osx-font-smoothing:initial;}.sitemap-list .sitemap-item:first-child{padding-top:0;}.sitemap-list .sitemap-item-bold{font-weight:500;padding-top:0.9375rem;opacity:0.9;}.sitemap-list .sitemap-link{text-decoration:none !important;}.footer-licensing{color:#fff;font-size:0.875rem;}.footer-licensing a{color:#fff;background-image:linear-gradient(to bottom, #ffffff 45%, rgba(255, 255, 255, 0.4) 60%);background-position:0 0.8125rem;}@-moz-document url-prefix(){.footer-licensing a{background-position:0 0.625rem;}}.eventsIntro{padding-bottom:0;}#eventsList ul{list-style:none;padding-left:0;}#eventsList .hidden{display:none;}#eventsList .futureEvents{padding-right:1rem;}#eventsList .futureEvents .events>li:first-child{background-color:#f9b233;color:#fff;padding:0.5em 0.75em;border-radius:4px;font-weight:400;}#eventsList .futureEvents .events>li:first-child h3{color:#fff;}#eventsList .futureEvents .events>li:first-child a{color:#404040;background-image:linear-gradient(to bottom, #404040 75%, rgba(64, 64, 64, 0.8) 75%);text-shadow:none;}#eventsList .futureEvents .events>li:first-child .links{margin:0.75em 0 0.25em;}#eventsList .futureEvents .events>li:first-child:before{content:"Next event";width:100%;text-align:center;display:block;text-transform:uppercase;font-weight:500;}#eventsList .pastEvents{padding-left:1rem;}#eventsList .futureEvents,#eventsList .pastEvents{width:50%;float:left;box-sizing:border-box;}#eventsList .futureEvents h1,#eventsList .futureEvents h2,#eventsList .pastEvents h1,#eventsList .pastEvents h2{padding-left:0;text-align:center;margin-bottom:1.5em;}#eventsList .futureEvents .events>li,#eventsList .pastEvents .events>li{margin-bottom:1em;border-bottom:1px solid #f9b233;padding-bottom:1em;}#eventsList .futureEvents .events>li:last-of-type,#eventsList .pastEvents .events>li:last-of-type{border-bottom:none;}#eventsList .futureEvents .events>li p,#eventsList .futureEvents .events>li ul li a,#eventsList .pastEvents .events>li p,#eventsList .pastEvents .events>li ul li a{font-size:1em;line-height:1.5;}#eventsList .futureEvents .events>li .description,#eventsList .pastEvents .events>li .description{margin-bottom:0.75em;overflow:hidden;}#eventsList .futureEvents .events>li .links,#eventsList .pastEvents .events>li .links{padding-left:0;}#eventsList .futureEvents .events>li .links li,#eventsList .pastEvents .events>li .links li{margin-bottom:0;font-size:1rem;}#eventsList #filters{width:32em;display:block;margin:2em auto 4em;font-weight:500;}#eventsList #filters .icheckbox_flat-yellow{margin-top:-1px;margin-right:0.5em;margin-left:1em;}#eventsList .subline{display:block;text-transform:uppercase;font-weight:500;margin-top:-0.75em;font-size:0.75rem;margin-bottom:0.5em;}#eventsList .twitterCTA{background-color:#f9b233;color:#fff;padding:1.5em 0.75em;border-radius:4px;text-align:center;font-weight:400;}#eventsList .twitterCTA a{font-weight:500;font-size:1.375em;display:block;color:#fff;text-shadow:none;}#eventsList .loader{width:7em;height:7em;background:#f9b233;border-radius:50%;text-align:center;margin:0 auto;color:#fff;font-weight:500;font-size:1.25rem;padding-top:2em;text-transform:uppercase;}@media screen and (max-width: 890px){#content{padding-left:2em;padding-right:2em;}#content .cb{width:100%;}#eventsList{margin:2em;}#eventsList .futureEvents,#eventsList .pastEvents{width:100%;float:none;padding:0;}#eventsList .pastEvents{margin-top:3em;}}@media screen and (max-width: 630px){#eventsList #filters{width:100%;}#eventsList #filters label{display:inline-block;width:45%;margin-bottom:0.25em;}}@media screen and (max-width: 500px){#content{padding-left:1em;padding-right:1em;}#eventsList{margin:0;}}@media screen and (max-width: 380px){#eventsList #filters{width:100%;}#eventsList #filters label{display:block;width:100%;margin-bottom:0.25em;}}@-moz-document url-prefix(){#eventsList .events a{background-position:0 0.9375rem;}}.teaser-index{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}.teaser-index .grid-3{width:100% !important;max-width:100% !important;background-color:#fcfcfc;}@media (min-width: 50.3125em){.teaser-index .grid-3{width:32.833333333% !important;max-width:none !important;border-top-left-radius:0.75rem;border-top-right-radius:0.75rem;}}.teaser-index .grid-3:first-child{margin-top:0 !important;margin-right:0 !important;-webkit-order:2;-ms-flex-order:2;order:2;}@media (min-width: 50.3125em){.teaser-index .grid-3:first-child{-webkit-order:1;-ms-flex-order:1;order:1;margin-right:0.75% !important;}}.teaser-index .grid-3:last-child{margin-top:0 !important;-webkit-order:3;-ms-flex-order:3;order:3;}.teaser-index .grid-3 p{margin-bottom:0.9375rem;}.teaser-index .main{margin-right:0 !important;-webkit-order:1;-ms-flex-order:1;order:1;color:#fff;background-color:#e94e1b;border-top-left-radius:0.75rem;border-top-right-radius:0.75rem;}@media (min-width: 50.3125em){.teaser-index .main{-webkit-order:2;-ms-flex-order:2;order:2;margin-right:0.75% !important;}}@media (min-width: 50.3125em){.teaser-index .main{margin-top:-3.125rem !important;}}.teaser-index .main .teaser-index-section{font-weight:400;}.teaser-index-section{padding:0.9375rem 0.375rem;}.index .img-bg{background-size:cover;background-position:0 0;text-shadow:0 0 50px black;font-weight:400;}.index .img-bg p:last-of-type{margin-bottom:0;}.index .icon-calendar{width:2rem;height:2rem;}.index .orange-box{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.index .orange-box h3{margin-bottom:0 !important;}.index section p:last-of-type{margin-bottom:0;}svg path,svg rect{fill:currentColor;}@media (min-width: 50.3125em){.index .content{padding:16.875rem 1rem 0;}}.index .content .row{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem;}.index .content .row.first .main{margin-top:0;background-color:#e94e1b;color:#fff;}.index .content .row.first .main h3{font-size:2.25rem;text-align:center;margin-bottom:0.8125rem;color:#fff;}.index .content .row.first .main p{line-height:1.75rem;}.index .content .row.first .main a{color:#fff;background-image:linear-gradient(to bottom, #ffffff 75%, rgba(255, 255, 255, 0.8) 75%);}.index .content .row.white div{background-color:#fff;}.index .content .row div{min-height:2.5rem;background-color:#fcfcfc;padding:0.5625rem 0.5rem;}.index .content .row div section{padding:0.9375rem 0.375rem;}.index .content .row div section h3{margin-bottom:0.5625rem;text-transform:uppercase;}.index .content .row div.newsletter{padding:0 0.4375rem;}.index .content .row div input{border:0 none;color:#404040;font-size:1.6em;width:100%;height:2.5rem;}.index .content .row div input:focus{outline:none;}.index .content .row.last div{-webkit-border-bottom-right-radius:0.75rem;-webkit-border-bottom-left-radius:0.75rem;-moz-border-radius-bottomright:0.75rem;-moz-border-radius-bottomleft:0.75rem;border-bottom-right-radius:0.75rem;border-bottom-left-radius:0.75rem;}.index .content .row .img-bg h3,.index .content .row .img-bg p{color:#fff;}.index .content .row .img-bg h3{color:#e94e1b;}.index .content .row .img-bg a{font-weight:400;}.index .content .row .merch{background-image:url('../content_img/index/index_merch.jpg');}.index .content .row .feature{background-image:url('../content_img/index/index1.jpg');}.index .content .row .contribute{background-image:url('../content_img/index/contribute2.jpg');}.index .content .row .newsletter{border:1px solid #ebebeb;}.index .content .row .placeholder{background:#fff url('../content_img/index/placeholder.jpg') 60% 50% no-repeat;}.index .content .row .orange-box{background-color:#e94e1b !important;color:#fff;text-align:center;}.index .content .row .orange-box h3{color:#fff;}.index .content .row .orange-box a{color:#fff;display:block;}.index .content .row .orange-box img{margin:0.875rem 0 0.3125rem -0.9375rem;}.index .content .row .center{text-align:center;margin-left:-0.875rem;}.index .content .row .grid-3{max-width:none;width:100%;}@media (min-width: 43.5em){.index .content .row .grid-3{width:32.833333333%;margin-right:0.75%;}}.index .content .row .grid-3:nth-child(3n){margin-right:0;}.index .content .row .grid-6{max-width:none;margin-right:0;width:100%;}@media (min-width: 43.5em){.index .content .row .grid-6{width:66.416666666%;}}.index .content .row .grid-9{width:100%;max-width:none;margin-right:0;}.index .content .row .m-l{margin-right:0;margin-left:0;}@media (min-width: 43.5em){.index .content .row .m-l{margin-left:0.75%;}}.index .content #mc-embedded-subscribe{display:none;}.index .content #logo-animation{position:absolute;top:8.75rem;width:51.875rem;text-align:center;}.index .content #logo-animation.animate .letter{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}.index .content #logo-animation .letter{opacity:0;-webkit-transform:scale(0.1);-ms-transform:scale(0.1);transform:scale(0.1);-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;transition:all 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275);}.index .content #logo-animation .letter:nth-child(2){transition-delay:0.1s;}.index .content #logo-animation .letter:nth-child(3){transition-delay:0.2s;}.index .content #logo-animation .letter:nth-child(4){transition-delay:0.3s;}.index .content #logo-animation .letter:nth-child(5){transition-delay:0.4s;}.index .content #logo-animation .letter:nth-child(6){transition-delay:0.4s;}@-webkit-keyframes kaboom{0%{opacity:0;-webkit-transform:scale(0.1);transform:scale(0.1);}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1);}}@keyframes kaboom{0%{opacity:0;-webkit-transform:scale(0.1);transform:scale(0.1);}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1);}}header a,footer a{text-shadow:none !important;}@-moz-document url-prefix(){header a{background-position:0 23px;}}.nav{padding:1.0625rem 1.25rem;display:-webkit-flex;display:-ms-flexbox;display:flex;transition:height 0.2s;}.nav.is-active{position:fixed;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100vh;text-align:center;font-size:4vh;z-index:100;}.nav.is-active .main-nav{width:50%;margin-top:4vmin;margin-bottom:5vmin;}.nav.is-active .main-nav>a{margin-right:0;display:block;}@media (max-height: 26.667em){.nav.is-active .main-nav{width:80%;padding-right:1em;}.nav.is-active .main-nav a{display:inline-block;padding-left:1em;}}.nav.is-active .meta-nav{text-align:center;}.nav.is-active+.hid .sub-nav{top:auto;bottom:0;padding:0.5rem 0.625rem 0.3125rem 0.625rem;z-index:101;}.nav.is-active .active{background-position:0 6.1vh;}.nav .active{font-weight:500;}.logo{margin-right:0 !important;display:block;transition:all 0.2s;}.is-active .logo{padding-top:3vh;width:50%;margin:0 auto;margin-left:25%;}.logo img{border:0;}.main-nav{width:auto;padding-top:0.1875rem;display:none;}.is-active .main-nav{display:block;}@media (min-width: 64em){.main-nav{display:block;}}.meta-nav{padding:0;margin:0;display:none;}.is-active .meta-nav{display:inline-block;}@media (min-width: 64em){.meta-nav{display:inline-block;}}.meta-nav-list-item{padding-top:0.1875rem;}.sub-nav{display:none;}.is-active+.hid .sub-nav{display:block;}@media (min-width: 64em){.sub-nav{display:block;}}.sub-nav a{background-image:none;}.meta-nav a,.main-nav a,.sub-nav a{font-weight:300;}.menu-button{display:block;height:2.1875rem;width:2.1875rem;text-align:center;z-index:102;position:relative;margin-left:auto;transition:all 0.2s;top:-0.25rem;}.is-active .menu-button{display:block;top:-82.6vh;}@media (min-width: 64em){.menu-button{display:none;}}.menu-button-span,.menu-button-span:before,.menu-button-span:after{width:2.1875rem;background-color:#fff;height:0.3125rem;display:inline-block;border-radius:3px;}.menu-button-span:before,.menu-button-span:after{content:"";position:absolute;left:0;transition:all 0.2s;}.menu-button-span{top:-0.3125rem;position:relative;transition:all 0.2s;}.menu-button-span:before{top:1.25rem;}.menu-button-span:after{top:0.625rem;}.is-active .menu-button{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);top:1rem;position:absolute;right:1.25rem;}.is-active .menu-button-span:after{opacity:0;}.is-active .menu-button-span:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);top:0;}body.orange .animation.colorise .letter{stroke:#e94e1b;}body.blue .animation.colorise .letter{stroke:#273183;}body.green .animation.colorise .letter{stroke:#0b8e36;}body.yellow .animation.colorise .letter{stroke:#f9b233;}body.lilac .animation.colorise .letter{stroke:#520644;}body.gray .animation.colorise .letter{stroke:#282828;}.animated-logo{text-align:center;margin-top:6.375rem;position:absolute;background:#fff;width:100%;overflow:hidden;}.animated-logo .animation{transition:margin-top 0.5s,stroke 0.5s;margin:1.25em 0 1em;}.animated-logo .animation svg{width:90%;}.animated-logo .animation.slideUp{margin-top:-8.75em;}.animated-logo .animation.animate .letter{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}.animated-logo .animation .letter{opacity:0;-webkit-transform:scale(0.1);-ms-transform:scale(0.1);transform:scale(0.1);-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;transition:all 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275);}.animated-logo .animation .letter:nth-child(2){transition-delay:0.1s;}.animated-logo .animation .letter:nth-child(3){transition-delay:0.2s;}.animated-logo .animation .letter:nth-child(4){transition-delay:0.3s;}.animated-logo .animation .letter:nth-child(5){transition-delay:0.4s;}.animated-logo .animation .letter:nth-child(6){transition-delay:0.4s;}.content{transition:background-position 1s,margin-top 0.5s;}.content.during-intro{margin-top:3rem;background-position:center -6.25rem;}.is-active .logo img{width:180px !important;}.is-fixed{position:fixed !important;bottom:0;z-index:400;}.mobile header{height:65px;}.mobile header.during-intro{height:200px;}.mobile header.detached{height:65px;}.mobile header.detached.is-active{height:100%;}.mobile header.is-active{height:100%;}.mobile header a{background-image:none;}.mobile header .main-nav{opacity:0;transition:opacity 0.5s;}.mobile header .is-active .main-nav{opacity:1;}.mobile header .animated-logo{margin-top:4.375rem;}.mobile header .animated-logo .animation{margin:0.75em auto 0.25em;width:80%;}.mobile header .animated-logo .animation.slideUp{margin-top:-8.75em;}.no_scroll{overflow:hidden;height:100%;}header{position:absolute;top:0;width:100%;height:102px;right:0;z-index:1000;cursor:pointer;overflow:hidden;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0);transition:-webkit-transform 0.4s,height 0.3s,background 0.4s;transition:transform 0.4s,height 0.3s,background 0.4s;}header.during-intro{height:245px;}.invisible{-webkit-transform:translate(0, -64px);-ms-transform:translate(0, -64px);transform:translate(0, -64px);transition:-webkit-transform 0.2s;transition:transform 0.2s;opacity:0;}.detached{position:fixed;transition:-webkit-transform 0.3s,height 0.3s,background 0.4s,opacity 0.3s;transition:transform 0.3s,height 0.3s,background 0.4s,opacity 0.3s;}.expanded{width:100%;height:100%;position:fixed;cursor:default;}.expanded .menu-button-span:before{content:'x';font-size:1.4em;line-height:1.4em;padding-right:0.15em;}.menu-button-span:focus{outline:none;}
2 | #api_nav ul {list-style: none;} #api_nav li:nth-child(1) {font-weight:700;} #api_nav ul li a {text-decoration: none;}
3 |
--------------------------------------------------------------------------------
/app/images/font/FiraMono-Regular.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | connect-fonts-firamono/firamono-regular.svg at master · shane-tomlinson/connect-fonts-firamono
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | Skip to content
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
320 |
321 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
687 |
688 |
689 |
690 |
709 |
710 |
711 |
712 |
713 |
714 |
715 | Something went wrong with that request. Please try again.
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
--------------------------------------------------------------------------------