Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
base repository: angular-ui/ui-router
Choose a Base Repository
angular-ui/ui-router
Acidburn0zzz/ui-router
AsuraZhu/ui-router
AvitarGlobal/ui-router
AydinSakar/ui-router
CNXTEoEorg/ui-router
Cyneric/ui-router
D-Wave/ui-router
DMSI-Earthos-Nusys-Enterprises/ui-router
DevynHong/ui-router
DveMac/ui-router
EARTH-SHIP-ENTERPRISE/ui-router
ESS-GlobalMediaManagers/ui-router
EarthShipSolution1/ui-router
EnigmaSpace/ui-router
EssCanada/ui-router
EssEden/ui-router
EssUtopia/ui-router
EugeneTruly/ui-router
FDIM/ui-router
Food-Net/ui-router
GehirnInc/ui-router
GlobalSystems/ui-router
GrantHeger/ui-router
HabitRPG/ui-router
Hanoch-Li/ui-router
Harmony-OS/ui-router
HarryWang74/ui-router
Klarence/ui-router
LandAllocation/ui-router
Leo9305/ui-router
MChorfa/ui-router
MattWalker/ui-router
MohammadYounes/ui-router
MrOrz/ui-router
PascalPrecht/ui-router
PatrickJS/ui-router
Randy85253/ui-router
Ribeiro/ui-router
SelenaMarieGomez/ui-router
SergeyKozachenko/ui-router
Sybertron/ui-router
Travel-Net/ui-router
Voles/ui-router
Xiot/ui-router
a8m/ui-router
abaran/ui-router
adambabik/ui-router
adamrights/ui-router
adrianhara/ui-router
afzalhub/ui-router
akiraaisha/ui-router
alexcastillo/ui-router
algaly/ui-router
amitava82/ui-router
asafdav/ui-router
avikaco/ui-router
azi/ui-router
bcronje/ui-router
beyang/ui-router
bfererencz/ui-router
blueghost56/ui-router
bnguyen82/ui-router
boneskull/ui-router
bottleofrum/ui-router
btmdave/ui-router
buunguyen/ui-router
caitp/ui-router
cburgdorf/ui-router
cciliber/ui-router
chaoming007/ui-router
dbkang/ui-router
deastman313/ui-router
deepinit-arek/ui-router
dgsunesen/ui-router
digitalbs/ui-router
dolymood/ui-router
drasya/ui-router
dreamineering/ui-router
edzius/ui-router
egermano/ui-router
elidor86/ui-router
estelle-peterson/ui-router
fastmonkeys/ui-router
fdeurioste/ui-router
floydprice/ui-router
fnakstad/ui-router
frapontillo/ui-router
fshao816/ui-router
gGonz/ui-router
gabrielmancini/ui-router
gdennie/ui-router
ggoodman/ui-router
giabao/ui-router
gromgull/ui-router
gsaini/ui-router
gsklee/ui-router
gtethan/ui-router
guoliangli123/ui-router
guoyingui/ui-router
guozhiqi/ui-router
hdctambien/ui-router
helmi03/ui-router
hllau/ui-router
iNuSys/ui-router
ianchen/ui-router
ifyio/ui-router
jacezq/ui-router
jacobgoldendesign/ui-router
jacobmumm/ui-router
jelical/ui-router
jhonrsalcedo/ui-router
jnaus/ui-router
johnparn/ui-router
joseym/ui-router
jpescada/ui-router
jrthib/ui-router
junojon/ui-router
kainhong/ui-router
klederson/ui-router
lahorichargha/ui-router
leiboT/ui-router
lion-git/ui-router
loyalforyou/ui-router
luo772435545/ui-router
madhudskumar/ui-router
mattbroekhuis/ui-router
mediaprojects/ui-router
meenie/ui-router
mfield/ui-router
mgechev/ui-router
mike-tempest/ui-router
minznerjosh/ui-router
miticv/ui-router
mlim1972/ui-router
mmukarram/ui-router
moderndegree/ui-router
msiconolfi/ui-router
nadavhury/ui-router
nakalsio/ui-router
nateabele/ui-router
nathasm/ui-router
ncuillery/ui-router
nenebale/ui-router
newobject/ui-router
nishant8BITS/ui-router
odikusar/ui-router
ouyangzhigang/ui-router
pascalopitz/ui-router
pc035860/ui-router
pennersr/ui-router
piousbox/ui-router
pkieltyka/ui-router
pombredanne/ui-router
qgerome/ui-router
riadbahri/ui-router
richardkeller/ui-router
roryf/ui-router
samtechnocrat/ui-router
scottopherson/ui-router
sebnilsson/ui-router
senior7515/ui-router
shairez/ui-router
shaode/ui-router
shashvattrip/ui-router
shaunrader/ui-router
shofiulalam/ui-router
shwei/ui-router
sinaidoron/ui-router
sivaraj-v/ui-router
skroski/ui-router
slonoed/ui-router
smalleast/ui-router
sorieil/ui-router
stevemao/ui-router
sunfirefox/ui-router
sww0930/ui-router
takanorip/ui-router
taokim/ui-router
tark000/ui-router
tdp100/ui-router
tfnico/ui-router
thisguychris/ui-router
tianxialzb/ui-router
timkindberg/ui-router
tobigit/ui-router
toddhgardner/ui-router
tsadykhov/ui-router
uapui-dev/ui-router
udoyen/ui-router
uturn/ui-router
vavrecka/ui-router
vorburger/ui-router
vram1980/ui-router
wp-ng/ui-router
wwhurley/ui-router
xudejian/ui-router
xushuo/ui-router
yangchuoxian/ui-router
zhaobeilin/ui-router
Nothing to show
base: cff83dda8ded
head repository: angular-ui/ui-router
Choose a Head Repository
angular-ui/ui-router
Acidburn0zzz/ui-router
AsuraZhu/ui-router
AvitarGlobal/ui-router
AydinSakar/ui-router
CNXTEoEorg/ui-router
Cyneric/ui-router
D-Wave/ui-router
DMSI-Earthos-Nusys-Enterprises/ui-router
DevynHong/ui-router
DveMac/ui-router
EARTH-SHIP-ENTERPRISE/ui-router
ESS-GlobalMediaManagers/ui-router
EarthShipSolution1/ui-router
EnigmaSpace/ui-router
EssCanada/ui-router
EssEden/ui-router
EssUtopia/ui-router
EugeneTruly/ui-router
FDIM/ui-router
Food-Net/ui-router
GehirnInc/ui-router
GlobalSystems/ui-router
GrantHeger/ui-router
HabitRPG/ui-router
Hanoch-Li/ui-router
Harmony-OS/ui-router
HarryWang74/ui-router
Klarence/ui-router
LandAllocation/ui-router
Leo9305/ui-router
MChorfa/ui-router
MattWalker/ui-router
MohammadYounes/ui-router
MrOrz/ui-router
PascalPrecht/ui-router
PatrickJS/ui-router
Randy85253/ui-router
Ribeiro/ui-router
SelenaMarieGomez/ui-router
SergeyKozachenko/ui-router
Sybertron/ui-router
Travel-Net/ui-router
Voles/ui-router
Xiot/ui-router
a8m/ui-router
abaran/ui-router
adambabik/ui-router
adamrights/ui-router
adrianhara/ui-router
afzalhub/ui-router
akiraaisha/ui-router
alexcastillo/ui-router
algaly/ui-router
amitava82/ui-router
asafdav/ui-router
avikaco/ui-router
azi/ui-router
bcronje/ui-router
beyang/ui-router
bfererencz/ui-router
blueghost56/ui-router
bnguyen82/ui-router
boneskull/ui-router
bottleofrum/ui-router
btmdave/ui-router
buunguyen/ui-router
caitp/ui-router
cburgdorf/ui-router
cciliber/ui-router
chaoming007/ui-router
dbkang/ui-router
deastman313/ui-router
deepinit-arek/ui-router
dgsunesen/ui-router
digitalbs/ui-router
dolymood/ui-router
drasya/ui-router
dreamineering/ui-router
edzius/ui-router
egermano/ui-router
elidor86/ui-router
estelle-peterson/ui-router
fastmonkeys/ui-router
fdeurioste/ui-router
floydprice/ui-router
fnakstad/ui-router
frapontillo/ui-router
fshao816/ui-router
gGonz/ui-router
gabrielmancini/ui-router
gdennie/ui-router
ggoodman/ui-router
giabao/ui-router
gromgull/ui-router
gsaini/ui-router
gsklee/ui-router
gtethan/ui-router
guoliangli123/ui-router
guoyingui/ui-router
guozhiqi/ui-router
hdctambien/ui-router
helmi03/ui-router
hllau/ui-router
iNuSys/ui-router
ianchen/ui-router
ifyio/ui-router
jacezq/ui-router
jacobgoldendesign/ui-router
jacobmumm/ui-router
jelical/ui-router
jhonrsalcedo/ui-router
jnaus/ui-router
johnparn/ui-router
joseym/ui-router
jpescada/ui-router
jrthib/ui-router
junojon/ui-router
kainhong/ui-router
klederson/ui-router
lahorichargha/ui-router
leiboT/ui-router
lion-git/ui-router
loyalforyou/ui-router
luo772435545/ui-router
madhudskumar/ui-router
mattbroekhuis/ui-router
mediaprojects/ui-router
meenie/ui-router
mfield/ui-router
mgechev/ui-router
mike-tempest/ui-router
minznerjosh/ui-router
miticv/ui-router
mlim1972/ui-router
mmukarram/ui-router
moderndegree/ui-router
msiconolfi/ui-router
nadavhury/ui-router
nakalsio/ui-router
nateabele/ui-router
nathasm/ui-router
ncuillery/ui-router
nenebale/ui-router
newobject/ui-router
nishant8BITS/ui-router
odikusar/ui-router
ouyangzhigang/ui-router
pascalopitz/ui-router
pc035860/ui-router
pennersr/ui-router
piousbox/ui-router
pkieltyka/ui-router
pombredanne/ui-router
qgerome/ui-router
riadbahri/ui-router
richardkeller/ui-router
roryf/ui-router
samtechnocrat/ui-router
scottopherson/ui-router
sebnilsson/ui-router
senior7515/ui-router
shairez/ui-router
shaode/ui-router
shashvattrip/ui-router
shaunrader/ui-router
shofiulalam/ui-router
shwei/ui-router
sinaidoron/ui-router
sivaraj-v/ui-router
skroski/ui-router
slonoed/ui-router
smalleast/ui-router
sorieil/ui-router
stevemao/ui-router
sunfirefox/ui-router
sww0930/ui-router
takanorip/ui-router
taokim/ui-router
tark000/ui-router
tdp100/ui-router
tfnico/ui-router
thisguychris/ui-router
tianxialzb/ui-router
timkindberg/ui-router
tobigit/ui-router
toddhgardner/ui-router
tsadykhov/ui-router
uapui-dev/ui-router
udoyen/ui-router
uturn/ui-router
vavrecka/ui-router
vorburger/ui-router
vram1980/ui-router
wp-ng/ui-router
wwhurley/ui-router
xudejian/ui-router
xushuo/ui-router
yangchuoxian/ui-router
zhaobeilin/ui-router
Nothing to show
compare: 030f4df040aa
  • 3 commits
  • 3 files changed
  • 0 commit comments
  • 1 contributor
