aboutsummaryrefslogtreecommitdiffstats
path: root/src/Angular.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/Angular.js')
-rw-r--r--src/Angular.js119
1 files changed, 93 insertions, 26 deletions
diff --git a/src/Angular.js b/src/Angular.js
index 39a6e91d..95f7325a 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -1,6 +1,7 @@
if (typeof document.getAttribute == 'undefined')
document.getAttribute = function() {};
if (typeof Node == 'undefined') {
+ //TODO: can we get rid of this?
Node = {
ELEMENT_NODE : 1,
ATTRIBUTE_NODE : 2,
@@ -18,24 +19,43 @@ if (typeof Node == 'undefined') {
}
function noop() {}
+function identity($) {return $;}
if (!window['console']) window['console']={'log':noop, 'error':noop};
+function extensionMap(angular, name) {
+ var extPoint;
+ return angular[name] || (extPoint = angular[name] = function (name, fn, prop){
+ if (isDefined(fn)) {
+ extPoint[name] = extend(fn, prop || {});
+ }
+ return extPoint[name];
+ });
+}
+
+function extensionList(angular, name) {
+ var extPoint, length = 0;
+ return angular[name] || (extPoint = angular[name] = function (fn, prop){
+ if (isDefined(fn)) {
+ extPoint[length] = extend(fn, prop || {});
+ length++;
+ }
+ return extPoint;
+ });
+}
+
var consoleNode, msie,
- jQuery = window['jQuery'] || window['$'], // weirdness to make IE happy
- foreach = _.each,
- extend = _.extend,
- slice = Array.prototype.slice,
- identity = _.identity,
- angular = window['angular'] || (window['angular'] = {}),
- angularValidator = angular['validator'] || (angular['validator'] = {}),
- angularDirective = angular['directive'] || (angular['directive'] = function(name, fn){
- if (fn) {angularDirective[name] = fn;};
- return angularDirective[name];
- }),
- angularFilter = angular['filter'] || (angular['filter'] = {}),
- angularFormatter = angular['formatter'] || (angular['formatter'] = {}),
- angularCallbacks = angular['callbacks'] || (angular['callbacks'] = {}),
- angularAlert = angular['alert'] || (angular['alert'] = function(){
+ jQuery = window['jQuery'] || window['$'], // weirdness to make IE happy
+ slice = Array.prototype.slice,
+ angular = window['angular'] || (window['angular'] = {}),
+ angularTextMarkup = extensionList(angular, 'textMarkup'),
+ angularAttrMarkup = extensionList(angular, 'attrMarkup'),
+ angularDirective = extensionMap(angular, 'directive'),
+ angularWidget = extensionMap(angular, 'widget'),
+ angularValidator = extensionMap(angular, 'validator'),
+ angularFilter = extensionMap(angular, 'filter'),
+ angularFormatter = extensionMap(angular, 'formatter'),
+ angularCallbacks = extensionMap(angular, 'callbacks'),
+ angularAlert = angular['alert'] || (angular['alert'] = function(){
log(arguments); window.alert.apply(window, arguments);
});
angular['copy'] = copy;
@@ -44,6 +64,35 @@ var isVisible = isVisible || function (element) {
return jQuery(element).is(":visible");
};
+function foreach(obj, iterator, context) {
+ var key;
+ if (obj) {
+ if (obj.forEach) {
+ obj.forEach(iterator, context);
+ } else if (obj instanceof Array) {
+ for (key = 0; key < obj.length; key++)
+ iterator.call(context, obj[key], key);
+ } else {
+ for (key in obj)
+ iterator.call(context, obj[key], key);
+ }
+ }
+ return obj;
+}
+
+function extend(dst, obj) {
+ foreach(obj, function(value, key){
+ dst[key] = value;
+ });
+ return dst;
+}
+
+function isDefined(value){ return typeof value != 'undefined'; }
+function isObject(value){ return typeof value == 'object';}
+function isString(value){ return typeof value == 'string';}
+function isArray(value) { return value instanceof Array; }
+function isFunction(value){ return typeof value == 'function';}
+
function log(a, b, c){
var console = window['console'];
switch(arguments.length) {
@@ -97,14 +146,15 @@ function isNode(inp) {
}
function isLeafNode (node) {
- switch (node.nodeName) {
- case "OPTION":
- case "PRE":
- case "TITLE":
- return true;
- default:
- return false;
+ if (node) {
+ switch (node.nodeName) {
+ case "OPTION":
+ case "PRE":
+ case "TITLE":
+ return true;
+ }
}
+ return false;
}
function copy(source, destination){
@@ -160,15 +210,32 @@ function escapeAttr(html) {
function bind(_this, _function) {
var curryArgs = slice.call(arguments, 2, arguments.length);
- if (!_this)
- throw "Missing this";
- if (!_.isFunction(_function))
- throw "Missing function";
return function() {
return _function.apply(_this, curryArgs.concat(slice.call(arguments, 0, arguments.length)));
};
}
+function bindTry(_this, _function) {
+ var args = arguments,
+ last = args.length - 1,
+ curryArgs = slice.call(args, 2, last),
+ exceptionHandler = args[last];
+ return function() {
+ try {
+ return _function.apply(_this, curryArgs.concat(slice.call(arguments, 0, arguments.length)));
+ } catch (e) {
+ if (e = exceptionHandler(e)) throw e;
+ }
+ };
+}
+
+function errorHandlerFor(element) {
+ return function(error){
+ element.attr('ng-error', angular.toJson(error));
+ element.addClass('ng-exception');
+ };
+}
+
function outerHTML(node) {
var temp = document.createElement('div');
temp.appendChild(node);