├── .github ├── CODEOWNERS └── ISSUE_TEMPLATE.md ├── .gitignore ├── formatconfig.json ├── bower.json ├── .npmignore ├── wct.conf.json ├── manifest.json ├── hero.svg ├── test ├── index.html └── basic.html ├── package.json ├── .travis.yml ├── README.md ├── CONTRIBUTING.md ├── demo └── index.html └── paper-progress.js /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @bicknellr 2 | /.travis.yml @azakus 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bower_components* 2 | bower-*.json 3 | node_modules 4 | *.d.ts 5 | *.tgz 6 | -------------------------------------------------------------------------------- /formatconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "style": { 3 | "ReflowComments": false 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "paper-progress", 3 | "license": "http://polymer.github.io/LICENSE.txt" 4 | } 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.tgz 2 | .github 3 | .travis.yml 4 | formatconfig.json 5 | gen-tsd.json 6 | test/ 7 | wct.conf.json 8 | -------------------------------------------------------------------------------- /wct.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": { 3 | "local": { 4 | "browserOptions": { 5 | "chrome": [ 6 | "no-sandbox", 7 | "headless", 8 | "disable-gpu" 9 | ], 10 | "firefox": [ 11 | "-headless" 12 | ] 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "paper-progress.html": { 4 | "convertedUrl": "paper-progress.js", 5 | "exports": {} 6 | }, 7 | "index.html": { 8 | "convertedUrl": "index.html", 9 | "exports": {} 10 | }, 11 | "demo/index.html": { 12 | "convertedUrl": "demo/index.html", 13 | "exports": {} 14 | }, 15 | "test/basic.html": { 16 | "convertedUrl": "test/basic.html", 17 | "exports": {} 18 | }, 19 | "test/index.html": { 20 | "convertedUrl": "test/index.html", 21 | "exports": {} 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | ### Description 3 | 4 | 5 | ### Expected outcome 6 | 7 | 8 | 9 | ### Actual outcome 10 | 11 | 12 | 13 | ### Live Demo 14 | 15 | 16 | ### Steps to reproduce 17 | 18 | 23 | 24 | ### Browsers Affected 25 | 26 | - [ ] Chrome 27 | - [ ] Firefox 28 | - [ ] Safari 9 29 | - [ ] Safari 8 30 | - [ ] Safari 7 31 | - [ ] Edge 32 | - [ ] IE 11 33 | - [ ] IE 10 34 | -------------------------------------------------------------------------------- /hero.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | Tests 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "A material design progress bar", 3 | "keywords": [ 4 | "web-components", 5 | "polymer", 6 | "progress", 7 | "loading" 8 | ], 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/PolymerElements/paper-progress.git" 12 | }, 13 | "name": "@polymer/paper-progress", 14 | "license": "BSD-3-Clause", 15 | "devDependencies": { 16 | "webmat": "^0.2.0", 17 | "@polymer/iron-demo-helpers": "^3.0.1", 18 | "@polymer/paper-button": "^3.0.0-pre.26", 19 | "wct-browser-legacy": "^1.0.1", 20 | "@webcomponents/webcomponentsjs": "^2.0.0", 21 | "@polymer/gen-typescript-declarations": "^1.5.1" 22 | }, 23 | "scripts": { 24 | "format": "webmat", 25 | "generate-types": "gen-typescript-declarations --deleteExisting --outDir . --verify", 26 | "prepare": "npm run generate-types" 27 | }, 28 | "version": "3.0.1", 29 | "main": "paper-progress.js", 30 | "author": "The Polymer Authors", 31 | "dependencies": { 32 | "@polymer/iron-flex-layout": "^3.0.0-pre.26", 33 | "@polymer/iron-range-behavior": "^3.0.0-pre.26", 34 | "@polymer/paper-styles": "^3.0.0-pre.26", 35 | "@polymer/polymer": "^3.0.0" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | sudo: 'false' 3 | before_script: 4 | - npm install -g polymer-cli 5 | - git checkout package-lock.json 6 | - >- 7 | npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m 8 | Project is not formatted. Please run "npm run format".' && false) 9 | env: 10 | global: 11 | - secure: >- 12 | X8mB1BGnbe4e5qR23gv/fjOFkK/NCzdRciYAPqy47g1PR/WUC7xUPUwBKkfTOCrSle4WWa5IxhP7N+NnOu88bFxJyxhhfONlj7O51CzJ1i7xFZx2J+CR3IvqEk8y6fvX6lMAdPfBA6vMk4ymIVa3K0hvIhbsDJofhYmPaYQVkD+jFCpbkpZKS2XT+wPz/rQaBWW5vjsv2bgjX23NHLDiWHIkv9SV3I03M8VZiKKK3hm5o7bRR83HHtAOcr2csRoVuq+YMdRBaPq0UCUH8UIT5VrG+oDZZgrnl9NNKbdTpwlg6TmGDtL+dOIAEw+TRbFNX1+98pbCxZSqJNIMPdhXq0PNc2MyVYUwwSUJiFc1Y/H69B9aLAiApwLFZ22/ff9Ub3xP+KtWO7YK5kEYfb3OZNk/o+bw8Ec8a67PS6ybwJ5GmA6erDLNXDS2NiVlyxtA3MvQZR2LIEeLXI+iYvofriyVlkyK74ND+XVVdv0H9TaV2LtY1Zd3XPrxuXO2ZCF7sE11IXPIYzrDnzwzSHXXY9f1mqX7eYiCFOEdMsnluuBY19O7YFnGG7wGpogt3nEkt/drOaQVJS8UGka45eK7JGbaWv/YrU5TV6zYkRTbFzACGkCR40nTmZ/Dsy9FWug3UKlatpxpEsmAgq3xnXKh3RxHPfn9jFFeKCrhF7247kI= 13 | - secure: >- 14 | R0o3lcEGxuHTeRY+NpJOleG2tDJHqaeT0nU8PBXWifH5av89hCOcFcHWfpUvOIUXc70YL+pN4lwAT1vK2SpFJ3cgzElOfNiipMKCq1YVbBjyLdVO+W9zg/80A22Er6aNJcqvYBmViiHEDBEgBbAQweTKxfanVZffLM7uGAwYsF08OITgyUhKy7ohWnG1chhKZxGSRrxvNlBJ9T54pXvR5mHLkzY6w2gHFOy8FiK3opbPBQPqF2WgkVMHZJ1KiwLGrH1i37oOaYqU7soIZ2ldyAh+mW02I1pCA0cqpf8/twS3axj5Izm9zwzA/ELVcgIkCcpa/peNN8+vUPIlMubr3YU4NpKlgkFo3aY5PKLy3Ar7M2iTu1Shgi9SlZ1atSrRSkAPehAAmnx24KTAd/tHOEdawbIo0hPnt0kWkABHQd8G4WAa9M7PQLJXBZWt5MRHcgCrm4gmpn2lBP+pE1MC6ZdkU3Fp//UOxxYJ+B5VqNIhDfJNAMRWNavzzZ9tI/psruvT5+5onTlvU//YhrCkRzzO0ZSoH7L55/ESnpWgwlVsN0V6L5kZcjgWE5nLG1JaZ5JCNruOorvjmBg5MJ+iRYpWA3JCgaw49d97Gt9OulhaRD/q18F2b9cbfuFPj8RgR1wKljcvqa8XUavnjjLzP3QsB4PsGjAqYQv6SLBrGoM= 15 | node_js: node 16 | addons: 17 | firefox: latest 18 | chrome: stable 19 | script: 20 | - xvfb-run polymer test --module-resolution=node --npm 21 | - >- 22 | if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test 23 | --module-resolution=node --npm -s 'default'; fi 24 | dist: trusty 25 | cache: 26 | directories: 27 | - node_modules 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Published on NPM](https://img.shields.io/npm/v/@polymer/paper-progress.svg)](https://www.npmjs.com/package/@polymer/paper-progress) 2 | [![Build status](https://travis-ci.org/PolymerElements/paper-progress.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-progress) 3 | [![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://webcomponents.org/element/@polymer/paper-progress) 4 | 5 | ## <paper-progress> 6 | 7 | The progress bars are for situations where the percentage completed can be 8 | determined. They give users a quick sense of how much longer an operation 9 | will take. 10 | 11 | There is also a secondary progress which is useful for displaying intermediate 12 | progress, such as the buffer level during a streaming playback progress bar. 13 | 14 | See: [Documentation](https://www.webcomponents.org/element/@polymer/paper-progress), 15 | [Demo](https://www.webcomponents.org/element/@polymer/paper-progress/demo/demo/index.html). 16 | 17 | ## Usage 18 | 19 | ### Installation 20 | ``` 21 | npm install --save @polymer/paper-progress 22 | ``` 23 | 24 | ### In an html file 25 | ```html 26 | 27 | 28 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | ``` 39 | ### In a Polymer 3 element 40 | ```js 41 | import {PolymerElement, html} from '@polymer/polymer'; 42 | import '@polymer/paper-progress/paper-progress.js'; 43 | 44 | class SampleElement extends PolymerElement { 45 | static get template() { 46 | return html` 47 | 48 | 49 | 50 | `; 51 | } 52 | } 53 | customElements.define('sample-element', SampleElement); 54 | ``` 55 | 56 | ## Contributing 57 | If you want to send a PR to this element, here are 58 | the instructions for running the tests and demo locally: 59 | 60 | ### Installation 61 | ```sh 62 | git clone https://github.com/PolymerElements/paper-progress 63 | cd paper-progress 64 | npm install 65 | npm install -g polymer-cli 66 | ``` 67 | 68 | ### Running the demo locally 69 | ```sh 70 | polymer serve --npm 71 | open http://127.0.0.1:/demo/ 72 | ``` 73 | 74 | ### Running the tests 75 | ```sh 76 | polymer test --npm 77 | ``` 78 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 13 | 14 | # Polymer Elements 15 | ## Guide for Contributors 16 | 17 | Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines: 18 | 19 | ### Filing Issues 20 | 21 | **If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions: 22 | 23 | 1. **Who will use the feature?** _“As someone filling out a form…”_ 24 | 2. **When will they use the feature?** _“When I enter an invalid value…”_ 25 | 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_ 26 | 27 | **If you are filing an issue to report a bug**, please provide: 28 | 29 | 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug: 30 | 31 | ```markdown 32 | The `paper-foo` element causes the page to turn pink when clicked. 33 | 34 | ## Expected outcome 35 | 36 | The page stays the same color. 37 | 38 | ## Actual outcome 39 | 40 | The page turns pink. 41 | 42 | ## Steps to reproduce 43 | 44 | 1. Put a `paper-foo` element in the page. 45 | 2. Open the page in a web browser. 46 | 3. Click the `paper-foo` element. 47 | ``` 48 | 49 | 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 50 | 51 | 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. 52 | 53 | ### Submitting Pull Requests 54 | 55 | **Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request. 56 | 57 | When submitting pull requests, please provide: 58 | 59 | 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: 60 | 61 | ```markdown 62 | (For a single issue) 63 | Fixes #20 64 | 65 | (For multiple issues) 66 | Fixes #32, fixes #40 67 | ``` 68 | 69 | 2. **A succinct description of the design** used to fix any related issues. For example: 70 | 71 | ```markdown 72 | This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked. 73 | ``` 74 | 75 | 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered. 76 | 77 | If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that! 78 | -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | paper-progress demo 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 33 | 34 | 35 | 46 | 47 | 48 | 49 | 50 |
51 |

paper-progress can be imperatively controlled

52 | 53 | 60 | 61 | 62 |

paper-progress can be indeterminate with a custom duration

63 | 64 | 75 | 76 | 77 |

It can be styled using custom properties

78 | 79 | 102 | 103 |
104 | 105 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /test/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | paper-progress test 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | 164 | 165 | 166 | 167 | -------------------------------------------------------------------------------- /paper-progress.js: -------------------------------------------------------------------------------- 1 | /** 2 | @license 3 | Copyright (c) 2015 The Polymer Project Authors. All rights reserved. 4 | This code may only be used under the BSD style license found at 5 | http://polymer.github.io/LICENSE.txt The complete set of authors may be found at 6 | http://polymer.github.io/AUTHORS.txt The complete set of contributors may be 7 | found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as 8 | part of the polymer project is also subject to an additional IP rights grant 9 | found at http://polymer.github.io/PATENTS.txt 10 | */ 11 | import '@polymer/polymer/polymer-legacy.js'; 12 | import '@polymer/iron-flex-layout/iron-flex-layout.js'; 13 | import '@polymer/paper-styles/color.js'; 14 | 15 | import {IronRangeBehavior} from '@polymer/iron-range-behavior/iron-range-behavior.js'; 16 | import {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js'; 17 | import {html} from '@polymer/polymer/lib/utils/html-tag.js'; 18 | 19 | /** 20 | Material design: [Progress & 21 | activity](https://www.google.com/design/spec/components/progress-activity.html) 22 | 23 | The progress bars are for situations where the percentage completed can be 24 | determined. They give users a quick sense of how much longer an operation 25 | will take. 26 | 27 | Example: 28 | 29 | 30 | 31 | There is also a secondary progress which is useful for displaying intermediate 32 | progress, such as the buffer level during a streaming playback progress bar. 33 | 34 | Example: 35 | 36 | 37 | 38 | ### Styling progress bar: 39 | 40 | To change the active progress bar color: 41 | 42 | paper-progress { 43 | --paper-progress-active-color: #e91e63; 44 | } 45 | 46 | To change the secondary progress bar color: 47 | 48 | paper-progress { 49 | --paper-progress-secondary-color: #f8bbd0; 50 | } 51 | 52 | To change the progress bar background color: 53 | 54 | paper-progress { 55 | --paper-progress-container-color: #64ffda; 56 | } 57 | 58 | Add the class `transiting` to a paper-progress to animate the progress bar when 59 | the value changed. You can also customize the transition: 60 | 61 | paper-progress { 62 | --paper-progress-transition-duration: 0.08s; 63 | --paper-progress-transition-timing-function: ease; 64 | --paper-progress-transition-delay: 0s; 65 | } 66 | 67 | To change the duration of the indeterminate cycle: 68 | 69 | paper-progress { 70 | --paper-progress-indeterminate-cycle-duration: 2s; 71 | } 72 | 73 | The following mixins are available for styling: 74 | 75 | Custom property | Description | Default 76 | ----------------|-------------|--------- 77 | `--paper-progress-container` | Mixin applied to container | `{}` 78 | `--paper-progress-transition-duration` | Duration of the transition | `0.08s` 79 | `--paper-progress-transition-timing-function` | The timing function for the transition | `ease` 80 | `--paper-progress-transition-delay` | delay for the transition | `0s` 81 | `--paper-progress-container-color` | Color of the container | `--google-grey-300` 82 | `--paper-progress-active-color` | The color of the active bar | `--google-green-500` 83 | `--paper-progress-secondary-color` | The color of the secondary bar | `--google-green-100` 84 | `--paper-progress-disabled-active-color` | The color of the active bar if disabled | `--google-grey-500` 85 | `--paper-progress-disabled-secondary-color` | The color of the secondary bar if disabled | `--google-grey-300` 86 | `--paper-progress-height` | The height of the progress bar | `4px` 87 | `--paper-progress-indeterminate-cycle-duration` | Duration of an indeterminate cycle | `2s` 88 | 89 | @group Paper Elements 90 | @element paper-progress 91 | @demo demo/index.html 92 | */ 93 | Polymer({ 94 | /** @override */ 95 | _template: html` 96 | 254 | 255 |
256 |
257 |
258 |
259 | `, 260 | 261 | is: 'paper-progress', 262 | behaviors: [IronRangeBehavior], 263 | 264 | properties: { 265 | /** 266 | * The number that represents the current secondary progress. 267 | */ 268 | secondaryProgress: {type: Number, value: 0}, 269 | 270 | /** 271 | * The secondary ratio 272 | */ 273 | secondaryRatio: {type: Number, value: 0, readOnly: true}, 274 | 275 | /** 276 | * Use an indeterminate progress indicator. 277 | */ 278 | indeterminate: 279 | {type: Boolean, value: false, observer: '_toggleIndeterminate'}, 280 | 281 | /** 282 | * True if the progress is disabled. 283 | */ 284 | disabled: { 285 | type: Boolean, 286 | value: false, 287 | reflectToAttribute: true, 288 | observer: '_disabledChanged' 289 | } 290 | }, 291 | 292 | observers: 293 | ['_progressChanged(secondaryProgress, value, min, max, indeterminate)'], 294 | 295 | hostAttributes: {role: 'progressbar'}, 296 | 297 | _toggleIndeterminate: function(indeterminate) { 298 | // If we use attribute/class binding, the animation sometimes doesn't 299 | // translate properly on Safari 7.1. So instead, we toggle the class here in 300 | // the update method. 301 | this.toggleClass('indeterminate', indeterminate, this.$.primaryProgress); 302 | }, 303 | 304 | _transformProgress: function(progress, ratio) { 305 | var transform = 'scaleX(' + (ratio / 100) + ')'; 306 | progress.style.transform = progress.style.webkitTransform = transform; 307 | }, 308 | 309 | _mainRatioChanged: function(ratio) { 310 | this._transformProgress(this.$.primaryProgress, ratio); 311 | }, 312 | 313 | _progressChanged: function( 314 | secondaryProgress, value, min, max, indeterminate) { 315 | secondaryProgress = this._clampValue(secondaryProgress); 316 | value = this._clampValue(value); 317 | 318 | var secondaryRatio = this._calcRatio(secondaryProgress) * 100; 319 | var mainRatio = this._calcRatio(value) * 100; 320 | 321 | this._setSecondaryRatio(secondaryRatio); 322 | this._transformProgress(this.$.secondaryProgress, secondaryRatio); 323 | this._transformProgress(this.$.primaryProgress, mainRatio); 324 | 325 | this.secondaryProgress = secondaryProgress; 326 | 327 | if (indeterminate) { 328 | this.removeAttribute('aria-valuenow'); 329 | } else { 330 | this.setAttribute('aria-valuenow', value); 331 | } 332 | this.setAttribute('aria-valuemin', min); 333 | this.setAttribute('aria-valuemax', max); 334 | }, 335 | 336 | _disabledChanged: function(disabled) { 337 | this.setAttribute('aria-disabled', disabled ? 'true' : 'false'); 338 | }, 339 | 340 | _hideSecondaryProgress: function(secondaryRatio) { 341 | return secondaryRatio === 0; 342 | } 343 | }); 344 | --------------------------------------------------------------------------------