Commits on Nov 24, 2014
- Type.$normalize can be passed either a decoded object, or an encoded object (string).  If the parameter is already decoded (checked via .is()), then it is returned. Else the parameter is decoded and returned.
Showing with 42 additions and 20 deletions.
  1. +5 −1 Gruntfile.js
  2. +29 −13 src/urlMatcherFactory.js
  3. +8 −6 test/urlMatcherFactorySpec.js
@@ -140,7 +140,11 @@ module.exports = function (grunt) {

grunt.registerTask('widedocs', 'Convert to bootstrap container-fluid', function () {
promising(this,
system('sed -i.bak -e \'s/class="row"/class="row-fluid"/\' -e \'s/role="main" class="container"/role="main" class="container-fluid"/\' site/index.html')
system(
'sed -i.bak ' +
'-e \'s/class="row"/class="row-fluid"/\' ' +
'-e \'s/icon-cog"><\\/i>/icon-cog"><\\/i>Provider/\' ' +
'-e \'s/role="main" class="container"/role="main" class="container-fluid"/\' site/index.html')
);
});

@@ -480,6 +480,11 @@ Type.prototype.pattern = /.*/;

Type.prototype.toString = function() { return "{Type:" + this.name + "}"; };

/** Given an encoded string, or a decoded object, returns a decoded object */
Type.prototype.$normalize = function(val) {
return this.is(val) ? val : this.decode(val);
};

/*
* Wraps an existing custom Type as an array of Type, depending on 'mode'.
* e.g.:
@@ -493,7 +498,6 @@ Type.prototype.toString = function() { return "{Type:" + this.name + "}"; };
Type.prototype.$asArray = function(mode, isSearch) {
if (!mode) return this;
if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only");
return new ArrayType(this, mode);

function ArrayType(type, mode) {
function bindTo(type, callbackName) {
@@ -542,8 +546,12 @@ Type.prototype.$asArray = function(mode, isSearch) {
this.is = arrayHandler(bindTo(type, 'is'), true);
this.equals = arrayEqualsHandler(bindTo(type, 'equals'));
this.pattern = type.pattern;
this.$normalize = arrayHandler(bindTo(type, '$normalize'));
this.name = type.name;
this.$arrayMode = mode;
}

return new ArrayType(this, mode);
};


@@ -571,7 +579,7 @@ function $UrlMatcherFactory() {
string: {
encode: valToString,
decode: valFromString,
is: regexpMatches,
is: function(val) { return typeof val === "string"},
pattern: /[^/]*/
},
int: {
@@ -945,7 +953,10 @@ function $UrlMatcherFactory() {
*/
function $$getDefaultValue() {
if (!injector) throw new Error("Injectable functions cannot be called at configuration time");
return injector.invoke(config.$$fn);
var defaultValue = injector.invoke(config.$$fn);
if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue))
throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")");
return defaultValue;
}

