22 * Copyright 2014 Drifty Co.
33 * http://drifty.com/
44 *
5- * Ionic, v1.1.0
5+ * Ionic, v1.1.1
66 * A powerful HTML5 mobile app framework.
77 * http://ionicframework.com/
88 *
1414
1515( function ( ) {
1616/* eslint no-unused-vars:0 */
17- var IonicModule = angular . module ( 'ionic' , [ 'ngAnimate' , 'ngSanitize' , 'ui.router' ] ) ,
17+ var IonicModule = angular . module ( 'ionic' , [ 'ngAnimate' , 'ngSanitize' , 'ui.router' , 'ngIOS9UIWebViewPatch' ] ) ,
1818 extend = angular . extend ,
1919 forEach = angular . forEach ,
2020 isDefined = angular . isDefined ,
@@ -446,7 +446,7 @@ IonicModule
446446 return {
447447 /**
448448 * @ngdoc method
449- * @name $ionicBody#add
449+ * @name $ionicBody#addClass
450450 * @description Add a class to the document's body element.
451451 * @param {string } class Each argument will be added to the body element.
452452 * @returns {$ionicBody } The $ionicBody service so methods can be chained.
@@ -2105,7 +2105,7 @@ IonicModule
21052105// http://blogs.msdn.com/b/msdn_answers/archive/2015/02/10/
21062106// running-cordova-apps-on-windows-and-windows-phone-8-1-using-ionic-angularjs-and-other-frameworks.aspx
21072107. config ( [ '$compileProvider' , function ( $compileProvider ) {
2108- $compileProvider . aHrefSanitizationWhitelist ( / ^ \s * ( h t t p s ? | t e l | f t p | m a i l t o | f i l e | g h t t p s ? | m s - a p p x | x - w m a p p 0 ) : / ) ;
2108+ $compileProvider . aHrefSanitizationWhitelist ( / ^ \s * ( h t t p s ? | s m s | t e l | g e o | f t p | m a i l t o | f i l e | g h t t p s ? | m s - a p p x | x - w m a p p 0 ) : / ) ;
21092109 $compileProvider . imgSrcSanitizationWhitelist ( / ^ \s * ( h t t p s ? | f t p | f i l e | c o n t e n t | b l o b | m s - a p p x | x - w m a p p 0 ) : | d a t a : i m a g e \/ / ) ;
21102110} ] ) ;
21112111
@@ -2530,6 +2530,7 @@ function($rootScope, $ionicBody, $compile, $timeout, $ionicPlatform, $ionicTempl
25302530 self . scope . $parent && self . scope . $parent . $broadcast ( self . viewType + '.shown' , self ) ;
25312531 self . el . classList . add ( 'active' ) ;
25322532 self . scope . $broadcast ( '$ionicHeader.align' ) ;
2533+ self . scope . $broadcast ( '$ionicFooter.align' ) ;
25332534 } , 20 ) ;
25342535
25352536 return $timeout ( function ( ) {
@@ -3534,7 +3535,7 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
35343535 } ;
35353536
35363537 self . remove = function ( ) {
3537- if ( self . removed || ! $ionicModal . stack . isHighest ( self ) ) return ;
3538+ if ( self . removed ) return ;
35383539
35393540 self . hide ( function ( ) {
35403541 self . element . remove ( ) ;
@@ -3557,8 +3558,8 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
35573558 var showDelay = 0 ;
35583559
35593560 if ( popupStack . length > 0 ) {
3560- popupStack [ popupStack . length - 1 ] . hide ( ) ;
35613561 showDelay = config . stackPushDelay ;
3562+ $timeout ( popupStack [ popupStack . length - 1 ] . hide , showDelay , false ) ;
35623563 } else {
35633564 //Add popup-open & backdrop if this is first popup
35643565 $ionicBody . addClass ( 'popup-open' ) ;
@@ -3591,6 +3592,8 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
35913592 popupStack . splice ( index , 1 ) ;
35923593 }
35933594
3595+ popup . remove ( ) ;
3596+
35943597 if ( popupStack . length > 0 ) {
35953598 popupStack [ popupStack . length - 1 ] . show ( ) ;
35963599 } else {
@@ -3606,7 +3609,6 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
36063609 ( $ionicPopup . _backButtonActionDone || noop ) ( ) ;
36073610 }
36083611
3609- popup . remove ( ) ;
36103612
36113613 return result ;
36123614 } ) ;
@@ -3907,7 +3909,7 @@ IonicModule
39073909 * @name $ionicScrollDelegate#freezeScroll
39083910 * @description Does not allow this scroll view to scroll either x or y.
39093911 * @param {boolean= } shouldFreeze Should this scroll view be prevented from scrolling or not.
3910- * @returns {object } If the scroll view is being prevented from scrolling or not.
3912+ * @returns {boolean } If the scroll view is being prevented from scrolling or not.
39113913 */
39123914 'freezeScroll' ,
39133915 /**
@@ -4951,6 +4953,82 @@ function($timeout, $document, $q, $ionicClickBlock, $ionicConfig, $ionicNavBarDe
49514953
49524954} ] ) ;
49534955
4956+ /**
4957+ * ================== angular-ios9-uiwebview.patch.js v1.1.1 ==================
4958+ *
4959+ * This patch works around iOS9 UIWebView regression that causes infinite digest
4960+ * errors in Angular.
4961+ *
4962+ * The patch can be applied to Angular 1.2.0 – 1.4.5. Newer versions of Angular
4963+ * have the workaround baked in.
4964+ *
4965+ * To apply this patch load/bundle this file with your application and add a
4966+ * dependency on the "ngIOS9UIWebViewPatch" module to your main app module.
4967+ *
4968+ * For example:
4969+ *
4970+ * ```
4971+ * angular.module('myApp', ['ngRoute'])`
4972+ * ```
4973+ *
4974+ * becomes
4975+ *
4976+ * ```
4977+ * angular.module('myApp', ['ngRoute', 'ngIOS9UIWebViewPatch'])
4978+ * ```
4979+ *
4980+ *
4981+ * More info:
4982+ * - https://openradar.appspot.com/22186109
4983+ * - https://github.com/angular/angular.js/issues/12241
4984+ * - https://github.com/driftyco/ionic/issues/4082
4985+ *
4986+ *
4987+ * @license AngularJS
4988+ * (c) 2010-2015 Google, Inc. http://angularjs.org
4989+ * License: MIT
4990+ */
4991+
4992+ angular . module ( 'ngIOS9UIWebViewPatch' , [ 'ng' ] ) . config ( [ '$provide' , function ( $provide ) {
4993+ 'use strict' ;
4994+
4995+ $provide . decorator ( '$browser' , [ '$delegate' , '$window' , function ( $delegate , $window ) {
4996+
4997+ if ( isIOS9UIWebView ( $window . navigator . userAgent ) ) {
4998+ return applyIOS9Shim ( $delegate ) ;
4999+ }
5000+
5001+ return $delegate ;
5002+
5003+ function isIOS9UIWebView ( userAgent ) {
5004+ return / ( i P h o n e | i P a d | i P o d ) .* O S 9 _ \d / . test ( userAgent ) && ! / V e r s i o n \/ 9 \. / . test ( userAgent ) ;
5005+ }
5006+
5007+ function applyIOS9Shim ( browser ) {
5008+ var pendingLocationUrl = null ;
5009+ var originalUrlFn = browser . url ;
5010+
5011+ browser . url = function ( ) {
5012+ if ( arguments . length ) {
5013+ pendingLocationUrl = arguments [ 0 ] ;
5014+ return originalUrlFn . apply ( browser , arguments ) ;
5015+ }
5016+
5017+ return pendingLocationUrl || originalUrlFn . apply ( browser , arguments ) ;
5018+ } ;
5019+
5020+ window . addEventListener ( 'popstate' , clearPendingLocationUrl , false ) ;
5021+ window . addEventListener ( 'hashchange' , clearPendingLocationUrl , false ) ;
5022+
5023+ function clearPendingLocationUrl ( ) {
5024+ pendingLocationUrl = null ;
5025+ }
5026+
5027+ return browser ;
5028+ }
5029+ } ] ) ;
5030+ } ] ) ;
5031+
49545032/**
49555033 * @private
49565034 * Parts of Ionic requires that $scope data is attached to the element.
@@ -6396,6 +6474,9 @@ function($scope, $element, $attrs, $compile, $controller, $ionicNavBarDelegate,
63966474 if ( viewLocals && viewLocals . $$controller ) {
63976475 viewLocals . $scope = viewScope ;
63986476 var controller = $controller ( viewLocals . $$controller , viewLocals ) ;
6477+ if ( viewLocals . $$controllerAs ) {
6478+ viewScope [ viewLocals . $$controllerAs ] = controller ;
6479+ }
63996480 $element . children ( ) . data ( '$ngControllerController' , controller ) ;
64006481 }
64016482
@@ -8458,7 +8539,7 @@ IonicModule
84588539 * <ion-scroll direction="x" class="available-scroller">
84598540 * <div class="photo" collection-repeat="photo in main.photos"
84608541 * item-height="250" item-width="photo.width + 30">
8461- * <img ng-src="{{ photo.src}}">
8542+ * <img ng-src="{% raw %}{{ photo.src}}{% endraw % }">
84628543 * </div>
84638544 * </ion-scroll>
84648545 * </ion-content>
@@ -10124,6 +10205,12 @@ function headerFooterBarDirective(isHeader) {
1012410205 $scope . $watch ( '$hasTabs' , function ( val ) {
1012510206 $element . toggleClass ( 'has-tabs' , ! ! val ) ;
1012610207 } ) ;
10208+ ctrl . align ( ) ;
10209+ $scope . $on ( '$ionicFooter.align' , function ( ) {
10210+ ionic . requestAnimationFrame ( function ( ) {
10211+ ctrl . align ( ) ;
10212+ } ) ;
10213+ } ) ;
1012710214 }
1012810215 }
1012910216 }
@@ -10449,7 +10536,7 @@ var ITEM_TPL_OPTION_BUTTONS =
1044910536* @description
1045010537* Creates an option button inside a list item, that is visible when the item is swiped
1045110538* to the left by the user. Swiped open option buttons can be hidden with
10452- * {@link ionic.service:$ionicListDelegate#closeOptionButtons $ionicListDelegate# closeOptionButtons}.
10539+ * {@link ionic.service:$ionicListDelegate#closeOptionButtons $ionicListDelegate. closeOptionButtons}.
1045310540*
1045410541* Can be assigned any button class.
1045510542*
@@ -11766,13 +11853,16 @@ IonicModule
1176611853 template :
1176711854 '<label class="item item-radio">' +
1176811855 '<input type="radio" name="radio-group">' +
11769- '<div class="item-content disable-pointer-events" ng-transclude></div>' +
11770- '<i class="radio-icon disable-pointer-events icon ion-checkmark"></i>' +
11856+ '<div class="radio-content">' +
11857+ '<div class="item-content disable-pointer-events" ng-transclude></div>' +
11858+ '<i class="radio-icon disable-pointer-events icon ion-checkmark"></i>' +
11859+ '</div>' +
1177111860 '</label>' ,
1177211861
1177311862 compile : function ( element , attr ) {
1177411863 if ( attr . icon ) {
11775- element . children ( ) . eq ( 2 ) . removeClass ( 'ion-checkmark' ) . addClass ( attr . icon ) ;
11864+ var iconElm = element . find ( 'i' ) ;
11865+ iconElm . removeClass ( 'ion-checkmark' ) . addClass ( attr . icon ) ;
1177611866 }
1177711867
1177811868 var input = element . find ( 'input' ) ;
0 commit comments