syncing client with credger

This commit is contained in:
Gwenhael Le Moine 2021-05-12 18:35:29 +02:00
parent 8c77c25a2a
commit 67873b3e39
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
2475 changed files with 106493 additions and 809300 deletions

2
app.rb
View file

@ -16,7 +16,7 @@ class LedgerRbApp < Sinatra::Base
get '/' do
content_type :html
send_file './public/app/index.html'
send_file './public/angularjs.html'
end
get '/budget' do

View file

@ -1,6 +1,6 @@
# encoding: utf-8
ENV[ 'LEDGER_FILE' ] ||= '/home/cycojesus/org/comptes.ledger'
ENV[ 'LEDGER_FILE' ] ||= '/home/gwh/org/comptes.ledger'
CURRENCY = '€'
SEPARATOR = ','

View file

@ -41,6 +41,6 @@
<script src="/vendor/node_modules/angularjs-slider/dist/rzslider.min.js"></script>
<!-- APP -->
<script src="/js/app.min.js"></script>
<script src="/js/app.js"></script>
</body>
</html>

View file

@ -1,60 +1,33 @@
var app = angular.module('app', ['ui.router',
var app = angular.module('app',
['ui.router',
'nvd3',
'angularMoment',
'chieffancypants.loadingBar',
'rzModule',
])
'rzSlider',
])
.config(['$stateProvider', '$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: '',
component: 'dashboard'
});
}
]);
app.service('API', ['$http',
function ($http) {
var API = this;
API.balance = function (period, categories, depth) {
return $http.get('/api/ledger/balance', {
params: {
period: period,
categories: categories,
depth: depth
}
});
};
API.register = function (period, categories) {
return $http.get('/api/ledger/register', {
params: {
period: period,
categories: categories
}
});
};
API.graph_values = function (period, granularity, categories) {
return $http.get('/api/ledger/graph_values', {
params: {
period: period,
granularity: granularity,
categories: categories
}
});
};
API.accounts = _.memoize(function () {
return $http.get('/api/ledger/accounts');
});
}]);
app.component('bucket', {
]);
// BUCKET
app.component('bucket',
{
bindings: {
categories: '<',
period: '<'
},
controller: ['$filter', 'API',
function ($filter, API) {
var ctrl = this;
function($filter, API) {
let ctrl = this;
ctrl.depth = 99;
ctrl.graph_options = {
chart: {
type: 'multiBarHorizontalChart',
@ -65,9 +38,9 @@ app.component('bucket', {
bottom: 20,
left: 200
},
x: function (d) { return d.account; },
y: function (d) { return d.amount; },
valueFormat: function (d) { return d + " \u20AC"; },
x: (d) => { return d.account; },
y: (d) => { return d.amount; },
valueFormat: (d) => { return `${d}`; },
showYAxis: false,
showValues: true,
showLegend: true,
@ -79,33 +52,52 @@ app.component('bucket', {
labelsOutside: true,
multibar: {
dispatch: {
elementClick: function (event) {
elementClick: (event) => {
API.register(ctrl.period, event.data.account)
.then(function success(response) {
var format_transaction = function (transaction) {
return "\n <tr>\n <td>" + transaction.date + "</td>\n <td>" + transaction.payee + "</td>\n <td style=\"text-align: right;\">" + transaction.amount + " " + transaction.currency + "</td>\n </tr>";
let format_transaction = (transaction) => {
return `
<tr>
<td>${transaction.date}</td>
<td>${transaction.payee}</td>
<td style="text-align: right;">${transaction.amount} ${transaction.currency}</td>
</tr>`;
};
swal({
Swal.fire({
title: response.data.key,
html: "\n <table style=\"width: 100%;\">\n <thead>\n <tr>\n <td>Date</td><td>Payee</td><td>Amount</td>\n </tr>\n </thead>\n <tbody>\n " + response.data.values.map(function (transaction) { return format_transaction(transaction); }).join("") + "\n </tbody>\n <tfoot><td></td><td>Total</td><td style=\"text-align: right;\">" + event.data.amount + " \u20AC</td></tfoot>\n </table>"
});
html: `
<table style="width: 100%;">
<thead>
<tr>
<td>Date</td><td>Payee</td><td>Amount</td>
</tr>
</thead>
<tbody>
${response.data.values.map(function(transaction) { return format_transaction(transaction); }).join("")}
</tbody>
<tfoot><td></td><td>Total</td><td style="text-align: right;">${event.data.amount} </td></tfoot>
</table>`});
}, function error(response) { alert("error!"); });
}
}
}
}
};
ctrl.$onChanges = function (changes) {
ctrl.$onChanges = (changes) => {
if (changes.period && changes.period.currentValue != undefined) {
API.balance(ctrl.period, ctrl.categories, ctrl.depth)
.then(function (response) {
.then((response) => {
ctrl.raw_data = _(response.data)
.sortBy(function (account) { return account.name; });
.sortBy((account) => { return account.name; });
ctrl.graph_options.chart.height = 60 + (25 * ctrl.raw_data.length);
ctrl.data = ctrl.categories.split(' ').map(function (category) {
ctrl.data = ctrl.categories.split(' ').map((category) => {
return {
key: category,
values: _(ctrl.raw_data).select(function (line) { return line.account.match("^" + category + ":.*"); })
values: _(ctrl.raw_data).select((line) => { return line.account.match(`^${category}:.*`); })
};
});
});
@ -113,44 +105,63 @@ app.component('bucket', {
};
}
],
template: "\n <div class=\"bucket\">\n <div class=\"content\">\n <div class=\"graph\">\n <nvd3 data=\"$ctrl.data\"\n options=\"$ctrl.graph_options\">\n </nvd3>\n </div>\n </div>\n </div>\n"
});
app.component('dashboard', {
template: `
<div class="bucket">
<div class="content">
<div class="graph">
<nvd3 data="$ctrl.data"
options="$ctrl.graph_options">
</nvd3>
</div>
</div>
</div>
`
});
// DASHBOARD
app.component('dashboard',
{
controller: ['$filter', 'API',
function ($filter, API) {
var ctrl = this;
function($filter, API) {
let ctrl = this;
ctrl.granularity = "monthly";
ctrl.account_selection = "depth";
var is_monthly = function () { return ctrl.granularity == "monthly"; };
ctrl.compute_selected_accounts = function () {
let is_monthly = () => { return ctrl.granularity == "monthly"; };
ctrl.compute_selected_accounts = () => {
ctrl.graphed_accounts = _.chain(ctrl.main_accounts_depths)
.map(function (account) {
.map((account) => {
if (account.depth < 1) {
return null;
}
else {
} else {
return _(ctrl.raw_accounts)
.select(function (account2) {
.select((account2) => {
return account2[0] == account.name && account2.length == account.depth;
})
.map(function (account3) { return account3.join(":"); });
.map((account3) => { return account3.join(":"); });
}
})
.compact()
.flatten()
.value();
ctrl.retrieve_graph_values(ctrl.graphed_accounts);
};
ctrl.retrieve_graph_values = function (categories) {
ctrl.retrieve_graph_values = (categories) => {
API.graph_values("", ctrl.granularity, categories.join(" "))
.then(function (response) {
.then((response) => {
ctrl.periods = [];
_.chain(response.data)
.reduce(function (memo, cat) { return cat.length > memo.length ? cat : memo; }, [])
.reduce((memo, cat) => { return cat.length > memo.length ? cat : memo; }, [])
.pluck('date')
.each(function (date) {
_(response.data).each(function (cat) {
var value = _(cat).find({ date: date });
.each((date) => {
_(response.data).each((cat) => {
let value = _(cat).find({ date: date });
if (_(value).isUndefined()) {
cat.push({
date: date,
@ -160,9 +171,10 @@ app.component('dashboard', {
}
});
})
.each(function (cat) {
cat = _(cat).sortBy(function (month) { return month.date; });
.each((cat) => {
cat = _(cat).sortBy((month) => { return month.date; });
});
ctrl.graphique = {
options: {
chart: {
@ -181,23 +193,45 @@ app.component('dashboard', {
useInteractiveGuideline: true,
interactiveLayer: {
dispatch: {
elementClick: function (t) {
console.log(ctrl.period);
elementClick: (t) => {
ctrl.period = t.pointXValue;
console.log(ctrl.period);
}
},
tooltip: {
contentGenerator: function (e) {
var format_line = function (serie) {
return "\n<tr>\n<td style=\"background-color: " + serie.color + "\"> </td>\n<td>" + serie.key + "</td>\n<td style=\"text-align: right; font-weight: bold;\">" + serie.value + "</td>\n</tr>\n";
contentGenerator: function(e) {
let format_line = (serie) => {
return `
<tr>
<td style="background-color: ${serie.color}"> </td>
<td>${serie.key}</td>
<td style="text-align: right; font-weight: bold;">${serie.value}</td>
</tr>
`;
};
var prepare_series = function (series) {
series.sort(function (s1, s2) { return s2.value - s1.value; });
return series.filter(function (s) { return s.value != 0; });
let prepare_series = (series) => {
series.sort((s1, s2) => { return s2.value - s1.value; });
return series.filter((s) => { return s.value != 0; });
};
var total = e.series.reduce(function (memo, serie) { return memo + serie.value; }, 0);
return "\n<h2>" + e.value + "</h2>\n<table>\n <tbody>\n " + prepare_series(e.series).map(function (s) { return format_line(s); }).join("") + "\n </tbody>\n <tfoot>\n <tr style=\"color: #ececec; background-color: " + (total < 0 ? 'green' : 'red') + "\">\n <td> </td>\n <td style=\"text-align: right; text-decoration: underline; font-weight: bold;\">Total</td>\n <td style=\"text-align: right; font-weight: bold;\">" + total + "</td>\n </tr>\n </tfoot>\n</table>\n";
let total = e.series.reduce((memo, serie) => { return memo + serie.value; }, 0);
return `
<h2>${e.value}</h2>
<table>
<tbody>
${prepare_series(e.series).map((s) => { return format_line(s); }).join("")}
</tbody>
<tfoot>
<tr style="color: #ececec; background-color: ${total < 0 ? 'green' : 'red'}">
<td> </td>
<td style="text-align: right; text-decoration: underline; font-weight: bold;">Total</td>
<td style="text-align: right; font-weight: bold;">${total}</td>
</tr>
</tfoot>
</table>
`;
}
}
}
@ -206,50 +240,140 @@ app.component('dashboard', {
data: _.chain(response.data)
.keys()
.reverse()
.map(function (key) {
.map((key) => {
return {
key: key,
values: _.chain(response.data[key])
.map(function (value) {
var date = new Date(value.date);
var period = is_monthly() ? date.getFullYear() + '-' + (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1) : date.getFullYear();
.map((value) => {
let date = new Date(value.date);
let period = is_monthly() ? date.getFullYear() + '-' + (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1) : date.getFullYear();
ctrl.periods.push(period);
return {
key: key,
x: period,
y: parseInt(value.amount)
};
})
.sortBy(function (item) { return item.x; })
.sortBy((item) => { return item.x; })
.value()
};
})
.value()
};
ctrl.periods = _.chain(ctrl.periods).uniq().sort().reverse().value();
ctrl.period = _(ctrl.periods).first();
});
};
API.accounts()
.then(function (response) {
ctrl.raw_accounts = response.data.sort(function (account) { return account.length; }).reverse();
ctrl.accounts = ctrl.raw_accounts.map(function (account_ary) { return account_ary.join(':'); });
.then((response) => {
ctrl.raw_accounts = response.data.sort((account) => { return account.length; }).reverse();
ctrl.accounts = ctrl.raw_accounts.map((account_ary) => { return account_ary.join(':'); });
ctrl.main_accounts_depths = _.chain(ctrl.raw_accounts)
.select(function (account) { return account.length == 1; })
.map(function (account) {
.select((account) => { return account.length == 1; })
.map((account) => {
return {
name: account[0],
depth: _(['Expenses']).contains(account[0]) ? 2 : _(['Income']).contains(account[0]) ? 1 : 0,
max_depth: _.chain(ctrl.raw_accounts)
.select(function (account2) { return account2[0] == account[0]; })
.reduce(function (memo, account3) { return account3.length > memo ? account3.length : memo; }, 0)
.select((account2) => { return account2[0] == account[0]; })
.reduce((memo, account3) => { return account3.length > memo ? account3.length : memo; }, 0)
.value()
};
})
.value();
ctrl.compute_selected_accounts();
});
}
],
template: "\n <div class=\"dashboard\">\n <div class=\"global-graph\" style=\"height: 450px;\">\n <div class=\"accounts\" style=\"width: 20%; height: 100%; float: left;\">\n <div style=\"width: 100%; float: left;\">\n <label><input type=\"radio\" ng:model=\"$ctrl.account_selection\" value=\"depth\" name=\"depth\"/>depth</label>\n <label><input type=\"radio\" ng:model=\"$ctrl.account_selection\" value=\"list\" name=\"list\"/>list</label>\n </div>\n <div style=\"width: 100%; height: 90%; float: left;\">\n <ul ng:if=\"$ctrl.account_selection == 'depth'\">\n <li ng:repeat=\"account in $ctrl.main_accounts_depths\">\n <label>{{account.name}} depth</label>\n <rzslider rz-slider-options=\"{floor: 0, ceil: account.max_depth, onEnd: $ctrl.compute_selected_accounts}\" rz-slider:model=\"account.depth\"></rzslider>\n </li>\n </ul>\n\n <select style=\"height: 100%; width: 100%;\" multiple\n ng:model=\"$ctrl.graphed_accounts\"\n ng:change=\"$ctrl.retrieve_graph_values($ctrl.graphed_accounts)\"\n ng:if=\"$ctrl.account_selection == 'list'\">\n <option ng:repeat=\"account in $ctrl.accounts\">{{account}}</option>\n </select>\n </div>\n\n <div style=\"width: 100%; float: left;\">\n <label><input type=\"radio\" ng:model=\"$ctrl.granularity\" value=\"monthly\" name=\"monthly\" ng:change=\"$ctrl.compute_selected_accounts()\" />monthly</label>\n <label><input type=\"radio\" ng:model=\"$ctrl.granularity\" value=\"yearly\" name=\"yearly\" ng:change=\"$ctrl.compute_selected_accounts()\" />yearly</label>\n </div>\n </div>\n\n <div class=\"graph\" style=\"width: 80%; float: left;\">\n <nvd3 data=\"$ctrl.graphique.data\"\n options=\"$ctrl.graphique.options\">\n </nvd3>\n </div>\n </div>\n\n <h1 style=\"text-align: center;\">\n <select ng:options=\"p as p for p in $ctrl.periods\" ng:model=\"$ctrl.period\"></select>\n </h1>\n\n <bucket categories=\"'Expenses Income Equity Liabilities'\" period=\"$ctrl.period\"></bucket>\n </div>\n"
});
template: `
<div class="dashboard">
<div class="global-graph" style="height: 450px;">
<div class="accounts" style="width: 20%; height: 100%; float: left;">
<div style="width: 100%; float: left;">
<label><input type="radio" ng:model="$ctrl.account_selection" value="depth" name="depth"/>depth</label>
<label><input type="radio" ng:model="$ctrl.account_selection" value="list" name="list"/>list</label>
</div>
<div style="width: 100%; height: 90%; float: left;">
<ul ng:if="$ctrl.account_selection == 'depth'">
<li ng:repeat="account in $ctrl.main_accounts_depths">
<label>{{account.name}} depth</label>
<rzslider rz-slider-options="{floor: 0, ceil: account.max_depth, onEnd: $ctrl.compute_selected_accounts}" rz-slider:model="account.depth"></rzslider>
</li>
</ul>
<select style="height: 100%; width: 100%;" multiple
ng:model="$ctrl.graphed_accounts"
ng:change="$ctrl.retrieve_graph_values($ctrl.graphed_accounts)"
ng:if="$ctrl.account_selection == 'list'">
<option ng:repeat="account in $ctrl.accounts">{{account}}</option>
</select>
</div>
<div style="width: 100%; float: left;">
<label><input type="radio" ng:model="$ctrl.granularity" value="monthly" name="monthly" ng:change="$ctrl.compute_selected_accounts()" />monthly</label>
<label><input type="radio" ng:model="$ctrl.granularity" value="yearly" name="yearly" ng:change="$ctrl.compute_selected_accounts()" />yearly</label>
</div>
</div>
<div class="graph" style="width: 80%; float: left;">
<nvd3 data="$ctrl.graphique.data"
options="$ctrl.graphique.options">
</nvd3>
</div>
</div>
<h1 style="text-align: center;">
<select ng:options="p as p for p in $ctrl.periods" ng:model="$ctrl.period"></select>
</h1>
<bucket categories="'Expenses Income Equity Liabilities'" period="$ctrl.period"></bucket>
</div>
`
});
// APIS
app.service('API',
['$http',
function($http) {
let API = this;
API.balance = function(period, categories, depth) {
return $http.get('/api/ledger/balance', {
params: {
period: period,
categories: categories,
depth: depth
}
});
};
API.register = function(period, categories) {
return $http.get('/api/ledger/register', {
params: {
period: period,
categories: categories
}
});
};
API.graph_values = function(period, granularity, categories) {
return $http.get('/api/ledger/graph_values', {
params: {
period: period,
granularity: granularity,
categories: categories
}
});
};
API.accounts = function() {
return $http.get('/api/ledger/accounts');
};
}]);

19
public/js/app.min.js vendored
View file

@ -1,19 +0,0 @@
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";
$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.Symbol=function(){var a=0;return function(c){return $jscomp.SYMBOL_PREFIX+(c||"")+a++}}();
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var c=0;return $jscomp.iteratorPrototype(function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}})};
$jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};$jscomp.iteratorFromArray=function(a,c){$jscomp.initSymbolIterator();a instanceof String&&(a+="");var b=0,e={next:function(){if(b<a.length){var d=b++;return{value:c(d,a[d]),done:!1}}e.next=function(){return{done:!0,value:void 0}};return e.next()}};e[Symbol.iterator]=function(){return e};return e};
$jscomp.polyfill=function(a,c,b,e){if(c){b=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in b||(b[d]={});b=b[d]}a=a[a.length-1];e=b[a];c=c(e);c!=e&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.values",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(a,b){return b})}},"es6","es3");
$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var f=a[d];if(c.call(b,f,d,a))return{i:d,v:f}}return{i:-1,v:void 0}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");$jscomp.polyfill("Array.prototype.keys",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(a){return a})}},"es6","es3");
var app=angular.module("app",["ui.router","nvd3","angularMoment","chieffancypants.loadingBar","rzModule"]).config(["$stateProvider","$urlRouterProvider",function(a,c){a.state("app",{url:"",component:"dashboard"})}]);
app.service("API",["$http",function(a){this.balance=function(c,b,e){return a.get("/api/ledger/balance",{params:{period:c,categories:b,depth:e}})};this.register=function(c,b){return a.get("/api/ledger/register",{params:{period:c,categories:b}})};this.graph_values=function(c,b,e){return a.get("/api/ledger/graph_values",{params:{period:c,granularity:b,categories:e}})};this.accounts=_.memoize(function(){return a.get("/api/ledger/accounts")})}]);
app.component("bucket",{bindings:{categories:"\x3c",period:"\x3c"},controller:["$filter","API",function(a,c){var b=this;b.depth=99;b.graph_options={chart:{type:"multiBarHorizontalChart",height:600,margin:{top:20,right:20,bottom:20,left:200},x:function(a){return a.account},y:function(a){return a.amount},valueFormat:function(a){return a+" \u20ac"},showYAxis:!1,showValues:!0,showLegend:!0,showControls:!1,showTooltipPercent:!0,duration:500,labelThreshold:.01,labelSunbeamLayout:!0,labelsOutside:!0,multibar:{dispatch:{elementClick:function(a){c.register(b.period,
a.data.account).then(function(b){swal({title:b.data.key,html:'\n \x3ctable style\x3d"width: 100%;"\x3e\n \x3cthead\x3e\n \x3ctr\x3e\n \x3ctd\x3eDate\x3c/td\x3e\x3ctd\x3ePayee\x3c/td\x3e\x3ctd\x3eAmount\x3c/td\x3e\n \x3c/tr\x3e\n \x3c/thead\x3e\n \x3ctbody\x3e\n '+b.data.values.map(function(a){return"\n \x3ctr\x3e\n \x3ctd\x3e"+a.date+"\x3c/td\x3e\n \x3ctd\x3e"+a.payee+'\x3c/td\x3e\n \x3ctd style\x3d"text-align: right;"\x3e'+a.amount+" "+a.currency+"\x3c/td\x3e\n \x3c/tr\x3e"}).join("")+
'\n \x3c/tbody\x3e\n \x3ctfoot\x3e\x3ctd\x3e\x3c/td\x3e\x3ctd\x3eTotal\x3c/td\x3e\x3ctd style\x3d"text-align: right;"\x3e'+a.data.amount+" \u20ac\x3c/td\x3e\x3c/tfoot\x3e\n \x3c/table\x3e"})},function(a){alert("error!")})}}}}};b.$onChanges=function(a){a.period&&void 0!=a.period.currentValue&&c.balance(b.period,b.categories,b.depth).then(function(a){b.raw_data=_(a.data).sortBy(function(a){return a.name});b.graph_options.chart.height=60+25*b.raw_data.length;b.data=b.categories.split(" ").map(function(a){return{key:a,
values:_(b.raw_data).select(function(b){return b.account.match("^"+a+":.*")})}})})}}],template:'\n \x3cdiv class\x3d"bucket"\x3e\n \x3cdiv class\x3d"content"\x3e\n \x3cdiv class\x3d"graph"\x3e\n \x3cnvd3 data\x3d"$ctrl.data"\n options\x3d"$ctrl.graph_options"\x3e\n \x3c/nvd3\x3e\n \x3c/div\x3e\n \x3c/div\x3e\n \x3c/div\x3e\n'});
app.component("dashboard",{controller:["$filter","API",function(a,c){var b=this;b.granularity="monthly";b.account_selection="depth";b.compute_selected_accounts=function(){b.graphed_accounts=_.chain(b.main_accounts_depths).map(function(a){return 1>a.depth?null:_(b.raw_accounts).select(function(b){return b[0]==a.name&&b.length==a.depth}).map(function(a){return a.join(":")})}).compact().flatten().value();b.retrieve_graph_values(b.graphed_accounts)};b.retrieve_graph_values=function(a){c.graph_values("",
b.granularity,a.join(" ")).then(function(a){b.periods=[];_.chain(a.data).reduce(function(a,b){return b.length>a.length?b:a},[]).pluck("date").each(function(b){_(a.data).each(function(a){var c=_(a).find({date:b});_(c).isUndefined()&&a.push({date:b,amount:0,currency:_(a).first().currency})})}).each(function(a){a=_(a).sortBy(function(a){return a.date})});b.graphique={options:{chart:{type:"multiBarChart",height:450,stacked:!0,showControls:!0,showLegend:!0,showLabels:!0,showValues:!0,showYAxis:!0,duration:500,
reduceXTicks:!1,rotateLabels:-67,labelSunbeamLayout:!0,useInteractiveGuideline:!0,interactiveLayer:{dispatch:{elementClick:function(a){console.log(b.period);b.period=a.pointXValue;console.log(b.period)}},tooltip:{contentGenerator:function(a){var b=a.series.reduce(function(a,b){return a+b.value},0);return"\n\x3ch2\x3e"+a.value+"\x3c/h2\x3e\n\x3ctable\x3e\n \x3ctbody\x3e\n "+function(a){a.sort(function(a,b){return b.value-a.value});return a.filter(function(a){return 0!=a.value})}(a.series).map(function(a){return'\n\x3ctr\x3e\n\x3ctd style\x3d"background-color: '+
a.color+'"\x3e \x3c/td\x3e\n\x3ctd\x3e'+a.key+'\x3c/td\x3e\n\x3ctd style\x3d"text-align: right; font-weight: bold;"\x3e'+a.value+"\x3c/td\x3e\n\x3c/tr\x3e\n"}).join("")+'\n \x3c/tbody\x3e\n \x3ctfoot\x3e\n \x3ctr style\x3d"color: #ececec; background-color: '+(0>b?"green":"red")+'"\x3e\n \x3ctd\x3e \x3c/td\x3e\n \x3ctd style\x3d"text-align: right; text-decoration: underline; font-weight: bold;"\x3eTotal\x3c/td\x3e\n \x3ctd style\x3d"text-align: right; font-weight: bold;"\x3e'+b+
"\x3c/td\x3e\n \x3c/tr\x3e\n \x3c/tfoot\x3e\n\x3c/table\x3e\n"}}}}},data:_.chain(a.data).keys().reverse().map(function(c){return{key:c,values:_.chain(a.data[c]).map(function(a){var d=new Date(a.date);d="monthly"==b.granularity?d.getFullYear()+"-"+(9>d.getMonth()?"0":"")+(d.getMonth()+1):d.getFullYear();b.periods.push(d);return{key:c,x:d,y:parseInt(a.amount)}}).sortBy(function(a){return a.x}).value()}}).value()};b.periods=_.chain(b.periods).uniq().sort().reverse().value();b.period=_(b.periods).first()})};
c.accounts().then(function(a){b.raw_accounts=a.data.sort(function(a){return a.length}).reverse();b.accounts=b.raw_accounts.map(function(a){return a.join(":")});b.main_accounts_depths=_.chain(b.raw_accounts).select(function(a){return 1==a.length}).map(function(a){return{name:a[0],depth:_(["Expenses"]).contains(a[0])?2:_(["Income"]).contains(a[0])?1:0,max_depth:_.chain(b.raw_accounts).select(function(b){return b[0]==a[0]}).reduce(function(a,b){return b.length>a?b.length:a},0).value()}}).value();b.compute_selected_accounts()})}],
template:'\n \x3cdiv class\x3d"dashboard"\x3e\n \x3cdiv class\x3d"global-graph" style\x3d"height: 450px;"\x3e\n \x3cdiv class\x3d"accounts" style\x3d"width: 20%; height: 100%; float: left;"\x3e\n \x3cdiv style\x3d"width: 100%; float: left;"\x3e\n \x3clabel\x3e\x3cinput type\x3d"radio" ng:model\x3d"$ctrl.account_selection" value\x3d"depth" name\x3d"depth"/\x3edepth\x3c/label\x3e\n \x3clabel\x3e\x3cinput type\x3d"radio" ng:model\x3d"$ctrl.account_selection" value\x3d"list" name\x3d"list"/\x3elist\x3c/label\x3e\n \x3c/div\x3e\n \x3cdiv style\x3d"width: 100%; height: 90%; float: left;"\x3e\n \x3cul ng:if\x3d"$ctrl.account_selection \x3d\x3d \'depth\'"\x3e\n \x3cli ng:repeat\x3d"account in $ctrl.main_accounts_depths"\x3e\n \x3clabel\x3e{{account.name}} depth\x3c/label\x3e\n \x3crzslider rz-slider-options\x3d"{floor: 0, ceil: account.max_depth, onEnd: $ctrl.compute_selected_accounts}" rz-slider:model\x3d"account.depth"\x3e\x3c/rzslider\x3e\n \x3c/li\x3e\n \x3c/ul\x3e\n\n \x3cselect style\x3d"height: 100%; width: 100%;" multiple\n ng:model\x3d"$ctrl.graphed_accounts"\n ng:change\x3d"$ctrl.retrieve_graph_values($ctrl.graphed_accounts)"\n ng:if\x3d"$ctrl.account_selection \x3d\x3d \'list\'"\x3e\n \x3coption ng:repeat\x3d"account in $ctrl.accounts"\x3e{{account}}\x3c/option\x3e\n \x3c/select\x3e\n \x3c/div\x3e\n\n \x3cdiv style\x3d"width: 100%; float: left;"\x3e\n \x3clabel\x3e\x3cinput type\x3d"radio" ng:model\x3d"$ctrl.granularity" value\x3d"monthly" name\x3d"monthly" ng:change\x3d"$ctrl.compute_selected_accounts()" /\x3emonthly\x3c/label\x3e\n \x3clabel\x3e\x3cinput type\x3d"radio" ng:model\x3d"$ctrl.granularity" value\x3d"yearly" name\x3d"yearly" ng:change\x3d"$ctrl.compute_selected_accounts()" /\x3eyearly\x3c/label\x3e\n \x3c/div\x3e\n \x3c/div\x3e\n\n \x3cdiv class\x3d"graph" style\x3d"width: 80%; float: left;"\x3e\n \x3cnvd3 data\x3d"$ctrl.graphique.data"\n options\x3d"$ctrl.graphique.options"\x3e\n \x3c/nvd3\x3e\n \x3c/div\x3e\n \x3c/div\x3e\n\n \x3ch1 style\x3d"text-align: center;"\x3e\n \x3cselect ng:options\x3d"p as p for p in $ctrl.periods" ng:model\x3d"$ctrl.period"\x3e\x3c/select\x3e\n \x3c/h1\x3e\n\n \x3cbucket categories\x3d"\'Expenses Income Equity Liabilities\'" period\x3d"$ctrl.period"\x3e\x3c/bucket\x3e\n \x3c/div\x3e\n'});

View file

@ -1,20 +0,0 @@
/// <reference path="../vendor/node_modules/@types/angular/index.d.ts" />
/// <reference path="../vendor/node_modules/@types/underscore/index.d.ts" />
/// <reference path="../vendor/node_modules/@types/sweetalert/index.d.ts" />
var app = angular.module('app',
['ui.router',
'nvd3',
'angularMoment',
'chieffancypants.loadingBar',
'rzModule',
])
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: '',
component: 'dashboard'
});
}
]);

View file

@ -1,101 +0,0 @@
app.component('bucket',
{
bindings: {
categories: '<',
period: '<'
},
controller: ['$filter', 'API',
function($filter, API) {
let ctrl = this;
ctrl.depth = 99;
ctrl.graph_options = {
chart: {
type: 'multiBarHorizontalChart',
height: 600,
margin: {
top: 20,
right: 20,
bottom: 20,
left: 200
},
x: (d) => { return d.account; },
y: (d) => { return d.amount; },
valueFormat: (d) => { return `${d}`; },
showYAxis: false,
showValues: true,
showLegend: true,
showControls: false,
showTooltipPercent: true,
duration: 500,
labelThreshold: 0.01,
labelSunbeamLayout: true,
labelsOutside: true,
multibar: {
dispatch: {
elementClick: (event) => {
API.register(ctrl.period, event.data.account)
.then(function success(response) {
let format_transaction = (transaction) => {
return `
<tr>
<td>${transaction.date}</td>
<td>${transaction.payee}</td>
<td style="text-align: right;">${transaction.amount} ${transaction.currency}</td>
</tr>`;
};
swal({
title: response.data.key,
html: `
<table style="width: 100%;">
<thead>
<tr>
<td>Date</td><td>Payee</td><td>Amount</td>
</tr>
</thead>
<tbody>
${response.data.values.map(function(transaction) { return format_transaction(transaction); }).join("")}
</tbody>
<tfoot><td></td><td>Total</td><td style="text-align: right;">${event.data.amount} </td></tfoot>
</table>`});
}, function error(response) { alert("error!"); });
}
}
}
}
};
ctrl.$onChanges = (changes) => {
if (changes.period && changes.period.currentValue != undefined) {
API.balance(ctrl.period, ctrl.categories, ctrl.depth)
.then((response) => {
ctrl.raw_data = _(response.data)
.sortBy((account) => { return account.name; });
ctrl.graph_options.chart.height = 60 + (25 * ctrl.raw_data.length);
ctrl.data = ctrl.categories.split(' ').map((category) => {
return {
key: category,
values: _(ctrl.raw_data).select((line) => { return line.account.match(`^${category}:.*`); })
}
})
});
}
};
}
],
template: `
<div class="bucket">
<div class="content">
<div class="graph">
<nvd3 data="$ctrl.data"
options="$ctrl.graph_options">
</nvd3>
</div>
</div>
</div>
`
});

View file

@ -1,217 +0,0 @@
app.component('dashboard',
{
controller: ['$filter', 'API',
function($filter, API) {
let ctrl = this;
ctrl.granularity = "monthly";
ctrl.account_selection = "depth";
let is_monthly = () => { return ctrl.granularity == "monthly"; };
ctrl.compute_selected_accounts = () => {
ctrl.graphed_accounts = _.chain(ctrl.main_accounts_depths)
.map((account) => {
if (account.depth < 1) {
return null;
} else {
return _(ctrl.raw_accounts)
.select((account2) => {
return account2[0] == account.name && account2.length == account.depth;
})
.map((account3) => { return account3.join(":"); });
}
})
.compact()
.flatten()
.value();
ctrl.retrieve_graph_values(ctrl.graphed_accounts);
};
ctrl.retrieve_graph_values = (categories) => {
API.graph_values("", ctrl.granularity, categories.join(" "))
.then((response) => {
ctrl.periods = [];
_.chain(response.data)
.reduce((memo, cat) => { return cat.length > memo.length ? cat : memo; }, [])
.pluck('date')
.each((date) => {
_(response.data).each((cat) => {
let value = _(cat).find({ date: date });
if (_(value).isUndefined()) {
cat.push({
date: date,
amount: 0,
currency: _(cat).first().currency
});
}
});
})
.each((cat) => {
cat = _(cat).sortBy((month) => { return month.date; });
});
ctrl.graphique = {
options: {
chart: {
type: 'multiBarChart',
height: 450,
stacked: true,
showControls: true,
showLegend: true,
showLabels: true,
showValues: true,
showYAxis: true,
duration: 500,
reduceXTicks: false,
rotateLabels: -67,
labelSunbeamLayout: true,
useInteractiveGuideline: true,
interactiveLayer: {
dispatch: {
elementClick: (t) => {
console.log(ctrl.period)
ctrl.period = t.pointXValue;
console.log(ctrl.period)
}
},
tooltip: {
contentGenerator: function(e) {
let format_line = (serie) => {
return `
<tr>
<td style="background-color: ${serie.color}"> </td>
<td>${serie.key}</td>
<td style="text-align: right; font-weight: bold;">${serie.value}</td>
</tr>
`;
};
let prepare_series = (series) => {
series.sort((s1, s2) => { return s2.value - s1.value; });
return series.filter((s) => { return s.value != 0; });
};
let total = e.series.reduce((memo, serie) => { return memo + serie.value; }, 0);
return `
<h2>${e.value}</h2>
<table>
<tbody>
${prepare_series(e.series).map((s) => { return format_line(s); }).join("")}
</tbody>
<tfoot>
<tr style="color: #ececec; background-color: ${total < 0 ? 'green' : 'red'}">
<td> </td>
<td style="text-align: right; text-decoration: underline; font-weight: bold;">Total</td>
<td style="text-align: right; font-weight: bold;">${total}</td>
</tr>
</tfoot>
</table>
`;
}
}
}
}
},
data: _.chain(response.data)
.keys()
.reverse()
.map((key) => {
return {
key: key,
values: _.chain(response.data[key])
.map((value) => {
let date = new Date(value.date);
let period = is_monthly() ? date.getFullYear() + '-' + (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1) : date.getFullYear();
ctrl.periods.push(period);
return {
key: key,
x: period,
y: parseInt(value.amount)
};
})
.sortBy((item) => { return item.x; })
.value()
};
})
.value()
};
ctrl.periods = _.chain(ctrl.periods).uniq().sort().reverse().value();
ctrl.period = _(ctrl.periods).first();
});
};
API.accounts()
.then((response) => {
ctrl.raw_accounts = response.data.sort((account) => { return account.length; }).reverse();
ctrl.accounts = ctrl.raw_accounts.map((account_ary) => { return account_ary.join(':'); });
ctrl.main_accounts_depths = _.chain(ctrl.raw_accounts)
.select((account) => { return account.length == 1; })
.map((account) => {
return {
name: account[0],
depth: _(['Expenses']).contains(account[0]) ? 2 : _(['Income']).contains(account[0]) ? 1 : 0,
max_depth: _.chain(ctrl.raw_accounts)
.select((account2) => { return account2[0] == account[0] })
.reduce((memo, account3) => { return account3.length > memo ? account3.length : memo; }, 0)
.value()
};
})
.value();
ctrl.compute_selected_accounts();
});
}
],
template: `
<div class="dashboard">
<div class="global-graph" style="height: 450px;">
<div class="accounts" style="width: 20%; height: 100%; float: left;">
<div style="width: 100%; float: left;">
<label><input type="radio" ng:model="$ctrl.account_selection" value="depth" name="depth"/>depth</label>
<label><input type="radio" ng:model="$ctrl.account_selection" value="list" name="list"/>list</label>
</div>
<div style="width: 100%; height: 90%; float: left;">
<ul ng:if="$ctrl.account_selection == 'depth'">
<li ng:repeat="account in $ctrl.main_accounts_depths">
<label>{{account.name}} depth</label>
<rzslider rz-slider-options="{floor: 0, ceil: account.max_depth, onEnd: $ctrl.compute_selected_accounts}" rz-slider:model="account.depth"></rzslider>
</li>
</ul>
<select style="height: 100%; width: 100%;" multiple
ng:model="$ctrl.graphed_accounts"
ng:change="$ctrl.retrieve_graph_values($ctrl.graphed_accounts)"
ng:if="$ctrl.account_selection == 'list'">
<option ng:repeat="account in $ctrl.accounts">{{account}}</option>
</select>
</div>
<div style="width: 100%; float: left;">
<label><input type="radio" ng:model="$ctrl.granularity" value="monthly" name="monthly" ng:change="$ctrl.compute_selected_accounts()" />monthly</label>
<label><input type="radio" ng:model="$ctrl.granularity" value="yearly" name="yearly" ng:change="$ctrl.compute_selected_accounts()" />yearly</label>
</div>
</div>
<div class="graph" style="width: 80%; float: left;">
<nvd3 data="$ctrl.graphique.data"
options="$ctrl.graphique.options">
</nvd3>
</div>
</div>
<h1 style="text-align: center;">
<select ng:options="p as p for p in $ctrl.periods" ng:model="$ctrl.period"></select>
</h1>
<bucket categories="'Expenses Income Equity Liabilities'" period="$ctrl.period"></bucket>
</div>
`
});

View file

@ -1,38 +0,0 @@
app.service('API',
['$http',
function($http) {
let API = this;
API.balance = function(period, categories, depth) {
return $http.get('/api/ledger/balance', {
params: {
period: period,
categories: categories,
depth: depth
}
});
};
API.register = function(period, categories) {
return $http.get('/api/ledger/register', {
params: {
period: period,
categories: categories
}
});
};
API.graph_values = function(period, granularity, categories) {
return $http.get('/api/ledger/graph_values', {
params: {
period: period,
granularity: granularity,
categories: categories
}
});
};
API.accounts = _.memoize(function() {
return $http.get('/api/ledger/accounts');
});
}]);

View file

@ -1,18 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"module": "none",
"declaration": false,
"removeComments": true,
"sourceMap": false,
"outFile": "js/app.js",
"lib": [
"dom","es2015"
],
},
"include": [
"ts/app.ts",
"ts/services/*.ts",
"ts/components/*.ts",
],
}

View file

@ -1,23 +0,0 @@
{
"baseIndentSize": 0,
"indentSize": 2,
"tabSize": 2,
"indentStyle": 2,
"newLineCharacter": "\n",
"convertTabsToSpaces": true,
"insertSpaceAfterCommaDelimiter": true,
"insertSpaceAfterSemicolonInForStatements": true,
"insertSpaceBeforeAndAfterBinaryOperators": true,
"insertSpaceAfterConstructor": false,
"insertSpaceAfterKeywordsInControlFlowStatements": true,
"insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": true,
"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": true,
"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true,
"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true,
"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": true,
"insertSpaceAfterTypeAssertion": true,
"insertSpaceBeforeFunctionParenthesis": false,
"placeOpenBraceOnNewLineForFunctions": false,
"placeOpenBraceOnNewLineForControlBlocks": false,
}

View file

@ -1 +0,0 @@
../google-closure-compiler-js/cmd.js

View file

@ -1 +0,0 @@
../typescript/bin/tsc

View file

@ -1 +0,0 @@
../typescript/bin/tsserver

1250
public/vendor/node_modules/.package-lock.json generated vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) Microsoft Corporation. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

View file

@ -1,16 +0,0 @@
# Installation
> `npm install --save @types/angular`
# Summary
This package contains type definitions for Angular JS (http://angularjs.org).
# Details
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/angular
Additional Details
* Last updated: Wed, 19 Sep 2018 00:30:38 GMT
* Dependencies: none
* Global values: angular
# Credits
These definitions were written by Diego Vilar <https://github.com/diegovilar>, Georgii Dolzhykov <https://github.com/thorn0>, Caleb St-Denis <https://github.com/calebstdenis>, Leonard Thieu <https://github.com/leonard-thieu>, Steffen Kowalski <https://github.com/scipper>.

File diff suppressed because it is too large Load diff

View file

@ -1,825 +0,0 @@
// Project: http://jquery.com/
// Definitions by: Boris Yankov <https://github.com/borisyankov/>
// Christian Hoffmeister <https://github.com/choffmeister>
// Steve Fenton <https://github.com/Steve-Fenton>
// Diullei Gomes <https://github.com/Diullei>
// Tass Iliopoulos <https://github.com/tasoili>
// Jason Swearingen <https://github.com/jasons-novaleaf>
// Sean Hill <https://github.com/seanski>
// Guus Goossens <https://github.com/Guuz>
// Kelly Summerlin <https://github.com/ksummerlin>
// Basarat Ali Syed <https://github.com/basarat>
// Nicholas Wolverson <https://github.com/nwolverson>
// Derek Cicerone <https://github.com/derekcicerone>
// Andrew Gaspar <https://github.com/AndrewGaspar>
// Seikichi Kondo <https://github.com/seikichi>
// Benjamin Jackman <https://github.com/benjaminjackman>
// Poul Sorensen <https://github.com/s093294>
// Josh Strobl <https://github.com/JoshStrobl>
// John Reilly <https://github.com/johnnyreilly/>
// Dick van den Brink <https://github.com/DickvdBrink>
// Thomas Schulz <https://github.com/King2500>
// Leonard Thieu <https://github.com/leonard-thieu>
// Andre Wiggins <https://github.com/andrewiggins>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// Definitions copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0480c5ec87fab41aa23047a02b27f0ea71aaf975/types/jquery/v2/index.d.ts
interface JQLite extends JQuery {
[index: number]: HTMLElement;
}
interface JQuery {
/**
* Adds the specified class(es) to each of the set of matched elements.
*
* @param className One or more space-separated classes to be added to the class attribute of each matched element.
* @see {@link https://api.jquery.com/addClass/#addClass-className}
*/
addClass(className: string): this;
/**
* Insert content, specified by the parameter, after each element in the set of matched elements.
*
* @param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert after each element in the set of matched elements.
* @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.
* @see {@link https://api.jquery.com/after/#after-content-content}
*/
after(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): this;
/**
* Insert content, specified by the parameter, after each element in the set of matched elements.
*
* @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
* @see {@link https://api.jquery.com/after/#after-function}
*/
after(func: (index: number, html: string) => string | Element | JQuery): this;
/**
* Insert content, specified by the parameter, to the end of each element in the set of matched elements.
*
* @param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.
* @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.
* @see {@link https://api.jquery.com/append/#append-content-content}
*/
append(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): this;
/**
* Insert content, specified by the parameter, to the end of each element in the set of matched elements.
*
* @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
* @see {@link https://api.jquery.com/append/#append-function}
*/
append(func: (index: number, html: string) => string | Element | JQuery): this;
/**
* Get the value of an attribute for the first element in the set of matched elements.
*
* @param attributeName The name of the attribute to get.
* @see {@link https://api.jquery.com/attr/#attr-attributeName}
*/
attr(attributeName: string): string;
/**
* Set one or more attributes for the set of matched elements.
*
* @param attributeName The name of the attribute to set.
* @param value A value to set for the attribute. If this is `null`, the attribute will be deleted.
* @see {@link https://api.jquery.com/attr/#attr-attributeName-value}
*/
attr(attributeName: string, value: string | number | null): this;
/**
* Set one or more attributes for the set of matched elements.
*
* @param attributes An object of attribute-value pairs to set.
* @see {@link https://api.jquery.com/attr/#attr-attributes}
*/
attr(attributes: Object): this;
/**
* Attach a handler to an event for the elements.
*
* @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
* @param handler A function to execute each time the event is triggered.
* @see {@link https://api.jquery.com/bind/#bind-eventType-eventData-handler}
*/
bind(eventType: string, handler: (eventObject: JQueryEventObject) => any): this;
/**
* Attach a handler to an event for the elements.
*
* @param eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
* @param preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
* @see {@link https://api.jquery.com/bind/#bind-eventType-eventData-preventBubble}
*/
bind(eventType: string, preventBubble: boolean): this;
/**
* Attach a handler to an event for the elements.
*
* @param events An object containing one or more DOM event types and functions to execute for them.
* @see {@link https://api.jquery.com/bind/#bind-events}
*/
bind(events: any): this;
/**
* Get the children of each element in the set of matched elements, optionally filtered by a selector.
*
* @see {@link https://api.jquery.com/children/}
*/
children(): this;
/**
* Create a deep copy of the set of matched elements.
*
* @param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.
* @param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).
* @see {@link https://api.jquery.com/clone/}
*/
clone(withDataAndEvents?: boolean, deepWithDataAndEvents?: boolean): this;
/**
* Get the children of each element in the set of matched elements, including text and comment nodes.
* @see {@link https://api.jquery.com/contents/}
*/
contents(): this;
/**
* Get the value of style properties for the first element in the set of matched elements.
*
* @param propertyName A CSS property.
* @see {@link https://api.jquery.com/css/#css-propertyName}
*/
css(propertyName: string): string;
/**
* Get the value of style properties for the first element in the set of matched elements.
* Results in an object of property-value pairs.
*
* @param propertyNames An array of one or more CSS properties.
* @see {@link https://api.jquery.com/css/#css-propertyNames}
*/
css(propertyNames: string[]): any;
/**
* Set one or more CSS properties for the set of matched elements.
*
* @param propertyName A CSS property name.
* @param value A value to set for the property.
* @see {@link https://api.jquery.com/css/#css-propertyName-value}
*/
css(propertyName: string, value: string | number): this;
/**
* Set one or more CSS properties for the set of matched elements.
*
* @param propertyName A CSS property name.
* @param value A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
* @see {@link https://api.jquery.com/css/#css-propertyName-function}
*/
css(propertyName: string, value: (index: number, value: string) => string | number): this;
/**
* Set one or more CSS properties for the set of matched elements.
*
* @param properties An object of property-value pairs to set.
* @see {@link https://api.jquery.com/css/#css-properties}
*/
css(properties: JQLiteCssProperties): this;
/**
* Store arbitrary data associated with the matched elements.
*
* @param key A string naming the piece of data to set.
* @param value The new data value; it can be any JavaScript type including Array or Object.
* @see {@link https://api.jquery.com/data/#data-key-value}
*/
data(key: string, value: any): this;
/**
* Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
*
* @param key Name of the data stored.
* @see {@link https://api.jquery.com/data/#data-key}
*/
data(key: string): any;
/**
* Store arbitrary data associated with the matched elements.
*
* @param obj An object of key-value pairs of data to update.
* @see {@link https://api.jquery.com/data/#data-obj}
*/
data(obj: { [key: string]: any; }): this;
/**
* Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
* @see {@link https://api.jquery.com/data/#data}
*/
data(): any;
/**
* Remove the set of matched elements from the DOM.
*
* @param selector A selector expression that filters the set of matched elements to be removed.
* @see {@link https://api.jquery.com/detach/}
*/
detach(selector?: string): this;
/**
* Remove all child nodes of the set of matched elements from the DOM.
* @see {@link https://api.jquery.com/empty/}
*/
empty(): this;
/**
* Reduce the set of matched elements to the one at the specified index.
*
* @param index An integer indicating the 0-based position of the element. OR An integer indicating the position of the element, counting backwards from the last element in the set.
* @see {@link https://api.jquery.com/eq/}
*/
eq(index: number): this;
/**
* Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
*
* @param selector A string containing a selector expression to match elements against.
* @see {@link https://api.jquery.com/find/#find-selector}
*/
find(selector: string): this;
find(element: any): this;
find(obj: JQuery): this;
/**
* Determine whether any of the matched elements are assigned the given class.
*
* @param className The class name to search for.
* @see {@link https://api.jquery.com/hasClass/}
*/
hasClass(className: string): boolean;
/**
* Get the HTML contents of the first element in the set of matched elements.
* @see {@link https://api.jquery.com/html/#html}
*/
html(): string;
/**
* Set the HTML contents of each element in the set of matched elements.
*
* @param htmlString A string of HTML to set as the content of each matched element.
* @see {@link https://api.jquery.com/html/#html-htmlString}
*/
html(htmlString: string): this;
/**
* Set the HTML contents of each element in the set of matched elements.
*
* @param func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.
* @see {@link https://api.jquery.com/html/#html-function}
*/
html(func: (index: number, oldhtml: string) => string): this;
/**
* Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
*
* @see {@link https://api.jquery.com/next/}
*/
next(): this;
/**
* Attach an event handler function for one or more events to the selected elements.
*
* @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
* @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. Rest parameter args is for optional parameters passed to jQuery.trigger(). Note that the actual parameters on the event handler function must be marked as optional (? syntax).
* @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
*/
on(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): this;
/**
* Attach an event handler function for one or more events to the selected elements.
*
* @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
* @param data Data to be passed to the handler in event.data when an event is triggered.
* @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
* @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
*/
on(events: string, data: any, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): this;
/**
* Attach an event handler function for one or more events to the selected elements.
*
* @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
* @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
* @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
* @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
*/
on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): this;
/**
* Attach an event handler function for one or more events to the selected elements.
*
* @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
* @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
* @param data Data to be passed to the handler in event.data when an event is triggered.
* @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
* @see {@link https://api.jquery.com/on/#on-events-selector-data-handler}
*/
on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): this;
/**
* Attach an event handler function for one or more events to the selected elements.
*
* @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
* @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
* @param data Data to be passed to the handler in event.data when an event occurs.
* @see {@link https://api.jquery.com/on/#on-events-selector-data}
*/
on(events: { [key: string]: (eventObject: JQueryEventObject, ...args: any[]) => any; }, selector?: string, data?: any): this;
/**
* Attach an event handler function for one or more events to the selected elements.
*
* @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
* @param data Data to be passed to the handler in event.data when an event occurs.
* @see {@link https://api.jquery.com/on/#on-events-selector-data}
*/
on(events: { [key: string]: (eventObject: JQueryEventObject, ...args: any[]) => any; }, data?: any): this;
/**
* Remove an event handler.
* @see {@link https://api.jquery.com/off/#off}
*/
off(): this;
/**
* Remove an event handler.
*
* @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
* @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
* @param handler A handler function previously attached for the event(s), or the special value false.
* @see {@link https://api.jquery.com/off/#off-events-selector-handler}
*/
off(events: string, selector?: string, handler?: (eventObject: JQueryEventObject) => any): this;
/**
* Remove an event handler.
*
* @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
* @param handler A handler function previously attached for the event(s), or the special value false. Takes handler with extra args that can be attached with on().
* @see {@link https://api.jquery.com/off/#off-events-selector-handler}
*/
off(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): this;
/**
* Remove an event handler.
*
* @param events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
* @param handler A handler function previously attached for the event(s), or the special value false.
* @see {@link https://api.jquery.com/off/#off-events-selector-handler}
*/
off(events: string, handler: (eventObject: JQueryEventObject) => any): this;
/**
* Remove an event handler.
*
* @param events An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).
* @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
* @see {@link https://api.jquery.com/off/#off-events-selector}
*/
off(events: { [key: string]: any; }, selector?: string): this;
/**
* Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
*
* @param events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
* @param handler A function to execute at the time the event is triggered.
* @see {@link https://api.jquery.com/one/#one-events-data-handler}
*/
one(events: string, handler: (eventObject: JQueryEventObject) => any): this;
/**
* Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
*
* @param events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
* @param data An object containing data that will be passed to the event handler.
* @param handler A function to execute at the time the event is triggered.
* @see {@link https://api.jquery.com/one/#one-events-data-handler}
*/
one(events: string, data: Object, handler: (eventObject: JQueryEventObject) => any): this;
/**
* Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
*
* @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
* @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
* @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
* @see {@link https://api.jquery.com/one/#one-events-selector-data-handler}
*/
one(events: string, selector: string, handler: (eventObject: JQueryEventObject) => any): this;
/**
* Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
*
* @param events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
* @param selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
* @param data Data to be passed to the handler in event.data when an event is triggered.
* @param handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
* @see {@link https://api.jquery.com/one/#one-events-selector-data-handler}
*/
one(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject) => any): this;
/**
* Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
*
* @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
* @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
* @param data Data to be passed to the handler in event.data when an event occurs.
* @see {@link https://api.jquery.com/one/#one-events-selector-data}
*/
one(events: { [key: string]: any; }, selector?: string, data?: any): this;
/**
* Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
*
* @param events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
* @param data Data to be passed to the handler in event.data when an event occurs.
* @see {@link https://api.jquery.com/one/#one-events-selector-data}
*/
one(events: { [key: string]: any; }, data?: any): this;
/**
* Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
*
* @see {@link https://api.jquery.com/parent/}
*/
parent(): this;
/**
* Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
*
* @param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.
* @param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.
* @see {@link https://api.jquery.com/prepend/#prepend-content-content}
*/
prepend(content1: JQuery | any[] | Element | DocumentFragment | Text | string, ...content2: any[]): this;
/**
* Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
*
* @param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
* @see {@link https://api.jquery.com/prepend/#prepend-function}
*/
prepend(func: (index: number, html: string) => string | Element | JQuery): this;
/**
* Get the value of a property for the first element in the set of matched elements.
*
* @param propertyName The name of the property to get.
* @see {@link https://api.jquery.com/prop/#prop-propertyName}
*/
prop(propertyName: string): any;
/**
* Set one or more properties for the set of matched elements.
*
* @param propertyName The name of the property to set.
* @param value A value to set for the property.
* @see {@link https://api.jquery.com/prop/#prop-propertyName-value}
*/
prop(propertyName: string, value: string | number | boolean): this;
/**
* Set one or more properties for the set of matched elements.
*
* @param properties An object of property-value pairs to set.
* @see {@link https://api.jquery.com/prop/#prop-properties}
*/
prop(properties: Object): this;
/**
* Set one or more properties for the set of matched elements.
*
* @param propertyName The name of the property to set.
* @param func A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.
* @see {@link https://api.jquery.com/prop/#prop-propertyName-function}
*/
prop(propertyName: string, func: (index: number, oldPropertyValue: any) => any): this;
/**
* Specify a function to execute when the DOM is fully loaded.
*
* @param handler A function to execute after the DOM is ready.
* @see {@link https://api.jquery.com/ready/}
*/
ready(handler: (jQueryAlias?: JQueryStatic) => any): this;
/**
* Remove the set of matched elements from the DOM.
*
* @param selector A selector expression that filters the set of matched elements to be removed.
* @see {@link https://api.jquery.com/remove/}
*/
remove(selector?: string): this;
/**
* Remove an attribute from each element in the set of matched elements.
*
* @param attributeName An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.
* @see {@link https://api.jquery.com/removeAttr/}
*/
removeAttr(attributeName: string): this;
/**
* Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
*
* @param className One or more space-separated classes to be removed from the class attribute of each matched element.
* @see {@link https://api.jquery.com/removeClass/#removeClass-className}
*/
removeClass(className?: string): this;
/**
* Remove a previously-stored piece of data.
*
* @param name A string naming the piece of data to delete or space-separated string naming the pieces of data to delete.
* @see {@link https://api.jquery.com/removeData/#removeData-name}
*/
removeData(name: string): this;
/**
* Remove a previously-stored piece of data.
*
* @param list An array of strings naming the pieces of data to delete.
* @see {@link https://api.jquery.com/removeData/#removeData-list}
*/
removeData(list: string[]): this;
/**
* Remove all previously-stored piece of data.
* @see {@link https://api.jquery.com/removeData/}
*/
removeData(): this;
/**
* Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
*
* @param newContent The content to insert. May be an HTML string, DOM element, array of DOM elements, or jQuery object.
* @see {@link https://api.jquery.com/replaceWith/#replaceWith-newContent}
*/
replaceWith(newContent: JQuery | any[] | Element | Text | string): this;
/**
* Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
*
* @param func A function that returns content with which to replace the set of matched elements.
* @see {@link https://api.jquery.com/replaceWith/#replaceWith-function}
*/
replaceWith(func: () => Element | JQuery): this;
/**
* Get the combined text contents of each element in the set of matched elements, including their descendants.
* @see {@link https://api.jquery.com/text/#text}
*/
text(): string;
/**
* Set the content of each element in the set of matched elements to the specified text.
*
* @param text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.
* @see {@link https://api.jquery.com/text/#text-text}
*/
text(text: string | number | boolean): this;
/**
* Set the content of each element in the set of matched elements to the specified text.
*
* @param func A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.
* @see {@link https://api.jquery.com/text/#text-function}
*/
text(func: (index: number, text: string) => string): this;
/**
* Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
*
* @param className One or more class names (separated by spaces) to be toggled for each element in the matched set.
* @param swtch A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.
* @see {@link https://api.jquery.com/toggleClass/#toggleClass-className}
*/
toggleClass(className: string, swtch?: boolean): this;
/**
* Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
*
* @param swtch A boolean value to determine whether the class should be added or removed.
* @see {@link https://api.jquery.com/toggleClass/#toggleClass-state}
*/
toggleClass(swtch?: boolean): this;
/**
* Execute all handlers attached to an element for an event.
*
* @param eventType A string containing a JavaScript event type, such as click or submit.
* @param extraParameters An array of additional parameters to pass along to the event handler.
* @see {@link https://api.jquery.com/triggerHandler/#triggerHandler-eventType-extraParameters}
*/
triggerHandler(eventType: string, ...extraParameters: any[]): Object;
/**
* Execute all handlers attached to an element for an event.
*
* @param event A jQuery.Event object.
* @param extraParameters An array of additional parameters to pass along to the event handler.
* @see {@link https://api.jquery.com/triggerHandler/#triggerHandler-event-extraParameters}
*/
triggerHandler(event: JQueryEventObject, ...extraParameters: any[]): Object;
/**
* Remove a previously-attached event handler from the elements.
*
* @param eventType A string containing a JavaScript event type, such as click or submit.
* @param handler The function that is to be no longer executed.
* @see {@link https://api.jquery.com/unbind/#unbind-eventType-handler}
*/
unbind(eventType?: string, handler?: (eventObject: JQueryEventObject) => any): this;
/**
* Remove a previously-attached event handler from the elements.
*
* @param eventType A string containing a JavaScript event type, such as click or submit.
* @param fls Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).
* @see {@link https://api.jquery.com/unbind/#unbind-eventType-false}
*/
unbind(eventType: string, fls: boolean): this;
/**
* Remove a previously-attached event handler from the elements.
*
* @param evt A JavaScript event object as passed to an event handler.
* @see {@link https://api.jquery.com/unbind/#unbind-event}
*/
unbind(evt: any): this;
/**
* Get the current value of the first element in the set of matched elements.
* @see {@link https://api.jquery.com/val/#val}
*/
val(): any;
/**
* Set the value of each element in the set of matched elements.
*
* @param value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.
* @see {@link https://api.jquery.com/val/#val-value}
*/
val(value: string | string[] | number): this;
/**
* Set the value of each element in the set of matched elements.
*
* @param func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
* @see {@link https://api.jquery.com/val/#val-function}
*/
val(func: (index: number, value: string) => string): this;
/**
* Wrap an HTML structure around each element in the set of matched elements.
*
* @param wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
* @see {@link https://api.jquery.com/wrap/#wrap-wrappingElement}
*/
wrap(wrappingElement: JQuery | Element | string): this;
/**
* Wrap an HTML structure around each element in the set of matched elements.
*
* @param func A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
* @see {@link https://api.jquery.com/wrap/#wrap-function}
*/
wrap(func: (index: number) => string | JQuery): this;
// Undocumented
length: number;
// TODO: events, how to define?
// $destroy
controller(name?: string): any;
injector(): ng.auto.IInjectorService;
/**
* Returns the `$scope` of the element.
*
* **IMPORTANT**: Requires `debugInfoEnabled` to be true.
*
* See https://docs.angularjs.org/guide/production#disabling-debug-data for more information.
*/
scope<T extends ng.IScope>(): T;
/**
* Returns the `$scope` of the element.
*
* **IMPORTANT**: Requires `debugInfoEnabled` to be true.
*
* See https://docs.angularjs.org/guide/production#disabling-debug-data for more information.
*/
isolateScope<T extends ng.IScope>(): T;
inheritedData(key: string, value: any): this;
inheritedData(obj: { [key: string]: any; }): this;
inheritedData(key?: string): any;
}
interface JQueryStatic {
(element: string | Element | Document | JQuery | ArrayLike<Element> | (() => void)): JQLite;
}
/**
* Interface of the JQuery extension of the W3C event object
* @see {@link https://api.jquery.com/category/events/event-object/}
*/
interface BaseJQueryEventObject extends Event {
/**
* The current DOM element within the event bubbling phase.
* @see {@link https://api.jquery.com/event.currentTarget/}
*/
currentTarget: Element;
/**
* An optional object of data passed to an event method when the current executing handler is bound.
* @see {@link https://api.jquery.com/event.data/}
*/
data: any;
/**
* The element where the currently-called jQuery event handler was attached.
* @see {@link https://api.jquery.com/event.delegateTarget/}
*/
delegateTarget: Element;
/**
* Returns whether event.preventDefault() was ever called on this event object.
* @see {@link https://api.jquery.com/event.isDefaultPrevented/}
*/
isDefaultPrevented(): boolean;
/**
* Returns whether event.stopImmediatePropagation() was ever called on this event object.
* @see {@link https://api.jquery.com/event.isImmediatePropagationStopped/}
*/
isImmediatePropagationStopped(): boolean;
/**
* Returns whether event.stopPropagation() was ever called on this event object.
* @see {@link https://api.jquery.com/event.isPropagationStopped/}
*/
isPropagationStopped(): boolean;
/**
* The namespace specified when the event was triggered.
* @see {@link https://api.jquery.com/event.namespace/}
*/
namespace: string;
/**
* The browser's original Event object.
* @see {@link https://api.jquery.com/category/events/event-object/}
*/
originalEvent: Event;
/**
* If this method is called, the default action of the event will not be triggered.
* @see {@link https://api.jquery.com/event.preventDefault/}
*/
preventDefault(): any;
/**
* The other DOM element involved in the event, if any.
* @see {@link https://api.jquery.com/event.relatedTarget/}
*/
relatedTarget: Element;
/**
* The last value returned by an event handler that was triggered by this event, unless the value was undefined.
* @see {@link https://api.jquery.com/event.result/}
*/
result: any;
/**
* Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.
* @see {@link https://api.jquery.com/event.stopImmediatePropagation/}
*/
stopImmediatePropagation(): void;
/**
* Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
* @see {@link https://api.jquery.com/event.stopPropagation/}
*/
stopPropagation(): void;
/**
* The DOM element that initiated the event.
* @see {@link https://api.jquery.com/event.target/}
*/
target: Element;
/**
* The mouse position relative to the left edge of the document.
* @see {@link https://api.jquery.com/event.pageX/}
*/
pageX: number;
/**
* The mouse position relative to the top edge of the document.
* @see {@link https://api.jquery.com/event.pageY/}
*/
pageY: number;
/**
* For key or mouse events, this property indicates the specific key or button that was pressed.
* @see {@link https://api.jquery.com/event.which/}
*/
which: number;
/**
* Indicates whether the META key was pressed when the event fired.
* @see {@link https://api.jquery.com/event.metaKey/}
*/
metaKey: boolean;
}
interface JQueryInputEventObject extends BaseJQueryEventObject {
altKey: boolean;
ctrlKey: boolean;
metaKey: boolean;
shiftKey: boolean;
}
interface JQueryMouseEventObject extends JQueryInputEventObject {
button: number;
clientX: number;
clientY: number;
offsetX: number;
offsetY: number;
pageX: number;
pageY: number;
screenX: number;
screenY: number;
}
interface JQueryKeyEventObject extends JQueryInputEventObject {
char: any;
charCode: number;
key: any;
keyCode: number;
}
interface JQueryEventObject extends BaseJQueryEventObject, JQueryInputEventObject, JQueryMouseEventObject, JQueryKeyEventObject {
}
/**
* The interface used to specify the properties parameter in css()
*/
// tslint:disable-next-line:class-name
interface cssPropertySetter {
(index: number, value?: string): string | number;
}
interface JQLiteCssProperties {
[propertyName: string]: string | number | cssPropertySetter;
}

View file

@ -1,71 +0,0 @@
{
"_args": [
[
"@types/angular@1.6.51",
"/home/gwh/www/credger/public/vendor"
]
],
"_development": true,
"_from": "@types/angular@1.6.51",
"_id": "@types/angular@1.6.51",
"_inBundle": false,
"_integrity": "sha512-wYU+/zlJWih7ZmonWVjGQ18tG7GboI9asMNjRBM5fpIFJWXSioQttCTw9qGL44cP82ghM8sCV9apEqm1zBDq2w==",
"_location": "/@types/angular",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "@types/angular@1.6.51",
"name": "@types/angular",
"escapedName": "@types%2fangular",
"scope": "@types",
"rawSpec": "1.6.51",
"saveSpec": null,
"fetchSpec": "1.6.51"
},
"_requiredBy": [
"#DEV:/"
],
"_resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.51.tgz",
"_spec": "1.6.51",
"_where": "/home/gwh/www/credger/public/vendor",
"bugs": {
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
},
"contributors": [
{
"name": "Diego Vilar",
"url": "https://github.com/diegovilar"
},
{
"name": "Georgii Dolzhykov",
"url": "https://github.com/thorn0"
},
{
"name": "Caleb St-Denis",
"url": "https://github.com/calebstdenis"
},
{
"name": "Leonard Thieu",
"url": "https://github.com/leonard-thieu"
},
{
"name": "Steffen Kowalski",
"url": "https://github.com/scipper"
}
],
"dependencies": {},
"description": "TypeScript definitions for Angular JS",
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme",
"license": "MIT",
"main": "",
"name": "@types/angular",
"repository": {
"type": "git",
"url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git"
},
"scripts": {},
"typeScriptVersion": "2.3",
"typesPublisherContentHash": "a14ed70599105c3c1a77fbcf96e22a093a4d16a60228aff9da77e67bc0467a0d",
"version": "1.6.51"
}

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) Microsoft Corporation. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

View file

@ -1,16 +0,0 @@
# Installation
> `npm install --save @types/sweetalert`
# Summary
This package contains type definitions for SweetAlert (https://github.com/t4t5/sweetalert/).
# Details
Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/sweetalert
Additional Details
* Last updated: Mon, 21 Aug 2017 22:03:22 GMT
* Dependencies: none
* Global values: swal, sweetAlert
# Credits
These definitions were written by Markus Peloso <https://github.com/ToastHawaii>.

View file

@ -1,230 +0,0 @@
// Type definitions for SweetAlert 1.1.3
// Project: https://github.com/t4t5/sweetalert/
// Definitions by: Markus Peloso <https://github.com/ToastHawaii>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare var sweetAlert: SweetAlert.SweetAlertStatic;
declare var swal: SweetAlert.SweetAlertStatic;
declare module "sweetalert" {
export = swal;
}
declare namespace SweetAlert {
type AlertType = "warning" | "error" | "success" | "info";
type PromtType = "input" | "prompt";
interface SettingsBase {
/**
* A description for the modal.
* Default: null
*/
text?: string;
/**
* If set to true, the user can dismiss the modal by pressing the Escape key.
* Default: true
*/
allowEscapeKey?: boolean;
/**
* A custom CSS class for the modal.
* Default: null
*/
customClass?: string;
/**
* If set to true, the user can dismiss the modal by clicking outside it.
* Default: false
*/
allowOutsideClick?: boolean;
/**
* If set to true, a "Cancel"-button will be shown, which the user can click on to dismiss the modal.
* Default: false
*/
showCancelButton?: boolean;
/**
* If set to false, the "OK/Confirm"-button will be hidden. Make sure you set a timer or set allowOutsideClick to true when using this, in order not to annoy the user.
* Default: true
*/
showConfirmButton?: boolean;
/**
* Use this to change the text on the "Confirm"-button. If showCancelButton is set as true, the confirm button will automatically show "Confirm" instead of "OK".
* Default: "OK"
*/
confirmButtonText?: string;
/**
* Use this to change the background color of the "Confirm"-button (must be a HEX value).
* Default: "#8CD4F5"
*/
confirmButtonColor?: string;
/**
* Use this to change the text on the "Cancel"-button.
* Default: "Cancel"
*/
cancelButtonText?: string;
/**
* Set to false if you want the modal to stay open even if the user presses the "Confirm"-button. This is especially useful if the function attached to the "Confirm"-button is another SweetAlert.
* Default: true
*/
closeOnConfirm?: boolean;
/**
* Set to false if you want the modal to stay open even if the user presses the "Cancel"-button. This is especially useful if the function attached to the "Cancel"-button is another SweetAlert.
* Default: true
*/
closeOnCancel?: boolean;
/**
* Add a customized icon for the modal.Should contain a string with the path to the image.
* Default: null
*/
imageUrl?: string;
/**
* If imageUrl is set, you can specify imageSize to describes how big you want the icon to be in px. Pass in a string with two values separated by an "x". The first value is the width, the second is the height.
* Default: "80x80"
*/
imageSize?: string;
/**
* Auto close timer of the modal. Set in ms (milliseconds).
* Default: null
*/
timer?: number;
/**
* If set to true, will not escape title and text parameters. (Set to false if you're worried about XSS attacks.)
* Default: false
*/
html?: boolean;
/**
* If set to false, the modal's animation will be disabled. Possible animations: "slide-from-top", "slide-from-bottom", "pop" (use true instead) and "none" (use false instead).
* Default: true
*/
animation?: boolean | "slide-from-top" | "slide-from-bottom" | "pop" | "none" | string;
/**
* Set to true to disable the buttons and show that something is loading.
* Default: false
*/
showLoaderOnConfirm?: boolean;
}
interface AlertModalSettings extends SettingsBase {
/**
* The type of the modal. SweetAlert comes with 4 built-in types which will show a corresponding icon animation: "warning", "error", "success" and "info". You can also set it as "input" to get a prompt modal.
* Default: null
*/
type?: AlertType;
}
interface PromtModalSettings extends SettingsBase {
/**
* The type of the modal. SweetAlert comes with 4 built-in types which will show a corresponding icon animation: "warning", "error", "success" and "info". You can also set it as "input" to get a prompt modal.
* Default: null
*/
type?: PromtType;
/**
* Change the type of the input field when using type: "input" (this can be useful if you want users to type in their password for example).
* Default: "text"
*/
inputType?: string;
/**
* When using the input-type, you can specify a placeholder to help the user.
* Default: null
*/
inputPlaceholder?: string;
/**
* Specify a default text value that you want your input to show when using type: "input"
* Default: null
*/
inputValue?: string;
}
interface Settings {
/**
* The title of the modal.
*/
title: string;
}
interface SetDefaultsSettings {
/**
* The title of the modal.
* Default: null
*/
title?: string;
}
interface SweetAlertStatic {
/**
* SweetAlert automatically centers itself on the page and looks great no matter if you're using a desktop computer, mobile or tablet. An awesome replacement for JavaScript's alert.
* @param title The title of the modal.
*/
(title: string): void;
/**
* SweetAlert automatically centers itself on the page and looks great no matter if you're using a desktop computer, mobile or tablet. An awesome replacement for JavaScript's alert.
* @param title The title of the modal.
* @param text A description for the modal.
*/
(title: string, text: string): void;
/**
* SweetAlert automatically centers itself on the page and looks great no matter if you're using a desktop computer, mobile or tablet. An awesome replacement for JavaScript's alert.
* @param title The title of the modal.
* @param text A description for the modal.
* @param type The type of the modal. SweetAlert comes with 4 built-in types which will show a corresponding icon animation: "warning", "error", "success" and "info". You can also set it as "input" to get a prompt modal.
*/
(title: string, text: string, type: AlertType | PromtType): void;
/**
* SweetAlert automatically centers itself on the page and looks great no matter if you're using a desktop computer, mobile or tablet. An awesome replacement for JavaScript's alert.
* @param callback The callback from the users action. The value is true or false if the user confirms or cancels the alert.
*/
(settings: Settings & AlertModalSettings, callback?: (isConfirm: boolean) => any): void;
/**
* SweetAlert automatically centers itself on the page and looks great no matter if you're using a desktop computer, mobile or tablet. An awesome replacement for JavaScript's alert.
* @param callback The callback from the users action. When the user confirms the prompt, the argument contains the value of the input element. When the user cancels the prompt, the argument is false.
*/
(settings: Settings & PromtModalSettings, callback?: (isConfirmOrInputValue: boolean | string) => any): void;
/**
* If you end up using a lot of the same settings when calling SweetAlert, you can use setDefaults at the start of your program to set them once and for all!
*/
setDefaults(settings: SetDefaultsSettings & AlertModalSettings & PromtModalSettings): void;
/**
* Close the currently open SweetAlert programmatically.
*/
close(): void;
/**
* Show an error message after validating the input field, if the user's data is bad.
*/
showInputError(errorMessage: string): void;
/**
* Enable the user to click on the cancel and confirm buttons.
*/
enableButtons(): void;
/**
* Disable the user to click on the cancel and confirm buttons.
*/
disableButtons(): void;
}
}

View file

@ -1,51 +0,0 @@
{
"_args": [
[
"@types/sweetalert@1.1.28",
"/home/gwh/www/credger/public/vendor"
]
],
"_development": true,
"_from": "@types/sweetalert@1.1.28",
"_id": "@types/sweetalert@1.1.28",
"_inBundle": false,
"_integrity": "sha512-5A90pxXPIb+TwN/WhS5VBb6QQgIN6ArSXJrr7L8HcqgwiYwL0pIueZ302H5VVK43/uit+KICS6HfrJxm61x4dA==",
"_location": "/@types/sweetalert",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "@types/sweetalert@1.1.28",
"name": "@types/sweetalert",
"escapedName": "@types%2fsweetalert",
"scope": "@types",
"rawSpec": "1.1.28",
"saveSpec": null,
"fetchSpec": "1.1.28"
},
"_requiredBy": [
"#DEV:/"
],
"_resolved": "https://registry.npmjs.org/@types/sweetalert/-/sweetalert-1.1.28.tgz",
"_spec": "1.1.28",
"_where": "/home/gwh/www/credger/public/vendor",
"contributors": [
{
"name": "Markus Peloso",
"url": "https://github.com/ToastHawaii"
}
],
"dependencies": {},
"description": "TypeScript definitions for SweetAlert",
"license": "MIT",
"main": "",
"name": "@types/sweetalert",
"repository": {
"type": "git",
"url": "https://www.github.com/DefinitelyTyped/DefinitelyTyped.git"
},
"scripts": {},
"typeScriptVersion": "2.0",
"typesPublisherContentHash": "388eb6d99041d0fb15c86f10bfc783922436c1dec435bbcc60a1093e656d4581",
"version": "1.1.28"
}

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) Microsoft Corporation. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

View file

@ -1,16 +0,0 @@
# Installation
> `npm install --save @types/underscore`
# Summary
This package contains type definitions for Underscore (http://underscorejs.org/).
# Details
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/underscore
Additional Details
* Last updated: Wed, 15 Aug 2018 20:42:04 GMT
* Dependencies: none
* Global values: _
# Credits
These definitions were written by Boris Yankov <https://github.com/borisyankov>, Josh Baldwin <https://github.com/jbaldwin>, Christopher Currens <https://github.com/ccurrens>, Cassey Lottman <https://github.com/clottman>, Ard Timmerman <https://github.com/confususs>.

File diff suppressed because it is too large Load diff

View file

@ -1,71 +0,0 @@
{
"_args": [
[
"@types/underscore@1.8.9",
"/home/gwh/www/credger/public/vendor"
]
],
"_development": true,
"_from": "@types/underscore@1.8.9",
"_id": "@types/underscore@1.8.9",
"_inBundle": false,
"_integrity": "sha512-vfzZGgZKRFy7KEWcBGfIFk+h6B+thDCLfkD1exMBMRlUsx2icA+J6y4kAbZs/TjSTeY1duw89QUU133TSzr60Q==",
"_location": "/@types/underscore",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "@types/underscore@1.8.9",
"name": "@types/underscore",
"escapedName": "@types%2funderscore",
"scope": "@types",
"rawSpec": "1.8.9",
"saveSpec": null,
"fetchSpec": "1.8.9"
},
"_requiredBy": [
"#DEV:/"
],
"_resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.8.9.tgz",
"_spec": "1.8.9",
"_where": "/home/gwh/www/credger/public/vendor",
"bugs": {
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
},
"contributors": [
{
"name": "Boris Yankov",
"url": "https://github.com/borisyankov"
},
{
"name": "Josh Baldwin",
"url": "https://github.com/jbaldwin"
},
{
"name": "Christopher Currens",
"url": "https://github.com/ccurrens"
},
{
"name": "Cassey Lottman",
"url": "https://github.com/clottman"
},
{
"name": "Ard Timmerman",
"url": "https://github.com/confususs"
}
],
"dependencies": {},
"description": "TypeScript definitions for Underscore",
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme",
"license": "MIT",
"main": "",
"name": "@types/underscore",
"repository": {
"type": "git",
"url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git"
},
"scripts": {},
"typeScriptVersion": "2.0",
"typesPublisherContentHash": "9e3dd31bd3991703a4b98b69256531a42d110f7deb57b163aeefe1124ee3930a",
"version": "1.8.9"
}

View file

@ -1,3 +1,185 @@
## 1.0.29 (2020-12-21)
[Compare `@uirouter/angularjs` versions 1.0.28 and 1.0.29](https://github.com/angular-ui/ui-router/compare/1.0.28...1.0.29)
---
### Updated `@uirouter/core` from 6.0.6 to 6.0.7
Changelog for `@uirouter/core`:
[Compare `@uirouter/core` versions 6.0.6 and 6.0.7](https://github.com/ui-router/core/compare/6.0.6...6.0.7)
### Bug Fixes
* **array:** Fix decoding of array-type query parameters ([44ebfae](https://github.com/ui-router/core/commit/44ebfae))
- Note: this fix does not affect angularjs
## 1.0.28 (2020-08-08)
[Compare `@uirouter/angularjs` versions 1.0.27 and 1.0.28](https://github.com/angular-ui/ui-router/compare/1.0.27...1.0.28)
### Bug Fixes
* should not transition states when alt-clicked ([8080adb](https://github.com/angular-ui/ui-router/commit/8080adb))
## 1.0.27 (2020-07-21)
[Compare `@uirouter/angularjs` versions 1.0.26 and 1.0.27](https://github.com/angular-ui/ui-router/compare/1.0.26...1.0.27)
### Bug Fixes
* make augmented StateRegistry.register overload better match the signature in core ([db4e63f](https://github.com/angular-ui/ui-router/commit/db4e63f))
---
### Updated `@uirouter/core` from 6.0.5 to 6.0.6
Changelog for `@uirouter/core`:
[Compare `@uirouter/core` versions 6.0.5 and 6.0.6](https://github.com/ui-router/core/compare/6.0.5...6.0.6)
### Bug Fixes
* **params:** Bi-directionally en/decode path and search params. ([#618](https://github.com/ui-router/core/issues/618)) ([89e99cd](https://github.com/ui-router/core/commit/89e99cd))
## 1.0.26 (2020-04-29)
[Compare `@uirouter/angularjs` versions 1.0.25 and 1.0.26](https://github.com/angular-ui/ui-router/compare/1.0.25...1.0.26)
---
### Updated `@uirouter/core` from 6.0.4 to 6.0.5
Changelog for `@uirouter/core`:
[Compare `@uirouter/core` versions 6.0.4 and 6.0.5](https://github.com/ui-router/core/compare/6.0.4...6.0.5)
### Bug Fixes
* **TargetState:** make isDef check more thorough ([e657cfe](https://github.com/ui-router/core/commit/e657cfe))
### Features
* **urlRuleFactory:** Add support for StateDeclarations in UrlRuleFactory.fromState() ([539d33a](https://github.com/ui-router/core/commit/539d33a))
## 1.0.25 (2020-02-04)
[Compare `@uirouter/angularjs` versions 1.0.24 and 1.0.25](https://github.com/angular-ui/ui-router/compare/1.0.24...1.0.25)
---
### Updated `@uirouter/core` from 6.0.3 to 6.0.4
Changelog for `@uirouter/core`:
[Compare `@uirouter/core` versions 6.0.3 and 6.0.4](https://github.com/ui-router/core/compare/6.0.3...6.0.4)
### Bug Fixes
* **safeConsole:** check if document is defined to avoid issues in node environments ([da29d88](https://github.com/ui-router/core/commit/da29d88))
## 1.0.24 (2019-12-30)
[Compare `@uirouter/angularjs` versions 1.0.23 and 1.0.24](https://github.com/angular-ui/ui-router/compare/1.0.23...1.0.24)
---
### Updated `@uirouter/core` from 6.0.1 to 6.0.3
Changelog for `@uirouter/core`:
[Compare `@uirouter/core` versions 6.0.1 and 6.0.3](https://github.com/ui-router/core/compare/6.0.1...6.0.3)
### Bug Fixes
* **hof:** Rewrite curry from scratch ([fc324c6](https://github.com/ui-router/core/commit/fc324c6)), closes [#350](https://github.com/ui-router/core/issues/350)
* **IE9:** Add safeConsole so IE9 doesn't break ([9c8579d](https://github.com/ui-router/core/commit/9c8579d))
### Features
* **stateService:** add transition option 'supercede' so transition can be ignored if one is pending ([6e5a56f](https://github.com/ui-router/core/commit/6e5a56f))
## 1.0.23 (2019-10-02)
[Compare `@uirouter/angularjs` versions 1.0.22 and 1.0.23](https://github.com/angular-ui/ui-router/compare/1.0.22...1.0.23)
### Bug Fixes
* **stateFilters:** Export each function individually ([978b882](https://github.com/angular-ui/ui-router/commit/978b882))
* **travis:** Fix travis build ([dc0f58a](https://github.com/angular-ui/ui-router/commit/dc0f58a))
* **types:** Remove [@types/jquery](https://github.com/types/jquery) from devDependencies, upgrade [@types/angular](https://github.com/types/angular) ([b12bc84](https://github.com/angular-ui/ui-router/commit/b12bc84))
* **viewDirective:** add check for componentProvider, avoid extra trigger for $onInit (fixing [#3735](https://github.com/angular-ui/ui-router/issues/3735)) ([#3779](https://github.com/angular-ui/ui-router/issues/3779)) ([c3e87ad](https://github.com/angular-ui/ui-router/commit/c3e87ad))
---
### Updated `@uirouter/core` from 5.0.23 to 6.0.1
[Compare `@uirouter/core` versions 5.0.23 and 6.0.1](https://github.com/ui-router/core/compare/5.0.23...6.0.1)
### Bug Fixes
* **resolve:** remove unnecessary generics from CustomAsyncPolicy ([#452](https://github.com/ui-router/core/issues/452)) ([61f4ee9](https://github.com/ui-router/core/commit/61f4ee9))
* **travis:** use service: xvfb instead of launching it manually. install libgconf debian package ([ac1ef4b](https://github.com/ui-router/core/commit/ac1ef4b))
### Features
* **resolve:** Remove RXWAIT async policy in favour of allowing user defined async policy function ([#366](https://github.com/ui-router/core/issues/366)) ([0ad87f6](https://github.com/ui-router/core/commit/0ad87f6))
### BREAKING CHANGES
* **resolve:** RXWAIT async policy has been removed, but it never worked in the first place
## 1.0.22 (2019-01-29)
[Compare `@uirouter/angularjs` versions 1.0.21 and 1.0.22](https://github.com/angular-ui/ui-router/compare/1.0.21...1.0.22)
### Updated `@uirouter/core` from 5.0.22 to 5.0.23
[Compare `@uirouter/core` versions 5.0.22 and 5.0.23](https://github.com/ui-router/core/compare/5.0.22...5.0.23)
### Bug Fixes
* **test_downstream_projects:** don't double build core while testing downstreams ([148b16b](https://github.com/ui-router/core/commit/148b16b))
* **typescript:** Fix typing of onChange callback in UrlService ([961ed0f](https://github.com/ui-router/core/commit/961ed0f)), closes [#229](https://github.com/ui-router/core/issues/229)
* **typescript:** Mark `params` as optional in StateService.href ([614bfb4](https://github.com/ui-router/core/commit/614bfb4)), closes [#287](https://github.com/ui-router/core/issues/287)
* **vanilla:** Fix baseHref parsing with chrome-extension:// urls ([f11be4d](https://github.com/ui-router/core/commit/f11be4d)), closes [#304](https://github.com/ui-router/core/issues/304)
## 1.0.21 (2019-01-10)
[Compare `@uirouter/angularjs` versions 1.0.20 and 1.0.21](https://github.com/angular-ui/ui-router/compare/1.0.20...1.0.21)
### Updated `@uirouter/core` from 5.0.21 to 5.0.22
[Compare `@uirouter/core` versions 5.0.21 and 5.0.22](https://github.com/ui-router/core/compare/5.0.21...5.0.22)
### Bug Fixes
* **lazyLoad:** StateBuilder should not mutate the state declaration ([1478a3c](https://github.com/ui-router/core/commit/1478a3c)), closes [/github.com/ui-router/core/commit/3cd5a2a#r31260154](https://github.com//github.com/ui-router/core/commit/3cd5a2a/issues/r31260154)
* **state:** Update URL in response to ignored transition due to redirect ([c64c252](https://github.com/ui-router/core/commit/c64c252))
### Features
* **TransitionHook:** Pass in transition to HookMatchCriteria ([#255](https://github.com/ui-router/core/issues/255)) ([926705e](https://github.com/ui-router/core/commit/926705e))
## 1.0.20 (2018-08-11)
[Compare `@uirouter/angularjs` versions 1.0.19 and 1.0.20](https://github.com/angular-ui/ui-router/compare/1.0.19...1.0.20)

View file

@ -1,9 +1,7 @@
# AngularUI Router &nbsp;[![Build Status](https://travis-ci.org/angular-ui/ui-router.svg?branch=master)](https://travis-ci.org/angular-ui/ui-router)
# AngularUI Router &nbsp;[![Build Status](https://github.com/angular-ui/ui-router/workflows/CI:%20UIRouter%20for%20AngularJS/badge.svg)](https://github.com/angular-ui/ui-router/actions?query=workflow%3A%22CI%3A+UIRouter+for+AngularJS%22)
[![Greenkeeper badge](https://badges.greenkeeper.io/angular-ui/ui-router.svg)](https://greenkeeper.io/)
**Note: this is the Angular 1.x source for UI-Router version 1.0. If you are looking for the source for UI-Router
version 0.2.x, it can be found [here](https://github.com/angular-ui/ui-router/tree/legacy)**
**Note: this is the Angular 1.x source for UI-Router version 1.x. If you are looking for the source for UI-Router
version 0.x, it can be found [here](https://github.com/angular-ui/ui-router/tree/legacy)**
---
@ -13,7 +11,7 @@ version 0.2.x, it can be found [here](https://github.com/angular-ui/ui-router/tr
**[Tutorials](https://ui-router.github.io/tutorials/)** |
**[API Docs](https://ui-router.github.io/docs/latest/)** |
**[Download stable](http://unpkg.com/@uirouter/angularjs@latest/release/angular-ui-router.js)** (or **[Minified](http://unpkg.com/@uirouter/angularjs@latest/release/angular-ui-router.min.js)**) **|**
**[Guide](https://github.com/angular-ui/ui-router/wiki) |**
**[Guide](https://ui-router.github.io/guide/) |**
**[Sample App](http://ui-router.github.io/resources/sampleapp/) |**
**[FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) |**
**[Report an Issue](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#report-an-issue) |**

View file

@ -1,8 +1,3 @@
{
"ARTIFACTS": [
"lib",
"lib-esm",
"release",
"package.json"
]
"ARTIFACTS": ["lib", "lib-esm", "release", "package.json"]
}

View file

@ -1,8 +1,23 @@
{
"sample-app-angularjs": "https://github.com/ui-router/sample-app-angularjs.git",
"typescript2.2": "./test/typescript2.2",
"typescript2.3": "./test/typescript2.3",
"typescript2.4": "./test/typescript2.4",
"typescript2.5": "./test/typescript2.5",
"typescript2.6": "./test/typescript2.6"
"typescript": {
"typescript2.2": "./test/typescript/2.2",
"typescript2.3": "./test/typescript/2.3",
"typescript2.4": "./test/typescript/2.4",
"typescript2.5": "./test/typescript/2.5",
"typescript2.6": "./test/typescript/2.6",
"typescript2.8": "./test/typescript/2.8",
"typescript2.7": "./test/typescript/2.7",
"typescript2.9": "./test/typescript/2.9",
"typescript3.0": "./test/typescript/3.0",
"typescript3.1": "./test/typescript/3.1",
"typescript3.2": "./test/typescript/3.2",
"typescript3.3": "./test/typescript/3.3",
"typescript3.4": "./test/typescript/3.4",
"typescript3.5": "./test/typescript/3.5",
"typescript3.6": "./test/typescript/3.6",
"typescript3.7": "./test/typescript/3.7",
"typescript3.8": "./test/typescript/3.8",
"typescript3.9": "./test/typescript/3.9"
},
"sample-app-angularjs": "https://github.com/ui-router/sample-app-angularjs.git"
}

View file

@ -0,0 +1,17 @@
const NG = process.env.NG || '1.7';
console.log(`Testing with AngularJS ${NG}`);
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
roots: ['src', 'test'],
testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)', '**/?*Spec.[jt]s'],
setupFilesAfterEnv: ['./test/jest.init.ts'],
moduleNameMapper: {
'^angular$': '<rootDir>/test/angular/jest-angular.js',
'^jest-angular-import$': `<rootDir>/test/angular/${NG}/angular.js`,
'^angular-animate$': `<rootDir>/test/angular/${NG}/angular-animate.js`,
'^angular-mocks$': `<rootDir>/test/angular/${NG}/angular-mocks.js`,
},
};

View file

@ -8,6 +8,6 @@
"names": [],
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,KAAK,cAAc,MAAM,SAAS,CAAC;AAE1C,cAAc,CAAC,IAAM,cAAc,GAAG,OAAO,CAAC;AAC9C,cAAc,CAAC,MAAM,CAAC,IAAM,EAAE,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport * as ng_from_import from 'angular';\n/** @hidden */ declare var angular;\n/** @hidden */ const ng_from_global = angular;\n/** @hidden */ export const ng = ng_from_import && ng_from_import.module ? ng_from_import : ng_from_global;\n"
"/** @publicapi @module ng1 */ /** */\nimport * as ng_from_import from 'angular';\n/** @hidden */ declare let angular;\n/** @hidden */ const ng_from_global = angular;\n/** @hidden */ export const ng = ng_from_import && ng_from_import.module ? ng_from_import : ng_from_global;\n"
]
}

View file

@ -1,3 +1,5 @@
/* eslint-disable @typescript-eslint/no-empty-interface */
/* eslint-disable prefer-const */
/**
* # Angular 1 Directives
*
@ -10,11 +12,10 @@ import { ng as angular } from '../angular';
import { extend, forEach, tail, isString, isObject, isArray, parse, noop, unnestR, identity, uniqR, inArray, removeFrom, } from '@uirouter/core';
/** @hidden */
function parseStateRef(ref) {
var parsed;
var paramsOnly = ref.match(/^\s*({[^}]*})\s*$/);
if (paramsOnly)
ref = '(' + paramsOnly[1] + ')';
parsed = ref.replace(/\n/g, ' ').match(/^\s*([^(]*?)\s*(\((.*)\))?\s*$/);
var parsed = ref.replace(/\n/g, ' ').match(/^\s*([^(]*?)\s*(\((.*)\))?\s*$/);
if (!parsed || parsed.length !== 4)
throw new Error("Invalid state ref '" + ref + "'");
return { state: parsed[1] || null, paramExpr: parsed[3] || null };
@ -47,7 +48,7 @@ function getTypeInfo(el) {
function clickHook(el, $state, $timeout, type, getDef) {
return function (e) {
var button = e.which || e.button, target = getDef();
if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || el.attr('target'))) {
if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey || el.attr('target'))) {
// HACK: This is to allow ng-clicks to be processed before the transition is initiated:
var transition_1 = $timeout(function () {
if (!el.attr('disabled')) {
@ -240,7 +241,6 @@ uiSrefDirective = [
var type = getTypeInfo(element);
var active = uiSrefActive[1] || uiSrefActive[0];
var unlinkInfoFn = null;
var hookFn;
var rawDef = {};
var getDef = function () { return processedDef($state, element, rawDef); };
var ref = parseStateRef(attrs.uiSref);
@ -267,7 +267,7 @@ uiSrefDirective = [
scope.$on('$destroy', $uiRouter.transitionService.onSuccess({}, update));
if (!type.clickable)
return;
hookFn = clickHook(element, $state, $timeout, type, getDef);
var hookFn = clickHook(element, $state, $timeout, type, getDef);
bindEvents(element, scope, hookFn, rawDef.uiStateOpts);
},
};
@ -601,9 +601,7 @@ uiSrefActiveDirective = [
.map(splitClasses)
.reduce(unnestR, []);
};
var allClasses = getClasses(states)
.concat(splitClasses(activeEqClass))
.reduce(uniqR, []);
var allClasses = getClasses(states).concat(splitClasses(activeEqClass)).reduce(uniqR, []);
var fuzzyClasses = getClasses(states.filter(function (x) { return $state.includes(x.state.name, x.params); }));
var exactlyMatchesAny = !!states.filter(function (x) { return $state.is(x.state.name, x.params); }).length;
var exactClasses = exactlyMatchesAny ? splitClasses(activeEqClass) : [];

File diff suppressed because one or more lines are too long

View file

@ -129,6 +129,7 @@ import { Ng1ViewConfig } from '../statebuilders/views';
* ```
*/
export var uiView;
// eslint-disable-next-line prefer-const
uiView = [
'$view',
'$animate',
@ -136,7 +137,7 @@ uiView = [
'$interpolate',
'$q',
function $ViewDirective($view, $animate, $uiViewScroll, $interpolate, $q) {
function getRenderer(attrs, scope) {
function getRenderer() {
return {
enter: function (element, target, cb) {
if (angular.version.minor > 2) {
@ -171,8 +172,8 @@ uiView = [
transclude: 'element',
compile: function (tElement, tAttrs, $transclude) {
return function (scope, $element, attrs) {
var onloadExp = attrs['onload'] || '', autoScrollExp = attrs['autoscroll'], renderer = getRenderer(attrs, scope), inherited = $element.inheritedData('$uiView') || rootData, name = $interpolate(attrs['uiView'] || attrs['name'] || '')(scope) || '$default';
var previousEl, currentEl, currentScope, viewConfig, unregister;
var onloadExp = attrs['onload'] || '', autoScrollExp = attrs['autoscroll'], renderer = getRenderer(), inherited = $element.inheritedData('$uiView') || rootData, name = $interpolate(attrs['uiView'] || attrs['name'] || '')(scope) || '$default';
var previousEl, currentEl, currentScope, viewConfig;
var activeUIView = {
$type: 'ng1',
id: directive.count++,
@ -201,7 +202,7 @@ uiView = [
}
$element.data('$uiView', { $uiView: activeUIView });
updateView();
unregister = $view.registerUIView(activeUIView);
var unregister = $view.registerUIView(activeUIView);
scope.$on('$destroy', function () {
trace.traceUIViewEvent('Destroying/Unregistering', activeUIView);
unregister();
@ -287,9 +288,9 @@ uiView = [
return directive;
},
];
$ViewDirectiveFill.$inject = ['$compile', '$controller', '$transitions', '$view', '$q', '$timeout'];
$ViewDirectiveFill.$inject = ['$compile', '$controller', '$transitions', '$view', '$q'];
/** @hidden */
function $ViewDirectiveFill($compile, $controller, $transitions, $view, $q, $timeout) {
function $ViewDirectiveFill($compile, $controller, $transitions, $view, $q) {
var getControllerAs = parse('viewDecl.controllerAs');
var getResolveAs = parse('viewDecl.resolveAs');
return {
@ -358,7 +359,8 @@ var _uiCanExitId = 0;
/** @hidden TODO: move these callbacks to $view and/or `/hooks/components.ts` or something */
function registerControllerCallbacks($q, $transitions, controllerInstance, $scope, cfg) {
// Call $onInit() ASAP
if (isFunction(controllerInstance.$onInit) && !(cfg.viewDecl.component && hasComponentImpl)) {
if (isFunction(controllerInstance.$onInit) &&
!((cfg.viewDecl.component || cfg.viewDecl.componentProvider) && hasComponentImpl)) {
controllerInstance.$onInit();
}
var viewState = tail(cfg.path).state.self;
@ -376,14 +378,8 @@ function registerControllerCallbacks($q, $transitions, controllerInstance, $scop
var toParams = $transition$.params('to');
var fromParams = $transition$.params('from');
var getNodeSchema = function (node) { return node.paramSchema; };
var toSchema = $transition$
.treeChanges('to')
.map(getNodeSchema)
.reduce(unnestR, []);
var fromSchema = $transition$
.treeChanges('from')
.map(getNodeSchema)
.reduce(unnestR, []);
var toSchema = $transition$.treeChanges('to').map(getNodeSchema).reduce(unnestR, []);
var fromSchema = $transition$.treeChanges('from').map(getNodeSchema).reduce(unnestR, []);
// Find the to params that have different values than the from params
var changedToParams = toSchema.filter(function (param) {
var idx = fromSchema.indexOf(param);

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,8 @@
/**
* Main entry point for angular 1.x build
* @publicapi @module ng1
*/ /** */
export * from './interface';
export * from './services';
export * from './statebuilders/views';
export * from './stateProvider';

View file

@ -6,7 +6,7 @@
"@uirouter/angularjs/index.ts"
],
"names": [],
"mappings": "AAKA,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAEpC,OAAO,eAAe,CAAC;AACvB,OAAO,8BAA8B,CAAC;AACtC,OAAO,gBAAgB,CAAC;AACxB,OAAO,4BAA4B,CAAC;AACpC,OAAO,cAAc,CAAC;AAEtB,eAAe,WAAW,CAAC;AAE3B,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,cAAc,gBAAgB,CAAC",
"mappings": "AAAA;;;GAGG,CAAC,MAAM;AACV,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAEpC,OAAO,eAAe,CAAC;AACvB,OAAO,8BAA8B,CAAC;AACtC,OAAO,gBAAgB,CAAC;AACxB,OAAO,4BAA4B,CAAC;AACpC,OAAO,cAAc,CAAC;AAEtB,eAAe,WAAW,CAAC;AAE3B,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,cAAc,gBAAgB,CAAC",
"sourcesContent": [
"/**\n * Main entry point for angular 1.x build\n * @publicapi @module ng1\n */ /** */\nexport * from './interface';\nexport * from './services';\nexport * from './statebuilders/views';\nexport * from './stateProvider';\nexport * from './urlRouterProvider';\n\nimport './injectables';\nimport './directives/stateDirectives';\nimport './stateFilters';\nimport './directives/viewDirective';\nimport './viewScroll';\n\nexport default 'ui.router';\n\nimport * as core from '@uirouter/core';\nexport { core };\nexport * from '@uirouter/core';\n"
]

File diff suppressed because one or more lines are too long

View file

@ -96,7 +96,7 @@ export interface _Ng1StateDeclaration extends StateDeclaration {
* views: {
* $default: {
* template: '<h1>foo</h1>',
* controller: 'FooController
* controller: 'FooController'
* }
* }
* }
@ -109,7 +109,7 @@ export interface _Ng1StateDeclaration extends StateDeclaration {
* var state = {
* name: 'foo',
* url: '/foo',
* controller: 'FooController, // invalid because views: exists
* controller: 'FooController', // invalid because views: exists
* views: {
* header: {
* template: '<h1>header</h1>'
@ -722,6 +722,8 @@ export interface TemplateFactoryProvider {
}
declare module '@uirouter/core/lib/state/stateRegistry' {
interface StateRegistry {
register(state: Ng1StateDeclaration): any;
register(state: Ng1StateDeclaration | {
new (): Ng1StateDeclaration;
}): any;
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,5 @@
/** @publicapi @module ng1 */ /** */
import { Obj } from '@uirouter/core';
/** @hidden */
export declare const resolveFactory: () => {
/**
@ -38,5 +40,5 @@ export declare const resolveFactory: () => {
*/
resolve: (invocables: {
[key: string]: Function;
}, locals?: {}, parent?: Promise<any>) => Promise<{}>;
}, locals?: {}, parent?: Promise<any>) => Promise<Obj>;
};

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/legacy/resolveService.ts"
],
"names": [],
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAO,MAAM,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxG,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;GAEG;AACH,IAAM,QAAQ,GAAG;IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,OAAO,EAAE,UAAC,UAAuC,EAAE,MAAW,EAAE,MAAqB;QAAlC,uBAAA,EAAA,WAAW;QAC5D,IAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,IAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,IAAM,OAAO,GAAG,IAAI,cAAc,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErF,IAAM,WAAW,GAAG,UAAC,YAAiB;YACpC,IAAM,MAAM,GAAG,UAAC,OAAY,IAAK,OAAA,kBAAkB,CAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAA,KAAK,IAAI,OAAA,cAAM,OAAA,KAAK,EAAL,CAAK,EAAX,CAAW,CAAC,EAAE,CAAC,EAA3E,CAA2E,CAAC;YAC7G,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAM,WAAW,GAAG,UAAC,GAAQ,EAAE,KAAiC;gBAC9D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YACF,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAChF,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,cAAc;AACd,MAAM,CAAC,IAAM,cAAc,GAAG,cAAM,OAAA,QAAQ,EAAR,CAAQ,CAAC;AAE7C,2BAA2B;AAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAO,cAAc,CAAC,CAAC",
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAO,MAAM,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxG,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;GAEG;AACH,IAAM,QAAQ,GAAG;IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,OAAO,EAAE,UAAC,UAAuC,EAAE,MAAW,EAAE,MAAqB;QAAlC,uBAAA,EAAA,WAAW;QAC5D,IAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,IAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,IAAM,OAAO,GAAG,IAAI,cAAc,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErF,IAAM,WAAW,GAAG,UAAC,YAAiB;YACpC,IAAM,MAAM,GAAG,UAAC,OAAY,IAAK,OAAA,kBAAkB,CAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAC,KAAK,IAAK,OAAA,cAAM,OAAA,KAAK,EAAL,CAAK,EAAX,CAAW,CAAC,EAAE,CAAC,EAA7E,CAA6E,CAAC;YAC/G,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAM,WAAW,GAAG,UAAC,GAAQ,EAAE,KAAiC;gBAC9D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YACF,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAClF,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,cAAc;AACd,MAAM,CAAC,IAAM,cAAc,GAAG,cAAM,OAAA,QAAQ,EAAR,CAAQ,CAAC;AAE7C,2BAA2B;AAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAO,cAAc,CAAC,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport { StateObject, PathNode, ResolveContext, Obj, mapObj, resolvablesBuilder } from '@uirouter/core';\nimport * as angular from 'angular';\n\n/**\n * Implementation of the legacy `$resolve` service for angular 1.\n */\nconst $resolve = {\n /**\n * Asynchronously injects a resolve block.\n *\n * This emulates most of the behavior of the ui-router 0.2.x $resolve.resolve() service API.\n *\n * ### Not bundled by default\n *\n * This API is no longer not part of the standard `@uirouter/angularjs` bundle.\n * For users of the prebuilt bundles, add the `release/resolveService.min.js` UMD bundle.\n * For bundlers (webpack, browserify, etc), add `@uirouter/angularjs/lib/legacy/resolveService`.\n *\n * ---\n *\n * Given an object `invocables`, where keys are strings and values are injectable functions,\n * injects each function, and waits for the resulting promise to resolve.\n * When all resulting promises are resolved, returns the results as an object.\n *\n * #### Example:\n * ```js\n * let invocables = {\n * foo: [ '$http', ($http) =>\n * $http.get('/api/foo').then(resp => resp.data) ],\n * bar: [ 'foo', '$http', (foo, $http) =>\n * $http.get('/api/bar/' + foo.barId).then(resp => resp.data) ]\n * }\n * $resolve.resolve(invocables)\n * .then(results => console.log(results.foo, results.bar))\n * // Logs foo and bar:\n * // { id: 123, barId: 456, fooData: 'foo data' }\n * // { id: 456, barData: 'bar data' }\n * ```\n *\n * @param invocables an object which looks like an [[StateDeclaration.resolve]] object; keys are resolve names and values are injectable functions\n * @param locals key/value pre-resolved data (locals)\n * @param parent a promise for a \"parent resolve\"\n */\n resolve: (invocables: { [key: string]: Function }, locals = {}, parent?: Promise<any>) => {\n const parentNode = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const node = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const context = new ResolveContext([parentNode, node]);\n\n context.addResolvables(resolvablesBuilder(<any>{ resolve: invocables }), node.state);\n\n const resolveData = (parentLocals: Obj) => {\n const rewrap = (_locals: Obj) => resolvablesBuilder(<any>{ resolve: mapObj(_locals, local => () => local) });\n context.addResolvables(rewrap(parentLocals), parentNode.state);\n context.addResolvables(rewrap(locals), node.state);\n\n const tuples2ObjR = (acc: Obj, tuple: { token: any; value: any }) => {\n acc[tuple.token] = tuple.value;\n return acc;\n };\n return context.resolvePath().then(results => results.reduce(tuples2ObjR, {}));\n };\n\n return parent ? parent.then(resolveData) : resolveData({});\n },\n};\n\n/** @hidden */\nexport const resolveFactory = () => $resolve;\n\n// The old $resolve service\nangular.module('ui.router').factory('$resolve', <any>resolveFactory);\n"
"/** @publicapi @module ng1 */ /** */\nimport { StateObject, PathNode, ResolveContext, Obj, mapObj, resolvablesBuilder } from '@uirouter/core';\nimport * as angular from 'angular';\n\n/**\n * Implementation of the legacy `$resolve` service for angular 1.\n */\nconst $resolve = {\n /**\n * Asynchronously injects a resolve block.\n *\n * This emulates most of the behavior of the ui-router 0.2.x $resolve.resolve() service API.\n *\n * ### Not bundled by default\n *\n * This API is no longer not part of the standard `@uirouter/angularjs` bundle.\n * For users of the prebuilt bundles, add the `release/resolveService.min.js` UMD bundle.\n * For bundlers (webpack, browserify, etc), add `@uirouter/angularjs/lib/legacy/resolveService`.\n *\n * ---\n *\n * Given an object `invocables`, where keys are strings and values are injectable functions,\n * injects each function, and waits for the resulting promise to resolve.\n * When all resulting promises are resolved, returns the results as an object.\n *\n * #### Example:\n * ```js\n * let invocables = {\n * foo: [ '$http', ($http) =>\n * $http.get('/api/foo').then(resp => resp.data) ],\n * bar: [ 'foo', '$http', (foo, $http) =>\n * $http.get('/api/bar/' + foo.barId).then(resp => resp.data) ]\n * }\n * $resolve.resolve(invocables)\n * .then(results => console.log(results.foo, results.bar))\n * // Logs foo and bar:\n * // { id: 123, barId: 456, fooData: 'foo data' }\n * // { id: 456, barData: 'bar data' }\n * ```\n *\n * @param invocables an object which looks like an [[StateDeclaration.resolve]] object; keys are resolve names and values are injectable functions\n * @param locals key/value pre-resolved data (locals)\n * @param parent a promise for a \"parent resolve\"\n */\n resolve: (invocables: { [key: string]: Function }, locals = {}, parent?: Promise<any>) => {\n const parentNode = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const node = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const context = new ResolveContext([parentNode, node]);\n\n context.addResolvables(resolvablesBuilder(<any>{ resolve: invocables }), node.state);\n\n const resolveData = (parentLocals: Obj) => {\n const rewrap = (_locals: Obj) => resolvablesBuilder(<any>{ resolve: mapObj(_locals, (local) => () => local) });\n context.addResolvables(rewrap(parentLocals), parentNode.state);\n context.addResolvables(rewrap(locals), node.state);\n\n const tuples2ObjR = (acc: Obj, tuple: { token: any; value: any }) => {\n acc[tuple.token] = tuple.value;\n return acc;\n };\n return context.resolvePath().then((results) => results.reduce(tuples2ObjR, {}));\n };\n\n return parent ? parent.then(resolveData) : resolveData({});\n },\n};\n\n/** @hidden */\nexport const resolveFactory = () => $resolve;\n\n// The old $resolve service\nangular.module('ui.router').factory('$resolve', <any>resolveFactory);\n"
]
}

View file

@ -267,6 +267,7 @@ export var $stateNotFound;
.provider('$stateEvents', $StateEventsProvider)
.run([
'$stateEvents',
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function ($stateEvents) {
/* Invokes $get() */
},

File diff suppressed because one or more lines are too long

View file

@ -34,6 +34,7 @@ var Ng1LocationServices = /** @class */ (function () {
return x != null ? x.toString().replace(/(~~|~2F)/g, function (m) { return ({ '~~': '~', '~2F': '/' }[m]); }) : x;
};
};
// eslint-disable-next-line @typescript-eslint/no-empty-function
Ng1LocationServices.prototype.dispose = function () { };
Ng1LocationServices.prototype.onChange = function (callback) {
var _this = this;

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/locationServices.ts"
],
"names": [],
"mappings": "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",
"mappings": "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",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport { LocationConfig, LocationServices, UIRouter, ParamType, isDefined } from '@uirouter/core';\nimport { val, createProxyFunctions, removeFrom, isObject } from '@uirouter/core';\nimport { ILocationService, ILocationProvider, IWindowService } from 'angular';\n\n/**\n * Implements UI-Router LocationServices and LocationConfig using Angular 1's $location service\n * @internalapi\n */\nexport class Ng1LocationServices implements LocationConfig, LocationServices {\n private $locationProvider: ILocationProvider;\n private $location: ILocationService;\n private $sniffer: any;\n private $browser: any;\n private $window: IWindowService;\n\n path;\n search;\n hash;\n hashPrefix;\n port;\n protocol;\n host;\n\n private _baseHref: string;\n\n // .onChange() registry\n private _urlListeners: Function[] = [];\n\n /**\n * Applys ng1-specific path parameter encoding\n *\n * The Angular 1 `$location` service is a bit weird.\n * It doesn't allow slashes to be encoded/decoded bi-directionally.\n *\n * See the writeup at https://github.com/angular-ui/ui-router/issues/2598\n *\n * This code patches the `path` parameter type so it encoded/decodes slashes as ~2F\n *\n * @param router\n */\n static monkeyPatchPathParameterType(router: UIRouter) {\n const pathType: ParamType = router.urlMatcherFactory.type('path');\n\n pathType.encode = (x: any) =>\n x != null ? x.toString().replace(/(~|\\/)/g, m => ({ '~': '~~', '/': '~2F' }[m])) : x;\n\n pathType.decode = (x: string) =>\n x != null ? x.toString().replace(/(~~|~2F)/g, m => ({ '~~': '~', '~2F': '/' }[m])) : x;\n }\n\n dispose() {}\n\n constructor($locationProvider: ILocationProvider) {\n this.$locationProvider = $locationProvider;\n const _lp = val($locationProvider);\n createProxyFunctions(_lp, this, _lp, ['hashPrefix']);\n }\n\n onChange(callback: Function) {\n this._urlListeners.push(callback);\n return () => removeFrom(this._urlListeners)(callback);\n }\n\n html5Mode() {\n let html5Mode: any = this.$locationProvider.html5Mode();\n html5Mode = isObject(html5Mode) ? html5Mode.enabled : html5Mode;\n return html5Mode && this.$sniffer.history;\n }\n\n baseHref() {\n return this._baseHref || (this._baseHref = this.$browser.baseHref() || this.$window.location.pathname);\n }\n\n url(newUrl?: string, replace = false, state?) {\n if (isDefined(newUrl)) this.$location.url(newUrl);\n if (replace) this.$location.replace();\n if (state) this.$location.state(state);\n return this.$location.url();\n }\n\n _runtimeServices($rootScope, $location: ILocationService, $sniffer, $browser, $window: IWindowService) {\n this.$location = $location;\n this.$sniffer = $sniffer;\n this.$browser = $browser;\n this.$window = $window;\n\n // Bind $locationChangeSuccess to the listeners registered in LocationService.onChange\n $rootScope.$on('$locationChangeSuccess', evt => this._urlListeners.forEach(fn => fn(evt)));\n const _loc = val($location);\n\n // Bind these LocationService functions to $location\n createProxyFunctions(_loc, this, _loc, ['replace', 'path', 'search', 'hash']);\n // Bind these LocationConfig functions to $location\n createProxyFunctions(_loc, this, _loc, ['port', 'protocol', 'host']);\n }\n}\n"
"/** @publicapi @module ng1 */ /** */\nimport { LocationConfig, LocationServices, UIRouter, ParamType, isDefined } from '@uirouter/core';\nimport { val, createProxyFunctions, removeFrom, isObject } from '@uirouter/core';\nimport { ILocationService, ILocationProvider, IWindowService } from 'angular';\n\n/**\n * Implements UI-Router LocationServices and LocationConfig using Angular 1's $location service\n * @internalapi\n */\nexport class Ng1LocationServices implements LocationConfig, LocationServices {\n private $locationProvider: ILocationProvider;\n private $location: ILocationService;\n private $sniffer: any;\n private $browser: any;\n private $window: IWindowService;\n\n path;\n search;\n hash;\n hashPrefix;\n port;\n protocol;\n host;\n\n private _baseHref: string;\n\n // .onChange() registry\n private _urlListeners: Function[] = [];\n\n /**\n * Applys ng1-specific path parameter encoding\n *\n * The Angular 1 `$location` service is a bit weird.\n * It doesn't allow slashes to be encoded/decoded bi-directionally.\n *\n * See the writeup at https://github.com/angular-ui/ui-router/issues/2598\n *\n * This code patches the `path` parameter type so it encoded/decodes slashes as ~2F\n *\n * @param router\n */\n static monkeyPatchPathParameterType(router: UIRouter) {\n const pathType: ParamType = router.urlMatcherFactory.type('path');\n\n pathType.encode = (x: any) =>\n x != null ? x.toString().replace(/(~|\\/)/g, (m) => ({ '~': '~~', '/': '~2F' }[m])) : x;\n\n pathType.decode = (x: string) =>\n x != null ? x.toString().replace(/(~~|~2F)/g, (m) => ({ '~~': '~', '~2F': '/' }[m])) : x;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n dispose() {}\n\n constructor($locationProvider: ILocationProvider) {\n this.$locationProvider = $locationProvider;\n const _lp = val($locationProvider);\n createProxyFunctions(_lp, this, _lp, ['hashPrefix']);\n }\n\n onChange(callback: Function) {\n this._urlListeners.push(callback);\n return () => removeFrom(this._urlListeners)(callback);\n }\n\n html5Mode() {\n let html5Mode: any = this.$locationProvider.html5Mode();\n html5Mode = isObject(html5Mode) ? html5Mode.enabled : html5Mode;\n return html5Mode && this.$sniffer.history;\n }\n\n baseHref() {\n return this._baseHref || (this._baseHref = this.$browser.baseHref() || this.$window.location.pathname);\n }\n\n url(newUrl?: string, replace = false, state?) {\n if (isDefined(newUrl)) this.$location.url(newUrl);\n if (replace) this.$location.replace();\n if (state) this.$location.state(state);\n return this.$location.url();\n }\n\n _runtimeServices($rootScope, $location: ILocationService, $sniffer, $browser, $window: IWindowService) {\n this.$location = $location;\n this.$sniffer = $sniffer;\n this.$browser = $browser;\n this.$window = $window;\n\n // Bind $locationChangeSuccess to the listeners registered in LocationService.onChange\n $rootScope.$on('$locationChangeSuccess', (evt) => this._urlListeners.forEach((fn) => fn(evt)));\n const _loc = val($location);\n\n // Bind these LocationService functions to $location\n createProxyFunctions(_loc, this, _loc, ['replace', 'path', 'search', 'hash']);\n // Bind these LocationConfig functions to $location\n createProxyFunctions(_loc, this, _loc, ['port', 'protocol', 'host']);\n }\n}\n"
]
}

View file

@ -11,5 +11,8 @@ declare module '@uirouter/core/lib/router' {
}
}
export declare function watchDigests($rootScope: IRootScopeService): void;
export declare namespace watchDigests {
var $inject: string[];
}
/** @hidden TODO: find a place to move this */
export declare const getLocals: (ctx: ResolveContext) => TypedMap<any>;

View file

@ -1,3 +1,5 @@
/* eslint-disable @typescript-eslint/no-empty-function */
/* eslint-disable @typescript-eslint/no-unused-vars */
/**
* # Angular 1 types
*
@ -22,7 +24,7 @@ var mod_util = angular.module('ui.router.util', ['ui.router.init']);
var mod_rtr = angular.module('ui.router.router', ['ui.router.util']);
var mod_state = angular.module('ui.router.state', ['ui.router.router', 'ui.router.util', 'ui.router.angular1']);
var mod_main = angular.module('ui.router', ['ui.router.init', 'ui.router.state', 'ui.router.angular1']);
var mod_cmpt = angular.module('ui.router.compat', ['ui.router']); // tslint:disable-line
var mod_cmpt = angular.module('ui.router.compat', ['ui.router']);
var router = null;
$uiRouterProvider.$inject = ['$locationProvider'];
/** This angular 1 provider instantiates a Router and exposes its services via the angular injector */
@ -36,6 +38,8 @@ function $uiRouterProvider($locationProvider) {
router.stateRegistry.decorator('onRetain', getStateHookBuilder('onRetain'));
router.stateRegistry.decorator('onEnter', getStateHookBuilder('onEnter'));
router.viewService._pluginapi._viewConfigFactory('ng1', getNg1ViewConfigFactory());
// Disable decoding of params by UrlMatcherFactory because $location already handles this
router.urlService.config._decodeParams = false;
var ng1LocationService = (router.locationService = router.locationConfig = new Ng1LocationServices($locationProvider));
Ng1LocationServices.monkeyPatchPathParameterType(router);
// backwards compat: also expose router instance as $uiRouterProvider.router
@ -64,7 +68,7 @@ function runBlock($injector, $q, $uiRouter) {
services.$injector = $injector;
services.$q = $q;
// https://github.com/angular-ui/ui-router/issues/3678
if (!$injector.hasOwnProperty('strictDi')) {
if (!Object.prototype.hasOwnProperty.call($injector, 'strictDi')) {
try {
$injector.invoke(function (checkStrictDi) { });
}

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,11 @@
/** @publicapi @module ng1 */ /** */
import { StateService } from '@uirouter/core';
export declare function $IsStateFilter($state: StateService): any;
export declare function $IncludedByStateFilter($state: StateService): any;
declare function $IsStateFilter($state: StateService): any;
declare namespace $IsStateFilter {
var $inject: string[];
}
declare function $IncludedByStateFilter($state: StateService): any;
declare namespace $IncludedByStateFilter {
var $inject: string[];
}
export { $IsStateFilter, $IncludedByStateFilter };

View file

@ -11,7 +11,7 @@ import { ng as angular } from './angular';
* ```
*/
$IsStateFilter.$inject = ['$state'];
export function $IsStateFilter($state) {
function $IsStateFilter($state) {
var isFilter = function (state, params, options) {
return $state.is(state, params, options);
};
@ -29,15 +29,13 @@ export function $IsStateFilter($state) {
* ```
*/
$IncludedByStateFilter.$inject = ['$state'];
export function $IncludedByStateFilter($state) {
function $IncludedByStateFilter($state) {
var includesFilter = function (state, params, options) {
return $state.includes(state, params, options);
};
includesFilter.$stateful = true;
return includesFilter;
}
angular
.module('ui.router.state')
.filter('isState', $IsStateFilter)
.filter('includedByState', $IncludedByStateFilter);
angular.module('ui.router.state').filter('isState', $IsStateFilter).filter('includedByState', $IncludedByStateFilter);
export { $IsStateFilter, $IncludedByStateFilter };
//# sourceMappingURL=stateFilters.js.map

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/stateFilters.ts"
],
"names": [],
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AAEpC,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C;;;;;;;;;GASG;AACH,cAAc,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpC,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAM,QAAQ,GAAQ,UAAS,KAAkB,EAAE,MAAW,EAAE,OAAoC;QAClG,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,sBAAsB,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,IAAM,cAAc,GAAQ,UAAS,KAAkB,EAAE,MAAW,EAAE,OAAmC;QACvG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,OAAO;KACJ,MAAM,CAAC,iBAAiB,CAAC;KACzB,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC;KACjC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC",
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AAEpC,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C;;;;;;;;;GASG;AACH,cAAc,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAS,cAAc,CAAC,MAAoB;IAC1C,IAAM,QAAQ,GAAQ,UAAU,KAAkB,EAAE,MAAW,EAAE,OAAoC;QACnG,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,sBAAsB,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,SAAS,sBAAsB,CAAC,MAAoB;IAClD,IAAM,cAAc,GAAQ,UAAU,KAAkB,EAAE,MAAW,EAAE,OAAmC;QACxG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;AAEtH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\n\nimport { ng as angular } from './angular';\nimport { Obj, StateService, StateOrName } from '@uirouter/core';\n\n/**\n * `isState` Filter: truthy if the current state is the parameter\n *\n * Translates to [[StateService.is]] `$state.is(\"stateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'stateName' | isState\">show if state is 'stateName'</div>\n * ```\n */\n$IsStateFilter.$inject = ['$state'];\nexport function $IsStateFilter($state: StateService) {\n const isFilter: any = function(state: StateOrName, params: Obj, options?: { relative?: StateOrName }) {\n return $state.is(state, params, options);\n };\n isFilter.$stateful = true;\n return isFilter;\n}\n\n/**\n * `includedByState` Filter: truthy if the current state includes the parameter\n *\n * Translates to [[StateService.includes]]` $state.is(\"fullOrPartialStateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'fullOrPartialStateName' | includedByState\">show if state includes 'fullOrPartialStateName'</div>\n * ```\n */\n$IncludedByStateFilter.$inject = ['$state'];\nexport function $IncludedByStateFilter($state: StateService) {\n const includesFilter: any = function(state: StateOrName, params: Obj, options: { relative?: StateOrName }) {\n return $state.includes(state, params, options);\n };\n includesFilter.$stateful = true;\n return includesFilter;\n}\n\nangular\n .module('ui.router.state')\n .filter('isState', $IsStateFilter)\n .filter('includedByState', $IncludedByStateFilter);\n"
"/** @publicapi @module ng1 */ /** */\n\nimport { ng as angular } from './angular';\nimport { Obj, StateService, StateOrName } from '@uirouter/core';\n\n/**\n * `isState` Filter: truthy if the current state is the parameter\n *\n * Translates to [[StateService.is]] `$state.is(\"stateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'stateName' | isState\">show if state is 'stateName'</div>\n * ```\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state: StateService) {\n const isFilter: any = function (state: StateOrName, params: Obj, options?: { relative?: StateOrName }) {\n return $state.is(state, params, options);\n };\n isFilter.$stateful = true;\n return isFilter;\n}\n\n/**\n * `includedByState` Filter: truthy if the current state includes the parameter\n *\n * Translates to [[StateService.includes]]` $state.is(\"fullOrPartialStateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'fullOrPartialStateName' | includedByState\">show if state includes 'fullOrPartialStateName'</div>\n * ```\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state: StateService) {\n const includesFilter: any = function (state: StateOrName, params: Obj, options: { relative?: StateOrName }) {\n return $state.includes(state, params, options);\n };\n includesFilter.$stateful = true;\n return includesFilter;\n}\n\nangular.module('ui.router.state').filter('isState', $IsStateFilter).filter('includedByState', $IncludedByStateFilter);\n\nexport { $IsStateFilter, $IncludedByStateFilter };\n"
]
}

View file

@ -110,7 +110,7 @@ export declare class StateProvider {
*
* @return {object} $stateProvider - $stateProvider instance
*/
decorator(name: string, func: BuilderFunction): Function | this | BuilderFunction[];
decorator(name: string, func: BuilderFunction): Function | this;
/**
* Registers a state
*

View file

@ -1,5 +1,5 @@
/** @publicapi @module ng1 */ /** */
import { StateObject, TransitionStateHookFn, BuilderFunction } from '@uirouter/core';
import { StateObject, TransitionStateHookFn } from '@uirouter/core';
/**
* This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,
* `onRetain` callback hooks on a [[Ng1StateDeclaration]].
@ -9,4 +9,4 @@ import { StateObject, TransitionStateHookFn, BuilderFunction } from '@uirouter/c
*
* @internalapi
*/
export declare const getStateHookBuilder: (hookName: "onEnter" | "onExit" | "onRetain") => (stateObject: StateObject, parentFn: BuilderFunction) => TransitionStateHookFn;
export declare const getStateHookBuilder: (hookName: 'onEnter' | 'onExit' | 'onRetain') => (stateObject: StateObject) => TransitionStateHookFn;

View file

@ -11,7 +11,7 @@ import { getLocals } from '../services';
* @internalapi
*/
export var getStateHookBuilder = function (hookName) {
return function stateHookBuilder(stateObject, parentFn) {
return function stateHookBuilder(stateObject) {
var hook = stateObject[hookName];
var pathname = hookName === 'onExit' ? 'from' : 'to';
function decoratedNg1Hook(trans, state) {

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/statebuilders/onEnterExitRetain.ts"
],
"names": [],
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,EAKL,QAAQ,EACR,cAAc,EACd,MAAM,GAEP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;;;;;GAQG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,QAA2C;IAC7E,OAAA,SAAS,gBAAgB,CAAC,WAAwB,EAAE,QAAyB;QAC3E,IAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvD,SAAS,gBAAgB,CAAC,KAAiB,EAAE,KAA0B;YACrE,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,IAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,IAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;AAZD,CAYC,CAAC",
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,EAKL,QAAQ,EACR,cAAc,EACd,MAAM,GACP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;;;;;GAQG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,QAA2C;IAC7E,OAAA,SAAS,gBAAgB,CAAC,WAAwB;QAChD,IAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvD,SAAS,gBAAgB,CAAC,KAAiB,EAAE,KAA0B;YACrE,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,IAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,IAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;AAZD,CAYC,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport {\n StateObject,\n TransitionStateHookFn,\n HookResult,\n Transition,\n services,\n ResolveContext,\n extend,\n BuilderFunction,\n} from '@uirouter/core';\nimport { getLocals } from '../services';\nimport { Ng1StateDeclaration } from '../interface';\n\n/**\n * This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,\n * `onRetain` callback hooks on a [[Ng1StateDeclaration]].\n *\n * When the [[StateBuilder]] builds a [[StateObject]] object from a raw [[StateDeclaration]], this builder\n * ensures that those hooks are injectable for @uirouter/angularjs (ng1).\n *\n * @internalapi\n */\nexport const getStateHookBuilder = (hookName: 'onEnter' | 'onExit' | 'onRetain') =>\n function stateHookBuilder(stateObject: StateObject, parentFn: BuilderFunction): TransitionStateHookFn {\n const hook = stateObject[hookName];\n const pathname = hookName === 'onExit' ? 'from' : 'to';\n\n function decoratedNg1Hook(trans: Transition, state: Ng1StateDeclaration): HookResult {\n const resolveContext = new ResolveContext(trans.treeChanges(pathname));\n const subContext = resolveContext.subContext(state.$$state());\n const locals = extend(getLocals(subContext), { $state$: state, $transition$: trans });\n return services.$injector.invoke(hook, this, locals);\n }\n\n return hook ? decoratedNg1Hook : undefined;\n };\n"
"/** @publicapi @module ng1 */ /** */\nimport {\n StateObject,\n TransitionStateHookFn,\n HookResult,\n Transition,\n services,\n ResolveContext,\n extend,\n} from '@uirouter/core';\nimport { getLocals } from '../services';\nimport { Ng1StateDeclaration } from '../interface';\n\n/**\n * This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,\n * `onRetain` callback hooks on a [[Ng1StateDeclaration]].\n *\n * When the [[StateBuilder]] builds a [[StateObject]] object from a raw [[StateDeclaration]], this builder\n * ensures that those hooks are injectable for @uirouter/angularjs (ng1).\n *\n * @internalapi\n */\nexport const getStateHookBuilder = (hookName: 'onEnter' | 'onExit' | 'onRetain') =>\n function stateHookBuilder(stateObject: StateObject): TransitionStateHookFn {\n const hook = stateObject[hookName];\n const pathname = hookName === 'onExit' ? 'from' : 'to';\n\n function decoratedNg1Hook(trans: Transition, state: Ng1StateDeclaration): HookResult {\n const resolveContext = new ResolveContext(trans.treeChanges(pathname));\n const subContext = resolveContext.subContext(state.$$state());\n const locals = extend(getLocals(subContext), { $state$: state, $transition$: trans });\n return services.$injector.invoke(hook, this, locals);\n }\n\n return hook ? decoratedNg1Hook : undefined;\n };\n"
]
}

View file

@ -1,3 +1,4 @@
/** @publicapi @module ng1 */ /** */
import { StateObject, ViewConfig, ViewConfigFactory, PathNode, ResolveContext, IInjectable } from '@uirouter/core';
import { Ng1ViewDeclaration } from '../interface';
import { TemplateFactory } from '../templateFactory';
@ -14,7 +15,9 @@ export declare function getNg1ViewConfigFactory(): ViewConfigFactory;
*
* @internalapi
*/
export declare function ng1ViewsBuilder(state: StateObject): {};
export declare function ng1ViewsBuilder(state: StateObject): {
[key: string]: Ng1ViewDeclaration;
};
/** @internalapi */
export declare class Ng1ViewConfig implements ViewConfig {
path: PathNode[];

View file

@ -1,3 +1,4 @@
/** @publicapi @module ng1 */ /** */
import { pick, forEach, tail, extend, isArray, isInjectable, isDefined, isString, services, trace, ViewService, ResolveContext, Resolvable, } from '@uirouter/core';
/** @internalapi */
export function getNg1ViewConfigFactory() {

File diff suppressed because one or more lines are too long

View file

@ -165,9 +165,7 @@ var TemplateFactory = /** @class */ (function () {
// some-attr="::$resolve.someResolveName"
return attrName + "='" + prefix + "$resolve." + resolveName + "'";
};
var attrs = getComponentBindings(component)
.map(attributeTpl)
.join(' ');
var attrs = getComponentBindings(component).map(attributeTpl).join(' ');
var kebobName = kebob(component);
return "<" + kebobName + " " + attrs + "></" + kebobName + ">";
};

File diff suppressed because one or more lines are too long

View file

@ -20,7 +20,7 @@ export interface RawNg1RuleFunction {
*/
export declare class UrlRouterProvider {
private router;
static injectableHandler(router: UIRouter, handler: any): UrlRuleHandlerFn;
static injectableHandler(router: UIRouter, handler: IInjectable): UrlRuleHandlerFn;
/** @hidden */
constructor(/** @hidden */ router: UIRouter);
/** @hidden */

File diff suppressed because one or more lines are too long

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/viewScroll.ts"
],
"names": [],
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAe1C,cAAc;AACd,SAAS,mBAAmB;IAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,IAAI,CAAC,eAAe,GAAG;QACrB,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,GAAG;QACV,eAAe;QACf,UAAU;QACV,UAAS,aAAmC,EAAE,QAAyB;YACrE,IAAI,eAAe,EAAE;gBACnB,OAAO,aAAa,CAAC;aACtB;YAED,OAAO,UAAS,QAAgB;gBAC9B,OAAO,QAAQ,CACb;oBACE,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAC/B,CAAC,EACD,CAAC,EACD,KAAK,CACN,CAAC;YACJ,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,eAAe,EAA2B,mBAAmB,CAAC,CAAC",
"mappings": "AAAA,6BAA6B,CAAC,MAAM;AACpC,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAe1C,cAAc;AACd,SAAS,mBAAmB;IAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,IAAI,CAAC,eAAe,GAAG;QACrB,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,GAAG;QACV,eAAe;QACf,UAAU;QACV,UAAU,aAAmC,EAAE,QAAyB;YACtE,IAAI,eAAe,EAAE;gBACnB,OAAO,aAAa,CAAC;aACtB;YAED,OAAO,UAAU,QAAgB;gBAC/B,OAAO,QAAQ,CACb;oBACE,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAC/B,CAAC,EACD,CAAC,EACD,KAAK,CACN,CAAC;YACJ,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,eAAe,EAA2B,mBAAmB,CAAC,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport { ng as angular } from './angular';\nimport { IServiceProviderFactory } from 'angular';\nimport IAnchorScrollService = angular.IAnchorScrollService;\nimport ITimeoutService = angular.ITimeoutService;\n\nexport interface UIViewScrollProvider {\n /**\n * Uses standard anchorScroll behavior\n *\n * Reverts [[$uiViewScroll]] back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * service for scrolling based on the url anchor.\n */\n useAnchorScroll(): void;\n}\n\n/** @hidden */\nfunction $ViewScrollProvider() {\n let useAnchorScroll = false;\n\n this.useAnchorScroll = function() {\n useAnchorScroll = true;\n };\n\n this.$get = [\n '$anchorScroll',\n '$timeout',\n function($anchorScroll: IAnchorScrollService, $timeout: ITimeoutService): Function {\n if (useAnchorScroll) {\n return $anchorScroll;\n }\n\n return function($element: JQuery) {\n return $timeout(\n function() {\n $element[0].scrollIntoView();\n },\n 0,\n false\n );\n };\n },\n ];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', <IServiceProviderFactory>$ViewScrollProvider);\n"
"/** @publicapi @module ng1 */ /** */\nimport { ng as angular } from './angular';\nimport { IServiceProviderFactory } from 'angular';\nimport IAnchorScrollService = angular.IAnchorScrollService;\nimport ITimeoutService = angular.ITimeoutService;\n\nexport interface UIViewScrollProvider {\n /**\n * Uses standard anchorScroll behavior\n *\n * Reverts [[$uiViewScroll]] back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * service for scrolling based on the url anchor.\n */\n useAnchorScroll(): void;\n}\n\n/** @hidden */\nfunction $ViewScrollProvider() {\n let useAnchorScroll = false;\n\n this.useAnchorScroll = function () {\n useAnchorScroll = true;\n };\n\n this.$get = [\n '$anchorScroll',\n '$timeout',\n function ($anchorScroll: IAnchorScrollService, $timeout: ITimeoutService): Function {\n if (useAnchorScroll) {\n return $anchorScroll;\n }\n\n return function ($element: JQuery) {\n return $timeout(\n function () {\n $element[0].scrollIntoView();\n },\n 0,\n false\n );\n };\n },\n ];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', <IServiceProviderFactory>$ViewScrollProvider);\n"
]
}

View file

@ -1,5 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ng = void 0;
/** @publicapi @module ng1 */ /** */
var ng_from_import = require("angular");
/** @hidden */ var ng_from_global = angular;

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/angular.ts"
],
"names": [],
"mappings": ";;AAAA,6BAA6B,CAAC,MAAM;AACpC,wCAA0C;AAE1C,cAAc,CAAC,IAAM,cAAc,GAAG,OAAO,CAAC;AAC9C,cAAc,CAAc,QAAA,EAAE,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC",
"mappings": ";;;AAAA,6BAA6B,CAAC,MAAM;AACpC,wCAA0C;AAE1C,cAAc,CAAC,IAAM,cAAc,GAAG,OAAO,CAAC;AAC9C,cAAc,CAAc,QAAA,EAAE,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport * as ng_from_import from 'angular';\n/** @hidden */ declare var angular;\n/** @hidden */ const ng_from_global = angular;\n/** @hidden */ export const ng = ng_from_import && ng_from_import.module ? ng_from_import : ng_from_global;\n"
"/** @publicapi @module ng1 */ /** */\nimport * as ng_from_import from 'angular';\n/** @hidden */ declare let angular;\n/** @hidden */ const ng_from_global = angular;\n/** @hidden */ export const ng = ng_from_import && ng_from_import.module ? ng_from_import : ng_from_global;\n"
]
}

View file

@ -1,5 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable @typescript-eslint/no-empty-interface */
/* eslint-disable prefer-const */
/**
* # Angular 1 Directives
*
@ -12,11 +14,10 @@ var angular_1 = require("../angular");
var core_1 = require("@uirouter/core");
/** @hidden */
function parseStateRef(ref) {
var parsed;
var paramsOnly = ref.match(/^\s*({[^}]*})\s*$/);
if (paramsOnly)
ref = '(' + paramsOnly[1] + ')';
parsed = ref.replace(/\n/g, ' ').match(/^\s*([^(]*?)\s*(\((.*)\))?\s*$/);
var parsed = ref.replace(/\n/g, ' ').match(/^\s*([^(]*?)\s*(\((.*)\))?\s*$/);
if (!parsed || parsed.length !== 4)
throw new Error("Invalid state ref '" + ref + "'");
return { state: parsed[1] || null, paramExpr: parsed[3] || null };
@ -49,7 +50,7 @@ function getTypeInfo(el) {
function clickHook(el, $state, $timeout, type, getDef) {
return function (e) {
var button = e.which || e.button, target = getDef();
if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || el.attr('target'))) {
if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey || el.attr('target'))) {
// HACK: This is to allow ng-clicks to be processed before the transition is initiated:
var transition_1 = $timeout(function () {
if (!el.attr('disabled')) {
@ -242,7 +243,6 @@ uiSrefDirective = [
var type = getTypeInfo(element);
var active = uiSrefActive[1] || uiSrefActive[0];
var unlinkInfoFn = null;
var hookFn;
var rawDef = {};
var getDef = function () { return processedDef($state, element, rawDef); };
var ref = parseStateRef(attrs.uiSref);
@ -269,7 +269,7 @@ uiSrefDirective = [
scope.$on('$destroy', $uiRouter.transitionService.onSuccess({}, update));
if (!type.clickable)
return;
hookFn = clickHook(element, $state, $timeout, type, getDef);
var hookFn = clickHook(element, $state, $timeout, type, getDef);
bindEvents(element, scope, hookFn, rawDef.uiStateOpts);
},
};
@ -603,9 +603,7 @@ uiSrefActiveDirective = [
.map(splitClasses)
.reduce(core_1.unnestR, []);
};
var allClasses = getClasses(states)
.concat(splitClasses(activeEqClass))
.reduce(core_1.uniqR, []);
var allClasses = getClasses(states).concat(splitClasses(activeEqClass)).reduce(core_1.uniqR, []);
var fuzzyClasses = getClasses(states.filter(function (x) { return $state.includes(x.state.name, x.params); }));
var exactlyMatchesAny = !!states.filter(function (x) { return $state.is(x.state.name, x.params); }).length;
var exactClasses = exactlyMatchesAny ? splitClasses(activeEqClass) : [];

File diff suppressed because one or more lines are too long

View file

@ -1,10 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.uiView = void 0;
/** @publicapi @module directives */ /** */
var core_1 = require("@uirouter/core");
var angular_1 = require("../angular");
var services_1 = require("../services");
var views_1 = require("../statebuilders/views");
// eslint-disable-next-line prefer-const
exports.uiView = [
'$view',
'$animate',
@ -12,7 +14,7 @@ exports.uiView = [
'$interpolate',
'$q',
function $ViewDirective($view, $animate, $uiViewScroll, $interpolate, $q) {
function getRenderer(attrs, scope) {
function getRenderer() {
return {
enter: function (element, target, cb) {
if (angular_1.ng.version.minor > 2) {
@ -47,8 +49,8 @@ exports.uiView = [
transclude: 'element',
compile: function (tElement, tAttrs, $transclude) {
return function (scope, $element, attrs) {
var onloadExp = attrs['onload'] || '', autoScrollExp = attrs['autoscroll'], renderer = getRenderer(attrs, scope), inherited = $element.inheritedData('$uiView') || rootData, name = $interpolate(attrs['uiView'] || attrs['name'] || '')(scope) || '$default';
var previousEl, currentEl, currentScope, viewConfig, unregister;
var onloadExp = attrs['onload'] || '', autoScrollExp = attrs['autoscroll'], renderer = getRenderer(), inherited = $element.inheritedData('$uiView') || rootData, name = $interpolate(attrs['uiView'] || attrs['name'] || '')(scope) || '$default';
var previousEl, currentEl, currentScope, viewConfig;
var activeUIView = {
$type: 'ng1',
id: directive.count++,
@ -77,7 +79,7 @@ exports.uiView = [
}
$element.data('$uiView', { $uiView: activeUIView });
updateView();
unregister = $view.registerUIView(activeUIView);
var unregister = $view.registerUIView(activeUIView);
scope.$on('$destroy', function () {
core_1.trace.traceUIViewEvent('Destroying/Unregistering', activeUIView);
unregister();
@ -163,9 +165,9 @@ exports.uiView = [
return directive;
},
];
$ViewDirectiveFill.$inject = ['$compile', '$controller', '$transitions', '$view', '$q', '$timeout'];
$ViewDirectiveFill.$inject = ['$compile', '$controller', '$transitions', '$view', '$q'];
/** @hidden */
function $ViewDirectiveFill($compile, $controller, $transitions, $view, $q, $timeout) {
function $ViewDirectiveFill($compile, $controller, $transitions, $view, $q) {
var getControllerAs = core_1.parse('viewDecl.controllerAs');
var getResolveAs = core_1.parse('viewDecl.resolveAs');
return {
@ -234,7 +236,8 @@ var _uiCanExitId = 0;
/** @hidden TODO: move these callbacks to $view and/or `/hooks/components.ts` or something */
function registerControllerCallbacks($q, $transitions, controllerInstance, $scope, cfg) {
// Call $onInit() ASAP
if (core_1.isFunction(controllerInstance.$onInit) && !(cfg.viewDecl.component && hasComponentImpl)) {
if (core_1.isFunction(controllerInstance.$onInit) &&
!((cfg.viewDecl.component || cfg.viewDecl.componentProvider) && hasComponentImpl)) {
controllerInstance.$onInit();
}
var viewState = core_1.tail(cfg.path).state.self;
@ -252,14 +255,8 @@ function registerControllerCallbacks($q, $transitions, controllerInstance, $scop
var toParams = $transition$.params('to');
var fromParams = $transition$.params('from');
var getNodeSchema = function (node) { return node.paramSchema; };
var toSchema = $transition$
.treeChanges('to')
.map(getNodeSchema)
.reduce(core_1.unnestR, []);
var fromSchema = $transition$
.treeChanges('from')
.map(getNodeSchema)
.reduce(core_1.unnestR, []);
var toSchema = $transition$.treeChanges('to').map(getNodeSchema).reduce(core_1.unnestR, []);
var fromSchema = $transition$.treeChanges('from').map(getNodeSchema).reduce(core_1.unnestR, []);
// Find the to params that have different values than the from params
var changedToParams = toSchema.filter(function (param) {
var idx = fromSchema.indexOf(param);

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,25 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./services"));
__export(require("./statebuilders/views"));
__export(require("./stateProvider"));
__export(require("./urlRouterProvider"));
exports.core = void 0;
/**
* Main entry point for angular 1.x build
* @publicapi @module ng1
*/ /** */
__exportStar(require("./interface"), exports);
__exportStar(require("./services"), exports);
__exportStar(require("./statebuilders/views"), exports);
__exportStar(require("./stateProvider"), exports);
__exportStar(require("./urlRouterProvider"), exports);
require("./injectables");
require("./directives/stateDirectives");
require("./stateFilters");
@ -15,5 +28,5 @@ require("./viewScroll");
exports.default = 'ui.router';
var core = require("@uirouter/core");
exports.core = core;
__export(require("@uirouter/core"));
__exportStar(require("@uirouter/core"), exports);
//# sourceMappingURL=index.js.map

View file

@ -6,7 +6,7 @@
"@uirouter/angularjs/index.ts"
],
"names": [],
"mappings": ";;;;;AAKA,gCAA2B;AAC3B,2CAAsC;AACtC,qCAAgC;AAChC,yCAAoC;AAEpC,yBAAuB;AACvB,wCAAsC;AACtC,0BAAwB;AACxB,sCAAoC;AACpC,wBAAsB;AAEtB,kBAAe,WAAW,CAAC;AAE3B,qCAAuC;AAC9B,oBAAI;AACb,oCAA+B",
"mappings": ";;;;;;;;;;;;;AAAA;;;GAGG,CAAC,MAAM;AACV,8CAA4B;AAC5B,6CAA2B;AAC3B,wDAAsC;AACtC,kDAAgC;AAChC,sDAAoC;AAEpC,yBAAuB;AACvB,wCAAsC;AACtC,0BAAwB;AACxB,sCAAoC;AACpC,wBAAsB;AAEtB,kBAAe,WAAW,CAAC;AAE3B,qCAAuC;AAC9B,oBAAI;AACb,iDAA+B",
"sourcesContent": [
"/**\n * Main entry point for angular 1.x build\n * @publicapi @module ng1\n */ /** */\nexport * from './interface';\nexport * from './services';\nexport * from './statebuilders/views';\nexport * from './stateProvider';\nexport * from './urlRouterProvider';\n\nimport './injectables';\nimport './directives/stateDirectives';\nimport './stateFilters';\nimport './directives/viewDirective';\nimport './viewScroll';\n\nexport default 'ui.router';\n\nimport * as core from '@uirouter/core';\nexport { core };\nexport * from '@uirouter/core';\n"
]

File diff suppressed because one or more lines are too long

View file

@ -96,7 +96,7 @@ export interface _Ng1StateDeclaration extends StateDeclaration {
* views: {
* $default: {
* template: '<h1>foo</h1>',
* controller: 'FooController
* controller: 'FooController'
* }
* }
* }
@ -109,7 +109,7 @@ export interface _Ng1StateDeclaration extends StateDeclaration {
* var state = {
* name: 'foo',
* url: '/foo',
* controller: 'FooController, // invalid because views: exists
* controller: 'FooController', // invalid because views: exists
* views: {
* header: {
* template: '<h1>header</h1>'
@ -722,6 +722,8 @@ export interface TemplateFactoryProvider {
}
declare module '@uirouter/core/lib/state/stateRegistry' {
interface StateRegistry {
register(state: Ng1StateDeclaration): any;
register(state: Ng1StateDeclaration | {
new (): Ng1StateDeclaration;
}): any;
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,5 @@
/** @publicapi @module ng1 */ /** */
import { Obj } from '@uirouter/core';
/** @hidden */
export declare const resolveFactory: () => {
/**
@ -38,5 +40,5 @@ export declare const resolveFactory: () => {
*/
resolve: (invocables: {
[key: string]: Function;
}, locals?: {}, parent?: Promise<any>) => Promise<{}>;
}, locals?: {}, parent?: Promise<any>) => Promise<Obj>;
};

View file

@ -1,5 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveFactory = void 0;
/** @publicapi @module ng1 */ /** */
var core_1 = require("@uirouter/core");
var angular = require("angular");

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/legacy/resolveService.ts"
],
"names": [],
"mappings": ";;AAAA,6BAA6B,CAAC,MAAM;AACpC,uCAAwG;AACxG,iCAAmC;AAEnC;;GAEG;AACH,IAAM,QAAQ,GAAG;IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,OAAO,EAAE,UAAC,UAAuC,EAAE,MAAW,EAAE,MAAqB;QAAlC,uBAAA,EAAA,WAAW;QAC5D,IAAM,UAAU,GAAG,IAAI,eAAQ,CAAC,IAAI,kBAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,IAAM,IAAI,GAAG,IAAI,eAAQ,CAAC,IAAI,kBAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,IAAM,OAAO,GAAG,IAAI,qBAAc,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,yBAAkB,CAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErF,IAAM,WAAW,GAAG,UAAC,YAAiB;YACpC,IAAM,MAAM,GAAG,UAAC,OAAY,IAAK,OAAA,yBAAkB,CAAM,EAAE,OAAO,EAAE,aAAM,CAAC,OAAO,EAAE,UAAA,KAAK,IAAI,OAAA,cAAM,OAAA,KAAK,EAAL,CAAK,EAAX,CAAW,CAAC,EAAE,CAAC,EAA3E,CAA2E,CAAC;YAC7G,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAM,WAAW,GAAG,UAAC,GAAQ,EAAE,KAAiC;gBAC9D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YACF,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAChF,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,cAAc;AACD,QAAA,cAAc,GAAG,cAAM,OAAA,QAAQ,EAAR,CAAQ,CAAC;AAE7C,2BAA2B;AAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAO,sBAAc,CAAC,CAAC",
"mappings": ";;;AAAA,6BAA6B,CAAC,MAAM;AACpC,uCAAwG;AACxG,iCAAmC;AAEnC;;GAEG;AACH,IAAM,QAAQ,GAAG;IACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,OAAO,EAAE,UAAC,UAAuC,EAAE,MAAW,EAAE,MAAqB;QAAlC,uBAAA,EAAA,WAAW;QAC5D,IAAM,UAAU,GAAG,IAAI,eAAQ,CAAC,IAAI,kBAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,IAAM,IAAI,GAAG,IAAI,eAAQ,CAAC,IAAI,kBAAW,CAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,IAAM,OAAO,GAAG,IAAI,qBAAc,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,CAAC,yBAAkB,CAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErF,IAAM,WAAW,GAAG,UAAC,YAAiB;YACpC,IAAM,MAAM,GAAG,UAAC,OAAY,IAAK,OAAA,yBAAkB,CAAM,EAAE,OAAO,EAAE,aAAM,CAAC,OAAO,EAAE,UAAC,KAAK,IAAK,OAAA,cAAM,OAAA,KAAK,EAAL,CAAK,EAAX,CAAW,CAAC,EAAE,CAAC,EAA7E,CAA6E,CAAC;YAC/G,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAM,WAAW,GAAG,UAAC,GAAQ,EAAE,KAAiC;gBAC9D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YACF,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAClF,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,cAAc;AACD,QAAA,cAAc,GAAG,cAAM,OAAA,QAAQ,EAAR,CAAQ,CAAC;AAE7C,2BAA2B;AAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAO,sBAAc,CAAC,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport { StateObject, PathNode, ResolveContext, Obj, mapObj, resolvablesBuilder } from '@uirouter/core';\nimport * as angular from 'angular';\n\n/**\n * Implementation of the legacy `$resolve` service for angular 1.\n */\nconst $resolve = {\n /**\n * Asynchronously injects a resolve block.\n *\n * This emulates most of the behavior of the ui-router 0.2.x $resolve.resolve() service API.\n *\n * ### Not bundled by default\n *\n * This API is no longer not part of the standard `@uirouter/angularjs` bundle.\n * For users of the prebuilt bundles, add the `release/resolveService.min.js` UMD bundle.\n * For bundlers (webpack, browserify, etc), add `@uirouter/angularjs/lib/legacy/resolveService`.\n *\n * ---\n *\n * Given an object `invocables`, where keys are strings and values are injectable functions,\n * injects each function, and waits for the resulting promise to resolve.\n * When all resulting promises are resolved, returns the results as an object.\n *\n * #### Example:\n * ```js\n * let invocables = {\n * foo: [ '$http', ($http) =>\n * $http.get('/api/foo').then(resp => resp.data) ],\n * bar: [ 'foo', '$http', (foo, $http) =>\n * $http.get('/api/bar/' + foo.barId).then(resp => resp.data) ]\n * }\n * $resolve.resolve(invocables)\n * .then(results => console.log(results.foo, results.bar))\n * // Logs foo and bar:\n * // { id: 123, barId: 456, fooData: 'foo data' }\n * // { id: 456, barData: 'bar data' }\n * ```\n *\n * @param invocables an object which looks like an [[StateDeclaration.resolve]] object; keys are resolve names and values are injectable functions\n * @param locals key/value pre-resolved data (locals)\n * @param parent a promise for a \"parent resolve\"\n */\n resolve: (invocables: { [key: string]: Function }, locals = {}, parent?: Promise<any>) => {\n const parentNode = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const node = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const context = new ResolveContext([parentNode, node]);\n\n context.addResolvables(resolvablesBuilder(<any>{ resolve: invocables }), node.state);\n\n const resolveData = (parentLocals: Obj) => {\n const rewrap = (_locals: Obj) => resolvablesBuilder(<any>{ resolve: mapObj(_locals, local => () => local) });\n context.addResolvables(rewrap(parentLocals), parentNode.state);\n context.addResolvables(rewrap(locals), node.state);\n\n const tuples2ObjR = (acc: Obj, tuple: { token: any; value: any }) => {\n acc[tuple.token] = tuple.value;\n return acc;\n };\n return context.resolvePath().then(results => results.reduce(tuples2ObjR, {}));\n };\n\n return parent ? parent.then(resolveData) : resolveData({});\n },\n};\n\n/** @hidden */\nexport const resolveFactory = () => $resolve;\n\n// The old $resolve service\nangular.module('ui.router').factory('$resolve', <any>resolveFactory);\n"
"/** @publicapi @module ng1 */ /** */\nimport { StateObject, PathNode, ResolveContext, Obj, mapObj, resolvablesBuilder } from '@uirouter/core';\nimport * as angular from 'angular';\n\n/**\n * Implementation of the legacy `$resolve` service for angular 1.\n */\nconst $resolve = {\n /**\n * Asynchronously injects a resolve block.\n *\n * This emulates most of the behavior of the ui-router 0.2.x $resolve.resolve() service API.\n *\n * ### Not bundled by default\n *\n * This API is no longer not part of the standard `@uirouter/angularjs` bundle.\n * For users of the prebuilt bundles, add the `release/resolveService.min.js` UMD bundle.\n * For bundlers (webpack, browserify, etc), add `@uirouter/angularjs/lib/legacy/resolveService`.\n *\n * ---\n *\n * Given an object `invocables`, where keys are strings and values are injectable functions,\n * injects each function, and waits for the resulting promise to resolve.\n * When all resulting promises are resolved, returns the results as an object.\n *\n * #### Example:\n * ```js\n * let invocables = {\n * foo: [ '$http', ($http) =>\n * $http.get('/api/foo').then(resp => resp.data) ],\n * bar: [ 'foo', '$http', (foo, $http) =>\n * $http.get('/api/bar/' + foo.barId).then(resp => resp.data) ]\n * }\n * $resolve.resolve(invocables)\n * .then(results => console.log(results.foo, results.bar))\n * // Logs foo and bar:\n * // { id: 123, barId: 456, fooData: 'foo data' }\n * // { id: 456, barData: 'bar data' }\n * ```\n *\n * @param invocables an object which looks like an [[StateDeclaration.resolve]] object; keys are resolve names and values are injectable functions\n * @param locals key/value pre-resolved data (locals)\n * @param parent a promise for a \"parent resolve\"\n */\n resolve: (invocables: { [key: string]: Function }, locals = {}, parent?: Promise<any>) => {\n const parentNode = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const node = new PathNode(new StateObject(<any>{ params: {}, resolvables: [] }));\n const context = new ResolveContext([parentNode, node]);\n\n context.addResolvables(resolvablesBuilder(<any>{ resolve: invocables }), node.state);\n\n const resolveData = (parentLocals: Obj) => {\n const rewrap = (_locals: Obj) => resolvablesBuilder(<any>{ resolve: mapObj(_locals, (local) => () => local) });\n context.addResolvables(rewrap(parentLocals), parentNode.state);\n context.addResolvables(rewrap(locals), node.state);\n\n const tuples2ObjR = (acc: Obj, tuple: { token: any; value: any }) => {\n acc[tuple.token] = tuple.value;\n return acc;\n };\n return context.resolvePath().then((results) => results.reduce(tuples2ObjR, {}));\n };\n\n return parent ? parent.then(resolveData) : resolveData({});\n },\n};\n\n/** @hidden */\nexport const resolveFactory = () => $resolve;\n\n// The old $resolve service\nangular.module('ui.router').factory('$resolve', <any>resolveFactory);\n"
]
}

View file

@ -1,5 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.$stateNotFound = exports.$stateChangeError = exports.$stateChangeSuccess = exports.$stateChangeCancel = exports.$stateChangeStart = void 0;
/**
* # Legacy state events
*
@ -147,6 +148,7 @@ var angular_1 = require("../angular");
.provider('$stateEvents', $StateEventsProvider)
.run([
'$stateEvents',
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function ($stateEvents) {
/* Invokes $get() */
},

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Ng1LocationServices = void 0;
/** @publicapi @module ng1 */ /** */
var core_1 = require("@uirouter/core");
var core_2 = require("@uirouter/core");
@ -36,6 +37,7 @@ var Ng1LocationServices = /** @class */ (function () {
return x != null ? x.toString().replace(/(~~|~2F)/g, function (m) { return ({ '~~': '~', '~2F': '/' }[m]); }) : x;
};
};
// eslint-disable-next-line @typescript-eslint/no-empty-function
Ng1LocationServices.prototype.dispose = function () { };
Ng1LocationServices.prototype.onChange = function (callback) {
var _this = this;

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/locationServices.ts"
],
"names": [],
"mappings": "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",
"mappings": ";;;AAAA,6BAA6B,CAAC,MAAM;AACpC,uCAAkG;AAClG,uCAAiF;AAGjF;;;GAGG;AACH;IA6CE,6BAAY,iBAAoC;QA5BhD,uBAAuB;QACf,kBAAa,GAAe,EAAE,CAAC;QA4BrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAM,GAAG,GAAG,UAAG,CAAC,iBAAiB,CAAC,CAAC;QACnC,2BAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,CAAC;IA7BD;;;;;;;;;;;OAWG;IACI,gDAA4B,GAAnC,UAAoC,MAAgB;QAClD,IAAM,QAAQ,GAAc,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElE,QAAQ,CAAC,MAAM,GAAG,UAAC,CAAM;YACvB,OAAA,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAA9B,CAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;QAAtF,CAAsF,CAAC;QAEzF,QAAQ,CAAC,MAAM,GAAG,UAAC,CAAS;YAC1B,OAAA,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAA9B,CAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;QAAxF,CAAwF,CAAC;IAC7F,CAAC;IAED,gEAAgE;IAChE,qCAAO,GAAP,cAAW,CAAC;IAQZ,sCAAQ,GAAR,UAAS,QAAkB;QAA3B,iBAGC;QAFC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,cAAM,OAAA,iBAAU,CAAC,KAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAxC,CAAwC,CAAC;IACxD,CAAC;IAED,uCAAS,GAAT;QACE,IAAI,SAAS,GAAQ,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;QACxD,SAAS,GAAG,eAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,OAAO,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5C,CAAC;IAED,sCAAQ,GAAR;QACE,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzG,CAAC;IAED,iCAAG,GAAH,UAAI,MAAe,EAAE,OAAe,EAAE,KAAM;QAAvB,wBAAA,EAAA,eAAe;QAClC,IAAI,gBAAS,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,OAAO;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,8CAAgB,GAAhB,UAAiB,UAAU,EAAE,SAA2B,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAuB;QAArG,iBAcC;QAbC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,sFAAsF;QACtF,UAAU,CAAC,GAAG,CAAC,wBAAwB,EAAE,UAAC,GAAG,IAAK,OAAA,KAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,GAAG,CAAC,EAAP,CAAO,CAAC,EAA3C,CAA2C,CAAC,CAAC;QAC/F,IAAM,IAAI,GAAG,UAAG,CAAC,SAAS,CAAC,CAAC;QAE5B,oDAAoD;QACpD,2BAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9E,mDAAmD;QACnD,2BAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IACH,0BAAC;AAAD,CAAC,AAxFD,IAwFC;AAxFY,kDAAmB",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport { LocationConfig, LocationServices, UIRouter, ParamType, isDefined } from '@uirouter/core';\nimport { val, createProxyFunctions, removeFrom, isObject } from '@uirouter/core';\nimport { ILocationService, ILocationProvider, IWindowService } from 'angular';\n\n/**\n * Implements UI-Router LocationServices and LocationConfig using Angular 1's $location service\n * @internalapi\n */\nexport class Ng1LocationServices implements LocationConfig, LocationServices {\n private $locationProvider: ILocationProvider;\n private $location: ILocationService;\n private $sniffer: any;\n private $browser: any;\n private $window: IWindowService;\n\n path;\n search;\n hash;\n hashPrefix;\n port;\n protocol;\n host;\n\n private _baseHref: string;\n\n // .onChange() registry\n private _urlListeners: Function[] = [];\n\n /**\n * Applys ng1-specific path parameter encoding\n *\n * The Angular 1 `$location` service is a bit weird.\n * It doesn't allow slashes to be encoded/decoded bi-directionally.\n *\n * See the writeup at https://github.com/angular-ui/ui-router/issues/2598\n *\n * This code patches the `path` parameter type so it encoded/decodes slashes as ~2F\n *\n * @param router\n */\n static monkeyPatchPathParameterType(router: UIRouter) {\n const pathType: ParamType = router.urlMatcherFactory.type('path');\n\n pathType.encode = (x: any) =>\n x != null ? x.toString().replace(/(~|\\/)/g, m => ({ '~': '~~', '/': '~2F' }[m])) : x;\n\n pathType.decode = (x: string) =>\n x != null ? x.toString().replace(/(~~|~2F)/g, m => ({ '~~': '~', '~2F': '/' }[m])) : x;\n }\n\n dispose() {}\n\n constructor($locationProvider: ILocationProvider) {\n this.$locationProvider = $locationProvider;\n const _lp = val($locationProvider);\n createProxyFunctions(_lp, this, _lp, ['hashPrefix']);\n }\n\n onChange(callback: Function) {\n this._urlListeners.push(callback);\n return () => removeFrom(this._urlListeners)(callback);\n }\n\n html5Mode() {\n let html5Mode: any = this.$locationProvider.html5Mode();\n html5Mode = isObject(html5Mode) ? html5Mode.enabled : html5Mode;\n return html5Mode && this.$sniffer.history;\n }\n\n baseHref() {\n return this._baseHref || (this._baseHref = this.$browser.baseHref() || this.$window.location.pathname);\n }\n\n url(newUrl?: string, replace = false, state?) {\n if (isDefined(newUrl)) this.$location.url(newUrl);\n if (replace) this.$location.replace();\n if (state) this.$location.state(state);\n return this.$location.url();\n }\n\n _runtimeServices($rootScope, $location: ILocationService, $sniffer, $browser, $window: IWindowService) {\n this.$location = $location;\n this.$sniffer = $sniffer;\n this.$browser = $browser;\n this.$window = $window;\n\n // Bind $locationChangeSuccess to the listeners registered in LocationService.onChange\n $rootScope.$on('$locationChangeSuccess', evt => this._urlListeners.forEach(fn => fn(evt)));\n const _loc = val($location);\n\n // Bind these LocationService functions to $location\n createProxyFunctions(_loc, this, _loc, ['replace', 'path', 'search', 'hash']);\n // Bind these LocationConfig functions to $location\n createProxyFunctions(_loc, this, _loc, ['port', 'protocol', 'host']);\n }\n}\n"
"/** @publicapi @module ng1 */ /** */\nimport { LocationConfig, LocationServices, UIRouter, ParamType, isDefined } from '@uirouter/core';\nimport { val, createProxyFunctions, removeFrom, isObject } from '@uirouter/core';\nimport { ILocationService, ILocationProvider, IWindowService } from 'angular';\n\n/**\n * Implements UI-Router LocationServices and LocationConfig using Angular 1's $location service\n * @internalapi\n */\nexport class Ng1LocationServices implements LocationConfig, LocationServices {\n private $locationProvider: ILocationProvider;\n private $location: ILocationService;\n private $sniffer: any;\n private $browser: any;\n private $window: IWindowService;\n\n path;\n search;\n hash;\n hashPrefix;\n port;\n protocol;\n host;\n\n private _baseHref: string;\n\n // .onChange() registry\n private _urlListeners: Function[] = [];\n\n /**\n * Applys ng1-specific path parameter encoding\n *\n * The Angular 1 `$location` service is a bit weird.\n * It doesn't allow slashes to be encoded/decoded bi-directionally.\n *\n * See the writeup at https://github.com/angular-ui/ui-router/issues/2598\n *\n * This code patches the `path` parameter type so it encoded/decodes slashes as ~2F\n *\n * @param router\n */\n static monkeyPatchPathParameterType(router: UIRouter) {\n const pathType: ParamType = router.urlMatcherFactory.type('path');\n\n pathType.encode = (x: any) =>\n x != null ? x.toString().replace(/(~|\\/)/g, (m) => ({ '~': '~~', '/': '~2F' }[m])) : x;\n\n pathType.decode = (x: string) =>\n x != null ? x.toString().replace(/(~~|~2F)/g, (m) => ({ '~~': '~', '~2F': '/' }[m])) : x;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n dispose() {}\n\n constructor($locationProvider: ILocationProvider) {\n this.$locationProvider = $locationProvider;\n const _lp = val($locationProvider);\n createProxyFunctions(_lp, this, _lp, ['hashPrefix']);\n }\n\n onChange(callback: Function) {\n this._urlListeners.push(callback);\n return () => removeFrom(this._urlListeners)(callback);\n }\n\n html5Mode() {\n let html5Mode: any = this.$locationProvider.html5Mode();\n html5Mode = isObject(html5Mode) ? html5Mode.enabled : html5Mode;\n return html5Mode && this.$sniffer.history;\n }\n\n baseHref() {\n return this._baseHref || (this._baseHref = this.$browser.baseHref() || this.$window.location.pathname);\n }\n\n url(newUrl?: string, replace = false, state?) {\n if (isDefined(newUrl)) this.$location.url(newUrl);\n if (replace) this.$location.replace();\n if (state) this.$location.state(state);\n return this.$location.url();\n }\n\n _runtimeServices($rootScope, $location: ILocationService, $sniffer, $browser, $window: IWindowService) {\n this.$location = $location;\n this.$sniffer = $sniffer;\n this.$browser = $browser;\n this.$window = $window;\n\n // Bind $locationChangeSuccess to the listeners registered in LocationService.onChange\n $rootScope.$on('$locationChangeSuccess', (evt) => this._urlListeners.forEach((fn) => fn(evt)));\n const _loc = val($location);\n\n // Bind these LocationService functions to $location\n createProxyFunctions(_loc, this, _loc, ['replace', 'path', 'search', 'hash']);\n // Bind these LocationConfig functions to $location\n createProxyFunctions(_loc, this, _loc, ['port', 'protocol', 'host']);\n }\n}\n"
]
}

View file

@ -11,5 +11,8 @@ declare module '@uirouter/core/lib/router' {
}
}
export declare function watchDigests($rootScope: IRootScopeService): void;
export declare namespace watchDigests {
var $inject: string[];
}
/** @hidden TODO: find a place to move this */
export declare const getLocals: (ctx: ResolveContext) => TypedMap<any>;

View file

@ -1,5 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLocals = exports.watchDigests = void 0;
/* eslint-disable @typescript-eslint/no-empty-function */
/* eslint-disable @typescript-eslint/no-unused-vars */
/**
* # Angular 1 types
*
@ -24,7 +27,7 @@ var mod_util = angular_1.ng.module('ui.router.util', ['ui.router.init']);
var mod_rtr = angular_1.ng.module('ui.router.router', ['ui.router.util']);
var mod_state = angular_1.ng.module('ui.router.state', ['ui.router.router', 'ui.router.util', 'ui.router.angular1']);
var mod_main = angular_1.ng.module('ui.router', ['ui.router.init', 'ui.router.state', 'ui.router.angular1']);
var mod_cmpt = angular_1.ng.module('ui.router.compat', ['ui.router']); // tslint:disable-line
var mod_cmpt = angular_1.ng.module('ui.router.compat', ['ui.router']);
var router = null;
$uiRouterProvider.$inject = ['$locationProvider'];
/** This angular 1 provider instantiates a Router and exposes its services via the angular injector */
@ -38,6 +41,8 @@ function $uiRouterProvider($locationProvider) {
router.stateRegistry.decorator('onRetain', onEnterExitRetain_1.getStateHookBuilder('onRetain'));
router.stateRegistry.decorator('onEnter', onEnterExitRetain_1.getStateHookBuilder('onEnter'));
router.viewService._pluginapi._viewConfigFactory('ng1', views_1.getNg1ViewConfigFactory());
// Disable decoding of params by UrlMatcherFactory because $location already handles this
router.urlService.config._decodeParams = false;
var ng1LocationService = (router.locationService = router.locationConfig = new locationServices_1.Ng1LocationServices($locationProvider));
locationServices_1.Ng1LocationServices.monkeyPatchPathParameterType(router);
// backwards compat: also expose router instance as $uiRouterProvider.router
@ -66,7 +71,7 @@ function runBlock($injector, $q, $uiRouter) {
core_1.services.$injector = $injector;
core_1.services.$q = $q;
// https://github.com/angular-ui/ui-router/issues/3678
if (!$injector.hasOwnProperty('strictDi')) {
if (!Object.prototype.hasOwnProperty.call($injector, 'strictDi')) {
try {
$injector.invoke(function (checkStrictDi) { });
}

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,11 @@
/** @publicapi @module ng1 */ /** */
import { StateService } from '@uirouter/core';
export declare function $IsStateFilter($state: StateService): any;
export declare function $IncludedByStateFilter($state: StateService): any;
declare function $IsStateFilter($state: StateService): any;
declare namespace $IsStateFilter {
var $inject: string[];
}
declare function $IncludedByStateFilter($state: StateService): any;
declare namespace $IncludedByStateFilter {
var $inject: string[];
}
export { $IsStateFilter, $IncludedByStateFilter };

View file

@ -1,6 +1,7 @@
"use strict";
/** @publicapi @module ng1 */ /** */
Object.defineProperty(exports, "__esModule", { value: true });
exports.$IncludedByStateFilter = exports.$IsStateFilter = void 0;
var angular_1 = require("./angular");
/**
* `isState` Filter: truthy if the current state is the parameter
@ -40,8 +41,5 @@ function $IncludedByStateFilter($state) {
return includesFilter;
}
exports.$IncludedByStateFilter = $IncludedByStateFilter;
angular_1.ng
.module('ui.router.state')
.filter('isState', $IsStateFilter)
.filter('includedByState', $IncludedByStateFilter);
angular_1.ng.module('ui.router.state').filter('isState', $IsStateFilter).filter('includedByState', $IncludedByStateFilter);
//# sourceMappingURL=stateFilters.js.map

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/stateFilters.ts"
],
"names": [],
"mappings": ";AAAA,6BAA6B,CAAC,MAAM;;AAEpC,qCAA0C;AAG1C;;;;;;;;;GASG;AACH,cAAc,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAgB,cAAc,CAAC,MAAoB;IACjD,IAAM,QAAQ,GAAQ,UAAS,KAAkB,EAAE,MAAW,EAAE,OAAoC;QAClG,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAND,wCAMC;AAED;;;;;;;;;GASG;AACH,sBAAsB,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,SAAgB,sBAAsB,CAAC,MAAoB;IACzD,IAAM,cAAc,GAAQ,UAAS,KAAkB,EAAE,MAAW,EAAE,OAAmC;QACvG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,cAAc,CAAC;AACxB,CAAC;AAND,wDAMC;AAED,YAAO;KACJ,MAAM,CAAC,iBAAiB,CAAC;KACzB,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC;KACjC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC",
"mappings": ";AAAA,6BAA6B,CAAC,MAAM;;;AAEpC,qCAA0C;AAG1C;;;;;;;;;GASG;AACH,cAAc,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAS,cAAc,CAAC,MAAoB;IAC1C,IAAM,QAAQ,GAAQ,UAAU,KAAkB,EAAE,MAAW,EAAE,OAAoC;QACnG,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAuBQ,wCAAc;AArBvB;;;;;;;;;GASG;AACH,sBAAsB,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,SAAS,sBAAsB,CAAC,MAAoB;IAClD,IAAM,cAAc,GAAQ,UAAU,KAAkB,EAAE,MAAW,EAAE,OAAmC;QACxG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,cAAc,CAAC;AACxB,CAAC;AAIwB,wDAAsB;AAF/C,YAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\n\nimport { ng as angular } from './angular';\nimport { Obj, StateService, StateOrName } from '@uirouter/core';\n\n/**\n * `isState` Filter: truthy if the current state is the parameter\n *\n * Translates to [[StateService.is]] `$state.is(\"stateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'stateName' | isState\">show if state is 'stateName'</div>\n * ```\n */\n$IsStateFilter.$inject = ['$state'];\nexport function $IsStateFilter($state: StateService) {\n const isFilter: any = function(state: StateOrName, params: Obj, options?: { relative?: StateOrName }) {\n return $state.is(state, params, options);\n };\n isFilter.$stateful = true;\n return isFilter;\n}\n\n/**\n * `includedByState` Filter: truthy if the current state includes the parameter\n *\n * Translates to [[StateService.includes]]` $state.is(\"fullOrPartialStateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'fullOrPartialStateName' | includedByState\">show if state includes 'fullOrPartialStateName'</div>\n * ```\n */\n$IncludedByStateFilter.$inject = ['$state'];\nexport function $IncludedByStateFilter($state: StateService) {\n const includesFilter: any = function(state: StateOrName, params: Obj, options: { relative?: StateOrName }) {\n return $state.includes(state, params, options);\n };\n includesFilter.$stateful = true;\n return includesFilter;\n}\n\nangular\n .module('ui.router.state')\n .filter('isState', $IsStateFilter)\n .filter('includedByState', $IncludedByStateFilter);\n"
"/** @publicapi @module ng1 */ /** */\n\nimport { ng as angular } from './angular';\nimport { Obj, StateService, StateOrName } from '@uirouter/core';\n\n/**\n * `isState` Filter: truthy if the current state is the parameter\n *\n * Translates to [[StateService.is]] `$state.is(\"stateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'stateName' | isState\">show if state is 'stateName'</div>\n * ```\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state: StateService) {\n const isFilter: any = function (state: StateOrName, params: Obj, options?: { relative?: StateOrName }) {\n return $state.is(state, params, options);\n };\n isFilter.$stateful = true;\n return isFilter;\n}\n\n/**\n * `includedByState` Filter: truthy if the current state includes the parameter\n *\n * Translates to [[StateService.includes]]` $state.is(\"fullOrPartialStateName\")`.\n *\n * #### Example:\n * ```html\n * <div ng-if=\"'fullOrPartialStateName' | includedByState\">show if state includes 'fullOrPartialStateName'</div>\n * ```\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state: StateService) {\n const includesFilter: any = function (state: StateOrName, params: Obj, options: { relative?: StateOrName }) {\n return $state.includes(state, params, options);\n };\n includesFilter.$stateful = true;\n return includesFilter;\n}\n\nangular.module('ui.router.state').filter('isState', $IsStateFilter).filter('includedByState', $IncludedByStateFilter);\n\nexport { $IsStateFilter, $IncludedByStateFilter };\n"
]
}

View file

@ -110,7 +110,7 @@ export declare class StateProvider {
*
* @return {object} $stateProvider - $stateProvider instance
*/
decorator(name: string, func: BuilderFunction): Function | this | BuilderFunction[];
decorator(name: string, func: BuilderFunction): Function | this;
/**
* Registers a state
*

View file

@ -1,5 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StateProvider = void 0;
/** @publicapi @module ng1 */ /** */
var core_1 = require("@uirouter/core");
/**

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/** @publicapi @module ng1 */ /** */
import { StateObject, TransitionStateHookFn, BuilderFunction } from '@uirouter/core';
import { StateObject, TransitionStateHookFn } from '@uirouter/core';
/**
* This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,
* `onRetain` callback hooks on a [[Ng1StateDeclaration]].
@ -9,4 +9,4 @@ import { StateObject, TransitionStateHookFn, BuilderFunction } from '@uirouter/c
*
* @internalapi
*/
export declare const getStateHookBuilder: (hookName: "onEnter" | "onExit" | "onRetain") => (stateObject: StateObject, parentFn: BuilderFunction) => TransitionStateHookFn;
export declare const getStateHookBuilder: (hookName: 'onEnter' | 'onExit' | 'onRetain') => (stateObject: StateObject) => TransitionStateHookFn;

View file

@ -1,5 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getStateHookBuilder = void 0;
/** @publicapi @module ng1 */ /** */
var core_1 = require("@uirouter/core");
var services_1 = require("../services");
@ -13,7 +14,7 @@ var services_1 = require("../services");
* @internalapi
*/
exports.getStateHookBuilder = function (hookName) {
return function stateHookBuilder(stateObject, parentFn) {
return function stateHookBuilder(stateObject) {
var hook = stateObject[hookName];
var pathname = hookName === 'onExit' ? 'from' : 'to';
function decoratedNg1Hook(trans, state) {

View file

@ -6,8 +6,8 @@
"@uirouter/angularjs/statebuilders/onEnterExitRetain.ts"
],
"names": [],
"mappings": ";;AAAA,6BAA6B,CAAC,MAAM;AACpC,uCASwB;AACxB,wCAAwC;AAGxC;;;;;;;;GAQG;AACU,QAAA,mBAAmB,GAAG,UAAC,QAA2C;IAC7E,OAAA,SAAS,gBAAgB,CAAC,WAAwB,EAAE,QAAyB;QAC3E,IAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvD,SAAS,gBAAgB,CAAC,KAAiB,EAAE,KAA0B;YACrE,IAAM,cAAc,GAAG,IAAI,qBAAc,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,IAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,IAAM,MAAM,GAAG,aAAM,CAAC,oBAAS,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,OAAO,eAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;AAZD,CAYC,CAAC",
"mappings": ";;;AAAA,6BAA6B,CAAC,MAAM;AACpC,uCAQwB;AACxB,wCAAwC;AAGxC;;;;;;;;GAQG;AACU,QAAA,mBAAmB,GAAG,UAAC,QAA2C;IAC7E,OAAA,SAAS,gBAAgB,CAAC,WAAwB;QAChD,IAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvD,SAAS,gBAAgB,CAAC,KAAiB,EAAE,KAA0B;YACrE,IAAM,cAAc,GAAG,IAAI,qBAAc,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,IAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,IAAM,MAAM,GAAG,aAAM,CAAC,oBAAS,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,OAAO,eAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;AAZD,CAYC,CAAC",
"sourcesContent": [
"/** @publicapi @module ng1 */ /** */\nimport {\n StateObject,\n TransitionStateHookFn,\n HookResult,\n Transition,\n services,\n ResolveContext,\n extend,\n BuilderFunction,\n} from '@uirouter/core';\nimport { getLocals } from '../services';\nimport { Ng1StateDeclaration } from '../interface';\n\n/**\n * This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,\n * `onRetain` callback hooks on a [[Ng1StateDeclaration]].\n *\n * When the [[StateBuilder]] builds a [[StateObject]] object from a raw [[StateDeclaration]], this builder\n * ensures that those hooks are injectable for @uirouter/angularjs (ng1).\n *\n * @internalapi\n */\nexport const getStateHookBuilder = (hookName: 'onEnter' | 'onExit' | 'onRetain') =>\n function stateHookBuilder(stateObject: StateObject, parentFn: BuilderFunction): TransitionStateHookFn {\n const hook = stateObject[hookName];\n const pathname = hookName === 'onExit' ? 'from' : 'to';\n\n function decoratedNg1Hook(trans: Transition, state: Ng1StateDeclaration): HookResult {\n const resolveContext = new ResolveContext(trans.treeChanges(pathname));\n const subContext = resolveContext.subContext(state.$$state());\n const locals = extend(getLocals(subContext), { $state$: state, $transition$: trans });\n return services.$injector.invoke(hook, this, locals);\n }\n\n return hook ? decoratedNg1Hook : undefined;\n };\n"
"/** @publicapi @module ng1 */ /** */\nimport {\n StateObject,\n TransitionStateHookFn,\n HookResult,\n Transition,\n services,\n ResolveContext,\n extend,\n} from '@uirouter/core';\nimport { getLocals } from '../services';\nimport { Ng1StateDeclaration } from '../interface';\n\n/**\n * This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,\n * `onRetain` callback hooks on a [[Ng1StateDeclaration]].\n *\n * When the [[StateBuilder]] builds a [[StateObject]] object from a raw [[StateDeclaration]], this builder\n * ensures that those hooks are injectable for @uirouter/angularjs (ng1).\n *\n * @internalapi\n */\nexport const getStateHookBuilder = (hookName: 'onEnter' | 'onExit' | 'onRetain') =>\n function stateHookBuilder(stateObject: StateObject): TransitionStateHookFn {\n const hook = stateObject[hookName];\n const pathname = hookName === 'onExit' ? 'from' : 'to';\n\n function decoratedNg1Hook(trans: Transition, state: Ng1StateDeclaration): HookResult {\n const resolveContext = new ResolveContext(trans.treeChanges(pathname));\n const subContext = resolveContext.subContext(state.$$state());\n const locals = extend(getLocals(subContext), { $state$: state, $transition$: trans });\n return services.$injector.invoke(hook, this, locals);\n }\n\n return hook ? decoratedNg1Hook : undefined;\n };\n"
]
}

View file

@ -1,3 +1,4 @@
/** @publicapi @module ng1 */ /** */
import { StateObject, ViewConfig, ViewConfigFactory, PathNode, ResolveContext, IInjectable } from '@uirouter/core';
import { Ng1ViewDeclaration } from '../interface';
import { TemplateFactory } from '../templateFactory';
@ -14,7 +15,9 @@ export declare function getNg1ViewConfigFactory(): ViewConfigFactory;
*
* @internalapi
*/
export declare function ng1ViewsBuilder(state: StateObject): {};
export declare function ng1ViewsBuilder(state: StateObject): {
[key: string]: Ng1ViewDeclaration;
};
/** @internalapi */
export declare class Ng1ViewConfig implements ViewConfig {
path: PathNode[];

View file

@ -1,5 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Ng1ViewConfig = exports.ng1ViewsBuilder = exports.getNg1ViewConfigFactory = void 0;
/** @publicapi @module ng1 */ /** */
var core_1 = require("@uirouter/core");
/** @internalapi */
function getNg1ViewConfigFactory() {

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more