├── .nvmrc
├── demo
├── .yo-rc.json
├── .gitattributes
├── app
│ ├── .buildignore
│ ├── robots.txt
│ ├── favicon.ico
│ ├── images
│ │ └── icons
│ │ │ └── menu.svg
│ ├── styles
│ │ ├── main.css
│ │ └── material.color.css
│ ├── views
│ │ ├── default.html
│ │ ├── home.html
│ │ └── _common.html
│ ├── scripts
│ │ ├── controllers
│ │ │ ├── home.js
│ │ │ └── _common.js
│ │ └── app.js
│ ├── index.html
│ ├── 404.html
│ └── .htaccess
├── .bowerrc
├── dist
│ ├── robots.txt
│ ├── favicon.ico
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ └── fontawesome-webfont.woff2
│ ├── images
│ │ └── icons
│ │ │ └── menu.f1d75e5f.svg
│ ├── styles
│ │ ├── main.87c88416.css
│ │ └── sidenav.487db4cd.css
│ ├── views
│ │ ├── default.html
│ │ ├── home.html
│ │ └── _common.html
│ ├── index.html
│ ├── 404.html
│ ├── scripts
│ │ ├── scripts.a6f0f97b.js
│ │ └── sidenav.740c0473.js
│ └── .htaccess
├── .gitignore
├── .travis.yml
├── .jshintrc
├── README.md
├── test
│ ├── .jshintrc
│ ├── spec
│ │ └── controllers
│ │ │ ├── _common.js
│ │ │ └── home.js
│ └── karma.conf.js
├── .editorconfig
├── bower.json
├── package.json
└── Gruntfile.js
├── .gitignore
├── package.json
├── bower.json
├── angular-material-sidenav.css
├── README.md
└── angular-material-sidenav.js
/.nvmrc:
--------------------------------------------------------------------------------
1 | 0.12.7
2 |
--------------------------------------------------------------------------------
/demo/.yo-rc.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | sftp-config.json
2 |
--------------------------------------------------------------------------------
/demo/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
--------------------------------------------------------------------------------
/demo/app/.buildignore:
--------------------------------------------------------------------------------
1 | *.coffee
--------------------------------------------------------------------------------
/demo/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "bower_components"
3 | }
4 |
--------------------------------------------------------------------------------
/demo/app/robots.txt:
--------------------------------------------------------------------------------
1 | # robotstxt.org
2 |
3 | User-agent: *
4 | Disallow:
5 |
--------------------------------------------------------------------------------
/demo/dist/robots.txt:
--------------------------------------------------------------------------------
1 | # robotstxt.org
2 |
3 | User-agent: *
4 | Disallow:
5 |
--------------------------------------------------------------------------------
/demo/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | /node_modules
4 | /.tmp
5 | /.sass-cache
6 | /bower_components
7 |
--------------------------------------------------------------------------------
/demo/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/app/favicon.ico
--------------------------------------------------------------------------------
/demo/dist/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/dist/favicon.ico
--------------------------------------------------------------------------------
/demo/dist/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/dist/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/demo/dist/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/dist/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/demo/dist/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/dist/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/demo/dist/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/dist/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/demo/dist/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sovanna/angular-material-sidenav/HEAD/demo/dist/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/demo/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 | language: node_js
3 | node_js:
4 | - 'iojs'
5 | - '0.12'
6 | - '0.10'
7 | before_script:
8 | - 'npm install -g bower grunt-cli'
9 | - 'bower install'
10 |
--------------------------------------------------------------------------------
/demo/dist/images/icons/menu.f1d75e5f.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demo/app/images/icons/menu.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/demo/dist/styles/main.87c88416.css:
--------------------------------------------------------------------------------
1 | body,body>div{max-width:100%;max-height:100%;overflow:hidden}body>div{height:100%}.nav-header{-webkit-flex-shrink:0;flex-shrink:0;z-index:2}.nav-header h1,.nav-header h4{color:#fff;text-align:center}.nav-header a.logo{text-decoration:none}
--------------------------------------------------------------------------------
/demo/dist/views/default.html:
--------------------------------------------------------------------------------
1 |
{{model.title}}
--------------------------------------------------------------------------------
/demo/dist/views/home.html:
--------------------------------------------------------------------------------
1 |
Angular Material Sidenav
--------------------------------------------------------------------------------
/demo/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "bitwise": true,
3 | "browser": true,
4 | "curly": true,
5 | "eqeqeq": true,
6 | "esnext": true,
7 | "latedef": true,
8 | "noarg": true,
9 | "node": true,
10 | "strict": true,
11 | "undef": true,
12 | "unused": true,
13 | "globals": {
14 | "angular": false
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/demo/README.md:
--------------------------------------------------------------------------------
1 | # demo
2 |
3 | This project is generated with [yo angular generator](https://github.com/yeoman/generator-angular)
4 | version 0.12.0.
5 |
6 | ## Build & development
7 |
8 | Run `grunt` for building and `grunt serve` for preview.
9 |
10 | ## Testing
11 |
12 | Running `grunt test` will run the unit tests with karma.
13 |
--------------------------------------------------------------------------------
/demo/test/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "bitwise": true,
3 | "browser": true,
4 | "curly": true,
5 | "eqeqeq": true,
6 | "esnext": true,
7 | "jasmine": true,
8 | "latedef": true,
9 | "noarg": true,
10 | "node": true,
11 | "strict": true,
12 | "undef": true,
13 | "unused": true,
14 | "globals": {
15 | "angular": false,
16 | "inject": false
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/demo/app/styles/main.css:
--------------------------------------------------------------------------------
1 | body,
2 | body > div {
3 | max-width: 100%;
4 | max-height: 100%;
5 | overflow: hidden;
6 | }
7 |
8 | body > div {
9 | height: 100%;
10 | }
11 |
12 | .nav-header {
13 | flex-shrink: 0;
14 | z-index: 2;
15 | }
16 |
17 | .nav-header h1,
18 | .nav-header h4 {
19 | color: white;
20 | text-align: center;
21 | }
22 |
23 | .nav-header a.logo {
24 | text-decoration: none;
25 | }
--------------------------------------------------------------------------------
/demo/.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 |
--------------------------------------------------------------------------------
/demo/app/views/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
13 |
{{model.title}}
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo/app/scripts/controllers/home.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * @ngdoc function
5 | * @name demoApp.controller:IndexCtrl
6 | * @description
7 | * # IndexCtrl
8 | * Controller of the demoApp
9 | */
10 | angular.module('demoApp')
11 |
12 | .controller('HomeCtrl', [
13 | '$scope',
14 | '$timeout',
15 | '$state',
16 | 'ssSideNav',
17 | function (
18 | $scope,
19 | $timeout,
20 | $state,
21 | ssSideNav) {
22 |
23 |
24 | }
25 | ]);
--------------------------------------------------------------------------------
/demo/app/views/home.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
13 |
Angular Material Sidenav
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo/dist/views/_common.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demo/test/spec/controllers/_common.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Controller: CommonCtrl', function () {
4 |
5 | var controller, scope;
6 |
7 | // load the controller's module
8 | beforeEach(module('demoApp'));
9 |
10 | // Initialize the controller and a mock scope
11 | beforeEach(inject(function ($controller, $rootScope) {
12 | scope = $rootScope.$new();
13 | controller = $controller('CommonCtrl', {
14 | $scope: scope
15 | });
16 | }));
17 |
18 | it('Assign a menu to the controller', function () {
19 | expect(scope.menu).toBeDefined();
20 | });
21 |
22 | });
23 |
--------------------------------------------------------------------------------
/demo/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo",
3 | "version": "0.0.0",
4 | "dependencies": {
5 | "angular": "^1.3.0",
6 | "angular-animate": "^1.3.0",
7 | "angular-aria": "^1.3.0",
8 | "angular-cookies": "^1.3.0",
9 | "angular-messages": "^1.3.0",
10 | "angular-resource": "^1.3.0",
11 | "angular-route": "^1.3.0",
12 | "angular-sanitize": "^1.3.0",
13 | "angular-touch": "^1.3.0",
14 | "angular-material": "^1.0.0",
15 | "angular-ui-router": "~0.2.15",
16 | "font-awesome": "~4.5.0"
17 | },
18 | "devDependencies": {
19 | "angular-mocks": "^1.3.0"
20 | },
21 | "appPath": "app",
22 | "moduleName": "demoApp"
23 | }
24 |
--------------------------------------------------------------------------------
/demo/app/views/_common.html:
--------------------------------------------------------------------------------
1 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/demo/test/spec/controllers/home.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | describe('Controller: HomeCtrl', function () {
4 |
5 | // load the controller's module
6 | beforeEach(module('demoApp'));
7 |
8 | var HomeCtrl, scope;
9 |
10 | // Initialize the controller and a mock scope
11 | beforeEach(inject(function ($controller, $rootScope) {
12 | scope = $rootScope.$new();
13 | HomeCtrl = $controller('HomeCtrl', {
14 | // place here mocked dependencies
15 | $scope: scope
16 | });
17 | }));
18 |
19 | // it('should attach a list of awesomeThings to the scope', function () {
20 | // expect(HomeCtrl.awesomeThings.length).toBe(3);
21 | // });
22 | });
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-material-sidenav",
3 | "version": "0.0.14",
4 | "homepage": "https://github.com/sovanna/angular-material-sidenav",
5 | "authors": [
6 | "Sovanna Hing "
7 | ],
8 | "description": "Component that build the same sidenav from official angular material website",
9 | "main": "./angular-material-sidenav.js",
10 | "style": "./angular-material-sidenav.css",
11 | "keywords": [
12 | "angular",
13 | "material",
14 | "angular-material",
15 | "sidenav",
16 | "angular-material-sidenav"
17 | ],
18 | "dependencies": {
19 | "angular": "^1.3.0",
20 | "angular-animate": "^1.3.0",
21 | "angular-aria": "^1.3.0",
22 | "angular-cookies": "^1.3.0",
23 | "angular-messages": "^1.3.0",
24 | "angular-resource": "^1.3.0",
25 | "angular-route": "^1.3.0",
26 | "angular-sanitize": "^1.3.0",
27 | "angular-touch": "^1.3.0",
28 | "angular-material": "^1.0.0",
29 | "angular-ui-router": "~0.2.15"
30 | },
31 | "private": false,
32 | "license": "MIT"
33 | }
34 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-material-sidenav",
3 | "version": "0.0.14",
4 | "homepage": "https://github.com/sovanna/angular-material-sidenav",
5 | "authors": [
6 | "Sovanna Hing "
7 | ],
8 | "description": "Component that build the same sidenav from official angular material website",
9 | "main": [
10 | "./angular-material-sidenav.js",
11 | "./angular-material-sidenav.css"
12 | ],
13 | "keywords": [
14 | "angular",
15 | "material",
16 | "angular-material",
17 | "sidenav",
18 | "angular-material-sidenav"
19 | ],
20 | "dependencies": {
21 | "angular": "^1.3.0",
22 | "angular-animate": "^1.3.0",
23 | "angular-aria": "^1.3.0",
24 | "angular-cookies": "^1.3.0",
25 | "angular-messages": "^1.3.0",
26 | "angular-resource": "^1.3.0",
27 | "angular-route": "^1.3.0",
28 | "angular-sanitize": "^1.3.0",
29 | "angular-touch": "^1.3.0",
30 | "angular-material": "^1.0.0",
31 | "angular-ui-router": "~0.2.15"
32 | },
33 | "private": false,
34 | "license": "MIT"
35 | }
36 |
--------------------------------------------------------------------------------
/demo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo",
3 | "private": true,
4 | "devDependencies": {
5 | "grunt": "^0.4.5",
6 | "grunt-angular-templates": "^0.5.7",
7 | "grunt-autoprefixer": "^2.0.0",
8 | "grunt-cli": "^1.2.0",
9 | "grunt-concurrent": "^1.0.0",
10 | "grunt-contrib-clean": "^0.6.0",
11 | "grunt-contrib-concat": "^0.5.0",
12 | "grunt-contrib-connect": "^0.9.0",
13 | "grunt-contrib-copy": "^0.7.0",
14 | "grunt-contrib-cssmin": "^0.12.0",
15 | "grunt-contrib-htmlmin": "^0.4.0",
16 | "grunt-contrib-imagemin": "^0.9.2",
17 | "grunt-contrib-jshint": "^0.11.0",
18 | "grunt-contrib-uglify": "^0.7.0",
19 | "grunt-contrib-watch": "^0.6.1",
20 | "grunt-filerev": "^2.1.2",
21 | "grunt-google-cdn": "^0.4.3",
22 | "grunt-karma": "*",
23 | "grunt-newer": "^1.1.0",
24 | "grunt-ng-annotate": "^0.9.2",
25 | "grunt-svgmin": "^2.0.0",
26 | "grunt-usemin": "^3.0.0",
27 | "grunt-wiredep": "^2.0.0",
28 | "jit-grunt": "^0.9.1",
29 | "jshint-stylish": "^1.0.0",
30 | "karma-jasmine": "*",
31 | "karma-phantomjs-launcher": "*",
32 | "time-grunt": "^1.0.0"
33 | },
34 | "engines": {
35 | "node": ">=0.10.0"
36 | },
37 | "scripts": {
38 | "test": "grunt test"
39 | },
40 | "dependencies": {
41 | "grunt-angular-templates": "^0.5.7",
42 | "grunt-cdnify": "^0.1.1"
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/demo/dist/index.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demo/dist/styles/sidenav.487db4cd.css:
--------------------------------------------------------------------------------
1 | .menu,.menu li,.menu md-select{margin:0}.menu .md-button,.menu-heading{text-align:left;width:100%;display:block}.menu,.menu ul{list-style:none;padding:0}.menu>li{border-bottom:1px solid}.menu>li:nth-child(1){border-top:none}.md-whiteframe-glow-z1{box-shadow:0 0 1px 1px rgba(0,0,0,.14),0 0 2px 2px rgba(0,0,0,.098),0 0 5px 1px rgba(0,0,0,.084)}.menu .md-button{box-shadow:none!important;border-radius:0;cursor:pointer;align-items:inherit;line-height:40px;margin:0;max-height:40px;overflow:hidden;padding:0 16px;text-decoration:none;white-space:normal}.menu md-select{width:100%}.menu md-select md-select-label{justify-content:flex-end;padding-top:10px}.menu md-select md-select-label span{margin-right:auto;padding-left:13px}.menu md-select .md-select-icon{margin-right:28px}.menu button.md-button::-moz-focus-inner{padding:0}.menu-heading{line-height:32px;margin:0;padding:8px 16px 0}.menu-toggle-list{overflow:hidden;position:relative;z-index:1}.menu .menu-toggle-list a.md-button{display:block;padding:0 16px 0 32px;text-transform:none;text-rendering:optimizeLegibility;font-weight:500}.md-button-toggle .md-toggle-icon{display:block;margin-left:auto;speak:none;vertical-align:middle;transform:rotate(180deg);-webkit-transform:rotate(180deg);transition:transform .3s ease-in-out;-webkit-transition:-webkit-transform .3s ease-in-out}.md-button-toggle .md-toggle-icon.toggled{transform:rotate(0);-webkit-transform:rotate(0)}
--------------------------------------------------------------------------------
/angular-material-sidenav.css:
--------------------------------------------------------------------------------
1 | .menu {
2 | margin: 0;
3 | }
4 |
5 | .menu,
6 | .menu ul {
7 | list-style: none;
8 | padding: 0;
9 | }
10 |
11 | .menu li {
12 | margin: 0;
13 | }
14 |
15 | .menu > li {
16 | border-bottom: 1px solid;
17 | }
18 |
19 | .menu > li:nth-child(1) {
20 | border-top: none;
21 | }
22 |
23 | .md-whiteframe-glow-z1 {
24 | box-shadow: 0px 0px 1px 1px rgba(0, 0, 0, 0.14), 0px 0px 2px 2px rgba(0, 0, 0, 0.098), 0px 0px 5px 1px rgba(0, 0, 0, 0.084);
25 | }
26 |
27 | .menu .md-button {
28 | box-shadow: none !important;
29 | border-radius: 0;
30 | /*color: white;*/
31 | cursor: pointer;
32 | display: block;
33 | align-items: inherit;
34 | line-height: 40px;
35 | margin: 0;
36 | max-height: 40px;
37 | overflow: hidden;
38 | padding: 0px 16px;
39 | text-align: left;
40 | text-decoration: none;
41 | white-space: normal;
42 | width: 100%;
43 | }
44 |
45 | .menu md-select {
46 | /**
47 | * Override md-select margins.
48 | * With margins the menu will look incorrect and causes mobile list
49 | * to not be scrollable.
50 | */
51 | margin: 0;
52 | width: 100%;
53 | }
54 |
55 | .menu md-select md-select-label {
56 | justify-content: flex-end;
57 | padding-top: 10px;
58 | }
59 |
60 | .menu md-select md-select-label span {
61 | margin-right: auto;
62 | padding-left: 13px;
63 | }
64 |
65 | .menu md-select .md-select-icon {
66 | margin-right: 28px;
67 | }
68 |
69 | .menu button.md-button::-moz-focus-inner {
70 | padding: 0;
71 | }
72 |
73 | .menu-heading {
74 | display: block;
75 | line-height: 32px;
76 | margin: 0;
77 | padding: 8px 16px 0;
78 | text-align: left;
79 | width: 100%;
80 | }
81 |
82 | .menu-toggle-list {
83 | overflow: hidden;
84 | position: relative;
85 | z-index: 1;
86 | }
87 |
88 | .menu .menu-toggle-list a.md-button {
89 | display: block;
90 | padding: 0 16px 0 32px;
91 | text-transform: none;
92 | text-rendering: optimizeLegibility;
93 | font-weight: 500;
94 | }
95 |
96 | .md-button-toggle .md-toggle-icon {
97 | display: block;
98 | margin-left: auto;
99 | speak: none;
100 | vertical-align: middle;
101 | transform: rotate(180deg);
102 | -webkit-transform: rotate(180deg);
103 | transition: transform 0.3s ease-in-out;
104 | -webkit-transition: -webkit-transform 0.3s ease-in-out;
105 | }
106 |
107 | .md-button-toggle .md-toggle-icon.toggled {
108 | transform: rotate(0deg);
109 | -webkit-transform: rotate(0deg);
110 | }
111 |
112 | .md-toggle-icon md-icon{
113 | height: 40px;
114 | }
115 |
--------------------------------------------------------------------------------
/demo/app/scripts/controllers/_common.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * @ngdoc function
5 | * @name demoApp.controller:CommonCtrl
6 | * @description
7 | * # CommonCtrl
8 | * Controller of the demoApp
9 | */
10 | angular.module('demoApp')
11 | .controller('CommonCtrl', [
12 | '$scope',
13 | '$mdSidenav',
14 | '$timeout',
15 | '$rootScope',
16 | '$state',
17 | 'ssSideNav',
18 | 'ssSideNavSharedService',
19 | function (
20 | $scope,
21 | $mdSidenav,
22 | $timeout,
23 | $rootScope,
24 | $state,
25 | ssSideNav,
26 | ssSideNavSharedService) {
27 |
28 | var _perform_change_for_demo = function () {
29 | ssSideNav.setVisible('link_3', true);
30 |
31 | ssSideNav.setVisibleFor([{
32 | id: 'toogle_1_link_2',
33 | value: true
34 | }, {
35 | id: 'toogle_1_link_1',
36 | value: false
37 | }]);
38 |
39 | $timeout(function () {
40 | ssSideNav.setVisible('toogle_2', false);
41 | }, 1000 * 3);
42 |
43 | $timeout(function () {
44 | ssSideNav.sections = [{
45 | id: 'toogle_3',
46 | name: 'Section Heading 3',
47 | type: 'heading',
48 | children: [{
49 | name: 'Toogle 3',
50 | type: 'toggle',
51 | pages: [{
52 | id: 'toogle_3_link_1',
53 | name: 'item 1',
54 | state: 'common.toggle3.item1'
55 | }, {
56 | id: 'toogle_3_link_2',
57 | name: 'item 2',
58 | state: 'common.toggle3.item2'
59 | }]
60 | }]
61 | }];
62 | }, 1000 * 6);
63 |
64 | $timeout(function () {
65 | ssSideNav.forceSelectionWithId('toogle_3_link_1');
66 | }, 1000 * 10);
67 | };
68 |
69 | $scope.onClickMenu = function () {
70 | $mdSidenav('left').toggle();
71 | };
72 |
73 | $scope.menu = ssSideNav;
74 |
75 | // Listen event SS_SIDENAV_CLICK_ITEM to close menu
76 | $rootScope.$on('SS_SIDENAV_CLICK_ITEM', function() {
77 | console.log('do whatever you want after click on item');
78 | });
79 |
80 | // _perform_change_for_demo();
81 | }
82 | ]);
--------------------------------------------------------------------------------
/demo/test/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration
2 | // http://karma-runner.github.io/0.12/config/configuration-file.html
3 | // Generated on 2015-08-02 using
4 | // generator-karma 1.0.0
5 |
6 | module.exports = function(config) {
7 | 'use strict';
8 |
9 | config.set({
10 | // enable / disable watching file and executing tests whenever any file changes
11 | autoWatch: true,
12 |
13 | // base path, that will be used to resolve files and exclude
14 | basePath: '../',
15 |
16 | // testing framework to use (jasmine/mocha/qunit/...)
17 | // as well as any additional frameworks (requirejs/chai/sinon/...)
18 | frameworks: [
19 | "jasmine"
20 | ],
21 |
22 | // list of files / patterns to load in the browser
23 | files: [
24 | // bower:js
25 | 'bower_components/angular/angular.js',
26 | 'bower_components/angular-animate/angular-animate.js',
27 | 'bower_components/angular-aria/angular-aria.js',
28 | 'bower_components/angular-cookies/angular-cookies.js',
29 | 'bower_components/angular-messages/angular-messages.js',
30 | 'bower_components/angular-resource/angular-resource.js',
31 | 'bower_components/angular-route/angular-route.js',
32 | 'bower_components/angular-sanitize/angular-sanitize.js',
33 | 'bower_components/angular-touch/angular-touch.js',
34 | 'bower_components/angular-material/angular-material.js',
35 | 'bower_components/angular-ui-router/release/angular-ui-router.js',
36 | 'bower_components/angular-mocks/angular-mocks.js',
37 | // endbower
38 | "../angular-material-sidenav.js",
39 | "app/scripts/**/*.js",
40 | "test/mock/**/*.js",
41 | "test/spec/**/*.js"
42 | ],
43 |
44 | // list of files / patterns to exclude
45 | exclude: [
46 | ],
47 |
48 | // web server port
49 | port: 8080,
50 |
51 | // Start these browsers, currently available:
52 | // - Chrome
53 | // - ChromeCanary
54 | // - Firefox
55 | // - Opera
56 | // - Safari (only Mac)
57 | // - PhantomJS
58 | // - IE (only Windows)
59 | browsers: [
60 | "PhantomJS"
61 | ],
62 |
63 | // Which plugins to enable
64 | plugins: [
65 | "karma-phantomjs-launcher",
66 | "karma-jasmine"
67 | ],
68 |
69 | // Continuous Integration mode
70 | // if true, it capture browsers, run tests and exit
71 | singleRun: false,
72 |
73 | colors: true,
74 |
75 | // level of logging
76 | // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
77 | logLevel: config.LOG_INFO,
78 |
79 | // Uncomment the following lines if you are using grunt's server to run the tests
80 | // proxies: {
81 | // '/': 'http://localhost:9000/'
82 | // },
83 | // URL root prevent conflicts with the site root
84 | // urlRoot: '_karma_'
85 | });
86 | };
87 |
--------------------------------------------------------------------------------
/demo/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
28 |
29 |
30 |
31 |
32 |
33 |
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 |
69 |
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # angular-material-sidenav [NO MORE MAINTAINED]
2 |
3 | **Warning: this project is not maintained anymore. I've moved to React and stopped following Angular for the moment. However, I still watch the project for pull request**
4 |
5 | Simple component that reproduce the Angular Material Style SideNav Menu from their own website [material.angularjs.org](https://material.angularjs.org/).
6 | Available [Demo](http://sovanna.github.io/angular-material-sidenav/demo/dist)
7 |
8 | ##### 1. Installation
9 |
10 | bower install angular-material-sidenav --save
11 |
12 | ##### 2. Configuration
13 |
14 | add `sasrio.angular-material-sidenav` to your main module's list of dependencies
15 |
16 | angular.module('myApp', ['sasrio.angular-material-sidenav'])
17 |
18 | use the `ssSideNavSectionsProvider` as a **provider** to config your menu items
19 |
20 | ssSideNavSectionsProvider.initWithSections([{
21 | id: 'toogle_1',
22 | name: 'Section Heading 1',
23 | type: 'heading',
24 | children: [{
25 | name: 'Toogle 1',
26 | type: 'toggle',
27 | pages: [{
28 | id: 'toggle_item_1',
29 | name: 'item 1',
30 | state: 'common.toggle.item1'
31 | }, {
32 | id: 'toggle_item_2',
33 | name: 'item 2',
34 | state: 'common.toggle.item2'
35 | }]
36 | }]
37 | }, {
38 | id: 'link_1',
39 | name: 'Simple link to Index state',
40 | state: 'common.index',
41 | type: 'link',
42 | hidden: true // show menu ('true' for hide menu)
43 | }]);
44 |
45 | **by default, if hidden property is not set, item will be displayed. So to hide one, just pass property to true.**
46 |
47 | Also, provide to module the `$mdThemingProvider` in order to get same colors
48 |
49 | ssSideNavSectionsProvider.initWithTheme($mdThemingProvider);
50 |
51 | You can check the [demo source code of app.js](https://github.com/sovanna/angular-material-sidenav/blob/master/demo/app/scripts/app.js) to see more on how you can add items
52 |
53 | ##### 3. Usage
54 |
55 | In order to display your sidenav menu, use the factory `ssSideNav` to get **all sections** and send them into the directive , example :
56 |
57 | **note: update the components to the lastest as some of the implementations have changed (e.g method changeSectionVisible no more exist)**)
58 |
59 | // in your controller, add the factory ssSideNav
60 | angular.module('app.controller', [
61 | '$timeout',
62 | 'ssSideNav',
63 | function ($timeout, ssSideNav) {
64 | $scope.menu = ssSideNav;
65 |
66 | // Show or Hide menu
67 | ssSideNav.setVisible('link_1');
68 | ssSideNav.setVisibleFor([{
69 | id: 'toggle_item_1',
70 | value: true
71 | }, {
72 | id: 'link_1',
73 | value: false
74 | }]);
75 |
76 | $timeout(function () {
77 | ssSideNav.setVisible('toogle_2', false);
78 | });
79 |
80 | $timeout(function () {
81 | // force selection on child dropdown menu item and select its state too.
82 | ssSideNav.forceSelectionWithId('toogle_1_link_2');
83 | }, 1000 * 3);
84 | }
85 | ]);
86 |
87 | and of course, in your html view:
88 |
89 |
90 |
91 | ##### 4. Customization
92 |
93 | Colors are handle using a **directive** from the gist [dh94 mdStyleColor](https://gist.github.com/dh94/517187e03fdde3c18103)
94 |
95 | All sidenav is builded using the **primary** color configured with `$mdThemingProvider.
96 |
97 | If you look the source code, you can easily add new template item, new kind of items and so on...
98 |
--------------------------------------------------------------------------------
/demo/dist/404.html:
--------------------------------------------------------------------------------
1 | Page Not Found :( Not found :(
Sorry, but the page you were trying to view does not exist.
It looks like this was the result of either:
- a mistyped address
- an out-of-date link
--------------------------------------------------------------------------------
/demo/app/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Page Not Found :(
6 |
136 |
137 |
138 |
139 |
Not found :(
140 |
Sorry, but the page you were trying to view does not exist.
141 |
It looks like this was the result of either:
142 |
143 | - a mistyped address
144 | - an out-of-date link
145 |
146 |
149 |
150 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/demo/dist/scripts/scripts.a6f0f97b.js:
--------------------------------------------------------------------------------
1 | "use strict";angular.module("demoApp",["ngAnimate","ngAria","ngCookies","ngMessages","ngResource","ngRoute","ngSanitize","ngTouch","ngMaterial","ui.router","sasrio.angular-material-sidenav"]).config(["$mdThemingProvider","$locationProvider","$urlRouterProvider","$stateProvider","ssSideNavSectionsProvider",function(a,b,c,d,e){a.theme("default").primaryPalette("blue",{"default":"700"}),c.otherwise(function(){return"/"}),d.state({name:"common","abstract":!0,templateUrl:"views/_common.html",controller:"CommonCtrl"}),d.state({name:"common.home",url:"/",templateUrl:"views/home.html",controller:"HomeCtrl"}),d.state({name:"common.toggle1",url:"/toogle1","abstract":!0,template:""}),d.state({name:"common.toggle1.item1",url:"/item1",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Toogle 1 Item 1"}}]}),d.state({name:"common.toggle1.item2",url:"/item2",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Toogle 1 Item 2"}}]}),d.state({name:"common.toggle1.item3",url:"/item3",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Toogle 1 Item 3"}}]}),d.state({name:"common.link1",url:"/link1",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Link 1"}}]}),d.state({name:"common.link2",url:"/link2",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Link 2"}}]}),d.state({name:"common.link2.edit",url:"/edit",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Link 2"}}]}),d.state({name:"common.link3",url:"/link3",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Link 3"}}]}),d.state({name:"common.toggle2",url:"/toogle2","abstract":!0,template:""}),d.state({name:"common.toggle2.item1",url:"/item1",templateUrl:"views/default.html",controller:["$scope",function(a){a.model={title:"Hello Toogle 2 Item 1"}}]}),e.initWithTheme(a),e.initWithSections([{id:"toogle_1",name:"Section Heading 1",type:"heading",children:[{name:"Toogle 1",type:"toggle",pages:[{id:"toogle_1_link_1",name:"item 1",state:"common.toggle1.item1"},{id:"toogle_1_link_2",name:"item 2",state:"common.toggle1.item2",hidden:!0},{id:"toogle_1_link_3",name:"item 3",state:"common.toggle1.item3"}]}]},{id:"link_1",name:"Link 1 ",state:"common.link1",type:"link",icon:"fa fa-check"},{id:"link_2",name:"Link 2",state:"common.link2",type:"link"},{id:"link_3",name:"Link 3",state:"common.link3",type:"link",hidden:!0},{id:"toogle_2",name:"Section Heading 2",type:"heading",children:[{name:"Toogle 2",type:"toggle",pages:[{id:"toogle_2_link_1",name:"item 1",state:"common.toggle2.item1"}]}]}])}]),angular.module("demoApp").controller("CommonCtrl",["$scope","$mdSidenav","ssSideNav","ssSideNavSharedService","$rootScope",function(a,b,c,d,e){a.onClickMenu=function(){b("left").toggle()},a.menu=c,e.$on("SS_SIDENAV_CLICK_ITEM",function(){console.log("do whatever you want after click on item")})}]),angular.module("demoApp").controller("HomeCtrl",["$scope","$timeout","ssSideNav",function(a,b,c){c.setVisible("link_3",!0),c.setVisibleFor([{id:"toogle_1_link_2",value:!0},{id:"toogle_1_link_1",value:!1}]),b(function(){c.setVisible("toogle_2",!1)},3e3)}]),angular.module("demoApp").run(["$templateCache",function(a){a.put("views/_common.html",' '),a.put("views/default.html",'
{{model.title}}
'),a.put("views/home.html",'
Angular Material Sidenav
')}]);
--------------------------------------------------------------------------------
/demo/dist/scripts/sidenav.740c0473.js:
--------------------------------------------------------------------------------
1 | !function(a,b,c){"use strict";b.module("sasrio.angular-material-sidenav",[]).provider("ssSideNavSections",function(){var a,b,c=[];this.initWithSections=function(a){c=a?a:[]},this.initWithTheme=function(c){a=c.theme(),b=c._PALETTES},this.$get=[function(){var d=function(){this.sections=c,this.theme=a,this.palettes=b};return new d}]}).factory("ssSideNavSharedService",["$rootScope",function(a){var b={};return b.broadcast=function(b,c){a.$broadcast(b,c)},b.emit=function(b,c){a.$emit(b,c)},b}]).factory("ssSideNav",["$rootScope","$location","$state","$stateParams","ssSideNavSections",function(a,b,c,d,e){var f,g=e.sections,h=function(a,b,c){var d=c?c.toState:null;if(!d)return console.warn("ss-sidenav: `toState` key not found");if(d.name===b.state){if(!f)return void console.warn("ss-sidenav: strange `self` is undef");f.selectSection(a),f.selectPage(a,b.state)}},i=function(a,b,c){var d={toState:b,toParams:c};g.forEach(function(a){a.children?a.children.forEach(function(a){a.pages&&a.pages.forEach(function(b){h(a,b,d)})}):a.pages?a.pages.forEach(function(b){h(a,b,d)}):"link"===a.type&&h(a,a,d)})};return f={sections:g,selectSection:function(a){f.openedSection=a},toggleSelectSection:function(a){f.openedSection=f.openedSection===a?null:a},isSectionSelected:function(a){return f.openedSection===a},selectPage:function(a,b){f.currentSection=a,f.currentPage=b},isPageSelected:function(a){return f.currentPage===a},setVisible:function(a,b){return Array.prototype.every?void f.sections.every(function(c){return c.id===a?(c.hidden=!b,!1):(c.children&&c.children.every(function(c){return c.id===a?(c.hidden=!b,!1):(c.pages&&c.pages.every(function(c){return c.id===a?(c.hidden=!b,!1):!0}),!0)}),!0)}):console.error("every funct not implemented")},setVisibleFor:function(a){return Array.prototype.every?void a.forEach(function(a){f.setVisible(a.id,a.value)}):console.error("every funct not implemented")}},a.$on("$stateChangeStart",i),i(null,c.current,d),f}]).controller("menuToggleCtrl",["$scope","ssSideNav",function(a,b){a.isOpen=function(a){return b.isSectionSelected(a)},a.toggle=function(a){b.toggleSelectSection(a)},this.isOpen=a.isOpen}]).controller("menuLinkCtrl",["$scope","$state","$mdSidenav","ssSideNav","ssSideNavSharedService",function(a,b,c,d,e){a.isSelected=function(a){return d.isPageSelected(a)},a.focusSection=function(a){c("left").close(),e.broadcast("SS_SIDENAV_CLICK_ITEM",a)},a.$state=b}]).directive("menuLink",[function(){return{scope:{section:"="},templateUrl:"views/ss/menu-link.tmpl.html",controller:"menuLinkCtrl"}}]).directive("menuToggle",["$timeout","$animateCss",function(a,b){var c=function(c,d,e,f){var g=d.find("ul"),h=function(){var a;return g.addClass("no-transition"),g.css("height",""),a=g.prop("clientHeight"),g.css("height",0),g.removeClass("no-transition"),a};return g?void c.$watch(function(){return f.isOpen(c.section)},function(c){a(function(){b(g,{from:{height:c?0:h()+"px"},to:{height:c?h()+"px":0},duration:.3}).start()},0,!1)}):console.warn("ss-sidenav: `menuToggle` cannot find ul element")};return{scope:{section:"="},templateUrl:"views/ss/menu-toggle.tmpl.html",controller:"menuToggleCtrl",link:c}}]).directive("ssSidenav",[function(){return{restrict:"E",replace:!0,scope:{menu:"="},templateUrl:"views/ss/menu-sidenav.tmpl.html"}}]).directive("ssStyleColor",["ssSideNavSections",function(a){return{restrict:"A",scope:{ssStyleColor:"="},link:function(b,c){var d=function(){for(var d in b.ssStyleColor)if(b.ssStyleColor.hasOwnProperty(d)){var e,f,g,h,i,j=a.theme.colors,k=(b.ssStyleColor[d]||"").split(".");k.length<2&&k.unshift("primary"),e=k[1]||"hue-1",f=k[0]||"primary",g=j[f]?j[f].name:f,h=j[f]?j[f].hues[e]||e:e,i=a.palettes[g][h]?a.palettes[g][h].value:a.palettes[g][500].value,c.css(d,"rgb("+i.join(",")+")"),c.parent().attr("md-component-id")&&c.parent().css(d,"rgb("+i.join(",")+")")}};return a.theme&&a.palettes?(b.$watch("ssStyleColor",function(a,b){a&&b&&a!==b&&d()}),void d()):console.warn("ss-sidenav: you probably want to ssSideNavSectionsProvider.initWithTheme($mdThemingProvider)")}}}]).run(["$templateCache",function(a){a.put("views/ss/menu-link.tmpl.html",'\n {{section.name}}\n \n current page\n \n\n'),a.put("views/ss/menu-toggle.tmpl.html",'\n \n {{section.name}}\n \n \n \n \n
\n \n Toggle {{isOpen(section)? \'expanded\' : \'collapsed\'}}\n \n\n\n\n'),a.put("views/ss/menu-sidenav.tmpl.html",'')}])}(window,window.angular);
--------------------------------------------------------------------------------
/demo/app/scripts/app.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * @ngdoc overview
5 | * @name demoApp
6 | * @description
7 | * # demoApp
8 | *
9 | * Main module of the application.
10 | */
11 | angular
12 | .module('demoApp', [
13 | 'ngAnimate',
14 | 'ngAria',
15 | 'ngCookies',
16 | 'ngMessages',
17 | 'ngResource',
18 | 'ngRoute',
19 | 'ngSanitize',
20 | 'ngTouch',
21 | 'ngMaterial',
22 | 'ui.router',
23 | 'sasrio.angular-material-sidenav'
24 | ])
25 | .config([
26 | '$mdThemingProvider',
27 | '$locationProvider',
28 | '$urlRouterProvider',
29 | '$stateProvider',
30 | 'ssSideNavSectionsProvider',
31 | function (
32 | $mdThemingProvider,
33 | $locationProvider,
34 | $urlRouterProvider,
35 | $stateProvider,
36 | ssSideNavSectionsProvider) {
37 |
38 | $mdThemingProvider
39 | .theme('default')
40 | .primaryPalette('blue', {
41 | 'default': '700'
42 | });
43 |
44 | $urlRouterProvider.otherwise(function () {
45 | return '/';
46 | });
47 |
48 | $stateProvider.state({
49 | name: 'common',
50 | abstract: true,
51 | templateUrl: 'views/_common.html',
52 | controller: 'CommonCtrl'
53 | });
54 |
55 | $stateProvider.state({
56 | name: 'common.home',
57 | url: '/',
58 | templateUrl: 'views/home.html',
59 | controller: 'HomeCtrl'
60 | });
61 |
62 | $stateProvider.state({
63 | name: 'common.toggle1',
64 | url: '/toogle1',
65 | abstract: true,
66 | template: ''
67 | });
68 |
69 | $stateProvider.state({
70 | name: 'common.toggle1.item1',
71 | url: '/item1',
72 | templateUrl: 'views/default.html',
73 | controller: function ($scope) {
74 | $scope.model = {
75 | title: 'Hello Toogle 1 Item 1'
76 | };
77 | }
78 | });
79 |
80 | $stateProvider.state({
81 | name: 'common.toggle1.item2',
82 | url: '/item2',
83 | templateUrl: 'views/default.html',
84 | controller: function ($scope) {
85 | $scope.model = {
86 | title: 'Hello Toogle 1 Item 2'
87 | };
88 | }
89 | });
90 |
91 | $stateProvider.state({
92 | name: 'common.toggle1.item3',
93 | url: '/item3',
94 | templateUrl: 'views/default.html',
95 | controller: function ($scope) {
96 | $scope.model = {
97 | title: 'Hello Toogle 1 Item 3'
98 | };
99 | }
100 | });
101 |
102 | $stateProvider.state({
103 | name: 'common.link1',
104 | url: '/link1',
105 | templateUrl: 'views/default.html',
106 | controller: function ($scope) {
107 | $scope.model = {
108 | title: 'Hello Link 1'
109 | };
110 | }
111 | });
112 |
113 | $stateProvider.state({
114 | name: 'common.link2',
115 | url: '/link2',
116 | templateUrl: 'views/default.html',
117 | controller: function ($scope) {
118 | $scope.model = {
119 | title: 'Hello Link 2'
120 | };
121 | }
122 | });
123 |
124 | $stateProvider.state({
125 | name: 'common.link2.edit',
126 | url: '/edit',
127 | templateUrl: 'views/default.html',
128 | controller: function ($scope) {
129 | $scope.model = {
130 | title: 'Hello Link 2'
131 | };
132 | }
133 | });
134 |
135 | $stateProvider.state({
136 | name: 'common.link3',
137 | url: '/link3',
138 | templateUrl: 'views/default.html',
139 | controller: function ($scope) {
140 | $scope.model = {
141 | title: 'Hello Link 3'
142 | };
143 | }
144 | });
145 |
146 | $stateProvider.state({
147 | name: 'common.toggle2',
148 | url: '/toogle2',
149 | abstract: true,
150 | template: ''
151 | });
152 |
153 | $stateProvider.state({
154 | name: 'common.toggle2.item1',
155 | url: '/item1',
156 | templateUrl: 'views/default.html',
157 | controller: function ($scope) {
158 | $scope.model = {
159 | title: 'Hello Toogle 2 Item 1'
160 | };
161 | }
162 | });
163 |
164 | $stateProvider.state({
165 | name: 'common.toggle3',
166 | url: '/toogle3',
167 | abstract: true,
168 | template: ''
169 | });
170 |
171 | $stateProvider.state({
172 | name: 'common.toggle3.item1',
173 | url: '/item1',
174 | templateUrl: 'views/default.html',
175 | controller: function ($scope) {
176 | $scope.model = {
177 | title: 'Hello Toogle 3 Item 1'
178 | };
179 | }
180 | });
181 |
182 | $stateProvider.state({
183 | name: 'common.toggle3.item2',
184 | url: '/item2',
185 | templateUrl: 'views/default.html',
186 | controller: function ($scope) {
187 | $scope.model = {
188 | title: 'Hello Toogle 3 Item 2'
189 | };
190 | }
191 | });
192 |
193 | ssSideNavSectionsProvider.initWithTheme($mdThemingProvider);
194 | ssSideNavSectionsProvider.initWithSections([{
195 | id: 'toogle_1',
196 | name: 'Section Heading 1',
197 | type: 'heading',
198 | children: [{
199 | name: 'Toogle 1',
200 | type: 'toggle',
201 | pages: [{
202 | id: 'toogle_1_link_1',
203 | name: 'item 1',
204 | state: 'common.toggle1.item1'
205 | }, {
206 | id: 'toogle_1_link_2',
207 | name: 'item 2',
208 | state: 'common.toggle1.item2',
209 | hidden: true
210 | }, {
211 | id: 'toogle_1_link_3',
212 | name: 'item 3',
213 | state: 'common.toggle1.item3'
214 | }]
215 | }]
216 | }, {
217 | id: 'link_1',
218 | name: 'Link 1 ',
219 | state: 'common.link1',
220 | type: 'link',
221 | icon: 'fa fa-check'
222 | }, {
223 | id: 'link_2',
224 | name: 'Link 2',
225 | state: 'common.link2',
226 | type: 'link'
227 | }, {
228 | id: 'link_3',
229 | name: 'Link 3',
230 | state: 'common.link3',
231 | type: 'link',
232 | hidden: true
233 | }, {
234 | id: 'toogle_2',
235 | name: 'Section Heading 2',
236 | type: 'heading',
237 | children: [{
238 | name: 'Toogle 2',
239 | type: 'toggle',
240 | pages: [{
241 | id: 'toogle_2_link_1',
242 | name: 'item 1',
243 | state: 'common.toggle2.item1'
244 | }]
245 | }]
246 | }]);
247 | }
248 | ]);
--------------------------------------------------------------------------------
/demo/Gruntfile.js:
--------------------------------------------------------------------------------
1 | // Generated on 2015-08-02 using generator-angular 0.12.0
2 | 'use strict';
3 |
4 | // # Globbing
5 | // for performance reasons we're only matching one level down:
6 | // 'test/spec/{,*/}*.js'
7 | // use this if you want to recursively match all subfolders:
8 | // 'test/spec/**/*.js'
9 |
10 | module.exports = function (grunt) {
11 |
12 | // Time how long tasks take. Can help when optimizing build times
13 | require('time-grunt')(grunt);
14 |
15 | // Automatically load required Grunt tasks
16 | require('jit-grunt')(grunt, {
17 | useminPrepare: 'grunt-usemin',
18 | ngtemplates: 'grunt-angular-templates',
19 | cdnify: 'grunt-google-cdn'
20 | });
21 |
22 | // Configurable paths for the application
23 | var appConfig = {
24 | app: require('./bower.json').appPath || 'app',
25 | dist: 'dist'
26 | };
27 |
28 | // Define the configuration for all the tasks
29 | grunt.initConfig({
30 |
31 | // Project settings
32 | yeoman: appConfig,
33 |
34 | // Watches files for changes and runs tasks based on the changed files
35 | watch: {
36 | bower: {
37 | files: ['bower.json'],
38 | tasks: ['wiredep']
39 | },
40 | racine: {
41 | files: ['../*.js'],
42 | options: {
43 | livereload: '<%= connect.options.livereload %>'
44 | }
45 | },
46 | js: {
47 | files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
48 | tasks: ['newer:jshint:all'],
49 | options: {
50 | livereload: '<%= connect.options.livereload %>'
51 | }
52 | },
53 | jsTest: {
54 | files: ['test/spec/{,*/}*.js'],
55 | tasks: ['newer:jshint:test', 'karma']
56 | },
57 | styles: {
58 | files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
59 | tasks: ['newer:copy:styles', 'autoprefixer']
60 | },
61 | gruntfile: {
62 | files: ['Gruntfile.js']
63 | },
64 | livereload: {
65 | options: {
66 | livereload: '<%= connect.options.livereload %>'
67 | },
68 | files: [
69 | '<%= yeoman.app %>/{,*/}*.html',
70 | '.tmp/styles/{,*/}*.css',
71 | '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
72 | ]
73 | }
74 | },
75 |
76 | // The actual grunt server settings
77 | connect: {
78 | options: {
79 | port: 9000,
80 | // Change this to '0.0.0.0' to access the server from outside.
81 | hostname: 'localhost',
82 | livereload: 35729
83 | },
84 | livereload: {
85 | options: {
86 | open: true,
87 | middleware: function (connect) {
88 | return [
89 | connect.static('.tmp'),
90 | connect().use(
91 | '/bower_components',
92 | connect.static('./bower_components')
93 | ),
94 | connect().use(
95 | '/racine',
96 | connect.static('./..')
97 | ),
98 | connect().use(
99 | '/app/styles',
100 | connect.static('./app/styles')
101 | ),
102 | connect.static(appConfig.app)
103 | ];
104 | }
105 | }
106 | },
107 | test: {
108 | options: {
109 | port: 9001,
110 | middleware: function (connect) {
111 | return [
112 | connect.static('.tmp'),
113 | connect.static('test'),
114 | connect().use(
115 | '/bower_components',
116 | connect.static('./bower_components')
117 | ),
118 | connect().use(
119 | '/racine',
120 | connect.static('./..')
121 | ),
122 | connect.static(appConfig.app)
123 | ];
124 | }
125 | }
126 | },
127 | dist: {
128 | options: {
129 | open: true,
130 | base: '<%= yeoman.dist %>'
131 | }
132 | }
133 | },
134 |
135 | // Make sure code styles are up to par and there are no obvious mistakes
136 | jshint: {
137 | options: {
138 | jshintrc: '.jshintrc',
139 | reporter: require('jshint-stylish')
140 | },
141 | all: {
142 | src: [
143 | 'Gruntfile.js',
144 | '<%= yeoman.app %>/scripts/{,*/}*.js'
145 | ]
146 | }
147 | },
148 |
149 | // Empties folders to start fresh
150 | clean: {
151 | dist: {
152 | files: [{
153 | dot: true,
154 | src: [
155 | '.tmp',
156 | '<%= yeoman.dist %>/{,*/}*',
157 | '!<%= yeoman.dist %>/.git{,*/}*'
158 | ]
159 | }]
160 | },
161 | server: '.tmp'
162 | },
163 |
164 | // Add vendor prefixed styles
165 | autoprefixer: {
166 | options: {
167 | browsers: ['last 1 version']
168 | },
169 | server: {
170 | options: {
171 | map: true,
172 | },
173 | files: [{
174 | expand: true,
175 | cwd: '.tmp/styles/',
176 | src: '{,*/}*.css',
177 | dest: '.tmp/styles/'
178 | }]
179 | },
180 | dist: {
181 | files: [{
182 | expand: true,
183 | cwd: '.tmp/styles/',
184 | src: '{,*/}*.css',
185 | dest: '.tmp/styles/'
186 | }]
187 | }
188 | },
189 |
190 | // Automatically inject Bower components into the app
191 | wiredep: {
192 | app: {
193 | src: ['<%= yeoman.app %>/index.html'],
194 | ignorePath: /\.\.\//
195 | },
196 | test: {
197 | devDependencies: true,
198 | src: '<%= karma.unit.configFile %>',
199 | ignorePath: /\.\.\//,
200 | fileTypes:{
201 | js: {
202 | block: /(([\s\t]*)\/{2}\s*?bower:\s*?(\S*))(\n|\r|.)*?(\/{2}\s*endbower)/gi,
203 | detect: {
204 | js: /'(.*\.js)'/gi
205 | },
206 | replace: {
207 | js: '\'{{filePath}}\','
208 | }
209 | }
210 | }
211 | }
212 | },
213 |
214 | // Renames files for browser caching purposes
215 | filerev: {
216 | dist: {
217 | src: [
218 | '<%= yeoman.dist %>/scripts/{,*/}*.js',
219 | '<%= yeoman.dist %>/styles/{,*/}*.css',
220 | '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
221 | '<%= yeoman.dist %>/styles/fonts/*'
222 | ]
223 | }
224 | },
225 |
226 | // Reads HTML for usemin blocks to enable smart builds that automatically
227 | // concat, minify and revision files. Creates configurations in memory so
228 | // additional tasks can operate on them
229 | useminPrepare: {
230 | html: '<%= yeoman.app %>/index.html',
231 | options: {
232 | dest: '<%= yeoman.dist %>',
233 | flow: {
234 | html: {
235 | steps: {
236 | js: ['concat', 'uglifyjs'],
237 | css: ['cssmin']
238 | },
239 | post: {}
240 | }
241 | }
242 | }
243 | },
244 |
245 | // Performs rewrites based on filerev and the useminPrepare configuration
246 | usemin: {
247 | html: ['<%= yeoman.dist %>/{,*/}*.html'],
248 | css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
249 | js: ['<%= yeoman.dist %>/scripts/{,*/}*.js'],
250 | options: {
251 | assetsDirs: [
252 | '<%= yeoman.dist %>',
253 | '<%= yeoman.dist %>/images',
254 | '<%= yeoman.dist %>/styles'
255 | ],
256 | patterns: {
257 | js: [[/(images\/[^''""]*\.(png|jpg|jpeg|gif|webp|svg))/g, 'Replacing references to images']]
258 | }
259 | }
260 | },
261 |
262 | // The following *-min tasks will produce minified files in the dist folder
263 | // By default, your `index.html`'s will take care of
264 | // minification. These next options are pre-configured if you do not wish
265 | // to use the Usemin blocks.
266 | cssmin: {
267 | dist: {
268 | files: [
269 | {
270 | dest: '<%= yeoman.dist %>/styles/sidenav.css',
271 | src: [ '.tmp/styles/sidenav.css' ]
272 | }
273 | ]
274 | }
275 | },
276 | uglify: {
277 | dist: {
278 | files: [
279 | {
280 | dest: '<%= yeoman.dist %>/scripts/sidenav.js',
281 | src: [ '.tmp/concat/scripts/sidenav.js' ]
282 | }
283 | ]
284 | }
285 | },
286 | concat: {
287 | dist: {
288 | files: [
289 | {
290 | dest: '.tmp/concat/scripts/sidenav.js',
291 | src: [
292 | '../*.js'
293 | ]
294 | },
295 | {
296 | dest: '.tmp/styles/sidenav.css',
297 | src: [
298 | '../*.css'
299 | ]
300 | }
301 | ]
302 | }
303 | },
304 |
305 | imagemin: {
306 | dist: {
307 | files: [{
308 | expand: true,
309 | cwd: '<%= yeoman.app %>/images',
310 | src: '{,*/}*.{png,jpg,jpeg,gif}',
311 | dest: '<%= yeoman.dist %>/images'
312 | }]
313 | }
314 | },
315 |
316 | svgmin: {
317 | dist: {
318 | files: [{
319 | expand: true,
320 | cwd: '<%= yeoman.app %>/images',
321 | src: '{,*/}*.svg',
322 | dest: '<%= yeoman.dist %>/images'
323 | }]
324 | }
325 | },
326 |
327 | htmlmin: {
328 | dist: {
329 | options: {
330 | collapseWhitespace: true,
331 | conservativeCollapse: true,
332 | collapseBooleanAttributes: true,
333 | removeCommentsFromCDATA: true
334 | },
335 | files: [{
336 | expand: true,
337 | cwd: '<%= yeoman.dist %>',
338 | src: ['*.html', 'views/{,*/}*.html'],
339 | dest: '<%= yeoman.dist %>'
340 | }]
341 | }
342 | },
343 |
344 | ngtemplates: {
345 | dist: {
346 | options: {
347 | module: 'demoApp',
348 | htmlmin: '<%= htmlmin.dist.options %>',
349 | usemin: 'scripts/scripts.js'
350 | },
351 | cwd: '<%= yeoman.app %>',
352 | src: 'views/{,*/}*.html',
353 | dest: '.tmp/templateCache.js'
354 | }
355 | },
356 |
357 | // ng-annotate tries to make the code safe for minification automatically
358 | // by using the Angular long form for dependency injection.
359 | ngAnnotate: {
360 | dist: {
361 | files: [{
362 | expand: true,
363 | cwd: '.tmp/concat/scripts',
364 | src: '*.js',
365 | dest: '.tmp/concat/scripts'
366 | }]
367 | }
368 | },
369 |
370 | // Replace Google CDN references
371 | cdnify: {
372 | dist: {
373 | html: ['<%= yeoman.dist %>/*.html']
374 | }
375 | },
376 |
377 | // Copies remaining files to places other tasks can use
378 | copy: {
379 | dist: {
380 | files: [{
381 | expand: true,
382 | dot: true,
383 | cwd: '<%= yeoman.app %>',
384 | dest: '<%= yeoman.dist %>',
385 | src: [
386 | '*.{ico,png,txt}',
387 | '.htaccess',
388 | '*.html',
389 | 'images/{,*/}*.{webp}',
390 | 'views/{,*/}*.html',
391 | 'styles/fonts/{,*/}*.*',
392 | 'fonts/*'
393 | ]
394 | }, {
395 | expand: true,
396 | cwd: '.tmp/images',
397 | dest: '<%= yeoman.dist %>/images',
398 | src: ['generated/*']
399 | }, {
400 | expand: true,
401 | cwd: 'app/images',
402 | src: '*',
403 | dest: '<%= yeoman.dist %>/images'
404 | }, {
405 | expand: true,
406 | dot: true,
407 | cwd: 'bower_components/font-awesome',
408 | src: ['fonts/*.*'],
409 | dest: '<%= yeoman.dist %>'
410 | }]
411 | },
412 | styles: {
413 | expand: true,
414 | cwd: '<%= yeoman.app %>/styles',
415 | dest: '.tmp/styles/',
416 | src: '{,*/}*.css'
417 | }
418 | },
419 |
420 | // Run some tasks in parallel to speed up the build process
421 | concurrent: {
422 | server: [
423 | 'copy:styles'
424 | ],
425 | test: [
426 | 'copy:styles'
427 | ],
428 | dist: [
429 | 'copy:styles',
430 | 'imagemin',
431 | 'svgmin'
432 | ]
433 | },
434 |
435 | // Test settings
436 | karma: {
437 | unit: {
438 | configFile: 'test/karma.conf.js',
439 | singleRun: true
440 | }
441 | }
442 | });
443 |
444 |
445 | grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
446 | if (target === 'dist') {
447 | return grunt.task.run(['build', 'connect:dist:keepalive']);
448 | }
449 |
450 | grunt.task.run([
451 | 'clean:server',
452 | 'wiredep',
453 | 'concurrent:server',
454 | 'autoprefixer:server',
455 | 'connect:livereload',
456 | 'watch'
457 | ]);
458 | });
459 |
460 | grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) {
461 | grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
462 | grunt.task.run(['serve:' + target]);
463 | });
464 |
465 | grunt.registerTask('test', [
466 | 'clean:server',
467 | 'wiredep',
468 | 'concurrent:test',
469 | 'autoprefixer',
470 | 'connect:test',
471 | 'karma'
472 | ]);
473 |
474 | grunt.registerTask('build', [
475 | 'clean:dist',
476 | 'wiredep',
477 | 'useminPrepare',
478 | 'concurrent:dist',
479 | 'autoprefixer',
480 | 'ngtemplates',
481 | 'concat',
482 | 'concat:dist',
483 | 'ngAnnotate',
484 | 'copy:dist',
485 | 'cdnify',
486 | 'cssmin',
487 | 'cssmin:dist',
488 | 'uglify',
489 | 'filerev',
490 | 'usemin',
491 | 'htmlmin'
492 | ]);
493 |
494 | grunt.registerTask('default', [
495 | 'newer:jshint',
496 | 'build'
497 | ]);
498 | };
499 |
--------------------------------------------------------------------------------
/angular-material-sidenav.js:
--------------------------------------------------------------------------------
1 | /*global console*/
2 |
3 | /**
4 | *
5 | * Angular Material Sidenav
6 | * https://github.com/sovanna/angular-material-sidenav
7 | * Licence MIT
8 | * (c) 2015 Sovanna Hing
9 | *
10 | */
11 | (function(window, angular, undefined) {
12 | 'use strict';
13 |
14 | angular.module('sasrio.angular-material-sidenav', [])
15 |
16 | .provider('ssSideNavSections', function SSSideNavSectionsProvider() {
17 | var _sections = [],
18 | _theme,
19 | _palettes;
20 |
21 | this.initWithSections = function(value) {
22 | _sections = value ? value : [];
23 | };
24 |
25 | this.initWithTheme = function (value) {
26 | _theme = value.theme();
27 | _palettes = value._PALETTES;
28 | };
29 |
30 | this.$get = [function ssSideNavSectionsFactory() {
31 | var SSSideNavSections = function() {
32 | this.sections = _sections;
33 | this.theme = _theme;
34 | this.palettes = _palettes;
35 | };
36 |
37 | return new SSSideNavSections();
38 | }];
39 | })
40 |
41 | .factory('ssSideNavSharedService', [
42 | '$rootScope',
43 | function($rootScope) {
44 | var _sharedService = {};
45 |
46 | _sharedService.broadcast = function(eventName, eventData) {
47 | $rootScope.$broadcast(eventName, eventData);
48 | };
49 |
50 | _sharedService.emit = function(eventName, eventData) {
51 | $rootScope.$emit(eventName, eventData);
52 | };
53 |
54 | return _sharedService;
55 | }
56 | ])
57 |
58 | .factory('ssSideNav', [
59 | '$rootScope',
60 | '$location',
61 | '$state',
62 | '$stateParams',
63 | 'ssSideNavSections',
64 | 'ssSideNavSharedService',
65 | function(
66 | $rootScope,
67 | $location,
68 | $state,
69 | $stateParams,
70 | ssSideNavSections,
71 | ssSideNavSharedService) {
72 |
73 | var self,
74 | sections = ssSideNavSections.sections;
75 |
76 | var matchPage = function(section, page, newState) {
77 | var toState = newState ? newState.toState : null;
78 |
79 | if (!toState) {
80 | return console.warn('ss-sidenav: `toState` key not found');
81 | }
82 |
83 | if (toState.name !== page.state) {
84 | return;
85 | }
86 |
87 | if (!self) {
88 | console.warn('ss-sidenav: strange `self` is undef');
89 | return;
90 | }
91 |
92 | self.selectSection(section);
93 | self.selectPage(section, page);
94 | };
95 |
96 | var onStateChangeStart = function(event, toState, toParams) {
97 | var newState = {
98 | toState: toState,
99 | toParams: toParams
100 | };
101 |
102 | sections.forEach(function(section) {
103 | if (section.children) {
104 | section.children.forEach(function(child) {
105 | if (child.pages) {
106 | child.pages.forEach(function(page) {
107 | matchPage(child, page, newState);
108 | });
109 | } else if (child.type === 'link') {
110 | matchPage(child, child, newState);
111 | }
112 | });
113 | } else if (section.pages) {
114 | section.pages.forEach(function(page) {
115 | matchPage(section, page, newState);
116 | });
117 | } else if (section.type === 'link') {
118 | matchPage(section, section, newState);
119 | }
120 | });
121 | };
122 |
123 | self = {
124 | sections: sections,
125 | forceSelectionWithId: function (id) {
126 | ssSideNavSharedService.broadcast('SS_SIDENAV_FORCE_SELECTED_ITEM', id);
127 | },
128 | selectSection: function(section) {
129 | self.openedSection = section;
130 | },
131 | toggleSelectSection: function(section) {
132 | self.openedSection = (self.openedSection === section) ? null : section;
133 | },
134 | isSectionSelected: function(section) {
135 | return self.openedSection === section;
136 | },
137 | selectPage: function(section, page) {
138 | self.currentSection = section;
139 | self.currentPage = page;
140 | },
141 | isPageSelected: function(page) {
142 | return self.currentPage ? self.currentPage.state === page : false;
143 | },
144 | setVisible: function (id, value) {
145 | if (!Array.prototype.every) {
146 | // TODO prototyp for every,
147 | // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every;
148 | return console.error('every funct not implemented');
149 | }
150 |
151 | self.sections.every(function (section) {
152 | if (section.id === id) {
153 | section.hidden = !value;
154 | return false;
155 | }
156 |
157 | if (section.children) {
158 | section.children.every(function (child) {
159 | if (child.id === id) {
160 | child.hidden = !value;
161 | return false;
162 | };
163 |
164 | if (child.pages) {
165 | child.pages.every(function (page) {
166 | if (page.id === id) {
167 | page.hidden = !value;
168 | return false;
169 | }
170 |
171 | return true;
172 | });
173 | }
174 |
175 | return true;
176 | });
177 | }
178 |
179 | return true;
180 | });
181 | },
182 | setVisibleFor: function (ids) {
183 | if (!Array.prototype.every) {
184 | // TODO prototyp for every,
185 | // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every;
186 | return console.error('every funct not implemented');
187 | }
188 |
189 | ids.forEach(function (id) {
190 | self.setVisible(id.id, id.value);
191 | });
192 | }
193 | };
194 |
195 | $rootScope.$on('$stateChangeStart', onStateChangeStart);
196 |
197 | onStateChangeStart(null, $state.current, $stateParams);
198 |
199 | return self;
200 | }
201 | ])
202 |
203 | .controller('menuToggleCtrl', [
204 | '$scope',
205 | '$state',
206 | 'ssSideNav',
207 | function(
208 | $scope,
209 | $state,
210 | ssSideNav) {
211 |
212 | $scope.isOpen = function(section) {
213 | return ssSideNav.isSectionSelected(section);
214 | };
215 |
216 | $scope.toggle = function(section) {
217 | ssSideNav.toggleSelectSection(section);
218 | };
219 |
220 | this.isOpen = $scope.isOpen;
221 |
222 | $scope.$on('SS_SIDENAV_FORCE_SELECTED_ITEM', function (event, args) {
223 | if ($scope.section && $scope.section.pages) {
224 | for (var i = $scope.section.pages.length - 1; i >= 0; i--) {
225 | var _e = $scope.section.pages[i];
226 |
227 | if (args === _e.id) {
228 | $scope.toggle($scope.section);
229 | $state.go(_e.state);
230 | }
231 | };
232 | }
233 | });
234 | }
235 | ])
236 |
237 | .controller('menuLinkCtrl', [
238 | '$scope',
239 | '$state',
240 | '$mdSidenav',
241 | 'ssSideNav',
242 | 'ssSideNavSharedService',
243 | function(
244 | $scope,
245 | $state,
246 | $mdSidenav,
247 | ssSideNav,
248 | ssSideNavSharedService) {
249 |
250 | $scope.isSelected = function(page) {
251 | return ssSideNav.isPageSelected(page);
252 | };
253 |
254 | $scope.focusSection = function(item) {
255 | $mdSidenav('left').close();
256 | ssSideNavSharedService.broadcast('SS_SIDENAV_CLICK_ITEM', item);
257 | };
258 |
259 | $scope.$state = $state;
260 | }
261 | ])
262 |
263 | .directive('menuLink', [
264 | function() {
265 | return {
266 | scope: {
267 | section: '='
268 | },
269 | templateUrl: 'views/ss/menu-link.tmpl.html',
270 | controller: 'menuLinkCtrl'
271 | };
272 | }
273 | ])
274 |
275 | .directive('menuToggle', [
276 | '$timeout',
277 | '$animateCss',
278 | '$mdSidenav',
279 | '$mdMedia',
280 | function(
281 | $timeout,
282 | $animateCss,
283 | $mdSidenav,
284 | $mdMedia) {
285 |
286 | var link = function($scope, $element, $attr, $ctrl) {
287 | var _el_ul = $element.find('ul');
288 |
289 | var getTargetHeight = function() {
290 | var _targetHeight;
291 |
292 | _el_ul.addClass('no-transition');
293 | _el_ul.css('height', '');
294 |
295 | _targetHeight = _el_ul.prop('clientHeight');
296 |
297 | _el_ul.css('height', 0);
298 | _el_ul.removeClass('no-transition');
299 |
300 | return _targetHeight;
301 | };
302 |
303 | if (!_el_ul) {
304 | return console.warn('ss-sidenav: `menuToggle` cannot find ul element');
305 | }
306 |
307 | $scope.$watch(function() {
308 | return $ctrl.isOpen($scope.section);
309 | }, function(open) {
310 | $timeout(function() {
311 | if (!$mdMedia('gt-sm') && !$mdSidenav('left').isOpen() && open) {
312 | return;
313 | }
314 |
315 | $animateCss(_el_ul, {
316 | from: {
317 | height: open ? 0 : (getTargetHeight() + 'px')
318 | },
319 | to: {
320 | height: open ? (getTargetHeight() + 'px') : 0
321 | },
322 | duration: 0.3
323 | }).start();
324 | }, 0, false);
325 | });
326 | };
327 |
328 | return {
329 | scope: {
330 | section: '='
331 | },
332 | templateUrl: 'views/ss/menu-toggle.tmpl.html',
333 | controller: 'menuToggleCtrl',
334 | link: link
335 | };
336 | }
337 | ])
338 |
339 | .directive('ssSidenav', [
340 | function () {
341 | return {
342 | restrict: 'E',
343 | replace: true,
344 | scope: {
345 | menu: '='
346 | },
347 | templateUrl: 'views/ss/menu-sidenav.tmpl.html'
348 | };
349 | }
350 | ])
351 |
352 | .directive('ssStyleColor', [
353 | 'ssSideNavSections',
354 | function (ssSideNavSections) {
355 | return {
356 | restrict: 'A',
357 | scope: {
358 | ssStyleColor: '='
359 | },
360 | link: function ($scope, $el) {
361 |
362 | var _apply_color = function () {
363 | for (var p in $scope.ssStyleColor) {
364 | if ($scope.ssStyleColor.hasOwnProperty(p)) {
365 | var themeColors = ssSideNavSections.theme.colors,
366 | split = ($scope.ssStyleColor[p] || '').split('.'),
367 | hueR,
368 | colorR,
369 | colorA,
370 | hueA,
371 | colorValue;
372 |
373 | if (split.length < 2) {
374 | split.unshift('primary');
375 | }
376 |
377 | hueR = split[1] || 'hue-1'; // 'hue-1'
378 | colorR = split[0] || 'primary'; // 'warn'
379 |
380 | // Absolute color: 'orange'
381 | colorA = themeColors[colorR] ? themeColors[colorR].name : colorR;
382 |
383 | // Absolute Hue: '500'
384 | hueA = themeColors[colorR] ? (themeColors[colorR].hues[hueR] || hueR) : hueR;
385 |
386 | colorValue = ssSideNavSections.palettes[colorA][hueA] ? ssSideNavSections.palettes[colorA][hueA].value : ssSideNavSections.palettes[colorA]['500'].value;
387 |
388 | $el.css(p, 'rgb(' + colorValue.join(',') + ')');
389 |
390 | // Add color to md-sidenav
391 | if($el.parent().attr('md-component-id')) $el.parent().css(p, 'rgb(' + colorValue.join(',') + ')');
392 | }
393 | }
394 | };
395 |
396 | if (!ssSideNavSections.theme || !ssSideNavSections.palettes) {
397 | return console.warn('ss-sidenav: you probably want to ssSideNavSectionsProvider.initWithTheme($mdThemingProvider)');
398 | }
399 |
400 | $scope.$watch('ssStyleColor', function (oldVal, newVal) {
401 | if ((oldVal && newVal) && oldVal !== newVal) {
402 | _apply_color();
403 | }
404 | });
405 |
406 | _apply_color();
407 | }
408 | };
409 | }
410 | ])
411 |
412 | .run(['$templateCache', function($templateCache) {
413 | $templateCache.put('views/ss/menu-link.tmpl.html',
414 | '\n' +
419 | ' {{section.name}}\n' +
420 | ' \n' +
422 | ' current page\n' +
423 | ' \n' +
424 | '\n'
425 | );
426 |
427 | $templateCache.put('views/ss/menu-toggle.tmpl.html',
428 | '\n' +
432 | ' \n' +
433 | ' {{section.name}}\n' +
434 | ' \n' +
435 | ' \n' +
437 | ' \n' +
438 | ' \n' +
439 | '
\n' +
440 | ' \n' +
441 | ' Toggle {{isOpen(section)? \'expanded\' : \'collapsed\'}}\n' +
442 | ' \n' +
443 | '\n' +
444 | '\n' +
445 | '\n'
450 | );
451 |
452 | $templateCache.put('views/ss/menu-sidenav.tmpl.html',
453 | ''
468 | );
469 | }]);
470 | })(window, window.angular);
471 |
--------------------------------------------------------------------------------
/demo/app/.htaccess:
--------------------------------------------------------------------------------
1 | # Apache Configuration File
2 |
3 | # (!) Using `.htaccess` files slows down Apache, therefore, if you have access
4 | # to the main server config file (usually called `httpd.conf`), you should add
5 | # this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html.
6 |
7 | # ##############################################################################
8 | # # CROSS-ORIGIN RESOURCE SHARING (CORS) #
9 | # ##############################################################################
10 |
11 | # ------------------------------------------------------------------------------
12 | # | Cross-domain AJAX requests |
13 | # ------------------------------------------------------------------------------
14 |
15 | # Enable cross-origin AJAX requests.
16 | # http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
17 | # http://enable-cors.org/
18 |
19 | #
20 | # Header set Access-Control-Allow-Origin "*"
21 | #
22 |
23 | # ------------------------------------------------------------------------------
24 | # | CORS-enabled images |
25 | # ------------------------------------------------------------------------------
26 |
27 | # Send the CORS header for images when browsers request it.
28 | # https://developer.mozilla.org/en/CORS_Enabled_Image
29 | # http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
30 | # http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
31 |
32 |
33 |
34 |
35 | SetEnvIf Origin ":" IS_CORS
36 | Header set Access-Control-Allow-Origin "*" env=IS_CORS
37 |
38 |
39 |
40 |
41 | # ------------------------------------------------------------------------------
42 | # | Web fonts access |
43 | # ------------------------------------------------------------------------------
44 |
45 | # Allow access from all domains for web fonts
46 |
47 |
48 |
49 | Header set Access-Control-Allow-Origin "*"
50 |
51 |
52 |
53 |
54 | # ##############################################################################
55 | # # ERRORS #
56 | # ##############################################################################
57 |
58 | # ------------------------------------------------------------------------------
59 | # | 404 error prevention for non-existing redirected folders |
60 | # ------------------------------------------------------------------------------
61 |
62 | # Prevent Apache from returning a 404 error for a rewrite if a directory
63 | # with the same name does not exist.
64 | # http://httpd.apache.org/docs/current/content-negotiation.html#multiviews
65 | # http://www.webmasterworld.com/apache/3808792.htm
66 |
67 | Options -MultiViews
68 |
69 | # ------------------------------------------------------------------------------
70 | # | Custom error messages / pages |
71 | # ------------------------------------------------------------------------------
72 |
73 | # You can customize what Apache returns to the client in case of an error (see
74 | # http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:
75 |
76 | ErrorDocument 404 /404.html
77 |
78 |
79 | # ##############################################################################
80 | # # INTERNET EXPLORER #
81 | # ##############################################################################
82 |
83 | # ------------------------------------------------------------------------------
84 | # | Better website experience |
85 | # ------------------------------------------------------------------------------
86 |
87 | # Force IE to render pages in the highest available mode in the various
88 | # cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.
89 |
90 |
91 | Header set X-UA-Compatible "IE=edge"
92 | # `mod_headers` can't match based on the content-type, however, we only
93 | # want to send this header for HTML pages and not for the other resources
94 |
95 | Header unset X-UA-Compatible
96 |
97 |
98 |
99 | # ------------------------------------------------------------------------------
100 | # | Cookie setting from iframes |
101 | # ------------------------------------------------------------------------------
102 |
103 | # Allow cookies to be set from iframes in IE.
104 |
105 | #
106 | # Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
107 | #
108 |
109 | # ------------------------------------------------------------------------------
110 | # | Screen flicker |
111 | # ------------------------------------------------------------------------------
112 |
113 | # Stop screen flicker in IE on CSS rollovers (this only works in
114 | # combination with the `ExpiresByType` directives for images from below).
115 |
116 | # BrowserMatch "MSIE" brokenvary=1
117 | # BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
118 | # BrowserMatch "Opera" !brokenvary
119 | # SetEnvIf brokenvary 1 force-no-vary
120 |
121 |
122 | # ##############################################################################
123 | # # MIME TYPES AND ENCODING #
124 | # ##############################################################################
125 |
126 | # ------------------------------------------------------------------------------
127 | # | Proper MIME types for all files |
128 | # ------------------------------------------------------------------------------
129 |
130 |
131 |
132 | # Audio
133 | AddType audio/mp4 m4a f4a f4b
134 | AddType audio/ogg oga ogg
135 |
136 | # JavaScript
137 | # Normalize to standard type (it's sniffed in IE anyways):
138 | # http://tools.ietf.org/html/rfc4329#section-7.2
139 | AddType application/javascript js jsonp
140 | AddType application/json json
141 |
142 | # Video
143 | AddType video/mp4 mp4 m4v f4v f4p
144 | AddType video/ogg ogv
145 | AddType video/webm webm
146 | AddType video/x-flv flv
147 |
148 | # Web fonts
149 | AddType application/font-woff woff
150 | AddType application/vnd.ms-fontobject eot
151 |
152 | # Browsers usually ignore the font MIME types and sniff the content,
153 | # however, Chrome shows a warning if other MIME types are used for the
154 | # following fonts.
155 | AddType application/x-font-ttf ttc ttf
156 | AddType font/opentype otf
157 |
158 | # Make SVGZ fonts work on iPad:
159 | # https://twitter.com/FontSquirrel/status/14855840545
160 | AddType image/svg+xml svg svgz
161 | AddEncoding gzip svgz
162 |
163 | # Other
164 | AddType application/octet-stream safariextz
165 | AddType application/x-chrome-extension crx
166 | AddType application/x-opera-extension oex
167 | AddType application/x-shockwave-flash swf
168 | AddType application/x-web-app-manifest+json webapp
169 | AddType application/x-xpinstall xpi
170 | AddType application/xml atom rdf rss xml
171 | AddType image/webp webp
172 | AddType image/x-icon ico
173 | AddType text/cache-manifest appcache manifest
174 | AddType text/vtt vtt
175 | AddType text/x-component htc
176 | AddType text/x-vcard vcf
177 |
178 |
179 |
180 | # ------------------------------------------------------------------------------
181 | # | UTF-8 encoding |
182 | # ------------------------------------------------------------------------------
183 |
184 | # Use UTF-8 encoding for anything served as `text/html` or `text/plain`.
185 | AddDefaultCharset utf-8
186 |
187 | # Force UTF-8 for certain file formats.
188 |
189 | AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
190 |
191 |
192 |
193 | # ##############################################################################
194 | # # URL REWRITES #
195 | # ##############################################################################
196 |
197 | # ------------------------------------------------------------------------------
198 | # | Rewrite engine |
199 | # ------------------------------------------------------------------------------
200 |
201 | # Turning on the rewrite engine and enabling the `FollowSymLinks` option is
202 | # necessary for the following directives to work.
203 |
204 | # If your web host doesn't allow the `FollowSymlinks` option, you may need to
205 | # comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the
206 | # performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
207 |
208 | # Also, some cloud hosting services require `RewriteBase` to be set:
209 | # http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site
210 |
211 |
212 | Options +FollowSymlinks
213 | # Options +SymLinksIfOwnerMatch
214 | RewriteEngine On
215 | # RewriteBase /
216 |
217 |
218 | # ------------------------------------------------------------------------------
219 | # | Suppressing / Forcing the "www." at the beginning of URLs |
220 | # ------------------------------------------------------------------------------
221 |
222 | # The same content should never be available under two different URLs especially
223 | # not with and without "www." at the beginning. This can cause SEO problems
224 | # (duplicate content), therefore, you should choose one of the alternatives and
225 | # redirect the other one.
226 |
227 | # By default option 1 (no "www.") is activated:
228 | # http://no-www.org/faq.php?q=class_b
229 |
230 | # If you'd prefer to use option 2, just comment out all the lines from option 1
231 | # and uncomment the ones from option 2.
232 |
233 | # IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
234 |
235 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
236 |
237 | # Option 1: rewrite www.example.com → example.com
238 |
239 |
240 | RewriteCond %{HTTPS} !=on
241 | RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
242 | RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
243 |
244 |
245 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
246 |
247 | # Option 2: rewrite example.com → www.example.com
248 |
249 | # Be aware that the following might not be a good idea if you use "real"
250 | # subdomains for certain parts of your website.
251 |
252 | #
253 | # RewriteCond %{HTTPS} !=on
254 | # RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
255 | # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
256 | #
257 |
258 |
259 | # ##############################################################################
260 | # # SECURITY #
261 | # ##############################################################################
262 |
263 | # ------------------------------------------------------------------------------
264 | # | Content Security Policy (CSP) |
265 | # ------------------------------------------------------------------------------
266 |
267 | # You can mitigate the risk of cross-site scripting and other content-injection
268 | # attacks by setting a Content Security Policy which whitelists trusted sources
269 | # of content for your site.
270 |
271 | # The example header below allows ONLY scripts that are loaded from the current
272 | # site's origin (no inline scripts, no CDN, etc). This almost certainly won't
273 | # work as-is for your site!
274 |
275 | # To get all the details you'll need to craft a reasonable policy for your site,
276 | # read: http://html5rocks.com/en/tutorials/security/content-security-policy (or
277 | # see the specification: http://w3.org/TR/CSP).
278 |
279 | #
280 | # Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
281 | #
282 | # Header unset Content-Security-Policy
283 | #
284 | #
285 |
286 | # ------------------------------------------------------------------------------
287 | # | File access |
288 | # ------------------------------------------------------------------------------
289 |
290 | # Block access to directories without a default document.
291 | # Usually you should leave this uncommented because you shouldn't allow anyone
292 | # to surf through every directory on your server (which may includes rather
293 | # private places like the CMS's directories).
294 |
295 |
296 | Options -Indexes
297 |
298 |
299 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
300 |
301 | # Block access to hidden files and directories.
302 | # This includes directories used by version control systems such as Git and SVN.
303 |
304 |
305 | RewriteCond %{SCRIPT_FILENAME} -d [OR]
306 | RewriteCond %{SCRIPT_FILENAME} -f
307 | RewriteRule "(^|/)\." - [F]
308 |
309 |
310 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
311 |
312 | # Block access to backup and source files.
313 | # These files may be left by some text editors and can pose a great security
314 | # danger when anyone has access to them.
315 |
316 |
317 | Order allow,deny
318 | Deny from all
319 | Satisfy All
320 |
321 |
322 | # ------------------------------------------------------------------------------
323 | # | Secure Sockets Layer (SSL) |
324 | # ------------------------------------------------------------------------------
325 |
326 | # Rewrite secure requests properly to prevent SSL certificate warnings, e.g.:
327 | # prevent `https://www.example.com` when your certificate only allows
328 | # `https://secure.example.com`.
329 |
330 | #
331 | # RewriteCond %{SERVER_PORT} !^443
332 | # RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
333 | #
334 |
335 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
336 |
337 | # Force client-side SSL redirection.
338 |
339 | # If a user types "example.com" in his browser, the above rule will redirect him
340 | # to the secure version of the site. That still leaves a window of opportunity
341 | # (the initial HTTP connection) for an attacker to downgrade or redirect the
342 | # request. The following header ensures that browser will ONLY connect to your
343 | # server via HTTPS, regardless of what the users type in the address bar.
344 | # http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
345 |
346 | #
347 | # Header set Strict-Transport-Security max-age=16070400;
348 | #
349 |
350 | # ------------------------------------------------------------------------------
351 | # | Server software information |
352 | # ------------------------------------------------------------------------------
353 |
354 | # Avoid displaying the exact Apache version number, the description of the
355 | # generic OS-type and the information about Apache's compiled-in modules.
356 |
357 | # ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`!
358 |
359 | # ServerTokens Prod
360 |
361 |
362 | # ##############################################################################
363 | # # WEB PERFORMANCE #
364 | # ##############################################################################
365 |
366 | # ------------------------------------------------------------------------------
367 | # | Compression |
368 | # ------------------------------------------------------------------------------
369 |
370 |
371 |
372 | # Force compression for mangled headers.
373 | # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
374 |
375 |
376 | SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
377 | RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
378 |
379 |
380 |
381 | # Compress all output labeled with one of the following MIME-types
382 | # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
383 | # and can remove the `` and `` lines
384 | # as `AddOutputFilterByType` is still in the core directives).
385 |
386 | AddOutputFilterByType DEFLATE application/atom+xml \
387 | application/javascript \
388 | application/json \
389 | application/rss+xml \
390 | application/vnd.ms-fontobject \
391 | application/x-font-ttf \
392 | application/x-web-app-manifest+json \
393 | application/xhtml+xml \
394 | application/xml \
395 | font/opentype \
396 | image/svg+xml \
397 | image/x-icon \
398 | text/css \
399 | text/html \
400 | text/plain \
401 | text/x-component \
402 | text/xml
403 |
404 |
405 |
406 |
407 | # ------------------------------------------------------------------------------
408 | # | Content transformations |
409 | # ------------------------------------------------------------------------------
410 |
411 | # Prevent some of the mobile network providers from modifying the content of
412 | # your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5.
413 |
414 | #
415 | # Header set Cache-Control "no-transform"
416 | #
417 |
418 | # ------------------------------------------------------------------------------
419 | # | ETag removal |
420 | # ------------------------------------------------------------------------------
421 |
422 | # Since we're sending far-future expires headers (see below), ETags can
423 | # be removed: http://developer.yahoo.com/performance/rules.html#etags.
424 |
425 | # `FileETag None` is not enough for every server.
426 |
427 | Header unset ETag
428 |
429 |
430 | FileETag None
431 |
432 | # ------------------------------------------------------------------------------
433 | # | Expires headers (for better cache control) |
434 | # ------------------------------------------------------------------------------
435 |
436 | # The following expires headers are set pretty far in the future. If you don't
437 | # control versioning with filename-based cache busting, consider lowering the
438 | # cache time for resources like CSS and JS to something like 1 week.
439 |
440 |
441 |
442 | ExpiresActive on
443 | ExpiresDefault "access plus 1 month"
444 |
445 | # CSS
446 | ExpiresByType text/css "access plus 1 year"
447 |
448 | # Data interchange
449 | ExpiresByType application/json "access plus 0 seconds"
450 | ExpiresByType application/xml "access plus 0 seconds"
451 | ExpiresByType text/xml "access plus 0 seconds"
452 |
453 | # Favicon (cannot be renamed!)
454 | ExpiresByType image/x-icon "access plus 1 week"
455 |
456 | # HTML components (HTCs)
457 | ExpiresByType text/x-component "access plus 1 month"
458 |
459 | # HTML
460 | ExpiresByType text/html "access plus 0 seconds"
461 |
462 | # JavaScript
463 | ExpiresByType application/javascript "access plus 1 year"
464 |
465 | # Manifest files
466 | ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
467 | ExpiresByType text/cache-manifest "access plus 0 seconds"
468 |
469 | # Media
470 | ExpiresByType audio/ogg "access plus 1 month"
471 | ExpiresByType image/gif "access plus 1 month"
472 | ExpiresByType image/jpeg "access plus 1 month"
473 | ExpiresByType image/png "access plus 1 month"
474 | ExpiresByType video/mp4 "access plus 1 month"
475 | ExpiresByType video/ogg "access plus 1 month"
476 | ExpiresByType video/webm "access plus 1 month"
477 |
478 | # Web feeds
479 | ExpiresByType application/atom+xml "access plus 1 hour"
480 | ExpiresByType application/rss+xml "access plus 1 hour"
481 |
482 | # Web fonts
483 | ExpiresByType application/font-woff "access plus 1 month"
484 | ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
485 | ExpiresByType application/x-font-ttf "access plus 1 month"
486 | ExpiresByType font/opentype "access plus 1 month"
487 | ExpiresByType image/svg+xml "access plus 1 month"
488 |
489 |
490 |
491 | # ------------------------------------------------------------------------------
492 | # | Filename-based cache busting |
493 | # ------------------------------------------------------------------------------
494 |
495 | # If you're not using a build process to manage your filename version revving,
496 | # you might want to consider enabling the following directives to route all
497 | # requests such as `/css/style.12345.css` to `/css/style.css`.
498 |
499 | # To understand why this is important and a better idea than `*.css?v231`, read:
500 | # http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
501 |
502 | #
503 | # RewriteCond %{REQUEST_FILENAME} !-f
504 | # RewriteCond %{REQUEST_FILENAME} !-d
505 | # RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
506 | #
507 |
508 | # ------------------------------------------------------------------------------
509 | # | File concatenation |
510 | # ------------------------------------------------------------------------------
511 |
512 | # Allow concatenation from within specific CSS and JS files, e.g.:
513 | # Inside of `script.combined.js` you could have
514 | #
515 | #
516 | # and they would be included into this single file.
517 |
518 | #
519 | #
520 | # Options +Includes
521 | # AddOutputFilterByType INCLUDES application/javascript application/json
522 | # SetOutputFilter INCLUDES
523 | #
524 | #
525 | # Options +Includes
526 | # AddOutputFilterByType INCLUDES text/css
527 | # SetOutputFilter INCLUDES
528 | #
529 | #
530 |
531 | # ------------------------------------------------------------------------------
532 | # | Persistent connections |
533 | # ------------------------------------------------------------------------------
534 |
535 | # Allow multiple requests to be sent over the same TCP connection:
536 | # http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.
537 |
538 | # Enable if you serve a lot of static content but, be aware of the
539 | # possible disadvantages!
540 |
541 | #
542 | # Header set Connection Keep-Alive
543 | #
544 |
--------------------------------------------------------------------------------
/demo/dist/.htaccess:
--------------------------------------------------------------------------------
1 | # Apache Configuration File
2 |
3 | # (!) Using `.htaccess` files slows down Apache, therefore, if you have access
4 | # to the main server config file (usually called `httpd.conf`), you should add
5 | # this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html.
6 |
7 | # ##############################################################################
8 | # # CROSS-ORIGIN RESOURCE SHARING (CORS) #
9 | # ##############################################################################
10 |
11 | # ------------------------------------------------------------------------------
12 | # | Cross-domain AJAX requests |
13 | # ------------------------------------------------------------------------------
14 |
15 | # Enable cross-origin AJAX requests.
16 | # http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
17 | # http://enable-cors.org/
18 |
19 | #
20 | # Header set Access-Control-Allow-Origin "*"
21 | #
22 |
23 | # ------------------------------------------------------------------------------
24 | # | CORS-enabled images |
25 | # ------------------------------------------------------------------------------
26 |
27 | # Send the CORS header for images when browsers request it.
28 | # https://developer.mozilla.org/en/CORS_Enabled_Image
29 | # http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
30 | # http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
31 |
32 |
33 |
34 |
35 | SetEnvIf Origin ":" IS_CORS
36 | Header set Access-Control-Allow-Origin "*" env=IS_CORS
37 |
38 |
39 |
40 |
41 | # ------------------------------------------------------------------------------
42 | # | Web fonts access |
43 | # ------------------------------------------------------------------------------
44 |
45 | # Allow access from all domains for web fonts
46 |
47 |
48 |
49 | Header set Access-Control-Allow-Origin "*"
50 |
51 |
52 |
53 |
54 | # ##############################################################################
55 | # # ERRORS #
56 | # ##############################################################################
57 |
58 | # ------------------------------------------------------------------------------
59 | # | 404 error prevention for non-existing redirected folders |
60 | # ------------------------------------------------------------------------------
61 |
62 | # Prevent Apache from returning a 404 error for a rewrite if a directory
63 | # with the same name does not exist.
64 | # http://httpd.apache.org/docs/current/content-negotiation.html#multiviews
65 | # http://www.webmasterworld.com/apache/3808792.htm
66 |
67 | Options -MultiViews
68 |
69 | # ------------------------------------------------------------------------------
70 | # | Custom error messages / pages |
71 | # ------------------------------------------------------------------------------
72 |
73 | # You can customize what Apache returns to the client in case of an error (see
74 | # http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:
75 |
76 | ErrorDocument 404 /404.html
77 |
78 |
79 | # ##############################################################################
80 | # # INTERNET EXPLORER #
81 | # ##############################################################################
82 |
83 | # ------------------------------------------------------------------------------
84 | # | Better website experience |
85 | # ------------------------------------------------------------------------------
86 |
87 | # Force IE to render pages in the highest available mode in the various
88 | # cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.
89 |
90 |
91 | Header set X-UA-Compatible "IE=edge"
92 | # `mod_headers` can't match based on the content-type, however, we only
93 | # want to send this header for HTML pages and not for the other resources
94 |
95 | Header unset X-UA-Compatible
96 |
97 |
98 |
99 | # ------------------------------------------------------------------------------
100 | # | Cookie setting from iframes |
101 | # ------------------------------------------------------------------------------
102 |
103 | # Allow cookies to be set from iframes in IE.
104 |
105 | #
106 | # Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
107 | #
108 |
109 | # ------------------------------------------------------------------------------
110 | # | Screen flicker |
111 | # ------------------------------------------------------------------------------
112 |
113 | # Stop screen flicker in IE on CSS rollovers (this only works in
114 | # combination with the `ExpiresByType` directives for images from below).
115 |
116 | # BrowserMatch "MSIE" brokenvary=1
117 | # BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
118 | # BrowserMatch "Opera" !brokenvary
119 | # SetEnvIf brokenvary 1 force-no-vary
120 |
121 |
122 | # ##############################################################################
123 | # # MIME TYPES AND ENCODING #
124 | # ##############################################################################
125 |
126 | # ------------------------------------------------------------------------------
127 | # | Proper MIME types for all files |
128 | # ------------------------------------------------------------------------------
129 |
130 |
131 |
132 | # Audio
133 | AddType audio/mp4 m4a f4a f4b
134 | AddType audio/ogg oga ogg
135 |
136 | # JavaScript
137 | # Normalize to standard type (it's sniffed in IE anyways):
138 | # http://tools.ietf.org/html/rfc4329#section-7.2
139 | AddType application/javascript js jsonp
140 | AddType application/json json
141 |
142 | # Video
143 | AddType video/mp4 mp4 m4v f4v f4p
144 | AddType video/ogg ogv
145 | AddType video/webm webm
146 | AddType video/x-flv flv
147 |
148 | # Web fonts
149 | AddType application/font-woff woff
150 | AddType application/vnd.ms-fontobject eot
151 |
152 | # Browsers usually ignore the font MIME types and sniff the content,
153 | # however, Chrome shows a warning if other MIME types are used for the
154 | # following fonts.
155 | AddType application/x-font-ttf ttc ttf
156 | AddType font/opentype otf
157 |
158 | # Make SVGZ fonts work on iPad:
159 | # https://twitter.com/FontSquirrel/status/14855840545
160 | AddType image/svg+xml svg svgz
161 | AddEncoding gzip svgz
162 |
163 | # Other
164 | AddType application/octet-stream safariextz
165 | AddType application/x-chrome-extension crx
166 | AddType application/x-opera-extension oex
167 | AddType application/x-shockwave-flash swf
168 | AddType application/x-web-app-manifest+json webapp
169 | AddType application/x-xpinstall xpi
170 | AddType application/xml atom rdf rss xml
171 | AddType image/webp webp
172 | AddType image/x-icon ico
173 | AddType text/cache-manifest appcache manifest
174 | AddType text/vtt vtt
175 | AddType text/x-component htc
176 | AddType text/x-vcard vcf
177 |
178 |
179 |
180 | # ------------------------------------------------------------------------------
181 | # | UTF-8 encoding |
182 | # ------------------------------------------------------------------------------
183 |
184 | # Use UTF-8 encoding for anything served as `text/html` or `text/plain`.
185 | AddDefaultCharset utf-8
186 |
187 | # Force UTF-8 for certain file formats.
188 |
189 | AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
190 |
191 |
192 |
193 | # ##############################################################################
194 | # # URL REWRITES #
195 | # ##############################################################################
196 |
197 | # ------------------------------------------------------------------------------
198 | # | Rewrite engine |
199 | # ------------------------------------------------------------------------------
200 |
201 | # Turning on the rewrite engine and enabling the `FollowSymLinks` option is
202 | # necessary for the following directives to work.
203 |
204 | # If your web host doesn't allow the `FollowSymlinks` option, you may need to
205 | # comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the
206 | # performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
207 |
208 | # Also, some cloud hosting services require `RewriteBase` to be set:
209 | # http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site
210 |
211 |
212 | Options +FollowSymlinks
213 | # Options +SymLinksIfOwnerMatch
214 | RewriteEngine On
215 | # RewriteBase /
216 |
217 |
218 | # ------------------------------------------------------------------------------
219 | # | Suppressing / Forcing the "www." at the beginning of URLs |
220 | # ------------------------------------------------------------------------------
221 |
222 | # The same content should never be available under two different URLs especially
223 | # not with and without "www." at the beginning. This can cause SEO problems
224 | # (duplicate content), therefore, you should choose one of the alternatives and
225 | # redirect the other one.
226 |
227 | # By default option 1 (no "www.") is activated:
228 | # http://no-www.org/faq.php?q=class_b
229 |
230 | # If you'd prefer to use option 2, just comment out all the lines from option 1
231 | # and uncomment the ones from option 2.
232 |
233 | # IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
234 |
235 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
236 |
237 | # Option 1: rewrite www.example.com → example.com
238 |
239 |
240 | RewriteCond %{HTTPS} !=on
241 | RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
242 | RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
243 |
244 |
245 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
246 |
247 | # Option 2: rewrite example.com → www.example.com
248 |
249 | # Be aware that the following might not be a good idea if you use "real"
250 | # subdomains for certain parts of your website.
251 |
252 | #
253 | # RewriteCond %{HTTPS} !=on
254 | # RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
255 | # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
256 | #
257 |
258 |
259 | # ##############################################################################
260 | # # SECURITY #
261 | # ##############################################################################
262 |
263 | # ------------------------------------------------------------------------------
264 | # | Content Security Policy (CSP) |
265 | # ------------------------------------------------------------------------------
266 |
267 | # You can mitigate the risk of cross-site scripting and other content-injection
268 | # attacks by setting a Content Security Policy which whitelists trusted sources
269 | # of content for your site.
270 |
271 | # The example header below allows ONLY scripts that are loaded from the current
272 | # site's origin (no inline scripts, no CDN, etc). This almost certainly won't
273 | # work as-is for your site!
274 |
275 | # To get all the details you'll need to craft a reasonable policy for your site,
276 | # read: http://html5rocks.com/en/tutorials/security/content-security-policy (or
277 | # see the specification: http://w3.org/TR/CSP).
278 |
279 | #
280 | # Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
281 | #
282 | # Header unset Content-Security-Policy
283 | #
284 | #
285 |
286 | # ------------------------------------------------------------------------------
287 | # | File access |
288 | # ------------------------------------------------------------------------------
289 |
290 | # Block access to directories without a default document.
291 | # Usually you should leave this uncommented because you shouldn't allow anyone
292 | # to surf through every directory on your server (which may includes rather
293 | # private places like the CMS's directories).
294 |
295 |
296 | Options -Indexes
297 |
298 |
299 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
300 |
301 | # Block access to hidden files and directories.
302 | # This includes directories used by version control systems such as Git and SVN.
303 |
304 |
305 | RewriteCond %{SCRIPT_FILENAME} -d [OR]
306 | RewriteCond %{SCRIPT_FILENAME} -f
307 | RewriteRule "(^|/)\." - [F]
308 |
309 |
310 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
311 |
312 | # Block access to backup and source files.
313 | # These files may be left by some text editors and can pose a great security
314 | # danger when anyone has access to them.
315 |
316 |
317 | Order allow,deny
318 | Deny from all
319 | Satisfy All
320 |
321 |
322 | # ------------------------------------------------------------------------------
323 | # | Secure Sockets Layer (SSL) |
324 | # ------------------------------------------------------------------------------
325 |
326 | # Rewrite secure requests properly to prevent SSL certificate warnings, e.g.:
327 | # prevent `https://www.example.com` when your certificate only allows
328 | # `https://secure.example.com`.
329 |
330 | #
331 | # RewriteCond %{SERVER_PORT} !^443
332 | # RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
333 | #
334 |
335 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
336 |
337 | # Force client-side SSL redirection.
338 |
339 | # If a user types "example.com" in his browser, the above rule will redirect him
340 | # to the secure version of the site. That still leaves a window of opportunity
341 | # (the initial HTTP connection) for an attacker to downgrade or redirect the
342 | # request. The following header ensures that browser will ONLY connect to your
343 | # server via HTTPS, regardless of what the users type in the address bar.
344 | # http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
345 |
346 | #
347 | # Header set Strict-Transport-Security max-age=16070400;
348 | #
349 |
350 | # ------------------------------------------------------------------------------
351 | # | Server software information |
352 | # ------------------------------------------------------------------------------
353 |
354 | # Avoid displaying the exact Apache version number, the description of the
355 | # generic OS-type and the information about Apache's compiled-in modules.
356 |
357 | # ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`!
358 |
359 | # ServerTokens Prod
360 |
361 |
362 | # ##############################################################################
363 | # # WEB PERFORMANCE #
364 | # ##############################################################################
365 |
366 | # ------------------------------------------------------------------------------
367 | # | Compression |
368 | # ------------------------------------------------------------------------------
369 |
370 |
371 |
372 | # Force compression for mangled headers.
373 | # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
374 |
375 |
376 | SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
377 | RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
378 |
379 |
380 |
381 | # Compress all output labeled with one of the following MIME-types
382 | # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
383 | # and can remove the `` and `` lines
384 | # as `AddOutputFilterByType` is still in the core directives).
385 |
386 | AddOutputFilterByType DEFLATE application/atom+xml \
387 | application/javascript \
388 | application/json \
389 | application/rss+xml \
390 | application/vnd.ms-fontobject \
391 | application/x-font-ttf \
392 | application/x-web-app-manifest+json \
393 | application/xhtml+xml \
394 | application/xml \
395 | font/opentype \
396 | image/svg+xml \
397 | image/x-icon \
398 | text/css \
399 | text/html \
400 | text/plain \
401 | text/x-component \
402 | text/xml
403 |
404 |
405 |
406 |
407 | # ------------------------------------------------------------------------------
408 | # | Content transformations |
409 | # ------------------------------------------------------------------------------
410 |
411 | # Prevent some of the mobile network providers from modifying the content of
412 | # your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5.
413 |
414 | #
415 | # Header set Cache-Control "no-transform"
416 | #
417 |
418 | # ------------------------------------------------------------------------------
419 | # | ETag removal |
420 | # ------------------------------------------------------------------------------
421 |
422 | # Since we're sending far-future expires headers (see below), ETags can
423 | # be removed: http://developer.yahoo.com/performance/rules.html#etags.
424 |
425 | # `FileETag None` is not enough for every server.
426 |
427 | Header unset ETag
428 |
429 |
430 | FileETag None
431 |
432 | # ------------------------------------------------------------------------------
433 | # | Expires headers (for better cache control) |
434 | # ------------------------------------------------------------------------------
435 |
436 | # The following expires headers are set pretty far in the future. If you don't
437 | # control versioning with filename-based cache busting, consider lowering the
438 | # cache time for resources like CSS and JS to something like 1 week.
439 |
440 |
441 |
442 | ExpiresActive on
443 | ExpiresDefault "access plus 1 month"
444 |
445 | # CSS
446 | ExpiresByType text/css "access plus 1 year"
447 |
448 | # Data interchange
449 | ExpiresByType application/json "access plus 0 seconds"
450 | ExpiresByType application/xml "access plus 0 seconds"
451 | ExpiresByType text/xml "access plus 0 seconds"
452 |
453 | # Favicon (cannot be renamed!)
454 | ExpiresByType image/x-icon "access plus 1 week"
455 |
456 | # HTML components (HTCs)
457 | ExpiresByType text/x-component "access plus 1 month"
458 |
459 | # HTML
460 | ExpiresByType text/html "access plus 0 seconds"
461 |
462 | # JavaScript
463 | ExpiresByType application/javascript "access plus 1 year"
464 |
465 | # Manifest files
466 | ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
467 | ExpiresByType text/cache-manifest "access plus 0 seconds"
468 |
469 | # Media
470 | ExpiresByType audio/ogg "access plus 1 month"
471 | ExpiresByType image/gif "access plus 1 month"
472 | ExpiresByType image/jpeg "access plus 1 month"
473 | ExpiresByType image/png "access plus 1 month"
474 | ExpiresByType video/mp4 "access plus 1 month"
475 | ExpiresByType video/ogg "access plus 1 month"
476 | ExpiresByType video/webm "access plus 1 month"
477 |
478 | # Web feeds
479 | ExpiresByType application/atom+xml "access plus 1 hour"
480 | ExpiresByType application/rss+xml "access plus 1 hour"
481 |
482 | # Web fonts
483 | ExpiresByType application/font-woff "access plus 1 month"
484 | ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
485 | ExpiresByType application/x-font-ttf "access plus 1 month"
486 | ExpiresByType font/opentype "access plus 1 month"
487 | ExpiresByType image/svg+xml "access plus 1 month"
488 |
489 |
490 |
491 | # ------------------------------------------------------------------------------
492 | # | Filename-based cache busting |
493 | # ------------------------------------------------------------------------------
494 |
495 | # If you're not using a build process to manage your filename version revving,
496 | # you might want to consider enabling the following directives to route all
497 | # requests such as `/css/style.12345.css` to `/css/style.css`.
498 |
499 | # To understand why this is important and a better idea than `*.css?v231`, read:
500 | # http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
501 |
502 | #
503 | # RewriteCond %{REQUEST_FILENAME} !-f
504 | # RewriteCond %{REQUEST_FILENAME} !-d
505 | # RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
506 | #
507 |
508 | # ------------------------------------------------------------------------------
509 | # | File concatenation |
510 | # ------------------------------------------------------------------------------
511 |
512 | # Allow concatenation from within specific CSS and JS files, e.g.:
513 | # Inside of `script.combined.js` you could have
514 | #
515 | #
516 | # and they would be included into this single file.
517 |
518 | #
519 | #
520 | # Options +Includes
521 | # AddOutputFilterByType INCLUDES application/javascript application/json
522 | # SetOutputFilter INCLUDES
523 | #
524 | #
525 | # Options +Includes
526 | # AddOutputFilterByType INCLUDES text/css
527 | # SetOutputFilter INCLUDES
528 | #
529 | #
530 |
531 | # ------------------------------------------------------------------------------
532 | # | Persistent connections |
533 | # ------------------------------------------------------------------------------
534 |
535 | # Allow multiple requests to be sent over the same TCP connection:
536 | # http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.
537 |
538 | # Enable if you serve a lot of static content but, be aware of the
539 | # possible disadvantages!
540 |
541 | #
542 | # Header set Connection Keep-Alive
543 | #
544 |
--------------------------------------------------------------------------------
/demo/app/styles/material.color.css:
--------------------------------------------------------------------------------
1 | .red.lighten-5 {
2 | background-color: #FFEBEE !important; }
3 |
4 | .red-text.text-lighten-5 {
5 | color: #FFEBEE !important; }
6 |
7 | .red.lighten-4 {
8 | background-color: #FFCDD2 !important; }
9 |
10 | .red-text.text-lighten-4 {
11 | color: #FFCDD2 !important; }
12 |
13 | .red.lighten-3 {
14 | background-color: #EF9A9A !important; }
15 |
16 | .red-text.text-lighten-3 {
17 | color: #EF9A9A !important; }
18 |
19 | .red.lighten-2 {
20 | background-color: #E57373 !important; }
21 |
22 | .red-text.text-lighten-2 {
23 | color: #E57373 !important; }
24 |
25 | .red.lighten-1 {
26 | background-color: #EF5350 !important; }
27 |
28 | .red-text.text-lighten-1 {
29 | color: #EF5350 !important; }
30 |
31 | .red {
32 | background-color: #F44336 !important; }
33 |
34 | .red-text {
35 | color: #F44336 !important; }
36 |
37 | .red.darken-1 {
38 | background-color: #E53935 !important; }
39 |
40 | .red-text.text-darken-1 {
41 | color: #E53935 !important; }
42 |
43 | .red.darken-2 {
44 | background-color: #D32F2F !important; }
45 |
46 | .red-text.text-darken-2 {
47 | color: #D32F2F !important; }
48 |
49 | .red.darken-3 {
50 | background-color: #C62828 !important; }
51 |
52 | .red-text.text-darken-3 {
53 | color: #C62828 !important; }
54 |
55 | .red.darken-4 {
56 | background-color: #B71C1C !important; }
57 |
58 | .red-text.text-darken-4 {
59 | color: #B71C1C !important; }
60 |
61 | .red.accent-1 {
62 | background-color: #FF8A80 !important; }
63 |
64 | .red-text.text-accent-1 {
65 | color: #FF8A80 !important; }
66 |
67 | .red.accent-2 {
68 | background-color: #FF5252 !important; }
69 |
70 | .red-text.text-accent-2 {
71 | color: #FF5252 !important; }
72 |
73 | .red.accent-3 {
74 | background-color: #FF1744 !important; }
75 |
76 | .red-text.text-accent-3 {
77 | color: #FF1744 !important; }
78 |
79 | .red.accent-4 {
80 | background-color: #D50000 !important; }
81 |
82 | .red-text.text-accent-4 {
83 | color: #D50000 !important; }
84 |
85 | .pink.lighten-5 {
86 | background-color: #fce4ec !important; }
87 |
88 | .pink-text.text-lighten-5 {
89 | color: #fce4ec !important; }
90 |
91 | .pink.lighten-4 {
92 | background-color: #f8bbd0 !important; }
93 |
94 | .pink-text.text-lighten-4 {
95 | color: #f8bbd0 !important; }
96 |
97 | .pink.lighten-3 {
98 | background-color: #f48fb1 !important; }
99 |
100 | .pink-text.text-lighten-3 {
101 | color: #f48fb1 !important; }
102 |
103 | .pink.lighten-2 {
104 | background-color: #f06292 !important; }
105 |
106 | .pink-text.text-lighten-2 {
107 | color: #f06292 !important; }
108 |
109 | .pink.lighten-1 {
110 | background-color: #ec407a !important; }
111 |
112 | .pink-text.text-lighten-1 {
113 | color: #ec407a !important; }
114 |
115 | .pink {
116 | background-color: #e91e63 !important; }
117 |
118 | .pink-text {
119 | color: #e91e63 !important; }
120 |
121 | .pink.darken-1 {
122 | background-color: #d81b60 !important; }
123 |
124 | .pink-text.text-darken-1 {
125 | color: #d81b60 !important; }
126 |
127 | .pink.darken-2 {
128 | background-color: #c2185b !important; }
129 |
130 | .pink-text.text-darken-2 {
131 | color: #c2185b !important; }
132 |
133 | .pink.darken-3 {
134 | background-color: #ad1457 !important; }
135 |
136 | .pink-text.text-darken-3 {
137 | color: #ad1457 !important; }
138 |
139 | .pink.darken-4 {
140 | background-color: #880e4f !important; }
141 |
142 | .pink-text.text-darken-4 {
143 | color: #880e4f !important; }
144 |
145 | .pink.accent-1 {
146 | background-color: #ff80ab !important; }
147 |
148 | .pink-text.text-accent-1 {
149 | color: #ff80ab !important; }
150 |
151 | .pink.accent-2 {
152 | background-color: #ff4081 !important; }
153 |
154 | .pink-text.text-accent-2 {
155 | color: #ff4081 !important; }
156 |
157 | .pink.accent-3 {
158 | background-color: #f50057 !important; }
159 |
160 | .pink-text.text-accent-3 {
161 | color: #f50057 !important; }
162 |
163 | .pink.accent-4 {
164 | background-color: #c51162 !important; }
165 |
166 | .pink-text.text-accent-4 {
167 | color: #c51162 !important; }
168 |
169 | .purple.lighten-5 {
170 | background-color: #f3e5f5 !important; }
171 |
172 | .purple-text.text-lighten-5 {
173 | color: #f3e5f5 !important; }
174 |
175 | .purple.lighten-4 {
176 | background-color: #e1bee7 !important; }
177 |
178 | .purple-text.text-lighten-4 {
179 | color: #e1bee7 !important; }
180 |
181 | .purple.lighten-3 {
182 | background-color: #ce93d8 !important; }
183 |
184 | .purple-text.text-lighten-3 {
185 | color: #ce93d8 !important; }
186 |
187 | .purple.lighten-2 {
188 | background-color: #ba68c8 !important; }
189 |
190 | .purple-text.text-lighten-2 {
191 | color: #ba68c8 !important; }
192 |
193 | .purple.lighten-1 {
194 | background-color: #ab47bc !important; }
195 |
196 | .purple-text.text-lighten-1 {
197 | color: #ab47bc !important; }
198 |
199 | .purple {
200 | background-color: #9c27b0 !important; }
201 |
202 | .purple-text {
203 | color: #9c27b0 !important; }
204 |
205 | .purple.darken-1 {
206 | background-color: #8e24aa !important; }
207 |
208 | .purple-text.text-darken-1 {
209 | color: #8e24aa !important; }
210 |
211 | .purple.darken-2 {
212 | background-color: #7b1fa2 !important; }
213 |
214 | .purple-text.text-darken-2 {
215 | color: #7b1fa2 !important; }
216 |
217 | .purple.darken-3 {
218 | background-color: #6a1b9a !important; }
219 |
220 | .purple-text.text-darken-3 {
221 | color: #6a1b9a !important; }
222 |
223 | .purple.darken-4 {
224 | background-color: #4a148c !important; }
225 |
226 | .purple-text.text-darken-4 {
227 | color: #4a148c !important; }
228 |
229 | .purple.accent-1 {
230 | background-color: #ea80fc !important; }
231 |
232 | .purple-text.text-accent-1 {
233 | color: #ea80fc !important; }
234 |
235 | .purple.accent-2 {
236 | background-color: #e040fb !important; }
237 |
238 | .purple-text.text-accent-2 {
239 | color: #e040fb !important; }
240 |
241 | .purple.accent-3 {
242 | background-color: #d500f9 !important; }
243 |
244 | .purple-text.text-accent-3 {
245 | color: #d500f9 !important; }
246 |
247 | .purple.accent-4 {
248 | background-color: #aa00ff !important; }
249 |
250 | .purple-text.text-accent-4 {
251 | color: #aa00ff !important; }
252 |
253 | .deep-purple.lighten-5 {
254 | background-color: #ede7f6 !important; }
255 |
256 | .deep-purple-text.text-lighten-5 {
257 | color: #ede7f6 !important; }
258 |
259 | .deep-purple.lighten-4 {
260 | background-color: #d1c4e9 !important; }
261 |
262 | .deep-purple-text.text-lighten-4 {
263 | color: #d1c4e9 !important; }
264 |
265 | .deep-purple.lighten-3 {
266 | background-color: #b39ddb !important; }
267 |
268 | .deep-purple-text.text-lighten-3 {
269 | color: #b39ddb !important; }
270 |
271 | .deep-purple.lighten-2 {
272 | background-color: #9575cd !important; }
273 |
274 | .deep-purple-text.text-lighten-2 {
275 | color: #9575cd !important; }
276 |
277 | .deep-purple.lighten-1 {
278 | background-color: #7e57c2 !important; }
279 |
280 | .deep-purple-text.text-lighten-1 {
281 | color: #7e57c2 !important; }
282 |
283 | .deep-purple {
284 | background-color: #673ab7 !important; }
285 |
286 | .deep-purple-text {
287 | color: #673ab7 !important; }
288 |
289 | .deep-purple.darken-1 {
290 | background-color: #5e35b1 !important; }
291 |
292 | .deep-purple-text.text-darken-1 {
293 | color: #5e35b1 !important; }
294 |
295 | .deep-purple.darken-2 {
296 | background-color: #512da8 !important; }
297 |
298 | .deep-purple-text.text-darken-2 {
299 | color: #512da8 !important; }
300 |
301 | .deep-purple.darken-3 {
302 | background-color: #4527a0 !important; }
303 |
304 | .deep-purple-text.text-darken-3 {
305 | color: #4527a0 !important; }
306 |
307 | .deep-purple.darken-4 {
308 | background-color: #311b92 !important; }
309 |
310 | .deep-purple-text.text-darken-4 {
311 | color: #311b92 !important; }
312 |
313 | .deep-purple.accent-1 {
314 | background-color: #b388ff !important; }
315 |
316 | .deep-purple-text.text-accent-1 {
317 | color: #b388ff !important; }
318 |
319 | .deep-purple.accent-2 {
320 | background-color: #7c4dff !important; }
321 |
322 | .deep-purple-text.text-accent-2 {
323 | color: #7c4dff !important; }
324 |
325 | .deep-purple.accent-3 {
326 | background-color: #651fff !important; }
327 |
328 | .deep-purple-text.text-accent-3 {
329 | color: #651fff !important; }
330 |
331 | .deep-purple.accent-4 {
332 | background-color: #6200ea !important; }
333 |
334 | .deep-purple-text.text-accent-4 {
335 | color: #6200ea !important; }
336 |
337 | .indigo.lighten-5 {
338 | background-color: #e8eaf6 !important; }
339 |
340 | .indigo-text.text-lighten-5 {
341 | color: #e8eaf6 !important; }
342 |
343 | .indigo.lighten-4 {
344 | background-color: #c5cae9 !important; }
345 |
346 | .indigo-text.text-lighten-4 {
347 | color: #c5cae9 !important; }
348 |
349 | .indigo.lighten-3 {
350 | background-color: #9fa8da !important; }
351 |
352 | .indigo-text.text-lighten-3 {
353 | color: #9fa8da !important; }
354 |
355 | .indigo.lighten-2 {
356 | background-color: #7986cb !important; }
357 |
358 | .indigo-text.text-lighten-2 {
359 | color: #7986cb !important; }
360 |
361 | .indigo.lighten-1 {
362 | background-color: #5c6bc0 !important; }
363 |
364 | .indigo-text.text-lighten-1 {
365 | color: #5c6bc0 !important; }
366 |
367 | .indigo {
368 | background-color: #3f51b5 !important; }
369 |
370 | .indigo-text {
371 | color: #3f51b5 !important; }
372 |
373 | .indigo.darken-1 {
374 | background-color: #3949ab !important; }
375 |
376 | .indigo-text.text-darken-1 {
377 | color: #3949ab !important; }
378 |
379 | .indigo.darken-2 {
380 | background-color: #303f9f !important; }
381 |
382 | .indigo-text.text-darken-2 {
383 | color: #303f9f !important; }
384 |
385 | .indigo.darken-3 {
386 | background-color: #283593 !important; }
387 |
388 | .indigo-text.text-darken-3 {
389 | color: #283593 !important; }
390 |
391 | .indigo.darken-4 {
392 | background-color: #1a237e !important; }
393 |
394 | .indigo-text.text-darken-4 {
395 | color: #1a237e !important; }
396 |
397 | .indigo.accent-1 {
398 | background-color: #8c9eff !important; }
399 |
400 | .indigo-text.text-accent-1 {
401 | color: #8c9eff !important; }
402 |
403 | .indigo.accent-2 {
404 | background-color: #536dfe !important; }
405 |
406 | .indigo-text.text-accent-2 {
407 | color: #536dfe !important; }
408 |
409 | .indigo.accent-3 {
410 | background-color: #3d5afe !important; }
411 |
412 | .indigo-text.text-accent-3 {
413 | color: #3d5afe !important; }
414 |
415 | .indigo.accent-4 {
416 | background-color: #304ffe !important; }
417 |
418 | .indigo-text.text-accent-4 {
419 | color: #304ffe !important; }
420 |
421 | .blue.lighten-5 {
422 | background-color: #E3F2FD !important; }
423 |
424 | .blue-text.text-lighten-5 {
425 | color: #E3F2FD !important; }
426 |
427 | .blue.lighten-4 {
428 | background-color: #BBDEFB !important; }
429 |
430 | .blue-text.text-lighten-4 {
431 | color: #BBDEFB !important; }
432 |
433 | .blue.lighten-3 {
434 | background-color: #90CAF9 !important; }
435 |
436 | .blue-text.text-lighten-3 {
437 | color: #90CAF9 !important; }
438 |
439 | .blue.lighten-2 {
440 | background-color: #64B5F6 !important; }
441 |
442 | .blue-text.text-lighten-2 {
443 | color: #64B5F6 !important; }
444 |
445 | .blue.lighten-1 {
446 | background-color: #42A5F5 !important; }
447 |
448 | .blue-text.text-lighten-1 {
449 | color: #42A5F5 !important; }
450 |
451 | .blue {
452 | background-color: #2196F3 !important; }
453 |
454 | .blue-text {
455 | color: #2196F3 !important; }
456 |
457 | .blue.darken-1 {
458 | background-color: #1E88E5 !important; }
459 |
460 | .blue-text.text-darken-1 {
461 | color: #1E88E5 !important; }
462 |
463 | .blue.darken-2 {
464 | background-color: #1976D2 !important; }
465 |
466 | .blue-text.text-darken-2 {
467 | color: #1976D2 !important; }
468 |
469 | .blue.darken-3 {
470 | background-color: #1565C0 !important; }
471 |
472 | .blue-text.text-darken-3 {
473 | color: #1565C0 !important; }
474 |
475 | .blue.darken-4 {
476 | background-color: #0D47A1 !important; }
477 |
478 | .blue-text.text-darken-4 {
479 | color: #0D47A1 !important; }
480 |
481 | .blue.accent-1 {
482 | background-color: #82B1FF !important; }
483 |
484 | .blue-text.text-accent-1 {
485 | color: #82B1FF !important; }
486 |
487 | .blue.accent-2 {
488 | background-color: #448AFF !important; }
489 |
490 | .blue-text.text-accent-2 {
491 | color: #448AFF !important; }
492 |
493 | .blue.accent-3 {
494 | background-color: #2979FF !important; }
495 |
496 | .blue-text.text-accent-3 {
497 | color: #2979FF !important; }
498 |
499 | .blue.accent-4 {
500 | background-color: #2962FF !important; }
501 |
502 | .blue-text.text-accent-4 {
503 | color: #2962FF !important; }
504 |
505 | .light-blue.lighten-5 {
506 | background-color: #e1f5fe !important; }
507 |
508 | .light-blue-text.text-lighten-5 {
509 | color: #e1f5fe !important; }
510 |
511 | .light-blue.lighten-4 {
512 | background-color: #b3e5fc !important; }
513 |
514 | .light-blue-text.text-lighten-4 {
515 | color: #b3e5fc !important; }
516 |
517 | .light-blue.lighten-3 {
518 | background-color: #81d4fa !important; }
519 |
520 | .light-blue-text.text-lighten-3 {
521 | color: #81d4fa !important; }
522 |
523 | .light-blue.lighten-2 {
524 | background-color: #4fc3f7 !important; }
525 |
526 | .light-blue-text.text-lighten-2 {
527 | color: #4fc3f7 !important; }
528 |
529 | .light-blue.lighten-1 {
530 | background-color: #29b6f6 !important; }
531 |
532 | .light-blue-text.text-lighten-1 {
533 | color: #29b6f6 !important; }
534 |
535 | .light-blue {
536 | background-color: #03a9f4 !important; }
537 |
538 | .light-blue-text {
539 | color: #03a9f4 !important; }
540 |
541 | .light-blue.darken-1 {
542 | background-color: #039be5 !important; }
543 |
544 | .light-blue-text.text-darken-1 {
545 | color: #039be5 !important; }
546 |
547 | .light-blue.darken-2 {
548 | background-color: #0288d1 !important; }
549 |
550 | .light-blue-text.text-darken-2 {
551 | color: #0288d1 !important; }
552 |
553 | .light-blue.darken-3 {
554 | background-color: #0277bd !important; }
555 |
556 | .light-blue-text.text-darken-3 {
557 | color: #0277bd !important; }
558 |
559 | .light-blue.darken-4 {
560 | background-color: #01579b !important; }
561 |
562 | .light-blue-text.text-darken-4 {
563 | color: #01579b !important; }
564 |
565 | .light-blue.accent-1 {
566 | background-color: #80d8ff !important; }
567 |
568 | .light-blue-text.text-accent-1 {
569 | color: #80d8ff !important; }
570 |
571 | .light-blue.accent-2 {
572 | background-color: #40c4ff !important; }
573 |
574 | .light-blue-text.text-accent-2 {
575 | color: #40c4ff !important; }
576 |
577 | .light-blue.accent-3 {
578 | background-color: #00b0ff !important; }
579 |
580 | .light-blue-text.text-accent-3 {
581 | color: #00b0ff !important; }
582 |
583 | .light-blue.accent-4 {
584 | background-color: #0091ea !important; }
585 |
586 | .light-blue-text.text-accent-4 {
587 | color: #0091ea !important; }
588 |
589 | .cyan.lighten-5 {
590 | background-color: #e0f7fa !important; }
591 |
592 | .cyan-text.text-lighten-5 {
593 | color: #e0f7fa !important; }
594 |
595 | .cyan.lighten-4 {
596 | background-color: #b2ebf2 !important; }
597 |
598 | .cyan-text.text-lighten-4 {
599 | color: #b2ebf2 !important; }
600 |
601 | .cyan.lighten-3 {
602 | background-color: #80deea !important; }
603 |
604 | .cyan-text.text-lighten-3 {
605 | color: #80deea !important; }
606 |
607 | .cyan.lighten-2 {
608 | background-color: #4dd0e1 !important; }
609 |
610 | .cyan-text.text-lighten-2 {
611 | color: #4dd0e1 !important; }
612 |
613 | .cyan.lighten-1 {
614 | background-color: #26c6da !important; }
615 |
616 | .cyan-text.text-lighten-1 {
617 | color: #26c6da !important; }
618 |
619 | .cyan {
620 | background-color: #00bcd4 !important; }
621 |
622 | .cyan-text {
623 | color: #00bcd4 !important; }
624 |
625 | .cyan.darken-1 {
626 | background-color: #00acc1 !important; }
627 |
628 | .cyan-text.text-darken-1 {
629 | color: #00acc1 !important; }
630 |
631 | .cyan.darken-2 {
632 | background-color: #0097a7 !important; }
633 |
634 | .cyan-text.text-darken-2 {
635 | color: #0097a7 !important; }
636 |
637 | .cyan.darken-3 {
638 | background-color: #00838f !important; }
639 |
640 | .cyan-text.text-darken-3 {
641 | color: #00838f !important; }
642 |
643 | .cyan.darken-4 {
644 | background-color: #006064 !important; }
645 |
646 | .cyan-text.text-darken-4 {
647 | color: #006064 !important; }
648 |
649 | .cyan.accent-1 {
650 | background-color: #84ffff !important; }
651 |
652 | .cyan-text.text-accent-1 {
653 | color: #84ffff !important; }
654 |
655 | .cyan.accent-2 {
656 | background-color: #18ffff !important; }
657 |
658 | .cyan-text.text-accent-2 {
659 | color: #18ffff !important; }
660 |
661 | .cyan.accent-3 {
662 | background-color: #00e5ff !important; }
663 |
664 | .cyan-text.text-accent-3 {
665 | color: #00e5ff !important; }
666 |
667 | .cyan.accent-4 {
668 | background-color: #00b8d4 !important; }
669 |
670 | .cyan-text.text-accent-4 {
671 | color: #00b8d4 !important; }
672 |
673 | .teal.lighten-5 {
674 | background-color: #e0f2f1 !important; }
675 |
676 | .teal-text.text-lighten-5 {
677 | color: #e0f2f1 !important; }
678 |
679 | .teal.lighten-4 {
680 | background-color: #b2dfdb !important; }
681 |
682 | .teal-text.text-lighten-4 {
683 | color: #b2dfdb !important; }
684 |
685 | .teal.lighten-3 {
686 | background-color: #80cbc4 !important; }
687 |
688 | .teal-text.text-lighten-3 {
689 | color: #80cbc4 !important; }
690 |
691 | .teal.lighten-2 {
692 | background-color: #4db6ac !important; }
693 |
694 | .teal-text.text-lighten-2 {
695 | color: #4db6ac !important; }
696 |
697 | .teal.lighten-1 {
698 | background-color: #26a69a !important; }
699 |
700 | .teal-text.text-lighten-1 {
701 | color: #26a69a !important; }
702 |
703 | .teal {
704 | background-color: #009688 !important; }
705 |
706 | .teal-text {
707 | color: #009688 !important; }
708 |
709 | .teal.darken-1 {
710 | background-color: #00897b !important; }
711 |
712 | .teal-text.text-darken-1 {
713 | color: #00897b !important; }
714 |
715 | .teal.darken-2 {
716 | background-color: #00796b !important; }
717 |
718 | .teal-text.text-darken-2 {
719 | color: #00796b !important; }
720 |
721 | .teal.darken-3 {
722 | background-color: #00695c !important; }
723 |
724 | .teal-text.text-darken-3 {
725 | color: #00695c !important; }
726 |
727 | .teal.darken-4 {
728 | background-color: #004d40 !important; }
729 |
730 | .teal-text.text-darken-4 {
731 | color: #004d40 !important; }
732 |
733 | .teal.accent-1 {
734 | background-color: #a7ffeb !important; }
735 |
736 | .teal-text.text-accent-1 {
737 | color: #a7ffeb !important; }
738 |
739 | .teal.accent-2 {
740 | background-color: #64ffda !important; }
741 |
742 | .teal-text.text-accent-2 {
743 | color: #64ffda !important; }
744 |
745 | .teal.accent-3 {
746 | background-color: #1de9b6 !important; }
747 |
748 | .teal-text.text-accent-3 {
749 | color: #1de9b6 !important; }
750 |
751 | .teal.accent-4 {
752 | background-color: #00bfa5 !important; }
753 |
754 | .teal-text.text-accent-4 {
755 | color: #00bfa5 !important; }
756 |
757 | .green.lighten-5 {
758 | background-color: #E8F5E9 !important; }
759 |
760 | .green-text.text-lighten-5 {
761 | color: #E8F5E9 !important; }
762 |
763 | .green.lighten-4 {
764 | background-color: #C8E6C9 !important; }
765 |
766 | .green-text.text-lighten-4 {
767 | color: #C8E6C9 !important; }
768 |
769 | .green.lighten-3 {
770 | background-color: #A5D6A7 !important; }
771 |
772 | .green-text.text-lighten-3 {
773 | color: #A5D6A7 !important; }
774 |
775 | .green.lighten-2 {
776 | background-color: #81C784 !important; }
777 |
778 | .green-text.text-lighten-2 {
779 | color: #81C784 !important; }
780 |
781 | .green.lighten-1 {
782 | background-color: #66BB6A !important; }
783 |
784 | .green-text.text-lighten-1 {
785 | color: #66BB6A !important; }
786 |
787 | .green {
788 | background-color: #4CAF50 !important; }
789 |
790 | .green-text {
791 | color: #4CAF50 !important; }
792 |
793 | .green.darken-1 {
794 | background-color: #43A047 !important; }
795 |
796 | .green-text.text-darken-1 {
797 | color: #43A047 !important; }
798 |
799 | .green.darken-2 {
800 | background-color: #388E3C !important; }
801 |
802 | .green-text.text-darken-2 {
803 | color: #388E3C !important; }
804 |
805 | .green.darken-3 {
806 | background-color: #2E7D32 !important; }
807 |
808 | .green-text.text-darken-3 {
809 | color: #2E7D32 !important; }
810 |
811 | .green.darken-4 {
812 | background-color: #1B5E20 !important; }
813 |
814 | .green-text.text-darken-4 {
815 | color: #1B5E20 !important; }
816 |
817 | .green.accent-1 {
818 | background-color: #B9F6CA !important; }
819 |
820 | .green-text.text-accent-1 {
821 | color: #B9F6CA !important; }
822 |
823 | .green.accent-2 {
824 | background-color: #69F0AE !important; }
825 |
826 | .green-text.text-accent-2 {
827 | color: #69F0AE !important; }
828 |
829 | .green.accent-3 {
830 | background-color: #00E676 !important; }
831 |
832 | .green-text.text-accent-3 {
833 | color: #00E676 !important; }
834 |
835 | .green.accent-4 {
836 | background-color: #00C853 !important; }
837 |
838 | .green-text.text-accent-4 {
839 | color: #00C853 !important; }
840 |
841 | .light-green.lighten-5 {
842 | background-color: #f1f8e9 !important; }
843 |
844 | .light-green-text.text-lighten-5 {
845 | color: #f1f8e9 !important; }
846 |
847 | .light-green.lighten-4 {
848 | background-color: #dcedc8 !important; }
849 |
850 | .light-green-text.text-lighten-4 {
851 | color: #dcedc8 !important; }
852 |
853 | .light-green.lighten-3 {
854 | background-color: #c5e1a5 !important; }
855 |
856 | .light-green-text.text-lighten-3 {
857 | color: #c5e1a5 !important; }
858 |
859 | .light-green.lighten-2 {
860 | background-color: #aed581 !important; }
861 |
862 | .light-green-text.text-lighten-2 {
863 | color: #aed581 !important; }
864 |
865 | .light-green.lighten-1 {
866 | background-color: #9ccc65 !important; }
867 |
868 | .light-green-text.text-lighten-1 {
869 | color: #9ccc65 !important; }
870 |
871 | .light-green {
872 | background-color: #8bc34a !important; }
873 |
874 | .light-green-text {
875 | color: #8bc34a !important; }
876 |
877 | .light-green.darken-1 {
878 | background-color: #7cb342 !important; }
879 |
880 | .light-green-text.text-darken-1 {
881 | color: #7cb342 !important; }
882 |
883 | .light-green.darken-2 {
884 | background-color: #689f38 !important; }
885 |
886 | .light-green-text.text-darken-2 {
887 | color: #689f38 !important; }
888 |
889 | .light-green.darken-3 {
890 | background-color: #558b2f !important; }
891 |
892 | .light-green-text.text-darken-3 {
893 | color: #558b2f !important; }
894 |
895 | .light-green.darken-4 {
896 | background-color: #33691e !important; }
897 |
898 | .light-green-text.text-darken-4 {
899 | color: #33691e !important; }
900 |
901 | .light-green.accent-1 {
902 | background-color: #ccff90 !important; }
903 |
904 | .light-green-text.text-accent-1 {
905 | color: #ccff90 !important; }
906 |
907 | .light-green.accent-2 {
908 | background-color: #b2ff59 !important; }
909 |
910 | .light-green-text.text-accent-2 {
911 | color: #b2ff59 !important; }
912 |
913 | .light-green.accent-3 {
914 | background-color: #76ff03 !important; }
915 |
916 | .light-green-text.text-accent-3 {
917 | color: #76ff03 !important; }
918 |
919 | .light-green.accent-4 {
920 | background-color: #64dd17 !important; }
921 |
922 | .light-green-text.text-accent-4 {
923 | color: #64dd17 !important; }
924 |
925 | .lime.lighten-5 {
926 | background-color: #f9fbe7 !important; }
927 |
928 | .lime-text.text-lighten-5 {
929 | color: #f9fbe7 !important; }
930 |
931 | .lime.lighten-4 {
932 | background-color: #f0f4c3 !important; }
933 |
934 | .lime-text.text-lighten-4 {
935 | color: #f0f4c3 !important; }
936 |
937 | .lime.lighten-3 {
938 | background-color: #e6ee9c !important; }
939 |
940 | .lime-text.text-lighten-3 {
941 | color: #e6ee9c !important; }
942 |
943 | .lime.lighten-2 {
944 | background-color: #dce775 !important; }
945 |
946 | .lime-text.text-lighten-2 {
947 | color: #dce775 !important; }
948 |
949 | .lime.lighten-1 {
950 | background-color: #d4e157 !important; }
951 |
952 | .lime-text.text-lighten-1 {
953 | color: #d4e157 !important; }
954 |
955 | .lime {
956 | background-color: #cddc39 !important; }
957 |
958 | .lime-text {
959 | color: #cddc39 !important; }
960 |
961 | .lime.darken-1 {
962 | background-color: #c0ca33 !important; }
963 |
964 | .lime-text.text-darken-1 {
965 | color: #c0ca33 !important; }
966 |
967 | .lime.darken-2 {
968 | background-color: #afb42b !important; }
969 |
970 | .lime-text.text-darken-2 {
971 | color: #afb42b !important; }
972 |
973 | .lime.darken-3 {
974 | background-color: #9e9d24 !important; }
975 |
976 | .lime-text.text-darken-3 {
977 | color: #9e9d24 !important; }
978 |
979 | .lime.darken-4 {
980 | background-color: #827717 !important; }
981 |
982 | .lime-text.text-darken-4 {
983 | color: #827717 !important; }
984 |
985 | .lime.accent-1 {
986 | background-color: #f4ff81 !important; }
987 |
988 | .lime-text.text-accent-1 {
989 | color: #f4ff81 !important; }
990 |
991 | .lime.accent-2 {
992 | background-color: #eeff41 !important; }
993 |
994 | .lime-text.text-accent-2 {
995 | color: #eeff41 !important; }
996 |
997 | .lime.accent-3 {
998 | background-color: #c6ff00 !important; }
999 |
1000 | .lime-text.text-accent-3 {
1001 | color: #c6ff00 !important; }
1002 |
1003 | .lime.accent-4 {
1004 | background-color: #aeea00 !important; }
1005 |
1006 | .lime-text.text-accent-4 {
1007 | color: #aeea00 !important; }
1008 |
1009 | .yellow.lighten-5 {
1010 | background-color: #fffde7 !important; }
1011 |
1012 | .yellow-text.text-lighten-5 {
1013 | color: #fffde7 !important; }
1014 |
1015 | .yellow.lighten-4 {
1016 | background-color: #fff9c4 !important; }
1017 |
1018 | .yellow-text.text-lighten-4 {
1019 | color: #fff9c4 !important; }
1020 |
1021 | .yellow.lighten-3 {
1022 | background-color: #fff59d !important; }
1023 |
1024 | .yellow-text.text-lighten-3 {
1025 | color: #fff59d !important; }
1026 |
1027 | .yellow.lighten-2 {
1028 | background-color: #fff176 !important; }
1029 |
1030 | .yellow-text.text-lighten-2 {
1031 | color: #fff176 !important; }
1032 |
1033 | .yellow.lighten-1 {
1034 | background-color: #ffee58 !important; }
1035 |
1036 | .yellow-text.text-lighten-1 {
1037 | color: #ffee58 !important; }
1038 |
1039 | .yellow {
1040 | background-color: #ffeb3b !important; }
1041 |
1042 | .yellow-text {
1043 | color: #ffeb3b !important; }
1044 |
1045 | .yellow.darken-1 {
1046 | background-color: #fdd835 !important; }
1047 |
1048 | .yellow-text.text-darken-1 {
1049 | color: #fdd835 !important; }
1050 |
1051 | .yellow.darken-2 {
1052 | background-color: #fbc02d !important; }
1053 |
1054 | .yellow-text.text-darken-2 {
1055 | color: #fbc02d !important; }
1056 |
1057 | .yellow.darken-3 {
1058 | background-color: #f9a825 !important; }
1059 |
1060 | .yellow-text.text-darken-3 {
1061 | color: #f9a825 !important; }
1062 |
1063 | .yellow.darken-4 {
1064 | background-color: #f57f17 !important; }
1065 |
1066 | .yellow-text.text-darken-4 {
1067 | color: #f57f17 !important; }
1068 |
1069 | .yellow.accent-1 {
1070 | background-color: #ffff8d !important; }
1071 |
1072 | .yellow-text.text-accent-1 {
1073 | color: #ffff8d !important; }
1074 |
1075 | .yellow.accent-2 {
1076 | background-color: #ffff00 !important; }
1077 |
1078 | .yellow-text.text-accent-2 {
1079 | color: #ffff00 !important; }
1080 |
1081 | .yellow.accent-3 {
1082 | background-color: #ffea00 !important; }
1083 |
1084 | .yellow-text.text-accent-3 {
1085 | color: #ffea00 !important; }
1086 |
1087 | .yellow.accent-4 {
1088 | background-color: #ffd600 !important; }
1089 |
1090 | .yellow-text.text-accent-4 {
1091 | color: #ffd600 !important; }
1092 |
1093 | .amber.lighten-5 {
1094 | background-color: #fff8e1 !important; }
1095 |
1096 | .amber-text.text-lighten-5 {
1097 | color: #fff8e1 !important; }
1098 |
1099 | .amber.lighten-4 {
1100 | background-color: #ffecb3 !important; }
1101 |
1102 | .amber-text.text-lighten-4 {
1103 | color: #ffecb3 !important; }
1104 |
1105 | .amber.lighten-3 {
1106 | background-color: #ffe082 !important; }
1107 |
1108 | .amber-text.text-lighten-3 {
1109 | color: #ffe082 !important; }
1110 |
1111 | .amber.lighten-2 {
1112 | background-color: #ffd54f !important; }
1113 |
1114 | .amber-text.text-lighten-2 {
1115 | color: #ffd54f !important; }
1116 |
1117 | .amber.lighten-1 {
1118 | background-color: #ffca28 !important; }
1119 |
1120 | .amber-text.text-lighten-1 {
1121 | color: #ffca28 !important; }
1122 |
1123 | .amber {
1124 | background-color: #ffc107 !important; }
1125 |
1126 | .amber-text {
1127 | color: #ffc107 !important; }
1128 |
1129 | .amber.darken-1 {
1130 | background-color: #ffb300 !important; }
1131 |
1132 | .amber-text.text-darken-1 {
1133 | color: #ffb300 !important; }
1134 |
1135 | .amber.darken-2 {
1136 | background-color: #ffa000 !important; }
1137 |
1138 | .amber-text.text-darken-2 {
1139 | color: #ffa000 !important; }
1140 |
1141 | .amber.darken-3 {
1142 | background-color: #ff8f00 !important; }
1143 |
1144 | .amber-text.text-darken-3 {
1145 | color: #ff8f00 !important; }
1146 |
1147 | .amber.darken-4 {
1148 | background-color: #ff6f00 !important; }
1149 |
1150 | .amber-text.text-darken-4 {
1151 | color: #ff6f00 !important; }
1152 |
1153 | .amber.accent-1 {
1154 | background-color: #ffe57f !important; }
1155 |
1156 | .amber-text.text-accent-1 {
1157 | color: #ffe57f !important; }
1158 |
1159 | .amber.accent-2 {
1160 | background-color: #ffd740 !important; }
1161 |
1162 | .amber-text.text-accent-2 {
1163 | color: #ffd740 !important; }
1164 |
1165 | .amber.accent-3 {
1166 | background-color: #ffc400 !important; }
1167 |
1168 | .amber-text.text-accent-3 {
1169 | color: #ffc400 !important; }
1170 |
1171 | .amber.accent-4 {
1172 | background-color: #ffab00 !important; }
1173 |
1174 | .amber-text.text-accent-4 {
1175 | color: #ffab00 !important; }
1176 |
1177 | .orange.lighten-5 {
1178 | background-color: #fff3e0 !important; }
1179 |
1180 | .orange-text.text-lighten-5 {
1181 | color: #fff3e0 !important; }
1182 |
1183 | .orange.lighten-4 {
1184 | background-color: #ffe0b2 !important; }
1185 |
1186 | .orange-text.text-lighten-4 {
1187 | color: #ffe0b2 !important; }
1188 |
1189 | .orange.lighten-3 {
1190 | background-color: #ffcc80 !important; }
1191 |
1192 | .orange-text.text-lighten-3 {
1193 | color: #ffcc80 !important; }
1194 |
1195 | .orange.lighten-2 {
1196 | background-color: #ffb74d !important; }
1197 |
1198 | .orange-text.text-lighten-2 {
1199 | color: #ffb74d !important; }
1200 |
1201 | .orange.lighten-1 {
1202 | background-color: #ffa726 !important; }
1203 |
1204 | .orange-text.text-lighten-1 {
1205 | color: #ffa726 !important; }
1206 |
1207 | .orange {
1208 | background-color: #ff9800 !important; }
1209 |
1210 | .orange-text {
1211 | color: #ff9800 !important; }
1212 |
1213 | .orange.darken-1 {
1214 | background-color: #fb8c00 !important; }
1215 |
1216 | .orange-text.text-darken-1 {
1217 | color: #fb8c00 !important; }
1218 |
1219 | .orange.darken-2 {
1220 | background-color: #f57c00 !important; }
1221 |
1222 | .orange-text.text-darken-2 {
1223 | color: #f57c00 !important; }
1224 |
1225 | .orange.darken-3 {
1226 | background-color: #ef6c00 !important; }
1227 |
1228 | .orange-text.text-darken-3 {
1229 | color: #ef6c00 !important; }
1230 |
1231 | .orange.darken-4 {
1232 | background-color: #e65100 !important; }
1233 |
1234 | .orange-text.text-darken-4 {
1235 | color: #e65100 !important; }
1236 |
1237 | .orange.accent-1 {
1238 | background-color: #ffd180 !important; }
1239 |
1240 | .orange-text.text-accent-1 {
1241 | color: #ffd180 !important; }
1242 |
1243 | .orange.accent-2 {
1244 | background-color: #ffab40 !important; }
1245 |
1246 | .orange-text.text-accent-2 {
1247 | color: #ffab40 !important; }
1248 |
1249 | .orange.accent-3 {
1250 | background-color: #ff9100 !important; }
1251 |
1252 | .orange-text.text-accent-3 {
1253 | color: #ff9100 !important; }
1254 |
1255 | .orange.accent-4 {
1256 | background-color: #ff6d00 !important; }
1257 |
1258 | .orange-text.text-accent-4 {
1259 | color: #ff6d00 !important; }
1260 |
1261 | .deep-orange.lighten-5 {
1262 | background-color: #fbe9e7 !important; }
1263 |
1264 | .deep-orange-text.text-lighten-5 {
1265 | color: #fbe9e7 !important; }
1266 |
1267 | .deep-orange.lighten-4 {
1268 | background-color: #ffccbc !important; }
1269 |
1270 | .deep-orange-text.text-lighten-4 {
1271 | color: #ffccbc !important; }
1272 |
1273 | .deep-orange.lighten-3 {
1274 | background-color: #ffab91 !important; }
1275 |
1276 | .deep-orange-text.text-lighten-3 {
1277 | color: #ffab91 !important; }
1278 |
1279 | .deep-orange.lighten-2 {
1280 | background-color: #ff8a65 !important; }
1281 |
1282 | .deep-orange-text.text-lighten-2 {
1283 | color: #ff8a65 !important; }
1284 |
1285 | .deep-orange.lighten-1 {
1286 | background-color: #ff7043 !important; }
1287 |
1288 | .deep-orange-text.text-lighten-1 {
1289 | color: #ff7043 !important; }
1290 |
1291 | .deep-orange {
1292 | background-color: #ff5722 !important; }
1293 |
1294 | .deep-orange-text {
1295 | color: #ff5722 !important; }
1296 |
1297 | .deep-orange.darken-1 {
1298 | background-color: #f4511e !important; }
1299 |
1300 | .deep-orange-text.text-darken-1 {
1301 | color: #f4511e !important; }
1302 |
1303 | .deep-orange.darken-2 {
1304 | background-color: #e64a19 !important; }
1305 |
1306 | .deep-orange-text.text-darken-2 {
1307 | color: #e64a19 !important; }
1308 |
1309 | .deep-orange.darken-3 {
1310 | background-color: #d84315 !important; }
1311 |
1312 | .deep-orange-text.text-darken-3 {
1313 | color: #d84315 !important; }
1314 |
1315 | .deep-orange.darken-4 {
1316 | background-color: #bf360c !important; }
1317 |
1318 | .deep-orange-text.text-darken-4 {
1319 | color: #bf360c !important; }
1320 |
1321 | .deep-orange.accent-1 {
1322 | background-color: #ff9e80 !important; }
1323 |
1324 | .deep-orange-text.text-accent-1 {
1325 | color: #ff9e80 !important; }
1326 |
1327 | .deep-orange.accent-2 {
1328 | background-color: #ff6e40 !important; }
1329 |
1330 | .deep-orange-text.text-accent-2 {
1331 | color: #ff6e40 !important; }
1332 |
1333 | .deep-orange.accent-3 {
1334 | background-color: #ff3d00 !important; }
1335 |
1336 | .deep-orange-text.text-accent-3 {
1337 | color: #ff3d00 !important; }
1338 |
1339 | .deep-orange.accent-4 {
1340 | background-color: #dd2c00 !important; }
1341 |
1342 | .deep-orange-text.text-accent-4 {
1343 | color: #dd2c00 !important; }
1344 |
1345 | .brown.lighten-5 {
1346 | background-color: #efebe9 !important; }
1347 |
1348 | .brown-text.text-lighten-5 {
1349 | color: #efebe9 !important; }
1350 |
1351 | .brown.lighten-4 {
1352 | background-color: #d7ccc8 !important; }
1353 |
1354 | .brown-text.text-lighten-4 {
1355 | color: #d7ccc8 !important; }
1356 |
1357 | .brown.lighten-3 {
1358 | background-color: #bcaaa4 !important; }
1359 |
1360 | .brown-text.text-lighten-3 {
1361 | color: #bcaaa4 !important; }
1362 |
1363 | .brown.lighten-2 {
1364 | background-color: #a1887f !important; }
1365 |
1366 | .brown-text.text-lighten-2 {
1367 | color: #a1887f !important; }
1368 |
1369 | .brown.lighten-1 {
1370 | background-color: #8d6e63 !important; }
1371 |
1372 | .brown-text.text-lighten-1 {
1373 | color: #8d6e63 !important; }
1374 |
1375 | .brown {
1376 | background-color: #795548 !important; }
1377 |
1378 | .brown-text {
1379 | color: #795548 !important; }
1380 |
1381 | .brown.darken-1 {
1382 | background-color: #6d4c41 !important; }
1383 |
1384 | .brown-text.text-darken-1 {
1385 | color: #6d4c41 !important; }
1386 |
1387 | .brown.darken-2 {
1388 | background-color: #5d4037 !important; }
1389 |
1390 | .brown-text.text-darken-2 {
1391 | color: #5d4037 !important; }
1392 |
1393 | .brown.darken-3 {
1394 | background-color: #4e342e !important; }
1395 |
1396 | .brown-text.text-darken-3 {
1397 | color: #4e342e !important; }
1398 |
1399 | .brown.darken-4 {
1400 | background-color: #3e2723 !important; }
1401 |
1402 | .brown-text.text-darken-4 {
1403 | color: #3e2723 !important; }
1404 |
1405 | .blue-grey.lighten-5 {
1406 | background-color: #eceff1 !important; }
1407 |
1408 | .blue-grey-text.text-lighten-5 {
1409 | color: #eceff1 !important; }
1410 |
1411 | .blue-grey.lighten-4 {
1412 | background-color: #cfd8dc !important; }
1413 |
1414 | .blue-grey-text.text-lighten-4 {
1415 | color: #cfd8dc !important; }
1416 |
1417 | .blue-grey.lighten-3 {
1418 | background-color: #b0bec5 !important; }
1419 |
1420 | .blue-grey-text.text-lighten-3 {
1421 | color: #b0bec5 !important; }
1422 |
1423 | .blue-grey.lighten-2 {
1424 | background-color: #90a4ae !important; }
1425 |
1426 | .blue-grey-text.text-lighten-2 {
1427 | color: #90a4ae !important; }
1428 |
1429 | .blue-grey.lighten-1 {
1430 | background-color: #78909c !important; }
1431 |
1432 | .blue-grey-text.text-lighten-1 {
1433 | color: #78909c !important; }
1434 |
1435 | .blue-grey {
1436 | background-color: #607d8b !important; }
1437 |
1438 | .blue-grey-text {
1439 | color: #607d8b !important; }
1440 |
1441 | .blue-grey.darken-1 {
1442 | background-color: #546e7a !important; }
1443 |
1444 | .blue-grey-text.text-darken-1 {
1445 | color: #546e7a !important; }
1446 |
1447 | .blue-grey.darken-2 {
1448 | background-color: #455a64 !important; }
1449 |
1450 | .blue-grey-text.text-darken-2 {
1451 | color: #455a64 !important; }
1452 |
1453 | .blue-grey.darken-3 {
1454 | background-color: #37474f !important; }
1455 |
1456 | .blue-grey-text.text-darken-3 {
1457 | color: #37474f !important; }
1458 |
1459 | .blue-grey.darken-4 {
1460 | background-color: #263238 !important; }
1461 |
1462 | .blue-grey-text.text-darken-4 {
1463 | color: #263238 !important; }
1464 |
1465 | .grey.lighten-5 {
1466 | background-color: #fafafa !important; }
1467 |
1468 | .grey-text.text-lighten-5 {
1469 | color: #fafafa !important; }
1470 |
1471 | .grey.lighten-4 {
1472 | background-color: #f5f5f5 !important; }
1473 |
1474 | .grey-text.text-lighten-4 {
1475 | color: #f5f5f5 !important; }
1476 |
1477 | .grey.lighten-3 {
1478 | background-color: #eeeeee !important; }
1479 |
1480 | .grey-text.text-lighten-3 {
1481 | color: #eeeeee !important; }
1482 |
1483 | .grey.lighten-2 {
1484 | background-color: #e0e0e0 !important; }
1485 |
1486 | .grey-text.text-lighten-2 {
1487 | color: #e0e0e0 !important; }
1488 |
1489 | .grey.lighten-1 {
1490 | background-color: #bdbdbd !important; }
1491 |
1492 | .grey-text.text-lighten-1 {
1493 | color: #bdbdbd !important; }
1494 |
1495 | .grey {
1496 | background-color: #9e9e9e !important; }
1497 |
1498 | .grey-text {
1499 | color: #9e9e9e !important; }
1500 |
1501 | .grey.darken-1 {
1502 | background-color: #757575 !important; }
1503 |
1504 | .grey-text.text-darken-1 {
1505 | color: #757575 !important; }
1506 |
1507 | .grey.darken-2 {
1508 | background-color: #616161 !important; }
1509 |
1510 | .grey-text.text-darken-2 {
1511 | color: #616161 !important; }
1512 |
1513 | .grey.darken-3 {
1514 | background-color: #424242 !important; }
1515 |
1516 | .grey-text.text-darken-3 {
1517 | color: #424242 !important; }
1518 |
1519 | .grey.darken-4 {
1520 | background-color: #212121 !important; }
1521 |
1522 | .grey-text.text-darken-4 {
1523 | color: #212121 !important; }
1524 |
1525 | .shades.black {
1526 | background-color: #000000 !important; }
1527 |
1528 | .shades-text.text-black {
1529 | color: #000000 !important; }
1530 |
1531 | .shades.white {
1532 | background-color: #FFFFFF !important; }
1533 |
1534 | .shades-text.text-white {
1535 | color: #FFFFFF !important; }
1536 |
1537 | .shades.transparent {
1538 | background-color: transparent !important; }
1539 |
1540 | .shades-text.text-transparent {
1541 | color: transparent !important; }
1542 |
1543 | .black {
1544 | background-color: #000000 !important; }
1545 |
1546 | .black-text {
1547 | color: #000000 !important; }
1548 |
1549 | .white {
1550 | background-color: #FFFFFF !important; }
1551 |
1552 | .white-text {
1553 | color: #FFFFFF !important; }
1554 |
1555 | .transparent {
1556 | background-color: transparent !important; }
1557 |
1558 | .transparent-text {
1559 | color: transparent !important; }
--------------------------------------------------------------------------------