├── mdl-lightdm-demo.gif ├── font ├── roboto │ ├── Roboto-Bold.ttf │ ├── Roboto-Thin.ttf │ ├── Roboto-Bold.woff │ ├── Roboto-Bold.woff2 │ ├── Roboto-Light.ttf │ ├── Roboto-Light.woff │ ├── Roboto-Medium.ttf │ ├── Roboto-Thin.woff │ ├── Roboto-Thin.woff2 │ ├── Roboto-Light.woff2 │ ├── Roboto-Medium.woff │ ├── Roboto-Medium.woff2 │ ├── Roboto-Regular.ttf │ ├── Roboto-Regular.woff │ └── Roboto-Regular.woff2 ├── mdl-icons │ ├── MaterialIcons-Regular.eot │ ├── MaterialIcons-Regular.ttf │ ├── MaterialIcons-Regular.woff │ ├── MaterialIcons-Regular.woff2 │ ├── README.md │ └── codepoints └── material-design-icons │ ├── Material-Design-Icons.eot │ ├── Material-Design-Icons.ttf │ ├── Material-Design-Icons.woff │ ├── Material-Design-Icons.woff2 │ └── LICENSE.txt ├── index.theme ├── profile └── place-your-stuff-here ├── mdl ├── bower.json ├── package.json ├── styles.css ├── LICENSE └── material.min.js ├── css └── fonts.css ├── README.md ├── index.html ├── js ├── mock.js └── ldm-greeter.js └── style.css /mdl-lightdm-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/mdl-lightdm-demo.gif -------------------------------------------------------------------------------- /font/roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /font/roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /font/roboto/Roboto-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Bold.woff -------------------------------------------------------------------------------- /font/roboto/Roboto-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Bold.woff2 -------------------------------------------------------------------------------- /font/roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /font/roboto/Roboto-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Light.woff -------------------------------------------------------------------------------- /font/roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /font/roboto/Roboto-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Thin.woff -------------------------------------------------------------------------------- /font/roboto/Roboto-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Thin.woff2 -------------------------------------------------------------------------------- /font/roboto/Roboto-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Light.woff2 -------------------------------------------------------------------------------- /font/roboto/Roboto-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Medium.woff -------------------------------------------------------------------------------- /font/roboto/Roboto-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Medium.woff2 -------------------------------------------------------------------------------- /font/roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /font/roboto/Roboto-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Regular.woff -------------------------------------------------------------------------------- /font/roboto/Roboto-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/roboto/Roboto-Regular.woff2 -------------------------------------------------------------------------------- /font/mdl-icons/MaterialIcons-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/mdl-icons/MaterialIcons-Regular.eot -------------------------------------------------------------------------------- /font/mdl-icons/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/mdl-icons/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /font/mdl-icons/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/mdl-icons/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /font/mdl-icons/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/mdl-icons/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /font/material-design-icons/Material-Design-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/material-design-icons/Material-Design-Icons.eot -------------------------------------------------------------------------------- /font/material-design-icons/Material-Design-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/material-design-icons/Material-Design-Icons.ttf -------------------------------------------------------------------------------- /font/material-design-icons/Material-Design-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/material-design-icons/Material-Design-Icons.woff -------------------------------------------------------------------------------- /font/material-design-icons/Material-Design-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDDStudio/mdl-lightdm/master/font/material-design-icons/Material-Design-Icons.woff2 -------------------------------------------------------------------------------- /index.theme: -------------------------------------------------------------------------------- 1 | [theme] 2 | name=mdl-lightdm 3 | description=Animated Material Design Greeter for Lightdm Webkit Greeter 4 | engine=lightdm-webkit-greeter 5 | url=index.html 6 | session=pantheon 7 | -------------------------------------------------------------------------------- /profile/place-your-stuff-here: -------------------------------------------------------------------------------- 1 | Place the files you want to include in the greeter here. 2 | 3 | In case you don't want to change the code name your files like so: 4 | 5 | profile_bg.jpg -> The background image 6 | profile_image.jpg -> The profile image shown above the username 7 | -------------------------------------------------------------------------------- /font/mdl-icons/README.md: -------------------------------------------------------------------------------- 1 | The recommended way to use the Material Icons font is hosted by Google Fonts, 2 | available here: 3 | 4 | ``` 5 | 7 | ``` 8 | 9 | Read more in our full usage guide: 10 | http://google.github.io/material-design-icons/#icon-font-for-the-web 11 | 12 | -------------------------------------------------------------------------------- /mdl/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "material-design-lite", 3 | "version": "1.0.5", 4 | "homepage": "https://github.com/google/material-design-lite", 5 | "authors": [ 6 | "Material Design Lite team" 7 | ], 8 | "description": "Material Design Components in CSS, JS and HTML", 9 | "main": [ 10 | "material.min.css", 11 | "material.min.js" 12 | ], 13 | "keywords": [ 14 | "material", 15 | "design", 16 | "styleguide", 17 | "style", 18 | "guide" 19 | ], 20 | "license": "Apache-2", 21 | "ignore": [ 22 | "**/.*", 23 | "node_modules", 24 | "bower_components", 25 | "./lib/.bower_components", 26 | "test", 27 | "tests" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Material Icons'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: url("../font/mdl-icons/MaterialIcons-Regular.eot"); /* For IE6-8 */ 6 | src: local('Material Icons'), 7 | local('MaterialIcons-Regular'), 8 | url("../font/mdl-icons/MaterialIcons-Regular.woff2") format('woff2'), 9 | url("../font/mdl-icons/MaterialIcons-Regular.woff") format('woff'), 10 | url("../font/mdl-icons/MaterialIcons-Regular.ttf") format('truetype'); 11 | } 12 | 13 | .material-icons { 14 | font-family: 'Material Icons'; 15 | font-weight: normal; 16 | font-style: normal; 17 | font-size: 24px; /* Preferred icon size */ 18 | display: inline-block; 19 | width: 1em; 20 | height: 1em; 21 | line-height: 1; 22 | text-transform: none; 23 | letter-spacing: normal; 24 | word-wrap: normal; 25 | white-space: nowrap; 26 | direction: ltr; 27 | 28 | /* Support for all WebKit browsers. */ 29 | -webkit-font-smoothing: antialiased; 30 | /* Support for Safari and Chrome. */ 31 | text-rendering: optimizeLegibility; 32 | 33 | /* Support for Firefox. */ 34 | -moz-osx-font-smoothing: grayscale; 35 | 36 | /* Support for IE. */ 37 | font-feature-settings: 'liga'; 38 | } 39 | -------------------------------------------------------------------------------- /mdl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "material-design-lite", 3 | "version": "1.0.5", 4 | "description": "Material Design Components in CSS, JS and HTML", 5 | "private": true, 6 | "license": "Apache-2.0", 7 | "author": "Google", 8 | "repository": "google/material-design-lite", 9 | "devDependencies": { 10 | "acorn": "^2.2.0", 11 | "apache-server-configs": "^2.7.1", 12 | "browser-sync": "^2.2.3", 13 | "chai": "^2.0.0", 14 | "chai-jquery": "^2.0.0", 15 | "del": "^1.1.1", 16 | "drool": "^0.2.1", 17 | "escodegen": "^1.6.1", 18 | "gulp": "^3.8.11", 19 | "gulp-autoprefixer": "^2.0.0", 20 | "gulp-cache": "^0.2.6", 21 | "gulp-changed": "^1.0.0", 22 | "gulp-concat": "^2.4.1", 23 | "gulp-connect": "^2.2.0", 24 | "gulp-css-inline-images": "^0.1.1", 25 | "gulp-csso": "^1.0.0", 26 | "gulp-file": "^0.2.0", 27 | "gulp-filter": "^2.0.2", 28 | "gulp-flatten": "0.0.4", 29 | "gulp-front-matter": "^1.2.2", 30 | "gulp-gh-pages": "^0.5.0", 31 | "gulp-header": "^1.2.2", 32 | "gulp-if": "^1.2.1", 33 | "gulp-iife": "0.0.7", 34 | "gulp-imagemin": "^2.2.1", 35 | "gulp-jscs": "^2.0.0", 36 | "gulp-jshint": "^1.6.3", 37 | "gulp-load-plugins": "^0.10.0", 38 | "gulp-markdown": "^1.0.0", 39 | "gulp-marked": "^1.0.0", 40 | "gulp-minify-html": "^1.0.0", 41 | "gulp-mocha-phantomjs": "^0.6.1", 42 | "gulp-open": "^0.3.2", 43 | "gulp-rename": "^1.2.0", 44 | "gulp-replace": "^0.5.3", 45 | "gulp-sass": "2.0.*", 46 | "gulp-shell": "^0.4.2", 47 | "gulp-size": "^1.0.0", 48 | "gulp-sourcemaps": "^1.3.0", 49 | "gulp-subtree": "^0.1.0", 50 | "gulp-tap": "^0.1.3", 51 | "gulp-uglify": "^1.0.1", 52 | "gulp-useref": "^1.0.1", 53 | "gulp-util": "^3.0.4", 54 | "gulp-zip": "^3.0.2", 55 | "humanize": "0.0.9", 56 | "jquery": "^2.1.3", 57 | "jshint-stylish": "^1.0.0", 58 | "merge-stream": "^0.1.7", 59 | "mocha": "^2.1.0", 60 | "opn": "^1.0.0", 61 | "phantomjs": "^1.9.17", 62 | "prismjs": "0.0.1", 63 | "require-dir": "^0.3.0", 64 | "run-sequence": "^1.0.2", 65 | "swig": "^1.4.2", 66 | "through2": "^2.0.0", 67 | "vinyl-paths": "^1.0.0" 68 | }, 69 | "engines": { 70 | "node": ">=0.10.0" 71 | }, 72 | "scripts": { 73 | "test": "gulp && git status | grep 'working directory clean' >/dev/null || (echo 'Please commit all changes generated by building'; exit 1)" 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #mdl-lightdm 2 | 3 | A Material Design inspired Greeter for LightDM Webkit, based on the work of [Victory Design's entry to the Remix Challenge](http://codepen.io/anon/pen/bdxbJM) 4 | 5 | ##Showcase 6 | ![Showcase](https://raw.githubusercontent.com/pddstudio/mdl-lightdm/master/mdl-lightdm-demo.gif) 7 | 8 | ##Requirements 9 | * lightdm 10 | * [lightdm-webkit2-greeter](https://github.com/Antergos/lightdm-webkit2-greeter) by Antergos 11 | 12 | ##Current Limitation! 13 | * Currently only one user and one session are supported. 14 | **Note:** *Feel free to submit a pull request if you have added this feature in your fork!* 15 | 16 | ##Instructions 17 | *Be sure to make a backup of the files you modify, you'll need them in case you messed something up or want to remove the theme! 18 | **Important: The configuration and installing instruction down below assumes that you've already installed and configured lightdm-webkit2-greeter!*** 19 | 20 | ### Configuring and Installing 21 | * Download the theme as zip or clone it via git: 22 | `git clone https://github.com/pddstudio/mdl-lightdm.git` 23 | 24 | * Edit the file `./js/ldm-greeter.js` and replace the following part on top of the file: 25 | 26 | ```javascript 27 | 28 | //username to login with (e.g "pddstudio") 29 | var default_account_name = "your_user_name"; 30 | //the session to launch after the login (e.g "Pantheon", "gnome", "Unity", ...) 31 | var default_session_name = "your_session"; 32 | 33 | ``` 34 | 35 | * Move the directory to `/usr/share/lightdm-webkit/themes/` 36 | 37 | * Edit your lightdm-webkit config in `/etc/lightdm/lightdm-webkit2-greeter.conf` 38 | and set `webkit-theme` to `mdl-lightdm` 39 | 40 | **That's it.** After rebooting your workstation (or restarting the lightdm service) you'll have a new materialized greeter! 41 | 42 | ### Removing 43 | 44 | * **Remove mdl-lightdm theme only:** 45 | To remove only this theme all you have to do is changing the `webkit-theme` property to an other theme and deleting the `mdl-lightdm` folder in `/usr/share/lightdm-webkit/themes/` (requires reboot / lightdm service restart) 46 | * **Remove lightdm-webkit to be used as default:** 47 | To remove the lightdm-webkit to be used as default replace your current `etc/lightdm/lightdm.conf` with your backup-config (requires reboot / lightdm service restart) 48 | 49 | ##Customizing 50 | ###Pictures 51 | To change the images in the greeter **(which is recommended as because due to license reasons the theme comes without any background/profile images)** simply place your images in the `./profile/` subfolder and name them as below: 52 | 1.) Rename the background picture to `profile_bg.jpg` 53 | 2.) Rename the profile/avatar picture to `profile_image.jpg` 54 | 55 | *Note:* In case you don't like the names you can change this of course programmatically, too! 56 | The recommend size for the profile image is about 350x350 px. 57 | 58 | ###Colors 59 | You can change the colors by searching the values below in the `./style.css` file in the root of the directory. 60 | `ripple main bg color:` `#607D8B` 61 | `card bg:` `#FFB300` 62 | `intro fab color:` `#2979FF` 63 | `intro fab color after transition:` `#E0E0E0` 64 | 65 | ##Misc. Information 66 | * In case you don't see any graphics or the theme isn't looking as it actually should, make sure you've set the right permissions to the files 67 | * If you want to contribute to this little goodie, feel free to submit a pull request, I'd appreciate any help for new features or bugfixes 68 | 69 | ##Used Ressources 70 | * [Pen by Victory Design](http://codepen.io/anon/pen/bdxbJM) 71 | * [Material Design Lite by Google](http://github.com/google/material-design-lite) 72 | * [JS-Snippets from Antergos lightdm-webkit-theme](https://github.com/Antergos/lightdm-webkit-theme-antergos) 73 | 74 | ##Contact 75 | * Patrick J 76 | * [Patrick J Google+](https://plus.google.com/+PatrickJung42) 77 | # 78 | * VictoryDesign: [Homepage](http://victory-design.ru/) -------------------------------------------------------------------------------- /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 | 26 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
44 | 45 |
46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 |
54 |
55 |

USERNAME

56 | 59 |
    60 |
61 |
62 |
63 | 64 | 65 |
66 | 69 | 70 |
    71 |
  • Suspend
  • 72 |
  • Restart
  • 73 |
  • Shutdown
  • 74 |
75 |
76 | 77 |
78 | 79 | 80 |
81 |
82 | 83 | 84 | Wrong Password! 85 |
86 |
87 | 88 |
    89 |
90 |
91 |
92 | 93 | 94 | 97 | 98 | 101 | 102 |
103 | 104 |
105 | 106 | 107 | -------------------------------------------------------------------------------- /js/mock.js: -------------------------------------------------------------------------------- 1 | // mock lighdm for testing 2 | if (typeof lightdm == 'undefined') { 3 | lightdm= {}; 4 | lightdm.hostname="test-host"; 5 | lightdm.languages= [{code: "en_US", name: "English(US)", territory: "USA"}, {code: "en_UK", name: "English(UK)", territory: "UK"}]; 6 | lightdm.default_language= lightdm.languages[0]; 7 | lightdm.layouts= [{name: "test", short_description: "test description", short_description:"really long epic description"}]; 8 | lightdm.default_layout= lightdm.layouts[0]; 9 | lightdm.layout= lightdm.layouts[0]; 10 | lightdm.sessions=[{key: "gnome", name: "gnome", comment: "no comment"}, {key: "cinnamon", name: "cinnamon", comment: "no comment"},{key: "openbox", name: "openbox", comment: "no comment"}, {key: "key4", name: "kde", comment: "no comment"}]; 11 | 12 | lightdm.default_session=lightdm.sessions[0]['name']; 13 | lightdm.authentication_user= null; 14 | lightdm.is_authenticated= false; 15 | lightdm.can_suspend= true; 16 | lightdm.can_hibernate= true; 17 | lightdm.can_restart= true; 18 | lightdm.can_shutdown= true; 19 | 20 | lightdm.users = [ 21 | { name: "clarkk", real_name: "Superman", display_name: "Clark Kent", image: "", language: "en_US", layout: null, session: "gnome", logged_in: false }, 22 | { name: "brucew", real_name: "Batman", display_name: "Bruce Wayne", image: "", language: "en_US", layout: null, session: "cinnamon", logged_in: false}, 23 | { name: "peterp", real_name: "Spiderman", display_name: "Peter Parker", image: "", language: "en_US", layout: null, session: "gnome", logged_in: true}, 24 | { name: "clarkk2", real_name: "Superman", display_name: "Clark Kent", image: "", language: "en_US", layout: null, session: "gnome", logged_in: false }, 25 | { name: "brucew2", real_name: "Batman", display_name: "Bruce Wayne", image: "", language: "en_US", layout: null, session: "cinnamon", logged_in: false}, 26 | { name: "peterp2", real_name: "Spiderman", display_name: "Peter Parker", image: "", language: "en_US", layout: null, session: "gnome", logged_in: true} 27 | ]; 28 | 29 | lightdm.num_users= lightdm.users.length; 30 | lightdm.timed_login_delay= 0; //set to a number higher than 0 for timed login simulation 31 | lightdm.timed_login_user= lightdm.timed_login_delay > 0 ? lightdm.users[0] : null; 32 | 33 | lightdm.get_string_property= function() {}; 34 | lightdm.get_integer_property= function() {}; 35 | lightdm.get_boolean_property= function() {}; 36 | lightdm.cancel_timed_login= function() { 37 | _lightdm_mock_check_argument_length(arguments, 0); 38 | lightdm._timed_login_cancelled= true; 39 | }; 40 | 41 | lightdm.provide_secret= function(secret) { 42 | if (typeof lightdm._username == 'undefined' || !lightdm._username) { 43 | throw "must call start_authentication first" 44 | } 45 | _lightdm_mock_check_argument_length(arguments, 1); 46 | var user= _lightdm_mock_get_user(lightdm.username); 47 | 48 | if (!user && secret == lightdm._username) { 49 | lightdm.is_authenticated= true; 50 | lightdm.authentication_user= user; 51 | } else { 52 | lightdm.is_authenticated= false; 53 | lightdm.authentication_user= null; 54 | lightdm._username= null; 55 | } 56 | authentication_complete(); 57 | }; 58 | 59 | lightdm.start_authentication= function(username) { 60 | _lightdm_mock_check_argument_length(arguments, 1); 61 | if (lightdm._username) { 62 | throw "Already authenticating!"; 63 | } 64 | var user= _lightdm_mock_get_user(username); 65 | if (!user) { 66 | show_error(username + " is an invalid user"); 67 | } 68 | show_prompt("Password: "); 69 | lightdm._username= username; 70 | }; 71 | 72 | lightdm.cancel_authentication= function() { 73 | _lightdm_mock_check_argument_length(arguments, 0); 74 | if (!lightdm._username) { 75 | console.log("we are not authenticating"); 76 | } 77 | lightdm._username= null; 78 | }; 79 | 80 | lightdm.suspend= function() { 81 | alert("System Suspended. Bye Bye"); 82 | document.location.reload(true); 83 | }; 84 | 85 | lightdm.hibernate= function() { 86 | alert("System Hibernated. Bye Bye"); 87 | document.location.reload(true); 88 | }; 89 | 90 | lightdm.restart= function() { 91 | alert("System restart. Bye Bye"); 92 | document.location.reload(true); 93 | }; 94 | 95 | lightdm.shutdown= function() { 96 | alert("System Shutdown. Bye Bye"); 97 | document.location.reload(true); 98 | }; 99 | 100 | lightdm.login= function(user, session) { 101 | _lightdm_mock_check_argument_length(arguments, 2); 102 | if (!lightdm.is_authenticated) { 103 | throw "The system is not authenticated"; 104 | } 105 | if (user !== lightdm.authentication_user) { 106 | throw "this user is not authenticated"; 107 | } 108 | alert("logged in successfully!!"); 109 | document.location.reload(true); 110 | }; 111 | 112 | if (lightdm.timed_login_delay > 0) { 113 | setTimeout(function() { if (!lightdm._timed_login_cancelled()) timed_login();}, lightdm.timed_login_delay); 114 | } 115 | } 116 | 117 | function _lightdm_mock_check_argument_length(args, length) { 118 | if (args.length != length) { 119 | throw "incorrect number of arguments in function call"; 120 | } 121 | } 122 | 123 | function _lightdm_mock_get_user(username) { 124 | var user= null; 125 | for (var i= 0; i < lightdm.users.length; ++i) { 126 | if (lightdm.users[i].name == username) { 127 | user= lightdm.users[i]; 128 | break; 129 | } 130 | } 131 | return user; 132 | } -------------------------------------------------------------------------------- /mdl/styles.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 Google Inc. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | html, body { 18 | font-family: 'Roboto', 'Helvetica', sans-serif; 19 | margin: 0; 20 | padding: 0; 21 | } 22 | .mdl-demo .mdl-layout__header-row { 23 | padding-left: 40px; 24 | } 25 | .mdl-demo .mdl-layout.is-small-screen .mdl-layout__header-row h3 { 26 | font-size: inherit; 27 | } 28 | .mdl-demo .mdl-layout__tab-bar-button { 29 | display: none; 30 | } 31 | .mdl-demo .mdl-layout.is-small-screen .mdl-layout__tab-bar .mdl-button { 32 | display: none; 33 | } 34 | .mdl-demo .mdl-layout:not(.is-small-screen) .mdl-layout__tab-bar, 35 | .mdl-demo .mdl-layout:not(.is-small-screen) .mdl-layout__tab-bar-container { 36 | overflow: visible; 37 | } 38 | .mdl-demo .mdl-layout__tab-bar-container { 39 | height: 64px; 40 | } 41 | .mdl-demo .mdl-layout__tab-bar { 42 | padding: 0; 43 | padding-left: 16px; 44 | box-sizing: border-box; 45 | height: 100%; 46 | width: 100%; 47 | } 48 | .mdl-demo .mdl-layout__tab-bar .mdl-layout__tab { 49 | height: 64px; 50 | line-height: 64px; 51 | } 52 | .mdl-demo .mdl-layout__tab-bar .mdl-layout__tab.is-active::after { 53 | background-color: white; 54 | height: 4px; 55 | } 56 | .mdl-demo main > .mdl-layout__tab-panel { 57 | padding: 8px; 58 | padding-top: 48px; 59 | } 60 | .mdl-demo .mdl-card { 61 | height: auto; 62 | display: -webkit-box; 63 | display: -webkit-flex; 64 | display: -ms-flexbox; 65 | display: flex; 66 | -webkit-box-orient: vertical; 67 | -webkit-box-direction: normal; 68 | -webkit-flex-direction: column; 69 | -ms-flex-direction: column; 70 | flex-direction: column; 71 | } 72 | .mdl-demo .mdl-card > * { 73 | height: auto; 74 | } 75 | .mdl-demo .mdl-card .mdl-card__supporting-text { 76 | margin: 40px; 77 | -webkit-box-flex: 1; 78 | -webkit-flex-grow: 1; 79 | -ms-flex-positive: 1; 80 | flex-grow: 1; 81 | padding: 0; 82 | color: inherit; 83 | width: calc(100% - 80px); 84 | } 85 | .mdl-demo.mdl-demo .mdl-card__supporting-text h4 { 86 | margin-top: 0; 87 | margin-bottom: 20px; 88 | } 89 | .mdl-demo .mdl-card__actions { 90 | margin: 0; 91 | padding: 4px 40px; 92 | color: inherit; 93 | } 94 | .mdl-demo .mdl-card__actions a { 95 | color: #00BCD4; 96 | margin: 0; 97 | } 98 | .mdl-demo .mdl-card__actions a:hover, 99 | .mdl-demo .mdl-card__actions a:active { 100 | color: inherit; 101 | background-color: transparent; 102 | } 103 | .mdl-demo .mdl-card__supporting-text + .mdl-card__actions { 104 | border-top: 1px solid rgba(0, 0, 0, 0.12); 105 | } 106 | .mdl-demo #add { 107 | position: absolute; 108 | right: 40px; 109 | top: 36px; 110 | z-index: 999; 111 | } 112 | 113 | .mdl-demo .mdl-layout__content section:not(:last-of-type) { 114 | position: relative; 115 | margin-bottom: 48px; 116 | } 117 | .mdl-demo section.section--center { 118 | max-width: 860px; 119 | } 120 | .mdl-demo #features section.section--center { 121 | max-width: 620px; 122 | } 123 | .mdl-demo section > header{ 124 | display: -webkit-box; 125 | display: -webkit-flex; 126 | display: -ms-flexbox; 127 | display: flex; 128 | -webkit-box-align: center; 129 | -webkit-align-items: center; 130 | -ms-flex-align: center; 131 | align-items: center; 132 | -webkit-box-pack: center; 133 | -webkit-justify-content: center; 134 | -ms-flex-pack: center; 135 | justify-content: center; 136 | } 137 | .mdl-demo section > .section__play-btn { 138 | min-height: 200px; 139 | } 140 | .mdl-demo section > header > .material-icons { 141 | font-size: 3rem; 142 | } 143 | .mdl-demo section > button { 144 | position: absolute; 145 | z-index: 99; 146 | top: 8px; 147 | right: 8px; 148 | } 149 | .mdl-demo section .section__circle { 150 | display: -webkit-box; 151 | display: -webkit-flex; 152 | display: -ms-flexbox; 153 | display: flex; 154 | -webkit-box-align: center; 155 | -webkit-align-items: center; 156 | -ms-flex-align: center; 157 | align-items: center; 158 | -webkit-box-pack: start; 159 | -webkit-justify-content: flex-start; 160 | -ms-flex-pack: start; 161 | justify-content: flex-start; 162 | -webkit-box-flex: 0; 163 | -webkit-flex-grow: 0; 164 | -ms-flex-positive: 0; 165 | flex-grow: 0; 166 | -webkit-flex-shrink: 1; 167 | -ms-flex-negative: 1; 168 | flex-shrink: 1; 169 | } 170 | .mdl-demo section .section__text { 171 | -webkit-box-flex: 1; 172 | -webkit-flex-grow: 1; 173 | -ms-flex-positive: 1; 174 | flex-grow: 1; 175 | -webkit-flex-shrink: 0; 176 | -ms-flex-negative: 0; 177 | flex-shrink: 0; 178 | padding-top: 8px; 179 | } 180 | .mdl-demo section .section__text h5 { 181 | font-size: inherit; 182 | margin: 0; 183 | margin-bottom: 0.5em; 184 | } 185 | .mdl-demo section .section__text a { 186 | text-decoration: none; 187 | } 188 | .mdl-demo section .section__circle-container > .section__circle-container__circle { 189 | width: 64px; 190 | height: 64px; 191 | border-radius: 32px; 192 | margin: 8px 0; 193 | } 194 | .mdl-demo section.section--footer .section__circle--big { 195 | width: 100px; 196 | height: 100px; 197 | border-radius: 50px; 198 | margin: 8px 32px; 199 | } 200 | .mdl-demo .is-small-screen section.section--footer .section__circle--big { 201 | width: 50px; 202 | height: 50px; 203 | border-radius: 25px; 204 | margin: 8px 16px; 205 | } 206 | .mdl-demo section.section--footer { 207 | padding: 64px 0; 208 | margin: 0 -8px -8px -8px; 209 | } 210 | .mdl-demo section.section--center .section__text:not(:last-child) { 211 | border-bottom: 1px solid rgba(0,0,0,.13); 212 | } 213 | .mdl-demo .mdl-card .mdl-card__supporting-text > h3:first-child { 214 | margin-bottom: 24px; 215 | } 216 | .mdl-demo .mdl-layout__tab-panel:not(#overview) { 217 | background-color: white; 218 | } 219 | .mdl-demo #features section { 220 | margin-bottom: 72px; 221 | } 222 | .mdl-demo #features h4, #features h5 { 223 | margin-bottom: 16px; 224 | } 225 | .mdl-demo .toc { 226 | border-left: 4px solid #C1EEF4; 227 | margin: 24px; 228 | padding: 0; 229 | padding-left: 8px; 230 | display: -webkit-box; 231 | display: -webkit-flex; 232 | display: -ms-flexbox; 233 | display: flex; 234 | -webkit-box-orient: vertical; 235 | -webkit-box-direction: normal; 236 | -webkit-flex-direction: column; 237 | -ms-flex-direction: column; 238 | flex-direction: column; 239 | } 240 | .mdl-demo .toc h4 { 241 | font-size: 0.9rem; 242 | margin-top: 0; 243 | } 244 | .mdl-demo .toc a { 245 | color: #4DD0E1; 246 | text-decoration: none; 247 | font-size: 16px; 248 | line-height: 28px; 249 | display: block; 250 | } 251 | .mdl-demo .mdl-menu__container { 252 | z-index: 99; 253 | } 254 | -------------------------------------------------------------------------------- /js/ldm-greeter.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * 4 | * 5 | * 6 | * 7 | */ 8 | 9 | //set DEBUG = true to display log messages in the greeter 10 | var DEBUG = false, 11 | selectedUser = null, 12 | authPending = null, 13 | users_shown = true, 14 | userList; 15 | 16 | //for providing defaults 17 | var defaultSession = null; 18 | var defaultAccount = null; 19 | var USE_DEFAULTS = false; 20 | 21 | //username to login with 22 | var default_account_name = "your_user_name"; 23 | //the session to launch after the login 24 | var default_session_name = "your_session"; 25 | 26 | 27 | /** 28 | * for logging 29 | */ 30 | 31 | function log(text) { 32 | if(DEBUG) { 33 | $('#logArea').append(text); 34 | $('#logArea').append('
'); 35 | } 36 | } 37 | 38 | $(document).ready(function () { 39 | 40 | function fetchUserList() { 41 | userList = $('#user-list'); 42 | for(var i in lightdm.users) { 43 | var user = lightdm.users[i]; 44 | var lastSession = localStorage.getItem(user.name); 45 | if(lastSession == null && lastSession == undefined) { 46 | localStorage.setItem(user.name, lightdm.default_session); 47 | lastSession = localStorage.getItem(user.name); 48 | } 49 | log('Last Session (' + user.name + '): ' + lastSession); 50 | var userItem = '
  • ' + user.display_name + '
  • '; 51 | $(userList).append(userItem); 52 | } 53 | } 54 | 55 | function fetchSessionList() { 56 | var sessionMenu = $('#sessions'); 57 | for (var i in lightdm.sessions) { 58 | var session = lightdm.sessions[i]; 59 | var className = session.name.replace(/ /g, ''); 60 | var item = '\n
  • ' + session.name + '
  • '; 61 | $(sessionMenu).append(item); 62 | } 63 | } 64 | 65 | function loadDefaults() { 66 | defaultAccount = getUserObj(default_account_name); 67 | defaultSession = getSessionObj(default_session_name); 68 | if( defaultSession !== null && defaultAccount !== null ) { 69 | log("loaded default account: " + defaultAccount.name + " and default session: " + defaultSession.name); 70 | USE_DEFAULTS = true; 71 | } 72 | if (defaultSession == null) { 73 | log("default session is null!"); 74 | } 75 | if(defaultAccount == null) { 76 | log("default account is null!"); 77 | } 78 | 79 | } 80 | 81 | $(window).load(function() { 82 | 83 | /** 84 | * Loading UI informations 85 | */ 86 | 87 | get_hostname(); 88 | 89 | fetchUserList(); 90 | fetchSessionList(); 91 | loadDefaults(); 92 | printDebugInfo(); 93 | 94 | //if possible - start authentication with default session 95 | if(USE_DEFAULTS) { 96 | startDefaultAuthentication(); 97 | } 98 | 99 | // submit the password when enter is pressed 100 | $(document).keydown(function (e) { 101 | checkKey(e); 102 | }); 103 | 104 | $('#loading_button_area').hide(); 105 | $('#wrongpass').hide(); 106 | $('#pass').focus(); 107 | 108 | }); 109 | 110 | function get_hostname() { 111 | var hostname = lightdm.hostname; 112 | log("hostname: " + hostname); 113 | //in case the name should be visible 114 | //var hostname_span = document.getElementById('FIELD_ID'); 115 | //$(hostname_span).append(hostname); 116 | } 117 | 118 | function checkKey(event) { 119 | var action; 120 | if(event.which == 13) { 121 | action = authPending ? submitPassword() : 0; 122 | log(action); 123 | } 124 | } 125 | 126 | window.handleAction = function (id) { 127 | log("handleAction(" + id + ")"); 128 | eval("lightdm." + id + "()"); 129 | }; 130 | 131 | function getUserObj(username) { 132 | var user = null; 133 | for (var i = 0; i < lightdm.users.length; ++i) { 134 | if(lightdm.users[i].name == username) { 135 | user = lightdm.users[i]; 136 | break; 137 | } 138 | } 139 | return user; 140 | } 141 | 142 | function getSessionObj(sessionname) { 143 | var session = null; 144 | for(var i = 0; i < lightdm.sessions.length; ++i) { 145 | if(lightdm.sessions[i].name == sessionname) { 146 | session = lightdm.sessions[i]; 147 | break; 148 | } 149 | } 150 | return session; 151 | } 152 | 153 | function printDebugInfo() { 154 | log("-- debug info --"); 155 | log("total users found: " + lightdm.users.length); 156 | log("total sessions found: " + lightdm.sessions.length); 157 | //print the user names 158 | for(var i = 0; i < lightdm.users.length; i++) { 159 | var usr = lightdm.users[i]; 160 | log("username found: " + usr.name); 161 | } 162 | for(var y = 0; y < lightdm.sessions.length; y++) { 163 | var sn = lightdm.sessions[y]; 164 | log("session found: " + sn.name); 165 | } 166 | log("-- end debug info --"); 167 | } 168 | 169 | function startDefaultAuthentication() { 170 | log("start default authentication for: " + defaultAccount.name); 171 | var userNameLabel = document.getElementById("user_current"); 172 | userNameLabel.innerHTML = defaultAccount.display_name; 173 | $('#session-area').hide(); 174 | $('#switch_user').hide(); 175 | authPending = true; 176 | lightdm.start_authentication(defaultAccount.name); 177 | } 178 | 179 | window.startAuthentication = function (userId) { 180 | log("startAuthentication(" + userId + ")"); 181 | 182 | var sessionButton = $('#session-list-btn'); 183 | var userLabel = $('#user-current'); 184 | 185 | if(selectedUser !== null) { 186 | lightdm.cancel_authentication(); 187 | localStorage.setItem('selUser', null); 188 | log("authentication cancelled for " + selectedUser); 189 | } 190 | 191 | localStorage.setItem('selUser', userId); 192 | log(userList); 193 | var usrSession = localStorage.getItem(userId); 194 | log("usrSession: " + usrSession); 195 | var usrSessionEl = "[data-session-id=" + usrSession + "]"; 196 | var usrSessionName = $(usrSessionEl).html(); 197 | $(userLabel).html(usrSessionName); 198 | $(sessionButton).attr('data-session-id', usrSession); 199 | authPending = true; 200 | lightdm.start_authentication(userId); 201 | }; 202 | 203 | window.cancelAuthentication = function () { 204 | log("authentication cancelled for " + selectedUser); 205 | lightdm.cancel_authentication(); 206 | selectedUser = null; 207 | authPending = false; 208 | return true; 209 | }; 210 | 211 | window.submitPassword = function () { 212 | $('#login_button_area').hide(); 213 | $('#loading_button_area').show(); 214 | log("provide_secret -> called! value: " + $('#pass').val()); 215 | if(USE_DEFAULTS) log("-> called for default authentication!"); 216 | lightdm.provide_secret($('#pass').val()); 217 | //todo: maybe hide password field and show progress circle 218 | log("provide_secret -> done!"); 219 | }; 220 | 221 | window.sessionToggle = function(el) { 222 | var selectedText = $(el).text(); 223 | var selectedID = $(el).attr('data-session-id'); 224 | var selUser = localStorage.getItem('selUser'); 225 | $('#session-list-btn').attr('data-session-id', selectedID); 226 | $('#session-list-btn').html(selectedText); 227 | localStorage.setItem(selUser, selectedID); 228 | }; 229 | 230 | }); 231 | 232 | /** 233 | * Lightdm Callbacks 234 | */ 235 | function show_prompt(text) { 236 | log("show_prompt(" + text + ")"); 237 | $('#pass').val(""); 238 | $('#pass').focus(); 239 | } 240 | 241 | function authentication_complete() { 242 | log("authentication_complete()"); 243 | $('#loading_button_area').hide(); 244 | $('#login_button_area').show(); 245 | authPending = false; 246 | if(USE_DEFAULTS) { 247 | if(lightdm.is_authenticated) { 248 | log("-> authenticated with defaults!"); 249 | lightdm.login(lightdm.authentication_user, defaultSession.key); 250 | } else { 251 | log("-> unable to authenticate with defaults!"); 252 | $('#wrongpass').show(); 253 | } 254 | } else { 255 | var selSession = $('#session-list-btn').attr('data-session-id'); 256 | if(lightdm.is_authenticated) { 257 | log("-> authenticated !"); 258 | lightdm.login(lightdm.authentication_user, selSession); 259 | } else { 260 | //show error 261 | log("-> not authenticated !"); 262 | $('#wrongpass').show(); 263 | } 264 | } 265 | } 266 | 267 | function show_message(text) { 268 | log(text); 269 | } 270 | 271 | function show_error(text) { 272 | show_message(text); 273 | } 274 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Roboto); 2 | 3 | html { 4 | height: 100%; 5 | } 6 | body { 7 | background: #bcdee7 url("./profile/profile_bg.jpg") no-repeat center center fixed; 8 | background-size: 120% auto; 9 | position: fixed; 10 | padding: 0px; 11 | margin: 0px; 12 | width: 100%; 13 | height: 100%; 14 | font: normal 14px/1.618em "Roboto", sans-serif; 15 | -webkit-font-smoothing: antialiased; 16 | } 17 | body:before { 18 | content: ""; 19 | height: 0px; 20 | padding: 0px; 21 | border: 110em solid #607D8B; 22 | position: absolute; 23 | left: 50%; 24 | top: 100%; 25 | z-index: 2; 26 | display: block; 27 | -webkit-border-radius: 50%; 28 | border-radius: 50%; 29 | -webkit-transform: translate(-50%, -50%); 30 | transform: translate(-50%, -50%); 31 | -webkit-animation: puff 0.5s 1.8s cubic-bezier(0.55, 0.055, 0.675, 0.19) forwards, borderRadius 0.2s 2.3s linear forwards; 32 | animation: puff 0.5s 1.8s cubic-bezier(0.55, 0.055, 0.675, 0.19) forwards, borderRadius 0.2s 2.3s linear forwards; 33 | } 34 | h1, h2 { 35 | font-weight: 500; 36 | margin: 0px 0px 5px 0px; 37 | } 38 | h1 { 39 | font-size: 24px; 40 | } 41 | h2 { 42 | font-size: 16px; 43 | } 44 | p { 45 | margin: 0px; 46 | } 47 | .profile-card { 48 | background: #82B1FF; 49 | width: 56px; 50 | height: 56px; 51 | position: absolute; 52 | left: 50%; 53 | top: 50%; 54 | z-index: 2; 55 | overflow: hidden; 56 | opacity: 0; 57 | margin-top: 70px; 58 | -webkit-transform: translate(-50%, -50%); 59 | transform: translate(-50%, -50%); 60 | -webkit-border-radius: 50%; 61 | border-radius: 50%; 62 | -webkit-box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16), 0px 3px 6px rgba(0, 0, 0, 0.23); 63 | box-shadow: 0px 3px 6px rgba(0 ,0, 0, 0.16), 0px 3px 6px rgba(0, 0, 0, 0.23); 64 | -webkit-animation: init 0.5s 0.2s cubic-bezier(0.55, 0.055, 0.675, 0.19) forwards, moveDown 1s 0.8s cubic-bezier(0.6, -0.28, 0.735, 0.045) forwards, moveUp 1s 1.8s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards, materia 0.5s 2.7s cubic-bezier(0.86, 0, 0.07, 1) forwards; 65 | animation: init 0.5s 0.2s cubic-bezier(0.55, 0.055, 0.675, 0.19) forwards, moveDown 1s 0.8s cubic-bezier(0.6, -0.28, 0.735, 0.045) forwards, moveUp 1s 1.8s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards, materia 0.5s 2.7s cubic-bezier(0.86, 0, 0.07, 1) forwards; 66 | } 67 | .profile-card header { 68 | width: 179px; 69 | height: 280px; 70 | padding: 40px 20px 30px 20px; 71 | display: inline-block; 72 | float: left; 73 | border-right: 2px dashed #EEEEEE; 74 | background: #FFFFFF; 75 | color: #000000; 76 | margin-top: 50px; 77 | opacity: 0; 78 | text-align: center; 79 | -webkit-animation: moveIn 1s 3.1s ease forwards; 80 | animation: moveIn 1s 3.1s ease forwards; 81 | } 82 | .profile-card header h1 { 83 | color: #FF5722; 84 | } 85 | .profile-card header a { 86 | display: inline-block; 87 | text-align: center; 88 | position: relative; 89 | margin: 25px 30px; 90 | } 91 | .profile-card header a > img { 92 | width: 120px; 93 | max-width: 100%; 94 | -webkit-border-radius: 50%; 95 | border-radius: 50%; 96 | -webkit-transition: -webkit-box-shadow 0.3s ease; 97 | transition: box-shadow 0.3s ease; 98 | -webkit-box-shadow: 0px 0px 0px 8px rgba(0, 0, 0, 0.06); 99 | box-shadow: 0px 0px 0px 8px rgba(0, 0, 0, 0.06); 100 | } 101 | .profile-card header a:hover > img { 102 | -webkit-box-shadow: 0px 0px 0px 12px rgba(0, 0, 0, 0.1); 103 | box-shadow: 0px 0px 0px 12px rgba(0, 0, 0, 0.1); 104 | } 105 | .profile-card .profile-bio { 106 | width: 175px; 107 | height: 180px; 108 | display: inline-block; 109 | float: right; 110 | padding: 50px 20px 30px 20px; 111 | background: #FFFFFF; 112 | color: #333333; 113 | margin-top: 50px; 114 | text-align: center; 115 | opacity: 0; 116 | -webkit-animation: moveIn 1s 3.1s ease forwards; 117 | animation: moveIn 1s 3.1s ease forwards; 118 | } 119 | .profile-social-links { 120 | width: 218px; 121 | display: inline-block; 122 | float: right; 123 | margin: 0px; 124 | padding: 15px 20px; 125 | background: #FFFFFF; 126 | margin-top: 50px; 127 | text-align: center; 128 | opacity: 0; 129 | -webkit-box-sizing: border-box; 130 | box-sizing: border-box; 131 | -webkit-animation: moveIn 1s 3.1s ease forwards; 132 | animation: moveIn 1s 3.1s ease forwards; 133 | } 134 | .profile-social-links li { 135 | list-style: none; 136 | margin: -5px 0px 0px 0px; 137 | padding: 0px; 138 | float: left; 139 | width: 33.3%; 140 | text-align: center; 141 | } 142 | .profile-social-links li a { 143 | display: inline-block; 144 | width: 24px; 145 | height: 24px; 146 | padding: 6px; 147 | position: relative; 148 | overflow: hidden!important; 149 | -webkit-border-radius: 50%; 150 | border-radius: 50%; 151 | } 152 | .profile-social-links li a img { 153 | position: relative; 154 | z-index: 1; 155 | } 156 | .profile-social-links li a:before { 157 | display: block; 158 | content: ""; 159 | background: rgba(0, 0, 0, 0.3); 160 | position: absolute; 161 | left: 0px; 162 | top: 0px; 163 | width: 36px; 164 | height: 36px; 165 | opacity: 1; 166 | -webkit-transition: transform 0.4s ease, opacity 1s ease-out; 167 | transition: transform 0.4s ease, opacity 1s ease-out; 168 | -webkit-transform: scale3d(0, 0, 1); 169 | transform: scale3d(0, 0, 1); 170 | -webkit-border-radius: 50%; 171 | border-radius: 50%; 172 | } 173 | .profile-social-links li a:hover:before { 174 | -webkit-animation: ripple 1s ease forwards; 175 | animation: ripple 1s ease forwards; 176 | } 177 | .profile-social-links li a img, 178 | .profile-social-links li a svg { 179 | width: 24px; 180 | } 181 | 182 | @-webkit-keyframes init { 183 | 0% { 184 | width: 0px; 185 | height: 0px; 186 | } 187 | 100% { 188 | width: 56px; 189 | height: 56px; 190 | margin-top: 0px; 191 | opacity: 1; 192 | } 193 | } 194 | @keyframes init { 195 | 0% { 196 | width: 0px; 197 | height: 0px; 198 | } 199 | 100% { 200 | width: 56px; 201 | height: 56px; 202 | margin-top: 0px; 203 | opacity: 1; 204 | } 205 | } 206 | @-webkit-keyframes puff { 207 | 0% { 208 | top: 100%; 209 | height: 0px; 210 | padding: 0px; 211 | } 212 | 100% { 213 | top: 50%; 214 | height: 100%; 215 | padding: 0px 100%; 216 | } 217 | } 218 | @keyframes puff { 219 | 0% { 220 | top: 100%; 221 | height: 0px; 222 | padding: 0px; 223 | } 224 | 100% { 225 | top: 50%; 226 | height: 100%; 227 | padding: 0px 100%; 228 | } 229 | } 230 | @-webkit-keyframes borderRadius { 231 | 0% { 232 | -webkit-border-radius: 50%; 233 | } 234 | 100% { 235 | -webkit-border-radius: 0px; 236 | } 237 | } 238 | @keyframes borderRadius { 239 | 0% { 240 | -webkit-border-radius: 50%; 241 | } 242 | 100% { 243 | border-radius: 0px; 244 | } 245 | } 246 | @-webkit-keyframes moveDown { 247 | 0% { 248 | top: 50%; 249 | } 250 | 50% { 251 | top: 40%; 252 | } 253 | 100% { 254 | top: 100%; 255 | } 256 | } 257 | @keyframes moveDown { 258 | 0% { 259 | top: 50%; 260 | } 261 | 50% { 262 | top: 40%; 263 | } 264 | 100% { 265 | top: 100%; 266 | } 267 | } 268 | @-webkit-keyframes moveUp { 269 | 0% { 270 | background: #82B1FF; 271 | top: 100%; 272 | } 273 | 50% { 274 | top: 40%; 275 | } 276 | 100% { 277 | top: 50%; 278 | background: #E0E0E0; 279 | } 280 | } 281 | @keyframes moveUp { 282 | 0% { 283 | background: #82B1FF; 284 | top: 100%; 285 | } 286 | 50% { 287 | top: 40%; 288 | } 289 | 100% { 290 | top: 50%; 291 | background: #E0E0E0; 292 | } 293 | } 294 | @-webkit-keyframes materia { 295 | 0% { 296 | background: #E0E0E0; 297 | } 298 | 50% { 299 | -webkit-border-radius: 4px; 300 | } 301 | 100% { 302 | width: 440px; 303 | height: 280px; 304 | background: #FFFFFF; 305 | -webkit-border-radius: 4px; 306 | } 307 | } 308 | @keyframes materia { 309 | 0% { 310 | background: #E0E0E0; 311 | } 312 | 50% { 313 | border-radius: 4px; 314 | } 315 | 100% { 316 | width: 440px; 317 | height: 280px; 318 | background: #FFFFFF; 319 | border-radius: 4px; 320 | } 321 | } 322 | @-webkit-keyframes moveIn { 323 | 0% { 324 | margin-top: 50px; 325 | opacity: 0; 326 | } 327 | 100% { 328 | opacity: 1; 329 | margin-top: -20px; 330 | } 331 | } 332 | @keyframes moveIn { 333 | 0% { 334 | margin-top: 50px; 335 | opacity: 0; 336 | } 337 | 100% { 338 | opacity: 1; 339 | margin-top: -20px; 340 | } 341 | } 342 | @-webkit-keyframes scaleIn { 343 | 0% { 344 | -webkit-transform: scale(0); 345 | } 346 | 100% { 347 | -webkit-transform: scale(1); 348 | } 349 | } 350 | @keyframes scaleIn { 351 | 0% { 352 | transform: scale(0); 353 | } 354 | 100% { 355 | transform: scale(1); 356 | } 357 | } 358 | @-webkit-keyframes ripple { 359 | 0% { 360 | transform: scale3d(0, 0, 0); 361 | } 362 | 50%, 100% { 363 | -webkit-transform: scale3d(1, 1, 1); 364 | } 365 | 100% { 366 | opacity: 0; 367 | } 368 | } 369 | @keyframes ripple { 370 | 0% { 371 | transform: scale3d(0, 0, 0); 372 | } 373 | 50%, 100% { 374 | transform: scale3d(1, 1, 1); 375 | } 376 | 100% { 377 | opacity: 0; 378 | } 379 | } 380 | @media screen and (min-aspect-ratio: 4/3) { 381 | body { 382 | background-size: 100% auto; 383 | } 384 | body:before { 385 | width: 0px; 386 | } 387 | @-webkit-keyframes puff { 388 | 0% { 389 | top: 100%; 390 | width: 0px; 391 | padding-bottom: 0px; 392 | } 393 | 100% { 394 | top: 50%; 395 | width: 100%; 396 | padding-bottom: 100%; 397 | } 398 | } 399 | @keyframes puff { 400 | 0% { 401 | top: 100%; 402 | width: 0px; 403 | padding-bottom: 0px; 404 | } 405 | 100% { 406 | top: 50%; 407 | width: 100%; 408 | padding-bottom: 100%; 409 | } 410 | } 411 | } 412 | @media screen and (min-height: 480px) { 413 | .profile-card header { 414 | width: auto; 415 | height: auto; 416 | padding: 30px 20px; 417 | display: block; 418 | float: none; 419 | border-right: none; 420 | } 421 | .profile-card .profile-bio { 422 | width: auto; 423 | height: auto; 424 | padding: 15px 20px 30px 20px; 425 | display: block; 426 | float: none; 427 | } 428 | .profile-social-links { 429 | width: 100%; 430 | display: block; 431 | float: none; 432 | } 433 | @-webkit-keyframes materia { 434 | 0% { 435 | background: #E0E0E0; 436 | } 437 | 50% { 438 | -webkit-border-radius: 4px; 439 | } 440 | 100% { 441 | width: 280px; 442 | height: 440px; 443 | background: #FFFFFF; 444 | -webkit-border-radius: 4px; 445 | } 446 | } 447 | @keyframes materia { 448 | 0% { 449 | background: #E0E0E0; 450 | } 451 | 50% { 452 | border-radius: 4px; 453 | } 454 | 100% { 455 | width: 280px; 456 | height: 440px; 457 | background: #FFFFFF; 458 | border-radius: 4px; 459 | } 460 | } 461 | } 462 | -------------------------------------------------------------------------------- /mdl/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright 2015 Google Inc 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | 204 | All code in any directories or sub-directories that end with *.html or 205 | *.css is licensed under the Creative Commons Attribution International 206 | 4.0 License, which full text can be found here: 207 | https://creativecommons.org/licenses/by/4.0/legalcode. 208 | 209 | As an exception to this license, all html or css that is generated by 210 | the software at the direction of the user is copyright the user. The 211 | user has full ownership and control over such content, including 212 | whether and how they wish to license it. 213 | -------------------------------------------------------------------------------- /font/mdl-icons/codepoints: -------------------------------------------------------------------------------- 1 | 3d_rotation e84d 2 | access_alarm e190 3 | access_alarms e191 4 | access_time e192 5 | accessibility e84e 6 | account_balance e84f 7 | account_balance_wallet e850 8 | account_box e851 9 | account_circle e853 10 | adb e60e 11 | add e145 12 | add_alarm e193 13 | add_alert e003 14 | add_box e146 15 | add_circle e147 16 | add_circle_outline e148 17 | add_shopping_cart e854 18 | add_to_photos e39d 19 | adjust e39e 20 | airline_seat_flat e630 21 | airline_seat_flat_angled e631 22 | airline_seat_individual_suite e632 23 | airline_seat_legroom_extra e633 24 | airline_seat_legroom_normal e634 25 | airline_seat_legroom_reduced e635 26 | airline_seat_recline_extra e636 27 | airline_seat_recline_normal e637 28 | airplanemode_active e195 29 | airplanemode_inactive e194 30 | airplay e055 31 | alarm e855 32 | alarm_add e856 33 | alarm_off e857 34 | alarm_on e858 35 | album e019 36 | android e859 37 | announcement e85a 38 | apps e5c3 39 | archive e149 40 | arrow_back e5c4 41 | arrow_drop_down e5c5 42 | arrow_drop_down_circle e5c6 43 | arrow_drop_up e5c7 44 | arrow_forward e5c8 45 | aspect_ratio e85b 46 | assessment e85c 47 | assignment e85d 48 | assignment_ind e85e 49 | assignment_late e85f 50 | assignment_return e860 51 | assignment_returned e861 52 | assignment_turned_in e862 53 | assistant e39f 54 | assistant_photo e3a0 55 | attach_file e226 56 | attach_money e227 57 | attachment e2bc 58 | audiotrack e3a1 59 | autorenew e863 60 | av_timer e01b 61 | backspace e14a 62 | backup e864 63 | battery_alert e19c 64 | battery_charging_full e1a3 65 | battery_full e1a4 66 | battery_std e1a5 67 | battery_unknown e1a6 68 | beenhere e52d 69 | block e14b 70 | bluetooth e1a7 71 | bluetooth_audio e60f 72 | bluetooth_connected e1a8 73 | bluetooth_disabled e1a9 74 | bluetooth_searching e1aa 75 | blur_circular e3a2 76 | blur_linear e3a3 77 | blur_off e3a4 78 | blur_on e3a5 79 | book e865 80 | bookmark e866 81 | bookmark_border e867 82 | border_all e228 83 | border_bottom e229 84 | border_clear e22a 85 | border_color e22b 86 | border_horizontal e22c 87 | border_inner e22d 88 | border_left e22e 89 | border_outer e22f 90 | border_right e230 91 | border_style e231 92 | border_top e232 93 | border_vertical e233 94 | brightness_1 e3a6 95 | brightness_2 e3a7 96 | brightness_3 e3a8 97 | brightness_4 e3a9 98 | brightness_5 e3aa 99 | brightness_6 e3ab 100 | brightness_7 e3ac 101 | brightness_auto e1ab 102 | brightness_high e1ac 103 | brightness_low e1ad 104 | brightness_medium e1ae 105 | broken_image e3ad 106 | brush e3ae 107 | bug_report e868 108 | build e869 109 | business e0af 110 | cached e86a 111 | cake e7e9 112 | call e0b0 113 | call_end e0b1 114 | call_made e0b2 115 | call_merge e0b3 116 | call_missed e0b4 117 | call_received e0b5 118 | call_split e0b6 119 | camera e3af 120 | camera_alt e3b0 121 | camera_enhance e8fc 122 | camera_front e3b1 123 | camera_rear e3b2 124 | camera_roll e3b3 125 | cancel e5c9 126 | card_giftcard e8f6 127 | card_membership e8f7 128 | card_travel e8f8 129 | cast e307 130 | cast_connected e308 131 | center_focus_strong e3b4 132 | center_focus_weak e3b5 133 | change_history e86b 134 | chat e0b7 135 | chat_bubble e0ca 136 | chat_bubble_outline e0cb 137 | check e5ca 138 | check_box e834 139 | check_box_outline_blank e835 140 | check_circle e86c 141 | chevron_left e5cb 142 | chevron_right e5cc 143 | chrome_reader_mode e86d 144 | class e86e 145 | clear e14c 146 | clear_all e0b8 147 | close e5cd 148 | closed_caption e01c 149 | cloud e2bd 150 | cloud_circle e2be 151 | cloud_done e2bf 152 | cloud_download e2c0 153 | cloud_off e2c1 154 | cloud_queue e2c2 155 | cloud_upload e2c3 156 | code e86f 157 | collections e3b6 158 | collections_bookmark e431 159 | color_lens e3b7 160 | colorize e3b8 161 | comment e0b9 162 | compare e3b9 163 | computer e30a 164 | confirmation_number e638 165 | contact_phone e0cf 166 | contacts e0ba 167 | content_copy e14d 168 | content_cut e14e 169 | content_paste e14f 170 | control_point e3ba 171 | control_point_duplicate e3bb 172 | create e150 173 | credit_card e870 174 | crop e3be 175 | crop_16_9 e3bc 176 | crop_3_2 e3bd 177 | crop_5_4 e3bf 178 | crop_7_5 e3c0 179 | crop_din e3c1 180 | crop_free e3c2 181 | crop_landscape e3c3 182 | crop_original e3c4 183 | crop_portrait e3c5 184 | crop_square e3c6 185 | dashboard e871 186 | data_usage e1af 187 | dehaze e3c7 188 | delete e872 189 | description e873 190 | desktop_mac e30b 191 | desktop_windows e30c 192 | details e3c8 193 | developer_board e30d 194 | developer_mode e1b0 195 | device_hub e335 196 | devices e1b1 197 | dialer_sip e0bb 198 | dialpad e0bc 199 | directions e52e 200 | directions_bike e52f 201 | directions_boat e532 202 | directions_bus e530 203 | directions_car e531 204 | directions_railway e534 205 | directions_run e566 206 | directions_subway e533 207 | directions_transit e535 208 | directions_walk e536 209 | disc_full e610 210 | dns e875 211 | do_not_disturb e612 212 | do_not_disturb_alt e611 213 | dock e30e 214 | domain e7ee 215 | done e876 216 | done_all e877 217 | drafts e151 218 | drive_eta e613 219 | dvr e1b2 220 | edit e3c9 221 | eject e8fb 222 | email e0be 223 | equalizer e01d 224 | error e000 225 | error_outline e001 226 | event e878 227 | event_available e614 228 | event_busy e615 229 | event_note e616 230 | event_seat e903 231 | exit_to_app e879 232 | expand_less e5ce 233 | expand_more e5cf 234 | explicit e01e 235 | explore e87a 236 | exposure e3ca 237 | exposure_neg_1 e3cb 238 | exposure_neg_2 e3cc 239 | exposure_plus_1 e3cd 240 | exposure_plus_2 e3ce 241 | exposure_zero e3cf 242 | extension e87b 243 | face e87c 244 | fast_forward e01f 245 | fast_rewind e020 246 | favorite e87d 247 | favorite_border e87e 248 | feedback e87f 249 | file_download e2c4 250 | file_upload e2c6 251 | filter e3d3 252 | filter_1 e3d0 253 | filter_2 e3d1 254 | filter_3 e3d2 255 | filter_4 e3d4 256 | filter_5 e3d5 257 | filter_6 e3d6 258 | filter_7 e3d7 259 | filter_8 e3d8 260 | filter_9 e3d9 261 | filter_9_plus e3da 262 | filter_b_and_w e3db 263 | filter_center_focus e3dc 264 | filter_drama e3dd 265 | filter_frames e3de 266 | filter_hdr e3df 267 | filter_list e152 268 | filter_none e3e0 269 | filter_tilt_shift e3e2 270 | filter_vintage e3e3 271 | find_in_page e880 272 | find_replace e881 273 | flag e153 274 | flare e3e4 275 | flash_auto e3e5 276 | flash_off e3e6 277 | flash_on e3e7 278 | flight e539 279 | flight_land e904 280 | flight_takeoff e905 281 | flip e3e8 282 | flip_to_back e882 283 | flip_to_front e883 284 | folder e2c7 285 | folder_open e2c8 286 | folder_shared e2c9 287 | folder_special e617 288 | font_download e167 289 | format_align_center e234 290 | format_align_justify e235 291 | format_align_left e236 292 | format_align_right e237 293 | format_bold e238 294 | format_clear e239 295 | format_color_fill e23a 296 | format_color_reset e23b 297 | format_color_text e23c 298 | format_indent_decrease e23d 299 | format_indent_increase e23e 300 | format_italic e23f 301 | format_line_spacing e240 302 | format_list_bulleted e241 303 | format_list_numbered e242 304 | format_paint e243 305 | format_quote e244 306 | format_size e245 307 | format_strikethrough e246 308 | format_textdirection_l_to_r e247 309 | format_textdirection_r_to_l e248 310 | format_underlined e249 311 | forum e0bf 312 | forward e154 313 | forward_10 e056 314 | forward_30 e057 315 | forward_5 e058 316 | fullscreen e5d0 317 | fullscreen_exit e5d1 318 | functions e24a 319 | gamepad e30f 320 | games e021 321 | gesture e155 322 | get_app e884 323 | gif e908 324 | gps_fixed e1b3 325 | gps_not_fixed e1b4 326 | gps_off e1b5 327 | grade e885 328 | gradient e3e9 329 | grain e3ea 330 | graphic_eq e1b8 331 | grid_off e3eb 332 | grid_on e3ec 333 | group e7ef 334 | group_add e7f0 335 | group_work e886 336 | hd e052 337 | hdr_off e3ed 338 | hdr_on e3ee 339 | hdr_strong e3f1 340 | hdr_weak e3f2 341 | headset e310 342 | headset_mic e311 343 | healing e3f3 344 | hearing e023 345 | help e887 346 | help_outline e8fd 347 | high_quality e024 348 | highlight_off e888 349 | history e889 350 | home e88a 351 | hotel e53a 352 | hourglass_empty e88b 353 | hourglass_full e88c 354 | http e902 355 | https e88d 356 | image e3f4 357 | image_aspect_ratio e3f5 358 | import_export e0c3 359 | inbox e156 360 | indeterminate_check_box e909 361 | info e88e 362 | info_outline e88f 363 | input e890 364 | insert_chart e24b 365 | insert_comment e24c 366 | insert_drive_file e24d 367 | insert_emoticon e24e 368 | insert_invitation e24f 369 | insert_link e250 370 | insert_photo e251 371 | invert_colors e891 372 | invert_colors_off e0c4 373 | iso e3f6 374 | keyboard e312 375 | keyboard_arrow_down e313 376 | keyboard_arrow_left e314 377 | keyboard_arrow_right e315 378 | keyboard_arrow_up e316 379 | keyboard_backspace e317 380 | keyboard_capslock e318 381 | keyboard_hide e31a 382 | keyboard_return e31b 383 | keyboard_tab e31c 384 | keyboard_voice e31d 385 | label e892 386 | label_outline e893 387 | landscape e3f7 388 | language e894 389 | laptop e31e 390 | laptop_chromebook e31f 391 | laptop_mac e320 392 | laptop_windows e321 393 | launch e895 394 | layers e53b 395 | layers_clear e53c 396 | leak_add e3f8 397 | leak_remove e3f9 398 | lens e3fa 399 | library_add e02e 400 | library_books e02f 401 | library_music e030 402 | link e157 403 | list e896 404 | live_help e0c6 405 | live_tv e639 406 | local_activity e53f 407 | local_airport e53d 408 | local_atm e53e 409 | local_bar e540 410 | local_cafe e541 411 | local_car_wash e542 412 | local_convenience_store e543 413 | local_dining e556 414 | local_drink e544 415 | local_florist e545 416 | local_gas_station e546 417 | local_grocery_store e547 418 | local_hospital e548 419 | local_hotel e549 420 | local_laundry_service e54a 421 | local_library e54b 422 | local_mall e54c 423 | local_movies e54d 424 | local_offer e54e 425 | local_parking e54f 426 | local_pharmacy e550 427 | local_phone e551 428 | local_pizza e552 429 | local_play e553 430 | local_post_office e554 431 | local_printshop e555 432 | local_see e557 433 | local_shipping e558 434 | local_taxi e559 435 | location_city e7f1 436 | location_disabled e1b6 437 | location_off e0c7 438 | location_on e0c8 439 | location_searching e1b7 440 | lock e897 441 | lock_open e898 442 | lock_outline e899 443 | looks e3fc 444 | looks_3 e3fb 445 | looks_4 e3fd 446 | looks_5 e3fe 447 | looks_6 e3ff 448 | looks_one e400 449 | looks_two e401 450 | loop e028 451 | loupe e402 452 | loyalty e89a 453 | mail e158 454 | map e55b 455 | markunread e159 456 | markunread_mailbox e89b 457 | memory e322 458 | menu e5d2 459 | merge_type e252 460 | message e0c9 461 | mic e029 462 | mic_none e02a 463 | mic_off e02b 464 | mms e618 465 | mode_comment e253 466 | mode_edit e254 467 | money_off e25c 468 | monochrome_photos e403 469 | mood e7f2 470 | mood_bad e7f3 471 | more e619 472 | more_horiz e5d3 473 | more_vert e5d4 474 | mouse e323 475 | movie e02c 476 | movie_creation e404 477 | music_note e405 478 | my_location e55c 479 | nature e406 480 | nature_people e407 481 | navigate_before e408 482 | navigate_next e409 483 | navigation e55d 484 | network_cell e1b9 485 | network_locked e61a 486 | network_wifi e1ba 487 | new_releases e031 488 | nfc e1bb 489 | no_sim e0cc 490 | not_interested e033 491 | note_add e89c 492 | notifications e7f4 493 | notifications_active e7f7 494 | notifications_none e7f5 495 | notifications_off e7f6 496 | notifications_paused e7f8 497 | offline_pin e90a 498 | ondemand_video e63a 499 | open_in_browser e89d 500 | open_in_new e89e 501 | open_with e89f 502 | pages e7f9 503 | pageview e8a0 504 | palette e40a 505 | panorama e40b 506 | panorama_fish_eye e40c 507 | panorama_horizontal e40d 508 | panorama_vertical e40e 509 | panorama_wide_angle e40f 510 | party_mode e7fa 511 | pause e034 512 | pause_circle_filled e035 513 | pause_circle_outline e036 514 | payment e8a1 515 | people e7fb 516 | people_outline e7fc 517 | perm_camera_mic e8a2 518 | perm_contact_calendar e8a3 519 | perm_data_setting e8a4 520 | perm_device_information e8a5 521 | perm_identity e8a6 522 | perm_media e8a7 523 | perm_phone_msg e8a8 524 | perm_scan_wifi e8a9 525 | person e7fd 526 | person_add e7fe 527 | person_outline e7ff 528 | person_pin e55a 529 | personal_video e63b 530 | phone e0cd 531 | phone_android e324 532 | phone_bluetooth_speaker e61b 533 | phone_forwarded e61c 534 | phone_in_talk e61d 535 | phone_iphone e325 536 | phone_locked e61e 537 | phone_missed e61f 538 | phone_paused e620 539 | phonelink e326 540 | phonelink_erase e0db 541 | phonelink_lock e0dc 542 | phonelink_off e327 543 | phonelink_ring e0dd 544 | phonelink_setup e0de 545 | photo e410 546 | photo_album e411 547 | photo_camera e412 548 | photo_library e413 549 | photo_size_select_actual e432 550 | photo_size_select_large e433 551 | photo_size_select_small e434 552 | picture_as_pdf e415 553 | picture_in_picture e8aa 554 | pin_drop e55e 555 | place e55f 556 | play_arrow e037 557 | play_circle_filled e038 558 | play_circle_outline e039 559 | play_for_work e906 560 | playlist_add e03b 561 | plus_one e800 562 | poll e801 563 | polymer e8ab 564 | portable_wifi_off e0ce 565 | portrait e416 566 | power e63c 567 | power_input e336 568 | power_settings_new e8ac 569 | present_to_all e0df 570 | print e8ad 571 | public e80b 572 | publish e255 573 | query_builder e8ae 574 | question_answer e8af 575 | queue e03c 576 | queue_music e03d 577 | radio e03e 578 | radio_button_checked e837 579 | radio_button_unchecked e836 580 | rate_review e560 581 | receipt e8b0 582 | recent_actors e03f 583 | redeem e8b1 584 | redo e15a 585 | refresh e5d5 586 | remove e15b 587 | remove_circle e15c 588 | remove_circle_outline e15d 589 | remove_red_eye e417 590 | reorder e8fe 591 | repeat e040 592 | repeat_one e041 593 | replay e042 594 | replay_10 e059 595 | replay_30 e05a 596 | replay_5 e05b 597 | reply e15e 598 | reply_all e15f 599 | report e160 600 | report_problem e8b2 601 | restaurant_menu e561 602 | restore e8b3 603 | ring_volume e0d1 604 | room e8b4 605 | rotate_90_degrees_ccw e418 606 | rotate_left e419 607 | rotate_right e41a 608 | router e328 609 | satellite e562 610 | save e161 611 | scanner e329 612 | schedule e8b5 613 | school e80c 614 | screen_lock_landscape e1be 615 | screen_lock_portrait e1bf 616 | screen_lock_rotation e1c0 617 | screen_rotation e1c1 618 | sd_card e623 619 | sd_storage e1c2 620 | search e8b6 621 | security e32a 622 | select_all e162 623 | send e163 624 | settings e8b8 625 | settings_applications e8b9 626 | settings_backup_restore e8ba 627 | settings_bluetooth e8bb 628 | settings_brightness e8bd 629 | settings_cell e8bc 630 | settings_ethernet e8be 631 | settings_input_antenna e8bf 632 | settings_input_component e8c0 633 | settings_input_composite e8c1 634 | settings_input_hdmi e8c2 635 | settings_input_svideo e8c3 636 | settings_overscan e8c4 637 | settings_phone e8c5 638 | settings_power e8c6 639 | settings_remote e8c7 640 | settings_system_daydream e1c3 641 | settings_voice e8c8 642 | share e80d 643 | shop e8c9 644 | shop_two e8ca 645 | shopping_basket e8cb 646 | shopping_cart e8cc 647 | shuffle e043 648 | signal_cellular_4_bar e1c8 649 | signal_cellular_connected_no_internet_4_bar e1cd 650 | signal_cellular_no_sim e1ce 651 | signal_cellular_null e1cf 652 | signal_cellular_off e1d0 653 | signal_wifi_4_bar e1d8 654 | signal_wifi_4_bar_lock e1d9 655 | signal_wifi_off e1da 656 | sim_card e32b 657 | sim_card_alert e624 658 | skip_next e044 659 | skip_previous e045 660 | slideshow e41b 661 | smartphone e32c 662 | sms e625 663 | sms_failed e626 664 | snooze e046 665 | sort e164 666 | sort_by_alpha e053 667 | space_bar e256 668 | speaker e32d 669 | speaker_group e32e 670 | speaker_notes e8cd 671 | speaker_phone e0d2 672 | spellcheck e8ce 673 | star e838 674 | star_border e83a 675 | star_half e839 676 | stars e8d0 677 | stay_current_landscape e0d3 678 | stay_current_portrait e0d4 679 | stay_primary_landscape e0d5 680 | stay_primary_portrait e0d6 681 | stop e047 682 | storage e1db 683 | store e8d1 684 | store_mall_directory e563 685 | straighten e41c 686 | strikethrough_s e257 687 | style e41d 688 | subject e8d2 689 | subtitles e048 690 | supervisor_account e8d3 691 | surround_sound e049 692 | swap_calls e0d7 693 | swap_horiz e8d4 694 | swap_vert e8d5 695 | swap_vertical_circle e8d6 696 | switch_camera e41e 697 | switch_video e41f 698 | sync e627 699 | sync_disabled e628 700 | sync_problem e629 701 | system_update e62a 702 | system_update_alt e8d7 703 | tab e8d8 704 | tab_unselected e8d9 705 | tablet e32f 706 | tablet_android e330 707 | tablet_mac e331 708 | tag_faces e420 709 | tap_and_play e62b 710 | terrain e564 711 | text_format e165 712 | textsms e0d8 713 | texture e421 714 | theaters e8da 715 | thumb_down e8db 716 | thumb_up e8dc 717 | thumbs_up_down e8dd 718 | time_to_leave e62c 719 | timelapse e422 720 | timer e425 721 | timer_10 e423 722 | timer_3 e424 723 | timer_off e426 724 | toc e8de 725 | today e8df 726 | toll e8e0 727 | tonality e427 728 | toys e332 729 | track_changes e8e1 730 | traffic e565 731 | transform e428 732 | translate e8e2 733 | trending_down e8e3 734 | trending_flat e8e4 735 | trending_up e8e5 736 | tune e429 737 | turned_in e8e6 738 | turned_in_not e8e7 739 | tv e333 740 | undo e166 741 | unfold_less e5d6 742 | unfold_more e5d7 743 | usb e1e0 744 | verified_user e8e8 745 | vertical_align_bottom e258 746 | vertical_align_center e259 747 | vertical_align_top e25a 748 | vibration e62d 749 | video_library e04a 750 | videocam e04b 751 | videocam_off e04c 752 | view_agenda e8e9 753 | view_array e8ea 754 | view_carousel e8eb 755 | view_column e8ec 756 | view_comfy e42a 757 | view_compact e42b 758 | view_day e8ed 759 | view_headline e8ee 760 | view_list e8ef 761 | view_module e8f0 762 | view_quilt e8f1 763 | view_stream e8f2 764 | view_week e8f3 765 | vignette e435 766 | visibility e8f4 767 | visibility_off e8f5 768 | voice_chat e62e 769 | voicemail e0d9 770 | volume_down e04d 771 | volume_mute e04e 772 | volume_off e04f 773 | volume_up e050 774 | vpn_key e0da 775 | vpn_lock e62f 776 | wallpaper e1bc 777 | warning e002 778 | watch e334 779 | wb_auto e42c 780 | wb_cloudy e42d 781 | wb_incandescent e42e 782 | wb_iridescent e436 783 | wb_sunny e430 784 | wc e63d 785 | web e051 786 | whatshot e80e 787 | widgets e1bd 788 | wifi e63e 789 | wifi_lock e1e1 790 | wifi_tethering e1e2 791 | work e8f9 792 | wrap_text e25b 793 | youtube_searched_for e8fa 794 | zoom_in e8ff 795 | zoom_out e900 796 | -------------------------------------------------------------------------------- /font/material-design-icons/LICENSE.txt: -------------------------------------------------------------------------------- 1 | https://github.com/google/material-design-icons/blob/master/LICENSE 2 | https://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt 3 | 4 | Attribution-ShareAlike 4.0 International 5 | 6 | ======================================================================= 7 | 8 | Creative Commons Corporation ("Creative Commons") is not a law firm and 9 | does not provide legal services or legal advice. Distribution of 10 | Creative Commons public licenses does not create a lawyer-client or 11 | other relationship. Creative Commons makes its licenses and related 12 | information available on an "as-is" basis. Creative Commons gives no 13 | warranties regarding its licenses, any material licensed under their 14 | terms and conditions, or any related information. Creative Commons 15 | disclaims all liability for damages resulting from their use to the 16 | fullest extent possible. 17 | 18 | Using Creative Commons Public Licenses 19 | 20 | Creative Commons public licenses provide a standard set of terms and 21 | conditions that creators and other rights holders may use to share 22 | original works of authorship and other material subject to copyright 23 | and certain other rights specified in the public license below. The 24 | following considerations are for informational purposes only, are not 25 | exhaustive, and do not form part of our licenses. 26 | 27 | Considerations for licensors: Our public licenses are 28 | intended for use by those authorized to give the public 29 | permission to use material in ways otherwise restricted by 30 | copyright and certain other rights. Our licenses are 31 | irrevocable. Licensors should read and understand the terms 32 | and conditions of the license they choose before applying it. 33 | Licensors should also secure all rights necessary before 34 | applying our licenses so that the public can reuse the 35 | material as expected. Licensors should clearly mark any 36 | material not subject to the license. This includes other CC- 37 | licensed material, or material used under an exception or 38 | limitation to copyright. More considerations for licensors: 39 | wiki.creativecommons.org/Considerations_for_licensors 40 | 41 | Considerations for the public: By using one of our public 42 | licenses, a licensor grants the public permission to use the 43 | licensed material under specified terms and conditions. If 44 | the licensor's permission is not necessary for any reason--for 45 | example, because of any applicable exception or limitation to 46 | copyright--then that use is not regulated by the license. Our 47 | licenses grant only permissions under copyright and certain 48 | other rights that a licensor has authority to grant. Use of 49 | the licensed material may still be restricted for other 50 | reasons, including because others have copyright or other 51 | rights in the material. A licensor may make special requests, 52 | such as asking that all changes be marked or described. 53 | Although not required by our licenses, you are encouraged to 54 | respect those requests where reasonable. More_considerations 55 | for the public: 56 | wiki.creativecommons.org/Considerations_for_licensees 57 | 58 | ======================================================================= 59 | 60 | Creative Commons Attribution-ShareAlike 4.0 International Public 61 | License 62 | 63 | By exercising the Licensed Rights (defined below), You accept and agree 64 | to be bound by the terms and conditions of this Creative Commons 65 | Attribution-ShareAlike 4.0 International Public License ("Public 66 | License"). To the extent this Public License may be interpreted as a 67 | contract, You are granted the Licensed Rights in consideration of Your 68 | acceptance of these terms and conditions, and the Licensor grants You 69 | such rights in consideration of benefits the Licensor receives from 70 | making the Licensed Material available under these terms and 71 | conditions. 72 | 73 | 74 | Section 1 -- Definitions. 75 | 76 | a. Adapted Material means material subject to Copyright and Similar 77 | Rights that is derived from or based upon the Licensed Material 78 | and in which the Licensed Material is translated, altered, 79 | arranged, transformed, or otherwise modified in a manner requiring 80 | permission under the Copyright and Similar Rights held by the 81 | Licensor. For purposes of this Public License, where the Licensed 82 | Material is a musical work, performance, or sound recording, 83 | Adapted Material is always produced where the Licensed Material is 84 | synched in timed relation with a moving image. 85 | 86 | b. Adapter's License means the license You apply to Your Copyright 87 | and Similar Rights in Your contributions to Adapted Material in 88 | accordance with the terms and conditions of this Public License. 89 | 90 | c. BY-SA Compatible License means a license listed at 91 | creativecommons.org/compatiblelicenses, approved by Creative 92 | Commons as essentially the equivalent of this Public License. 93 | 94 | d. Copyright and Similar Rights means copyright and/or similar rights 95 | closely related to copyright including, without limitation, 96 | performance, broadcast, sound recording, and Sui Generis Database 97 | Rights, without regard to how the rights are labeled or 98 | categorized. For purposes of this Public License, the rights 99 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 100 | Rights. 101 | 102 | e. Effective Technological Measures means those measures that, in the 103 | absence of proper authority, may not be circumvented under laws 104 | fulfilling obligations under Article 11 of the WIPO Copyright 105 | Treaty adopted on December 20, 1996, and/or similar international 106 | agreements. 107 | 108 | f. Exceptions and Limitations means fair use, fair dealing, and/or 109 | any other exception or limitation to Copyright and Similar Rights 110 | that applies to Your use of the Licensed Material. 111 | 112 | g. License Elements means the license attributes listed in the name 113 | of a Creative Commons Public License. The License Elements of this 114 | Public License are Attribution and ShareAlike. 115 | 116 | h. Licensed Material means the artistic or literary work, database, 117 | or other material to which the Licensor applied this Public 118 | License. 119 | 120 | i. Licensed Rights means the rights granted to You subject to the 121 | terms and conditions of this Public License, which are limited to 122 | all Copyright and Similar Rights that apply to Your use of the 123 | Licensed Material and that the Licensor has authority to license. 124 | 125 | j. Licensor means the individual(s) or entity(ies) granting rights 126 | under this Public License. 127 | 128 | k. Share means to provide material to the public by any means or 129 | process that requires permission under the Licensed Rights, such 130 | as reproduction, public display, public performance, distribution, 131 | dissemination, communication, or importation, and to make material 132 | available to the public including in ways that members of the 133 | public may access the material from a place and at a time 134 | individually chosen by them. 135 | 136 | l. Sui Generis Database Rights means rights other than copyright 137 | resulting from Directive 96/9/EC of the European Parliament and of 138 | the Council of 11 March 1996 on the legal protection of databases, 139 | as amended and/or succeeded, as well as other essentially 140 | equivalent rights anywhere in the world. 141 | 142 | m. You means the individual or entity exercising the Licensed Rights 143 | under this Public License. Your has a corresponding meaning. 144 | 145 | 146 | Section 2 -- Scope. 147 | 148 | a. License grant. 149 | 150 | 1. Subject to the terms and conditions of this Public License, 151 | the Licensor hereby grants You a worldwide, royalty-free, 152 | non-sublicensable, non-exclusive, irrevocable license to 153 | exercise the Licensed Rights in the Licensed Material to: 154 | 155 | a. reproduce and Share the Licensed Material, in whole or 156 | in part; and 157 | 158 | b. produce, reproduce, and Share Adapted Material. 159 | 160 | 2. Exceptions and Limitations. For the avoidance of doubt, where 161 | Exceptions and Limitations apply to Your use, this Public 162 | License does not apply, and You do not need to comply with 163 | its terms and conditions. 164 | 165 | 3. Term. The term of this Public License is specified in Section 166 | 6(a). 167 | 168 | 4. Media and formats; technical modifications allowed. The 169 | Licensor authorizes You to exercise the Licensed Rights in 170 | all media and formats whether now known or hereafter created, 171 | and to make technical modifications necessary to do so. The 172 | Licensor waives and/or agrees not to assert any right or 173 | authority to forbid You from making technical modifications 174 | necessary to exercise the Licensed Rights, including 175 | technical modifications necessary to circumvent Effective 176 | Technological Measures. For purposes of this Public License, 177 | simply making modifications authorized by this Section 2(a) 178 | (4) never produces Adapted Material. 179 | 180 | 5. Downstream recipients. 181 | 182 | a. Offer from the Licensor -- Licensed Material. Every 183 | recipient of the Licensed Material automatically 184 | receives an offer from the Licensor to exercise the 185 | Licensed Rights under the terms and conditions of this 186 | Public License. 187 | 188 | b. Additional offer from the Licensor -- Adapted Material. 189 | Every recipient of Adapted Material from You 190 | automatically receives an offer from the Licensor to 191 | exercise the Licensed Rights in the Adapted Material 192 | under the conditions of the Adapter's License You apply. 193 | 194 | c. No downstream restrictions. You may not offer or impose 195 | any additional or different terms or conditions on, or 196 | apply any Effective Technological Measures to, the 197 | Licensed Material if doing so restricts exercise of the 198 | Licensed Rights by any recipient of the Licensed 199 | Material. 200 | 201 | 6. No endorsement. Nothing in this Public License constitutes or 202 | may be construed as permission to assert or imply that You 203 | are, or that Your use of the Licensed Material is, connected 204 | with, or sponsored, endorsed, or granted official status by, 205 | the Licensor or others designated to receive attribution as 206 | provided in Section 3(a)(1)(A)(i). 207 | 208 | b. Other rights. 209 | 210 | 1. Moral rights, such as the right of integrity, are not 211 | licensed under this Public License, nor are publicity, 212 | privacy, and/or other similar personality rights; however, to 213 | the extent possible, the Licensor waives and/or agrees not to 214 | assert any such rights held by the Licensor to the limited 215 | extent necessary to allow You to exercise the Licensed 216 | Rights, but not otherwise. 217 | 218 | 2. Patent and trademark rights are not licensed under this 219 | Public License. 220 | 221 | 3. To the extent possible, the Licensor waives any right to 222 | collect royalties from You for the exercise of the Licensed 223 | Rights, whether directly or through a collecting society 224 | under any voluntary or waivable statutory or compulsory 225 | licensing scheme. In all other cases the Licensor expressly 226 | reserves any right to collect such royalties. 227 | 228 | 229 | Section 3 -- License Conditions. 230 | 231 | Your exercise of the Licensed Rights is expressly made subject to the 232 | following conditions. 233 | 234 | a. Attribution. 235 | 236 | 1. If You Share the Licensed Material (including in modified 237 | form), You must: 238 | 239 | a. retain the following if it is supplied by the Licensor 240 | with the Licensed Material: 241 | 242 | i. identification of the creator(s) of the Licensed 243 | Material and any others designated to receive 244 | attribution, in any reasonable manner requested by 245 | the Licensor (including by pseudonym if 246 | designated); 247 | 248 | ii. a copyright notice; 249 | 250 | iii. a notice that refers to this Public License; 251 | 252 | iv. a notice that refers to the disclaimer of 253 | warranties; 254 | 255 | v. a URI or hyperlink to the Licensed Material to the 256 | extent reasonably practicable; 257 | 258 | b. indicate if You modified the Licensed Material and 259 | retain an indication of any previous modifications; and 260 | 261 | c. indicate the Licensed Material is licensed under this 262 | Public License, and include the text of, or the URI or 263 | hyperlink to, this Public License. 264 | 265 | 2. You may satisfy the conditions in Section 3(a)(1) in any 266 | reasonable manner based on the medium, means, and context in 267 | which You Share the Licensed Material. For example, it may be 268 | reasonable to satisfy the conditions by providing a URI or 269 | hyperlink to a resource that includes the required 270 | information. 271 | 272 | 3. If requested by the Licensor, You must remove any of the 273 | information required by Section 3(a)(1)(A) to the extent 274 | reasonably practicable. 275 | 276 | b. ShareAlike. 277 | 278 | In addition to the conditions in Section 3(a), if You Share 279 | Adapted Material You produce, the following conditions also apply. 280 | 281 | 1. The Adapter's License You apply must be a Creative Commons 282 | license with the same License Elements, this version or 283 | later, or a BY-SA Compatible License. 284 | 285 | 2. You must include the text of, or the URI or hyperlink to, the 286 | Adapter's License You apply. You may satisfy this condition 287 | in any reasonable manner based on the medium, means, and 288 | context in which You Share Adapted Material. 289 | 290 | 3. You may not offer or impose any additional or different terms 291 | or conditions on, or apply any Effective Technological 292 | Measures to, Adapted Material that restrict exercise of the 293 | rights granted under the Adapter's License You apply. 294 | 295 | 296 | Section 4 -- Sui Generis Database Rights. 297 | 298 | Where the Licensed Rights include Sui Generis Database Rights that 299 | apply to Your use of the Licensed Material: 300 | 301 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 302 | to extract, reuse, reproduce, and Share all or a substantial 303 | portion of the contents of the database; 304 | 305 | b. if You include all or a substantial portion of the database 306 | contents in a database in which You have Sui Generis Database 307 | Rights, then the database in which You have Sui Generis Database 308 | Rights (but not its individual contents) is Adapted Material, 309 | 310 | including for purposes of Section 3(b); and 311 | c. You must comply with the conditions in Section 3(a) if You Share 312 | all or a substantial portion of the contents of the database. 313 | 314 | For the avoidance of doubt, this Section 4 supplements and does not 315 | replace Your obligations under this Public License where the Licensed 316 | Rights include other Copyright and Similar Rights. 317 | 318 | 319 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 320 | 321 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 322 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 323 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 324 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 325 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 326 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 327 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 328 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 329 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 330 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 331 | 332 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 333 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 334 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 335 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 336 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 337 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 338 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 339 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 340 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 341 | 342 | c. The disclaimer of warranties and limitation of liability provided 343 | above shall be interpreted in a manner that, to the extent 344 | possible, most closely approximates an absolute disclaimer and 345 | waiver of all liability. 346 | 347 | 348 | Section 6 -- Term and Termination. 349 | 350 | a. This Public License applies for the term of the Copyright and 351 | Similar Rights licensed here. However, if You fail to comply with 352 | this Public License, then Your rights under this Public License 353 | terminate automatically. 354 | 355 | b. Where Your right to use the Licensed Material has terminated under 356 | Section 6(a), it reinstates: 357 | 358 | 1. automatically as of the date the violation is cured, provided 359 | it is cured within 30 days of Your discovery of the 360 | violation; or 361 | 362 | 2. upon express reinstatement by the Licensor. 363 | 364 | For the avoidance of doubt, this Section 6(b) does not affect any 365 | right the Licensor may have to seek remedies for Your violations 366 | of this Public License. 367 | 368 | c. For the avoidance of doubt, the Licensor may also offer the 369 | Licensed Material under separate terms or conditions or stop 370 | distributing the Licensed Material at any time; however, doing so 371 | will not terminate this Public License. 372 | 373 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 374 | License. 375 | 376 | 377 | Section 7 -- Other Terms and Conditions. 378 | 379 | a. The Licensor shall not be bound by any additional or different 380 | terms or conditions communicated by You unless expressly agreed. 381 | 382 | b. Any arrangements, understandings, or agreements regarding the 383 | Licensed Material not stated herein are separate from and 384 | independent of the terms and conditions of this Public License. 385 | 386 | 387 | Section 8 -- Interpretation. 388 | 389 | a. For the avoidance of doubt, this Public License does not, and 390 | shall not be interpreted to, reduce, limit, restrict, or impose 391 | conditions on any use of the Licensed Material that could lawfully 392 | be made without permission under this Public License. 393 | 394 | b. To the extent possible, if any provision of this Public License is 395 | deemed unenforceable, it shall be automatically reformed to the 396 | minimum extent necessary to make it enforceable. If the provision 397 | cannot be reformed, it shall be severed from this Public License 398 | without affecting the enforceability of the remaining terms and 399 | conditions. 400 | 401 | c. No term or condition of this Public License will be waived and no 402 | failure to comply consented to unless expressly agreed to by the 403 | Licensor. 404 | 405 | d. Nothing in this Public License constitutes or may be interpreted 406 | as a limitation upon, or waiver of, any privileges and immunities 407 | that apply to the Licensor or You, including from the legal 408 | processes of any jurisdiction or authority. 409 | 410 | 411 | ======================================================================= 412 | 413 | Creative Commons is not a party to its public licenses. 414 | Notwithstanding, Creative Commons may elect to apply one of its public 415 | licenses to material it publishes and in those instances will be 416 | considered the "Licensor." Except for the limited purpose of indicating 417 | that material is shared under a Creative Commons public license or as 418 | otherwise permitted by the Creative Commons policies published at 419 | creativecommons.org/policies, Creative Commons does not authorize the 420 | use of the trademark "Creative Commons" or any other trademark or logo 421 | of Creative Commons without its prior written consent including, 422 | without limitation, in connection with any unauthorized modifications 423 | to any of its public licenses or any other arrangements, 424 | understandings, or agreements concerning use of licensed material. For 425 | the avoidance of doubt, this paragraph does not form part of the public 426 | licenses. 427 | 428 | Creative Commons may be contacted at creativecommons.org. 429 | -------------------------------------------------------------------------------- /mdl/material.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * material-design-lite - Material Design Components in CSS, JS and HTML 3 | * @version v1.0.5 4 | * @license Apache-2.0 5 | * @copyright 2015 Google, Inc. 6 | * @link https://github.com/google/material-design-lite 7 | */ 8 | !function(){"use strict";function e(e,t){if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement("span");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement("span");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener("click",function(s){s.preventDefault();var i=e.href.split("#")[1],n=t.element_.querySelector("#"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)})}}function t(e,t,s,i){if(e){if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var n=document.createElement("span");n.classList.add(i.CssClasses_.RIPPLE_CONTAINER),n.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var a=document.createElement("span");a.classList.add(i.CssClasses_.RIPPLE),n.appendChild(a),e.appendChild(n)}e.addEventListener("click",function(n){n.preventDefault();var a=e.href.split("#")[1],l=i.content_.querySelector("#"+a);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),l.classList.add(i.CssClasses_.IS_ACTIVE)})}}var s={upgradeDom:function(e,t){},upgradeElement:function(e,t){},upgradeElements:function(e){},upgradeAllRegistered:function(){},registerUpgradedCallback:function(e,t){},register:function(e){},downgradeElements:function(e){}};s=function(){function e(e,t){for(var s=0;sd;d++){if(r=l[d],!r)throw new Error("Unable to find a registered component for the given class.");a.push(r.className),i.setAttribute("data-upgraded",a.join(","));var h=new r.classConstructor(i);h[C]=r,p.push(h);for(var u=0,m=r.callbacks.length;m>u;u++)r.callbacks[u](i);r.widget&&(i[r.className]=h);var E=document.createEvent("Events");E.initEvent("mdl-componentupgraded",!0,!0),i.dispatchEvent(E)}}function a(e){Array.isArray(e)||(e="function"==typeof e.item?Array.prototype.slice.call(e):[e]);for(var t,s=0,i=e.length;i>s;s++)t=e[s],t instanceof HTMLElement&&(n(t),t.children.length>0&&a(t.children))}function l(t){var s="undefined"==typeof t.widget&&"undefined"==typeof t.widget,i=!0;s||(i=t.widget||t.widget);var n={classConstructor:t.constructor||t.constructor,className:t.classAsString||t.classAsString,cssClass:t.cssClass||t.cssClass,widget:i,callbacks:[]};if(c.forEach(function(e){if(e.cssClass===n.cssClass)throw new Error("The provided cssClass has already been registered: "+e.cssClass);if(e.className===n.className)throw new Error("The provided className has already been registered")}),t.constructor.prototype.hasOwnProperty(C))throw new Error("MDL component classes must not have "+C+" defined as a property.");var a=e(t.classAsString,n);a||c.push(n)}function o(t,s){var i=e(t);i&&i.callbacks.push(s)}function r(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},_.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},_.prototype.handleItemClick_=function(e){null!==e.target.getAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},_.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip="":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip="rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip="rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip="rect("+e+"px "+t+"px "+e+"px "+t+"px)":this.element_.style.clip=""},_.prototype.addAnimationEndListener_=function(){var e=function(){this.element_.removeEventListener("transitionend",e),this.element_.removeEventListener("webkitTransitionEnd",e),this.element_.classList.remove(this.CssClasses_.IS_ANIMATING)}.bind(this);this.element_.addEventListener("transitionend",e),this.element_.addEventListener("webkitTransitionEnd",e)},_.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a=this.maxRows&&e.preventDefault()},E.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},E.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},E.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty()},E.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},E.prototype.checkDisabled=E.prototype.checkDisabled,E.prototype.checkValidity=function(){this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID)},E.prototype.checkValidity=E.prototype.checkValidity,E.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},E.prototype.checkDirty=E.prototype.checkDirty,E.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},E.prototype.disable=E.prototype.disable,E.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},E.prototype.enable=E.prototype.enable,E.prototype.change=function(e){e?this.input_.value=e:this.input_.value="",this.updateClasses_()},E.prototype.change=E.prototype.change,E.prototype.init=function(){this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_&&(this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler)),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)))},E.prototype.mdlDowngrade_=function(){this.input_.removeEventListener("input",this.boundUpdateClassesHandler),this.input_.removeEventListener("focus",this.boundFocusHandler),this.input_.removeEventListener("blur",this.boundBlurHandler),this.boundKeyDownHandler&&this.input_.removeEventListener("keydown",this.boundKeyDownHandler)},s.register({constructor:E,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0});var L=function(e){this.element_=e,this.init()};window.MaterialTooltip=L,L.prototype.Constant_={},L.prototype.CssClasses_={IS_ACTIVE:"is-active"},L.prototype.handleMouseEnter_=function(e){e.stopPropagation();var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=-1*(this.element_.offsetWidth/2);0>s+i?(this.element_.style.left=0,this.element_.style.marginLeft=0):(this.element_.style.left=s+"px",this.element_.style.marginLeft=i+"px"),this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE),window.addEventListener("scroll",this.boundMouseLeaveHandler,!1),window.addEventListener("touchmove",this.boundMouseLeaveHandler,!1)},L.prototype.handleMouseLeave_=function(e){e.stopPropagation(),this.element_.classList.remove(this.CssClasses_.IS_ACTIVE),window.removeEventListener("scroll",this.boundMouseLeaveHandler),window.removeEventListener("touchmove",this.boundMouseLeaveHandler,!1)},L.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute("for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.getAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveHandler=this.handleMouseLeave_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("blur",this.boundMouseLeaveHandler),this.forElement_.addEventListener("touchstart",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveHandler))}},L.prototype.mdlDowngrade_=function(){this.forElement_&&(this.forElement_.removeEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("touchstart",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("mouseleave",this.boundMouseLeaveHandler))},s.register({constructor:L,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"});var I=function(e){this.element_=e,this.init()};window.MaterialLayout=I,I.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,MENU_ICON:"menu",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},I.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},I.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},I.prototype.contentScrollHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)||(this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)))},I.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN))},I.prototype.drawerToggleHandler_=function(){this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN)},I.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},I.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},I.prototype.resetTabState_=function(e){for(var t=0;t0?h.classList.add(this.CssClasses_.IS_ACTIVE):h.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=e.clientX?e.clientX:e.touches[0].clientX,o=e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(o-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},b.prototype.upHandler_=function(e){e&&2!==e.detail&&this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE),window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},b.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+"px",e&&(a="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-->0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},b.prototype.mdlDowngrade_=function(){this.element_.removeEventListener("mousedown",this.boundDownHandler),this.element_.removeEventListener("touchstart",this.boundDownHandler),this.element_.removeEventListener("mouseup",this.boundUpHandler),this.element_.removeEventListener("mouseleave",this.boundUpHandler),this.element_.removeEventListener("touchend",this.boundUpHandler),this.element_.removeEventListener("blur",this.boundUpHandler)},s.register({constructor:b,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1})}(); 10 | //# sourceMappingURL=material.min.js.map 11 | --------------------------------------------------------------------------------