mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
chore(release): v0.9.26 "rabbit"
This commit is contained in:
81
CHANGELOG.md
81
CHANGELOG.md
@@ -1,3 +1,84 @@
|
||||
<a name="0.9.26"></a>
|
||||
### 0.9.26 "Rabbit" (2014-02-26)
|
||||
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* **actionsheet:** Actionsheet in modal has pointer-events enabled, closes #660 ([1503cc72](http://github.com/driftyco/ionic/commit/1503cc7213c13e87804c210dea7465931e972f4a))
|
||||
* **click:** event.preventDefault() when setting focus() on an input, closes 583 ([fc8ab4b8](http://github.com/driftyco/ionic/commit/fc8ab4b8ea9b89bd3446b835476950bb70bba879))
|
||||
* **ionContent:**
|
||||
* Update scss for ion-infinite-scroll element ([788df524](http://github.com/driftyco/ionic/commit/788df5243dc5300204171bcd40bf1e20fe610dbe))
|
||||
* Use new name to find ion-infinite-scroll element ([1702f5c9](http://github.com/driftyco/ionic/commit/1702f5c916dda20957761fd1e7b30d5f9bc1b6b4))
|
||||
* **ionPrefix:** disableRegisterByTagName updated w/ `ion-` prefix for correct view history ([2494b5f9](http://github.com/driftyco/ionic/commit/2494b5f988991b97c278102f0da385e9cde00aee))
|
||||
* **ionSideMenu:** use manual transclude instead of ngTransclude ([991d3cfd](http://github.com/driftyco/ionic/commit/991d3cfda1831467e38c176c69f0ecd084c86e50), closes [#666](http://github.com/driftyco/ionic/issues/666))
|
||||
* **ionTabs:** cleanup and fix many issues ([0f1b6f47](http://github.com/driftyco/ionic/commit/0f1b6f47b8ee4c72facc269da2b648bb9cc397e0), closes [#597](http://github.com/driftyco/ionic/issues/597))
|
||||
* **ionicScrollDelegate:**
|
||||
* do not error if no scrollTop/Left values ([9e942f89](http://github.com/driftyco/ionic/commit/9e942f894b037284a2e36ff14d3615f076b84447), closes [#659](http://github.com/driftyco/ionic/issues/659)
|
||||
* **item:** degrade .item right arrows by grade for low end devices ([3a69bb34](http://github.com/driftyco/ionic/commit/3a69bb3452944bc4d1764c7605aad0824cbb758c))
|
||||
* **loading:** make showDelay option work correctly ([7281e2ab](http://github.com/driftyco/ionic/commit/7281e2abf0f6f624f296191b3f322227089e3658), closes [#562](http://github.com/driftyco/ionic/issues/562))
|
||||
* **modal:**
|
||||
* Fix modal animation for firefox, closes #671 ([0033c880](http://github.com/driftyco/ionic/commit/0033c8809a810c8b518ca68a9ada5704a7f6e9c9))
|
||||
* **navBar:**
|
||||
* animations, hide back button, no flicker ([465ea769](http://github.com/driftyco/ionic/commit/465ea76969b348b3074747dcd4cebf0861a38e6d), closes [#653](http://github.com/driftyco/ionic/issues/653))
|
||||
* **platform:** Update ionic.Platform.is() to check all platforms, closes #604 ([fcd0fa73](http://github.com/driftyco/ionic/commit/fcd0fa73c4125593e6efce6b6410586f5a27fc02))
|
||||
* **sideMenu:** remove translate3d when not needed, close #636 ([07092f00](http://github.com/driftyco/ionic/commit/07092f009cfa2b52b2dc2fdb915b237bd8c37dfa))
|
||||
* **slideBox:** make `does-continue` attribute work continuously ([f6ec6a3c](http://github.com/driftyco/ionic/commit/f6ec6a3c89116174541c2fb08194a04ada92065b), closes [#575](http://github.com/driftyco/ionic/issues/575))
|
||||
* **tabs:**
|
||||
* Double tapping a tab would set the wrong view history, closes #656 ([f0faae16](http://github.com/driftyco/ionic/commit/f0faae16574b1247b6f5b1fa0180cfb9248804a1))
|
||||
* **text-rendering:** Disable text-rendering:optimizeLegibility for low end devices ([10289466](http://github.com/driftyco/ionic/commit/10289466162f4efa36dc902052b78e42d0df0b2d))
|
||||
* **thumbnail:** Correctly apply thumbnail style to item directive, closes #509 ([977c1cc6](http://github.com/driftyco/ionic/commit/977c1cc6e511d752e083081adbed9f8fda1d0312))
|
||||
* **transform:** Polyfill `style.transform` to work w/ non-webkit ([52671c18](http://github.com/driftyco/ionic/commit/52671c18f97d057aca581a566cc7ea27cc055314))
|
||||
|
||||
|
||||
#### Features
|
||||
|
||||
* **grade:** Set grade in body class depending on platform performance ([b69b40c8](http://github.com/driftyco/ionic/commit/b69b40c82684acf3003f19277a44caf4614c75e4))
|
||||
* **ionContent:** use child scope instead of isolate scope ([49e0dac9](http://github.com/driftyco/ionic/commit/49e0dac9992d60ca098eb1dbd1acecbc74eae85c), closes [#555](http://github.com/driftyco/ionic/issues/555))
|
||||
* **ionInfiniteScroll:** use event system ([7b0716c2](http://github.com/driftyco/ionic/commit/7b0716c23c44fe5530526c86d590111382f991d7), closes [#661](http://github.com/driftyco/ionic/issues/661))
|
||||
* **ionNavAnimation:** `<a href="#/page" ion-nav-animation="slide-in-up">` ([8354d42b](http://github.com/driftyco/ionic/commit/8354d42b4b049e97bd93ce8ebacf047284a8fad1))
|
||||
* **item:** Auto right-arrow for complex list items w/ ng-click/href, closes #472 ([327a6866](http://github.com/driftyco/ionic/commit/327a686626c81072df8e055c8be220144fade26a))
|
||||
([110ff9f4](http://github.com/driftyco/ionic/commit/110ff9f47583c7f04bcf5b1eebea6d7bd0b25e99), closes [#243](http://github.com/driftyco/ionic/issues/243))
|
||||
* **sass:** All variables now have !default assigned, closes #631 ([53af2c7a](http://github.com/driftyco/ionic/commit/53af2c7a0177f9bcd2b43d9179832a319ecb8f7f))
|
||||
* **scrollbar:** Do not use rgba background for scrollbar on grade-b and c devices ([805c35c1](http://github.com/driftyco/ionic/commit/805c35c1f119530777498177016bb0c448e92b90))
|
||||
* **sideMenu:**
|
||||
* Degrade .menu-content box-shadow w/ platform grade for animation performance ([d2a0780b](http://github.com/driftyco/ionic/commit/d2a0780bbac5b17525def8b75c5c58c168675631))
|
||||
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* The binding for ionInfiniteScroll has changed, as well
|
||||
as how you finish it.
|
||||
|
||||
If you had this code before:
|
||||
|
||||
```html
|
||||
<ion-content on-infinite-scroll="doSomething"></ion-content>
|
||||
```
|
||||
```js
|
||||
function MyCtrl($scope) {
|
||||
$scope.doSomething = function(scrollDoneCallback) {
|
||||
doSomething();
|
||||
scrollDoneCallback();
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Now, your code should look like this:
|
||||
|
||||
```html
|
||||
<ion-content on-infinite-scroll="doSomething()"></ion-content>
|
||||
```
|
||||
```js
|
||||
function MyCtrl($scope) {
|
||||
$scope.doSomething = function() {
|
||||
doSomething();
|
||||
$scope.$broadcast('scroll.infiniteScrollComplete');
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
<a name="0.9.25"></a>
|
||||
### 0.9.25 "Quokka" (2014-02-19)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ionic",
|
||||
"version": "0.9.25",
|
||||
"version": "0.9.26",
|
||||
"homepage": "https://github.com/driftyco/ionic",
|
||||
"authors": [
|
||||
"Max Lynch <max@drifty.com>",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"repo": "driftyco/ionic",
|
||||
"development": {},
|
||||
"version": "0.9.25",
|
||||
"version": "0.9.26",
|
||||
"styles": [
|
||||
"dist/css/ionic.css"
|
||||
],
|
||||
|
||||
10
package.json
10
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "ionic",
|
||||
"private": false,
|
||||
"version": "0.9.26-alpha",
|
||||
"codename": "rabbit",
|
||||
"version": "0.10.0-alpha",
|
||||
"codename": "salamander",
|
||||
"repository": {
|
||||
"url": "git://github.com/driftyco/ionic.git"
|
||||
},
|
||||
@@ -17,7 +17,7 @@
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-ddescribe-iit": "0.0.4",
|
||||
"grunt-merge-conflict": "0.0.2",
|
||||
"grunt-sass": "~0.10.0",
|
||||
"grunt-sass": "~0.10.0-alpha",
|
||||
"grunt-string-replace": "~0.2.7",
|
||||
"karma": "~0.11.13",
|
||||
"karma-chrome-launcher": "~0.1.2",
|
||||
@@ -29,9 +29,7 @@
|
||||
"grunt-remove-logging": "~0.2.0",
|
||||
"grunt-conventional-changelog": "~1.1.0",
|
||||
"grunt-contrib-connect": "^0.6.0",
|
||||
"sauce-connect-launcher": "^0.2.2",
|
||||
"dgeni": "^0.1.1",
|
||||
"dgeni-packages": "^0.2.4"
|
||||
"sauce-connect-launcher": "^0.2.2"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Copyright 2014 Drifty Co.
|
||||
* http://drifty.com/
|
||||
*
|
||||
* Ionic, v0.9.25
|
||||
* Ionic, v0.9.26
|
||||
* A powerful HTML5 mobile app framework.
|
||||
* http://ionicframework.com/
|
||||
*
|
||||
@@ -14,7 +14,7 @@
|
||||
/*!
|
||||
Ionicons, v#{$ionicons-version}
|
||||
Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
|
||||
https://twitter.com/helloimben https://twitter.com/ionicframework
|
||||
https://twitter.com/benjsperry https://twitter.com/ionicframework
|
||||
MIT License: https://github.com/driftyco/ionicons
|
||||
*/
|
||||
@font-face {
|
||||
@@ -1953,7 +1953,7 @@ table {
|
||||
a {
|
||||
-webkit-user-drag: none;
|
||||
-webkit-tap-highlight-color: transparent; }
|
||||
a:hover {
|
||||
a[href]:hover {
|
||||
cursor: pointer; }
|
||||
|
||||
img {
|
||||
@@ -1963,7 +1963,6 @@ body, .ionic-body {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-text-size-adjust: none;
|
||||
-moz-text-size-adjust: none;
|
||||
text-size-adjust: none;
|
||||
@@ -1987,29 +1986,31 @@ body, .ionic-body {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
||||
line-height: 20px;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-user-drag: none; }
|
||||
|
||||
body.grade-b, body.grade-c {
|
||||
text-rendering: auto; }
|
||||
|
||||
.content {
|
||||
position: relative; }
|
||||
|
||||
.scroll-content {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
-webkit-backface-visibility: hidden;
|
||||
margin-top: -1px;
|
||||
width: auto;
|
||||
height: auto; }
|
||||
|
||||
.scroll-view {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
-webkit-backface-visibility: hidden;
|
||||
margin-top: -1px; }
|
||||
overflow: hidden;
|
||||
margin-top: -1px;
|
||||
height: 100%; }
|
||||
|
||||
/**
|
||||
* Scroll is the scroll view component available for complex and custom
|
||||
@@ -2040,25 +2041,25 @@ body, .ionic-body {
|
||||
visibility: hidden; }
|
||||
|
||||
.scroll-bar-h {
|
||||
height: 3px;
|
||||
left: 2px;
|
||||
right: 2px;
|
||||
bottom: 3px; }
|
||||
bottom: 3px;
|
||||
left: 2px;
|
||||
height: 3px; }
|
||||
.scroll-bar-h .scroll-bar-indicator {
|
||||
height: 100%; }
|
||||
|
||||
.scroll-bar-v {
|
||||
width: 3px;
|
||||
bottom: 2px;
|
||||
top: 2px;
|
||||
right: 3px; }
|
||||
right: 3px;
|
||||
bottom: 2px;
|
||||
width: 3px; }
|
||||
.scroll-bar-v .scroll-bar-indicator {
|
||||
width: 100%; }
|
||||
|
||||
.scroll-bar-indicator {
|
||||
position: absolute;
|
||||
background: rgba(0, 0, 0, 0.3);
|
||||
border-radius: 4px;
|
||||
background: rgba(0, 0, 0, 0.3);
|
||||
opacity: 1; }
|
||||
.scroll-bar-indicator.scroll-bar-fade-out {
|
||||
-webkit-transition: opacity 0.3s linear;
|
||||
@@ -2066,37 +2067,45 @@ body, .ionic-body {
|
||||
transition: opacity 0.3s linear;
|
||||
opacity: 0; }
|
||||
|
||||
.grade-b .scroll-bar-indicator, .grade-c .scroll-bar-indicator {
|
||||
border-radius: 0;
|
||||
background: #aaa; }
|
||||
.grade-b .scroll-bar-indicator.scroll-bar-fade-out, .grade-c .scroll-bar-indicator.scroll-bar-fade-out {
|
||||
-webkit-transition: none;
|
||||
-moz-transition: none;
|
||||
transition: none; }
|
||||
|
||||
.scroll-refresher {
|
||||
overflow: hidden;
|
||||
top: -60px;
|
||||
height: 60px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
position: absolute;
|
||||
margin: auto; }
|
||||
top: -60px;
|
||||
right: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
margin: auto;
|
||||
height: 60px; }
|
||||
.scroll-refresher .icon-refreshing {
|
||||
display: none;
|
||||
-webkit-animation-duration: 1.5s;
|
||||
-moz-animation-duration: 1.5s;
|
||||
animation-duration: 1.5s; }
|
||||
animation-duration: 1.5s;
|
||||
display: none; }
|
||||
|
||||
.scroll-refresher-content {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 15px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
color: #666666; }
|
||||
font-size: 30px; }
|
||||
|
||||
.ionic-refresher-content {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 15px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
color: #666666; }
|
||||
font-size: 30px; }
|
||||
.ionic-refresher-content .icon-pulling {
|
||||
-webkit-animation-duration: 200ms;
|
||||
-moz-animation-duration: 200ms;
|
||||
@@ -2135,22 +2144,22 @@ body, .ionic-body {
|
||||
-moz-animation-name: refresh-spin;
|
||||
animation-name: refresh-spin; }
|
||||
|
||||
infinite-scroll .scroll-infinite {
|
||||
ion-infinite-scroll .scroll-infinite {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
margin-top: -70px;
|
||||
height: 60px;
|
||||
position: relative; }
|
||||
height: 60px; }
|
||||
|
||||
.scroll-infinite-content {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 15px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
color: #666666; }
|
||||
font-size: 30px; }
|
||||
|
||||
infinite-scroll.active .scroll-infinite {
|
||||
ion-infinite-scroll.active .scroll-infinite {
|
||||
margin-top: -30px; }
|
||||
|
||||
.overflow-scroll {
|
||||
@@ -2182,17 +2191,16 @@ infinite-scroll.active .scroll-infinite {
|
||||
bottom: 49px; }
|
||||
|
||||
.pane {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0); }
|
||||
transform: translate3d(0, 0, 0);
|
||||
z-index: 1; }
|
||||
|
||||
.view {
|
||||
position: absolute;
|
||||
z-index: 1; }
|
||||
|
||||
.pane, .view {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
@@ -2350,7 +2358,7 @@ a.subdued {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 10;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0); }
|
||||
@@ -2438,7 +2446,7 @@ a.subdued {
|
||||
margin-left: 15px;
|
||||
margin-right: 15px;
|
||||
width: auto;
|
||||
z-index: 10;
|
||||
z-index: 11;
|
||||
overflow: hidden; }
|
||||
.action-sheet .button {
|
||||
display: block;
|
||||
@@ -2475,6 +2483,13 @@ a.subdued {
|
||||
.action-sheet-group .button:first-child:last-child {
|
||||
border-width: 0; }
|
||||
|
||||
.action-sheet-open {
|
||||
pointer-events: none; }
|
||||
.action-sheet-open.modal-open .modal {
|
||||
pointer-events: none; }
|
||||
.action-sheet-open .action-sheet {
|
||||
pointer-events: auto; }
|
||||
|
||||
/**
|
||||
* Bar (Headers and Footers)
|
||||
* --------------------------------------------------
|
||||
@@ -2637,6 +2652,8 @@ a.subdued {
|
||||
.bar .button.button-clear .icon:before, .bar .button.button-clear.icon:before, .bar .button.button-clear.icon-left:before, .bar .button.button-clear.icon-right:before {
|
||||
font-size: 32px;
|
||||
line-height: 32px; }
|
||||
.bar .button.back-button:active, .bar .button.back-button.active {
|
||||
opacity: 1; }
|
||||
.bar .button-bar > .button, .bar .buttons > .button {
|
||||
min-height: 31px;
|
||||
line-height: 32px; }
|
||||
@@ -3008,6 +3025,8 @@ a.subdued {
|
||||
font-size: 14px;
|
||||
font-family: "Helvetica Neue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
||||
opacity: 0.7; }
|
||||
.tab-item:hover {
|
||||
cursor: pointer; }
|
||||
|
||||
.tabs-icon-top .tab-item, .tabs-icon-bottom .tab-item {
|
||||
font-size: 12px;
|
||||
@@ -3100,8 +3119,21 @@ a.subdued {
|
||||
background-color: #fff; }
|
||||
|
||||
.menu-content {
|
||||
-webkit-transform: none;
|
||||
-moz-transform: none;
|
||||
transform: none;
|
||||
box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.2), 1px 0px 2px rgba(0, 0, 0, 0.2); }
|
||||
|
||||
.grade-b .menu-content, .grade-c .menu-content {
|
||||
right: -1px;
|
||||
left: -1px;
|
||||
-webkit-box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
border-right: 1px solid #ccc;
|
||||
border-left: 1px solid #ccc;
|
||||
box-shadow: none; }
|
||||
|
||||
.menu-left {
|
||||
left: 0; }
|
||||
|
||||
@@ -3133,6 +3165,11 @@ a.subdued {
|
||||
.modal.active {
|
||||
height: 100%; }
|
||||
|
||||
.modal-open {
|
||||
pointer-events: none; }
|
||||
.modal-open .modal {
|
||||
pointer-events: auto; }
|
||||
|
||||
/**
|
||||
* Popups
|
||||
* --------------------------------------------------
|
||||
@@ -3469,10 +3506,10 @@ a.item-content {
|
||||
* By default, if an .item is created out of an <a> or <button>
|
||||
* then a arrow will be added to the right side of the item.
|
||||
*/
|
||||
a.item, button.item {
|
||||
a.item, button.item, .item a[href].item-content, .item[ng-click] a.item-content {
|
||||
padding-right: 40px; }
|
||||
|
||||
a.item:after, button.item:after {
|
||||
a.item:after, button.item:after, .item a[href].item-content:after, .item[ng-click] a.item-content:after {
|
||||
/* By default, both <a> and <button> have right side arrow icons */
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
@@ -3502,7 +3539,13 @@ a.item:after, button.item:after {
|
||||
line-height: 1;
|
||||
speak: none; }
|
||||
|
||||
a.item-icon-right:after, button.item-icon-right:after, a.item-button-right:after, button.item-button-right:after {
|
||||
.grade-b a.item:after, .grade-b button.item:after, .grade-b .item a[href].item-content:after, .grade-b .item[ng-click] a.item-content:after, .grade-c a.item:after, .grade-c button.item:after, .grade-c .item a[href].item-content:after, .grade-c .item[ng-click] a.item-content:after {
|
||||
-webkit-font-smoothing: none;
|
||||
font-smoothing: none;
|
||||
content: '>';
|
||||
font-family: 'monospace'; }
|
||||
|
||||
a.item-icon-right:after, button.item-icon-right:after, a.item-button-right:after, button.item-button-right:after, .item a.item-content:after {
|
||||
display: none; }
|
||||
|
||||
.item-avatar {
|
||||
@@ -3517,10 +3560,10 @@ a.item-icon-right:after, button.item-icon-right:after, a.item-button-right:after
|
||||
width: 100%;
|
||||
border-radius: 4px; }
|
||||
|
||||
.item-thumbnail-left {
|
||||
.item-thumbnail-left, .item-thumbnail-left .item-content {
|
||||
padding-left: 105px;
|
||||
min-height: 100px; }
|
||||
.item-thumbnail-left > img:first-child, .item-thumbnail-left > .item-image {
|
||||
.item-thumbnail-left > img:first-child, .item-thumbnail-left > .item-image, .item-thumbnail-left .item-content > img:first-child, .item-thumbnail-left .item-content > .item-image {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
@@ -3528,10 +3571,13 @@ a.item-icon-right:after, button.item-icon-right:after, a.item-button-right:after
|
||||
max-height: 80px;
|
||||
width: 100%; }
|
||||
|
||||
.item-thumbnail-right {
|
||||
.item-thumbnail-left.item-complex {
|
||||
padding-left: 0; }
|
||||
|
||||
.item-thumbnail-right, .item-thumbnail-right .item-content {
|
||||
padding-right: 105px;
|
||||
min-height: 100px; }
|
||||
.item-thumbnail-right > img:first-child, .item-thumbnail-right > .item-image {
|
||||
.item-thumbnail-right > img:first-child, .item-thumbnail-right > .item-image, .item-thumbnail-right .item-content > img:first-child, .item-thumbnail-right .item-content > .item-image {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
@@ -3539,6 +3585,9 @@ a.item-icon-right:after, button.item-icon-right:after, a.item-button-right:after
|
||||
max-height: 80px;
|
||||
width: 100%; }
|
||||
|
||||
.item-thumbnail-left.item-complex {
|
||||
padding-right: 0; }
|
||||
|
||||
.item-image {
|
||||
padding: 0;
|
||||
text-align: center; }
|
||||
@@ -4050,6 +4099,10 @@ input, button, select, textarea {
|
||||
|
||||
.placeholder-icon {
|
||||
color: #aaa; }
|
||||
.placeholder-icon:first-child {
|
||||
padding-right: 6px; }
|
||||
.placeholder-icon:last-child {
|
||||
padding-left: 6px; }
|
||||
|
||||
.item-stacked-label {
|
||||
display: block;
|
||||
@@ -4931,6 +4984,19 @@ a.button {
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1; } }
|
||||
|
||||
@-moz-keyframes slideInUp {
|
||||
0% {
|
||||
-webkit-transform: translate3d(0, 100%, 0);
|
||||
-moz-transform: translate3d(0, 100%, 0);
|
||||
transform: translate3d(0, 100%, 0);
|
||||
opacity: 0; }
|
||||
|
||||
100% {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1; } }
|
||||
|
||||
@-webkit-keyframes slideOutUp {
|
||||
0% {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
@@ -4944,6 +5010,19 @@ a.button {
|
||||
transform: translate3d(0, 100%, 0);
|
||||
opacity: 0; } }
|
||||
|
||||
@-moz-keyframes slideOutUp {
|
||||
0% {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1; }
|
||||
|
||||
100% {
|
||||
-webkit-transform: translate3d(0, 100%, 0);
|
||||
-moz-transform: translate3d(0, 100%, 0);
|
||||
transform: translate3d(0, 100%, 0);
|
||||
opacity: 0; } }
|
||||
|
||||
@-webkit-keyframes slideInFromLeft {
|
||||
from {
|
||||
-webkit-transform: translate3d(-100%, 0, 0); }
|
||||
@@ -5787,12 +5866,22 @@ a.button {
|
||||
* Utility Classes
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
.hidden, .hide {
|
||||
.hide {
|
||||
display: none; }
|
||||
|
||||
.opacity-hide {
|
||||
opacity: 0; }
|
||||
|
||||
.grade-b .opacity-hide, .grade-c .opacity-hide {
|
||||
opacity: 1;
|
||||
display: none; }
|
||||
|
||||
.show {
|
||||
display: block; }
|
||||
|
||||
.opacity-show {
|
||||
opacity: 1; }
|
||||
|
||||
.invisible {
|
||||
visibility: hidden; }
|
||||
|
||||
@@ -5810,6 +5899,18 @@ a.button {
|
||||
.enable-pointer-events {
|
||||
pointer-events: auto; }
|
||||
|
||||
.disable-user-behavior {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-user-drag: none;
|
||||
-ms-touch-action: none;
|
||||
-ms-content-zooming: none; }
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
clear: both; }
|
||||
@@ -5951,25 +6052,25 @@ a.button {
|
||||
* --------------------------------------------------
|
||||
* Platform specific tweaks when in Cordova.
|
||||
*/
|
||||
.platform-ios7:not(.fullscreen) .bar-header {
|
||||
.platform-ios7.platform-cordova:not(.fullscreen) .bar-header {
|
||||
height: 64px; }
|
||||
.platform-ios7:not(.fullscreen) .bar-header.item-input-inset .item-input-wrapper {
|
||||
.platform-ios7.platform-cordova:not(.fullscreen) .bar-header.item-input-inset .item-input-wrapper {
|
||||
margin-top: 19px !important; }
|
||||
.platform-ios7:not(.fullscreen) .bar-header > * {
|
||||
.platform-ios7.platform-cordova:not(.fullscreen) .bar-header > * {
|
||||
margin-top: 20px; }
|
||||
.platform-ios7:not(.fullscreen) .has-header, .platform-ios7:not(.fullscreen) .bar-subheader {
|
||||
.platform-ios7.platform-cordova:not(.fullscreen) .has-header, .platform-ios7.platform-cordova:not(.fullscreen) .bar-subheader {
|
||||
top: 64px; }
|
||||
.platform-ios7:not(.fullscreen) .has-subheader {
|
||||
.platform-ios7.platform-cordova:not(.fullscreen) .has-subheader {
|
||||
top: 108px; }
|
||||
|
||||
.platform-ios7.status-bar-hide {
|
||||
margin-bottom: 20px; }
|
||||
|
||||
.platform-android .bar-header {
|
||||
.platform-android.platform-cordova .bar-header {
|
||||
height: 48px; }
|
||||
.platform-android .has-header, .platform-android .bar-subheader {
|
||||
.platform-android.platform-cordova .has-header, .platform-android.platform-cordova .bar-subheader {
|
||||
top: 48px; }
|
||||
.platform-android .has-subheader {
|
||||
.platform-android.platform-cordova .has-subheader {
|
||||
top: 96px; }
|
||||
.platform-android .title {
|
||||
.platform-android.platform-cordova .title {
|
||||
line-height: 48px; }
|
||||
|
||||
6
release/css/ionic.min.css
vendored
6
release/css/ionic.min.css
vendored
File diff suppressed because one or more lines are too long
65
release/js/angular/angular-sanitize.js
vendored
65
release/js/angular/angular-sanitize.js
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license AngularJS v1.2.10
|
||||
* @license AngularJS v1.2.12
|
||||
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
* License: MIT
|
||||
*/
|
||||
@@ -104,35 +104,37 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
|
||||
</table>
|
||||
</div>
|
||||
</doc:source>
|
||||
<doc:scenario>
|
||||
<doc:protractor>
|
||||
it('should sanitize the html snippet by default', function() {
|
||||
expect(using('#bind-html-with-sanitize').element('div').html()).
|
||||
expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
|
||||
toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
|
||||
});
|
||||
|
||||
it('should inline raw snippet if bound to a trusted value', function() {
|
||||
expect(using('#bind-html-with-trust').element("div").html()).
|
||||
expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
|
||||
toBe("<p style=\"color:blue\">an html\n" +
|
||||
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
|
||||
"snippet</p>");
|
||||
});
|
||||
|
||||
it('should escape snippet without any filter', function() {
|
||||
expect(using('#bind-default').element('div').html()).
|
||||
expect(element(by.css('#bind-default div')).getInnerHtml()).
|
||||
toBe("<p style=\"color:blue\">an html\n" +
|
||||
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
|
||||
"snippet</p>");
|
||||
});
|
||||
|
||||
it('should update', function() {
|
||||
input('snippet').enter('new <b onclick="alert(1)">text</b>');
|
||||
expect(using('#bind-html-with-sanitize').element('div').html()).toBe('new <b>text</b>');
|
||||
expect(using('#bind-html-with-trust').element('div').html()).toBe(
|
||||
element(by.model('snippet')).clear();
|
||||
element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
|
||||
expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
|
||||
toBe('new <b>text</b>');
|
||||
expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
|
||||
'new <b onclick="alert(1)">text</b>');
|
||||
expect(using('#bind-default').element('div').html()).toBe(
|
||||
expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
|
||||
"new <b onclick=\"alert(1)\">text</b>");
|
||||
});
|
||||
</doc:scenario>
|
||||
</doc:protractor>
|
||||
</doc:example>
|
||||
*/
|
||||
function $SanitizeProvider() {
|
||||
@@ -537,37 +539,38 @@ angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
|
||||
</tr>
|
||||
</table>
|
||||
</doc:source>
|
||||
<doc:scenario>
|
||||
<doc:protractor>
|
||||
it('should linkify the snippet with urls', function() {
|
||||
expect(using('#linky-filter').binding('snippet | linky')).
|
||||
toBe('Pretty text with some links: ' +
|
||||
'<a href="http://angularjs.org/">http://angularjs.org/</a>, ' +
|
||||
'<a href="mailto:us@somewhere.org">us@somewhere.org</a>, ' +
|
||||
'<a href="mailto:another@somewhere.org">another@somewhere.org</a>, ' +
|
||||
'and one more: <a href="ftp://127.0.0.1/">ftp://127.0.0.1/</a>.');
|
||||
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
|
||||
toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
|
||||
'another@somewhere.org, and one more: ftp://127.0.0.1/.');
|
||||
expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
|
||||
});
|
||||
|
||||
it ('should not linkify snippet without the linky filter', function() {
|
||||
expect(using('#escaped-html').binding('snippet')).
|
||||
toBe("Pretty text with some links:\n" +
|
||||
"http://angularjs.org/,\n" +
|
||||
"mailto:us@somewhere.org,\n" +
|
||||
"another@somewhere.org,\n" +
|
||||
"and one more: ftp://127.0.0.1/.");
|
||||
it('should not linkify snippet without the linky filter', function() {
|
||||
expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
|
||||
toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
|
||||
'another@somewhere.org, and one more: ftp://127.0.0.1/.');
|
||||
expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
|
||||
});
|
||||
|
||||
it('should update', function() {
|
||||
input('snippet').enter('new http://link.');
|
||||
expect(using('#linky-filter').binding('snippet | linky')).
|
||||
toBe('new <a href="http://link">http://link</a>.');
|
||||
expect(using('#escaped-html').binding('snippet')).toBe('new http://link.');
|
||||
element(by.model('snippet')).clear();
|
||||
element(by.model('snippet')).sendKeys('new http://link.');
|
||||
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
|
||||
toBe('new http://link.');
|
||||
expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
|
||||
expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
|
||||
.toBe('new http://link.');
|
||||
});
|
||||
|
||||
it('should work with the target property', function() {
|
||||
expect(using('#linky-target').binding("snippetWithTarget | linky:'_blank'")).
|
||||
toBe('<a target="_blank" href="http://angularjs.org/">http://angularjs.org/</a>');
|
||||
expect(element(by.id('linky-target')).
|
||||
element(by.binding("snippetWithTarget | linky:'_blank'")).getText()).
|
||||
toBe('http://angularjs.org/');
|
||||
expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
|
||||
});
|
||||
</doc:scenario>
|
||||
</doc:protractor>
|
||||
</doc:example>
|
||||
*/
|
||||
angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
|
||||
|
||||
2
release/js/angular/angular-sanitize.min.js
vendored
2
release/js/angular/angular-sanitize.min.js
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
AngularJS v1.2.10
|
||||
AngularJS v1.2.12
|
||||
(c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
8
release/js/ionic-angular.min.js
vendored
8
release/js/ionic-angular.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
33
release/js/ionic.bundle.min.js
vendored
33
release/js/ionic.bundle.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -2,11 +2,11 @@
|
||||
* Copyright 2014 Drifty Co.
|
||||
* http://drifty.com/
|
||||
*
|
||||
* Ionic, v0.9.25
|
||||
* Ionic, v0.9.26
|
||||
* A powerful HTML5 mobile app framework.
|
||||
* http://ionicframework.com/
|
||||
*
|
||||
* By @maxlynch, @helloimben, @adamdbradley <3
|
||||
* By @maxlynch, @benjsperry, @adamdbradley <3
|
||||
*
|
||||
* Licensed under the MIT license. Please see LICENSE for more information.
|
||||
*
|
||||
@@ -17,7 +17,7 @@
|
||||
window.ionic = {
|
||||
controllers: {},
|
||||
views: {},
|
||||
version: '0.9.25'
|
||||
version: '0.9.26'
|
||||
};
|
||||
;
|
||||
(function(ionic) {
|
||||
@@ -174,7 +174,7 @@ window.ionic = {
|
||||
*
|
||||
* @example
|
||||
* this.setTranslateX = ionic.animationFrameThrottle(function(x) {
|
||||
* this.el.style.webkitTransform = 'translate3d(' + x + 'px, 0, 0)';
|
||||
* this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + x + 'px, 0, 0)';
|
||||
* })
|
||||
*/
|
||||
animationFrameThrottle: function(cb) {
|
||||
@@ -425,23 +425,11 @@ window.ionic = {
|
||||
|
||||
// default settings
|
||||
ionic.Gestures.defaults = {
|
||||
// add styles and attributes to the element to prevent the browser from doing
|
||||
// its native behavior. this doesnt prevent the scrolling, but cancels
|
||||
// the contextmenu, tap highlighting etc
|
||||
// add css to the element to prevent the browser from doing
|
||||
// its native behavior. this doesnt prevent the scrolling,
|
||||
// but cancels the contextmenu, tap highlighting etc
|
||||
// set to false to disable this
|
||||
stop_browser_behavior: {
|
||||
// this also triggers onselectstart=false for IE
|
||||
userSelect: 'none',
|
||||
// this makes the element blocking in IE10 >, you could experiment with the value
|
||||
// see for more options this issue; https://github.com/EightMedia/hammer.js/issues/241
|
||||
touchAction: 'none',
|
||||
touchCallout: 'none',
|
||||
contentZooming: 'none',
|
||||
userDrag: 'none',
|
||||
tapHighlightColor: 'rgba(0,0,0,0)'
|
||||
}
|
||||
|
||||
// more settings are defined per gesture at gestures.js
|
||||
stop_browser_behavior: 'disable-user-behavior'
|
||||
};
|
||||
|
||||
// detect touchevents
|
||||
@@ -1107,37 +1095,16 @@ window.ionic = {
|
||||
|
||||
|
||||
/**
|
||||
* stop browser default behavior with css props
|
||||
* stop browser default behavior with css class
|
||||
* @param {HtmlElement} element
|
||||
* @param {Object} css_props
|
||||
* @param {Object} css_class
|
||||
*/
|
||||
stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_props) {
|
||||
var prop,
|
||||
vendors = ['webkit','khtml','moz','Moz','ms','o',''];
|
||||
|
||||
if(!css_props || !element.style) {
|
||||
return;
|
||||
}
|
||||
|
||||
// with css properties for modern browsers
|
||||
for(var i = 0; i < vendors.length; i++) {
|
||||
for(var p in css_props) {
|
||||
if(css_props.hasOwnProperty(p)) {
|
||||
prop = p;
|
||||
|
||||
// vender prefix at the property
|
||||
if(vendors[i]) {
|
||||
prop = vendors[i] + prop.substring(0, 1).toUpperCase() + prop.substring(1);
|
||||
}
|
||||
|
||||
// set the style
|
||||
element.style[prop] = css_props[p];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// also the disable onselectstart
|
||||
if(css_props.userSelect == 'none') {
|
||||
stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_class) {
|
||||
// changed from making many style changes to just adding a preset classname
|
||||
// less DOM manipulations, less code, and easier to control in the CSS side of things
|
||||
// hammer.js doesn't come with CSS, but ionic does, which is why we prefer this method
|
||||
if(element && element.classList) {
|
||||
element.classList.add(css_class);
|
||||
element.onselectstart = function() {
|
||||
return false;
|
||||
};
|
||||
@@ -1838,6 +1805,8 @@ window.ionic = {
|
||||
isReady: false,
|
||||
isFullScreen: false,
|
||||
platforms: null,
|
||||
grade: null,
|
||||
ua: navigator.userAgent,
|
||||
|
||||
ready: function(cb) {
|
||||
// run through tasks to complete now that the device is ready
|
||||
@@ -1851,16 +1820,18 @@ window.ionic = {
|
||||
},
|
||||
|
||||
detect: function() {
|
||||
var i, bodyClass = document.body.className;
|
||||
|
||||
ionic.Platform._checkPlatforms();
|
||||
|
||||
if(this.platforms.length) {
|
||||
// only change the body class if we got platform info
|
||||
var i, bodyClass = document.body.className;
|
||||
for(i = 0; i < this.platforms.length; i++) {
|
||||
bodyClass += ' platform-' + this.platforms[i];
|
||||
}
|
||||
document.body.className = bodyClass;
|
||||
// only change the body class if we got platform info
|
||||
for(i = 0; i < this.platforms.length; i++) {
|
||||
bodyClass += ' platform-' + this.platforms[i];
|
||||
}
|
||||
|
||||
bodyClass += ' grade-' + this.grade;
|
||||
|
||||
document.body.className = bodyClass.trim();
|
||||
},
|
||||
|
||||
device: function() {
|
||||
@@ -1871,23 +1842,30 @@ window.ionic = {
|
||||
|
||||
_checkPlatforms: function(platforms) {
|
||||
this.platforms = [];
|
||||
var v = this.version().toString().replace('.', '_');
|
||||
this.grade = 'a';
|
||||
|
||||
if(this.isCordova()) {
|
||||
this.platforms.push('cordova');
|
||||
}
|
||||
if(this.isIOS()) {
|
||||
this.platforms.push('ios');
|
||||
this.platforms.push('ios' + v.split('_')[0]);
|
||||
this.platforms.push('ios' + v);
|
||||
}
|
||||
if(this.isIPad()) {
|
||||
this.platforms.push('ipad');
|
||||
}
|
||||
if(this.isAndroid()) {
|
||||
this.platforms.push('android');
|
||||
this.platforms.push('android' + v.split('_')[0]);
|
||||
this.platforms.push('android' + v);
|
||||
if(this.isCordova()) this.platforms.push('cordova');
|
||||
if(this.isIPad()) this.platforms.push('ipad');
|
||||
|
||||
var platform = this.platform();
|
||||
if(platform) {
|
||||
this.platforms.push(platform);
|
||||
|
||||
var version = this.version();
|
||||
if(version) {
|
||||
var v = version.toString();
|
||||
if(v.indexOf('.') > 0) {
|
||||
v = v.replace('.', '_');
|
||||
} else {
|
||||
v += '_0';
|
||||
}
|
||||
this.platforms.push(platform + v.split('_')[0]);
|
||||
this.platforms.push(platform + v);
|
||||
|
||||
if(this.isAndroid() && version < 4.4) {
|
||||
this.grade = (version < 4 ? 'c' : 'b');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1896,7 +1874,7 @@ window.ionic = {
|
||||
return !(!window.cordova && !window.PhoneGap && !window.phonegap);
|
||||
},
|
||||
isIPad: function() {
|
||||
return navigator.userAgent.toLowerCase().indexOf('ipad') >= 0;
|
||||
return this.ua.toLowerCase().indexOf('ipad') >= 0;
|
||||
},
|
||||
isIOS: function() {
|
||||
return this.is('ios');
|
||||
@@ -1907,37 +1885,71 @@ window.ionic = {
|
||||
|
||||
platform: function() {
|
||||
// singleton to get the platform name
|
||||
if(!platformName) this.setPlatform(this.device().platform);
|
||||
if(platformName === null) this.setPlatform(this.device().platform);
|
||||
return platformName;
|
||||
},
|
||||
|
||||
setPlatform: function(n) {
|
||||
platformName = n;
|
||||
if(typeof n != 'undefined' && n !== null && n.length) {
|
||||
platformName = n.toLowerCase();
|
||||
} else if(this.ua.indexOf('Android') > 0) {
|
||||
platformName = 'android';
|
||||
} else if(this.ua.indexOf('iPhone') > -1 || this.ua.indexOf('iPad') > -1 || this.ua.indexOf('iPod') > -1) {
|
||||
platformName = 'ios';
|
||||
} else {
|
||||
platformName = 'unknown';
|
||||
}
|
||||
},
|
||||
|
||||
version: function() {
|
||||
// singleton to get the platform version
|
||||
if(!platformVersion) this.setVersion(this.device().version);
|
||||
if(platformVersion === null) this.setVersion(this.device().version);
|
||||
return platformVersion;
|
||||
},
|
||||
|
||||
setVersion: function(v) {
|
||||
if(v) {
|
||||
if(typeof v != 'undefined' && v !== null) {
|
||||
v = v.split('.');
|
||||
platformVersion = parseFloat(v[0] + '.' + (v.length > 1 ? v[1] : 0));
|
||||
} else {
|
||||
platformVersion = 0;
|
||||
v = parseFloat(v[0] + '.' + (v.length > 1 ? v[1] : 0));
|
||||
if(!isNaN(v)) {
|
||||
platformVersion = v;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
platformVersion = 0;
|
||||
|
||||
// fallback to user-agent checking
|
||||
var pName = this.platform();
|
||||
var versionMatch = {
|
||||
'android': /Android (\d+).(\d+)?/,
|
||||
'ios': /OS (\d+)_(\d+)?/
|
||||
};
|
||||
if(versionMatch[pName]) {
|
||||
v = this.ua.match( versionMatch[pName] );
|
||||
if(v.length > 2) {
|
||||
platformVersion = parseFloat( v[1] + '.' + v[2] );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Check if the platform is the one detected by cordova
|
||||
is: function(type) {
|
||||
type = type.toLowerCase();
|
||||
// check if it has an array of platforms
|
||||
if(this.platforms) {
|
||||
for(var x = 0; x < this.platforms.length; x++) {
|
||||
if(this.platforms[x] === type) return true;
|
||||
}
|
||||
}
|
||||
// exact match
|
||||
var pName = this.platform();
|
||||
if(pName) {
|
||||
return pName.toLowerCase() === type.toLowerCase();
|
||||
return pName === type.toLowerCase();
|
||||
}
|
||||
// A quick hack for
|
||||
return navigator.userAgent.toLowerCase().indexOf(type.toLowerCase()) >= 0;
|
||||
|
||||
// A quick hack for to check userAgent
|
||||
return this.ua.toLowerCase().indexOf(type) >= 0;
|
||||
},
|
||||
|
||||
exitApp: function() {
|
||||
@@ -1984,8 +1996,8 @@ window.ionic = {
|
||||
|
||||
};
|
||||
|
||||
var platformName, // just the name, like iOS or Android
|
||||
platformVersion, // a float of the major and minor, like 7.1
|
||||
var platformName = null, // just the name, like iOS or Android
|
||||
platformVersion = null, // a float of the major and minor, like 7.1
|
||||
readyCallbacks = [];
|
||||
|
||||
// setup listeners to know when the device is ready to go
|
||||
@@ -2025,12 +2037,11 @@ window.ionic = {
|
||||
ionic.CSS = {};
|
||||
|
||||
(function() {
|
||||
var d = document.createElement('div');
|
||||
var keys = ['webkitTransform', 'transform', '-webkit-transform', 'webkit-transform',
|
||||
'-moz-transform', 'moz-transform', 'MozTransform', 'mozTransform'];
|
||||
|
||||
for(var i = 0; i < keys.length; i++) {
|
||||
if(d.style[keys[i]] !== undefined) {
|
||||
if(document.documentElement.style[keys[i]] !== undefined) {
|
||||
ionic.CSS.TRANSFORM = keys[i];
|
||||
break;
|
||||
}
|
||||
@@ -2089,7 +2100,7 @@ window.ionic = {
|
||||
|
||||
if(ele.disabled) return;
|
||||
|
||||
console.debug('tapElement', ele.tagName, ele.className);
|
||||
|
||||
|
||||
var c = getCoordinates(e);
|
||||
|
||||
@@ -2115,7 +2126,7 @@ window.ionic = {
|
||||
}
|
||||
|
||||
if(target.control) {
|
||||
console.debug('tapElement, target.control, stop');
|
||||
|
||||
return stopEvent(e);
|
||||
}
|
||||
};
|
||||
@@ -2129,7 +2140,7 @@ window.ionic = {
|
||||
|
||||
if( isRecentTap(e) ) {
|
||||
// if a tap in the same area just happened, don't continue
|
||||
console.debug('tapPolyfill', 'isRecentTap', ele.tagName);
|
||||
|
||||
return stopEvent(e);
|
||||
}
|
||||
|
||||
@@ -2157,13 +2168,13 @@ window.ionic = {
|
||||
if(e.target.control) {
|
||||
// this is a label that has an associated input
|
||||
// the native layer will send the actual event, so stop this one
|
||||
console.debug('preventGhostClick', 'label');
|
||||
|
||||
return stopEvent(e);
|
||||
}
|
||||
|
||||
if( isRecentTap(e) ) {
|
||||
// a tap has already happened at these coordinates recently, ignore this event
|
||||
console.debug('preventGhostClick', 'isRecentTap', e.target.tagName);
|
||||
|
||||
return stopEvent(e);
|
||||
}
|
||||
|
||||
@@ -2250,7 +2261,7 @@ window.ionic = {
|
||||
|
||||
var tapCoordinates = {}; // used to remember coordinates to ignore if they happen again quickly
|
||||
var CLICK_PREVENT_DURATION = 1500; // max milliseconds ghostclicks in the same area should be prevented
|
||||
var REMOVE_PREVENT_DELAY = 325; // delay after a touchend/mouseup before removing the ghostclick prevent
|
||||
var REMOVE_PREVENT_DELAY = 375; // delay after a touchend/mouseup before removing the ghostclick prevent
|
||||
var HIT_RADIUS = 15;
|
||||
|
||||
// set global click handler and check if the event should stop or not
|
||||
@@ -2472,7 +2483,7 @@ function androidKeyboardFix() {
|
||||
if (rememberedDeviceWidth !== window.innerWidth) {
|
||||
rememberedDeviceWidth = window.innerWidth;
|
||||
rememberedDeviceHeight = window.innerHeight;
|
||||
console.info('orientation change. deviceWidth =', rememberedDeviceWidth, ', deviceHeight =', rememberedDeviceHeight);
|
||||
|
||||
|
||||
//If the height changes, and it's less than before, we have a keyboard open
|
||||
} else if (rememberedDeviceHeight !== window.innerHeight &&
|
||||
@@ -2834,6 +2845,9 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
startX: 0,
|
||||
startY: 0,
|
||||
|
||||
/** The amount to dampen mousewheel events */
|
||||
wheelDampen: 6,
|
||||
|
||||
/** The minimum size the scrollbars scale to while scrolling */
|
||||
minScrollbarSizeX: 5,
|
||||
minScrollbarSizeY: 5,
|
||||
@@ -3201,6 +3215,9 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
mousedown = false;
|
||||
}, false);
|
||||
|
||||
document.addEventListener("mousewheel", function(e) {
|
||||
self.scrollBy(e.wheelDeltaX/self.options.wheelDampen, -e.wheelDeltaY/self.options.wheelDampen);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
@@ -4749,7 +4766,7 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
content.classList.remove(ITEM_SLIDING_CLASS);
|
||||
|
||||
// Grab the starting X point for the item (for example, so we can tell whether it is open or closed to start)
|
||||
offsetX = parseFloat(content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;
|
||||
offsetX = parseFloat(content.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]) || 0;
|
||||
|
||||
// Grab the buttons
|
||||
buttons = content.parentNode.querySelector('.' + ITEM_OPTIONS_CLASS);
|
||||
@@ -4795,7 +4812,7 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
newX = Math.min(-buttonsWidth, -buttonsWidth + (((e.gesture.deltaX + buttonsWidth) * 0.4)));
|
||||
}
|
||||
|
||||
this._currentDrag.content.style.webkitTransform = 'translate3d(' + newX + 'px, 0, 0)';
|
||||
this._currentDrag.content.style[ionic.CSS.TRANSFORM] = 'translate3d(' + newX + 'px, 0, 0)';
|
||||
this._currentDrag.content.style.webkitTransition = 'none';
|
||||
}
|
||||
});
|
||||
@@ -4836,17 +4853,17 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
// };
|
||||
|
||||
ionic.requestAnimationFrame(function() {
|
||||
// var currentX = parseFloat(_this._currentDrag.content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;
|
||||
// var currentX = parseFloat(_this._currentDrag.content.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]) || 0;
|
||||
// if(currentX !== restingPoint) {
|
||||
// _this._currentDrag.content.classList.add(ITEM_SLIDING_CLASS);
|
||||
// _this._currentDrag.content.addEventListener('webkitTransitionEnd', onRestingAnimationEnd);
|
||||
// }
|
||||
if(restingPoint === 0) {
|
||||
_this._currentDrag.content.style.webkitTransform = '';
|
||||
_this._currentDrag.content.style[ionic.CSS.TRANSFORM] = '';
|
||||
} else {
|
||||
_this._currentDrag.content.style.webkitTransform = 'translate3d(' + restingPoint + 'px, 0, 0)';
|
||||
_this._currentDrag.content.style[ionic.CSS.TRANSFORM] = 'translate3d(' + restingPoint + 'px, 0, 0)';
|
||||
}
|
||||
_this._currentDrag.content.style.webkitTransition = '';
|
||||
_this._currentDrag.content.style[ionic.CSS.TRANSFORM] = '';
|
||||
|
||||
|
||||
// Kill the current drag
|
||||
@@ -4870,7 +4887,7 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
|
||||
ReorderDrag.prototype._moveElement = function(e) {
|
||||
var y = (e.gesture.center.pageY - this._currentDrag.elementHeight/2);
|
||||
this.el.style.webkitTransform = 'translate3d(0, '+y+'px, 0)';
|
||||
this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(0, '+y+'px, 0)';
|
||||
};
|
||||
|
||||
ReorderDrag.prototype.start = function(e) {
|
||||
@@ -4878,7 +4895,7 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
|
||||
|
||||
// Grab the starting Y point for the item
|
||||
var offsetY = this.el.offsetTop;//parseFloat(this.el.style.webkitTransform.replace('translate3d(', '').split(',')[1]) || 0;
|
||||
var offsetY = this.el.offsetTop;//parseFloat(this.el.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[1]) || 0;
|
||||
|
||||
var startIndex = ionic.DomUtil.getChildIndex(this.el, this.el.nodeName.toLowerCase());
|
||||
var elementHeight = this.el.offsetHeight;
|
||||
@@ -4982,7 +4999,7 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
|
||||
// Reposition the element
|
||||
this.el.classList.remove(ITEM_REORDERING_CLASS);
|
||||
this.el.style.webkitTransform = '';
|
||||
this.el.style[ionic.CSS.TRANSFORM] = '';
|
||||
|
||||
placeholder.parentNode.insertBefore(this.el, placeholder);
|
||||
placeholder.parentNode.removeChild(placeholder);
|
||||
@@ -5446,10 +5463,14 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
this.isEnabled = isEnabled;
|
||||
},
|
||||
bringUp: function() {
|
||||
this.el.style.zIndex = 0;
|
||||
if(this.el.style.zIndex !== '0') {
|
||||
this.el.style.zIndex = '0';
|
||||
}
|
||||
},
|
||||
pushDown: function() {
|
||||
this.el.style.zIndex = -1;
|
||||
if(this.el.style.zIndex !== '-1') {
|
||||
this.el.style.zIndex = '-1';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5479,10 +5500,10 @@ ionic.views.Scroll = ionic.views.View.inherit({
|
||||
this.el.classList.add(this.animationClass);
|
||||
},
|
||||
getTranslateX: function() {
|
||||
return parseFloat(this.el.style.webkitTransform.replace('translate3d(', '').split(',')[0]);
|
||||
return parseFloat(this.el.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]);
|
||||
},
|
||||
setTranslateX: ionic.animationFrameThrottle(function(x) {
|
||||
this.el.style.webkitTransform = 'translate3d(' + x + 'px, 0, 0)';
|
||||
this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + x + 'px, 0, 0)';
|
||||
})
|
||||
});
|
||||
|
||||
@@ -5719,7 +5740,7 @@ ionic.views.Slider = ionic.views.View.inherit({
|
||||
|
||||
function stop() {
|
||||
|
||||
delay = 0;
|
||||
delay = options.auto || 0;
|
||||
clearTimeout(interval);
|
||||
|
||||
}
|
||||
@@ -6340,7 +6361,7 @@ ionic.views.TabBar = ionic.views.View.inherit({
|
||||
} else {
|
||||
var openPixel = Math.round( (openPercent / 100) * this.track.offsetWidth - (this.handle.offsetWidth) );
|
||||
openPixel = (openPixel < 1 ? 0 : openPixel);
|
||||
this.handle.style.webkitTransform = 'translate3d(' + openPixel + 'px,0,0)';
|
||||
this.handle.style[ionic.CSS.TRANSFORM] = 'translate3d(' + openPixel + 'px,0,0)';
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -6351,8 +6372,8 @@ ionic.views.TabBar = ionic.views.View.inherit({
|
||||
|
||||
val: function(value) {
|
||||
if(value === true || value === false) {
|
||||
if(this.handle.style.webkitTransform !== "") {
|
||||
this.handle.style.webkitTransform = "";
|
||||
if(this.handle.style[ionic.CSS.TRANSFORM] !== "") {
|
||||
this.handle.style[ionic.CSS.TRANSFORM] = "";
|
||||
}
|
||||
this.checkbox.checked = value;
|
||||
this.openPercent = (value ? 100 : 0);
|
||||
|
||||
10
release/js/ionic.min.js
vendored
10
release/js/ionic.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": "0.9.25",
|
||||
"codename": "quokka",
|
||||
"date": "2014-02-19",
|
||||
"time": "16:51:4"
|
||||
"version": "0.9.26",
|
||||
"codename": "rabbit",
|
||||
"date": "2014-02-26",
|
||||
"time": "19:38:1"
|
||||
}
|
||||
Reference in New Issue
Block a user