mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-10-18 17:58:12 +00:00
chore(js/css): update generated files
This commit is contained in:
1 parent
b3932cc3de
commit
099ef0ef7e
9 files changed
+675
-175
No files matched your search
@@ -1,2 +1,2 @@
|
|||||||
@charset "UTF-8";.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}.sg-hide{opacity:0}@-moz-document url-prefix(){[layout-fill]{margin:0;width:100%;min-height:100%;height:100%}}[flex-order]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="-20"]{-webkit-box-ordinal-group:-19;-webkit-order:-20;order:-20}[flex-order="-19"]{-webkit-box-ordinal-group:-18;-webkit-order:-19;order:-19}[flex-order="-18"]{-webkit-box-ordinal-group:-17;-webkit-order:-18;order:-18}[flex-order="-17"]{-webkit-box-ordinal-group:-16;-webkit-order:-17;order:-17}[flex-order="-16"]{-webkit-box-ordinal-group:-15;-webkit-order:-16;order:-16}[flex-order="-15"]{-webkit-box-ordinal-group:-14;-webkit-order:-15;order:-15}[flex-order="-14"]{-webkit-box-ordinal-group:-13;-webkit-order:-14;order:-14}[flex-order="-13"]{-webkit-box-ordinal-group:-12;-webkit-order:-13;order:-13}[flex-order="-12"]{-webkit-box-ordinal-group:-11;-webkit-order:-12;order:-12}[flex-order="-11"]{-webkit-box-ordinal-group:-10;-webkit-order:-11;order:-11}[flex-order="-10"]{-webkit-box-ordinal-group:-9;-webkit-order:-10;order:-10}[flex-order="-9"]{-webkit-box-ordinal-group:-8;-webkit-order:-9;order:-9}[flex-order="-8"]{-webkit-box-ordinal-group:-7;-webkit-order:-8;order:-8}[flex-order="-7"]{-webkit-box-ordinal-group:-6;-webkit-order:-7;order:-7}[flex-order="-6"]{-webkit-box-ordinal-group:-5;-webkit-order:-6;order:-6}[flex-order="-5"]{-webkit-box-ordinal-group:-4;-webkit-order:-5;order:-5}[flex-order="-4"]{-webkit-box-ordinal-group:-3;-webkit-order:-4;order:-4}[flex-order="-3"]{-webkit-box-ordinal-group:-2;-webkit-order:-3;order:-3}[flex-order="-2"]{-webkit-box-ordinal-group:-1;-webkit-order:-2;order:-2}[flex-order="-1"]{-webkit-box-ordinal-group:0;-webkit-order:-1;order:-1}[flex-order="0"]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="1"]{-webkit-box-ordinal-group:2;-webkit-order:1;order:1}[flex-order="2"]{-webkit-box-ordinal-group:3;-webkit-order:2;order:2}[flex-order="3"]{-webkit-box-ordinal-group:4;-webkit-order:3;order:3}[flex-order="4"]{-webkit-box-ordinal-group:5;-webkit-order:4;order:4}[flex-order="5"]{-webkit-box-ordinal-group:6;-webkit-order:5;order:5}[flex-order="6"]{-webkit-box-ordinal-group:7;-webkit-order:6;order:6}[flex-order="7"]{-webkit-box-ordinal-group:8;-webkit-order:7;order:7}[flex-order="8"]{-webkit-box-ordinal-group:9;-webkit-order:8;order:8}[flex-order="9"]{-webkit-box-ordinal-group:10;-webkit-order:9;order:9}[flex-order="10"]{-webkit-box-ordinal-group:11;-webkit-order:10;order:10}[flex-order="11"]{-webkit-box-ordinal-group:12;-webkit-order:11;order:11}[flex-order="12"]{-webkit-box-ordinal-group:13;-webkit-order:12;order:12}[flex-order="13"]{-webkit-box-ordinal-group:14;-webkit-order:13;order:13}[flex-order="14"]{-webkit-box-ordinal-group:15;-webkit-order:14;order:14}[flex-order="15"]{-webkit-box-ordinal-group:16;-webkit-order:15;order:15}[flex-order="16"]{-webkit-box-ordinal-group:17;-webkit-order:16;order:16}[flex-order="17"]{-webkit-box-ordinal-group:18;-webkit-order:17;order:17}[flex-order="18"]{-webkit-box-ordinal-group:19;-webkit-order:18;order:18}[flex-order="19"]{-webkit-box-ordinal-group:20;-webkit-order:19;order:19}[flex-order="20"]{-webkit-box-ordinal-group:21;-webkit-order:20;order:20}[flex-offset="0"]{margin-left:0}[flex-offset="5"]{margin-left:5%}[flex-offset="10"]{margin-left:10%}[flex-offset="15"]{margin-left:15%}[flex-offset="20"]{margin-left:20%}[flex-offset="25"]{margin-left:25%}[flex-offset="30"]{margin-left:30%}[flex-offset="35"]{margin-left:35%}[flex-offset="40"]{margin-left:40%}[flex-offset="45"]{margin-left:45%}[flex-offset="50"]{margin-left:50%}[flex-offset="55"]{margin-left:55%}[flex-offset="60"]{margin-left:60%}[flex-offset="65"]{margin-left:65%}[flex-offset="70"]{margin-left:70%}[flex-offset="75"]{margin-left:75%}[flex-offset="80"]{margin-left:80%}[flex-offset="85"]{margin-left:85%}[flex-offset="90"]{margin-left:90%}[flex-offset="95"]{margin-left:95%}[flex-offset="33"]{margin-left:calc(100% / 3)}[flex-offset="66"]{margin-left:calc(200% / 3)}[layout-align="start stretch"],[layout-align]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}[layout-align="start center"],[layout-align="start end"],[layout-align="start start"],[layout-align="start stretch"],[layout-align=start]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}[layout-align="center center"],[layout-align="center end"],[layout-align="center start"],[layout-align="center stretch"],[layout-align=center]{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}[layout-align="end center"],[layout-align="end end"],[layout-align="end start"],[layout-align="end stretch"],[layout-align=end]{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}[layout-align="spacLine truncated
|
@charset "UTF-8";.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}.sg-hide{opacity:0}@-moz-document url-prefix(){[layout-fill]{margin:0;width:100%;min-height:100%;height:100%}}[flex-order]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="-20"]{-webkit-box-ordinal-group:-19;-webkit-order:-20;order:-20}[flex-order="-19"]{-webkit-box-ordinal-group:-18;-webkit-order:-19;order:-19}[flex-order="-18"]{-webkit-box-ordinal-group:-17;-webkit-order:-18;order:-18}[flex-order="-17"]{-webkit-box-ordinal-group:-16;-webkit-order:-17;order:-17}[flex-order="-16"]{-webkit-box-ordinal-group:-15;-webkit-order:-16;order:-16}[flex-order="-15"]{-webkit-box-ordinal-group:-14;-webkit-order:-15;order:-15}[flex-order="-14"]{-webkit-box-ordinal-group:-13;-webkit-order:-14;order:-14}[flex-order="-13"]{-webkit-box-ordinal-group:-12;-webkit-order:-13;order:-13}[flex-order="-12"]{-webkit-box-ordinal-group:-11;-webkit-order:-12;order:-12}[flex-order="-11"]{-webkit-box-ordinal-group:-10;-webkit-order:-11;order:-11}[flex-order="-10"]{-webkit-box-ordinal-group:-9;-webkit-order:-10;order:-10}[flex-order="-9"]{-webkit-box-ordinal-group:-8;-webkit-order:-9;order:-9}[flex-order="-8"]{-webkit-box-ordinal-group:-7;-webkit-order:-8;order:-8}[flex-order="-7"]{-webkit-box-ordinal-group:-6;-webkit-order:-7;order:-7}[flex-order="-6"]{-webkit-box-ordinal-group:-5;-webkit-order:-6;order:-6}[flex-order="-5"]{-webkit-box-ordinal-group:-4;-webkit-order:-5;order:-5}[flex-order="-4"]{-webkit-box-ordinal-group:-3;-webkit-order:-4;order:-4}[flex-order="-3"]{-webkit-box-ordinal-group:-2;-webkit-order:-3;order:-3}[flex-order="-2"]{-webkit-box-ordinal-group:-1;-webkit-order:-2;order:-2}[flex-order="-1"]{-webkit-box-ordinal-group:0;-webkit-order:-1;order:-1}[flex-order="0"]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="1"]{-webkit-box-ordinal-group:2;-webkit-order:1;order:1}[flex-order="2"]{-webkit-box-ordinal-group:3;-webkit-order:2;order:2}[flex-order="3"]{-webkit-box-ordinal-group:4;-webkit-order:3;order:3}[flex-order="4"]{-webkit-box-ordinal-group:5;-webkit-order:4;order:4}[flex-order="5"]{-webkit-box-ordinal-group:6;-webkit-order:5;order:5}[flex-order="6"]{-webkit-box-ordinal-group:7;-webkit-order:6;order:6}[flex-order="7"]{-webkit-box-ordinal-group:8;-webkit-order:7;order:7}[flex-order="8"]{-webkit-box-ordinal-group:9;-webkit-order:8;order:8}[flex-order="9"]{-webkit-box-ordinal-group:10;-webkit-order:9;order:9}[flex-order="10"]{-webkit-box-ordinal-group:11;-webkit-order:10;order:10}[flex-order="11"]{-webkit-box-ordinal-group:12;-webkit-order:11;order:11}[flex-order="12"]{-webkit-box-ordinal-group:13;-webkit-order:12;order:12}[flex-order="13"]{-webkit-box-ordinal-group:14;-webkit-order:13;order:13}[flex-order="14"]{-webkit-box-ordinal-group:15;-webkit-order:14;order:14}[flex-order="15"]{-webkit-box-ordinal-group:16;-webkit-order:15;order:15}[flex-order="16"]{-webkit-box-ordinal-group:17;-webkit-order:16;order:16}[flex-order="17"]{-webkit-box-ordinal-group:18;-webkit-order:17;order:17}[flex-order="18"]{-webkit-box-ordinal-group:19;-webkit-order:18;order:18}[flex-order="19"]{-webkit-box-ordinal-group:20;-webkit-order:19;order:19}[flex-order="20"]{-webkit-box-ordinal-group:21;-webkit-order:20;order:20}[flex-offset="0"]{margin-left:0}[flex-offset="5"]{margin-left:5%}[flex-offset="10"]{margin-left:10%}[flex-offset="15"]{margin-left:15%}[flex-offset="20"]{margin-left:20%}[flex-offset="25"]{margin-left:25%}[flex-offset="30"]{margin-left:30%}[flex-offset="35"]{margin-left:35%}[flex-offset="40"]{margin-left:40%}[flex-offset="45"]{margin-left:45%}[flex-offset="50"]{margin-left:50%}[flex-offset="55"]{margin-left:55%}[flex-offset="60"]{margin-left:60%}[flex-offset="65"]{margin-left:65%}[flex-offset="70"]{margin-left:70%}[flex-offset="75"]{margin-left:75%}[flex-offset="80"]{margin-left:80%}[flex-offset="85"]{margin-left:85%}[flex-offset="90"]{margin-left:90%}[flex-offset="95"]{margin-left:95%}[flex-offset="33"]{margin-left:calc(100% / 3)}[flex-offset="66"]{margin-left:calc(200% / 3)}[layout-align="start stretch"],[layout-align]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}[layout-align="start center"],[layout-align="start end"],[layout-align="start start"],[layout-align="start stretch"],[layout-align=start]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}[layout-align="center center"],[layout-align="center end"],[layout-align="center start"],[layout-align="center stretch"],[layout-align=center]{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}[layout-align="end center"],[layout-align="end end"],[layout-align="end start"],[layout-align="end stretch"],[layout-align=end]{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}[layout-align="spacLine truncated
|
||||||
/*# sourceMappingURL=styles.css.map */
|
/*# sourceMappingURL=styles.css.map */
|
||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"sources":["file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/angular.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/services/layout/layout-attributes.scss","css/styles.css","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/style/structure.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/style/_mixins.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/structure.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/services/layout/layout.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/layout-attributes.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/layout.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/node_modules/breakpoint-sass/stylesheets/_breakpoint.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/style/typography.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/typography.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/autocomplete/autocomplete.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/autocomplete/autocomplete.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/backdrop/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/backdrop/backdrop.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/button/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/button/button.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/button/button.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/card/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/card/card.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/card/card.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/checkbox/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/checkbox/checkbox.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/checkbox/checkbox.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/chips/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/chips/chips.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/chips/chips.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/content/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/content/content.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/content/content.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/datepicker/_extends-calendar.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/datepicker/calendar.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/datepicker/_extends-datePicker.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/datepicker/datePicker.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/datepicker/datePicker.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/dialog/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/dialog/dialog.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/dialog/dialog.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/divider/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/divider/divider.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/fabSpeedDial/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/gridList/grid-list.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/gridList/grid-list.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/icon/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/icon/icon.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/icon/Line truncated
|
{"version":3,"sources":["file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/angular.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/services/layout/layout-attributes.scss","css/styles.css","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/style/structure.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/style/_mixins.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/structure.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/services/layout/layout.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/layout-attributes.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/layout.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/node_modules/breakpoint-sass/stylesheets/_breakpoint.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/core/style/typography.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/core/typography.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/autocomplete/autocomplete.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/autocomplete/autocomplete.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/backdrop/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/backdrop/backdrop.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/button/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/button/button.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/button/button.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/card/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/card/card.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/card/card.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/checkbox/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/checkbox/checkbox.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/checkbox/checkbox.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/chips/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/chips/chips.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/chips/chips.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/content/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/content/content.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/content/content.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/datepicker/_extends-calendar.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/datepicker/calendar.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/datepicker/_extends-datePicker.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/datepicker/datePicker.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/datepicker/datePicker.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/dialog/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/dialog/dialog.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/dialog/dialog.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/divider/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/divider/divider.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/fabSpeedDial/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/gridList/grid-list.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/gridList/grid-list.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/icon/_extends.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/angular-material/src/components/icon/icon.scss","file:/builds/SOGo3-automated-checkout/UI/WebServerResources/scss/components/icon/Line truncated
|
||||||
+653
-159
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -2,6 +2,6 @@
|
|||||||
* AngularJS Material Design
|
* AngularJS Material Design
|
||||||
* https://github.com/angular/material
|
* https://github.com/angular/material
|
||||||
* @license MIT
|
* @license MIT
|
||||||
* v1.2.1
|
* v1.2.2
|
||||||
*/
|
*/
|
||||||
!function(L,be,ge){"use strict";function e(e,t){if(t.has("$swipe")){e.warn("You are using the ngTouch module. \nAngularJS Material already has mobile click, tap, and swipe support... \nngTouch is not supported with AngularJS Material!")}}function t(e,t){e.decorator("$$rAF",["$delegate",n]),e.decorator("$q",["$delegate",o]),t.theme("default").primaryPalette("indigo").accentPalette("pink").warnPalette("deep-orange").backgroundPalette("grey")}function n(i){return i.throttle=function(e){var t,n,o,r;return function(){t=arguments,r=this,o=e,n||(n=!0,i(function(){o.apply(r,Array.prototype.slice.call(t)),n=!1}))}},i}function o(e){return e.resolve||(e.resolve=e.when),e}function r(i){return{restrict:"A",link:{pre:function(e,t,n){var o=n.mdAutoFocus||n.mdAutofocus||n.mdSidenavFocus;r(i(o)(e)),o&&e.$watch(o,r);function r(e){be.isUndefined(e)&&(e=!0),t.toggleClass("md-autofocus",!!e)}}}}}function i(e,d){function s(){return!0}e&&!be.isArray(e)&&(e=Array.prototype.slice.call(e)),d=!!d;var l=e||[];return{items:function(){return[].concat(l)},count:function(){return l.length},inRange:c,contains:t,indexOf:m,itemAt:function(e){return c(e)?l[e]:null},findBy:function(t,n){return l.filter(function(e){return e[t]===n})},add:function(e,t){if(!e)return-1;be.isNumber(t)||(t=l.length);return l.splice(t,0,e),m(e)},remove:function(e){t(e)&&l.splice(m(e),1)},first:u,last:p,next:be.bind(null,n,!1),previous:be.bind(null,n,!0),hasPrevious:function(e){return!!e&&c(m(e)-1)},hasNext:function(e){return!!e&&c(m(e)+1)}};function c(e){return l.length&&-1<e&&e<l.length}function m(e){return l.indexOf(e)}function t(e){return e&&-1<m(e)}function u(){return l.length?l[0]:null}function p(){return l.length?l[l.length-1]:null}function n(e,t,n,o){n=n||s;for(var r=m(t);;){if(!c(r))return null;var i=r+(e?-1:1),a=null;if(c(i)?a=l[i]:d&&(i=m(a=e?p():u())),null===a||i===o)return null;if(n(a))return a;be.isUndefined(o)&&(o=i),r=i}}}function a(a,t,o){var i={},d={},r={},n={};return e.getResponsiveAttribute=function(e,t){for(var n=0;n<a.MEDIA_PRIORITY.length;n++){var o=a.MEDIA_PRIORITY[n];if(d[i[o]].matches){var r=l(e,t+"-"+o);if(e[r])return e[r]}}return e[l(e,t)]},e.getQuery=function(e){return d[e]},e.watchResponsiveAttributes=function(e,o,r){var i=[];return e.forEach(function(e){var t=l(o,e);for(var n in be.isDefined(o[t])&&i.push(o.$observe(t,be.bind(void 0,r,null))),a.MEDIA)t=l(o,e+"-"+n),be.isDefined(o[t])&&i.push(o.$observe(t,be.bind(void 0,r,n)))}),function(){i.forEach(function(e){e()})}},e;function e(e){var t=i[e];be.isUndefined(t)&&(t=i[e]=function(e){return a.MEDIA[e]||("("!==e.charAt(0)?"("+e+")":e)}(e));var n=r[t];return be.isUndefined(n)&&(n=function(e){var t=d[e];t=t||(d[e]=o.matchMedia(e));return t.addListener(s),r[t.media]=!!t.matches}(t)),n}function s(e){t.$evalAsync(function(){r[e.media]=!!e.matches})}function l(e,t){return n[t]||(n[t]=e.$normalize(t))}}function d(e,t){var o=["data","x"];return e?t?n(e):r(e):{buildList:r,buildSelector:n,hasAttribute:function(e,t){if(!(e=i(e)))return!1;for(var n=r(t),o=0;o<n.length;o++)if(e.hasAttribute(n[o]))return!0;return!1},removeAttribute:function(t,e){if(!(t=i(t)))return;r(e).forEach(function(e){t.removeAttribute(e)})}};function r(n){return(n=be.isArray(n)?n:[n]).forEach(function(t){o.forEach(function(e){n.push(e+"-"+t)})}),n}function n(e){return r(e=be.isArray(e)?e:[e]).map(function(e){return"["+e+"]"}).join(",")}function i(e){if((e=e[0]||e).nodeType)return e}}function A(e){return e.replace(/-[a-z]/g,function(e){return e.charAt(1).toUpperCase()})}var w,_,k,x,N,s,l,c,m,u,p,h,f,b,g,v,E,$,y,M,C,T;function S(o,r,s,i){var a=this.showWarnings;return{expect:d,expectAsync:l,expectWithText:function(e,t){var n=c(e)||"";-1<n.indexOf(i.startSymbol())?l(e,t,function(){return c(e)}):d(e,t,n)},expectWithoutText:function(e,t){var n=c(e);-1<n.indexOf(i.startSymbol())||n||d(e,t,n)},getText:c,hasAriaLabel:m,parentHasAriaLabel:function e(t,n){n=n||1;var o=be.element(t)[0]||t;if(!o.parentNode)return!1;if(r(o.parentNode))return!0;n--;if(n)return e(o.parentNode,n);return!1;function r(e){if(!m(e))return!1;if(e.hasAttribute("role"))switch(e.getAttribute("role").toLowerCase()){case"command":case"definition":case"directory":case"grid":case"list":case"listitem":case"log":case"marquee":case"menu":case"menubar":case"note":case"presentation":case"separator":case"scrollbar":case"status":case"tablist":return!1}switch(e.tagName.toLowerCase()){case"abbr":case"acronym":case"address":case"applet":case"audio":case"b":case"bdi":case"bdo":case"big":case"blockquote":case"br":case"canvas":case"caption":case"center":case"cite":case"code":case"col":case"data":case"dd":case"del":case"dfn":case"dir":case"div":case"dl":case"em":case"embed":case"fieldset":case"figcaption":case"font":case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":case"hgroup":case"html":case"i":case"ins":case"isindex":case"kbd":case"keygen":case"label":case"legend":case"li":case"map":case"mark":case"menu":case"object":case"ol":case"output":case"pre":case"presentation":case"q":case"Line truncated
|
!function(L,be,ge){"use strict";function e(e,t){if(t.has("$swipe")){e.warn("You are using the ngTouch module. \nAngularJS Material already has mobile click, tap, and swipe support... \nngTouch is not supported with AngularJS Material!")}}function t(e,t){e.decorator("$$rAF",["$delegate",n]),e.decorator("$q",["$delegate",o]),t.theme("default").primaryPalette("indigo").accentPalette("pink").warnPalette("deep-orange").backgroundPalette("grey")}function n(i){return i.throttle=function(e){var t,n,o,r;return function(){t=arguments,r=this,o=e,n||(n=!0,i(function(){o.apply(r,Array.prototype.slice.call(t)),n=!1}))}},i}function o(e){return e.resolve||(e.resolve=e.when),e}function r(i){return{restrict:"A",link:{pre:function(e,t,n){var o=n.mdAutoFocus||n.mdAutofocus||n.mdSidenavFocus;r(i(o)(e)),o&&e.$watch(o,r);function r(e){be.isUndefined(e)&&(e=!0),t.toggleClass("md-autofocus",!!e)}}}}}function i(e,d){function s(){return!0}e&&!be.isArray(e)&&(e=Array.prototype.slice.call(e)),d=!!d;var l=e||[];return{items:function(){return[].concat(l)},count:function(){return l.length},inRange:c,contains:t,indexOf:m,itemAt:function(e){return c(e)?l[e]:null},findBy:function(t,n){return l.filter(function(e){return e[t]===n})},add:function(e,t){if(!e)return-1;be.isNumber(t)||(t=l.length);return l.splice(t,0,e),m(e)},remove:function(e){t(e)&&l.splice(m(e),1)},first:u,last:p,next:be.bind(null,n,!1),previous:be.bind(null,n,!0),hasPrevious:function(e){return!!e&&c(m(e)-1)},hasNext:function(e){return!!e&&c(m(e)+1)}};function c(e){return l.length&&-1<e&&e<l.length}function m(e){return l.indexOf(e)}function t(e){return e&&-1<m(e)}function u(){return l.length?l[0]:null}function p(){return l.length?l[l.length-1]:null}function n(e,t,n,o){n=n||s;for(var r=m(t);;){if(!c(r))return null;var i=r+(e?-1:1),a=null;if(c(i)?a=l[i]:d&&(i=m(a=e?p():u())),null===a||i===o)return null;if(n(a))return a;be.isUndefined(o)&&(o=i),r=i}}}function a(a,t,o){var i={},d={},r={},n={};return e.getResponsiveAttribute=function(e,t){for(var n=0;n<a.MEDIA_PRIORITY.length;n++){var o=a.MEDIA_PRIORITY[n];if(d[i[o]].matches){var r=l(e,t+"-"+o);if(e[r])return e[r]}}return e[l(e,t)]},e.getQuery=function(e){return d[e]},e.watchResponsiveAttributes=function(e,o,r){var i=[];return e.forEach(function(e){var t=l(o,e);for(var n in be.isDefined(o[t])&&i.push(o.$observe(t,be.bind(void 0,r,null))),a.MEDIA)t=l(o,e+"-"+n),be.isDefined(o[t])&&i.push(o.$observe(t,be.bind(void 0,r,n)))}),function(){i.forEach(function(e){e()})}},e;function e(e){var t=i[e];be.isUndefined(t)&&(t=i[e]=function(e){return a.MEDIA[e]||("("!==e.charAt(0)?"("+e+")":e)}(e));var n=r[t];return be.isUndefined(n)&&(n=function(e){var t=d[e];t=t||(d[e]=o.matchMedia(e));return t.addListener(s),r[t.media]=!!t.matches}(t)),n}function s(e){t.$evalAsync(function(){r[e.media]=!!e.matches})}function l(e,t){return n[t]||(n[t]=e.$normalize(t))}}function d(e,t){var o=["data","x"];return e?t?n(e):r(e):{buildList:r,buildSelector:n,hasAttribute:function(e,t){if(!(e=i(e)))return!1;for(var n=r(t),o=0;o<n.length;o++)if(e.hasAttribute(n[o]))return!0;return!1},removeAttribute:function(t,e){if(!(t=i(t)))return;r(e).forEach(function(e){t.removeAttribute(e)})}};function r(n){return(n=be.isArray(n)?n:[n]).forEach(function(t){o.forEach(function(e){n.push(e+"-"+t)})}),n}function n(e){return r(e=be.isArray(e)?e:[e]).map(function(e){return"["+e+"]"}).join(",")}function i(e){if((e=e[0]||e).nodeType)return e}}function A(e){return e.replace(/-[a-z]/g,function(e){return e.charAt(1).toUpperCase()})}var w,_,k,x,N,s,l,c,m,u,p,h,f,b,g,E,v,$,M,y,C,T;function S(o,r,s,i){var a=this.showWarnings;return{expect:d,expectAsync:l,expectWithText:function(e,t){var n=c(e)||"";-1<n.indexOf(i.startSymbol())?l(e,t,function(){return c(e)}):d(e,t,n)},expectWithoutText:function(e,t){var n=c(e);-1<n.indexOf(i.startSymbol())||n||d(e,t,n)},getText:c,hasAriaLabel:m,parentHasAriaLabel:function e(t,n){n=n||1;var o=be.element(t)[0]||t;if(!o.parentNode)return!1;if(r(o.parentNode))return!0;n--;if(n)return e(o.parentNode,n);return!1;function r(e){if(!m(e))return!1;if(e.hasAttribute("role"))switch(e.getAttribute("role").toLowerCase()){case"command":case"definition":case"directory":case"grid":case"list":case"listitem":case"log":case"marquee":case"menu":case"menubar":case"note":case"presentation":case"separator":case"scrollbar":case"status":case"tablist":return!1}switch(e.tagName.toLowerCase()){case"abbr":case"acronym":case"address":case"applet":case"audio":case"b":case"bdi":case"bdo":case"big":case"blockquote":case"br":case"canvas":case"caption":case"center":case"cite":case"code":case"col":case"data":case"dd":case"del":case"dfn":case"dir":case"div":case"dl":case"em":case"embed":case"fieldset":case"figcaption":case"font":case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":case"hgroup":case"html":case"i":case"ins":case"isindex":case"kbd":case"keygen":case"label":case"legend":case"li":case"map":case"mark":case"menu":case"object":case"ol":case"output":case"pre":case"presentation":case"q":case"Line truncated
|
||||||
+8
-3
@@ -4,7 +4,7 @@
|
|||||||
* This causes it to be incompatible with plugins that depend on @uirouter/core.
|
* This causes it to be incompatible with plugins that depend on @uirouter/core.
|
||||||
* We recommend switching to the ui-router-core.js and ui-router-angularjs.js bundles instead.
|
* We recommend switching to the ui-router-core.js and ui-router-angularjs.js bundles instead.
|
||||||
* For more information, see https://ui-router.github.io/blog/uirouter-for-angularjs-umd-bundles
|
* For more information, see https://ui-router.github.io/blog/uirouter-for-angularjs-umd-bundles
|
||||||
* @version v1.0.28
|
* @version v1.0.29
|
||||||
* @link https://ui-router.github.io
|
* @link https://ui-router.github.io
|
||||||
* @license MIT License, http://www.opensource.org/licenses/MIT
|
* @license MIT License, http://www.opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
@@ -4722,8 +4722,13 @@
|
|||||||
};
|
};
|
||||||
UrlMatcher.prototype._getDecodedParamValue = function (value, param) {
|
UrlMatcher.prototype._getDecodedParamValue = function (value, param) {
|
||||||
if (isDefined(value)) {
|
if (isDefined(value)) {
|
||||||
if (this.config.decodeParams && !param.type.raw && !isArray(value)) {
|
if (this.config.decodeParams && !param.type.raw) {
|
||||||
value = decodeURIComponent(value);
|
if (isArray(value)) {
|
||||||
|
value = value.map(function (paramValue) { return decodeURIComponent(paramValue); });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value = decodeURIComponent(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
value = param.type.decode(value);
|
value = param.type.decode(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,12 +107,12 @@
|
|||||||
"import { isString } from '../common/predicates';\nimport { StateOrName } from './interface';\nimport { StateObject } from './stateObject';\nimport { values } from '../common/common';\nimport { safeConsole } from '../common/safeConsole';\n\nexport class StateMatcher {\n constructor(private _states: { [key: string]: StateObject }) {}\n\n isRelative(stateName: string) {\n stateName = stateName || '';\n return stateName.indexOf('.') === 0 || stateName.indexOf('^') === 0;\n }\n\n find(stateOrName: StateOrName, base?: StateOrName, matchGlob = true): StateObject {\n if (!stateOrName && stateOrName !== '') return undefined;\n const isStr = isString(stateOrName);\n let name: string = isStr ? stateOrName : (<any>stateOrName).name;\n\n if (this.isRelative(name)) name = this.resolvePath(name, base);\n const state = this._states[name];\n\n if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n return state;\n } else if (isStr && matchGlob) {\n const _states = values(this._states);\n const matches = _states.filter(\n (_state) => _state.__stateObjectCache.nameGlob && _state.__stateObjectCache.nameGlob.matches(name)\n );\n\n if (matches.length > 1) {\n safeConsole.error(\n `stateMatcher.find: Found multiple matches for ${name} using glob: `,\n matches.map((match) => match.name)\n );\n }\n return matches[0];\n }\n return undefined;\n }\n\n resolvePath(name: string, base: StateOrName) {\n if (!base) throw new Error(`No reference point given for path '${name}'`);\n\n const baseState: StateObject = this.find(base);\n\n const splitName = name.split('.');\n const pathLength = splitName.length;\n let i = 0,\n current = baseState;\n\n for (; i < pathLength; i++) {\n if (splitName[i] === '' && i === 0) {\n current = baseState;\n continue;\n }\n if (splitName[i] === '^') {\n if (!current.parent) throw new Error(`Path '${name}' not valid for state '${baseState.name}'`);\n current = current.parent;\n continue;\n }\n break;\n }\n const relName = splitName.slice(i).join('.');\n return current.name + (current.name && relName ? '.' : '') + relName;\n }\n}\n",
|
"import { isString } from '../common/predicates';\nimport { StateOrName } from './interface';\nimport { StateObject } from './stateObject';\nimport { values } from '../common/common';\nimport { safeConsole } from '../common/safeConsole';\n\nexport class StateMatcher {\n constructor(private _states: { [key: string]: StateObject }) {}\n\n isRelative(stateName: string) {\n stateName = stateName || '';\n return stateName.indexOf('.') === 0 || stateName.indexOf('^') === 0;\n }\n\n find(stateOrName: StateOrName, base?: StateOrName, matchGlob = true): StateObject {\n if (!stateOrName && stateOrName !== '') return undefined;\n const isStr = isString(stateOrName);\n let name: string = isStr ? stateOrName : (<any>stateOrName).name;\n\n if (this.isRelative(name)) name = this.resolvePath(name, base);\n const state = this._states[name];\n\n if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n return state;\n } else if (isStr && matchGlob) {\n const _states = values(this._states);\n const matches = _states.filter(\n (_state) => _state.__stateObjectCache.nameGlob && _state.__stateObjectCache.nameGlob.matches(name)\n );\n\n if (matches.length > 1) {\n safeConsole.error(\n `stateMatcher.find: Found multiple matches for ${name} using glob: `,\n matches.map((match) => match.name)\n );\n }\n return matches[0];\n }\n return undefined;\n }\n\n resolvePath(name: string, base: StateOrName) {\n if (!base) throw new Error(`No reference point given for path '${name}'`);\n\n const baseState: StateObject = this.find(base);\n\n const splitName = name.split('.');\n const pathLength = splitName.length;\n let i = 0,\n current = baseState;\n\n for (; i < pathLength; i++) {\n if (splitName[i] === '' && i === 0) {\n current = baseState;\n continue;\n }\n if (splitName[i] === '^') {\n if (!current.parent) throw new Error(`Path '${name}' not valid for state '${baseState.name}'`);\n current = current.parent;\n continue;\n }\n break;\n }\n const relName = splitName.slice(i).join('.');\n return current.name + (current.name && relName ? '.' : '') + relName;\n }\n}\n",
|
||||||
"import { inArray, isString, prop } from '../common';\nimport { _StateDeclaration } from './interface';\nimport { StateObject } from './stateObject';\nimport { StateBuilder } from './stateBuilder';\nimport { StateRegistryListener } from './stateRegistry';\nimport { Disposable } from '../interface';\nimport { UIRouter } from '../router';\n\nexport class StateQueueManager implements Disposable {\n queue: StateObject[] = [];\n\n constructor(\n private router: UIRouter,\n public states: { [key: string]: StateObject },\n public builder: StateBuilder,\n public listeners: StateRegistryListener[]\n ) {}\n\n dispose() {\n this.queue = [];\n }\n\n register(stateDecl: _StateDeclaration) {\n const queue = this.queue;\n const state = StateObject.create(stateDecl);\n const name = state.name;\n\n if (!isString(name)) throw new Error('State must have a valid name');\n if (this.states.hasOwnProperty(name) || inArray(queue.map(prop('name')), name))\n throw new Error(`State '${name}' is already defined`);\n\n queue.push(state);\n this.flush();\n\n return state;\n }\n\n flush() {\n const { queue, states, builder } = this;\n const registered: StateObject[] = [], // states that got registered\n orphans: StateObject[] = [], // states that don't yet have a parent registered\n previousQueueLength = {}; // keep track of how long the queue when an orphan was first encountered\n const getState = (name) => this.states.hasOwnProperty(name) && this.states[name];\n const notifyListeners = () => {\n if (registered.length) {\n this.listeners.forEach((listener) =>\n listener(\n 'registered',\n registered.map((s) => s.self)\n )\n );\n }\n };\n\n while (queue.length > 0) {\n const state: StateObject = queue.shift();\n const name = state.name;\n const result: StateObject = builder.build(state);\n const orphanIdx: number = orphans.indexOf(state);\n\n if (result) {\n const existingState = getState(name);\n if (existingState && existingState.name === name) {\n throw new Error(`State '${name}' is already defined`);\n }\n\n const existingFutureState = getState(name + '.**');\n if (existingFutureState) {\n // Remove future state of the same name\n this.router.stateRegistry.deregister(existingFutureState);\n }\n\n states[name] = state;\n this.attachRoute(state);\n if (orphanIdx >= 0) orphans.splice(orphanIdx, 1);\n registered.push(state);\n continue;\n }\n\n const prev = previousQueueLength[name];\n previousQueueLength[name] = queue.length;\n if (orphanIdx >= 0 && prev === queue.length) {\n // Wait until two consecutive iterations where no additional states were dequeued successfully.\n // throw new Error(`Cannot register orphaned state '${name}'`);\n queue.push(state);\n notifyListeners();\n return states;\n } else if (orphanIdx < 0) {\n orphans.push(state);\n }\n\n queue.push(state);\n }\n\n notifyListeners();\n return states;\n }\n\n attachRoute(state: StateObject) {\n if (state.abstract || !state.url) return;\n const rulesApi = this.router.urlService.rules;\n rulesApi.rule(rulesApi.urlRuleFactory.create(state));\n }\n}\n",
|
"import { inArray, isString, prop } from '../common';\nimport { _StateDeclaration } from './interface';\nimport { StateObject } from './stateObject';\nimport { StateBuilder } from './stateBuilder';\nimport { StateRegistryListener } from './stateRegistry';\nimport { Disposable } from '../interface';\nimport { UIRouter } from '../router';\n\nexport class StateQueueManager implements Disposable {\n queue: StateObject[] = [];\n\n constructor(\n private router: UIRouter,\n public states: { [key: string]: StateObject },\n public builder: StateBuilder,\n public listeners: StateRegistryListener[]\n ) {}\n\n dispose() {\n this.queue = [];\n }\n\n register(stateDecl: _StateDeclaration) {\n const queue = this.queue;\n const state = StateObject.create(stateDecl);\n const name = state.name;\n\n if (!isString(name)) throw new Error('State must have a valid name');\n if (this.states.hasOwnProperty(name) || inArray(queue.map(prop('name')), name))\n throw new Error(`State '${name}' is already defined`);\n\n queue.push(state);\n this.flush();\n\n return state;\n }\n\n flush() {\n const { queue, states, builder } = this;\n const registered: StateObject[] = [], // states that got registered\n orphans: StateObject[] = [], // states that don't yet have a parent registered\n previousQueueLength = {}; // keep track of how long the queue when an orphan was first encountered\n const getState = (name) => this.states.hasOwnProperty(name) && this.states[name];\n const notifyListeners = () => {\n if (registered.length) {\n this.listeners.forEach((listener) =>\n listener(\n 'registered',\n registered.map((s) => s.self)\n )\n );\n }\n };\n\n while (queue.length > 0) {\n const state: StateObject = queue.shift();\n const name = state.name;\n const result: StateObject = builder.build(state);\n const orphanIdx: number = orphans.indexOf(state);\n\n if (result) {\n const existingState = getState(name);\n if (existingState && existingState.name === name) {\n throw new Error(`State '${name}' is already defined`);\n }\n\n const existingFutureState = getState(name + '.**');\n if (existingFutureState) {\n // Remove future state of the same name\n this.router.stateRegistry.deregister(existingFutureState);\n }\n\n states[name] = state;\n this.attachRoute(state);\n if (orphanIdx >= 0) orphans.splice(orphanIdx, 1);\n registered.push(state);\n continue;\n }\n\n const prev = previousQueueLength[name];\n previousQueueLength[name] = queue.length;\n if (orphanIdx >= 0 && prev === queue.length) {\n // Wait until two consecutive iterations where no additional states were dequeued successfully.\n // throw new Error(`Cannot register orphaned state '${name}'`);\n queue.push(state);\n notifyListeners();\n return states;\n } else if (orphanIdx < 0) {\n orphans.push(state);\n }\n\n queue.push(state);\n }\n\n notifyListeners();\n return states;\n }\n\n attachRoute(state: StateObject) {\n if (state.abstract || !state.url) return;\n const rulesApi = this.router.urlService.rules;\n rulesApi.rule(rulesApi.urlRuleFactory.create(state));\n }\n}\n",
|
||||||
"import { StateObject } from './stateObject';\nimport { StateMatcher } from './stateMatcher';\nimport { StateBuilder } from './stateBuilder';\nimport { StateQueueManager } from './stateQueueManager';\nimport { StateDeclaration, _StateDeclaration } from './interface';\nimport { BuilderFunction } from './stateBuilder';\nimport { StateOrName } from './interface';\nimport { removeFrom } from '../common/common';\nimport { UIRouter } from '../router';\nimport { propEq } from '../common/hof';\n\n/**\n * The signature for the callback function provided to [[StateRegistry.onStatesChanged]].\n *\n * This callback receives two parameters:\n *\n * @param event a string; either \"registered\" or \"deregistered\"\n * @param states the list of [[StateDeclaration]]s that were registered (or deregistered).\n */\nexport type StateRegistryListener = (event: 'registered' | 'deregistered', states: StateDeclaration[]) => void;\n\n/**\n * A registry for all of the application's [[StateDeclaration]]s\n *\n * This API is found at `router.stateRegistry` ([[UIRouter.stateRegistry]])\n */\nexport class StateRegistry {\n private _root: StateObject;\n private states: { [key: string]: StateObject } = {};\n\n /** @internal */\n matcher: StateMatcher;\n private builder: StateBuilder;\n /** @internal */\n stateQueue: StateQueueManager;\n\n /** @internal */\n listeners: StateRegistryListener[] = [];\n\n /** @internal */\n constructor(private router: UIRouter) {\n this.matcher = new StateMatcher(this.states);\n this.builder = new StateBuilder(this.matcher, router.urlMatcherFactory);\n this.stateQueue = new StateQueueManager(router, this.states, this.builder, this.listeners);\n this._registerRoot();\n }\n\n /** @internal */\n private _registerRoot() {\n const rootStateDef: StateDeclaration = {\n name: '',\n url: '^',\n views: null,\n params: {\n '#': { value: null, type: 'hash', dynamic: true },\n },\n abstract: true,\n };\n\n const _root = (this._root = this.stateQueue.register(rootStateDef));\n _root.navigable = null;\n }\n\n /** @internal */\n dispose() {\n this.stateQueue.dispose();\n this.listeners = [];\n this.get().forEach((state) => this.get(state) && this.deregister(state));\n }\n\n /**\n * Listen for a State Registry events\n *\n * Adds a callback that is invoked when states are registered or deregistered with the StateRegistry.\n *\n * #### Example:\n * ```js\n * let allStates = registry.get();\n *\n * // Later, invoke deregisterFn() to remove the listener\n * let deregisterFn = registry.onStatesChanged((event, states) => {\n * switch(event) {\n * case: 'registered':\n * states.forEach(state => allStates.push(state));\n * break;\n * case: 'deregistered':\n * states.forEach(state => {\n * let idx = allStates.indexOf(state);\n * if (idx !== -1) allStates.splice(idx, 1);\n * });\n * break;\n * }\n * });\n * ```\n *\n * @param listener a callback function invoked when the registered states changes.\n * The function receives two parameters, `event` and `state`.\n * See [[StateRegistryListener]]\n * @return a function that deregisters the listener\n */\n onStatesChanged(listener: StateRegistryListener): () => void {\n this.listeners.push(listener);\n return function deregisterListener() {\n removeFrom(this.listeners)(listener);\n }.bind(this);\n }\n\n /**\n * Gets the implicit root state\n *\n * Gets the root of the state tree.\n * The root state is implicitly created by UI-Router.\n * Note: this returns the internal [[StateObject]] representation, not a [[StateDeclaration]]\n *\n * @return the root [[StateObject]]\n */\n root() {\n return this._root;\n }\n\n /**\n * Adds a state to the registry\n *\n * Registers a [[StateDeclaration]] or queues it for registration.\n *\n * Note: a state will be queued if the state's parent isn't yet registered.\n *\n * @param stateDefinition the definition of the state to register.\n * @returns the internal [[StateObject]] object.\n * If the state was successfully registered, then the object is fully built (See: [[StateBuilder]]).\n * If the state was only queued, then the object is not fully built.\n */\n register(stateDefinition: _StateDeclaration): StateObject {\n return this.stateQueue.register(stateDefinition);\n }\n\n /** @internal */\n private _deregisterTree(state: StateObject) {\n const all = this.get().map((s) => s.$$state());\n const getChildren = (states: StateObject[]) => {\n const _children = all.filter((s) => states.indexOf(s.parent) !== -1);\n return _children.length === 0 ? _children : _children.concat(getChildren(_children));\n };\n\n const children = getChildren([state]);\n const deregistered: StateObject[] = [state].concat(children).reverse();\n\n deregLine truncated
|
"import { StateObject } from './stateObject';\nimport { StateMatcher } from './stateMatcher';\nimport { StateBuilder } from './stateBuilder';\nimport { StateQueueManager } from './stateQueueManager';\nimport { StateDeclaration, _StateDeclaration } from './interface';\nimport { BuilderFunction } from './stateBuilder';\nimport { StateOrName } from './interface';\nimport { removeFrom } from '../common/common';\nimport { UIRouter } from '../router';\nimport { propEq } from '../common/hof';\n\n/**\n * The signature for the callback function provided to [[StateRegistry.onStatesChanged]].\n *\n * This callback receives two parameters:\n *\n * @param event a string; either \"registered\" or \"deregistered\"\n * @param states the list of [[StateDeclaration]]s that were registered (or deregistered).\n */\nexport type StateRegistryListener = (event: 'registered' | 'deregistered', states: StateDeclaration[]) => void;\n\n/**\n * A registry for all of the application's [[StateDeclaration]]s\n *\n * This API is found at `router.stateRegistry` ([[UIRouter.stateRegistry]])\n */\nexport class StateRegistry {\n private _root: StateObject;\n private states: { [key: string]: StateObject } = {};\n\n /** @internal */\n matcher: StateMatcher;\n private builder: StateBuilder;\n /** @internal */\n stateQueue: StateQueueManager;\n\n /** @internal */\n listeners: StateRegistryListener[] = [];\n\n /** @internal */\n constructor(private router: UIRouter) {\n this.matcher = new StateMatcher(this.states);\n this.builder = new StateBuilder(this.matcher, router.urlMatcherFactory);\n this.stateQueue = new StateQueueManager(router, this.states, this.builder, this.listeners);\n this._registerRoot();\n }\n\n /** @internal */\n private _registerRoot() {\n const rootStateDef: StateDeclaration = {\n name: '',\n url: '^',\n views: null,\n params: {\n '#': { value: null, type: 'hash', dynamic: true },\n },\n abstract: true,\n };\n\n const _root = (this._root = this.stateQueue.register(rootStateDef));\n _root.navigable = null;\n }\n\n /** @internal */\n dispose() {\n this.stateQueue.dispose();\n this.listeners = [];\n this.get().forEach((state) => this.get(state) && this.deregister(state));\n }\n\n /**\n * Listen for a State Registry events\n *\n * Adds a callback that is invoked when states are registered or deregistered with the StateRegistry.\n *\n * #### Example:\n * ```js\n * let allStates = registry.get();\n *\n * // Later, invoke deregisterFn() to remove the listener\n * let deregisterFn = registry.onStatesChanged((event, states) => {\n * switch(event) {\n * case: 'registered':\n * states.forEach(state => allStates.push(state));\n * break;\n * case: 'deregistered':\n * states.forEach(state => {\n * let idx = allStates.indexOf(state);\n * if (idx !== -1) allStates.splice(idx, 1);\n * });\n * break;\n * }\n * });\n * ```\n *\n * @param listener a callback function invoked when the registered states changes.\n * The function receives two parameters, `event` and `state`.\n * See [[StateRegistryListener]]\n * @return a function that deregisters the listener\n */\n onStatesChanged(listener: StateRegistryListener): () => void {\n this.listeners.push(listener);\n return function deregisterListener() {\n removeFrom(this.listeners)(listener);\n }.bind(this);\n }\n\n /**\n * Gets the implicit root state\n *\n * Gets the root of the state tree.\n * The root state is implicitly created by UI-Router.\n * Note: this returns the internal [[StateObject]] representation, not a [[StateDeclaration]]\n *\n * @return the root [[StateObject]]\n */\n root() {\n return this._root;\n }\n\n /**\n * Adds a state to the registry\n *\n * Registers a [[StateDeclaration]] or queues it for registration.\n *\n * Note: a state will be queued if the state's parent isn't yet registered.\n *\n * @param stateDefinition the definition of the state to register.\n * @returns the internal [[StateObject]] object.\n * If the state was successfully registered, then the object is fully built (See: [[StateBuilder]]).\n * If the state was only queued, then the object is not fully built.\n */\n register(stateDefinition: _StateDeclaration): StateObject {\n return this.stateQueue.register(stateDefinition);\n }\n\n /** @internal */\n private _deregisterTree(state: StateObject) {\n const all = this.get().map((s) => s.$$state());\n const getChildren = (states: StateObject[]) => {\n const _children = all.filter((s) => states.indexOf(s.parent) !== -1);\n return _children.length === 0 ? _children : _children.concat(getChildren(_children));\n };\n\n const children = getChildren([state]);\n const deregistered: StateObject[] = [state].concat(children).reverse();\n\n deregLine truncated
|
||||||
"import { StateDeclaration } from '../state/interface';\nimport { PredicateBinary } from '../common/common';\n\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TargetState } from '../state/targetState';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * The TransitionOptions object can be used to change the behavior of a transition.\n *\n * It is passed as the third argument to [[StateService.go]], [[StateService.transitionTo]].\n * It can also be used with a `uiSref`.\n */\nexport interface TransitionOptions {\n /**\n * This option changes how the Transition interacts with the browser's location bar (URL).\n *\n * - If `true`, it will update the url in the location bar.\n * - If `false`, it will not update the url in the location bar.\n * - If it is the string `\"replace\"`, it will update the url and also replace the last history record.\n *\n * @default `true`\n */\n location?: boolean | 'replace';\n\n /**\n * When transitioning to relative path (e.g '`^`'), this option defines which state to be relative from.\n * @default `$state.current`\n */\n relative?: string | StateDeclaration | StateObject;\n\n /**\n * This option sets whether or not the transition's parameter values should be inherited from\n * the current parameter values.\n *\n * - If `true`, it will inherit parameter values from the current parameter values.\n * - If `false`, only the parameters which are provided to `transitionTo` will be used.\n *\n * @default `false`\n */\n inherit?: boolean;\n\n /**\n * @deprecated\n */\n notify?: boolean;\n\n /**\n * This option may be used to force states which are currently active to reload.\n *\n * During a normal transition, a state is \"retained\" if:\n * - It was previously active\n * - The state's parameter values have not changed\n * - All the parent states' parameter values have not changed\n *\n * Forcing a reload of a state will cause it to be exited and entered, which will:\n * - Refetch that state's resolve data\n * - Exit the state (onExit hook)\n * - Re-enter the state (onEnter hook)\n * - Re-render the views (controllers and templates)\n *\n * - When `true`, the destination state (and all parent states) will be reloaded.\n * - When it is a string and is the name of a state, or when it is a State object,\n * that state and any children states will be reloaded.\n *\n * @default `false`\n */\n reload?: boolean | string | StateDeclaration | StateObject;\n /**\n * You can define your own Transition Options inside this property and use them, e.g., from a Transition Hook\n */\n custom?: any;\n /**\n * This option may be used to cancel the active transition (if one is active) in favour of the this one.\n * This is the default behaviour or ui-router.\n *\n *\n * - When `true`, the active transition will be canceled and new transition will begin.\n * - when `false`, the transition will be canceled if a transition is already running. This can be useful in cases where\n * you only want to navigate to a different state if you are not already navigating somewhere.\n *\n * @default `true`\n */\n supercede?: boolean;\n /** @internal */\n reloadState?: StateObject;\n /** @internal\n * If this transition is a redirect, this property should be the original Transition (which was redirected to this one)\n */\n redirectedFrom?: Transition;\n /** @internal */\n current?: () => Transition;\n /** @internal */\n source?: 'sref' | 'url' | 'redirect' | 'otherwise' | 'unknown';\n}\n\nexport interface TransitionHookOptions {\n current?: () => Transition; // path?\n transition?: Transition;\n hookType?: string;\n target?: any;\n traceData?: any;\n bind?: any;\n stateHook?: boolean;\n}\n\n/**\n * TreeChanges encapsulates the various Paths that are involved in a Transition.\n *\n * Get a TreeChanges object using [[Transition.treeChanges]]\n *\n * A UI-Router Transition is from one Path in a State Tree to another Path. For a given Transition,\n * this object stores the \"to\" and \"from\" paths, as well as subsets of those: the \"retained\",\n * \"exiting\" and \"entering\" paths.\n *\n * Each path in TreeChanges is an array of [[PathNode]] objects. Each PathNode in the array corresponds to a portion\n * of a nested state.\n *\n * For example, if you had a nested state named `foo.bar.baz`, it would have three\n * portions, `foo, bar, baz`. If you transitioned **to** `foo.bar.baz` and inspected the [[TreeChanges.to]]\n * Path, you would find a node in the array for each portion: `foo`, `bar`, and `baz`.\n *\n * ---\n *\n * @todo show visual state tree\n */\nexport interface TreeChanges {\n /** @nodoc */\n [key: string]: PathNode[] | undefined;\n\n /** The path of nodes in the state tree that the transition is coming *from* */\n from: PathNode[];\n\n /** The path oLine truncated
|
"import { StateDeclaration } from '../state/interface';\nimport { PredicateBinary } from '../common/common';\n\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TargetState } from '../state/targetState';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * The TransitionOptions object can be used to change the behavior of a transition.\n *\n * It is passed as the third argument to [[StateService.go]], [[StateService.transitionTo]].\n * It can also be used with a `uiSref`.\n */\nexport interface TransitionOptions {\n /**\n * This option changes how the Transition interacts with the browser's location bar (URL).\n *\n * - If `true`, it will update the url in the location bar.\n * - If `false`, it will not update the url in the location bar.\n * - If it is the string `\"replace\"`, it will update the url and also replace the last history record.\n *\n * @default `true`\n */\n location?: boolean | 'replace';\n\n /**\n * When transitioning to relative path (e.g '`^`'), this option defines which state to be relative from.\n * @default `$state.current`\n */\n relative?: string | StateDeclaration | StateObject;\n\n /**\n * This option sets whether or not the transition's parameter values should be inherited from\n * the current parameter values.\n *\n * - If `true`, it will inherit parameter values from the current parameter values.\n * - If `false`, only the parameters which are provided to `transitionTo` will be used.\n *\n * @default `true`\n */\n inherit?: boolean;\n\n /**\n * @deprecated\n */\n notify?: boolean;\n\n /**\n * This option may be used to force states which are currently active to reload.\n *\n * During a normal transition, a state is \"retained\" if:\n * - It was previously active\n * - The state's parameter values have not changed\n * - All the parent states' parameter values have not changed\n *\n * Forcing a reload of a state will cause it to be exited and entered, which will:\n * - Refetch that state's resolve data\n * - Exit the state (onExit hook)\n * - Re-enter the state (onEnter hook)\n * - Re-render the views (controllers and templates)\n *\n * - When `true`, the destination state (and all parent states) will be reloaded.\n * - When it is a string and is the name of a state, or when it is a State object,\n * that state and any children states will be reloaded.\n *\n * @default `false`\n */\n reload?: boolean | string | StateDeclaration | StateObject;\n /**\n * You can define your own Transition Options inside this property and use them, e.g., from a Transition Hook\n */\n custom?: any;\n /**\n * This option may be used to cancel the active transition (if one is active) in favour of the this one.\n * This is the default behaviour or ui-router.\n *\n *\n * - When `true`, the active transition will be canceled and new transition will begin.\n * - when `false`, the transition will be canceled if a transition is already running. This can be useful in cases where\n * you only want to navigate to a different state if you are not already navigating somewhere.\n *\n * @default `true`\n */\n supercede?: boolean;\n /** @internal */\n reloadState?: StateObject;\n /** @internal\n * If this transition is a redirect, this property should be the original Transition (which was redirected to this one)\n */\n redirectedFrom?: Transition;\n /** @internal */\n current?: () => Transition;\n /** @internal */\n source?: 'sref' | 'url' | 'redirect' | 'otherwise' | 'unknown';\n}\n\nexport interface TransitionHookOptions {\n current?: () => Transition; // path?\n transition?: Transition;\n hookType?: string;\n target?: any;\n traceData?: any;\n bind?: any;\n stateHook?: boolean;\n}\n\n/**\n * TreeChanges encapsulates the various Paths that are involved in a Transition.\n *\n * Get a TreeChanges object using [[Transition.treeChanges]]\n *\n * A UI-Router Transition is from one Path in a State Tree to another Path. For a given Transition,\n * this object stores the \"to\" and \"from\" paths, as well as subsets of those: the \"retained\",\n * \"exiting\" and \"entering\" paths.\n *\n * Each path in TreeChanges is an array of [[PathNode]] objects. Each PathNode in the array corresponds to a portion\n * of a nested state.\n *\n * For example, if you had a nested state named `foo.bar.baz`, it would have three\n * portions, `foo, bar, baz`. If you transitioned **to** `foo.bar.baz` and inspected the [[TreeChanges.to]]\n * Path, you would find a node in the array for each portion: `foo`, `bar`, and `baz`.\n *\n * ---\n *\n * @todo show visual state tree\n */\nexport interface TreeChanges {\n /** @nodoc */\n [key: string]: PathNode[] | undefined;\n\n /** The path of nodes in the state tree that the transition is coming *from* */\n from: PathNode[];\n\n /** The path ofLine truncated
|
||||||
"import { TransitionHookOptions, HookResult, TransitionHookPhase } from './interface';\nimport { defaults, noop, silentRejection } from '../common/common';\nimport { fnToString, maxLength } from '../common/strings';\nimport { isPromise } from '../common/predicates';\nimport { is, parse } from '../common/hof';\nimport { trace } from '../common/trace';\nimport { services } from '../common/coreservices';\nimport { Rejection } from './rejectFactory';\nimport { TargetState } from '../state/targetState';\nimport { Transition } from './transition';\nimport { TransitionEventType } from './transitionEventType';\nimport { RegisteredHook } from './hookRegistry';\nimport { StateDeclaration } from '../state/interface';\n\nconst defaultOptions: TransitionHookOptions = {\n current: noop,\n transition: null,\n traceData: {},\n bind: null,\n};\n\nexport type GetResultHandler = (hook: TransitionHook) => ResultHandler;\nexport type GetErrorHandler = (hook: TransitionHook) => ErrorHandler;\n\nexport type ResultHandler = (result: HookResult) => Promise<HookResult>;\nexport type ErrorHandler = (error: any) => Promise<any>;\n\nexport class TransitionHook {\n type: TransitionEventType;\n\n /**\n * These GetResultHandler(s) are used by [[invokeHook]] below\n * Each HookType chooses a GetResultHandler (See: [[TransitionService._defineCoreEvents]])\n */\n static HANDLE_RESULT: GetResultHandler = (hook: TransitionHook) => (result: HookResult) =>\n hook.handleHookResult(result);\n\n /**\n * If the result is a promise rejection, log it.\n * Otherwise, ignore the result.\n */\n static LOG_REJECTED_RESULT: GetResultHandler = (hook: TransitionHook) => (result: HookResult) => {\n isPromise(result) && result.catch((err) => hook.logError(Rejection.normalize(err)));\n return undefined;\n };\n\n /**\n * These GetErrorHandler(s) are used by [[invokeHook]] below\n * Each HookType chooses a GetErrorHandler (See: [[TransitionService._defineCoreEvents]])\n */\n static LOG_ERROR: GetErrorHandler = (hook: TransitionHook) => (error: any) => hook.logError(error);\n\n static REJECT_ERROR: GetErrorHandler = (hook: TransitionHook) => (error: any) => silentRejection(error);\n\n static THROW_ERROR: GetErrorHandler = (hook: TransitionHook) => (error: any) => {\n throw error;\n };\n\n /**\n * Chains together an array of TransitionHooks.\n *\n * Given a list of [[TransitionHook]] objects, chains them together.\n * Each hook is invoked after the previous one completes.\n *\n * #### Example:\n * ```js\n * var hooks: TransitionHook[] = getHooks();\n * let promise: Promise<any> = TransitionHook.chain(hooks);\n *\n * promise.then(handleSuccess, handleError);\n * ```\n *\n * @param hooks the list of hooks to chain together\n * @param waitFor if provided, the chain is `.then()`'ed off this promise\n * @returns a `Promise` for sequentially invoking the hooks (in order)\n */\n static chain(hooks: TransitionHook[], waitFor?: Promise<any>): Promise<any> {\n // Chain the next hook off the previous\n const createHookChainR = (prev: Promise<any>, nextHook: TransitionHook) => prev.then(() => nextHook.invokeHook());\n return hooks.reduce(createHookChainR, waitFor || services.$q.when());\n }\n\n /**\n * Invokes all the provided TransitionHooks, in order.\n * Each hook's return value is checked.\n * If any hook returns a promise, then the rest of the hooks are chained off that promise, and the promise is returned.\n * If no hook returns a promise, then all hooks are processed synchronously.\n *\n * @param hooks the list of TransitionHooks to invoke\n * @param doneCallback a callback that is invoked after all the hooks have successfully completed\n *\n * @returns a promise for the async result, or the result of the callback\n */\n static invokeHooks<T>(hooks: TransitionHook[], doneCallback: (result?: HookResult) => T): Promise<any> | T {\n for (let idx = 0; idx < hooks.length; idx++) {\n const hookResult = hooks[idx].invokeHook();\n\n if (isPromise(hookResult)) {\n const remainingHooks = hooks.slice(idx + 1);\n\n return TransitionHook.chain(remainingHooks, hookResult).then(doneCallback);\n }\n }\n\n return doneCallback();\n }\n\n /**\n * Run all TransitionHooks, ignoring their return value.\n */\n static runAllHooks(hooks: TransitionHook[]): void {\n hooks.forEach((hook) => hook.invokeHook());\n }\n\n constructor(\n private transition: Transition,\n private stateContext: StateDeclaration,\n private registeredHook: RegisteredHook,\n private options: TransitionHookOptions\n ) {\n this.options = defaults(options, defaultOptions);\n this.type = registeredHook.eventType;\n }\n\n private isSuperseded = () => this.type.hookPhase === TransitionHookPhase.RUN && !this.options.transition.isActive();\n\n logError(err): any {\n this.transition.router.stateService.defaultErrorHandler()(err);\n }\n\n inLine truncated
|
"import { TransitionHookOptions, HookResult, TransitionHookPhase } from './interface';\nimport { defaults, noop, silentRejection } from '../common/common';\nimport { fnToString, maxLength } from '../common/strings';\nimport { isPromise } from '../common/predicates';\nimport { is, parse } from '../common/hof';\nimport { trace } from '../common/trace';\nimport { services } from '../common/coreservices';\nimport { Rejection } from './rejectFactory';\nimport { TargetState } from '../state/targetState';\nimport { Transition } from './transition';\nimport { TransitionEventType } from './transitionEventType';\nimport { RegisteredHook } from './hookRegistry';\nimport { StateDeclaration } from '../state/interface';\n\nconst defaultOptions: TransitionHookOptions = {\n current: noop,\n transition: null,\n traceData: {},\n bind: null,\n};\n\nexport type GetResultHandler = (hook: TransitionHook) => ResultHandler;\nexport type GetErrorHandler = (hook: TransitionHook) => ErrorHandler;\n\nexport type ResultHandler = (result: HookResult) => Promise<HookResult>;\nexport type ErrorHandler = (error: any) => Promise<any>;\n\nexport class TransitionHook {\n type: TransitionEventType;\n\n /**\n * These GetResultHandler(s) are used by [[invokeHook]] below\n * Each HookType chooses a GetResultHandler (See: [[TransitionService._defineCoreEvents]])\n */\n static HANDLE_RESULT: GetResultHandler = (hook: TransitionHook) => (result: HookResult) =>\n hook.handleHookResult(result);\n\n /**\n * If the result is a promise rejection, log it.\n * Otherwise, ignore the result.\n */\n static LOG_REJECTED_RESULT: GetResultHandler = (hook: TransitionHook) => (result: HookResult) => {\n isPromise(result) && result.catch((err) => hook.logError(Rejection.normalize(err)));\n return undefined;\n };\n\n /**\n * These GetErrorHandler(s) are used by [[invokeHook]] below\n * Each HookType chooses a GetErrorHandler (See: [[TransitionService._defineCoreEvents]])\n */\n static LOG_ERROR: GetErrorHandler = (hook: TransitionHook) => (error: any) => hook.logError(error);\n\n static REJECT_ERROR: GetErrorHandler = (hook: TransitionHook) => (error: any) => silentRejection(error);\n\n static THROW_ERROR: GetErrorHandler = (hook: TransitionHook) => (error: any) => {\n throw error;\n };\n\n /**\n * Chains together an array of TransitionHooks.\n *\n * Given a list of [[TransitionHook]] objects, chains them together.\n * Each hook is invoked after the previous one completes.\n *\n * #### Example:\n * ```js\n * var hooks: TransitionHook[] = getHooks();\n * let promise: Promise<any> = TransitionHook.chain(hooks);\n *\n * promise.then(handleSuccess, handleError);\n * ```\n *\n * @param hooks the list of hooks to chain together\n * @param waitFor if provided, the chain is `.then()`'ed off this promise\n * @returns a `Promise` for sequentially invoking the hooks (in order)\n */\n static chain(hooks: TransitionHook[], waitFor?: Promise<any>): Promise<any> {\n // Chain the next hook off the previous\n const createHookChainR = (prev: Promise<any>, nextHook: TransitionHook) => prev.then(() => nextHook.invokeHook());\n return hooks.reduce(createHookChainR, waitFor || services.$q.when());\n }\n\n /**\n * Invokes all the provided TransitionHooks, in order.\n * Each hook's return value is checked.\n * If any hook returns a promise, then the rest of the hooks are chained off that promise, and the promise is returned.\n * If no hook returns a promise, then all hooks are processed synchronously.\n *\n * @param hooks the list of TransitionHooks to invoke\n * @param doneCallback a callback that is invoked after all the hooks have successfully completed\n *\n * @returns a promise for the async result, or the result of the callback\n */\n static invokeHooks<T>(hooks: TransitionHook[], doneCallback: (result?: HookResult) => T): Promise<any> | T {\n for (let idx = 0; idx < hooks.length; idx++) {\n const hookResult = hooks[idx].invokeHook();\n\n if (isPromise(hookResult)) {\n const remainingHooks = hooks.slice(idx + 1);\n\n return TransitionHook.chain(remainingHooks, hookResult).then(doneCallback);\n }\n }\n\n return doneCallback();\n }\n\n /**\n * Run all TransitionHooks, ignoring their return value.\n */\n static runAllHooks(hooks: TransitionHook[]): void {\n hooks.forEach((hook) => hook.invokeHook());\n }\n\n constructor(\n private transition: Transition,\n private stateContext: StateDeclaration,\n private registeredHook: RegisteredHook,\n private options: TransitionHookOptions\n ) {\n this.options = defaults(options, defaultOptions);\n this.type = registeredHook.eventType;\n }\n\n private isSuperseded = () => this.type.hookPhase === TransitionHookPhase.RUN && !this.options.transition.isActive();\n\n logError(err): any {\n this.transition.router.stateService.defaultErrorHandler()(err);\n }\n\n inLine truncated
|
||||||
"import { isString, isFunction, Glob, extend, removeFrom, tail, values, identity, mapObj } from '../common';\nimport { PathNode } from '../path/pathNode';\nimport {\n TransitionStateHookFn,\n TransitionHookFn,\n TransitionHookPhase, // has or is using\n TransitionHookScope,\n IHookRegistry,\n PathType,\n} from './interface';\n\nimport {\n HookRegOptions,\n HookMatchCriteria,\n TreeChanges,\n HookMatchCriterion,\n IMatchingNodes,\n HookFn,\n} from './interface';\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { TransitionEventType } from './transitionEventType';\nimport { TransitionService } from './transitionService';\n\n/**\n * Determines if the given state matches the matchCriteria\n *\n * @internal\n *\n * @param state a State Object to test against\n * @param criterion\n * - If a string, matchState uses the string as a glob-matcher against the state name\n * - If an array (of strings), matchState uses each string in the array as a glob-matchers against the state name\n * and returns a positive match if any of the globs match.\n * - If a function, matchState calls the function with the state and returns true if the function's result is truthy.\n * @returns {boolean}\n */\nexport function matchState(state: StateObject, criterion: HookMatchCriterion, transition: Transition) {\n const toMatch = isString(criterion) ? [criterion] : criterion;\n\n function matchGlobs(_state: StateObject) {\n const globStrings = <string[]>toMatch;\n for (let i = 0; i < globStrings.length; i++) {\n const glob = new Glob(globStrings[i]);\n\n if ((glob && glob.matches(_state.name)) || (!glob && globStrings[i] === _state.name)) {\n return true;\n }\n }\n return false;\n }\n\n const matchFn = <any>(isFunction(toMatch) ? toMatch : matchGlobs);\n return !!matchFn(state, transition);\n}\n\n/**\n * The registration data for a registered transition hook\n */\nexport class RegisteredHook {\n priority: number;\n bind: any;\n invokeCount = 0;\n invokeLimit: number;\n _deregistered = false;\n\n constructor(\n public tranSvc: TransitionService,\n public eventType: TransitionEventType,\n public callback: HookFn,\n public matchCriteria: HookMatchCriteria,\n public removeHookFromRegistry: (hook: RegisteredHook) => void,\n options: HookRegOptions = {} as any\n ) {\n this.priority = options.priority || 0;\n this.bind = options.bind || null;\n this.invokeLimit = options.invokeLimit;\n }\n\n /**\n * Gets the matching [[PathNode]]s\n *\n * Given an array of [[PathNode]]s, and a [[HookMatchCriterion]], returns an array containing\n * the [[PathNode]]s that the criteria matches, or `null` if there were no matching nodes.\n *\n * Returning `null` is significant to distinguish between the default\n * \"match-all criterion value\" of `true` compared to a `() => true` function,\n * when the nodes is an empty array.\n *\n * This is useful to allow a transition match criteria of `entering: true`\n * to still match a transition, even when `entering === []`. Contrast that\n * with `entering: (state) => true` which only matches when a state is actually\n * being entered.\n */\n private _matchingNodes(nodes: PathNode[], criterion: HookMatchCriterion, transition: Transition): PathNode[] {\n if (criterion === true) return nodes;\n const matching = nodes.filter((node) => matchState(node.state, criterion, transition));\n return matching.length ? matching : null;\n }\n\n /**\n * Gets the default match criteria (all `true`)\n *\n * Returns an object which has all the criteria match paths as keys and `true` as values, i.e.:\n *\n * ```js\n * {\n * to: true,\n * from: true,\n * entering: true,\n * exiting: true,\n * retained: true,\n * }\n */\n private _getDefaultMatchCriteria(): HookMatchCriteria {\n return mapObj(this.tranSvc._pluginapi._getPathTypes(), () => true);\n }\n\n /**\n * Gets matching nodes as [[IMatchingNodes]]\n *\n * Create a IMatchingNodes object from the TransitionHookTypes that is roughly equivalent to:\n *\n * ```js\n * let matches: IMatchingNodes = {\n * to: _matchingNodes([tail(treeChanges.to)], mc.to),\n * from: _matchingNodes([tail(treeChanges.from)], mc.from),\n * exiting: _matchingNodes(treeChanges.exiting, mc.exiting),\n * retained: _matchingNodes(treeChanges.retained, mc.retained),\n * entering: _matchingNodes(treeChanges.entering, mc.entering),\n * };\n * ```\n */\n private _getMatchingNodes(treeChanges: TreeChanges, transition: Transition): IMatchingNodes {\n const criteria = extend(this._getDefaultMatchCriteria(), this.matchCriteria);\n const paths: PathType[] = values(this.tranSvc._pluginapi._getPathTypes());\n\n return paths.reduce((mn: IMatchingNodes, pathtype: PathType) => {\n // STATE scope criteria matches against every node iLine truncated
|
"import { isString, isFunction, Glob, extend, removeFrom, tail, values, identity, mapObj } from '../common';\nimport { PathNode } from '../path/pathNode';\nimport {\n TransitionStateHookFn,\n TransitionHookFn,\n TransitionHookPhase, // has or is using\n TransitionHookScope,\n IHookRegistry,\n PathType,\n} from './interface';\n\nimport {\n HookRegOptions,\n HookMatchCriteria,\n TreeChanges,\n HookMatchCriterion,\n IMatchingNodes,\n HookFn,\n} from './interface';\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { TransitionEventType } from './transitionEventType';\nimport { TransitionService } from './transitionService';\n\n/**\n * Determines if the given state matches the matchCriteria\n *\n * @internal\n *\n * @param state a State Object to test against\n * @param criterion\n * - If a string, matchState uses the string as a glob-matcher against the state name\n * - If an array (of strings), matchState uses each string in the array as a glob-matchers against the state name\n * and returns a positive match if any of the globs match.\n * - If a function, matchState calls the function with the state and returns true if the function's result is truthy.\n * @returns {boolean}\n */\nexport function matchState(state: StateObject, criterion: HookMatchCriterion, transition: Transition) {\n const toMatch = isString(criterion) ? [criterion] : criterion;\n\n function matchGlobs(_state: StateObject) {\n const globStrings = <string[]>toMatch;\n for (let i = 0; i < globStrings.length; i++) {\n const glob = new Glob(globStrings[i]);\n\n if ((glob && glob.matches(_state.name)) || (!glob && globStrings[i] === _state.name)) {\n return true;\n }\n }\n return false;\n }\n\n const matchFn = <any>(isFunction(toMatch) ? toMatch : matchGlobs);\n return !!matchFn(state, transition);\n}\n\n/**\n * The registration data for a registered transition hook\n */\nexport class RegisteredHook {\n priority: number;\n bind: any;\n invokeCount = 0;\n invokeLimit: number;\n _deregistered = false;\n\n constructor(\n public tranSvc: TransitionService,\n public eventType: TransitionEventType,\n public callback: HookFn,\n public matchCriteria: HookMatchCriteria,\n public removeHookFromRegistry: (hook: RegisteredHook) => void,\n options: HookRegOptions = {} as any\n ) {\n this.priority = options.priority || 0;\n this.bind = options.bind || null;\n this.invokeLimit = options.invokeLimit;\n }\n\n /**\n * Gets the matching [[PathNode]]s\n *\n * Given an array of [[PathNode]]s, and a [[HookMatchCriterion]], returns an array containing\n * the [[PathNode]]s that the criteria matches, or `null` if there were no matching nodes.\n *\n * Returning `null` is significant to distinguish between the default\n * \"match-all criterion value\" of `true` compared to a `() => true` function,\n * when the nodes is an empty array.\n *\n * This is useful to allow a transition match criteria of `entering: true`\n * to still match a transition, even when `entering === []`. Contrast that\n * with `entering: (state) => true` which only matches when a state is actually\n * being entered.\n */\n private _matchingNodes(nodes: PathNode[], criterion: HookMatchCriterion, transition: Transition): PathNode[] {\n if (criterion === true) return nodes;\n const matching = nodes.filter((node) => matchState(node.state, criterion, transition));\n return matching.length ? matching : null;\n }\n\n /**\n * Gets the default match criteria (all `true`)\n *\n * Returns an object which has all the criteria match paths as keys and `true` as values, i.e.:\n *\n * ```js\n * {\n * to: true,\n * from: true,\n * entering: true,\n * exiting: true,\n * retained: true,\n * }\n */\n private _getDefaultMatchCriteria(): HookMatchCriteria {\n return mapObj(this.tranSvc._pluginapi._getPathTypes(), () => true);\n }\n\n /**\n * Gets matching nodes as [[IMatchingNodes]]\n *\n * Create a IMatchingNodes object from the TransitionHookTypes that is roughly equivalent to:\n *\n * ```js\n * let matches: IMatchingNodes = {\n * to: _matchingNodes([tail(treeChanges.to)], mc.to),\n * from: _matchingNodes([tail(treeChanges.from)], mc.from),\n * exiting: _matchingNodes(treeChanges.exiting, mc.exiting),\n * retained: _matchingNodes(treeChanges.retained, mc.retained),\n * entering: _matchingNodes(treeChanges.entering, mc.entering),\n * };\n * ```\n */\n private _getMatchingNodes(treeChanges: TreeChanges, transition: Transition): IMatchingNodes {\n const criteria = extend(this._getDefaultMatchCriteria(), this.matchCriteria);\n const paths: PathType[] = values(this.tranSvc._pluginapi._getPathTypes());\n\n return paths.reduce((mn: IMatchingNodes, pathtype: PathType) => {\n // STATE scope criteria matches against every node iLine truncated
|
||||||
"import { extend, tail, assertPredicate, unnestR, identity } from '../common/common';\nimport { isArray } from '../common/predicates';\n\nimport {\n TransitionOptions,\n TransitionHookOptions,\n IHookRegistry,\n TreeChanges,\n IMatchingNodes,\n TransitionHookPhase,\n TransitionHookScope,\n} from './interface';\n\nimport { Transition } from './transition';\nimport { TransitionHook } from './transitionHook';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TransitionService } from './transitionService';\nimport { TransitionEventType } from './transitionEventType';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * This class returns applicable TransitionHooks for a specific Transition instance.\n *\n * Hooks ([[RegisteredHook]]) may be registered globally, e.g., $transitions.onEnter(...), or locally, e.g.\n * myTransition.onEnter(...). The HookBuilder finds matching RegisteredHooks (where the match criteria is\n * determined by the type of hook)\n *\n * The HookBuilder also converts RegisteredHooks objects to TransitionHook objects, which are used to run a Transition.\n *\n * The HookBuilder constructor is given the $transitions service and a Transition instance. Thus, a HookBuilder\n * instance may only be used for one specific Transition object. (side note: the _treeChanges accessor is private\n * in the Transition class, so we must also provide the Transition's _treeChanges)\n */\nexport class HookBuilder {\n constructor(private transition: Transition) {}\n\n buildHooksForPhase(phase: TransitionHookPhase): TransitionHook[] {\n const $transitions = this.transition.router.transitionService;\n return $transitions._pluginapi\n ._getEvents(phase)\n .map((type) => this.buildHooks(type))\n .reduce(unnestR, [])\n .filter(identity);\n }\n\n /**\n * Returns an array of newly built TransitionHook objects.\n *\n * - Finds all RegisteredHooks registered for the given `hookType` which matched the transition's [[TreeChanges]].\n * - Finds [[PathNode]] (or `PathNode[]`) to use as the TransitionHook context(s)\n * - For each of the [[PathNode]]s, creates a TransitionHook\n *\n * @param hookType the type of the hook registration function, e.g., 'onEnter', 'onFinish'.\n */\n buildHooks(hookType: TransitionEventType): TransitionHook[] {\n const transition = this.transition;\n const treeChanges = transition.treeChanges();\n\n // Find all the matching registered hooks for a given hook type\n const matchingHooks = this.getMatchingHooks(hookType, treeChanges, transition);\n if (!matchingHooks) return [];\n\n const baseHookOptions = <TransitionHookOptions>{\n transition: transition,\n current: transition.options().current,\n };\n\n const makeTransitionHooks = (hook: RegisteredHook) => {\n // Fetch the Nodes that caused this hook to match.\n const matches: IMatchingNodes = hook.matches(treeChanges, transition);\n // Select the PathNode[] that will be used as TransitionHook context objects\n const matchingNodes: PathNode[] = matches[hookType.criteriaMatchPath.name];\n\n // Return an array of HookTuples\n return matchingNodes.map((node) => {\n const _options = extend(\n {\n bind: hook.bind,\n traceData: { hookType: hookType.name, context: node },\n },\n baseHookOptions\n );\n\n const state = hookType.criteriaMatchPath.scope === TransitionHookScope.STATE ? node.state.self : null;\n const transitionHook = new TransitionHook(transition, state, hook, _options);\n return <HookTuple>{ hook, node, transitionHook };\n });\n };\n\n return matchingHooks\n .map(makeTransitionHooks)\n .reduce(unnestR, [])\n .sort(tupleSort(hookType.reverseSort))\n .map((tuple) => tuple.transitionHook);\n }\n\n /**\n * Finds all RegisteredHooks from:\n * - The Transition object instance hook registry\n * - The TransitionService ($transitions) global hook registry\n *\n * which matched:\n * - the eventType\n * - the matchCriteria (to, from, exiting, retained, entering)\n *\n * @returns an array of matched [[RegisteredHook]]s\n */\n public getMatchingHooks(\n hookType: TransitionEventType,\n treeChanges: TreeChanges,\n transition: Transition\n ): RegisteredHook[] {\n const isCreate = hookType.hookPhase === TransitionHookPhase.CREATE;\n\n // Instance and Global hook registries\n const $transitions = this.transition.router.transitionService;\n const registries = isCreate ? [$transitions] : [this.transition, $transitions];\n\n return registries\n .map((reg: IHookRegistry) => reg.getHooks(hookType.name)) // Get named hooks from registries\n .filter(assertPredicate(isArray, `broken event named: ${hookType.name}`)) // Sanity check\n .reduce(unnestR, []) // Un-nest RegisteredHook[][] to RegisteredHook[] arLine truncated
|
"import { extend, tail, assertPredicate, unnestR, identity } from '../common/common';\nimport { isArray } from '../common/predicates';\n\nimport {\n TransitionOptions,\n TransitionHookOptions,\n IHookRegistry,\n TreeChanges,\n IMatchingNodes,\n TransitionHookPhase,\n TransitionHookScope,\n} from './interface';\n\nimport { Transition } from './transition';\nimport { TransitionHook } from './transitionHook';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TransitionService } from './transitionService';\nimport { TransitionEventType } from './transitionEventType';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * This class returns applicable TransitionHooks for a specific Transition instance.\n *\n * Hooks ([[RegisteredHook]]) may be registered globally, e.g., $transitions.onEnter(...), or locally, e.g.\n * myTransition.onEnter(...). The HookBuilder finds matching RegisteredHooks (where the match criteria is\n * determined by the type of hook)\n *\n * The HookBuilder also converts RegisteredHooks objects to TransitionHook objects, which are used to run a Transition.\n *\n * The HookBuilder constructor is given the $transitions service and a Transition instance. Thus, a HookBuilder\n * instance may only be used for one specific Transition object. (side note: the _treeChanges accessor is private\n * in the Transition class, so we must also provide the Transition's _treeChanges)\n */\nexport class HookBuilder {\n constructor(private transition: Transition) {}\n\n buildHooksForPhase(phase: TransitionHookPhase): TransitionHook[] {\n const $transitions = this.transition.router.transitionService;\n return $transitions._pluginapi\n ._getEvents(phase)\n .map((type) => this.buildHooks(type))\n .reduce(unnestR, [])\n .filter(identity);\n }\n\n /**\n * Returns an array of newly built TransitionHook objects.\n *\n * - Finds all RegisteredHooks registered for the given `hookType` which matched the transition's [[TreeChanges]].\n * - Finds [[PathNode]] (or `PathNode[]`) to use as the TransitionHook context(s)\n * - For each of the [[PathNode]]s, creates a TransitionHook\n *\n * @param hookType the type of the hook registration function, e.g., 'onEnter', 'onFinish'.\n */\n buildHooks(hookType: TransitionEventType): TransitionHook[] {\n const transition = this.transition;\n const treeChanges = transition.treeChanges();\n\n // Find all the matching registered hooks for a given hook type\n const matchingHooks = this.getMatchingHooks(hookType, treeChanges, transition);\n if (!matchingHooks) return [];\n\n const baseHookOptions = <TransitionHookOptions>{\n transition: transition,\n current: transition.options().current,\n };\n\n const makeTransitionHooks = (hook: RegisteredHook) => {\n // Fetch the Nodes that caused this hook to match.\n const matches: IMatchingNodes = hook.matches(treeChanges, transition);\n // Select the PathNode[] that will be used as TransitionHook context objects\n const matchingNodes: PathNode[] = matches[hookType.criteriaMatchPath.name];\n\n // Return an array of HookTuples\n return matchingNodes.map((node) => {\n const _options = extend(\n {\n bind: hook.bind,\n traceData: { hookType: hookType.name, context: node },\n },\n baseHookOptions\n );\n\n const state = hookType.criteriaMatchPath.scope === TransitionHookScope.STATE ? node.state.self : null;\n const transitionHook = new TransitionHook(transition, state, hook, _options);\n return <HookTuple>{ hook, node, transitionHook };\n });\n };\n\n return matchingHooks\n .map(makeTransitionHooks)\n .reduce(unnestR, [])\n .sort(tupleSort(hookType.reverseSort))\n .map((tuple) => tuple.transitionHook);\n }\n\n /**\n * Finds all RegisteredHooks from:\n * - The Transition object instance hook registry\n * - The TransitionService ($transitions) global hook registry\n *\n * which matched:\n * - the eventType\n * - the matchCriteria (to, from, exiting, retained, entering)\n *\n * @returns an array of matched [[RegisteredHook]]s\n */\n public getMatchingHooks(\n hookType: TransitionEventType,\n treeChanges: TreeChanges,\n transition: Transition\n ): RegisteredHook[] {\n const isCreate = hookType.hookPhase === TransitionHookPhase.CREATE;\n\n // Instance and Global hook registries\n const $transitions = this.transition.router.transitionService;\n const registries = isCreate ? [$transitions] : [this.transition, $transitions];\n\n return registries\n .map((reg: IHookRegistry) => reg.getHooks(hookType.name)) // Get named hooks from registries\n .filter(assertPredicate(isArray, `broken event named: ${hookType.name}`)) // Sanity check\n .reduce(unnestR, []) // Un-nest RegisteredHook[][] to RegisteredHook[] arLine truncated
|
||||||
"import { trace } from '../common/trace';\nimport { services } from '../common/coreservices';\nimport { stringify } from '../common/strings';\nimport { map, find, extend, mergeR, tail, omit, arrayTuples, unnestR, identity, anyTrueR } from '../common/common';\nimport { isObject, isUndefined } from '../common/predicates';\nimport { prop, propEq, val, not, is } from '../common/hof';\nimport { StateDeclaration, StateOrName } from '../state/interface';\nimport {\n TransitionOptions,\n TreeChanges,\n IHookRegistry,\n TransitionHookPhase,\n RegisteredHooks,\n HookRegOptions,\n HookMatchCriteria,\n TransitionStateHookFn,\n TransitionHookFn,\n} from './interface'; // has or is using\nimport { TransitionHook } from './transitionHook';\nimport { matchState, makeEvent, RegisteredHook } from './hookRegistry';\nimport { HookBuilder } from './hookBuilder';\nimport { PathNode } from '../path/pathNode';\nimport { PathUtils } from '../path/pathUtils';\nimport { StateObject } from '../state/stateObject';\nimport { TargetState } from '../state/targetState';\nimport { Param } from '../params/param';\nimport { Resolvable } from '../resolve/resolvable';\nimport { ViewConfig } from '../view/interface';\nimport { ResolveContext } from '../resolve/resolveContext';\nimport { UIRouter } from '../router';\nimport { UIInjector } from '../interface';\nimport { RawParams } from '../params/interface';\nimport { ResolvableLiteral } from '../resolve/interface';\nimport { Rejection } from './rejectFactory';\nimport { applyPairs, flattenR, uniqR } from '../common';\n\n/** @internal */\nconst stateSelf: (_state: StateObject) => StateDeclaration = prop('self');\n\n/**\n * Represents a transition between two states.\n *\n * When navigating to a state, we are transitioning **from** the current state **to** the new state.\n *\n * This object contains all contextual information about the to/from states, parameters, resolves.\n * It has information about all states being entered and exited as a result of the transition.\n */\nexport class Transition implements IHookRegistry {\n /** @internal */\n static diToken = Transition;\n\n /**\n * A unique identifier for the transition.\n *\n * This is an auto incrementing integer, starting from `0`.\n */\n $id: number;\n\n /**\n * A reference to the [[UIRouter]] instance\n *\n * This reference can be used to access the router services, such as the [[StateService]]\n */\n router: UIRouter;\n\n /** @internal */\n private _deferred = services.$q.defer();\n /**\n * This promise is resolved or rejected based on the outcome of the Transition.\n *\n * When the transition is successful, the promise is resolved\n * When the transition is unsuccessful, the promise is rejected with the [[Rejection]] or javascript error\n */\n promise: Promise<any> = this._deferred.promise;\n /**\n * A boolean which indicates if the transition was successful\n *\n * After a successful transition, this value is set to true.\n * After an unsuccessful transition, this value is set to false.\n *\n * The value will be undefined if the transition is not complete\n */\n success: boolean;\n /** @internal */\n _aborted: boolean;\n /** @internal */\n private _error: Rejection;\n\n /** @internal Holds the hook registration functions such as those passed to Transition.onStart() */\n _registeredHooks: RegisteredHooks = {};\n\n /** @internal */\n private _options: TransitionOptions;\n /** @internal */\n private _treeChanges: TreeChanges;\n /** @internal */\n private _targetState: TargetState;\n /** @internal */\n private _hookBuilder = new HookBuilder(this);\n\n /** @internal */\n onBefore(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onStart(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onExit(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onRetain(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onEnter(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onFinish(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onSuccess(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onError(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n\n /** @internal\n * Creates the transition-level hook registration functions\n * (which can then be used to register hooks)\n */\n private creatLine truncated
|
"import { trace } from '../common/trace';\nimport { services } from '../common/coreservices';\nimport { stringify } from '../common/strings';\nimport { map, find, extend, mergeR, tail, omit, arrayTuples, unnestR, identity, anyTrueR } from '../common/common';\nimport { isObject, isUndefined } from '../common/predicates';\nimport { prop, propEq, val, not, is } from '../common/hof';\nimport { StateDeclaration, StateOrName } from '../state/interface';\nimport {\n TransitionOptions,\n TreeChanges,\n IHookRegistry,\n TransitionHookPhase,\n RegisteredHooks,\n HookRegOptions,\n HookMatchCriteria,\n TransitionStateHookFn,\n TransitionHookFn,\n} from './interface'; // has or is using\nimport { TransitionHook } from './transitionHook';\nimport { matchState, makeEvent, RegisteredHook } from './hookRegistry';\nimport { HookBuilder } from './hookBuilder';\nimport { PathNode } from '../path/pathNode';\nimport { PathUtils } from '../path/pathUtils';\nimport { StateObject } from '../state/stateObject';\nimport { TargetState } from '../state/targetState';\nimport { Param } from '../params/param';\nimport { Resolvable } from '../resolve/resolvable';\nimport { ViewConfig } from '../view/interface';\nimport { ResolveContext } from '../resolve/resolveContext';\nimport { UIRouter } from '../router';\nimport { UIInjector } from '../interface';\nimport { RawParams } from '../params/interface';\nimport { ResolvableLiteral } from '../resolve/interface';\nimport { Rejection } from './rejectFactory';\nimport { applyPairs, flattenR, uniqR } from '../common';\n\n/** @internal */\nconst stateSelf: (_state: StateObject) => StateDeclaration = prop('self');\n\n/**\n * Represents a transition between two states.\n *\n * When navigating to a state, we are transitioning **from** the current state **to** the new state.\n *\n * This object contains all contextual information about the to/from states, parameters, resolves.\n * It has information about all states being entered and exited as a result of the transition.\n */\nexport class Transition implements IHookRegistry {\n /** @internal */\n static diToken = Transition;\n\n /**\n * A unique identifier for the transition.\n *\n * This is an auto incrementing integer, starting from `0`.\n */\n $id: number;\n\n /**\n * A reference to the [[UIRouter]] instance\n *\n * This reference can be used to access the router services, such as the [[StateService]]\n */\n router: UIRouter;\n\n /** @internal */\n private _deferred = services.$q.defer();\n /**\n * This promise is resolved or rejected based on the outcome of the Transition.\n *\n * When the transition is successful, the promise is resolved\n * When the transition is unsuccessful, the promise is rejected with the [[Rejection]] or javascript error\n */\n promise: Promise<any> = this._deferred.promise;\n /**\n * A boolean which indicates if the transition was successful\n *\n * After a successful transition, this value is set to true.\n * After an unsuccessful transition, this value is set to false.\n *\n * The value will be undefined if the transition is not complete\n */\n success: boolean;\n /** @internal */\n _aborted: boolean;\n /** @internal */\n private _error: Rejection;\n\n /** @internal Holds the hook registration functions such as those passed to Transition.onStart() */\n _registeredHooks: RegisteredHooks = {};\n\n /** @internal */\n private _options: TransitionOptions;\n /** @internal */\n private _treeChanges: TreeChanges;\n /** @internal */\n private _targetState: TargetState;\n /** @internal */\n private _hookBuilder = new HookBuilder(this);\n\n /** @internal */\n onBefore(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onStart(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onExit(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onRetain(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onEnter(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onFinish(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onSuccess(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onError(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n\n /** @internal\n * Creates the transition-level hook registration functions\n * (which can then be used to register hooks)\n */\n private creatLine truncated
|
||||||
"import { map, inherit, identity, unnest, tail, find, Obj, allTrueR, unnestR, arrayTuples } from '../common/common';\nimport { prop, propEq } from '../common/hof';\nimport { isArray, isString, isDefined } from '../common/predicates';\nimport { Param, DefType } from '../params/param';\nimport { ParamTypes } from '../params/paramTypes';\nimport { RawParams } from '../params/interface';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { joinNeighborsR, splitOnDelim } from '../common/strings';\nimport { ParamType } from '../params';\nimport { defaults } from '../common';\nimport { ParamFactory } from './urlMatcherFactory';\n\nfunction quoteRegExp(str: any, param?: any) {\n let surroundPattern = ['', ''],\n result = str.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, '\\\\$&');\n if (!param) return result;\n\n switch (param.squash) {\n case false:\n surroundPattern = ['(', ')' + (param.isOptional ? '?' : '')];\n break;\n case true:\n result = result.replace(/\\/$/, '');\n surroundPattern = ['(?:/(', ')|/)?'];\n break;\n default:\n surroundPattern = [`(${param.squash}|`, ')?'];\n break;\n }\n return result + surroundPattern[0] + param.type.pattern.source + surroundPattern[1];\n}\n\nconst memoizeTo = (obj: Obj, _prop: string, fn: Function) => (obj[_prop] = obj[_prop] || fn());\n\nconst splitOnSlash = splitOnDelim('/');\n\ninterface UrlMatcherCache {\n segments?: any[];\n weights?: number[];\n path?: UrlMatcher[];\n parent?: UrlMatcher;\n pattern?: RegExp;\n}\n\ninterface MatchDetails {\n id: string;\n regexp: string;\n segment: string;\n type: ParamType;\n}\n\nconst defaultConfig: UrlMatcherCompileConfig = {\n state: { params: {} },\n strict: true,\n caseInsensitive: true,\n decodeParams: true,\n};\n\n/**\n * Matches URLs against patterns.\n *\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL.\n *\n * A URL pattern consists of a path pattern, optionally followed by '?' and a list of search (query)\n * parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by [[UrlMatcher.exec]].\n *\n * - *Path parameters* are defined using curly brace placeholders (`/somepath/{param}`)\n * or colon placeholders (`/somePath/:param`).\n *\n * - *A parameter RegExp* may be defined for a param after a colon\n * (`/somePath/{param:[a-zA-Z0-9]+}`) in a curly brace placeholder.\n * The regexp must match for the url to be matched.\n * Should the regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Note: a RegExp parameter will encode its value using either [[ParamTypes.path]] or [[ParamTypes.query]].\n *\n * - *Custom parameter types* may also be specified after a colon (`/somePath/{param:int}`) in curly brace parameters.\n * See [[UrlMatcherFactory.type]] for more information.\n *\n * - *Catch-all parameters* are defined using an asterisk placeholder (`/somepath/*catchallparam`).\n * A catch-all * parameter value will contain the remainder of the URL.\n *\n * ---\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters).\n * A path parameter matches any number of characters other than '/'. For catch-all\n * placeholders the path parameter matches any number of characters.\n *\n * Examples:\n *\n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n * trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n * parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n * path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n * in the built-in `date` ParamType matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n */\nexport class UrlMatcher {\n /** @internal */\n static nameValidator: RegExp = /^\\w+([-.]+\\w+)*(?:\\[\\])?$/;\n\n /** @internal */\n private _cache: UrlMatcherCache = { path: [this] };\n /** @internal */\n private _children: UrlMatcher[] = [];\n /** @internal */\n private _params: Param[] = [];\n /** @internal */\n private _segments: string[]Line truncated
|
"import { map, inherit, identity, unnest, tail, find, Obj, allTrueR, unnestR, arrayTuples } from '../common/common';\nimport { prop, propEq } from '../common/hof';\nimport { isArray, isString, isDefined } from '../common/predicates';\nimport { Param, DefType } from '../params/param';\nimport { ParamTypes } from '../params/paramTypes';\nimport { RawParams } from '../params/interface';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { joinNeighborsR, splitOnDelim } from '../common/strings';\nimport { ParamType } from '../params';\nimport { defaults } from '../common';\nimport { ParamFactory } from './urlMatcherFactory';\n\nfunction quoteRegExp(str: any, param?: any) {\n let surroundPattern = ['', ''],\n result = str.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, '\\\\$&');\n if (!param) return result;\n\n switch (param.squash) {\n case false:\n surroundPattern = ['(', ')' + (param.isOptional ? '?' : '')];\n break;\n case true:\n result = result.replace(/\\/$/, '');\n surroundPattern = ['(?:/(', ')|/)?'];\n break;\n default:\n surroundPattern = [`(${param.squash}|`, ')?'];\n break;\n }\n return result + surroundPattern[0] + param.type.pattern.source + surroundPattern[1];\n}\n\nconst memoizeTo = (obj: Obj, _prop: string, fn: Function) => (obj[_prop] = obj[_prop] || fn());\n\nconst splitOnSlash = splitOnDelim('/');\n\ninterface UrlMatcherCache {\n segments?: any[];\n weights?: number[];\n path?: UrlMatcher[];\n parent?: UrlMatcher;\n pattern?: RegExp;\n}\n\ninterface MatchDetails {\n id: string;\n regexp: string;\n segment: string;\n type: ParamType;\n}\n\nconst defaultConfig: UrlMatcherCompileConfig = {\n state: { params: {} },\n strict: true,\n caseInsensitive: true,\n decodeParams: true,\n};\n\n/**\n * Matches URLs against patterns.\n *\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL.\n *\n * A URL pattern consists of a path pattern, optionally followed by '?' and a list of search (query)\n * parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by [[UrlMatcher.exec]].\n *\n * - *Path parameters* are defined using curly brace placeholders (`/somepath/{param}`)\n * or colon placeholders (`/somePath/:param`).\n *\n * - *A parameter RegExp* may be defined for a param after a colon\n * (`/somePath/{param:[a-zA-Z0-9]+}`) in a curly brace placeholder.\n * The regexp must match for the url to be matched.\n * Should the regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Note: a RegExp parameter will encode its value using either [[ParamTypes.path]] or [[ParamTypes.query]].\n *\n * - *Custom parameter types* may also be specified after a colon (`/somePath/{param:int}`) in curly brace parameters.\n * See [[UrlMatcherFactory.type]] for more information.\n *\n * - *Catch-all parameters* are defined using an asterisk placeholder (`/somepath/*catchallparam`).\n * A catch-all * parameter value will contain the remainder of the URL.\n *\n * ---\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters).\n * A path parameter matches any number of characters other than '/'. For catch-all\n * placeholders the path parameter matches any number of characters.\n *\n * Examples:\n *\n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n * trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n * parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n * path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n * in the built-in `date` ParamType matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n */\nexport class UrlMatcher {\n /** @internal */\n static nameValidator: RegExp = /^\\w+([-.]+\\w+)*(?:\\[\\])?$/;\n\n /** @internal */\n private _cache: UrlMatcherCache = { path: [this] };\n /** @internal */\n private _children: UrlMatcher[] = [];\n /** @internal */\n private _params: Param[] = [];\n /** @internal */\n private _segments: string[]Line truncated
|
||||||
"import { extend, forEach, isDefined, isFunction, isObject } from '../common';\nimport { UrlMatcher } from './urlMatcher';\nimport { DefType, Param, ParamType, ParamTypeDefinition } from '../params';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { StateDeclaration } from '../state';\nimport { UIRouter } from '../router';\n\nexport class ParamFactory {\n fromConfig(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.CONFIG, this.router.urlService.config, state);\n }\n\n fromPath(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.PATH, this.router.urlService.config, state);\n }\n\n fromSearch(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.SEARCH, this.router.urlService.config, state);\n }\n\n constructor(private router: UIRouter) {}\n}\n\n/**\n * Factory for [[UrlMatcher]] instances.\n *\n * The factory is available to ng1 services as\n * `$urlMatcherFactory` or ng1 providers as `$urlMatcherFactoryProvider`.\n */\nexport class UrlMatcherFactory {\n /** Creates a new [[Param]] for a given location (DefType) */\n paramFactory = new ParamFactory(this.router);\n // TODO: Check if removal of this will break anything, then remove these\n UrlMatcher: typeof UrlMatcher = UrlMatcher;\n Param: typeof Param = Param;\n\n // TODO: move implementations to UrlConfig (urlService.config)\n constructor(/** @internal */ private router: UIRouter) {}\n\n /**\n * Creates a [[UrlMatcher]] for the specified pattern.\n *\n * @param pattern The URL pattern.\n * @param config The config object hash.\n * @returns The UrlMatcher.\n */\n compile(pattern: string, config?: UrlMatcherCompileConfig) {\n const urlConfig = this.router.urlService.config;\n // backward-compatible support for config.params -> config.state.params\n const params = config && !config.state && (config as any).params;\n config = params ? { state: { params }, ...config } : config;\n const globalConfig: UrlMatcherCompileConfig = {\n strict: urlConfig._isStrictMode,\n caseInsensitive: urlConfig._isCaseInsensitive,\n decodeParams: urlConfig._decodeParams,\n };\n return new UrlMatcher(pattern, urlConfig.paramTypes, this.paramFactory, extend(globalConfig, config));\n }\n\n /**\n * Returns true if the specified object is a [[UrlMatcher]], or false otherwise.\n *\n * @param object The object to perform the type check against.\n * @returns `true` if the object matches the `UrlMatcher` interface, by\n * implementing all the same methods.\n */\n isMatcher(object: any): boolean {\n // TODO: typeof?\n if (!isObject(object)) return false;\n let result = true;\n\n forEach(UrlMatcher.prototype, (val, name) => {\n if (isFunction(val)) result = result && isDefined(object[name]) && isFunction(object[name]);\n });\n return result;\n }\n\n /** @internal */\n $get() {\n const urlConfig = this.router.urlService.config;\n urlConfig.paramTypes.enqueue = false;\n urlConfig.paramTypes._flushTypeQueue();\n return this;\n }\n\n /** @deprecated use [[UrlConfig.caseInsensitive]] */\n caseInsensitive = (value?: boolean) => this.router.urlService.config.caseInsensitive(value);\n\n /** @deprecated use [[UrlConfig.defaultSquashPolicy]] */\n defaultSquashPolicy = (value?: boolean | string) => this.router.urlService.config.defaultSquashPolicy(value);\n\n /** @deprecated use [[UrlConfig.strictMode]] */\n strictMode = (value?: boolean) => this.router.urlService.config.strictMode(value);\n\n /** @deprecated use [[UrlConfig.type]] */\n type = (name: string, definition?: ParamTypeDefinition, definitionFn?: () => ParamTypeDefinition) => {\n return this.router.urlService.config.type(name, definition, definitionFn) || this;\n };\n}\n",
|
"import { extend, forEach, isDefined, isFunction, isObject } from '../common';\nimport { UrlMatcher } from './urlMatcher';\nimport { DefType, Param, ParamType, ParamTypeDefinition } from '../params';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { StateDeclaration } from '../state';\nimport { UIRouter } from '../router';\n\nexport class ParamFactory {\n fromConfig(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.CONFIG, this.router.urlService.config, state);\n }\n\n fromPath(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.PATH, this.router.urlService.config, state);\n }\n\n fromSearch(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.SEARCH, this.router.urlService.config, state);\n }\n\n constructor(private router: UIRouter) {}\n}\n\n/**\n * Factory for [[UrlMatcher]] instances.\n *\n * The factory is available to ng1 services as\n * `$urlMatcherFactory` or ng1 providers as `$urlMatcherFactoryProvider`.\n */\nexport class UrlMatcherFactory {\n /** Creates a new [[Param]] for a given location (DefType) */\n paramFactory = new ParamFactory(this.router);\n // TODO: Check if removal of this will break anything, then remove these\n UrlMatcher: typeof UrlMatcher = UrlMatcher;\n Param: typeof Param = Param;\n\n // TODO: move implementations to UrlConfig (urlService.config)\n constructor(/** @internal */ private router: UIRouter) {}\n\n /**\n * Creates a [[UrlMatcher]] for the specified pattern.\n *\n * @param pattern The URL pattern.\n * @param config The config object hash.\n * @returns The UrlMatcher.\n */\n compile(pattern: string, config?: UrlMatcherCompileConfig) {\n const urlConfig = this.router.urlService.config;\n // backward-compatible support for config.params -> config.state.params\n const params = config && !config.state && (config as any).params;\n config = params ? { state: { params }, ...config } : config;\n const globalConfig: UrlMatcherCompileConfig = {\n strict: urlConfig._isStrictMode,\n caseInsensitive: urlConfig._isCaseInsensitive,\n decodeParams: urlConfig._decodeParams,\n };\n return new UrlMatcher(pattern, urlConfig.paramTypes, this.paramFactory, extend(globalConfig, config));\n }\n\n /**\n * Returns true if the specified object is a [[UrlMatcher]], or false otherwise.\n *\n * @param object The object to perform the type check against.\n * @returns `true` if the object matches the `UrlMatcher` interface, by\n * implementing all the same methods.\n */\n isMatcher(object: any): boolean {\n // TODO: typeof?\n if (!isObject(object)) return false;\n let result = true;\n\n forEach(UrlMatcher.prototype, (val, name) => {\n if (isFunction(val)) result = result && isDefined(object[name]) && isFunction(object[name]);\n });\n return result;\n }\n\n /** @internal */\n $get() {\n const urlConfig = this.router.urlService.config;\n urlConfig.paramTypes.enqueue = false;\n urlConfig.paramTypes._flushTypeQueue();\n return this;\n }\n\n /** @deprecated use [[UrlConfig.caseInsensitive]] */\n caseInsensitive = (value?: boolean) => this.router.urlService.config.caseInsensitive(value);\n\n /** @deprecated use [[UrlConfig.defaultSquashPolicy]] */\n defaultSquashPolicy = (value?: boolean | string) => this.router.urlService.config.defaultSquashPolicy(value);\n\n /** @deprecated use [[UrlConfig.strictMode]] */\n strictMode = (value?: boolean) => this.router.urlService.config.strictMode(value);\n\n /** @deprecated use [[UrlConfig.type]] */\n type = (name: string, definition?: ParamTypeDefinition, definitionFn?: () => ParamTypeDefinition) => {\n return this.router.urlService.config.type(name, definition, definitionFn) || this;\n };\n}\n",
|
||||||
"import { StateDeclaration } from '../state';\nimport { UrlMatcher } from './urlMatcher';\nimport { isString, isDefined, isFunction } from '../common/predicates';\nimport { UIRouter } from '../router';\nimport { identity, extend } from '../common/common';\nimport { is, or, pattern } from '../common/hof';\nimport { StateObject } from '../state/stateObject';\nimport { RawParams } from '../params/interface';\nimport {\n UrlRule,\n UrlRuleMatchFn,\n UrlRuleHandlerFn,\n UrlRuleType,\n UrlParts,\n MatcherUrlRule,\n StateRule,\n RegExpRule,\n} from './interface';\n\n/**\n * Creates a [[UrlRule]]\n *\n * Creates a [[UrlRule]] from a:\n *\n * - `string`\n * - [[UrlMatcher]]\n * - `RegExp`\n * - [[StateObject]]\n */\nexport class UrlRuleFactory {\n static isUrlRule = (obj) => obj && ['type', 'match', 'handler'].every((key) => isDefined(obj[key]));\n\n constructor(public router: UIRouter) {}\n\n compile(str: string) {\n return this.router.urlMatcherFactory.compile(str);\n }\n\n create(\n what: string | UrlMatcher | StateObject | StateDeclaration | RegExp | UrlRuleMatchFn,\n handler?: string | UrlRuleHandlerFn\n ): UrlRule {\n const { isState, isStateDeclaration } = StateObject;\n const makeRule = pattern([\n [isString, (_what: string) => makeRule(this.compile(_what))],\n [is(UrlMatcher), (_what: UrlMatcher) => this.fromUrlMatcher(_what, handler)],\n [or(isState, isStateDeclaration), (_what: StateObject | StateDeclaration) => this.fromState(_what, this.router)],\n [is(RegExp), (_what: RegExp) => this.fromRegExp(_what, handler)],\n [isFunction, (_what: UrlRuleMatchFn) => new BaseUrlRule(_what, handler as UrlRuleHandlerFn)],\n ]);\n\n const rule = makeRule(what);\n if (!rule) throw new Error(\"invalid 'what' in when()\");\n return rule;\n }\n\n /**\n * A UrlRule which matches based on a UrlMatcher\n *\n * The `handler` may be either a `string`, a [[UrlRuleHandlerFn]] or another [[UrlMatcher]]\n *\n * ## Handler as a function\n *\n * If `handler` is a function, the function is invoked with:\n *\n * - matched parameter values ([[RawParams]] from [[UrlMatcher.exec]])\n * - url: the current Url ([[UrlParts]])\n * - router: the router object ([[UIRouter]])\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, match => \"/home/\" + match.fooId + \"/\" + match.barId);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n *\n * ## Handler as UrlMatcher\n *\n * If `handler` is a UrlMatcher, the handler matcher is used to create the new url.\n * The `handler` UrlMatcher is formatted using the matched param from the first matcher.\n * The url is replaced with the result.\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var handler = $umf.compile(\"/home/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, handler);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n */\n fromUrlMatcher(urlMatcher: UrlMatcher, handler: string | UrlMatcher | UrlRuleHandlerFn): MatcherUrlRule {\n let _handler: UrlRuleHandlerFn = handler as any;\n if (isString(handler)) handler = this.router.urlMatcherFactory.compile(handler);\n if (is(UrlMatcher)(handler)) _handler = (match: RawParams) => (handler as UrlMatcher).format(match);\n\n function matchUrlParamters(url: UrlParts): RawParams {\n const params = urlMatcher.exec(url.path, url.search, url.hash);\n return urlMatcher.validates(params) && params;\n }\n\n // Prioritize URLs, lowest to highest:\n // - Some optional URL parameters, but none matched\n // - No optional parameters in URL\n // - Some optional parameters, some matched\n // - Some optional parameters, all matched\n function matchPriority(params: RawParams): number {\n const optional = urlMatcher.parameters().filter((param) => param.isOptional);\n if (!optional.length) return 0.000001;\n const matched = optional.filter((param) => params[param.id]);\n return matched.length / optional.length;\n }\n\n const details = { urlMatcher, matchPriority, type: 'URLMATCHER' };\n return extend(new BaseUrlRule(matchUrlParamters, _handler), details) as MatcherUrlRule;\n }\n\n /**\n * A UrlRule which matches a state by its url\n *\n * #### Example:\n * ```js\n * var rule = factory.fromState($state.get('foo'), router);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match);\n * // Starts a transition to 'foo' with params: { fooId: '123', barId: '456' }\n * ```\n */\n fromState(stateOrDecl: StateObject | StateDLine truncated
|
"import { StateDeclaration } from '../state';\nimport { UrlMatcher } from './urlMatcher';\nimport { isString, isDefined, isFunction } from '../common/predicates';\nimport { UIRouter } from '../router';\nimport { identity, extend } from '../common/common';\nimport { is, or, pattern } from '../common/hof';\nimport { StateObject } from '../state/stateObject';\nimport { RawParams } from '../params/interface';\nimport {\n UrlRule,\n UrlRuleMatchFn,\n UrlRuleHandlerFn,\n UrlRuleType,\n UrlParts,\n MatcherUrlRule,\n StateRule,\n RegExpRule,\n} from './interface';\n\n/**\n * Creates a [[UrlRule]]\n *\n * Creates a [[UrlRule]] from a:\n *\n * - `string`\n * - [[UrlMatcher]]\n * - `RegExp`\n * - [[StateObject]]\n */\nexport class UrlRuleFactory {\n static isUrlRule = (obj) => obj && ['type', 'match', 'handler'].every((key) => isDefined(obj[key]));\n\n constructor(public router: UIRouter) {}\n\n compile(str: string) {\n return this.router.urlMatcherFactory.compile(str);\n }\n\n create(\n what: string | UrlMatcher | StateObject | StateDeclaration | RegExp | UrlRuleMatchFn,\n handler?: string | UrlRuleHandlerFn\n ): UrlRule {\n const { isState, isStateDeclaration } = StateObject;\n const makeRule = pattern([\n [isString, (_what: string) => makeRule(this.compile(_what))],\n [is(UrlMatcher), (_what: UrlMatcher) => this.fromUrlMatcher(_what, handler)],\n [or(isState, isStateDeclaration), (_what: StateObject | StateDeclaration) => this.fromState(_what, this.router)],\n [is(RegExp), (_what: RegExp) => this.fromRegExp(_what, handler)],\n [isFunction, (_what: UrlRuleMatchFn) => new BaseUrlRule(_what, handler as UrlRuleHandlerFn)],\n ]);\n\n const rule = makeRule(what);\n if (!rule) throw new Error(\"invalid 'what' in when()\");\n return rule;\n }\n\n /**\n * A UrlRule which matches based on a UrlMatcher\n *\n * The `handler` may be either a `string`, a [[UrlRuleHandlerFn]] or another [[UrlMatcher]]\n *\n * ## Handler as a function\n *\n * If `handler` is a function, the function is invoked with:\n *\n * - matched parameter values ([[RawParams]] from [[UrlMatcher.exec]])\n * - url: the current Url ([[UrlParts]])\n * - router: the router object ([[UIRouter]])\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, match => \"/home/\" + match.fooId + \"/\" + match.barId);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n *\n * ## Handler as UrlMatcher\n *\n * If `handler` is a UrlMatcher, the handler matcher is used to create the new url.\n * The `handler` UrlMatcher is formatted using the matched param from the first matcher.\n * The url is replaced with the result.\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var handler = $umf.compile(\"/home/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, handler);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n */\n fromUrlMatcher(urlMatcher: UrlMatcher, handler: string | UrlMatcher | UrlRuleHandlerFn): MatcherUrlRule {\n let _handler: UrlRuleHandlerFn = handler as any;\n if (isString(handler)) handler = this.router.urlMatcherFactory.compile(handler);\n if (is(UrlMatcher)(handler)) _handler = (match: RawParams) => (handler as UrlMatcher).format(match);\n\n function matchUrlParamters(url: UrlParts): RawParams {\n const params = urlMatcher.exec(url.path, url.search, url.hash);\n return urlMatcher.validates(params) && params;\n }\n\n // Prioritize URLs, lowest to highest:\n // - Some optional URL parameters, but none matched\n // - No optional parameters in URL\n // - Some optional parameters, some matched\n // - Some optional parameters, all matched\n function matchPriority(params: RawParams): number {\n const optional = urlMatcher.parameters().filter((param) => param.isOptional);\n if (!optional.length) return 0.000001;\n const matched = optional.filter((param) => params[param.id]);\n return matched.length / optional.length;\n }\n\n const details = { urlMatcher, matchPriority, type: 'URLMATCHER' };\n return extend(new BaseUrlRule(matchUrlParamters, _handler), details) as MatcherUrlRule;\n }\n\n /**\n * A UrlRule which matches a state by its url\n *\n * #### Example:\n * ```js\n * var rule = factory.fromState($state.get('foo'), router);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match);\n * // Starts a transition to 'foo' with params: { fooId: '123', barId: '456' }\n * ```\n */\n fromState(stateOrDecl: StateObject | StateDLine truncated
|
||||||
"import { stripLastPathElement } from '../common';\nimport { UrlMatcher } from './urlMatcher';\nimport { RawParams } from '../params';\nimport { UIRouter } from '../router';\nimport { UrlRuleFactory } from './urlRule';\nimport { MatchResult, UrlParts, UrlRule, UrlRuleHandlerFn } from './interface';\nimport { TargetState, TargetStateDef } from '../state';\n\nfunction appendBasePath(url: string, isHtml5: boolean, absolute: boolean, baseHref: string): string {\n if (baseHref === '/') return url;\n if (isHtml5) return stripLastPathElement(baseHref) + url;\n if (absolute) return baseHref.slice(1) + url;\n return url;\n}\n\n/**\n * Updates URL and responds to URL changes\n *\n * ### Deprecation warning:\n * This class is now considered to be an internal API\n * Use the [[UrlService]] instead.\n * For configuring URL rules, use the [[UrlRules]] which can be found as [[UrlService.rules]].\n */\nexport class UrlRouter {\n /** used to create [[UrlRule]] objects for common cases */\n public urlRuleFactory: UrlRuleFactory;\n /** @internal */ private location: string;\n\n /** @internal */\n constructor(/** @internal */ private router: UIRouter) {\n this.urlRuleFactory = new UrlRuleFactory(router);\n }\n\n /** Internal API. */\n update(read?: boolean) {\n const $url = this.router.locationService;\n if (read) {\n this.location = $url.url();\n return;\n }\n if ($url.url() === this.location) return;\n\n $url.url(this.location, true);\n }\n\n /**\n * Internal API.\n *\n * Pushes a new location to the browser history.\n *\n * @internal\n * @param urlMatcher\n * @param params\n * @param options\n */\n push(urlMatcher: UrlMatcher, params?: RawParams, options?: { replace?: string | boolean }) {\n const replace = options && !!options.replace;\n this.router.urlService.url(urlMatcher.format(params || {}), replace);\n }\n\n /**\n * Builds and returns a URL with interpolated parameters\n *\n * #### Example:\n * ```js\n * matcher = $umf.compile(\"/about/:person\");\n * params = { person: \"bob\" };\n * $bob = $urlRouter.href(matcher, params);\n * // $bob == \"/about/bob\";\n * ```\n *\n * @param urlMatcher The [[UrlMatcher]] object which is used as the template of the URL to generate.\n * @param params An object of parameter values to fill the matcher's required parameters.\n * @param options Options object. The options are:\n *\n * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n *\n * @returns Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`\n */\n href(urlMatcher: UrlMatcher, params?: any, options?: { absolute: boolean }): string {\n let url = urlMatcher.format(params);\n if (url == null) return null;\n\n options = options || { absolute: false };\n\n const cfg = this.router.urlService.config;\n const isHtml5 = cfg.html5Mode();\n if (!isHtml5 && url !== null) {\n url = '#' + cfg.hashPrefix() + url;\n }\n url = appendBasePath(url, isHtml5, options.absolute, cfg.baseHref());\n\n if (!options.absolute || !url) {\n return url;\n }\n\n const slash = !isHtml5 && url ? '/' : '';\n const cfgPort = cfg.port();\n const port = <any>(cfgPort === 80 || cfgPort === 443 ? '' : ':' + cfgPort);\n\n return [cfg.protocol(), '://', cfg.host(), port, slash, url].join('');\n }\n\n // Delegate these calls to [[UrlService]]\n /** @deprecated use [[UrlService.sync]]*/\n public sync = (evt?) => this.router.urlService.sync(evt);\n /** @deprecated use [[UrlService.listen]]*/\n public listen = (enabled?: boolean): Function => this.router.urlService.listen(enabled);\n /** @deprecated use [[UrlService.deferIntercept]]*/\n public deferIntercept = (defer?: boolean) => this.router.urlService.deferIntercept(defer);\n /** @deprecated use [[UrlService.interceptDeferred]]*/\n public get interceptDeferred() {\n return this.router.urlService.interceptDeferred;\n }\n /** @deprecated use [[UrlService.match]]*/\n public match = (urlParts: UrlParts): MatchResult => this.router.urlService.match(urlParts);\n\n // Delegate these calls to [[UrlRules]]\n /** @deprecated use [[UrlRules.initial]]*/\n public initial = (handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef): void =>\n this.router.urlService.rules.initial(handler);\n /** @deprecated use [[UrlRules.otherwise]]*/\n public otherwise = (handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef): void =>\n this.router.urlService.rules.otherwise(handler);\n /** @deprecated use [[UrlRules.removeRule]]*/\n public removeRule = (rule: UrlRule): void => this.router.urlService.rules.removeRule(rule);\n /** @deprecated use [[UrlRules.rule]]*/\n public rule = (rule: UrlRule): Function => this.router.urlService.rules.rule(rule);\n /** @deprecated use [[UrlRules.rules]]*/\n public rules = (): UrlRule[] => this.roLine truncated
|
"import { stripLastPathElement } from '../common';\nimport { UrlMatcher } from './urlMatcher';\nimport { RawParams } from '../params';\nimport { UIRouter } from '../router';\nimport { UrlRuleFactory } from './urlRule';\nimport { MatchResult, UrlParts, UrlRule, UrlRuleHandlerFn } from './interface';\nimport { TargetState, TargetStateDef } from '../state';\n\nfunction appendBasePath(url: string, isHtml5: boolean, absolute: boolean, baseHref: string): string {\n if (baseHref === '/') return url;\n if (isHtml5) return stripLastPathElement(baseHref) + url;\n if (absolute) return baseHref.slice(1) + url;\n return url;\n}\n\n/**\n * Updates URL and responds to URL changes\n *\n * ### Deprecation warning:\n * This class is now considered to be an internal API\n * Use the [[UrlService]] instead.\n * For configuring URL rules, use the [[UrlRules]] which can be found as [[UrlService.rules]].\n */\nexport class UrlRouter {\n /** used to create [[UrlRule]] objects for common cases */\n public urlRuleFactory: UrlRuleFactory;\n /** @internal */ private location: string;\n\n /** @internal */\n constructor(/** @internal */ private router: UIRouter) {\n this.urlRuleFactory = new UrlRuleFactory(router);\n }\n\n /** Internal API. */\n update(read?: boolean) {\n const $url = this.router.locationService;\n if (read) {\n this.location = $url.url();\n return;\n }\n if ($url.url() === this.location) return;\n\n $url.url(this.location, true);\n }\n\n /**\n * Internal API.\n *\n * Pushes a new location to the browser history.\n *\n * @internal\n * @param urlMatcher\n * @param params\n * @param options\n */\n push(urlMatcher: UrlMatcher, params?: RawParams, options?: { replace?: string | boolean }) {\n const replace = options && !!options.replace;\n this.router.urlService.url(urlMatcher.format(params || {}), replace);\n }\n\n /**\n * Builds and returns a URL with interpolated parameters\n *\n * #### Example:\n * ```js\n * matcher = $umf.compile(\"/about/:person\");\n * params = { person: \"bob\" };\n * $bob = $urlRouter.href(matcher, params);\n * // $bob == \"/about/bob\";\n * ```\n *\n * @param urlMatcher The [[UrlMatcher]] object which is used as the template of the URL to generate.\n * @param params An object of parameter values to fill the matcher's required parameters.\n * @param options Options object. The options are:\n *\n * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n *\n * @returns Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`\n */\n href(urlMatcher: UrlMatcher, params?: any, options?: { absolute: boolean }): string {\n let url = urlMatcher.format(params);\n if (url == null) return null;\n\n options = options || { absolute: false };\n\n const cfg = this.router.urlService.config;\n const isHtml5 = cfg.html5Mode();\n if (!isHtml5 && url !== null) {\n url = '#' + cfg.hashPrefix() + url;\n }\n url = appendBasePath(url, isHtml5, options.absolute, cfg.baseHref());\n\n if (!options.absolute || !url) {\n return url;\n }\n\n const slash = !isHtml5 && url ? '/' : '';\n const cfgPort = cfg.port();\n const port = <any>(cfgPort === 80 || cfgPort === 443 ? '' : ':' + cfgPort);\n\n return [cfg.protocol(), '://', cfg.host(), port, slash, url].join('');\n }\n\n // Delegate these calls to [[UrlService]]\n /** @deprecated use [[UrlService.sync]]*/\n public sync = (evt?) => this.router.urlService.sync(evt);\n /** @deprecated use [[UrlService.listen]]*/\n public listen = (enabled?: boolean): Function => this.router.urlService.listen(enabled);\n /** @deprecated use [[UrlService.deferIntercept]]*/\n public deferIntercept = (defer?: boolean) => this.router.urlService.deferIntercept(defer);\n /** @deprecated use [[UrlService.interceptDeferred]]*/\n public get interceptDeferred() {\n return this.router.urlService.interceptDeferred;\n }\n /** @deprecated use [[UrlService.match]]*/\n public match = (urlParts: UrlParts): MatchResult => this.router.urlService.match(urlParts);\n\n // Delegate these calls to [[UrlRules]]\n /** @deprecated use [[UrlRules.initial]]*/\n public initial = (handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef): void =>\n this.router.urlService.rules.initial(handler);\n /** @deprecated use [[UrlRules.otherwise]]*/\n public otherwise = (handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef): void =>\n this.router.urlService.rules.otherwise(handler);\n /** @deprecated use [[UrlRules.removeRule]]*/\n public removeRule = (rule: UrlRule): void => this.router.urlService.rules.removeRule(rule);\n /** @deprecated use [[UrlRules.rule]]*/\n public rule = (rule: UrlRule): Function => this.router.urlService.rules.rule(rule);\n /** @deprecated use [[UrlRules.rules]]*/\n public rules = (): UrlRule[] => this.roLine truncated
|
||||||
@@ -172,5 +172,5 @@
|
|||||||
"__extends",
|
"__extends",
|
||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"mappings": "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 truncated
|
"mappings": "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 truncated
|
||||||
}
|
}
|
||||||
@@ -4,9 +4,9 @@
|
|||||||
* This causes it to be incompatible with plugins that depend on @uirouter/core.
|
* This causes it to be incompatible with plugins that depend on @uirouter/core.
|
||||||
* We recommend switching to the ui-router-core.js and ui-router-angularjs.js bundles instead.
|
* We recommend switching to the ui-router-core.js and ui-router-angularjs.js bundles instead.
|
||||||
* For more information, see https://ui-router.github.io/blog/uirouter-for-angularjs-umd-bundles
|
* For more information, see https://ui-router.github.io/blog/uirouter-for-angularjs-umd-bundles
|
||||||
* @version v1.0.28
|
* @version v1.0.29
|
||||||
* @link https://ui-router.github.io
|
* @link https://ui-router.github.io
|
||||||
* @license MIT License, http://www.opensource.org/licenses/MIT
|
* @license MIT License, http://www.opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("angular")):"function"==typeof define&&define.amd?define(["exports","angular"],e):e((t=t||self)["@uirouter/angularjs"]={},t.angular)}(this,(function(t,e){"use strict";var r=angular,n=e&&e.module?e:r,i=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;var n=Array(t),i=0;for(e=0;e<r;e++)for(var o=arguments[e],a=0,u=o.length;a<u;a++,i++)n[i]=o[a];return n};function o(t){return function e(){if(arguments.length>=t.length)return t.apply(this,arguments);var r=Array.prototype.slice.call(arguments);return e.bind.apply(e,i([this],r))}}function a(){var t=arguments,e=t.length-1;return function(){for(var r=e,n=t[e].apply(this,arguments);r--;)n=t[r].call(this,n);return n}}function u(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return a.apply(null,[].slice.call(arguments).reverse())}var s=function(t){return function(e){return e&&e[t]}},c=o((function(t,e,r){return r&&r[t]===e})),f=function(t){return u.apply(null,t.split(".").map(s))},l=function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return!t.apply(null,e)}};function h(t,e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];return t.apply(null,r)&&e.apply(null,r)}}function p(t,e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];return t.apply(null,r)||e.apply(null,r)}}var v=function(t){return function(e){return e.reduce((function(e,r){return e&&!!t(r)}),!0)}},d=function(t){return function(e){return e.reduce((function(e,r){return e||!!t(r)}),!1)}},m=function(t){return function(e){return null!=e&&e.constructor===t||e instanceof t}},g=function(t){return function(e){return t===e}},y=function(t){return function(){return t}};function w(t,e){return function(r){return r[t].apply(r,e)}}function _(t){return function(e){for(var r=0;r<t.length;r++)if(t[r][0](e))return t[r][1](e)}}var S=Object.prototype.toString,$=function(t){return function(e){return typeof e===t}},b=$("undefined"),R=l(b),E=function(t){return null===t},C=p(E,b),P=$("function"),T=$("number"),k=$("string"),O=function(t){return null!==t&&"object"==typeof t},x=Array.isArray,j=function(t){return"[object Date]"===S.call(t)},V=function(t){return"[object RegExp]"===S.call(t)};function I(t){if(x(t)&&t.length){var e=t.slice(0,-1),r=t.slice(-1);return!(e.filter(l(k)).length||r.filter(l(P)).length)}return P(t)}var H=h(O,u(s("then"),P)),A=function(t,e){return e.reduce((function(e,r){return e[r]=(n=t+"."+r+"()",function(){throw new Error("No implementation for "+n+". The framework specific code did not implement this method.")}),e;var n}),{})},D={$q:void 0,$injector:void 0},q=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;var n=Array(t),i=0;for(e=0;e<r;e++)for(var o=arguments[e],a=0,u=o.length;a<u;a++,i++)n[i]=o[a];return n},N="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||void 0,U=N.angular||{},F=U.fromJson||JSON.parse.bind(JSON),L=U.toJson||JSON.stringify.bind(JSON),M=U.forEach||function(t,e,r){if(x(t))return t.forEach(e,r);Object.keys(t).forEach((function(r){return e(t[r],r)}))},B=Object.assign||Ot,G=U.equals||xt;function z(t){return t}function W(){}function J(t,e,r,n,i){void 0===i&&(i=!1);var o=function(e){return t()[e].bind(r())};return(n=n||Object.keys(t())).reduce((function(t,r){var n;return t[r]=i?(n=r,function(){return e[n]=o(n),e[n].apply(null,arguments)}):o(r),t}),e)}var Q=function(t,e){return B(Object.create(t),e)},K=o(Y);function Y(t,e){return-1!==t.indexOf(e)}var Z=o(X);function X(t,e){var r=t.indexOf(e);return r>=0&&t.splice(r,1),t}var tt=o(et);function et(t,e){return t.push(e),e}var rt=function(t){return t.slice().forEach((function(e){"function"==typeof e&&e(),Z(t,e)}))};function nt(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=B.apply(void 0,q([{}],e.reverse()));return B(n,at(t||{},Object.keys(n)))}var it=function(t,e){return B(t,e)};function ot(t,e){var r=[];for(var n in t.path){if(t.path[n]!==e.path[n])break;r.push(t.path[n])}return r}function at(t,e){var r={};for(var n in t)-1!==e.indexOf(n)&&(r[n]=t[n]);return r}function ut(t,e){return Object.keys(t).filter(l(K(e))).reduce((function(e,r){return e[r]=t[r],e}),{})}function st(t,e){return ht(t,s(e))}function ct(t,e){var r=x(t),n=r?[]:{},i=r?function(t){return n.push(t)}:function(t,e){return n[e]=t};return M(t,(function(t,r){e(t,r)&&i(t,r)})),n}function ft(t,e){var r;return M(t,(function(t,n){r||e(t,n)&&(r=t)})),r}var lt=ht;function ht(t,e,r){return r=r||(x(t)?[]:{}),M(t,(function(t,n){return r[n]=e(t,n)})),r}var pt=function(t){return Object.keys(t).map((function(e){return t[e]}))},vt=function(t,e){return t&&e},dt=function(t,e){return t||e},mt=function(t,e){return t.concat(e)},gt=function(t,e){return x(e)?t.concat(e.reduce(gt,[])):yt(t,e)};function yt(t,e){return t.push(e),t}var wt=function(t,e){return K(t,e)?t:yt(t,e)},_t=function(t){returnLine truncated
|
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("angular")):"function"==typeof define&&define.amd?define(["exports","angular"],e):e((t=t||self)["@uirouter/angularjs"]={},t.angular)}(this,(function(t,e){"use strict";var r=angular,n=e&&e.module?e:r,i=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;var n=Array(t),i=0;for(e=0;e<r;e++)for(var o=arguments[e],a=0,u=o.length;a<u;a++,i++)n[i]=o[a];return n};function o(t){return function e(){if(arguments.length>=t.length)return t.apply(this,arguments);var r=Array.prototype.slice.call(arguments);return e.bind.apply(e,i([this],r))}}function a(){var t=arguments,e=t.length-1;return function(){for(var r=e,n=t[e].apply(this,arguments);r--;)n=t[r].call(this,n);return n}}function u(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return a.apply(null,[].slice.call(arguments).reverse())}var s=function(t){return function(e){return e&&e[t]}},c=o((function(t,e,r){return r&&r[t]===e})),f=function(t){return u.apply(null,t.split(".").map(s))},l=function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return!t.apply(null,e)}};function h(t,e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];return t.apply(null,r)&&e.apply(null,r)}}function p(t,e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];return t.apply(null,r)||e.apply(null,r)}}var v=function(t){return function(e){return e.reduce((function(e,r){return e&&!!t(r)}),!0)}},d=function(t){return function(e){return e.reduce((function(e,r){return e||!!t(r)}),!1)}},m=function(t){return function(e){return null!=e&&e.constructor===t||e instanceof t}},g=function(t){return function(e){return t===e}},y=function(t){return function(){return t}};function w(t,e){return function(r){return r[t].apply(r,e)}}function _(t){return function(e){for(var r=0;r<t.length;r++)if(t[r][0](e))return t[r][1](e)}}var S=Object.prototype.toString,$=function(t){return function(e){return typeof e===t}},b=$("undefined"),R=l(b),E=function(t){return null===t},C=p(E,b),P=$("function"),T=$("number"),k=$("string"),O=function(t){return null!==t&&"object"==typeof t},x=Array.isArray,j=function(t){return"[object Date]"===S.call(t)},V=function(t){return"[object RegExp]"===S.call(t)};function I(t){if(x(t)&&t.length){var e=t.slice(0,-1),r=t.slice(-1);return!(e.filter(l(k)).length||r.filter(l(P)).length)}return P(t)}var H=h(O,u(s("then"),P)),A=function(t,e){return e.reduce((function(e,r){return e[r]=(n=t+"."+r+"()",function(){throw new Error("No implementation for "+n+". The framework specific code did not implement this method.")}),e;var n}),{})},D={$q:void 0,$injector:void 0},q=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;var n=Array(t),i=0;for(e=0;e<r;e++)for(var o=arguments[e],a=0,u=o.length;a<u;a++,i++)n[i]=o[a];return n},U="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||void 0,N=U.angular||{},F=N.fromJson||JSON.parse.bind(JSON),L=N.toJson||JSON.stringify.bind(JSON),M=N.forEach||function(t,e,r){if(x(t))return t.forEach(e,r);Object.keys(t).forEach((function(r){return e(t[r],r)}))},B=Object.assign||Ot,G=N.equals||xt;function z(t){return t}function W(){}function J(t,e,r,n,i){void 0===i&&(i=!1);var o=function(e){return t()[e].bind(r())};return(n=n||Object.keys(t())).reduce((function(t,r){var n;return t[r]=i?(n=r,function(){return e[n]=o(n),e[n].apply(null,arguments)}):o(r),t}),e)}var Q=function(t,e){return B(Object.create(t),e)},K=o(Y);function Y(t,e){return-1!==t.indexOf(e)}var Z=o(X);function X(t,e){var r=t.indexOf(e);return r>=0&&t.splice(r,1),t}var tt=o(et);function et(t,e){return t.push(e),e}var rt=function(t){return t.slice().forEach((function(e){"function"==typeof e&&e(),Z(t,e)}))};function nt(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=B.apply(void 0,q([{}],e.reverse()));return B(n,at(t||{},Object.keys(n)))}var it=function(t,e){return B(t,e)};function ot(t,e){var r=[];for(var n in t.path){if(t.path[n]!==e.path[n])break;r.push(t.path[n])}return r}function at(t,e){var r={};for(var n in t)-1!==e.indexOf(n)&&(r[n]=t[n]);return r}function ut(t,e){return Object.keys(t).filter(l(K(e))).reduce((function(e,r){return e[r]=t[r],e}),{})}function st(t,e){return ht(t,s(e))}function ct(t,e){var r=x(t),n=r?[]:{},i=r?function(t){return n.push(t)}:function(t,e){return n[e]=t};return M(t,(function(t,r){e(t,r)&&i(t,r)})),n}function ft(t,e){var r;return M(t,(function(t,n){r||e(t,n)&&(r=t)})),r}var lt=ht;function ht(t,e,r){return r=r||(x(t)?[]:{}),M(t,(function(t,n){return r[n]=e(t,n)})),r}var pt=function(t){return Object.keys(t).map((function(e){return t[e]}))},vt=function(t,e){return t&&e},dt=function(t,e){return t||e},mt=function(t,e){return t.concat(e)},gt=function(t,e){return x(e)?t.concat(e.reduce(gt,[])):yt(t,e)};function yt(t,e){return t.push(e),t}var wt=function(t,e){return K(t,e)?t:yt(t,e)},_t=function(t){returnLine truncated
|
||||||
//# sourceMappingURL=angular-ui-router.min.js.map
|
//# sourceMappingURL=angular-ui-router.min.js.map
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
"import { extend, identity } from '../common/common';\nimport { services } from '../common/coreservices';\nimport { trace } from '../common/trace';\nimport { ResolvePolicy, ResolvableLiteral, PolicyAsync } from './interface';\n\nimport { ResolveContext } from './resolveContext';\nimport { stringify } from '../common/strings';\nimport { isFunction, isObject } from '../common/predicates';\nimport { Transition } from '../transition/transition';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { isNullOrUndefined } from '../common/predicates';\n\n// TODO: explicitly make this user configurable\nexport let defaultResolvePolicy: ResolvePolicy = {\n when: 'LAZY',\n async: 'WAIT',\n};\n\n/**\n * The basic building block for the resolve system.\n *\n * Resolvables encapsulate a state's resolve's resolveFn, the resolveFn's declared dependencies, the wrapped (.promise),\n * and the unwrapped-when-complete (.data) result of the resolveFn.\n *\n * Resolvable.get() either retrieves the Resolvable's existing promise, or else invokes resolve() (which invokes the\n * resolveFn) and returns the resulting promise.\n *\n * Resolvable.get() and Resolvable.resolve() both execute within a context path, which is passed as the first\n * parameter to those fns.\n */\nexport class Resolvable implements ResolvableLiteral {\n token: any;\n policy: ResolvePolicy;\n resolveFn: Function;\n deps: any[];\n\n data: any;\n resolved = false;\n promise: Promise<any> = undefined;\n\n static fromData = (token: any, data: any) => new Resolvable(token, () => data, null, null, data);\n\n /** This constructor creates a Resolvable copy */\n constructor(resolvable: Resolvable);\n\n /** This constructor creates a new Resolvable from the plain old [[ResolvableLiteral]] javascript object */\n constructor(resolvable: ResolvableLiteral);\n\n /**\n * This constructor creates a new `Resolvable`\n *\n * #### Example:\n * ```js\n * var resolvable1 = new Resolvable('mytoken', http => http.get('foo.json').toPromise(), [Http]);\n *\n * var resolvable2 = new Resolvable(UserService, dep => new UserService(dep.data), [SomeDependency]);\n *\n * var resolvable1Clone = new Resolvable(resolvable1);\n * ```\n *\n * @param token The new resolvable's injection token, such as `\"userList\"` (a string) or `UserService` (a class).\n * When this token is used during injection, the resolved value will be injected.\n * @param resolveFn The function that returns the resolved value, or a promise for the resolved value\n * @param deps An array of dependencies, which will be injected into the `resolveFn`\n * @param policy the [[ResolvePolicy]] defines when and how the Resolvable is processed\n * @param data Pre-resolved data. If the resolve value is already known, it may be provided here.\n */\n constructor(token: any, resolveFn: Function, deps?: any[], policy?: ResolvePolicy, data?: any);\n constructor(arg1: any, resolveFn?: Function, deps?: any[], policy?: ResolvePolicy, data?: any) {\n if (arg1 instanceof Resolvable) {\n extend(this, arg1);\n } else if (isFunction(resolveFn)) {\n if (isNullOrUndefined(arg1)) throw new Error('new Resolvable(): token argument is required');\n if (!isFunction(resolveFn)) throw new Error('new Resolvable(): resolveFn argument must be a function');\n\n this.token = arg1;\n this.policy = policy;\n this.resolveFn = resolveFn;\n this.deps = deps || [];\n\n this.data = data;\n this.resolved = data !== undefined;\n this.promise = this.resolved ? services.$q.when(this.data) : undefined;\n } else if (isObject(arg1) && arg1.token && (arg1.hasOwnProperty('resolveFn') || arg1.hasOwnProperty('data'))) {\n const literal = <ResolvableLiteral>arg1;\n return new Resolvable(literal.token, literal.resolveFn, literal.deps, literal.policy, literal.data);\n }\n }\n\n getPolicy(state: StateObject): ResolvePolicy {\n const thisPolicy = this.policy || {};\n const statePolicy = (state && state.resolvePolicy) || {};\n return {\n when: thisPolicy.when || statePolicy.when || defaultResolvePolicy.when,\n async: thisPolicy.async || statePolicy.async || defaultResolvePolicy.async,\n };\n }\n\n /**\n * Asynchronously resolve this Resolvable's data\n *\n * Given a ResolveContext that this Resolvable is found in:\n * Wait for this Resolvable's dependencies, then invoke this Resolvable's function\n * and update the Resolvable's state\n */\n resolve(resolveContext: ResolveContext, trans?: Transition) {\n const $q = services.$q;\n\n // Gets all dependencies from ResolveContext and wait for them to be resolved\n const getResolvableDependencies = () =>\n $q.all(\n resolveContext.getDependencies(this).map((resolvable) => resolvable.get(resolveContext, trans))\n ) as Promise<any[]>;\n\n // Invokes the resolve function passing thLine truncated
|
"import { extend, identity } from '../common/common';\nimport { services } from '../common/coreservices';\nimport { trace } from '../common/trace';\nimport { ResolvePolicy, ResolvableLiteral, PolicyAsync } from './interface';\n\nimport { ResolveContext } from './resolveContext';\nimport { stringify } from '../common/strings';\nimport { isFunction, isObject } from '../common/predicates';\nimport { Transition } from '../transition/transition';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { isNullOrUndefined } from '../common/predicates';\n\n// TODO: explicitly make this user configurable\nexport let defaultResolvePolicy: ResolvePolicy = {\n when: 'LAZY',\n async: 'WAIT',\n};\n\n/**\n * The basic building block for the resolve system.\n *\n * Resolvables encapsulate a state's resolve's resolveFn, the resolveFn's declared dependencies, the wrapped (.promise),\n * and the unwrapped-when-complete (.data) result of the resolveFn.\n *\n * Resolvable.get() either retrieves the Resolvable's existing promise, or else invokes resolve() (which invokes the\n * resolveFn) and returns the resulting promise.\n *\n * Resolvable.get() and Resolvable.resolve() both execute within a context path, which is passed as the first\n * parameter to those fns.\n */\nexport class Resolvable implements ResolvableLiteral {\n token: any;\n policy: ResolvePolicy;\n resolveFn: Function;\n deps: any[];\n\n data: any;\n resolved = false;\n promise: Promise<any> = undefined;\n\n static fromData = (token: any, data: any) => new Resolvable(token, () => data, null, null, data);\n\n /** This constructor creates a Resolvable copy */\n constructor(resolvable: Resolvable);\n\n /** This constructor creates a new Resolvable from the plain old [[ResolvableLiteral]] javascript object */\n constructor(resolvable: ResolvableLiteral);\n\n /**\n * This constructor creates a new `Resolvable`\n *\n * #### Example:\n * ```js\n * var resolvable1 = new Resolvable('mytoken', http => http.get('foo.json').toPromise(), [Http]);\n *\n * var resolvable2 = new Resolvable(UserService, dep => new UserService(dep.data), [SomeDependency]);\n *\n * var resolvable1Clone = new Resolvable(resolvable1);\n * ```\n *\n * @param token The new resolvable's injection token, such as `\"userList\"` (a string) or `UserService` (a class).\n * When this token is used during injection, the resolved value will be injected.\n * @param resolveFn The function that returns the resolved value, or a promise for the resolved value\n * @param deps An array of dependencies, which will be injected into the `resolveFn`\n * @param policy the [[ResolvePolicy]] defines when and how the Resolvable is processed\n * @param data Pre-resolved data. If the resolve value is already known, it may be provided here.\n */\n constructor(token: any, resolveFn: Function, deps?: any[], policy?: ResolvePolicy, data?: any);\n constructor(arg1: any, resolveFn?: Function, deps?: any[], policy?: ResolvePolicy, data?: any) {\n if (arg1 instanceof Resolvable) {\n extend(this, arg1);\n } else if (isFunction(resolveFn)) {\n if (isNullOrUndefined(arg1)) throw new Error('new Resolvable(): token argument is required');\n if (!isFunction(resolveFn)) throw new Error('new Resolvable(): resolveFn argument must be a function');\n\n this.token = arg1;\n this.policy = policy;\n this.resolveFn = resolveFn;\n this.deps = deps || [];\n\n this.data = data;\n this.resolved = data !== undefined;\n this.promise = this.resolved ? services.$q.when(this.data) : undefined;\n } else if (isObject(arg1) && arg1.token && (arg1.hasOwnProperty('resolveFn') || arg1.hasOwnProperty('data'))) {\n const literal = <ResolvableLiteral>arg1;\n return new Resolvable(literal.token, literal.resolveFn, literal.deps, literal.policy, literal.data);\n }\n }\n\n getPolicy(state: StateObject): ResolvePolicy {\n const thisPolicy = this.policy || {};\n const statePolicy = (state && state.resolvePolicy) || {};\n return {\n when: thisPolicy.when || statePolicy.when || defaultResolvePolicy.when,\n async: thisPolicy.async || statePolicy.async || defaultResolvePolicy.async,\n };\n }\n\n /**\n * Asynchronously resolve this Resolvable's data\n *\n * Given a ResolveContext that this Resolvable is found in:\n * Wait for this Resolvable's dependencies, then invoke this Resolvable's function\n * and update the Resolvable's state\n */\n resolve(resolveContext: ResolveContext, trans?: Transition) {\n const $q = services.$q;\n\n // Gets all dependencies from ResolveContext and wait for them to be resolved\n const getResolvableDependencies = () =>\n $q.all(\n resolveContext.getDependencies(this).map((resolvable) => resolvable.get(resolveContext, trans))\n ) as Promise<any[]>;\n\n // Invokes the resolve function passing thLine truncated
|
||||||
"import { find, tail, uniqR, unnestR, inArray } from '../common/common';\nimport { propEq, not } from '../common/hof';\nimport { trace } from '../common/trace';\nimport { services, $InjectorLike } from '../common/coreservices';\nimport { resolvePolicies, PolicyWhen, ResolvePolicy } from './interface';\nimport { PathNode } from '../path/pathNode';\nimport { Resolvable } from './resolvable';\nimport { StateObject } from '../state/stateObject';\nimport { PathUtils } from '../path/pathUtils';\nimport { stringify } from '../common/strings';\nimport { Transition } from '../transition/transition';\nimport { UIInjector } from '../interface';\nimport { isUndefined } from '../common';\n\nconst whens = resolvePolicies.when;\nconst ALL_WHENS = [whens.EAGER, whens.LAZY];\nconst EAGER_WHENS = [whens.EAGER];\n\n// tslint:disable-next-line:no-inferrable-types\nexport const NATIVE_INJECTOR_TOKEN: string = 'Native Injector';\n\n/**\n * Encapsulates Dependency Injection for a path of nodes\n *\n * UI-Router states are organized as a tree.\n * A nested state has a path of ancestors to the root of the tree.\n * When a state is being activated, each element in the path is wrapped as a [[PathNode]].\n * A `PathNode` is a stateful object that holds things like parameters and resolvables for the state being activated.\n *\n * The ResolveContext closes over the [[PathNode]]s, and provides DI for the last node in the path.\n */\nexport class ResolveContext {\n _injector: UIInjector;\n\n constructor(private _path: PathNode[]) {}\n\n /** Gets all the tokens found in the resolve context, de-duplicated */\n getTokens(): any[] {\n return this._path.reduce((acc, node) => acc.concat(node.resolvables.map((r) => r.token)), []).reduce(uniqR, []);\n }\n\n /**\n * Gets the Resolvable that matches the token\n *\n * Gets the last Resolvable that matches the token in this context, or undefined.\n * Throws an error if it doesn't exist in the ResolveContext\n */\n getResolvable(token: any): Resolvable {\n const matching = this._path\n .map((node) => node.resolvables)\n .reduce(unnestR, [])\n .filter((r: Resolvable) => r.token === token);\n return tail(matching);\n }\n\n /** Returns the [[ResolvePolicy]] for the given [[Resolvable]] */\n getPolicy(resolvable: Resolvable): ResolvePolicy {\n const node = this.findNode(resolvable);\n return resolvable.getPolicy(node.state);\n }\n\n /**\n * Returns a ResolveContext that includes a portion of this one\n *\n * Given a state, this method creates a new ResolveContext from this one.\n * The new context starts at the first node (root) and stops at the node for the `state` parameter.\n *\n * #### Why\n *\n * When a transition is created, the nodes in the \"To Path\" are injected from a ResolveContext.\n * A ResolveContext closes over a path of [[PathNode]]s and processes the resolvables.\n * The \"To State\" can inject values from its own resolvables, as well as those from all its ancestor state's (node's).\n * This method is used to create a narrower context when injecting ancestor nodes.\n *\n * @example\n * `let ABCD = new ResolveContext([A, B, C, D]);`\n *\n * Given a path `[A, B, C, D]`, where `A`, `B`, `C` and `D` are nodes for states `a`, `b`, `c`, `d`:\n * When injecting `D`, `D` should have access to all resolvables from `A`, `B`, `C`, `D`.\n * However, `B` should only be able to access resolvables from `A`, `B`.\n *\n * When resolving for the `B` node, first take the full \"To Path\" Context `[A,B,C,D]` and limit to the subpath `[A,B]`.\n * `let AB = ABCD.subcontext(a)`\n */\n subContext(state: StateObject): ResolveContext {\n return new ResolveContext(PathUtils.subPath(this._path, (node) => node.state === state));\n }\n\n /**\n * Adds Resolvables to the node that matches the state\n *\n * This adds a [[Resolvable]] (generally one created on the fly; not declared on a [[StateDeclaration.resolve]] block).\n * The resolvable is added to the node matching the `state` parameter.\n *\n * These new resolvables are not automatically fetched.\n * The calling code should either fetch them, fetch something that depends on them,\n * or rely on [[resolvePath]] being called when some state is being entered.\n *\n * Note: each resolvable's [[ResolvePolicy]] is merged with the state's policy, and the global default.\n *\n * @param newResolvables the new Resolvables\n * @param state Used to find the node to put the resolvable on\n */\n addResolvables(newResolvables: Resolvable[], state: StateObject) {\n const node = <PathNode>find(this._path, propEq('state', state));\n const keys = newResolvables.map((r) => r.token);\n node.resolvables = node.resolvables.filter((r) => keys.indexOf(r.token) === -1).concat(newResolvables);\n }\n\n /**\n * Returns a promise for an array of resolved path Element promises\n *\n * @param when\n * @param trans\n * @returns {Promise<any>|Line truncated
|
"import { find, tail, uniqR, unnestR, inArray } from '../common/common';\nimport { propEq, not } from '../common/hof';\nimport { trace } from '../common/trace';\nimport { services, $InjectorLike } from '../common/coreservices';\nimport { resolvePolicies, PolicyWhen, ResolvePolicy } from './interface';\nimport { PathNode } from '../path/pathNode';\nimport { Resolvable } from './resolvable';\nimport { StateObject } from '../state/stateObject';\nimport { PathUtils } from '../path/pathUtils';\nimport { stringify } from '../common/strings';\nimport { Transition } from '../transition/transition';\nimport { UIInjector } from '../interface';\nimport { isUndefined } from '../common';\n\nconst whens = resolvePolicies.when;\nconst ALL_WHENS = [whens.EAGER, whens.LAZY];\nconst EAGER_WHENS = [whens.EAGER];\n\n// tslint:disable-next-line:no-inferrable-types\nexport const NATIVE_INJECTOR_TOKEN: string = 'Native Injector';\n\n/**\n * Encapsulates Dependency Injection for a path of nodes\n *\n * UI-Router states are organized as a tree.\n * A nested state has a path of ancestors to the root of the tree.\n * When a state is being activated, each element in the path is wrapped as a [[PathNode]].\n * A `PathNode` is a stateful object that holds things like parameters and resolvables for the state being activated.\n *\n * The ResolveContext closes over the [[PathNode]]s, and provides DI for the last node in the path.\n */\nexport class ResolveContext {\n _injector: UIInjector;\n\n constructor(private _path: PathNode[]) {}\n\n /** Gets all the tokens found in the resolve context, de-duplicated */\n getTokens(): any[] {\n return this._path.reduce((acc, node) => acc.concat(node.resolvables.map((r) => r.token)), []).reduce(uniqR, []);\n }\n\n /**\n * Gets the Resolvable that matches the token\n *\n * Gets the last Resolvable that matches the token in this context, or undefined.\n * Throws an error if it doesn't exist in the ResolveContext\n */\n getResolvable(token: any): Resolvable {\n const matching = this._path\n .map((node) => node.resolvables)\n .reduce(unnestR, [])\n .filter((r: Resolvable) => r.token === token);\n return tail(matching);\n }\n\n /** Returns the [[ResolvePolicy]] for the given [[Resolvable]] */\n getPolicy(resolvable: Resolvable): ResolvePolicy {\n const node = this.findNode(resolvable);\n return resolvable.getPolicy(node.state);\n }\n\n /**\n * Returns a ResolveContext that includes a portion of this one\n *\n * Given a state, this method creates a new ResolveContext from this one.\n * The new context starts at the first node (root) and stops at the node for the `state` parameter.\n *\n * #### Why\n *\n * When a transition is created, the nodes in the \"To Path\" are injected from a ResolveContext.\n * A ResolveContext closes over a path of [[PathNode]]s and processes the resolvables.\n * The \"To State\" can inject values from its own resolvables, as well as those from all its ancestor state's (node's).\n * This method is used to create a narrower context when injecting ancestor nodes.\n *\n * @example\n * `let ABCD = new ResolveContext([A, B, C, D]);`\n *\n * Given a path `[A, B, C, D]`, where `A`, `B`, `C` and `D` are nodes for states `a`, `b`, `c`, `d`:\n * When injecting `D`, `D` should have access to all resolvables from `A`, `B`, `C`, `D`.\n * However, `B` should only be able to access resolvables from `A`, `B`.\n *\n * When resolving for the `B` node, first take the full \"To Path\" Context `[A,B,C,D]` and limit to the subpath `[A,B]`.\n * `let AB = ABCD.subcontext(a)`\n */\n subContext(state: StateObject): ResolveContext {\n return new ResolveContext(PathUtils.subPath(this._path, (node) => node.state === state));\n }\n\n /**\n * Adds Resolvables to the node that matches the state\n *\n * This adds a [[Resolvable]] (generally one created on the fly; not declared on a [[StateDeclaration.resolve]] block).\n * The resolvable is added to the node matching the `state` parameter.\n *\n * These new resolvables are not automatically fetched.\n * The calling code should either fetch them, fetch something that depends on them,\n * or rely on [[resolvePath]] being called when some state is being entered.\n *\n * Note: each resolvable's [[ResolvePolicy]] is merged with the state's policy, and the global default.\n *\n * @param newResolvables the new Resolvables\n * @param state Used to find the node to put the resolvable on\n */\n addResolvables(newResolvables: Resolvable[], state: StateObject) {\n const node = <PathNode>find(this._path, propEq('state', state));\n const keys = newResolvables.map((r) => r.token);\n node.resolvables = node.resolvables.filter((r) => keys.indexOf(r.token) === -1).concat(newResolvables);\n }\n\n /**\n * Returns a promise for an array of resolved path Element promises\n *\n * @param when\n * @param trans\n * @returns {Promise<any>|Line truncated
|
||||||
"import { applyPairs, extend, identity, inherit, mapObj, noop, Obj, omit, tail, values, copy } from '../common/common';\nimport { isArray, isDefined, isFunction, isString } from '../common/predicates';\nimport { stringify } from '../common/strings';\nimport { is, pattern, pipe, prop, val } from '../common/hof';\nimport { StateDeclaration } from './interface';\n\nimport { StateObject } from './stateObject';\nimport { StateMatcher } from './stateMatcher';\nimport { Param } from '../params/param';\nimport { UrlMatcherFactory } from '../url/urlMatcherFactory';\nimport { UrlMatcher } from '../url/urlMatcher';\nimport { Resolvable } from '../resolve/resolvable';\nimport { services } from '../common/coreservices';\nimport { ResolvePolicy } from '../resolve/interface';\nimport { ParamDeclaration } from '../params';\nimport { ParamFactory } from '../url';\n\nconst parseUrl = (url: string): any => {\n if (!isString(url)) return false;\n const root = url.charAt(0) === '^';\n return { val: root ? url.substring(1) : url, root };\n};\n\n/**\n * A function that builds the final value for a specific field on a [[StateObject]].\n *\n * A series of builder functions for a given field are chained together.\n * The final value returned from the chain of builders is applied to the built [[StateObject]].\n * Builder functions should call the [[parent]] function either first or last depending on the desired composition behavior.\n *\n * @param state the _partially built_ [[StateObject]]. The [[StateDeclaration]] can be inspected via [[StateObject.self]]\n * @param parent the previous builder function in the series.\n */\nexport type BuilderFunction = (state: StateObject, parent?: BuilderFunction) => any;\n\ninterface Builders {\n [key: string]: BuilderFunction[];\n\n name: BuilderFunction[];\n parent: BuilderFunction[];\n data: BuilderFunction[];\n url: BuilderFunction[];\n navigable: BuilderFunction[];\n params: BuilderFunction[];\n views: BuilderFunction[];\n path: BuilderFunction[];\n includes: BuilderFunction[];\n resolvables: BuilderFunction[];\n}\n\nfunction nameBuilder(state: StateObject) {\n return state.name;\n}\n\nfunction selfBuilder(state: StateObject) {\n state.self.$$state = () => state;\n return state.self;\n}\n\nfunction dataBuilder(state: StateObject) {\n if (state.parent && state.parent.data) {\n state.data = state.self.data = inherit(state.parent.data, state.data);\n }\n return state.data;\n}\n\nconst getUrlBuilder = ($urlMatcherFactoryProvider: UrlMatcherFactory, root: () => StateObject) =>\n function urlBuilder(stateObject: StateObject) {\n let stateDec: StateDeclaration = stateObject.self;\n\n // For future states, i.e., states whose name ends with `.**`,\n // match anything that starts with the url prefix\n if (stateDec && stateDec.url && stateDec.name && stateDec.name.match(/\\.\\*\\*$/)) {\n const newStateDec: StateDeclaration = {};\n copy(stateDec, newStateDec);\n newStateDec.url += '{remainder:any}'; // match any path (.*)\n stateDec = newStateDec;\n }\n\n const parent = stateObject.parent;\n const parsed = parseUrl(stateDec.url);\n const url = !parsed ? stateDec.url : $urlMatcherFactoryProvider.compile(parsed.val, { state: stateDec });\n\n if (!url) return null;\n if (!$urlMatcherFactoryProvider.isMatcher(url)) throw new Error(`Invalid url '${url}' in state '${stateObject}'`);\n return parsed && parsed.root ? url : ((parent && parent.navigable) || root()).url.append(<UrlMatcher>url);\n };\n\nconst getNavigableBuilder = (isRoot: (state: StateObject) => boolean) =>\n function navigableBuilder(state: StateObject) {\n return !isRoot(state) && state.url ? state : state.parent ? state.parent.navigable : null;\n };\n\nconst getParamsBuilder = (paramFactory: ParamFactory) =>\n function paramsBuilder(state: StateObject): { [key: string]: Param } {\n const makeConfigParam = (config: ParamDeclaration, id: string) => paramFactory.fromConfig(id, null, state.self);\n const urlParams: Param[] = (state.url && state.url.parameters({ inherit: false })) || [];\n const nonUrlParams: Param[] = values(mapObj(omit(state.params || {}, urlParams.map(prop('id'))), makeConfigParam));\n return urlParams\n .concat(nonUrlParams)\n .map((p) => [p.id, p])\n .reduce(applyPairs, {});\n };\n\nfunction pathBuilder(state: StateObject) {\n return state.parent ? state.parent.path.concat(state) : /*root*/ [state];\n}\n\nfunction includesBuilder(state: StateObject) {\n const includes = state.parent ? extend({}, state.parent.includes) : {};\n includes[state.name] = true;\n return includes;\n}\n\n/**\n * This is a [[StateBuilder.builder]] function for the `resolve:` block on a [[StateDeclaration]].\n *\n * When the [[StateBuilder]] builds a [[StateObject]] object from a raw [[StateDeclaration]], this builder\n * validates the `resolve` property and converts it to a [[Resolvable]] array.\n *\n * resolve: input value can be:\n Line truncated
|
"import { applyPairs, extend, identity, inherit, mapObj, noop, Obj, omit, tail, values, copy } from '../common/common';\nimport { isArray, isDefined, isFunction, isString } from '../common/predicates';\nimport { stringify } from '../common/strings';\nimport { is, pattern, pipe, prop, val } from '../common/hof';\nimport { StateDeclaration } from './interface';\n\nimport { StateObject } from './stateObject';\nimport { StateMatcher } from './stateMatcher';\nimport { Param } from '../params/param';\nimport { UrlMatcherFactory } from '../url/urlMatcherFactory';\nimport { UrlMatcher } from '../url/urlMatcher';\nimport { Resolvable } from '../resolve/resolvable';\nimport { services } from '../common/coreservices';\nimport { ResolvePolicy } from '../resolve/interface';\nimport { ParamDeclaration } from '../params';\nimport { ParamFactory } from '../url';\n\nconst parseUrl = (url: string): any => {\n if (!isString(url)) return false;\n const root = url.charAt(0) === '^';\n return { val: root ? url.substring(1) : url, root };\n};\n\n/**\n * A function that builds the final value for a specific field on a [[StateObject]].\n *\n * A series of builder functions for a given field are chained together.\n * The final value returned from the chain of builders is applied to the built [[StateObject]].\n * Builder functions should call the [[parent]] function either first or last depending on the desired composition behavior.\n *\n * @param state the _partially built_ [[StateObject]]. The [[StateDeclaration]] can be inspected via [[StateObject.self]]\n * @param parent the previous builder function in the series.\n */\nexport type BuilderFunction = (state: StateObject, parent?: BuilderFunction) => any;\n\ninterface Builders {\n [key: string]: BuilderFunction[];\n\n name: BuilderFunction[];\n parent: BuilderFunction[];\n data: BuilderFunction[];\n url: BuilderFunction[];\n navigable: BuilderFunction[];\n params: BuilderFunction[];\n views: BuilderFunction[];\n path: BuilderFunction[];\n includes: BuilderFunction[];\n resolvables: BuilderFunction[];\n}\n\nfunction nameBuilder(state: StateObject) {\n return state.name;\n}\n\nfunction selfBuilder(state: StateObject) {\n state.self.$$state = () => state;\n return state.self;\n}\n\nfunction dataBuilder(state: StateObject) {\n if (state.parent && state.parent.data) {\n state.data = state.self.data = inherit(state.parent.data, state.data);\n }\n return state.data;\n}\n\nconst getUrlBuilder = ($urlMatcherFactoryProvider: UrlMatcherFactory, root: () => StateObject) =>\n function urlBuilder(stateObject: StateObject) {\n let stateDec: StateDeclaration = stateObject.self;\n\n // For future states, i.e., states whose name ends with `.**`,\n // match anything that starts with the url prefix\n if (stateDec && stateDec.url && stateDec.name && stateDec.name.match(/\\.\\*\\*$/)) {\n const newStateDec: StateDeclaration = {};\n copy(stateDec, newStateDec);\n newStateDec.url += '{remainder:any}'; // match any path (.*)\n stateDec = newStateDec;\n }\n\n const parent = stateObject.parent;\n const parsed = parseUrl(stateDec.url);\n const url = !parsed ? stateDec.url : $urlMatcherFactoryProvider.compile(parsed.val, { state: stateDec });\n\n if (!url) return null;\n if (!$urlMatcherFactoryProvider.isMatcher(url)) throw new Error(`Invalid url '${url}' in state '${stateObject}'`);\n return parsed && parsed.root ? url : ((parent && parent.navigable) || root()).url.append(<UrlMatcher>url);\n };\n\nconst getNavigableBuilder = (isRoot: (state: StateObject) => boolean) =>\n function navigableBuilder(state: StateObject) {\n return !isRoot(state) && state.url ? state : state.parent ? state.parent.navigable : null;\n };\n\nconst getParamsBuilder = (paramFactory: ParamFactory) =>\n function paramsBuilder(state: StateObject): { [key: string]: Param } {\n const makeConfigParam = (config: ParamDeclaration, id: string) => paramFactory.fromConfig(id, null, state.self);\n const urlParams: Param[] = (state.url && state.url.parameters({ inherit: false })) || [];\n const nonUrlParams: Param[] = values(mapObj(omit(state.params || {}, urlParams.map(prop('id'))), makeConfigParam));\n return urlParams\n .concat(nonUrlParams)\n .map((p) => [p.id, p])\n .reduce(applyPairs, {});\n };\n\nfunction pathBuilder(state: StateObject) {\n return state.parent ? state.parent.path.concat(state) : /*root*/ [state];\n}\n\nfunction includesBuilder(state: StateObject) {\n const includes = state.parent ? extend({}, state.parent.includes) : {};\n includes[state.name] = true;\n return includes;\n}\n\n/**\n * This is a [[StateBuilder.builder]] function for the `resolve:` block on a [[StateDeclaration]].\n *\n * When the [[StateBuilder]] builds a [[StateObject]] object from a raw [[StateDeclaration]], this builder\n * validates the `resolve` property and converts it to a [[Resolvable]] array.\n *\n * resolve: input value can be:\n Line truncated
|
||||||
"import { StateDeclaration } from '../state/interface';\nimport { PredicateBinary } from '../common/common';\n\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TargetState } from '../state/targetState';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * The TransitionOptions object can be used to change the behavior of a transition.\n *\n * It is passed as the third argument to [[StateService.go]], [[StateService.transitionTo]].\n * It can also be used with a `uiSref`.\n */\nexport interface TransitionOptions {\n /**\n * This option changes how the Transition interacts with the browser's location bar (URL).\n *\n * - If `true`, it will update the url in the location bar.\n * - If `false`, it will not update the url in the location bar.\n * - If it is the string `\"replace\"`, it will update the url and also replace the last history record.\n *\n * @default `true`\n */\n location?: boolean | 'replace';\n\n /**\n * When transitioning to relative path (e.g '`^`'), this option defines which state to be relative from.\n * @default `$state.current`\n */\n relative?: string | StateDeclaration | StateObject;\n\n /**\n * This option sets whether or not the transition's parameter values should be inherited from\n * the current parameter values.\n *\n * - If `true`, it will inherit parameter values from the current parameter values.\n * - If `false`, only the parameters which are provided to `transitionTo` will be used.\n *\n * @default `false`\n */\n inherit?: boolean;\n\n /**\n * @deprecated\n */\n notify?: boolean;\n\n /**\n * This option may be used to force states which are currently active to reload.\n *\n * During a normal transition, a state is \"retained\" if:\n * - It was previously active\n * - The state's parameter values have not changed\n * - All the parent states' parameter values have not changed\n *\n * Forcing a reload of a state will cause it to be exited and entered, which will:\n * - Refetch that state's resolve data\n * - Exit the state (onExit hook)\n * - Re-enter the state (onEnter hook)\n * - Re-render the views (controllers and templates)\n *\n * - When `true`, the destination state (and all parent states) will be reloaded.\n * - When it is a string and is the name of a state, or when it is a State object,\n * that state and any children states will be reloaded.\n *\n * @default `false`\n */\n reload?: boolean | string | StateDeclaration | StateObject;\n /**\n * You can define your own Transition Options inside this property and use them, e.g., from a Transition Hook\n */\n custom?: any;\n /**\n * This option may be used to cancel the active transition (if one is active) in favour of the this one.\n * This is the default behaviour or ui-router.\n *\n *\n * - When `true`, the active transition will be canceled and new transition will begin.\n * - when `false`, the transition will be canceled if a transition is already running. This can be useful in cases where\n * you only want to navigate to a different state if you are not already navigating somewhere.\n *\n * @default `true`\n */\n supercede?: boolean;\n /** @internal */\n reloadState?: StateObject;\n /** @internal\n * If this transition is a redirect, this property should be the original Transition (which was redirected to this one)\n */\n redirectedFrom?: Transition;\n /** @internal */\n current?: () => Transition;\n /** @internal */\n source?: 'sref' | 'url' | 'redirect' | 'otherwise' | 'unknown';\n}\n\nexport interface TransitionHookOptions {\n current?: () => Transition; // path?\n transition?: Transition;\n hookType?: string;\n target?: any;\n traceData?: any;\n bind?: any;\n stateHook?: boolean;\n}\n\n/**\n * TreeChanges encapsulates the various Paths that are involved in a Transition.\n *\n * Get a TreeChanges object using [[Transition.treeChanges]]\n *\n * A UI-Router Transition is from one Path in a State Tree to another Path. For a given Transition,\n * this object stores the \"to\" and \"from\" paths, as well as subsets of those: the \"retained\",\n * \"exiting\" and \"entering\" paths.\n *\n * Each path in TreeChanges is an array of [[PathNode]] objects. Each PathNode in the array corresponds to a portion\n * of a nested state.\n *\n * For example, if you had a nested state named `foo.bar.baz`, it would have three\n * portions, `foo, bar, baz`. If you transitioned **to** `foo.bar.baz` and inspected the [[TreeChanges.to]]\n * Path, you would find a node in the array for each portion: `foo`, `bar`, and `baz`.\n *\n * ---\n *\n * @todo show visual state tree\n */\nexport interface TreeChanges {\n /** @nodoc */\n [key: string]: PathNode[] | undefined;\n\n /** The path of nodes in the state tree that the transition is coming *from* */\n from: PathNode[];\n\n /** The path oLine truncated
|
"import { StateDeclaration } from '../state/interface';\nimport { PredicateBinary } from '../common/common';\n\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TargetState } from '../state/targetState';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * The TransitionOptions object can be used to change the behavior of a transition.\n *\n * It is passed as the third argument to [[StateService.go]], [[StateService.transitionTo]].\n * It can also be used with a `uiSref`.\n */\nexport interface TransitionOptions {\n /**\n * This option changes how the Transition interacts with the browser's location bar (URL).\n *\n * - If `true`, it will update the url in the location bar.\n * - If `false`, it will not update the url in the location bar.\n * - If it is the string `\"replace\"`, it will update the url and also replace the last history record.\n *\n * @default `true`\n */\n location?: boolean | 'replace';\n\n /**\n * When transitioning to relative path (e.g '`^`'), this option defines which state to be relative from.\n * @default `$state.current`\n */\n relative?: string | StateDeclaration | StateObject;\n\n /**\n * This option sets whether or not the transition's parameter values should be inherited from\n * the current parameter values.\n *\n * - If `true`, it will inherit parameter values from the current parameter values.\n * - If `false`, only the parameters which are provided to `transitionTo` will be used.\n *\n * @default `true`\n */\n inherit?: boolean;\n\n /**\n * @deprecated\n */\n notify?: boolean;\n\n /**\n * This option may be used to force states which are currently active to reload.\n *\n * During a normal transition, a state is \"retained\" if:\n * - It was previously active\n * - The state's parameter values have not changed\n * - All the parent states' parameter values have not changed\n *\n * Forcing a reload of a state will cause it to be exited and entered, which will:\n * - Refetch that state's resolve data\n * - Exit the state (onExit hook)\n * - Re-enter the state (onEnter hook)\n * - Re-render the views (controllers and templates)\n *\n * - When `true`, the destination state (and all parent states) will be reloaded.\n * - When it is a string and is the name of a state, or when it is a State object,\n * that state and any children states will be reloaded.\n *\n * @default `false`\n */\n reload?: boolean | string | StateDeclaration | StateObject;\n /**\n * You can define your own Transition Options inside this property and use them, e.g., from a Transition Hook\n */\n custom?: any;\n /**\n * This option may be used to cancel the active transition (if one is active) in favour of the this one.\n * This is the default behaviour or ui-router.\n *\n *\n * - When `true`, the active transition will be canceled and new transition will begin.\n * - when `false`, the transition will be canceled if a transition is already running. This can be useful in cases where\n * you only want to navigate to a different state if you are not already navigating somewhere.\n *\n * @default `true`\n */\n supercede?: boolean;\n /** @internal */\n reloadState?: StateObject;\n /** @internal\n * If this transition is a redirect, this property should be the original Transition (which was redirected to this one)\n */\n redirectedFrom?: Transition;\n /** @internal */\n current?: () => Transition;\n /** @internal */\n source?: 'sref' | 'url' | 'redirect' | 'otherwise' | 'unknown';\n}\n\nexport interface TransitionHookOptions {\n current?: () => Transition; // path?\n transition?: Transition;\n hookType?: string;\n target?: any;\n traceData?: any;\n bind?: any;\n stateHook?: boolean;\n}\n\n/**\n * TreeChanges encapsulates the various Paths that are involved in a Transition.\n *\n * Get a TreeChanges object using [[Transition.treeChanges]]\n *\n * A UI-Router Transition is from one Path in a State Tree to another Path. For a given Transition,\n * this object stores the \"to\" and \"from\" paths, as well as subsets of those: the \"retained\",\n * \"exiting\" and \"entering\" paths.\n *\n * Each path in TreeChanges is an array of [[PathNode]] objects. Each PathNode in the array corresponds to a portion\n * of a nested state.\n *\n * For example, if you had a nested state named `foo.bar.baz`, it would have three\n * portions, `foo, bar, baz`. If you transitioned **to** `foo.bar.baz` and inspected the [[TreeChanges.to]]\n * Path, you would find a node in the array for each portion: `foo`, `bar`, and `baz`.\n *\n * ---\n *\n * @todo show visual state tree\n */\nexport interface TreeChanges {\n /** @nodoc */\n [key: string]: PathNode[] | undefined;\n\n /** The path of nodes in the state tree that the transition is coming *from* */\n from: PathNode[];\n\n /** The path ofLine truncated
|
||||||
"import { StateDeclaration, _ViewDeclaration, _StateDeclaration, LazyLoadResult } from './interface';\nimport { defaults, values, find, inherit } from '../common/common';\nimport { propEq } from '../common/hof';\nimport { Param } from '../params/param';\nimport { UrlMatcher } from '../url/urlMatcher';\nimport { Resolvable } from '../resolve/resolvable';\nimport { TransitionStateHookFn } from '../transition/interface';\nimport { TargetState } from './targetState';\nimport { Transition } from '../transition/transition';\nimport { Glob } from '../common/glob';\nimport { isObject, isFunction } from '../common/predicates';\n\n/**\n * Internal representation of a UI-Router state.\n *\n * Instances of this class are created when a [[StateDeclaration]] is registered with the [[StateRegistry]].\n *\n * A registered [[StateDeclaration]] is augmented with a getter ([[StateDeclaration.$$state]]) which returns the corresponding [[StateObject]] object.\n *\n * This class prototypally inherits from the corresponding [[StateDeclaration]].\n * Each of its own properties (i.e., `hasOwnProperty`) are built using builders from the [[StateBuilder]].\n */\nexport class StateObject {\n /** The parent [[StateObject]] */\n public parent: StateObject;\n\n /** The name used to register the state */\n public name: string;\n\n /** Prototypally inherits from [[StateDeclaration.abstract]] */\n public abstract: boolean;\n\n /** Prototypally inherits from [[StateDeclaration.resolve]] */\n public resolve: { [key: string]: string | any[] | Function } | any[];\n\n /** A list of [[Resolvable]] objects. The internal representation of [[resolve]]. */\n public resolvables: Resolvable[];\n\n /** Prototypally inherits from [[StateDeclaration.resolvePolicy]] */\n public resolvePolicy: any;\n\n /** A compiled URLMatcher which detects when the state's URL is matched */\n public url: UrlMatcher;\n\n /** The parameters for the state, built from the URL and [[StateDeclaration.params]] */\n public params: { [key: string]: Param };\n\n /**\n * The views for the state.\n * Note: `@uirouter/core` does not register a builder for views.\n * The framework specific code should register a `views` builder.\n */\n public views: { [key: string]: _ViewDeclaration };\n\n /**\n * The original [[StateDeclaration]] used to build this [[StateObject]].\n * Note: `this` object also prototypally inherits from the `self` declaration object.\n */\n public self: StateDeclaration;\n\n /** The nearest parent [[StateObject]] which has a URL */\n public navigable: StateObject;\n\n /** The parent [[StateObject]] objects from this state up to the root */\n public path: StateObject[];\n\n /**\n * Prototypally inherits from [[StateDeclaration.data]]\n * Note: This is the only field on the [[StateDeclaration]] which is mutated.\n * The definition object's `data` field is replaced with a new object\n * which prototypally inherits from the parent state definition's `data` field.\n */\n public data: any;\n\n /**\n * An object containing the parent States' names as keys and\n * true as their values.\n */\n public includes: { [name: string]: boolean };\n\n /** Prototypally inherits from [[StateDeclaration.onExit]] */\n public onExit: TransitionStateHookFn;\n /** Prototypally inherits from [[StateDeclaration.onRetain]] */\n public onRetain: TransitionStateHookFn;\n /** Prototypally inherits from [[StateDeclaration.onEnter]] */\n public onEnter: TransitionStateHookFn;\n\n /** Prototypally inherits from [[StateDeclaration.lazyLoad]] */\n public lazyLoad: (transition: Transition, state: StateDeclaration) => Promise<LazyLoadResult>;\n\n /** Prototypally inherits from [[StateDeclaration.redirectTo]] */\n redirectTo:\n | string\n | (($transition$: Transition) => TargetState)\n | { state: string | StateDeclaration; params: { [key: string]: any } };\n\n /** @internal */\n __stateObjectCache: {\n /** Might be null */\n nameGlob?: Glob;\n };\n\n /**\n * Create a state object to put the private/internal implementation details onto.\n * The object's prototype chain looks like:\n * (Internal State Object) -> (Copy of State.prototype) -> (State Declaration object) -> (State Declaration's prototype...)\n *\n * @param stateDecl the user-supplied State Declaration\n * @returns {StateObject} an internal State object\n */\n static create(stateDecl: _StateDeclaration): StateObject {\n stateDecl = StateObject.isStateClass(stateDecl) ? new stateDecl() : stateDecl;\n\n const state = inherit(inherit(stateDecl, StateObject.prototype)) as StateObject;\n stateDecl.$$state = () => state;\n state.self = stateDecl;\n state.__stateObjectCache = {\n nameGlob: Glob.fromString(state.name), // might return null\n };\n return state;\n }\n\n /** Predicate which returns true if the object is an class with @State() decorator */\n static isStateClass = (stateDecl: _StateDeclaration): stateDecl is Line truncated
|
"import { StateDeclaration, _ViewDeclaration, _StateDeclaration, LazyLoadResult } from './interface';\nimport { defaults, values, find, inherit } from '../common/common';\nimport { propEq } from '../common/hof';\nimport { Param } from '../params/param';\nimport { UrlMatcher } from '../url/urlMatcher';\nimport { Resolvable } from '../resolve/resolvable';\nimport { TransitionStateHookFn } from '../transition/interface';\nimport { TargetState } from './targetState';\nimport { Transition } from '../transition/transition';\nimport { Glob } from '../common/glob';\nimport { isObject, isFunction } from '../common/predicates';\n\n/**\n * Internal representation of a UI-Router state.\n *\n * Instances of this class are created when a [[StateDeclaration]] is registered with the [[StateRegistry]].\n *\n * A registered [[StateDeclaration]] is augmented with a getter ([[StateDeclaration.$$state]]) which returns the corresponding [[StateObject]] object.\n *\n * This class prototypally inherits from the corresponding [[StateDeclaration]].\n * Each of its own properties (i.e., `hasOwnProperty`) are built using builders from the [[StateBuilder]].\n */\nexport class StateObject {\n /** The parent [[StateObject]] */\n public parent: StateObject;\n\n /** The name used to register the state */\n public name: string;\n\n /** Prototypally inherits from [[StateDeclaration.abstract]] */\n public abstract: boolean;\n\n /** Prototypally inherits from [[StateDeclaration.resolve]] */\n public resolve: { [key: string]: string | any[] | Function } | any[];\n\n /** A list of [[Resolvable]] objects. The internal representation of [[resolve]]. */\n public resolvables: Resolvable[];\n\n /** Prototypally inherits from [[StateDeclaration.resolvePolicy]] */\n public resolvePolicy: any;\n\n /** A compiled URLMatcher which detects when the state's URL is matched */\n public url: UrlMatcher;\n\n /** The parameters for the state, built from the URL and [[StateDeclaration.params]] */\n public params: { [key: string]: Param };\n\n /**\n * The views for the state.\n * Note: `@uirouter/core` does not register a builder for views.\n * The framework specific code should register a `views` builder.\n */\n public views: { [key: string]: _ViewDeclaration };\n\n /**\n * The original [[StateDeclaration]] used to build this [[StateObject]].\n * Note: `this` object also prototypally inherits from the `self` declaration object.\n */\n public self: StateDeclaration;\n\n /** The nearest parent [[StateObject]] which has a URL */\n public navigable: StateObject;\n\n /** The parent [[StateObject]] objects from this state up to the root */\n public path: StateObject[];\n\n /**\n * Prototypally inherits from [[StateDeclaration.data]]\n * Note: This is the only field on the [[StateDeclaration]] which is mutated.\n * The definition object's `data` field is replaced with a new object\n * which prototypally inherits from the parent state definition's `data` field.\n */\n public data: any;\n\n /**\n * An object containing the parent States' names as keys and\n * true as their values.\n */\n public includes: { [name: string]: boolean };\n\n /** Prototypally inherits from [[StateDeclaration.onExit]] */\n public onExit: TransitionStateHookFn;\n /** Prototypally inherits from [[StateDeclaration.onRetain]] */\n public onRetain: TransitionStateHookFn;\n /** Prototypally inherits from [[StateDeclaration.onEnter]] */\n public onEnter: TransitionStateHookFn;\n\n /** Prototypally inherits from [[StateDeclaration.lazyLoad]] */\n public lazyLoad: (transition: Transition, state: StateDeclaration) => Promise<LazyLoadResult>;\n\n /** Prototypally inherits from [[StateDeclaration.redirectTo]] */\n redirectTo:\n | string\n | (($transition$: Transition) => TargetState)\n | { state: string | StateDeclaration; params: { [key: string]: any } };\n\n /** @internal */\n __stateObjectCache: {\n /** Might be null */\n nameGlob?: Glob;\n };\n\n /**\n * Create a state object to put the private/internal implementation details onto.\n * The object's prototype chain looks like:\n * (Internal State Object) -> (Copy of State.prototype) -> (State Declaration object) -> (State Declaration's prototype...)\n *\n * @param stateDecl the user-supplied State Declaration\n * @returns {StateObject} an internal State object\n */\n static create(stateDecl: _StateDeclaration): StateObject {\n stateDecl = StateObject.isStateClass(stateDecl) ? new stateDecl() : stateDecl;\n\n const state = inherit(inherit(stateDecl, StateObject.prototype)) as StateObject;\n stateDecl.$$state = () => state;\n state.self = stateDecl;\n state.__stateObjectCache = {\n nameGlob: Glob.fromString(state.name), // might return null\n };\n return state;\n }\n\n /** Predicate which returns true if the object is an class with @State() decorator */\n static isStateClass = (stateDecl: _StateDeclaration): stateDecl is Line truncated
|
||||||
"import { isString } from '../common/predicates';\nimport { StateOrName } from './interface';\nimport { StateObject } from './stateObject';\nimport { values } from '../common/common';\nimport { safeConsole } from '../common/safeConsole';\n\nexport class StateMatcher {\n constructor(private _states: { [key: string]: StateObject }) {}\n\n isRelative(stateName: string) {\n stateName = stateName || '';\n return stateName.indexOf('.') === 0 || stateName.indexOf('^') === 0;\n }\n\n find(stateOrName: StateOrName, base?: StateOrName, matchGlob = true): StateObject {\n if (!stateOrName && stateOrName !== '') return undefined;\n const isStr = isString(stateOrName);\n let name: string = isStr ? stateOrName : (<any>stateOrName).name;\n\n if (this.isRelative(name)) name = this.resolvePath(name, base);\n const state = this._states[name];\n\n if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n return state;\n } else if (isStr && matchGlob) {\n const _states = values(this._states);\n const matches = _states.filter(\n (_state) => _state.__stateObjectCache.nameGlob && _state.__stateObjectCache.nameGlob.matches(name)\n );\n\n if (matches.length > 1) {\n safeConsole.error(\n `stateMatcher.find: Found multiple matches for ${name} using glob: `,\n matches.map((match) => match.name)\n );\n }\n return matches[0];\n }\n return undefined;\n }\n\n resolvePath(name: string, base: StateOrName) {\n if (!base) throw new Error(`No reference point given for path '${name}'`);\n\n const baseState: StateObject = this.find(base);\n\n const splitName = name.split('.');\n const pathLength = splitName.length;\n let i = 0,\n current = baseState;\n\n for (; i < pathLength; i++) {\n if (splitName[i] === '' && i === 0) {\n current = baseState;\n continue;\n }\n if (splitName[i] === '^') {\n if (!current.parent) throw new Error(`Path '${name}' not valid for state '${baseState.name}'`);\n current = current.parent;\n continue;\n }\n break;\n }\n const relName = splitName.slice(i).join('.');\n return current.name + (current.name && relName ? '.' : '') + relName;\n }\n}\n",
|
"import { isString } from '../common/predicates';\nimport { StateOrName } from './interface';\nimport { StateObject } from './stateObject';\nimport { values } from '../common/common';\nimport { safeConsole } from '../common/safeConsole';\n\nexport class StateMatcher {\n constructor(private _states: { [key: string]: StateObject }) {}\n\n isRelative(stateName: string) {\n stateName = stateName || '';\n return stateName.indexOf('.') === 0 || stateName.indexOf('^') === 0;\n }\n\n find(stateOrName: StateOrName, base?: StateOrName, matchGlob = true): StateObject {\n if (!stateOrName && stateOrName !== '') return undefined;\n const isStr = isString(stateOrName);\n let name: string = isStr ? stateOrName : (<any>stateOrName).name;\n\n if (this.isRelative(name)) name = this.resolvePath(name, base);\n const state = this._states[name];\n\n if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n return state;\n } else if (isStr && matchGlob) {\n const _states = values(this._states);\n const matches = _states.filter(\n (_state) => _state.__stateObjectCache.nameGlob && _state.__stateObjectCache.nameGlob.matches(name)\n );\n\n if (matches.length > 1) {\n safeConsole.error(\n `stateMatcher.find: Found multiple matches for ${name} using glob: `,\n matches.map((match) => match.name)\n );\n }\n return matches[0];\n }\n return undefined;\n }\n\n resolvePath(name: string, base: StateOrName) {\n if (!base) throw new Error(`No reference point given for path '${name}'`);\n\n const baseState: StateObject = this.find(base);\n\n const splitName = name.split('.');\n const pathLength = splitName.length;\n let i = 0,\n current = baseState;\n\n for (; i < pathLength; i++) {\n if (splitName[i] === '' && i === 0) {\n current = baseState;\n continue;\n }\n if (splitName[i] === '^') {\n if (!current.parent) throw new Error(`Path '${name}' not valid for state '${baseState.name}'`);\n current = current.parent;\n continue;\n }\n break;\n }\n const relName = splitName.slice(i).join('.');\n return current.name + (current.name && relName ? '.' : '') + relName;\n }\n}\n",
|
||||||
"import { inArray, isString, prop } from '../common';\nimport { _StateDeclaration } from './interface';\nimport { StateObject } from './stateObject';\nimport { StateBuilder } from './stateBuilder';\nimport { StateRegistryListener } from './stateRegistry';\nimport { Disposable } from '../interface';\nimport { UIRouter } from '../router';\n\nexport class StateQueueManager implements Disposable {\n queue: StateObject[] = [];\n\n constructor(\n private router: UIRouter,\n public states: { [key: string]: StateObject },\n public builder: StateBuilder,\n public listeners: StateRegistryListener[]\n ) {}\n\n dispose() {\n this.queue = [];\n }\n\n register(stateDecl: _StateDeclaration) {\n const queue = this.queue;\n const state = StateObject.create(stateDecl);\n const name = state.name;\n\n if (!isString(name)) throw new Error('State must have a valid name');\n if (this.states.hasOwnProperty(name) || inArray(queue.map(prop('name')), name))\n throw new Error(`State '${name}' is already defined`);\n\n queue.push(state);\n this.flush();\n\n return state;\n }\n\n flush() {\n const { queue, states, builder } = this;\n const registered: StateObject[] = [], // states that got registered\n orphans: StateObject[] = [], // states that don't yet have a parent registered\n previousQueueLength = {}; // keep track of how long the queue when an orphan was first encountered\n const getState = (name) => this.states.hasOwnProperty(name) && this.states[name];\n const notifyListeners = () => {\n if (registered.length) {\n this.listeners.forEach((listener) =>\n listener(\n 'registered',\n registered.map((s) => s.self)\n )\n );\n }\n };\n\n while (queue.length > 0) {\n const state: StateObject = queue.shift();\n const name = state.name;\n const result: StateObject = builder.build(state);\n const orphanIdx: number = orphans.indexOf(state);\n\n if (result) {\n const existingState = getState(name);\n if (existingState && existingState.name === name) {\n throw new Error(`State '${name}' is already defined`);\n }\n\n const existingFutureState = getState(name + '.**');\n if (existingFutureState) {\n // Remove future state of the same name\n this.router.stateRegistry.deregister(existingFutureState);\n }\n\n states[name] = state;\n this.attachRoute(state);\n if (orphanIdx >= 0) orphans.splice(orphanIdx, 1);\n registered.push(state);\n continue;\n }\n\n const prev = previousQueueLength[name];\n previousQueueLength[name] = queue.length;\n if (orphanIdx >= 0 && prev === queue.length) {\n // Wait until two consecutive iterations where no additional states were dequeued successfully.\n // throw new Error(`Cannot register orphaned state '${name}'`);\n queue.push(state);\n notifyListeners();\n return states;\n } else if (orphanIdx < 0) {\n orphans.push(state);\n }\n\n queue.push(state);\n }\n\n notifyListeners();\n return states;\n }\n\n attachRoute(state: StateObject) {\n if (state.abstract || !state.url) return;\n const rulesApi = this.router.urlService.rules;\n rulesApi.rule(rulesApi.urlRuleFactory.create(state));\n }\n}\n",
|
"import { inArray, isString, prop } from '../common';\nimport { _StateDeclaration } from './interface';\nimport { StateObject } from './stateObject';\nimport { StateBuilder } from './stateBuilder';\nimport { StateRegistryListener } from './stateRegistry';\nimport { Disposable } from '../interface';\nimport { UIRouter } from '../router';\n\nexport class StateQueueManager implements Disposable {\n queue: StateObject[] = [];\n\n constructor(\n private router: UIRouter,\n public states: { [key: string]: StateObject },\n public builder: StateBuilder,\n public listeners: StateRegistryListener[]\n ) {}\n\n dispose() {\n this.queue = [];\n }\n\n register(stateDecl: _StateDeclaration) {\n const queue = this.queue;\n const state = StateObject.create(stateDecl);\n const name = state.name;\n\n if (!isString(name)) throw new Error('State must have a valid name');\n if (this.states.hasOwnProperty(name) || inArray(queue.map(prop('name')), name))\n throw new Error(`State '${name}' is already defined`);\n\n queue.push(state);\n this.flush();\n\n return state;\n }\n\n flush() {\n const { queue, states, builder } = this;\n const registered: StateObject[] = [], // states that got registered\n orphans: StateObject[] = [], // states that don't yet have a parent registered\n previousQueueLength = {}; // keep track of how long the queue when an orphan was first encountered\n const getState = (name) => this.states.hasOwnProperty(name) && this.states[name];\n const notifyListeners = () => {\n if (registered.length) {\n this.listeners.forEach((listener) =>\n listener(\n 'registered',\n registered.map((s) => s.self)\n )\n );\n }\n };\n\n while (queue.length > 0) {\n const state: StateObject = queue.shift();\n const name = state.name;\n const result: StateObject = builder.build(state);\n const orphanIdx: number = orphans.indexOf(state);\n\n if (result) {\n const existingState = getState(name);\n if (existingState && existingState.name === name) {\n throw new Error(`State '${name}' is already defined`);\n }\n\n const existingFutureState = getState(name + '.**');\n if (existingFutureState) {\n // Remove future state of the same name\n this.router.stateRegistry.deregister(existingFutureState);\n }\n\n states[name] = state;\n this.attachRoute(state);\n if (orphanIdx >= 0) orphans.splice(orphanIdx, 1);\n registered.push(state);\n continue;\n }\n\n const prev = previousQueueLength[name];\n previousQueueLength[name] = queue.length;\n if (orphanIdx >= 0 && prev === queue.length) {\n // Wait until two consecutive iterations where no additional states were dequeued successfully.\n // throw new Error(`Cannot register orphaned state '${name}'`);\n queue.push(state);\n notifyListeners();\n return states;\n } else if (orphanIdx < 0) {\n orphans.push(state);\n }\n\n queue.push(state);\n }\n\n notifyListeners();\n return states;\n }\n\n attachRoute(state: StateObject) {\n if (state.abstract || !state.url) return;\n const rulesApi = this.router.urlService.rules;\n rulesApi.rule(rulesApi.urlRuleFactory.create(state));\n }\n}\n",
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
"import { isString, isFunction, Glob, extend, removeFrom, tail, values, identity, mapObj } from '../common';\nimport { PathNode } from '../path/pathNode';\nimport {\n TransitionStateHookFn,\n TransitionHookFn,\n TransitionHookPhase, // has or is using\n TransitionHookScope,\n IHookRegistry,\n PathType,\n} from './interface';\n\nimport {\n HookRegOptions,\n HookMatchCriteria,\n TreeChanges,\n HookMatchCriterion,\n IMatchingNodes,\n HookFn,\n} from './interface';\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { TransitionEventType } from './transitionEventType';\nimport { TransitionService } from './transitionService';\n\n/**\n * Determines if the given state matches the matchCriteria\n *\n * @internal\n *\n * @param state a State Object to test against\n * @param criterion\n * - If a string, matchState uses the string as a glob-matcher against the state name\n * - If an array (of strings), matchState uses each string in the array as a glob-matchers against the state name\n * and returns a positive match if any of the globs match.\n * - If a function, matchState calls the function with the state and returns true if the function's result is truthy.\n * @returns {boolean}\n */\nexport function matchState(state: StateObject, criterion: HookMatchCriterion, transition: Transition) {\n const toMatch = isString(criterion) ? [criterion] : criterion;\n\n function matchGlobs(_state: StateObject) {\n const globStrings = <string[]>toMatch;\n for (let i = 0; i < globStrings.length; i++) {\n const glob = new Glob(globStrings[i]);\n\n if ((glob && glob.matches(_state.name)) || (!glob && globStrings[i] === _state.name)) {\n return true;\n }\n }\n return false;\n }\n\n const matchFn = <any>(isFunction(toMatch) ? toMatch : matchGlobs);\n return !!matchFn(state, transition);\n}\n\n/**\n * The registration data for a registered transition hook\n */\nexport class RegisteredHook {\n priority: number;\n bind: any;\n invokeCount = 0;\n invokeLimit: number;\n _deregistered = false;\n\n constructor(\n public tranSvc: TransitionService,\n public eventType: TransitionEventType,\n public callback: HookFn,\n public matchCriteria: HookMatchCriteria,\n public removeHookFromRegistry: (hook: RegisteredHook) => void,\n options: HookRegOptions = {} as any\n ) {\n this.priority = options.priority || 0;\n this.bind = options.bind || null;\n this.invokeLimit = options.invokeLimit;\n }\n\n /**\n * Gets the matching [[PathNode]]s\n *\n * Given an array of [[PathNode]]s, and a [[HookMatchCriterion]], returns an array containing\n * the [[PathNode]]s that the criteria matches, or `null` if there were no matching nodes.\n *\n * Returning `null` is significant to distinguish between the default\n * \"match-all criterion value\" of `true` compared to a `() => true` function,\n * when the nodes is an empty array.\n *\n * This is useful to allow a transition match criteria of `entering: true`\n * to still match a transition, even when `entering === []`. Contrast that\n * with `entering: (state) => true` which only matches when a state is actually\n * being entered.\n */\n private _matchingNodes(nodes: PathNode[], criterion: HookMatchCriterion, transition: Transition): PathNode[] {\n if (criterion === true) return nodes;\n const matching = nodes.filter((node) => matchState(node.state, criterion, transition));\n return matching.length ? matching : null;\n }\n\n /**\n * Gets the default match criteria (all `true`)\n *\n * Returns an object which has all the criteria match paths as keys and `true` as values, i.e.:\n *\n * ```js\n * {\n * to: true,\n * from: true,\n * entering: true,\n * exiting: true,\n * retained: true,\n * }\n */\n private _getDefaultMatchCriteria(): HookMatchCriteria {\n return mapObj(this.tranSvc._pluginapi._getPathTypes(), () => true);\n }\n\n /**\n * Gets matching nodes as [[IMatchingNodes]]\n *\n * Create a IMatchingNodes object from the TransitionHookTypes that is roughly equivalent to:\n *\n * ```js\n * let matches: IMatchingNodes = {\n * to: _matchingNodes([tail(treeChanges.to)], mc.to),\n * from: _matchingNodes([tail(treeChanges.from)], mc.from),\n * exiting: _matchingNodes(treeChanges.exiting, mc.exiting),\n * retained: _matchingNodes(treeChanges.retained, mc.retained),\n * entering: _matchingNodes(treeChanges.entering, mc.entering),\n * };\n * ```\n */\n private _getMatchingNodes(treeChanges: TreeChanges, transition: Transition): IMatchingNodes {\n const criteria = extend(this._getDefaultMatchCriteria(), this.matchCriteria);\n const paths: PathType[] = values(this.tranSvc._pluginapi._getPathTypes());\n\n return paths.reduce((mn: IMatchingNodes, pathtype: PathType) => {\n // STATE scope criteria matches against every node iLine truncated
|
"import { isString, isFunction, Glob, extend, removeFrom, tail, values, identity, mapObj } from '../common';\nimport { PathNode } from '../path/pathNode';\nimport {\n TransitionStateHookFn,\n TransitionHookFn,\n TransitionHookPhase, // has or is using\n TransitionHookScope,\n IHookRegistry,\n PathType,\n} from './interface';\n\nimport {\n HookRegOptions,\n HookMatchCriteria,\n TreeChanges,\n HookMatchCriterion,\n IMatchingNodes,\n HookFn,\n} from './interface';\nimport { Transition } from './transition';\nimport { StateObject } from '../state/stateObject';\nimport { TransitionEventType } from './transitionEventType';\nimport { TransitionService } from './transitionService';\n\n/**\n * Determines if the given state matches the matchCriteria\n *\n * @internal\n *\n * @param state a State Object to test against\n * @param criterion\n * - If a string, matchState uses the string as a glob-matcher against the state name\n * - If an array (of strings), matchState uses each string in the array as a glob-matchers against the state name\n * and returns a positive match if any of the globs match.\n * - If a function, matchState calls the function with the state and returns true if the function's result is truthy.\n * @returns {boolean}\n */\nexport function matchState(state: StateObject, criterion: HookMatchCriterion, transition: Transition) {\n const toMatch = isString(criterion) ? [criterion] : criterion;\n\n function matchGlobs(_state: StateObject) {\n const globStrings = <string[]>toMatch;\n for (let i = 0; i < globStrings.length; i++) {\n const glob = new Glob(globStrings[i]);\n\n if ((glob && glob.matches(_state.name)) || (!glob && globStrings[i] === _state.name)) {\n return true;\n }\n }\n return false;\n }\n\n const matchFn = <any>(isFunction(toMatch) ? toMatch : matchGlobs);\n return !!matchFn(state, transition);\n}\n\n/**\n * The registration data for a registered transition hook\n */\nexport class RegisteredHook {\n priority: number;\n bind: any;\n invokeCount = 0;\n invokeLimit: number;\n _deregistered = false;\n\n constructor(\n public tranSvc: TransitionService,\n public eventType: TransitionEventType,\n public callback: HookFn,\n public matchCriteria: HookMatchCriteria,\n public removeHookFromRegistry: (hook: RegisteredHook) => void,\n options: HookRegOptions = {} as any\n ) {\n this.priority = options.priority || 0;\n this.bind = options.bind || null;\n this.invokeLimit = options.invokeLimit;\n }\n\n /**\n * Gets the matching [[PathNode]]s\n *\n * Given an array of [[PathNode]]s, and a [[HookMatchCriterion]], returns an array containing\n * the [[PathNode]]s that the criteria matches, or `null` if there were no matching nodes.\n *\n * Returning `null` is significant to distinguish between the default\n * \"match-all criterion value\" of `true` compared to a `() => true` function,\n * when the nodes is an empty array.\n *\n * This is useful to allow a transition match criteria of `entering: true`\n * to still match a transition, even when `entering === []`. Contrast that\n * with `entering: (state) => true` which only matches when a state is actually\n * being entered.\n */\n private _matchingNodes(nodes: PathNode[], criterion: HookMatchCriterion, transition: Transition): PathNode[] {\n if (criterion === true) return nodes;\n const matching = nodes.filter((node) => matchState(node.state, criterion, transition));\n return matching.length ? matching : null;\n }\n\n /**\n * Gets the default match criteria (all `true`)\n *\n * Returns an object which has all the criteria match paths as keys and `true` as values, i.e.:\n *\n * ```js\n * {\n * to: true,\n * from: true,\n * entering: true,\n * exiting: true,\n * retained: true,\n * }\n */\n private _getDefaultMatchCriteria(): HookMatchCriteria {\n return mapObj(this.tranSvc._pluginapi._getPathTypes(), () => true);\n }\n\n /**\n * Gets matching nodes as [[IMatchingNodes]]\n *\n * Create a IMatchingNodes object from the TransitionHookTypes that is roughly equivalent to:\n *\n * ```js\n * let matches: IMatchingNodes = {\n * to: _matchingNodes([tail(treeChanges.to)], mc.to),\n * from: _matchingNodes([tail(treeChanges.from)], mc.from),\n * exiting: _matchingNodes(treeChanges.exiting, mc.exiting),\n * retained: _matchingNodes(treeChanges.retained, mc.retained),\n * entering: _matchingNodes(treeChanges.entering, mc.entering),\n * };\n * ```\n */\n private _getMatchingNodes(treeChanges: TreeChanges, transition: Transition): IMatchingNodes {\n const criteria = extend(this._getDefaultMatchCriteria(), this.matchCriteria);\n const paths: PathType[] = values(this.tranSvc._pluginapi._getPathTypes());\n\n return paths.reduce((mn: IMatchingNodes, pathtype: PathType) => {\n // STATE scope criteria matches against every node iLine truncated
|
||||||
"import { extend, tail, assertPredicate, unnestR, identity } from '../common/common';\nimport { isArray } from '../common/predicates';\n\nimport {\n TransitionOptions,\n TransitionHookOptions,\n IHookRegistry,\n TreeChanges,\n IMatchingNodes,\n TransitionHookPhase,\n TransitionHookScope,\n} from './interface';\n\nimport { Transition } from './transition';\nimport { TransitionHook } from './transitionHook';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TransitionService } from './transitionService';\nimport { TransitionEventType } from './transitionEventType';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * This class returns applicable TransitionHooks for a specific Transition instance.\n *\n * Hooks ([[RegisteredHook]]) may be registered globally, e.g., $transitions.onEnter(...), or locally, e.g.\n * myTransition.onEnter(...). The HookBuilder finds matching RegisteredHooks (where the match criteria is\n * determined by the type of hook)\n *\n * The HookBuilder also converts RegisteredHooks objects to TransitionHook objects, which are used to run a Transition.\n *\n * The HookBuilder constructor is given the $transitions service and a Transition instance. Thus, a HookBuilder\n * instance may only be used for one specific Transition object. (side note: the _treeChanges accessor is private\n * in the Transition class, so we must also provide the Transition's _treeChanges)\n */\nexport class HookBuilder {\n constructor(private transition: Transition) {}\n\n buildHooksForPhase(phase: TransitionHookPhase): TransitionHook[] {\n const $transitions = this.transition.router.transitionService;\n return $transitions._pluginapi\n ._getEvents(phase)\n .map((type) => this.buildHooks(type))\n .reduce(unnestR, [])\n .filter(identity);\n }\n\n /**\n * Returns an array of newly built TransitionHook objects.\n *\n * - Finds all RegisteredHooks registered for the given `hookType` which matched the transition's [[TreeChanges]].\n * - Finds [[PathNode]] (or `PathNode[]`) to use as the TransitionHook context(s)\n * - For each of the [[PathNode]]s, creates a TransitionHook\n *\n * @param hookType the type of the hook registration function, e.g., 'onEnter', 'onFinish'.\n */\n buildHooks(hookType: TransitionEventType): TransitionHook[] {\n const transition = this.transition;\n const treeChanges = transition.treeChanges();\n\n // Find all the matching registered hooks for a given hook type\n const matchingHooks = this.getMatchingHooks(hookType, treeChanges, transition);\n if (!matchingHooks) return [];\n\n const baseHookOptions = <TransitionHookOptions>{\n transition: transition,\n current: transition.options().current,\n };\n\n const makeTransitionHooks = (hook: RegisteredHook) => {\n // Fetch the Nodes that caused this hook to match.\n const matches: IMatchingNodes = hook.matches(treeChanges, transition);\n // Select the PathNode[] that will be used as TransitionHook context objects\n const matchingNodes: PathNode[] = matches[hookType.criteriaMatchPath.name];\n\n // Return an array of HookTuples\n return matchingNodes.map((node) => {\n const _options = extend(\n {\n bind: hook.bind,\n traceData: { hookType: hookType.name, context: node },\n },\n baseHookOptions\n );\n\n const state = hookType.criteriaMatchPath.scope === TransitionHookScope.STATE ? node.state.self : null;\n const transitionHook = new TransitionHook(transition, state, hook, _options);\n return <HookTuple>{ hook, node, transitionHook };\n });\n };\n\n return matchingHooks\n .map(makeTransitionHooks)\n .reduce(unnestR, [])\n .sort(tupleSort(hookType.reverseSort))\n .map((tuple) => tuple.transitionHook);\n }\n\n /**\n * Finds all RegisteredHooks from:\n * - The Transition object instance hook registry\n * - The TransitionService ($transitions) global hook registry\n *\n * which matched:\n * - the eventType\n * - the matchCriteria (to, from, exiting, retained, entering)\n *\n * @returns an array of matched [[RegisteredHook]]s\n */\n public getMatchingHooks(\n hookType: TransitionEventType,\n treeChanges: TreeChanges,\n transition: Transition\n ): RegisteredHook[] {\n const isCreate = hookType.hookPhase === TransitionHookPhase.CREATE;\n\n // Instance and Global hook registries\n const $transitions = this.transition.router.transitionService;\n const registries = isCreate ? [$transitions] : [this.transition, $transitions];\n\n return registries\n .map((reg: IHookRegistry) => reg.getHooks(hookType.name)) // Get named hooks from registries\n .filter(assertPredicate(isArray, `broken event named: ${hookType.name}`)) // Sanity check\n .reduce(unnestR, []) // Un-nest RegisteredHook[][] to RegisteredHook[] arLine truncated
|
"import { extend, tail, assertPredicate, unnestR, identity } from '../common/common';\nimport { isArray } from '../common/predicates';\n\nimport {\n TransitionOptions,\n TransitionHookOptions,\n IHookRegistry,\n TreeChanges,\n IMatchingNodes,\n TransitionHookPhase,\n TransitionHookScope,\n} from './interface';\n\nimport { Transition } from './transition';\nimport { TransitionHook } from './transitionHook';\nimport { StateObject } from '../state/stateObject';\nimport { PathNode } from '../path/pathNode';\nimport { TransitionService } from './transitionService';\nimport { TransitionEventType } from './transitionEventType';\nimport { RegisteredHook } from './hookRegistry';\n\n/**\n * This class returns applicable TransitionHooks for a specific Transition instance.\n *\n * Hooks ([[RegisteredHook]]) may be registered globally, e.g., $transitions.onEnter(...), or locally, e.g.\n * myTransition.onEnter(...). The HookBuilder finds matching RegisteredHooks (where the match criteria is\n * determined by the type of hook)\n *\n * The HookBuilder also converts RegisteredHooks objects to TransitionHook objects, which are used to run a Transition.\n *\n * The HookBuilder constructor is given the $transitions service and a Transition instance. Thus, a HookBuilder\n * instance may only be used for one specific Transition object. (side note: the _treeChanges accessor is private\n * in the Transition class, so we must also provide the Transition's _treeChanges)\n */\nexport class HookBuilder {\n constructor(private transition: Transition) {}\n\n buildHooksForPhase(phase: TransitionHookPhase): TransitionHook[] {\n const $transitions = this.transition.router.transitionService;\n return $transitions._pluginapi\n ._getEvents(phase)\n .map((type) => this.buildHooks(type))\n .reduce(unnestR, [])\n .filter(identity);\n }\n\n /**\n * Returns an array of newly built TransitionHook objects.\n *\n * - Finds all RegisteredHooks registered for the given `hookType` which matched the transition's [[TreeChanges]].\n * - Finds [[PathNode]] (or `PathNode[]`) to use as the TransitionHook context(s)\n * - For each of the [[PathNode]]s, creates a TransitionHook\n *\n * @param hookType the type of the hook registration function, e.g., 'onEnter', 'onFinish'.\n */\n buildHooks(hookType: TransitionEventType): TransitionHook[] {\n const transition = this.transition;\n const treeChanges = transition.treeChanges();\n\n // Find all the matching registered hooks for a given hook type\n const matchingHooks = this.getMatchingHooks(hookType, treeChanges, transition);\n if (!matchingHooks) return [];\n\n const baseHookOptions = <TransitionHookOptions>{\n transition: transition,\n current: transition.options().current,\n };\n\n const makeTransitionHooks = (hook: RegisteredHook) => {\n // Fetch the Nodes that caused this hook to match.\n const matches: IMatchingNodes = hook.matches(treeChanges, transition);\n // Select the PathNode[] that will be used as TransitionHook context objects\n const matchingNodes: PathNode[] = matches[hookType.criteriaMatchPath.name];\n\n // Return an array of HookTuples\n return matchingNodes.map((node) => {\n const _options = extend(\n {\n bind: hook.bind,\n traceData: { hookType: hookType.name, context: node },\n },\n baseHookOptions\n );\n\n const state = hookType.criteriaMatchPath.scope === TransitionHookScope.STATE ? node.state.self : null;\n const transitionHook = new TransitionHook(transition, state, hook, _options);\n return <HookTuple>{ hook, node, transitionHook };\n });\n };\n\n return matchingHooks\n .map(makeTransitionHooks)\n .reduce(unnestR, [])\n .sort(tupleSort(hookType.reverseSort))\n .map((tuple) => tuple.transitionHook);\n }\n\n /**\n * Finds all RegisteredHooks from:\n * - The Transition object instance hook registry\n * - The TransitionService ($transitions) global hook registry\n *\n * which matched:\n * - the eventType\n * - the matchCriteria (to, from, exiting, retained, entering)\n *\n * @returns an array of matched [[RegisteredHook]]s\n */\n public getMatchingHooks(\n hookType: TransitionEventType,\n treeChanges: TreeChanges,\n transition: Transition\n ): RegisteredHook[] {\n const isCreate = hookType.hookPhase === TransitionHookPhase.CREATE;\n\n // Instance and Global hook registries\n const $transitions = this.transition.router.transitionService;\n const registries = isCreate ? [$transitions] : [this.transition, $transitions];\n\n return registries\n .map((reg: IHookRegistry) => reg.getHooks(hookType.name)) // Get named hooks from registries\n .filter(assertPredicate(isArray, `broken event named: ${hookType.name}`)) // Sanity check\n .reduce(unnestR, []) // Un-nest RegisteredHook[][] to RegisteredHook[] arLine truncated
|
||||||
"import { trace } from '../common/trace';\nimport { services } from '../common/coreservices';\nimport { stringify } from '../common/strings';\nimport { map, find, extend, mergeR, tail, omit, arrayTuples, unnestR, identity, anyTrueR } from '../common/common';\nimport { isObject, isUndefined } from '../common/predicates';\nimport { prop, propEq, val, not, is } from '../common/hof';\nimport { StateDeclaration, StateOrName } from '../state/interface';\nimport {\n TransitionOptions,\n TreeChanges,\n IHookRegistry,\n TransitionHookPhase,\n RegisteredHooks,\n HookRegOptions,\n HookMatchCriteria,\n TransitionStateHookFn,\n TransitionHookFn,\n} from './interface'; // has or is using\nimport { TransitionHook } from './transitionHook';\nimport { matchState, makeEvent, RegisteredHook } from './hookRegistry';\nimport { HookBuilder } from './hookBuilder';\nimport { PathNode } from '../path/pathNode';\nimport { PathUtils } from '../path/pathUtils';\nimport { StateObject } from '../state/stateObject';\nimport { TargetState } from '../state/targetState';\nimport { Param } from '../params/param';\nimport { Resolvable } from '../resolve/resolvable';\nimport { ViewConfig } from '../view/interface';\nimport { ResolveContext } from '../resolve/resolveContext';\nimport { UIRouter } from '../router';\nimport { UIInjector } from '../interface';\nimport { RawParams } from '../params/interface';\nimport { ResolvableLiteral } from '../resolve/interface';\nimport { Rejection } from './rejectFactory';\nimport { applyPairs, flattenR, uniqR } from '../common';\n\n/** @internal */\nconst stateSelf: (_state: StateObject) => StateDeclaration = prop('self');\n\n/**\n * Represents a transition between two states.\n *\n * When navigating to a state, we are transitioning **from** the current state **to** the new state.\n *\n * This object contains all contextual information about the to/from states, parameters, resolves.\n * It has information about all states being entered and exited as a result of the transition.\n */\nexport class Transition implements IHookRegistry {\n /** @internal */\n static diToken = Transition;\n\n /**\n * A unique identifier for the transition.\n *\n * This is an auto incrementing integer, starting from `0`.\n */\n $id: number;\n\n /**\n * A reference to the [[UIRouter]] instance\n *\n * This reference can be used to access the router services, such as the [[StateService]]\n */\n router: UIRouter;\n\n /** @internal */\n private _deferred = services.$q.defer();\n /**\n * This promise is resolved or rejected based on the outcome of the Transition.\n *\n * When the transition is successful, the promise is resolved\n * When the transition is unsuccessful, the promise is rejected with the [[Rejection]] or javascript error\n */\n promise: Promise<any> = this._deferred.promise;\n /**\n * A boolean which indicates if the transition was successful\n *\n * After a successful transition, this value is set to true.\n * After an unsuccessful transition, this value is set to false.\n *\n * The value will be undefined if the transition is not complete\n */\n success: boolean;\n /** @internal */\n _aborted: boolean;\n /** @internal */\n private _error: Rejection;\n\n /** @internal Holds the hook registration functions such as those passed to Transition.onStart() */\n _registeredHooks: RegisteredHooks = {};\n\n /** @internal */\n private _options: TransitionOptions;\n /** @internal */\n private _treeChanges: TreeChanges;\n /** @internal */\n private _targetState: TargetState;\n /** @internal */\n private _hookBuilder = new HookBuilder(this);\n\n /** @internal */\n onBefore(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onStart(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onExit(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onRetain(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onEnter(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onFinish(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onSuccess(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onError(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n\n /** @internal\n * Creates the transition-level hook registration functions\n * (which can then be used to register hooks)\n */\n private creatLine truncated
|
"import { trace } from '../common/trace';\nimport { services } from '../common/coreservices';\nimport { stringify } from '../common/strings';\nimport { map, find, extend, mergeR, tail, omit, arrayTuples, unnestR, identity, anyTrueR } from '../common/common';\nimport { isObject, isUndefined } from '../common/predicates';\nimport { prop, propEq, val, not, is } from '../common/hof';\nimport { StateDeclaration, StateOrName } from '../state/interface';\nimport {\n TransitionOptions,\n TreeChanges,\n IHookRegistry,\n TransitionHookPhase,\n RegisteredHooks,\n HookRegOptions,\n HookMatchCriteria,\n TransitionStateHookFn,\n TransitionHookFn,\n} from './interface'; // has or is using\nimport { TransitionHook } from './transitionHook';\nimport { matchState, makeEvent, RegisteredHook } from './hookRegistry';\nimport { HookBuilder } from './hookBuilder';\nimport { PathNode } from '../path/pathNode';\nimport { PathUtils } from '../path/pathUtils';\nimport { StateObject } from '../state/stateObject';\nimport { TargetState } from '../state/targetState';\nimport { Param } from '../params/param';\nimport { Resolvable } from '../resolve/resolvable';\nimport { ViewConfig } from '../view/interface';\nimport { ResolveContext } from '../resolve/resolveContext';\nimport { UIRouter } from '../router';\nimport { UIInjector } from '../interface';\nimport { RawParams } from '../params/interface';\nimport { ResolvableLiteral } from '../resolve/interface';\nimport { Rejection } from './rejectFactory';\nimport { applyPairs, flattenR, uniqR } from '../common';\n\n/** @internal */\nconst stateSelf: (_state: StateObject) => StateDeclaration = prop('self');\n\n/**\n * Represents a transition between two states.\n *\n * When navigating to a state, we are transitioning **from** the current state **to** the new state.\n *\n * This object contains all contextual information about the to/from states, parameters, resolves.\n * It has information about all states being entered and exited as a result of the transition.\n */\nexport class Transition implements IHookRegistry {\n /** @internal */\n static diToken = Transition;\n\n /**\n * A unique identifier for the transition.\n *\n * This is an auto incrementing integer, starting from `0`.\n */\n $id: number;\n\n /**\n * A reference to the [[UIRouter]] instance\n *\n * This reference can be used to access the router services, such as the [[StateService]]\n */\n router: UIRouter;\n\n /** @internal */\n private _deferred = services.$q.defer();\n /**\n * This promise is resolved or rejected based on the outcome of the Transition.\n *\n * When the transition is successful, the promise is resolved\n * When the transition is unsuccessful, the promise is rejected with the [[Rejection]] or javascript error\n */\n promise: Promise<any> = this._deferred.promise;\n /**\n * A boolean which indicates if the transition was successful\n *\n * After a successful transition, this value is set to true.\n * After an unsuccessful transition, this value is set to false.\n *\n * The value will be undefined if the transition is not complete\n */\n success: boolean;\n /** @internal */\n _aborted: boolean;\n /** @internal */\n private _error: Rejection;\n\n /** @internal Holds the hook registration functions such as those passed to Transition.onStart() */\n _registeredHooks: RegisteredHooks = {};\n\n /** @internal */\n private _options: TransitionOptions;\n /** @internal */\n private _treeChanges: TreeChanges;\n /** @internal */\n private _targetState: TargetState;\n /** @internal */\n private _hookBuilder = new HookBuilder(this);\n\n /** @internal */\n onBefore(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onStart(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onExit(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onRetain(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onEnter(criteria: HookMatchCriteria, callback: TransitionStateHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onFinish(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onSuccess(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n /** @inheritdoc */\n onError(criteria: HookMatchCriteria, callback: TransitionHookFn, options?: HookRegOptions): Function {\n return;\n }\n\n /** @internal\n * Creates the transition-level hook registration functions\n * (which can then be used to register hooks)\n */\n private creatLine truncated
|
||||||
"import { map, inherit, identity, unnest, tail, find, Obj, allTrueR, unnestR, arrayTuples } from '../common/common';\nimport { prop, propEq } from '../common/hof';\nimport { isArray, isString, isDefined } from '../common/predicates';\nimport { Param, DefType } from '../params/param';\nimport { ParamTypes } from '../params/paramTypes';\nimport { RawParams } from '../params/interface';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { joinNeighborsR, splitOnDelim } from '../common/strings';\nimport { ParamType } from '../params';\nimport { defaults } from '../common';\nimport { ParamFactory } from './urlMatcherFactory';\n\nfunction quoteRegExp(str: any, param?: any) {\n let surroundPattern = ['', ''],\n result = str.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, '\\\\$&');\n if (!param) return result;\n\n switch (param.squash) {\n case false:\n surroundPattern = ['(', ')' + (param.isOptional ? '?' : '')];\n break;\n case true:\n result = result.replace(/\\/$/, '');\n surroundPattern = ['(?:/(', ')|/)?'];\n break;\n default:\n surroundPattern = [`(${param.squash}|`, ')?'];\n break;\n }\n return result + surroundPattern[0] + param.type.pattern.source + surroundPattern[1];\n}\n\nconst memoizeTo = (obj: Obj, _prop: string, fn: Function) => (obj[_prop] = obj[_prop] || fn());\n\nconst splitOnSlash = splitOnDelim('/');\n\ninterface UrlMatcherCache {\n segments?: any[];\n weights?: number[];\n path?: UrlMatcher[];\n parent?: UrlMatcher;\n pattern?: RegExp;\n}\n\ninterface MatchDetails {\n id: string;\n regexp: string;\n segment: string;\n type: ParamType;\n}\n\nconst defaultConfig: UrlMatcherCompileConfig = {\n state: { params: {} },\n strict: true,\n caseInsensitive: true,\n decodeParams: true,\n};\n\n/**\n * Matches URLs against patterns.\n *\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL.\n *\n * A URL pattern consists of a path pattern, optionally followed by '?' and a list of search (query)\n * parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by [[UrlMatcher.exec]].\n *\n * - *Path parameters* are defined using curly brace placeholders (`/somepath/{param}`)\n * or colon placeholders (`/somePath/:param`).\n *\n * - *A parameter RegExp* may be defined for a param after a colon\n * (`/somePath/{param:[a-zA-Z0-9]+}`) in a curly brace placeholder.\n * The regexp must match for the url to be matched.\n * Should the regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Note: a RegExp parameter will encode its value using either [[ParamTypes.path]] or [[ParamTypes.query]].\n *\n * - *Custom parameter types* may also be specified after a colon (`/somePath/{param:int}`) in curly brace parameters.\n * See [[UrlMatcherFactory.type]] for more information.\n *\n * - *Catch-all parameters* are defined using an asterisk placeholder (`/somepath/*catchallparam`).\n * A catch-all * parameter value will contain the remainder of the URL.\n *\n * ---\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters).\n * A path parameter matches any number of characters other than '/'. For catch-all\n * placeholders the path parameter matches any number of characters.\n *\n * Examples:\n *\n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n * trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n * parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n * path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n * in the built-in `date` ParamType matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n */\nexport class UrlMatcher {\n /** @internal */\n static nameValidator: RegExp = /^\\w+([-.]+\\w+)*(?:\\[\\])?$/;\n\n /** @internal */\n private _cache: UrlMatcherCache = { path: [this] };\n /** @internal */\n private _children: UrlMatcher[] = [];\n /** @internal */\n private _params: Param[] = [];\n /** @internal */\n private _segments: string[]Line truncated
|
"import { map, inherit, identity, unnest, tail, find, Obj, allTrueR, unnestR, arrayTuples } from '../common/common';\nimport { prop, propEq } from '../common/hof';\nimport { isArray, isString, isDefined } from '../common/predicates';\nimport { Param, DefType } from '../params/param';\nimport { ParamTypes } from '../params/paramTypes';\nimport { RawParams } from '../params/interface';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { joinNeighborsR, splitOnDelim } from '../common/strings';\nimport { ParamType } from '../params';\nimport { defaults } from '../common';\nimport { ParamFactory } from './urlMatcherFactory';\n\nfunction quoteRegExp(str: any, param?: any) {\n let surroundPattern = ['', ''],\n result = str.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, '\\\\$&');\n if (!param) return result;\n\n switch (param.squash) {\n case false:\n surroundPattern = ['(', ')' + (param.isOptional ? '?' : '')];\n break;\n case true:\n result = result.replace(/\\/$/, '');\n surroundPattern = ['(?:/(', ')|/)?'];\n break;\n default:\n surroundPattern = [`(${param.squash}|`, ')?'];\n break;\n }\n return result + surroundPattern[0] + param.type.pattern.source + surroundPattern[1];\n}\n\nconst memoizeTo = (obj: Obj, _prop: string, fn: Function) => (obj[_prop] = obj[_prop] || fn());\n\nconst splitOnSlash = splitOnDelim('/');\n\ninterface UrlMatcherCache {\n segments?: any[];\n weights?: number[];\n path?: UrlMatcher[];\n parent?: UrlMatcher;\n pattern?: RegExp;\n}\n\ninterface MatchDetails {\n id: string;\n regexp: string;\n segment: string;\n type: ParamType;\n}\n\nconst defaultConfig: UrlMatcherCompileConfig = {\n state: { params: {} },\n strict: true,\n caseInsensitive: true,\n decodeParams: true,\n};\n\n/**\n * Matches URLs against patterns.\n *\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL.\n *\n * A URL pattern consists of a path pattern, optionally followed by '?' and a list of search (query)\n * parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by [[UrlMatcher.exec]].\n *\n * - *Path parameters* are defined using curly brace placeholders (`/somepath/{param}`)\n * or colon placeholders (`/somePath/:param`).\n *\n * - *A parameter RegExp* may be defined for a param after a colon\n * (`/somePath/{param:[a-zA-Z0-9]+}`) in a curly brace placeholder.\n * The regexp must match for the url to be matched.\n * Should the regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Note: a RegExp parameter will encode its value using either [[ParamTypes.path]] or [[ParamTypes.query]].\n *\n * - *Custom parameter types* may also be specified after a colon (`/somePath/{param:int}`) in curly brace parameters.\n * See [[UrlMatcherFactory.type]] for more information.\n *\n * - *Catch-all parameters* are defined using an asterisk placeholder (`/somepath/*catchallparam`).\n * A catch-all * parameter value will contain the remainder of the URL.\n *\n * ---\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters).\n * A path parameter matches any number of characters other than '/'. For catch-all\n * placeholders the path parameter matches any number of characters.\n *\n * Examples:\n *\n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n * trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n * parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n * path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n * in the built-in `date` ParamType matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n */\nexport class UrlMatcher {\n /** @internal */\n static nameValidator: RegExp = /^\\w+([-.]+\\w+)*(?:\\[\\])?$/;\n\n /** @internal */\n private _cache: UrlMatcherCache = { path: [this] };\n /** @internal */\n private _children: UrlMatcher[] = [];\n /** @internal */\n private _params: Param[] = [];\n /** @internal */\n private _segments: string[]Line truncated
|
||||||
"import { extend, forEach, isDefined, isFunction, isObject } from '../common';\nimport { UrlMatcher } from './urlMatcher';\nimport { DefType, Param, ParamType, ParamTypeDefinition } from '../params';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { StateDeclaration } from '../state';\nimport { UIRouter } from '../router';\n\nexport class ParamFactory {\n fromConfig(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.CONFIG, this.router.urlService.config, state);\n }\n\n fromPath(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.PATH, this.router.urlService.config, state);\n }\n\n fromSearch(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.SEARCH, this.router.urlService.config, state);\n }\n\n constructor(private router: UIRouter) {}\n}\n\n/**\n * Factory for [[UrlMatcher]] instances.\n *\n * The factory is available to ng1 services as\n * `$urlMatcherFactory` or ng1 providers as `$urlMatcherFactoryProvider`.\n */\nexport class UrlMatcherFactory {\n /** Creates a new [[Param]] for a given location (DefType) */\n paramFactory = new ParamFactory(this.router);\n // TODO: Check if removal of this will break anything, then remove these\n UrlMatcher: typeof UrlMatcher = UrlMatcher;\n Param: typeof Param = Param;\n\n // TODO: move implementations to UrlConfig (urlService.config)\n constructor(/** @internal */ private router: UIRouter) {}\n\n /**\n * Creates a [[UrlMatcher]] for the specified pattern.\n *\n * @param pattern The URL pattern.\n * @param config The config object hash.\n * @returns The UrlMatcher.\n */\n compile(pattern: string, config?: UrlMatcherCompileConfig) {\n const urlConfig = this.router.urlService.config;\n // backward-compatible support for config.params -> config.state.params\n const params = config && !config.state && (config as any).params;\n config = params ? { state: { params }, ...config } : config;\n const globalConfig: UrlMatcherCompileConfig = {\n strict: urlConfig._isStrictMode,\n caseInsensitive: urlConfig._isCaseInsensitive,\n decodeParams: urlConfig._decodeParams,\n };\n return new UrlMatcher(pattern, urlConfig.paramTypes, this.paramFactory, extend(globalConfig, config));\n }\n\n /**\n * Returns true if the specified object is a [[UrlMatcher]], or false otherwise.\n *\n * @param object The object to perform the type check against.\n * @returns `true` if the object matches the `UrlMatcher` interface, by\n * implementing all the same methods.\n */\n isMatcher(object: any): boolean {\n // TODO: typeof?\n if (!isObject(object)) return false;\n let result = true;\n\n forEach(UrlMatcher.prototype, (val, name) => {\n if (isFunction(val)) result = result && isDefined(object[name]) && isFunction(object[name]);\n });\n return result;\n }\n\n /** @internal */\n $get() {\n const urlConfig = this.router.urlService.config;\n urlConfig.paramTypes.enqueue = false;\n urlConfig.paramTypes._flushTypeQueue();\n return this;\n }\n\n /** @deprecated use [[UrlConfig.caseInsensitive]] */\n caseInsensitive = (value?: boolean) => this.router.urlService.config.caseInsensitive(value);\n\n /** @deprecated use [[UrlConfig.defaultSquashPolicy]] */\n defaultSquashPolicy = (value?: boolean | string) => this.router.urlService.config.defaultSquashPolicy(value);\n\n /** @deprecated use [[UrlConfig.strictMode]] */\n strictMode = (value?: boolean) => this.router.urlService.config.strictMode(value);\n\n /** @deprecated use [[UrlConfig.type]] */\n type = (name: string, definition?: ParamTypeDefinition, definitionFn?: () => ParamTypeDefinition) => {\n return this.router.urlService.config.type(name, definition, definitionFn) || this;\n };\n}\n",
|
"import { extend, forEach, isDefined, isFunction, isObject } from '../common';\nimport { UrlMatcher } from './urlMatcher';\nimport { DefType, Param, ParamType, ParamTypeDefinition } from '../params';\nimport { UrlMatcherCompileConfig } from './interface';\nimport { StateDeclaration } from '../state';\nimport { UIRouter } from '../router';\n\nexport class ParamFactory {\n fromConfig(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.CONFIG, this.router.urlService.config, state);\n }\n\n fromPath(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.PATH, this.router.urlService.config, state);\n }\n\n fromSearch(id: string, type: ParamType, state: StateDeclaration) {\n return new Param(id, type, DefType.SEARCH, this.router.urlService.config, state);\n }\n\n constructor(private router: UIRouter) {}\n}\n\n/**\n * Factory for [[UrlMatcher]] instances.\n *\n * The factory is available to ng1 services as\n * `$urlMatcherFactory` or ng1 providers as `$urlMatcherFactoryProvider`.\n */\nexport class UrlMatcherFactory {\n /** Creates a new [[Param]] for a given location (DefType) */\n paramFactory = new ParamFactory(this.router);\n // TODO: Check if removal of this will break anything, then remove these\n UrlMatcher: typeof UrlMatcher = UrlMatcher;\n Param: typeof Param = Param;\n\n // TODO: move implementations to UrlConfig (urlService.config)\n constructor(/** @internal */ private router: UIRouter) {}\n\n /**\n * Creates a [[UrlMatcher]] for the specified pattern.\n *\n * @param pattern The URL pattern.\n * @param config The config object hash.\n * @returns The UrlMatcher.\n */\n compile(pattern: string, config?: UrlMatcherCompileConfig) {\n const urlConfig = this.router.urlService.config;\n // backward-compatible support for config.params -> config.state.params\n const params = config && !config.state && (config as any).params;\n config = params ? { state: { params }, ...config } : config;\n const globalConfig: UrlMatcherCompileConfig = {\n strict: urlConfig._isStrictMode,\n caseInsensitive: urlConfig._isCaseInsensitive,\n decodeParams: urlConfig._decodeParams,\n };\n return new UrlMatcher(pattern, urlConfig.paramTypes, this.paramFactory, extend(globalConfig, config));\n }\n\n /**\n * Returns true if the specified object is a [[UrlMatcher]], or false otherwise.\n *\n * @param object The object to perform the type check against.\n * @returns `true` if the object matches the `UrlMatcher` interface, by\n * implementing all the same methods.\n */\n isMatcher(object: any): boolean {\n // TODO: typeof?\n if (!isObject(object)) return false;\n let result = true;\n\n forEach(UrlMatcher.prototype, (val, name) => {\n if (isFunction(val)) result = result && isDefined(object[name]) && isFunction(object[name]);\n });\n return result;\n }\n\n /** @internal */\n $get() {\n const urlConfig = this.router.urlService.config;\n urlConfig.paramTypes.enqueue = false;\n urlConfig.paramTypes._flushTypeQueue();\n return this;\n }\n\n /** @deprecated use [[UrlConfig.caseInsensitive]] */\n caseInsensitive = (value?: boolean) => this.router.urlService.config.caseInsensitive(value);\n\n /** @deprecated use [[UrlConfig.defaultSquashPolicy]] */\n defaultSquashPolicy = (value?: boolean | string) => this.router.urlService.config.defaultSquashPolicy(value);\n\n /** @deprecated use [[UrlConfig.strictMode]] */\n strictMode = (value?: boolean) => this.router.urlService.config.strictMode(value);\n\n /** @deprecated use [[UrlConfig.type]] */\n type = (name: string, definition?: ParamTypeDefinition, definitionFn?: () => ParamTypeDefinition) => {\n return this.router.urlService.config.type(name, definition, definitionFn) || this;\n };\n}\n",
|
||||||
"import { StateDeclaration } from '../state';\nimport { UrlMatcher } from './urlMatcher';\nimport { isString, isDefined, isFunction } from '../common/predicates';\nimport { UIRouter } from '../router';\nimport { identity, extend } from '../common/common';\nimport { is, or, pattern } from '../common/hof';\nimport { StateObject } from '../state/stateObject';\nimport { RawParams } from '../params/interface';\nimport {\n UrlRule,\n UrlRuleMatchFn,\n UrlRuleHandlerFn,\n UrlRuleType,\n UrlParts,\n MatcherUrlRule,\n StateRule,\n RegExpRule,\n} from './interface';\n\n/**\n * Creates a [[UrlRule]]\n *\n * Creates a [[UrlRule]] from a:\n *\n * - `string`\n * - [[UrlMatcher]]\n * - `RegExp`\n * - [[StateObject]]\n */\nexport class UrlRuleFactory {\n static isUrlRule = (obj) => obj && ['type', 'match', 'handler'].every((key) => isDefined(obj[key]));\n\n constructor(public router: UIRouter) {}\n\n compile(str: string) {\n return this.router.urlMatcherFactory.compile(str);\n }\n\n create(\n what: string | UrlMatcher | StateObject | StateDeclaration | RegExp | UrlRuleMatchFn,\n handler?: string | UrlRuleHandlerFn\n ): UrlRule {\n const { isState, isStateDeclaration } = StateObject;\n const makeRule = pattern([\n [isString, (_what: string) => makeRule(this.compile(_what))],\n [is(UrlMatcher), (_what: UrlMatcher) => this.fromUrlMatcher(_what, handler)],\n [or(isState, isStateDeclaration), (_what: StateObject | StateDeclaration) => this.fromState(_what, this.router)],\n [is(RegExp), (_what: RegExp) => this.fromRegExp(_what, handler)],\n [isFunction, (_what: UrlRuleMatchFn) => new BaseUrlRule(_what, handler as UrlRuleHandlerFn)],\n ]);\n\n const rule = makeRule(what);\n if (!rule) throw new Error(\"invalid 'what' in when()\");\n return rule;\n }\n\n /**\n * A UrlRule which matches based on a UrlMatcher\n *\n * The `handler` may be either a `string`, a [[UrlRuleHandlerFn]] or another [[UrlMatcher]]\n *\n * ## Handler as a function\n *\n * If `handler` is a function, the function is invoked with:\n *\n * - matched parameter values ([[RawParams]] from [[UrlMatcher.exec]])\n * - url: the current Url ([[UrlParts]])\n * - router: the router object ([[UIRouter]])\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, match => \"/home/\" + match.fooId + \"/\" + match.barId);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n *\n * ## Handler as UrlMatcher\n *\n * If `handler` is a UrlMatcher, the handler matcher is used to create the new url.\n * The `handler` UrlMatcher is formatted using the matched param from the first matcher.\n * The url is replaced with the result.\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var handler = $umf.compile(\"/home/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, handler);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n */\n fromUrlMatcher(urlMatcher: UrlMatcher, handler: string | UrlMatcher | UrlRuleHandlerFn): MatcherUrlRule {\n let _handler: UrlRuleHandlerFn = handler as any;\n if (isString(handler)) handler = this.router.urlMatcherFactory.compile(handler);\n if (is(UrlMatcher)(handler)) _handler = (match: RawParams) => (handler as UrlMatcher).format(match);\n\n function matchUrlParamters(url: UrlParts): RawParams {\n const params = urlMatcher.exec(url.path, url.search, url.hash);\n return urlMatcher.validates(params) && params;\n }\n\n // Prioritize URLs, lowest to highest:\n // - Some optional URL parameters, but none matched\n // - No optional parameters in URL\n // - Some optional parameters, some matched\n // - Some optional parameters, all matched\n function matchPriority(params: RawParams): number {\n const optional = urlMatcher.parameters().filter((param) => param.isOptional);\n if (!optional.length) return 0.000001;\n const matched = optional.filter((param) => params[param.id]);\n return matched.length / optional.length;\n }\n\n const details = { urlMatcher, matchPriority, type: 'URLMATCHER' };\n return extend(new BaseUrlRule(matchUrlParamters, _handler), details) as MatcherUrlRule;\n }\n\n /**\n * A UrlRule which matches a state by its url\n *\n * #### Example:\n * ```js\n * var rule = factory.fromState($state.get('foo'), router);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match);\n * // Starts a transition to 'foo' with params: { fooId: '123', barId: '456' }\n * ```\n */\n fromState(stateOrDecl: StateObject | StateDLine truncated
|
"import { StateDeclaration } from '../state';\nimport { UrlMatcher } from './urlMatcher';\nimport { isString, isDefined, isFunction } from '../common/predicates';\nimport { UIRouter } from '../router';\nimport { identity, extend } from '../common/common';\nimport { is, or, pattern } from '../common/hof';\nimport { StateObject } from '../state/stateObject';\nimport { RawParams } from '../params/interface';\nimport {\n UrlRule,\n UrlRuleMatchFn,\n UrlRuleHandlerFn,\n UrlRuleType,\n UrlParts,\n MatcherUrlRule,\n StateRule,\n RegExpRule,\n} from './interface';\n\n/**\n * Creates a [[UrlRule]]\n *\n * Creates a [[UrlRule]] from a:\n *\n * - `string`\n * - [[UrlMatcher]]\n * - `RegExp`\n * - [[StateObject]]\n */\nexport class UrlRuleFactory {\n static isUrlRule = (obj) => obj && ['type', 'match', 'handler'].every((key) => isDefined(obj[key]));\n\n constructor(public router: UIRouter) {}\n\n compile(str: string) {\n return this.router.urlMatcherFactory.compile(str);\n }\n\n create(\n what: string | UrlMatcher | StateObject | StateDeclaration | RegExp | UrlRuleMatchFn,\n handler?: string | UrlRuleHandlerFn\n ): UrlRule {\n const { isState, isStateDeclaration } = StateObject;\n const makeRule = pattern([\n [isString, (_what: string) => makeRule(this.compile(_what))],\n [is(UrlMatcher), (_what: UrlMatcher) => this.fromUrlMatcher(_what, handler)],\n [or(isState, isStateDeclaration), (_what: StateObject | StateDeclaration) => this.fromState(_what, this.router)],\n [is(RegExp), (_what: RegExp) => this.fromRegExp(_what, handler)],\n [isFunction, (_what: UrlRuleMatchFn) => new BaseUrlRule(_what, handler as UrlRuleHandlerFn)],\n ]);\n\n const rule = makeRule(what);\n if (!rule) throw new Error(\"invalid 'what' in when()\");\n return rule;\n }\n\n /**\n * A UrlRule which matches based on a UrlMatcher\n *\n * The `handler` may be either a `string`, a [[UrlRuleHandlerFn]] or another [[UrlMatcher]]\n *\n * ## Handler as a function\n *\n * If `handler` is a function, the function is invoked with:\n *\n * - matched parameter values ([[RawParams]] from [[UrlMatcher.exec]])\n * - url: the current Url ([[UrlParts]])\n * - router: the router object ([[UIRouter]])\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, match => \"/home/\" + match.fooId + \"/\" + match.barId);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n *\n * ## Handler as UrlMatcher\n *\n * If `handler` is a UrlMatcher, the handler matcher is used to create the new url.\n * The `handler` UrlMatcher is formatted using the matched param from the first matcher.\n * The url is replaced with the result.\n *\n * #### Example:\n * ```js\n * var urlMatcher = $umf.compile(\"/foo/:fooId/:barId\");\n * var handler = $umf.compile(\"/home/:fooId/:barId\");\n * var rule = factory.fromUrlMatcher(urlMatcher, handler);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match); // '/home/123/456'\n * ```\n */\n fromUrlMatcher(urlMatcher: UrlMatcher, handler: string | UrlMatcher | UrlRuleHandlerFn): MatcherUrlRule {\n let _handler: UrlRuleHandlerFn = handler as any;\n if (isString(handler)) handler = this.router.urlMatcherFactory.compile(handler);\n if (is(UrlMatcher)(handler)) _handler = (match: RawParams) => (handler as UrlMatcher).format(match);\n\n function matchUrlParamters(url: UrlParts): RawParams {\n const params = urlMatcher.exec(url.path, url.search, url.hash);\n return urlMatcher.validates(params) && params;\n }\n\n // Prioritize URLs, lowest to highest:\n // - Some optional URL parameters, but none matched\n // - No optional parameters in URL\n // - Some optional parameters, some matched\n // - Some optional parameters, all matched\n function matchPriority(params: RawParams): number {\n const optional = urlMatcher.parameters().filter((param) => param.isOptional);\n if (!optional.length) return 0.000001;\n const matched = optional.filter((param) => params[param.id]);\n return matched.length / optional.length;\n }\n\n const details = { urlMatcher, matchPriority, type: 'URLMATCHER' };\n return extend(new BaseUrlRule(matchUrlParamters, _handler), details) as MatcherUrlRule;\n }\n\n /**\n * A UrlRule which matches a state by its url\n *\n * #### Example:\n * ```js\n * var rule = factory.fromState($state.get('foo'), router);\n * var match = rule.match('/foo/123/456'); // results in { fooId: '123', barId: '456' }\n * var result = rule.handler(match);\n * // Starts a transition to 'foo' with params: { fooId: '123', barId: '456' }\n * ```\n */\n fromState(stateOrDecl: StateObject | StateDLine truncated
|
||||||
"import { UIRouter } from '../router';\nimport { Disposable } from '../interface';\nimport { MatcherUrlRule, UrlRule, UrlRuleHandlerFn, UrlRuleMatchFn, UrlRulesApi } from './interface';\nimport { TargetState, TargetStateDef } from '../state';\nimport { UrlMatcher } from './urlMatcher';\nimport { is, isDefined, isFunction, isString, removeFrom, val } from '../common';\nimport { UrlRuleFactory } from './urlRule';\n\nconst prioritySort = (a: UrlRule, b: UrlRule) => (b.priority || 0) - (a.priority || 0);\n\nconst typeSort = (a: UrlRule, b: UrlRule) => {\n const weights = { STATE: 4, URLMATCHER: 4, REGEXP: 3, RAW: 2, OTHER: 1 };\n return (weights[a.type] || 0) - (weights[b.type] || 0);\n};\n\nconst urlMatcherSort = (a: MatcherUrlRule, b: MatcherUrlRule) =>\n !a.urlMatcher || !b.urlMatcher ? 0 : UrlMatcher.compare(a.urlMatcher, b.urlMatcher);\n\nconst idSort = (a: UrlRule, b: UrlRule) => {\n // Identically sorted STATE and URLMATCHER best rule will be chosen by `matchPriority` after each rule matches the URL\n const useMatchPriority = { STATE: true, URLMATCHER: true };\n const equal = useMatchPriority[a.type] && useMatchPriority[b.type];\n return equal ? 0 : (a.$id || 0) - (b.$id || 0);\n};\n\n/**\n * Default rule priority sorting function.\n *\n * Sorts rules by:\n *\n * - Explicit priority (set rule priority using [[UrlRules.when]])\n * - Rule type (STATE: 4, URLMATCHER: 4, REGEXP: 3, RAW: 2, OTHER: 1)\n * - `UrlMatcher` specificity ([[UrlMatcher.compare]]): works for STATE and URLMATCHER types to pick the most specific rule.\n * - Rule registration order (for rule types other than STATE and URLMATCHER)\n * - Equally sorted State and UrlMatcher rules will each match the URL.\n * Then, the *best* match is chosen based on how many parameter values were matched.\n */\nlet defaultRuleSortFn: (a: UrlRule, b: UrlRule) => number;\ndefaultRuleSortFn = (a, b) => {\n let cmp = prioritySort(a, b);\n if (cmp !== 0) return cmp;\n\n cmp = typeSort(a, b);\n if (cmp !== 0) return cmp;\n\n cmp = urlMatcherSort(a as MatcherUrlRule, b as MatcherUrlRule);\n if (cmp !== 0) return cmp;\n\n return idSort(a, b);\n};\n\nfunction getHandlerFn(handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef): UrlRuleHandlerFn {\n if (!isFunction(handler) && !isString(handler) && !is(TargetState)(handler) && !TargetState.isDef(handler)) {\n throw new Error(\"'handler' must be a string, function, TargetState, or have a state: 'newtarget' property\");\n }\n return isFunction(handler) ? (handler as UrlRuleHandlerFn) : val(handler);\n}\n\n/**\n * API for managing URL rules\n *\n * This API is used to create and manage URL rules.\n * URL rules are a mechanism to respond to specific URL patterns.\n *\n * The most commonly used methods are [[otherwise]] and [[when]].\n *\n * This API is found at `router.urlService.rules` (see: [[UIRouter.urlService]], [[URLService.rules]])\n */\nexport class UrlRules implements Disposable {\n /** used to create [[UrlRule]] objects for common cases */\n public urlRuleFactory: UrlRuleFactory;\n\n /** @internal */ private _sortFn = defaultRuleSortFn;\n /** @internal */ private _otherwiseFn: UrlRule;\n /** @internal */ private _sorted: boolean;\n /** @internal */ private _rules: UrlRule[] = [];\n /** @internal */ private _id = 0;\n\n /** @internal */\n constructor(/** @internal */ private router: UIRouter) {\n this.urlRuleFactory = new UrlRuleFactory(router);\n }\n\n /** @internal */\n public dispose(router?: UIRouter) {\n this._rules = [];\n delete this._otherwiseFn;\n }\n\n /**\n * Defines the initial state, path, or behavior to use when the app starts.\n *\n * This rule defines the initial/starting state for the application.\n *\n * This rule is triggered the first time the URL is checked (when the app initially loads).\n * The rule is triggered only when the url matches either `\"\"` or `\"/\"`.\n *\n * Note: The rule is intended to be used when the root of the application is directly linked to.\n * When the URL is *not* `\"\"` or `\"/\"` and doesn't match other rules, the [[otherwise]] rule is triggered.\n * This allows 404-like behavior when an unknown URL is deep-linked.\n *\n * #### Example:\n * Start app at `home` state.\n * ```js\n * .initial({ state: 'home' });\n * ```\n *\n * #### Example:\n * Start app at `/home` (by url)\n * ```js\n * .initial('/home');\n * ```\n *\n * #### Example:\n * When no other url rule matches, go to `home` state\n * ```js\n * .initial((matchValue, url, router) => {\n * console.log('initial state');\n * return { state: 'home' };\n * })\n * ```\n *\n * @param handler The initial state or url path, or a function which returns the state or url path (or performs custom logic).\n */\n public initial(handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef) {\n const handlerFn: UrlRuleHandlerFn = getHandlerFn(handler);\n const matchFn: UrlRuleMLine truncated
|
"import { UIRouter } from '../router';\nimport { Disposable } from '../interface';\nimport { MatcherUrlRule, UrlRule, UrlRuleHandlerFn, UrlRuleMatchFn, UrlRulesApi } from './interface';\nimport { TargetState, TargetStateDef } from '../state';\nimport { UrlMatcher } from './urlMatcher';\nimport { is, isDefined, isFunction, isString, removeFrom, val } from '../common';\nimport { UrlRuleFactory } from './urlRule';\n\nconst prioritySort = (a: UrlRule, b: UrlRule) => (b.priority || 0) - (a.priority || 0);\n\nconst typeSort = (a: UrlRule, b: UrlRule) => {\n const weights = { STATE: 4, URLMATCHER: 4, REGEXP: 3, RAW: 2, OTHER: 1 };\n return (weights[a.type] || 0) - (weights[b.type] || 0);\n};\n\nconst urlMatcherSort = (a: MatcherUrlRule, b: MatcherUrlRule) =>\n !a.urlMatcher || !b.urlMatcher ? 0 : UrlMatcher.compare(a.urlMatcher, b.urlMatcher);\n\nconst idSort = (a: UrlRule, b: UrlRule) => {\n // Identically sorted STATE and URLMATCHER best rule will be chosen by `matchPriority` after each rule matches the URL\n const useMatchPriority = { STATE: true, URLMATCHER: true };\n const equal = useMatchPriority[a.type] && useMatchPriority[b.type];\n return equal ? 0 : (a.$id || 0) - (b.$id || 0);\n};\n\n/**\n * Default rule priority sorting function.\n *\n * Sorts rules by:\n *\n * - Explicit priority (set rule priority using [[UrlRules.when]])\n * - Rule type (STATE: 4, URLMATCHER: 4, REGEXP: 3, RAW: 2, OTHER: 1)\n * - `UrlMatcher` specificity ([[UrlMatcher.compare]]): works for STATE and URLMATCHER types to pick the most specific rule.\n * - Rule registration order (for rule types other than STATE and URLMATCHER)\n * - Equally sorted State and UrlMatcher rules will each match the URL.\n * Then, the *best* match is chosen based on how many parameter values were matched.\n */\nlet defaultRuleSortFn: (a: UrlRule, b: UrlRule) => number;\ndefaultRuleSortFn = (a, b) => {\n let cmp = prioritySort(a, b);\n if (cmp !== 0) return cmp;\n\n cmp = typeSort(a, b);\n if (cmp !== 0) return cmp;\n\n cmp = urlMatcherSort(a as MatcherUrlRule, b as MatcherUrlRule);\n if (cmp !== 0) return cmp;\n\n return idSort(a, b);\n};\n\nfunction getHandlerFn(handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef): UrlRuleHandlerFn {\n if (!isFunction(handler) && !isString(handler) && !is(TargetState)(handler) && !TargetState.isDef(handler)) {\n throw new Error(\"'handler' must be a string, function, TargetState, or have a state: 'newtarget' property\");\n }\n return isFunction(handler) ? (handler as UrlRuleHandlerFn) : val(handler);\n}\n\n/**\n * API for managing URL rules\n *\n * This API is used to create and manage URL rules.\n * URL rules are a mechanism to respond to specific URL patterns.\n *\n * The most commonly used methods are [[otherwise]] and [[when]].\n *\n * This API is found at `router.urlService.rules` (see: [[UIRouter.urlService]], [[URLService.rules]])\n */\nexport class UrlRules implements Disposable {\n /** used to create [[UrlRule]] objects for common cases */\n public urlRuleFactory: UrlRuleFactory;\n\n /** @internal */ private _sortFn = defaultRuleSortFn;\n /** @internal */ private _otherwiseFn: UrlRule;\n /** @internal */ private _sorted: boolean;\n /** @internal */ private _rules: UrlRule[] = [];\n /** @internal */ private _id = 0;\n\n /** @internal */\n constructor(/** @internal */ private router: UIRouter) {\n this.urlRuleFactory = new UrlRuleFactory(router);\n }\n\n /** @internal */\n public dispose(router?: UIRouter) {\n this._rules = [];\n delete this._otherwiseFn;\n }\n\n /**\n * Defines the initial state, path, or behavior to use when the app starts.\n *\n * This rule defines the initial/starting state for the application.\n *\n * This rule is triggered the first time the URL is checked (when the app initially loads).\n * The rule is triggered only when the url matches either `\"\"` or `\"/\"`.\n *\n * Note: The rule is intended to be used when the root of the application is directly linked to.\n * When the URL is *not* `\"\"` or `\"/\"` and doesn't match other rules, the [[otherwise]] rule is triggered.\n * This allows 404-like behavior when an unknown URL is deep-linked.\n *\n * #### Example:\n * Start app at `home` state.\n * ```js\n * .initial({ state: 'home' });\n * ```\n *\n * #### Example:\n * Start app at `/home` (by url)\n * ```js\n * .initial('/home');\n * ```\n *\n * #### Example:\n * When no other url rule matches, go to `home` state\n * ```js\n * .initial((matchValue, url, router) => {\n * console.log('initial state');\n * return { state: 'home' };\n * })\n * ```\n *\n * @param handler The initial state or url path, or a function which returns the state or url path (or performs custom logic).\n */\n public initial(handler: string | UrlRuleHandlerFn | TargetState | TargetStateDef) {\n const handlerFn: UrlRuleHandlerFn = getHandlerFn(handler);\n const matchFn: UrlRuleMLine truncated
|
||||||
@@ -1058,6 +1058,7 @@
|
|||||||
"padArrays",
|
"padArrays",
|
||||||
"cmp",
|
"cmp",
|
||||||
"_pairs",
|
"_pairs",
|
||||||
|
"paramValue",
|
||||||
"decodeURIComponent",
|
"decodeURIComponent",
|
||||||
"reverseString",
|
"reverseString",
|
||||||
"allReversed",
|
"allReversed",
|
||||||
@@ -1715,5 +1716,5 @@
|
|||||||
"$anchorScroll",
|
"$anchorScroll",
|
||||||
"scrollIntoView"
|
"scrollIntoView"
|
||||||
],
|
],
|
||||||
"mappings": "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 truncated
|
"mappings": "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 truncated
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
!function(){"use strict";angular.module("as.sortable",[]).constant("sortableConfig",{itemClass:"as-sortable-item",handleClass:"as-sortable-item-handle",placeHolderClass:"as-sortable-placeholder",dragClass:"as-sortable-drag",hiddenClass:"as-sortable-hidden",dragging:"as-sortable-dragging"})}(),function(){"use strict";var mainModule=angular.module("as.sortable");mainModule.factory("$helper",["$document","$window",function($document,$window){return{height:function(element){return element[0].getBoundingClientRect().height},width:function(element){return element[0].getBoundingClientRect().width},offset:function(element,scrollableContainer){var boundingClientRect=element[0].getBoundingClientRect();return scrollableContainer||(scrollableContainer=$document[0].documentElement),{width:boundingClientRect.width||element.prop("offsetWidth"),height:boundingClientRect.height||element.prop("offsetHeight"),top:boundingClientRect.top+($window.pageYOffset||scrollableContainer.scrollTop-scrollableContainer.offsetTop),left:boundingClientRect.left+($window.pageXOffset||scrollableContainer.scrollLeft-scrollableContainer.offsetLeft)}},eventObj:function(event){var obj=event;return void 0!==event.targetTouches?obj=event.targetTouches.item(0):void 0!==event.originalEvent&&void 0!==event.originalEvent.targetTouches&&(obj=event.originalEvent.targetTouches.item(0)),obj},isTouchInvalid:function(event){var touchInvalid=!1;return void 0!==event.touches&&event.touches.length>1?touchInvalid=!0:void 0!==event.originalEvent&&void 0!==event.originalEvent.touches&&event.originalEvent.touches.length>1&&(touchInvalid=!0),touchInvalid},positionStarted:function(event,target,scrollableContainer){var pos={};return pos.offsetX=event.pageX-this.offset(target,scrollableContainer).left,pos.offsetY=event.pageY-this.offset(target,scrollableContainer).top,pos.startX=pos.lastX=event.pageX,pos.startY=pos.lastY=event.pageY,pos.nowX=pos.nowY=pos.distX=pos.distY=pos.dirAx=0,pos.dirX=pos.dirY=pos.lastDirX=pos.lastDirY=pos.distAxX=pos.distAxY=0,pos},calculatePosition:function(pos,event){pos.lastX=pos.nowX,pos.lastY=pos.nowY,pos.nowX=event.pageX,pos.nowY=event.pageY,pos.distX=pos.nowX-pos.lastX,pos.distY=pos.nowY-pos.lastY,pos.lastDirX=pos.dirX,pos.lastDirY=pos.dirY,pos.dirX=0===pos.distX?0:pos.distX>0?1:-1,pos.dirY=0===pos.distY?0:pos.distY>0?1:-1;var newAx=Math.abs(pos.distX)>Math.abs(pos.distY)?1:0;pos.dirAx!==newAx?(pos.distAxX=0,pos.distAxY=0):(pos.distAxX+=Math.abs(pos.distX),0!==pos.dirX&&pos.dirX!==pos.lastDirX&&(pos.distAxX=0),pos.distAxY+=Math.abs(pos.distY),0!==pos.dirY&&pos.dirY!==pos.lastDirY&&(pos.distAxY=0)),pos.dirAx=newAx},movePosition:function(event,element,pos,container,containerPositioning,scrollableContainer){var bounds,useRelative="relative"===containerPositioning;element.x=event.pageX-pos.offsetX,element.y=event.pageY-pos.offsetY,container&&(bounds=this.offset(container,scrollableContainer),useRelative&&(element.x-=bounds.left,element.y-=bounds.top,bounds.left=0,bounds.top=0),element.x<bounds.left?element.x=bounds.left:element.x>=bounds.width+bounds.left-this.offset(element).width&&(element.x=bounds.width+bounds.left-this.offset(element).width),element.y<bounds.top?element.y=bounds.top:element.y>=bounds.height+bounds.top-this.offset(element).height&&(element.y=bounds.height+bounds.top-this.offset(element).height)),element.css({left:element.x+"px",top:element.y+"px"}),this.calculatePosition(pos,event)},dragItem:function(item){return{index:item.index(),parent:item.sortableScope,source:item,targetElement:null,targetElementOffset:null,sourceInfo:{index:item.index(),itemScope:item.itemScope,sortableScope:item.sortableScope},canMove:function(itemPosition,targetElement,targetElementOffset){return this.targetElement!==targetElement?(this.targetElement=targetElement,this.targetElementOffset=targetElementOffset,!0):itemPosition.dirX*(targetElementOffset.left-this.targetElementOffset.left)>0||itemPosition.dirY*(targetElementOffset.top-this.targetElementOffset.top)>0?(this.targetElementOffset=targetElementOffset,!0):!1},moveTo:function(parent,index){this.parent=parent,this.isSameParent()&&this.source.index()<index&&!this.sourceInfo.sortableScope.cloning&&(index-=1),this.index=index},isSameParent:function(){return this.parent.element===this.sourceInfo.sortableScope.element},isOrderChanged:function(){return this.index!==this.sourceInfo.index},eventArgs:function(){return{source:this.sourceInfo,dest:{index:this.index,sortableScope:this.parent}}},apply:function(){this.sourceInfo.sortableScope.cloning?this.parent.options.clone||this.parent.insertItem(this.index,angular.copy(this.source.modelValue)):(this.sourceInfo.sortableScope.removeItem(this.sourceInfo.index),(this.parent.options.allowDuplicates||this.parent.modelValue.indexOf(this.source.modelValue)<0)&&this.parent.insertItem(this.index,this.source.modelValue))}}},noDrag:function(element){return void 0!==element.attr("no-drag")||void 0!==element.attr("data-no-drag")},findAncestor:function(el,selector){el=Line truncated
|
!function(){"use strict";angular.module("as.sortable",[]).constant("sortableConfig",{itemClass:"as-sortable-item",handleClass:"as-sortable-item-handle",placeHolderClass:"as-sortable-placeholder",dragClass:"as-sortable-drag",hiddenClass:"as-sortable-hidden",dragging:"as-sortable-dragging"})}(),function(){"use strict";var mainModule=angular.module("as.sortable");mainModule.factory("$helper",["$document","$window",function($document,$window){return{height:function(element){return element[0].getBoundingClientRect().height},width:function(element){return element[0].getBoundingClientRect().width},offset:function(element,scrollableContainer){var boundingClientRect=element[0].getBoundingClientRect();return scrollableContainer||(scrollableContainer=$document[0].documentElement),{width:boundingClientRect.width||element.prop("offsetWidth"),height:boundingClientRect.height||element.prop("offsetHeight"),top:boundingClientRect.top+($window.pageYOffset||scrollableContainer.scrollTop-scrollableContainer.offsetTop),left:boundingClientRect.left+($window.pageXOffset||scrollableContainer.scrollLeft-scrollableContainer.offsetLeft)}},eventObj:function(event){var obj=event;return void 0!==event.targetTouches?obj=event.targetTouches.item(0):void 0!==event.originalEvent&&void 0!==event.originalEvent.targetTouches&&(obj=event.originalEvent.targetTouches.item(0)),obj},isTouchInvalid:function(event){var touchInvalid=!1;return void 0!==event.touches&&event.touches.length>1?touchInvalid=!0:void 0!==event.originalEvent&&void 0!==event.originalEvent.touches&&event.originalEvent.touches.length>1&&(touchInvalid=!0),touchInvalid},positionStarted:function(event,target,scrollableContainer){var pos={};return pos.offsetX=event.pageX-this.offset(target,scrollableContainer).left,pos.offsetY=event.pageY-this.offset(target,scrollableContainer).top,pos.startX=pos.lastX=event.pageX,pos.startY=pos.lastY=event.pageY,pos.nowX=pos.nowY=pos.distX=pos.distY=pos.dirAx=0,pos.dirX=pos.dirY=pos.lastDirX=pos.lastDirY=pos.distAxX=pos.distAxY=0,pos},calculatePosition:function(pos,event){pos.lastX=pos.nowX,pos.lastY=pos.nowY,pos.nowX=event.pageX,pos.nowY=event.pageY,pos.distX=pos.nowX-pos.lastX,pos.distY=pos.nowY-pos.lastY,pos.lastDirX=pos.dirX,pos.lastDirY=pos.dirY,pos.dirX=0===pos.distX?0:pos.distX>0?1:-1,pos.dirY=0===pos.distY?0:pos.distY>0?1:-1;var newAx=Math.abs(pos.distX)>Math.abs(pos.distY)?1:0;pos.dirAx!==newAx?(pos.distAxX=0,pos.distAxY=0):(pos.distAxX+=Math.abs(pos.distX),0!==pos.dirX&&pos.dirX!==pos.lastDirX&&(pos.distAxX=0),pos.distAxY+=Math.abs(pos.distY),0!==pos.dirY&&pos.dirY!==pos.lastDirY&&(pos.distAxY=0)),pos.dirAx=newAx},movePosition:function(event,element,pos,container,containerPositioning,scrollableContainer){var bounds,useRelative="relative"===containerPositioning;element.x=event.pageX-pos.offsetX,element.y=event.pageY-pos.offsetY,container&&(bounds=this.offset(container,scrollableContainer),useRelative&&(element.x-=bounds.left,element.y-=bounds.top,bounds.left=0,bounds.top=0),element.x<bounds.left?element.x=bounds.left:element.x>=bounds.width+bounds.left-this.offset(element).width&&(element.x=bounds.width+bounds.left-this.offset(element).width),element.y<bounds.top?element.y=bounds.top:element.y>=bounds.height+bounds.top-this.offset(element).height&&(element.y=bounds.height+bounds.top-this.offset(element).height)),element.css({left:element.x+"px",top:element.y+"px"}),this.calculatePosition(pos,event)},dragItem:function(item){return{index:item.index(),parent:item.sortableScope,source:item,targetElement:null,targetElementOffset:null,sourceInfo:{index:item.index(),itemScope:item.itemScope,sortableScope:item.sortableScope},canMove:function(itemPosition,targetElement,targetElementOffset){return this.targetElement!==targetElement?(this.targetElement=targetElement,this.targetElementOffset=targetElementOffset,!0):itemPosition.dirX*(targetElementOffset.left-this.targetElementOffset.left)>0||itemPosition.dirY*(targetElementOffset.top-this.targetElementOffset.top)>0?(this.targetElementOffset=targetElementOffset,!0):!1},moveTo:function(parent,index){this.parent=parent,this.isSameParent()&&this.source.index()<index&&!this.sourceInfo.sortableScope.cloning&&(index-=1),this.index=index},isSameParent:function(){return this.parent.element===this.sourceInfo.sortableScope.element},isOrderChanged:function(){return this.index!==this.sourceInfo.index},eventArgs:function(){return{source:this.sourceInfo,dest:{index:this.index,sortableScope:this.parent}}},apply:function(){this.sourceInfo.sortableScope.cloning?this.parent.options.clone||this.parent.insertItem(this.index,angular.copy(this.source.modelValue)):(this.sourceInfo.sortableScope.removeItem(this.sourceInfo.index),(this.parent.options.allowDuplicates||this.parent.modelValue.indexOf(this.source.modelValue)<0)&&this.parent.insertItem(this.index,this.source.modelValue))}}},noDrag:function(element){return void 0!==element.attr("no-drag")||void 0!==element.attr("data-no-drag")},findAncestor:function(el,selector){el=Line truncated
|
||||||
Reference in new issue
Block a user