123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';
- import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
- import _createClass from 'babel-runtime/helpers/createClass';
- import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
- import _inherits from 'babel-runtime/helpers/inherits';
- /*
- Copyright 2013-2015 ASIAL CORPORATION
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- */
-
- import onsElements from '../ons/elements';
- import util from '../ons/util';
- import autoStyle from '../ons/autostyle';
- import ModifierUtil from '../ons/internal/modifier-util';
- import BaseElement from './base/base-element';
- import contentReady from '../ons/content-ready';
-
- var scheme = {
- '.progress-circular': 'progress-circular--*',
- '.progress-circular__background': 'progress-circular--*__background',
- '.progress-circular__primary': 'progress-circular--*__primary',
- '.progress-circular__secondary': 'progress-circular--*__secondary'
- };
-
- var template = util.createElement('\n <svg class="progress-circular">\n <circle class="progress-circular__background" />\n <circle class="progress-circular__secondary" cx="50%" cy="50%" r="40%" />\n <circle class="progress-circular__primary" cx="50%" cy="50%" r="40%" />\n </svg>\n');
-
- var INDET = 'indeterminate';
-
- /**
- * @element ons-progress-circular
- * @category visual
- * @description
- * [en]
- * This component displays a circular progress indicator. It can either be used to show how much of a task has been completed or to show a looping animation to indicate that an operation is currently running.
- * [/en]
- * [ja][/ja]
- * @codepen EVzMjR
- * @tutorial vanilla/Reference/progress-circular
- * @seealso ons-progress-bar
- * [en]The `<ons-progress-bar>` component displays a bar progress indicator.[/en]
- * [ja][/ja]
- * @example
- * <ons-progress-circular
- * value="55"
- * secondary-value="87">
- * </ons-progress-circular>
- *
- * <ons-progress-circular
- * indeterminate>
- * </ons-progress-circular>
- */
-
- var ProgressCircularElement = function (_BaseElement) {
- _inherits(ProgressCircularElement, _BaseElement);
-
- /**
- * @attribute modifier
- * @type {String}
- * @description
- * [en]Change the appearance of the progress indicator.[/en]
- * [ja]プログレスインジケータの見た目を変更します。[/ja]
- */
-
- /**
- * @attribute value
- * @type {Number}
- * @description
- * [en]Current progress. Should be a value between 0 and 100.[/en]
- * [ja]現在の進行状況の値を指定します。0から100の間の値を指定して下さい。[/ja]
- */
-
- /**
- * @attribute secondary-value
- * @type {Number}
- * @description
- * [en]Current secondary progress. Should be a value between 0 and 100.[/en]
- * [ja]現在の2番目の進行状況の値を指定します。0から100の間の値を指定して下さい。[/ja]
- */
-
- /**
- * @attribute indeterminate
- * @description
- * [en]If this attribute is set, an infinite looping animation will be shown.[/en]
- * [ja]この属性が設定された場合、ループするアニメーションが表示されます。[/ja]
- */
-
- function ProgressCircularElement() {
- _classCallCheck(this, ProgressCircularElement);
-
- var _this = _possibleConstructorReturn(this, (ProgressCircularElement.__proto__ || _Object$getPrototypeOf(ProgressCircularElement)).call(this));
-
- contentReady(_this, function () {
- return _this._compile();
- });
- return _this;
- }
-
- _createClass(ProgressCircularElement, [{
- key: 'attributeChangedCallback',
- value: function attributeChangedCallback(name, last, current) {
- if (name === 'modifier') {
- ModifierUtil.onModifierChanged(last, current, this, scheme);
- this.hasAttribute(INDET) && this._updateDeterminate();
- } else if (name === 'value' || name === 'secondary-value') {
- this._updateValue();
- } else if (name === INDET) {
- this._updateDeterminate();
- }
- }
- }, {
- key: '_updateDeterminate',
- value: function _updateDeterminate() {
- var _this2 = this;
-
- contentReady(this, function () {
- return util.toggleModifier(_this2, INDET, { force: _this2.hasAttribute(INDET) });
- });
- }
- }, {
- key: '_updateValue',
- value: function _updateValue() {
- var _this3 = this;
-
- if (this.hasAttribute('value')) {
- contentReady(this, function () {
- var per = Math.ceil(_this3.getAttribute('value') * 251.32 * 0.01);
- _this3._primary.style['stroke-dasharray'] = per + '%, 251.32%';
- });
- }
- if (this.hasAttribute('secondary-value')) {
- contentReady(this, function () {
- var per = Math.ceil(_this3.getAttribute('secondary-value') * 251.32 * 0.01);
- _this3._secondary.style.display = null;
- _this3._secondary.style['stroke-dasharray'] = per + '%, 251.32%';
- });
- } else {
- contentReady(this, function () {
- _this3._secondary.style.display = 'none';
- });
- }
- }
-
- /**
- * @property value
- * @type {Number}
- * @description
- * [en]Current progress. Should be a value between 0 and 100.[/en]
- * [ja]現在の進行状況の値を指定します。0から100の間の値を指定して下さい。[/ja]
- */
-
- }, {
- key: '_compile',
- value: function _compile() {
- if (this._isCompiled()) {
- this._template = util.findChild(this, '.progress-circular');
- } else {
- this._template = template.cloneNode(true);
- }
-
- this._primary = util.findChild(this._template, '.progress-circular__primary');
- this._secondary = util.findChild(this._template, '.progress-circular__secondary');
-
- this._updateDeterminate();
- this._updateValue();
-
- this.appendChild(this._template);
-
- autoStyle.prepare(this);
- ModifierUtil.initModifier(this, scheme);
- }
- }, {
- key: '_isCompiled',
- value: function _isCompiled() {
- if (!util.findChild(this, '.progress-circular')) {
- return false;
- }
-
- var svg = util.findChild(this, '.progress-circular');
-
- if (!util.findChild(svg, '.progress-circular__secondary')) {
- return false;
- }
-
- if (!util.findChild(svg, '.progress-circular__primary')) {
- return false;
- }
-
- return true;
- }
- }, {
- key: 'value',
- set: function set(value) {
- if (typeof value !== 'number' || value < 0 || value > 100) {
- util.throw('Invalid value');
- }
-
- this.setAttribute('value', Math.floor(value));
- },
- get: function get() {
- return parseInt(this.getAttribute('value') || '0');
- }
-
- /**
- * @property secondaryValue
- * @type {Number}
- * @description
- * [en]Current secondary progress. Should be a value between 0 and 100.[/en]
- * [ja]現在の2番目の進行状況の値を指定します。0から100の間の値を指定して下さい。[/ja]
- */
-
- }, {
- key: 'secondaryValue',
- set: function set(value) {
- if (typeof value !== 'number' || value < 0 || value > 100) {
- util.throw('Invalid value');
- }
-
- this.setAttribute('secondary-value', Math.floor(value));
- },
- get: function get() {
- return parseInt(this.getAttribute('secondary-value') || '0');
- }
-
- /**
- * @property indeterminate
- * @type {Boolean}
- * @description
- * [en]If this property is `true`, an infinite looping animation will be shown.[/en]
- * [ja]この属性が設定された場合、ループするアニメーションが表示されます。[/ja]
- */
-
- }, {
- key: 'indeterminate',
- set: function set(value) {
- if (value) {
- this.setAttribute(INDET, '');
- } else {
- this.removeAttribute(INDET);
- }
- },
- get: function get() {
- return this.hasAttribute(INDET);
- }
- }], [{
- key: 'observedAttributes',
- get: function get() {
- return ['modifier', 'value', 'secondary-value', INDET];
- }
- }]);
-
- return ProgressCircularElement;
- }(BaseElement);
-
- export default ProgressCircularElement;
-
-
- onsElements.ProgressCircular = ProgressCircularElement;
- customElements.define('ons-progress-circular', ProgressCircularElement);
|