/**
@@ -959,7 +970,7 @@ function $UrlMatcherFactory() {
return replacement.length ? replacement[0] : value;
}
value = $replace(value);
return isDefined(value) ? self.type.decode(value) : $$getDefaultValue();
return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value);
}

function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; }
@@ -1015,15 +1026,20 @@ function $UrlMatcherFactory() {
return equal;
},
$$validates: function $$validate(paramValues) {
var result = true, isOptional, val, param, self = this;

forEach(this.$$keys(), function(key) {
param = self[key];
val = paramValues[key];
isOptional = !val && param.isOptional;
result = result && (isOptional || !!param.type.is(val));
});
return result;
var keys = this.$$keys(), i, param, rawVal, normalized, encoded;
for (i = 0; i < keys.length; i++) {
param = this[keys[i]];
rawVal = paramValues[keys[i]];
if ((rawVal === undefined || rawVal === null) && param.isOptional)
break; // There was no parameter value, but the param is optional
normalized = param.type.$normalize(rawVal);
if (!param.type.is(normalized))
return false; // The value was not of the correct Type, and could not be decoded to the correct Type
encoded = param.type.encode(normalized);
if (angular.isString(encoded) && !param.type.pattern.exec(encoded))
return false; // The value was of the correct type, but when encoded, did not match the Type's regexp
}
return true;
},
$$parent: undefined
};
@@ -407,15 +407,17 @@ describe("urlMatcherFactoryProvider", function () {
var m;
beforeEach(module('ui.router.util', function($urlMatcherFactoryProvider) {
$urlMatcherFactoryProvider.type("myType", {}, function() {
return { decode: function() { return 'decoded'; }
};
return {
decode: function() { return { status: 'decoded' }; },
is: angular.isObject
};
});
m = new UrlMatcher("/test?{foo:myType}");
}));

it("should handle arrays properly with config-time custom type definitions", inject(function ($stateParams) {
expect(m.exec("/test", {foo: '1'})).toEqual({ foo: 'decoded' });
expect(m.exec("/test", {foo: ['1', '2']})).toEqual({ foo: ['decoded', 'decoded'] });
expect(m.exec("/test", {foo: '1'})).toEqual({ foo: { status: 'decoded' } });
expect(m.exec("/test", {foo: ['1', '2']})).toEqual({ foo: [ { status: 'decoded' }, { status: 'decoded' }] });
}));
});
});
@@ -662,7 +664,7 @@ describe("urlMatcherFactory", function () {

it("should populate query params", function() {
var defaults = { order: "name", limit: 25, page: 1 };
var m = new UrlMatcher('/foo?order&limit&page', {
var m = new UrlMatcher('/foo?order&{limit:int}&{page:int}', {
params: defaults
});
expect(m.exec("/foo")).toEqual(defaults);
@@ -687,7 +689,7 @@ describe("urlMatcherFactory", function () {
});

it("should allow injectable functions", inject(function($stateParams) {
var m = new UrlMatcher('/users/:user', {
var m = new UrlMatcher('/users/{user:json}', {
params: {
user: function($stateParams) {
return $stateParams.user;

No commit comments for this range

You can’t perform that action at this time.