330 lines
6.1 KiB
Plaintext
330 lines
6.1 KiB
Plaintext
function CONST() {
|
|
return (function(target) {
|
|
return target;
|
|
});
|
|
}
|
|
|
|
function CONST_EXPR(expr) {
|
|
return expr;
|
|
}
|
|
|
|
function isPresent (x) {
|
|
return !!x;
|
|
}
|
|
|
|
function isBlank (x) {
|
|
return !x;
|
|
}
|
|
|
|
function isString(obj) {
|
|
return typeof obj === 'string';
|
|
}
|
|
|
|
function isType (x) {
|
|
return typeof x === 'function';
|
|
}
|
|
|
|
function isStringMap(obj) {
|
|
return typeof obj === 'object' && obj !== null;
|
|
}
|
|
|
|
function isArray(obj) {
|
|
return Array.isArray(obj);
|
|
}
|
|
|
|
function getTypeNameForDebugging (fn) {
|
|
return fn.name || 'Root';
|
|
}
|
|
|
|
var PromiseWrapper = {
|
|
resolve: function (reason) {
|
|
return $q.when(reason);
|
|
},
|
|
|
|
reject: function (reason) {
|
|
return $q.reject(reason);
|
|
},
|
|
|
|
catchError: function (promise, fn) {
|
|
return promise.then(null, fn);
|
|
},
|
|
all: function (promises) {
|
|
return $q.all(promises);
|
|
}
|
|
};
|
|
|
|
var RegExpWrapper = {
|
|
create: function(regExpStr, flags) {
|
|
flags = flags ? flags.replace(/g/g, '') : '';
|
|
return new RegExp(regExpStr, flags + 'g');
|
|
},
|
|
firstMatch: function(regExp, input) {
|
|
regExp.lastIndex = 0;
|
|
return regExp.exec(input);
|
|
},
|
|
matcher: function (regExp, input) {
|
|
regExp.lastIndex = 0;
|
|
return { re: regExp, input: input };
|
|
}
|
|
};
|
|
|
|
var reflector = {
|
|
annotations: function (fn) {
|
|
//TODO: implement me
|
|
return fn.annotations || [];
|
|
}
|
|
};
|
|
|
|
var MapWrapper = {
|
|
create: function() {
|
|
return new Map();
|
|
},
|
|
|
|
get: function(m, k) {
|
|
return m.get(k);
|
|
},
|
|
|
|
set: function(m, k, v) {
|
|
return m.set(k, v);
|
|
},
|
|
|
|
contains: function (m, k) {
|
|
return m.has(k);
|
|
},
|
|
|
|
forEach: function (m, fn) {
|
|
return m.forEach(fn);
|
|
}
|
|
};
|
|
|
|
var StringMapWrapper = {
|
|
create: function () {
|
|
return {};
|
|
},
|
|
|
|
set: function (m, k, v) {
|
|
return m[k] = v;
|
|
},
|
|
|
|
get: function (m, k) {
|
|
return m.hasOwnProperty(k) ? m[k] : undefined;
|
|
},
|
|
|
|
contains: function (m, k) {
|
|
return m.hasOwnProperty(k);
|
|
},
|
|
|
|
keys: function(map) {
|
|
return Object.keys(map);
|
|
},
|
|
|
|
isEmpty: function(map) {
|
|
for (var prop in map) {
|
|
if (map.hasOwnProperty(prop)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
|
|
delete: function(map, key) {
|
|
delete map[key];
|
|
},
|
|
|
|
forEach: function (m, fn) {
|
|
for (var prop in m) {
|
|
if (m.hasOwnProperty(prop)) {
|
|
fn(m[prop], prop);
|
|
}
|
|
}
|
|
},
|
|
|
|
equals: function (m1, m2) {
|
|
var k1 = Object.keys(m1);
|
|
var k2 = Object.keys(m2);
|
|
if (k1.length != k2.length) {
|
|
return false;
|
|
}
|
|
var key;
|
|
for (var i = 0; i < k1.length; i++) {
|
|
key = k1[i];
|
|
if (m1[key] !== m2[key]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
|
|
merge: function(m1, m2) {
|
|
var m = {};
|
|
for (var attr in m1) {
|
|
if (m1.hasOwnProperty(attr)) {
|
|
m[attr] = m1[attr];
|
|
}
|
|
}
|
|
for (var attr in m2) {
|
|
if (m2.hasOwnProperty(attr)) {
|
|
m[attr] = m2[attr];
|
|
}
|
|
}
|
|
return m;
|
|
}
|
|
};
|
|
|
|
var List = Array;
|
|
var ListWrapper = {
|
|
toJSON: function(l) {
|
|
return JSON.stringify(l);
|
|
},
|
|
|
|
clear: function (l) {
|
|
l.length = 0;
|
|
},
|
|
|
|
create: function () {
|
|
return [];
|
|
},
|
|
|
|
push: function (l, v) {
|
|
return l.push(v);
|
|
},
|
|
|
|
forEach: function (l, fn) {
|
|
return l.forEach(fn);
|
|
},
|
|
|
|
first: function(array) {
|
|
if (!array)
|
|
return null;
|
|
return array[0];
|
|
},
|
|
|
|
last: function(array) {
|
|
return (array && array.length) > 0 ? array[array.length - 1] : null;
|
|
},
|
|
|
|
map: function (l, fn) {
|
|
return l.map(fn);
|
|
},
|
|
|
|
join: function (l, str) {
|
|
return l.join(str);
|
|
},
|
|
|
|
reduce: function(list, fn, init) {
|
|
return list.reduce(fn, init);
|
|
},
|
|
|
|
filter: function(array, pred) {
|
|
return array.filter(pred);
|
|
},
|
|
|
|
concat: function(a, b) {
|
|
return a.concat(b);
|
|
},
|
|
|
|
slice: function(l) {
|
|
var from = arguments[1] !== (void 0) ? arguments[1] : 0;
|
|
var to = arguments[2] !== (void 0) ? arguments[2] : null;
|
|
return l.slice(from, to === null ? undefined : to);
|
|
},
|
|
|
|
maximum: function(list, predicate) {
|
|
if (list.length == 0) {
|
|
return null;
|
|
}
|
|
var solution = null;
|
|
var maxValue = -Infinity;
|
|
for (var index = 0; index < list.length; index++) {
|
|
var candidate = list[index];
|
|
if (isBlank(candidate)) {
|
|
continue;
|
|
}
|
|
var candidateValue = predicate(candidate);
|
|
if (candidateValue > maxValue) {
|
|
solution = candidate;
|
|
maxValue = candidateValue;
|
|
}
|
|
}
|
|
return solution;
|
|
}
|
|
};
|
|
|
|
var StringWrapper = {
|
|
charCodeAt: function(s, i) {
|
|
return s.charCodeAt(i);
|
|
},
|
|
|
|
equals: function (s1, s2) {
|
|
return s1 === s2;
|
|
},
|
|
|
|
split: function(s, re) {
|
|
return s.split(re);
|
|
},
|
|
|
|
replaceAll: function(s, from, replace) {
|
|
return s.replace(from, replace);
|
|
},
|
|
|
|
replaceAllMapped: function(s, from, cb) {
|
|
return s.replace(from, function(matches) {
|
|
// The callback receives match, p1, ..., pn
|
|
return cb.apply(null, matches);
|
|
});
|
|
},
|
|
|
|
contains: function(s, substr) {
|
|
return s.indexOf(substr) != -1;
|
|
}
|
|
|
|
};
|
|
|
|
//TODO: implement?
|
|
// I think it's too heavy to ask 1.x users to bring in Rx for the router...
|
|
function EventEmitter() {}
|
|
|
|
var ObservableWrapper = {
|
|
callNext: function(ob, val) {
|
|
ob.fn(val);
|
|
},
|
|
callEmit: function(ob, val) {
|
|
ob.fn(val);
|
|
},
|
|
|
|
subscribe: function(ob, fn) {
|
|
ob.fn = fn;
|
|
}
|
|
};
|
|
|
|
// TODO: https://github.com/angular/angular.js/blob/master/src/ng/browser.js#L227-L265
|
|
var $__router_47_location__ = {
|
|
Location: Location
|
|
};
|
|
|
|
function Location(){}
|
|
Location.prototype.subscribe = function () {
|
|
//TODO: implement
|
|
};
|
|
Location.prototype.path = function () {
|
|
return $location.url();
|
|
};
|
|
Location.prototype.isCurrentPathEqualTo = function (path, query) {
|
|
if (query === void 0) { query = ''; }
|
|
return this.path() === (path + query);
|
|
};
|
|
Location.prototype.go = function (path, query) {
|
|
return $location.url(path + query);
|
|
};
|
|
Location.prototype.replaceState = function (path, query) {
|
|
if (query === void 0) { query = ''; }
|
|
$location.url(path + query);
|
|
$location.replace();
|
|
};
|
|
Location.prototype.prepareExternalUrl = function(url) {
|
|
if (url.length > 0 && !url.startsWith('/')) {
|
|
url = '/' + url;
|
|
}
|
|
return $location.$$html5 ? '.' + url : '#' + $locationHashPrefix + url;
|
|
};
|