angular-on-rails 1.0.5 → 1.1.3u
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/angularjs/version.rb +1 -1
- data/vendor/assets/javascripts/angular-bootstrap-prettify.js +1 -1
- data/vendor/assets/javascripts/angular-bootstrap.js +1 -1
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +1 -1
- data/vendor/assets/javascripts/angular-mocks.js +68 -37
- data/vendor/assets/javascripts/angular-resource.js +99 -37
- data/vendor/assets/javascripts/angular-sanitize.js +25 -4
- data/vendor/assets/javascripts/angular-scenario.js +4204 -3710
- data/vendor/assets/javascripts/angular.js +603 -172
- data/vendor/assets/javascripts/i18n/angular-locale_am-et.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_am.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-eg.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bg-bg.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bg.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bn-bd.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bn.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ca-es.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ca.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_cs-cz.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_cs.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_da-dk.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_da.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-at.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-be.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-ch.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-de.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-lu.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el-gr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el-polyton.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-as.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-au.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt-us.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-gb.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-gu.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-ie.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-iso.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-mh.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-mp.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-sg.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-um.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-us.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-vi.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-za.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-zz.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-es.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_et-ee.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_et.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_eu-es.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_eu.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fa-ir.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fa.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fi-fi.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fi.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fil-ph.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fil.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-bl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ca.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-fr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-gp.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mc.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mf.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mq.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-re.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gl-es.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gsw-ch.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gsw.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gu-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gu.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_he-il.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_he.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hi-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hi.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hr-hr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hu-hu.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hu.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_id-id.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_id.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_is-is.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_is.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_it-it.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_it.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_iw.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ja-jp.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ja.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_kn-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_kn.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ko-kr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ko.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ln-cd.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ln.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lt-lt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lv-lv.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lv.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ml-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ml.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mo.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mr-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ms-my.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ms.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mt-mt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl-nl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_no.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_or-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_or.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pl-pl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-br.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-pt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ro-ro.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ro.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ru-ru.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ru.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sk-sk.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sk.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sl-si.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sq-al.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sq.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-rs.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-rs.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-rs.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sv-se.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sv.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sw-tz.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sw.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ta-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ta.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_te-in.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_te.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_th-th.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_th.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tl-ph.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tl.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tr-tr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_uk-ua.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_uk.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ur-pk.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ur.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_vi-vn.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_vi.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-cn.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-cn.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hk.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-tw.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh.js +4 -0
- metadata +160 -10
- data/vendor/assets/javascripts/jstd-scenario-adapter-config.js +0 -6
- data/vendor/assets/javascripts/jstd-scenario-adapter.js +0 -185
data/lib/angularjs/version.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license AngularJS v1.
|
|
2
|
+
* @license AngularJS v1.1.3
|
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
|
4
4
|
* License: MIT
|
|
5
5
|
*
|
|
@@ -456,6 +456,7 @@ angular.mock.$LogProvider = function() {
|
|
|
456
456
|
* newYearInBratislava.getDate() => 1;
|
|
457
457
|
* newYearInBratislava.getHours() => 0;
|
|
458
458
|
* newYearInBratislava.getMinutes() => 0;
|
|
459
|
+
* newYearInBratislava.getSeconds() => 0;
|
|
459
460
|
* </pre>
|
|
460
461
|
*
|
|
461
462
|
*/
|
|
@@ -512,6 +513,10 @@ angular.mock.$LogProvider = function() {
|
|
|
512
513
|
return self.date.getSeconds();
|
|
513
514
|
};
|
|
514
515
|
|
|
516
|
+
self.getMilliseconds = function() {
|
|
517
|
+
return self.date.getMilliseconds();
|
|
518
|
+
};
|
|
519
|
+
|
|
515
520
|
self.getTimezoneOffset = function() {
|
|
516
521
|
return offset * 60;
|
|
517
522
|
};
|
|
@@ -562,7 +567,7 @@ angular.mock.$LogProvider = function() {
|
|
|
562
567
|
}
|
|
563
568
|
|
|
564
569
|
//hide all methods not implemented in this mock that the Date prototype exposes
|
|
565
|
-
var unimplementedMethods = ['
|
|
570
|
+
var unimplementedMethods = ['getUTCDay',
|
|
566
571
|
'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
|
|
567
572
|
'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
|
|
568
573
|
'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
|
|
@@ -1352,17 +1357,49 @@ function MockXhr() {
|
|
|
1352
1357
|
* @description
|
|
1353
1358
|
*
|
|
1354
1359
|
* This service is just a simple decorator for {@link ng.$timeout $timeout} service
|
|
1355
|
-
* that adds a "flush"
|
|
1356
|
-
*/
|
|
1360
|
+
* that adds a "flush" and "verifyNoPendingTasks" methods.
|
|
1361
|
+
*/
|
|
1357
1362
|
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1363
|
+
angular.mock.$TimeoutDecorator = function($delegate, $browser) {
|
|
1364
|
+
|
|
1365
|
+
/**
|
|
1366
|
+
* @ngdoc method
|
|
1367
|
+
* @name ngMock.$timeout#flush
|
|
1368
|
+
* @methodOf ngMock.$timeout
|
|
1369
|
+
* @description
|
|
1370
|
+
*
|
|
1371
|
+
* Flushes the queue of pending tasks.
|
|
1372
|
+
*/
|
|
1373
|
+
$delegate.flush = function() {
|
|
1374
|
+
$browser.defer.flush();
|
|
1375
|
+
};
|
|
1376
|
+
|
|
1377
|
+
/**
|
|
1378
|
+
* @ngdoc method
|
|
1379
|
+
* @name ngMock.$timeout#verifyNoPendingTasks
|
|
1380
|
+
* @methodOf ngMock.$timeout
|
|
1381
|
+
* @description
|
|
1382
|
+
*
|
|
1383
|
+
* Verifies that there are no pending tasks that need to be flushed.
|
|
1384
|
+
*/
|
|
1385
|
+
$delegate.verifyNoPendingTasks = function() {
|
|
1386
|
+
if ($browser.deferredFns.length) {
|
|
1387
|
+
throw Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
|
|
1388
|
+
formatPendingTasksAsString($browser.deferredFns));
|
|
1389
|
+
}
|
|
1390
|
+
};
|
|
1391
|
+
|
|
1392
|
+
function formatPendingTasksAsString(tasks) {
|
|
1393
|
+
var result = [];
|
|
1394
|
+
angular.forEach(tasks, function(task) {
|
|
1395
|
+
result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
|
|
1396
|
+
});
|
|
1397
|
+
|
|
1398
|
+
return result.join(', ');
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
return $delegate;
|
|
1402
|
+
};
|
|
1366
1403
|
|
|
1367
1404
|
/**
|
|
1368
1405
|
*
|
|
@@ -1388,15 +1425,9 @@ angular.module('ngMock', ['ng']).provider({
|
|
|
1388
1425
|
$httpBackend: angular.mock.$HttpBackendProvider,
|
|
1389
1426
|
$rootElement: angular.mock.$RootElementProvider
|
|
1390
1427
|
}).config(function($provide) {
|
|
1391
|
-
$provide.decorator('$timeout',
|
|
1392
|
-
$delegate.flush = function() {
|
|
1393
|
-
$browser.defer.flush();
|
|
1394
|
-
};
|
|
1395
|
-
return $delegate;
|
|
1396
|
-
});
|
|
1428
|
+
$provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
|
|
1397
1429
|
});
|
|
1398
1430
|
|
|
1399
|
-
|
|
1400
1431
|
/**
|
|
1401
1432
|
* @ngdoc overview
|
|
1402
1433
|
* @name ngMockE2E
|
|
@@ -1610,14 +1641,20 @@ window.jstestdriver && (function(window) {
|
|
|
1610
1641
|
})(window);
|
|
1611
1642
|
|
|
1612
1643
|
|
|
1613
|
-
window.jasmine && (function(window) {
|
|
1644
|
+
(window.jasmine || window.mocha) && (function(window) {
|
|
1645
|
+
|
|
1646
|
+
var currentSpec = null;
|
|
1647
|
+
|
|
1648
|
+
beforeEach(function() {
|
|
1649
|
+
currentSpec = this;
|
|
1650
|
+
});
|
|
1614
1651
|
|
|
1615
1652
|
afterEach(function() {
|
|
1616
|
-
var
|
|
1617
|
-
var injector = spec.$injector;
|
|
1653
|
+
var injector = currentSpec.$injector;
|
|
1618
1654
|
|
|
1619
|
-
|
|
1620
|
-
|
|
1655
|
+
currentSpec.$injector = null;
|
|
1656
|
+
currentSpec.$modules = null;
|
|
1657
|
+
currentSpec = null;
|
|
1621
1658
|
|
|
1622
1659
|
if (injector) {
|
|
1623
1660
|
injector.get('$rootElement').unbind();
|
|
@@ -1639,13 +1676,8 @@ window.jasmine && (function(window) {
|
|
|
1639
1676
|
angular.callbacks.counter = 0;
|
|
1640
1677
|
});
|
|
1641
1678
|
|
|
1642
|
-
function getCurrentSpec() {
|
|
1643
|
-
return jasmine.getEnv().currentSpec;
|
|
1644
|
-
}
|
|
1645
|
-
|
|
1646
1679
|
function isSpecRunning() {
|
|
1647
|
-
|
|
1648
|
-
return spec && spec.queue.running;
|
|
1680
|
+
return currentSpec && currentSpec.queue.running;
|
|
1649
1681
|
}
|
|
1650
1682
|
|
|
1651
1683
|
/**
|
|
@@ -1670,11 +1702,10 @@ window.jasmine && (function(window) {
|
|
|
1670
1702
|
return isSpecRunning() ? workFn() : workFn;
|
|
1671
1703
|
/////////////////////
|
|
1672
1704
|
function workFn() {
|
|
1673
|
-
|
|
1674
|
-
if (spec.$injector) {
|
|
1705
|
+
if (currentSpec.$injector) {
|
|
1675
1706
|
throw Error('Injector already created, can not register a module!');
|
|
1676
1707
|
} else {
|
|
1677
|
-
var modules =
|
|
1708
|
+
var modules = currentSpec.$modules || (currentSpec.$modules = []);
|
|
1678
1709
|
angular.forEach(moduleFns, function(module) {
|
|
1679
1710
|
modules.push(module);
|
|
1680
1711
|
});
|
|
@@ -1741,13 +1772,13 @@ window.jasmine && (function(window) {
|
|
|
1741
1772
|
return isSpecRunning() ? workFn() : workFn;
|
|
1742
1773
|
/////////////////////
|
|
1743
1774
|
function workFn() {
|
|
1744
|
-
var
|
|
1745
|
-
|
|
1775
|
+
var modules = currentSpec.$modules || [];
|
|
1776
|
+
|
|
1746
1777
|
modules.unshift('ngMock');
|
|
1747
1778
|
modules.unshift('ng');
|
|
1748
|
-
var injector =
|
|
1779
|
+
var injector = currentSpec.$injector;
|
|
1749
1780
|
if (!injector) {
|
|
1750
|
-
injector =
|
|
1781
|
+
injector = currentSpec.$injector = angular.injector(modules);
|
|
1751
1782
|
}
|
|
1752
1783
|
for(var i = 0, ii = blockFns.length; i < ii; i++) {
|
|
1753
1784
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license AngularJS v1.
|
|
2
|
+
* @license AngularJS v1.1.3
|
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -25,12 +25,13 @@
|
|
|
25
25
|
* the need to interact with the low level {@link ng.$http $http} service.
|
|
26
26
|
*
|
|
27
27
|
* @param {string} url A parameterized URL template with parameters prefixed by `:` as in
|
|
28
|
-
* `/user/:username`. If you are using a URL with a port number (e.g.
|
|
28
|
+
* `/user/:username`. If you are using a URL with a port number (e.g.
|
|
29
29
|
* `http://example.com:8080/api`), you'll need to escape the colon character before the port
|
|
30
30
|
* number, like this: `$resource('http://example.com\\:8080/api')`.
|
|
31
31
|
*
|
|
32
32
|
* @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
|
|
33
|
-
* `actions` methods.
|
|
33
|
+
* `actions` methods. If any of the parameter value is a function, it will be executed every time
|
|
34
|
+
* when a param value needs to be obtained for a request (unless the param was overriden).
|
|
34
35
|
*
|
|
35
36
|
* Each key value in the parameter object is first bound to url template if present and then any
|
|
36
37
|
* excess keys are appended to the url search query after the `?`.
|
|
@@ -42,21 +43,40 @@
|
|
|
42
43
|
* the data object (useful for non-GET operations).
|
|
43
44
|
*
|
|
44
45
|
* @param {Object.<Object>=} actions Hash with declaration of custom action that should extend the
|
|
45
|
-
* default set of resource actions. The declaration should be created in the
|
|
46
|
+
* default set of resource actions. The declaration should be created in the format of {@link
|
|
47
|
+
* ng.$http#Parameters $http.config}:
|
|
46
48
|
*
|
|
47
|
-
* {action1: {method:?, params:?, isArray
|
|
48
|
-
* action2: {method:?, params:?, isArray
|
|
49
|
+
* {action1: {method:?, params:?, isArray:?, headers:?, ...},
|
|
50
|
+
* action2: {method:?, params:?, isArray:?, headers:?, ...},
|
|
49
51
|
* ...}
|
|
50
52
|
*
|
|
51
53
|
* Where:
|
|
52
54
|
*
|
|
53
|
-
* -
|
|
55
|
+
* - **`action`** – {string} – The name of action. This name becomes the name of the method on your
|
|
54
56
|
* resource object.
|
|
55
|
-
* -
|
|
56
|
-
* and `JSONP
|
|
57
|
-
* -
|
|
58
|
-
*
|
|
57
|
+
* - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, `DELETE`,
|
|
58
|
+
* and `JSONP`.
|
|
59
|
+
* - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of the
|
|
60
|
+
* parameter value is a function, it will be executed every time when a param value needs to be
|
|
61
|
+
* obtained for a request (unless the param was overriden).
|
|
62
|
+
* - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, see
|
|
59
63
|
* `returns` section.
|
|
64
|
+
* - **`transformRequest`** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
|
|
65
|
+
* transform function or an array of such functions. The transform function takes the http
|
|
66
|
+
* request body and headers and returns its transformed (typically serialized) version.
|
|
67
|
+
* - **`transformResponse`** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
|
|
68
|
+
* transform function or an array of such functions. The transform function takes the http
|
|
69
|
+
* response body and headers and returns its transformed (typically deserialized) version.
|
|
70
|
+
* - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
|
|
71
|
+
* GET request, otherwise if a cache instance built with
|
|
72
|
+
* {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
|
|
73
|
+
* caching.
|
|
74
|
+
* - **`timeout`** – `{number}` – timeout in milliseconds.
|
|
75
|
+
* - **`withCredentials`** - `{boolean}` - whether to to set the `withCredentials` flag on the
|
|
76
|
+
* XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5
|
|
77
|
+
* requests with credentials} for more information.
|
|
78
|
+
* - **`responseType`** - `{string}` - see {@link
|
|
79
|
+
* https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}.
|
|
60
80
|
*
|
|
61
81
|
* @returns {Object} A resource "class" object with methods for the default set of resource actions
|
|
62
82
|
* optionally extended with custom `actions`. The default set contains these actions:
|
|
@@ -96,6 +116,24 @@
|
|
|
96
116
|
* - non-GET instance actions: `instance.$action([parameters], [success], [error])`
|
|
97
117
|
*
|
|
98
118
|
*
|
|
119
|
+
* The Resource instances and collection have these additional properties:
|
|
120
|
+
*
|
|
121
|
+
* - `$then`: the `then` method of a {@link ng.$q promise} derived from the underlying
|
|
122
|
+
* {@link ng.$http $http} call.
|
|
123
|
+
*
|
|
124
|
+
* The success callback for the `$then` method will be resolved if the underlying `$http` requests
|
|
125
|
+
* succeeds.
|
|
126
|
+
*
|
|
127
|
+
* The success callback is called with a single object which is the {@link ng.$http http response}
|
|
128
|
+
* object extended with a new property `resource`. This `resource` property is a reference to the
|
|
129
|
+
* result of the resource action — resource object or array of resources.
|
|
130
|
+
*
|
|
131
|
+
* The error callback is called with the {@link ng.$http http response} object when an http
|
|
132
|
+
* error occurs.
|
|
133
|
+
*
|
|
134
|
+
* - `$resolved`: true if the promise has been resolved (either with success or rejection);
|
|
135
|
+
* Knowing if the Resource has been resolved is useful in data-binding.
|
|
136
|
+
*
|
|
99
137
|
* @example
|
|
100
138
|
*
|
|
101
139
|
* # Credit card resource
|
|
@@ -138,7 +176,7 @@
|
|
|
138
176
|
* The object returned from this function execution is a resource "class" which has "static" method
|
|
139
177
|
* for each action in the definition.
|
|
140
178
|
*
|
|
141
|
-
* Calling these methods invoke `$http` on the `url` template with the given `method` and `
|
|
179
|
+
* Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and `headers`.
|
|
142
180
|
* When the data is returned from the server then the object is an instance of the resource type and
|
|
143
181
|
* all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
|
|
144
182
|
* operations (create, read, update, delete) on server-side data.
|
|
@@ -284,7 +322,7 @@ angular.module('ngResource', ['ng']).
|
|
|
284
322
|
}
|
|
285
323
|
|
|
286
324
|
Route.prototype = {
|
|
287
|
-
|
|
325
|
+
setUrlParams: function(config, params) {
|
|
288
326
|
var self = this,
|
|
289
327
|
url = this.template,
|
|
290
328
|
val,
|
|
@@ -307,16 +345,17 @@ angular.module('ngResource', ['ng']).
|
|
|
307
345
|
});
|
|
308
346
|
}
|
|
309
347
|
});
|
|
310
|
-
|
|
311
|
-
|
|
348
|
+
|
|
349
|
+
// set the url
|
|
350
|
+
config.url = url.replace(/\/?#$/, '').replace(/\/*$/, '');
|
|
351
|
+
|
|
352
|
+
// set params - delegate param encoding to $http
|
|
312
353
|
forEach(params, function(value, key){
|
|
313
354
|
if (!self.urlParams[key]) {
|
|
314
|
-
|
|
355
|
+
config.params = config.params || {};
|
|
356
|
+
config.params[key] = value;
|
|
315
357
|
}
|
|
316
358
|
});
|
|
317
|
-
query.sort();
|
|
318
|
-
url = url.replace(/\/*$/, '');
|
|
319
|
-
return url + (query.length ? '?' + query.join('&') : '');
|
|
320
359
|
}
|
|
321
360
|
};
|
|
322
361
|
|
|
@@ -330,6 +369,7 @@ angular.module('ngResource', ['ng']).
|
|
|
330
369
|
var ids = {};
|
|
331
370
|
actionParams = extend({}, paramDefaults, actionParams);
|
|
332
371
|
forEach(actionParams, function(value, key){
|
|
372
|
+
if (isFunction(value)) { value = value(); }
|
|
333
373
|
ids[key] = value.charAt && value.charAt(0) == '@' ? getter(data, value.substr(1)) : value;
|
|
334
374
|
});
|
|
335
375
|
return ids;
|
|
@@ -347,6 +387,8 @@ angular.module('ngResource', ['ng']).
|
|
|
347
387
|
var data;
|
|
348
388
|
var success = noop;
|
|
349
389
|
var error = null;
|
|
390
|
+
var promise;
|
|
391
|
+
|
|
350
392
|
switch(arguments.length) {
|
|
351
393
|
case 4:
|
|
352
394
|
error = a4;
|
|
@@ -382,25 +424,45 @@ angular.module('ngResource', ['ng']).
|
|
|
382
424
|
}
|
|
383
425
|
|
|
384
426
|
var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data));
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
427
|
+
var httpConfig = {},
|
|
428
|
+
promise;
|
|
429
|
+
|
|
430
|
+
forEach(action, function(value, key) {
|
|
431
|
+
if (key != 'params' && key != 'isArray' ) {
|
|
432
|
+
httpConfig[key] = copy(value);
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
httpConfig.data = data;
|
|
436
|
+
route.setUrlParams(httpConfig, extend({}, extractParams(data, action.params || {}), params));
|
|
437
|
+
|
|
438
|
+
function markResolved() { value.$resolved = true; }
|
|
439
|
+
|
|
440
|
+
promise = $http(httpConfig);
|
|
441
|
+
value.$resolved = false;
|
|
442
|
+
|
|
443
|
+
promise.then(markResolved, markResolved);
|
|
444
|
+
value.$then = promise.then(function(response) {
|
|
445
|
+
var data = response.data;
|
|
446
|
+
var then = value.$then, resolved = value.$resolved;
|
|
447
|
+
|
|
448
|
+
if (data) {
|
|
449
|
+
if (action.isArray) {
|
|
450
|
+
value.length = 0;
|
|
451
|
+
forEach(data, function(item) {
|
|
452
|
+
value.push(new Resource(item));
|
|
453
|
+
});
|
|
454
|
+
} else {
|
|
455
|
+
copy(data, value);
|
|
456
|
+
value.$then = then;
|
|
457
|
+
value.$resolved = resolved;
|
|
401
458
|
}
|
|
402
|
-
|
|
403
|
-
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
(success||noop)(value, response.headers);
|
|
462
|
+
|
|
463
|
+
response.resource = value;
|
|
464
|
+
return response;
|
|
465
|
+
}, error).then;
|
|
404
466
|
|
|
405
467
|
return value;
|
|
406
468
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license AngularJS v1.
|
|
2
|
+
* @license AngularJS v1.1.3
|
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -129,7 +129,7 @@ var START_TAG_REGEXP = /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:
|
|
|
129
129
|
BEGING_END_TAGE_REGEXP = /^<\s*\//,
|
|
130
130
|
COMMENT_REGEXP = /<!--(.*?)-->/g,
|
|
131
131
|
CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
|
|
132
|
-
URI_REGEXP = /^((ftp|https?):\/\/|mailto:|#)/,
|
|
132
|
+
URI_REGEXP = /^((ftp|https?):\/\/|mailto:|tel:|#)/,
|
|
133
133
|
NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Match everything outside of normal chars and " (quote character)
|
|
134
134
|
|
|
135
135
|
|
|
@@ -432,6 +432,7 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
|
|
|
432
432
|
* plain email address links.
|
|
433
433
|
*
|
|
434
434
|
* @param {string} text Input text.
|
|
435
|
+
* @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
|
|
435
436
|
* @returns {string} Html-linkified text.
|
|
436
437
|
*
|
|
437
438
|
* @usage
|
|
@@ -448,6 +449,7 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
|
|
|
448
449
|
'mailto:us@somewhere.org,\n'+
|
|
449
450
|
'another@somewhere.org,\n'+
|
|
450
451
|
'and one more: ftp://127.0.0.1/.';
|
|
452
|
+
$scope.snippetWithTarget = 'http://angularjs.org/';
|
|
451
453
|
}
|
|
452
454
|
</script>
|
|
453
455
|
<div ng-controller="Ctrl">
|
|
@@ -467,6 +469,15 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
|
|
|
467
469
|
<div ng-bind-html="snippet | linky"></div>
|
|
468
470
|
</td>
|
|
469
471
|
</tr>
|
|
472
|
+
<tr id="linky-target">
|
|
473
|
+
<td>linky target</td>
|
|
474
|
+
<td>
|
|
475
|
+
<pre><div ng-bind-html="snippetWithTarget | linky:'_blank'"><br></div></pre>
|
|
476
|
+
</td>
|
|
477
|
+
<td>
|
|
478
|
+
<div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
|
|
479
|
+
</td>
|
|
480
|
+
</tr>
|
|
470
481
|
<tr id="escaped-html">
|
|
471
482
|
<td>no filter</td>
|
|
472
483
|
<td><pre><div ng-bind="snippet"><br></div></pre></td>
|
|
@@ -499,6 +510,11 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
|
|
|
499
510
|
toBe('new <a href="http://link">http://link</a>.');
|
|
500
511
|
expect(using('#escaped-html').binding('snippet')).toBe('new http://link.');
|
|
501
512
|
});
|
|
513
|
+
|
|
514
|
+
it('should work with the target property', function() {
|
|
515
|
+
expect(using('#linky-target').binding("snippetWithTarget | linky:'_blank'")).
|
|
516
|
+
toBe('<a target="_blank" href="http://angularjs.org/">http://angularjs.org/</a>');
|
|
517
|
+
});
|
|
502
518
|
</doc:scenario>
|
|
503
519
|
</doc:example>
|
|
504
520
|
*/
|
|
@@ -506,7 +522,7 @@ angular.module('ngSanitize').filter('linky', function() {
|
|
|
506
522
|
var LINKY_URL_REGEXP = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,
|
|
507
523
|
MAILTO_REGEXP = /^mailto:/;
|
|
508
524
|
|
|
509
|
-
return function(text) {
|
|
525
|
+
return function(text, target) {
|
|
510
526
|
if (!text) return text;
|
|
511
527
|
var match;
|
|
512
528
|
var raw = text;
|
|
@@ -515,6 +531,10 @@ angular.module('ngSanitize').filter('linky', function() {
|
|
|
515
531
|
var writer = htmlSanitizeWriter(html);
|
|
516
532
|
var url;
|
|
517
533
|
var i;
|
|
534
|
+
var properties = {};
|
|
535
|
+
if (angular.isDefined(target)) {
|
|
536
|
+
properties.target = target;
|
|
537
|
+
}
|
|
518
538
|
while ((match = raw.match(LINKY_URL_REGEXP))) {
|
|
519
539
|
// We can not end in these as they are sometimes found at the end of the sentence
|
|
520
540
|
url = match[0];
|
|
@@ -522,7 +542,8 @@ angular.module('ngSanitize').filter('linky', function() {
|
|
|
522
542
|
if (match[2] == match[3]) url = 'mailto:' + url;
|
|
523
543
|
i = match.index;
|
|
524
544
|
writer.chars(raw.substr(0, i));
|
|
525
|
-
|
|
545
|
+
properties.href = url;
|
|
546
|
+
writer.start('a', properties);
|
|
526
547
|
writer.chars(match[0].replace(MAILTO_REGEXP, ''));
|
|
527
548
|
writer.end('a');
|
|
528
549
|
raw = raw.substring(i + match[0].length);
|