var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "@angular/core", "../../config/config", "../ion", "../../util/util"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var config_1 = require("../../config/config");
var ion_1 = require("../ion");
var util_1 = require("../../util/util");
/**
* @name Spinner
* @description
* The `ion-spinner` component provides a variety of animated SVG spinners.
* Spinners enables you to give users feedback that the app is actively
* processing/thinking/waiting/chillin’ out, or whatever you’d like it to indicate.
* By default, the `ion-refresher` feature uses this spinner component while it's
* the refresher is in the `refreshing` state.
*
* Ionic offers a handful of spinners out of the box, and by default, it will use
* the appropriate spinner for the platform on which it’s running.
*
*
*
*
* ios
*
*
*
*
*
*
*
* ios-small
*
*
*
*
*
*
*
* bubbles
*
*
*
*
*
*
*
* circles
*
*
*
*
*
*
*
* crescent
*
*
*
*
*
*
*
* dots
*
*
*
*
*
*
*
* @usage
* The following code would use the default spinner for the platform it's
* running from. If it's neither iOS or Android, it'll default to use `ios`.
*
* ```html
*
* ```
*
* By setting the `name` property, you can specify which predefined spinner to
* use, no matter what the platform is.
*
* ```html
*
* ```
*
* ## Styling SVG with CSS
* One cool thing about SVG is its ability to be styled with CSS! One thing to note
* is that some of the CSS properties on an SVG element have different names. For
* example, SVG uses the term `stroke` instead of `border`, and `fill` instead
* of `background-color`.
*
* ```css
* ion-spinner * {
* width: 28px;
* height: 28px;
* stroke: #444;
* fill: #222;
* }
* ```
*/
var Spinner = (function (_super) {
__extends(Spinner, _super);
function Spinner(config, elementRef, renderer) {
var _this = _super.call(this, config, elementRef, renderer, 'spinner') || this;
_this._dur = null;
_this._paused = false;
return _this;
}
Object.defineProperty(Spinner.prototype, "name", {
/**
* @input {string} SVG spinner name.
*/
get: function () {
return this._name;
},
set: function (val) {
this._name = val;
this.load();
},
enumerable: true,
configurable: true
});
Object.defineProperty(Spinner.prototype, "duration", {
/**
* @input {string} How long it takes it to do one loop.
*/
get: function () {
return this._dur;
},
set: function (val) {
this._dur = val;
this.load();
},
enumerable: true,
configurable: true
});
Object.defineProperty(Spinner.prototype, "paused", {
/**
* @input {boolean} If true, pause the animation.
*/
get: function () {
return this._paused;
},
set: function (val) {
this._paused = util_1.isTrueProperty(val);
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
Spinner.prototype.ngOnInit = function () {
this._init = true;
this.load();
};
/**
* @hidden
*/
Spinner.prototype.load = function () {
if (this._init) {
this._l = [];
this._c = [];
var name = this._name || this._config.get('spinner', 'ios');
var spinner = SPINNERS[name];
if (spinner) {
if (spinner.lines) {
for (var i = 0, l = spinner.lines; i < l; i++) {
this._l.push(this._loadEle(spinner, i, l));
}
}
else if (spinner.circles) {
for (var i = 0, l = spinner.circles; i < l; i++) {
this._c.push(this._loadEle(spinner, i, l));
}
}
this.setElementClass("spinner-" + name, true);
this.setElementClass("spinner-" + this._mode + "-" + name, true);
}
}
};
Spinner.prototype._loadEle = function (spinner, index, total) {
var duration = this._dur || spinner.dur;
var data = spinner.fn(duration, index, total);
data.style.animationDuration = duration + 'ms';
return data;
};
Spinner.decorators = [
{ type: core_1.Component, args: [{
selector: 'ion-spinner',
template: '' +
'',
host: {
'[class.spinner-paused]': '_paused'
},
changeDetection: core_1.ChangeDetectionStrategy.OnPush,
encapsulation: core_1.ViewEncapsulation.None,
},] },
];
/** @nocollapse */
Spinner.ctorParameters = function () { return [
{ type: config_1.Config, },
{ type: core_1.ElementRef, },
{ type: core_1.Renderer, },
]; };
Spinner.propDecorators = {
'name': [{ type: core_1.Input },],
'duration': [{ type: core_1.Input },],
'paused': [{ type: core_1.Input },],
};
return Spinner;
}(ion_1.Ion));
exports.Spinner = Spinner;
var SPINNERS = {
ios: {
dur: 1000,
lines: 12,
fn: function (dur, index, total) {
var transform = 'rotate(' + (30 * index + (index < 6 ? 180 : -180)) + 'deg)';
var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
return {
y1: 17,
y2: 29,
style: {
transform: transform,
webkitTransform: transform,
animationDelay: animationDelay,
webkitAnimationDelay: animationDelay
}
};
}
},
'ios-small': {
dur: 1000,
lines: 12,
fn: function (dur, index, total) {
var transform = 'rotate(' + (30 * index + (index < 6 ? 180 : -180)) + 'deg)';
var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
return {
y1: 12,
y2: 20,
style: {
transform: transform,
webkitTransform: transform,
animationDelay: animationDelay,
webkitAnimationDelay: animationDelay
}
};
}
},
bubbles: {
dur: 1000,
circles: 9,
fn: function (dur, index, total) {
var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
return {
r: 5,
style: {
top: (9 * Math.sin(2 * Math.PI * index / total)) + 'px',
left: (9 * Math.cos(2 * Math.PI * index / total)) + 'px',
animationDelay: animationDelay,
webkitAnimationDelay: animationDelay
}
};
}
},
circles: {
dur: 1000,
circles: 8,
fn: function (dur, index, total) {
var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
return {
r: 5,
style: {
top: (9 * Math.sin(2 * Math.PI * index / total)) + 'px',
left: (9 * Math.cos(2 * Math.PI * index / total)) + 'px',
animationDelay: animationDelay,
webkitAnimationDelay: animationDelay
}
};
}
},
crescent: {
dur: 750,
circles: 1,
fn: function () {
return {
r: 26,
style: {}
};
}
},
dots: {
dur: 750,
circles: 3,
fn: function (_dur, index) {
var animationDelay = -(110 * index) + 'ms';
return {
r: 6,
style: {
left: (9 - (9 * index)) + 'px',
animationDelay: animationDelay,
webkitAnimationDelay: animationDelay
}
};
}
}
};
});
//# sourceMappingURL=spinner.js.map