PageRenderTime 29ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/ajax/libs/angularSubkit/1.0.2/angularsubkit.js

https://gitlab.com/Mirros/cdnjs
JavaScript | 1405 lines | 1002 code | 91 blank | 312 comment | 324 complexity | 0e773add4b287a0e88392a1f5cc5a5c8 MD5 | raw file
  1. // - 1.0.2
  2. // https://github.com/subkit
  3. // Copyright 2012 - 2015 http://subkit.io
  4. // MIT License
  5. !function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.Subkit=e():"undefined"!=typeof global?global.Subkit=e():"undefined"!=typeof self&&(self.Subkit=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  6. module.exports = function(subkit, subscriptions, poll){
  7. 'use strict';
  8. return function(){
  9. return {
  10. list: function(callback){
  11. var deferred = subkit.$q.defer();
  12. var url = subkit.baseUrl + '/events/streams';
  13. subkit.httpRequest.get(url, subkit.options, function(status, result){
  14. if (status === 0) deferred.reject(new Error('No network connection.'));
  15. else if (status !== 200) deferred.reject(new Error(result.json().message));
  16. else deferred.resolve(result.json());
  17. });
  18. return deferred.promise.nodeify(callback);
  19. },
  20. log: function(stream, callback){
  21. var deferred = subkit.$q.defer();
  22. var url = subkit.baseUrl + '/events/log/' + stream;
  23. subkit.httpRequest.get(url, subkit.options, function(status, result){
  24. if (status === 0) deferred.reject(new Error('No network connection.'));
  25. else if (status !== 200) deferred.reject(new Error(result.json().message));
  26. else deferred.resolve(result.json());
  27. });
  28. return deferred.promise.nodeify(callback);
  29. },
  30. remove: function(stream, callback){
  31. var deferred = subkit.$q.defer();
  32. var url = subkit.baseUrl + '/events/log/' + stream;
  33. subkit.httpRequest.del(url, subkit.options, function(status, result){
  34. if (status === 0) deferred.reject(new Error('No network connection.'));
  35. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  36. else deferred.resolve(result.json());
  37. });
  38. return deferred.promise.nodeify(callback);
  39. },
  40. emit: function(stream, payload, persistent, metadata, callback){
  41. var deferred = subkit.$q.defer();
  42. var url = subkit.baseUrl + '/events/emit/' + stream;
  43. var msg = JSON.parse(JSON.stringify(subkit.options));
  44. msg.data = payload;
  45. if(persistent) msg.headers['X-Subkit-Event-Persistent'] = true;
  46. if(metadata) msg.headers['X-Subkit-Event-Metadata'] = JSON.stringify(metadata);
  47. subkit.httpRequest.post(url, msg, function(status, result){
  48. if (status === 0) deferred.reject(new Error('No network connection.'));
  49. else if (status !== 200 && status !== 201 && status !== 202) deferred.reject(new Error(result.json().message));
  50. else deferred.resolve(result.json());
  51. });
  52. return deferred.promise.nodeify(callback);
  53. },
  54. on: function(stream, callback) {
  55. stream = stream.replace('/', '_');
  56. subscriptions[stream] = poll(stream, callback);
  57. return {
  58. off: function(){
  59. delete subscriptions[stream];
  60. if(subscriptions[stream]) subscriptions[stream]().abort();
  61. },
  62. emit: function(value, callback){
  63. subkit.events.emit(stream, value, callback);
  64. }
  65. };
  66. },
  67. off: function(stream){
  68. if(subscriptions[stream]) subscriptions[stream]().abort();
  69. delete subscriptions[stream];
  70. return false;
  71. }
  72. };
  73. };
  74. };
  75. },{}],2:[function(require,module,exports){
  76. module.exports = function(subkit){
  77. 'use strict';
  78. return function(){
  79. return {
  80. login: function(callback){
  81. var deferred = subkit.$q.defer();
  82. var url = subkit.baseUrl + '/manage/login';
  83. subkit.httpRequest.authBasic(subkit.options.username, subkit.options.password);
  84. subkit.httpRequest.post(url, subkit.options, function(status, result){
  85. if (status === 0) deferred.reject(new Error('No network connection.'));
  86. else if (status !== 200) deferred.reject(new Error(result.json().message));
  87. else {
  88. subkit.options.apiKey = result.json().api.apiKey;
  89. deferred.resolve({
  90. apiKey: subkit.options.apiKey,
  91. username: subkit.options.username,
  92. password: subkit.options.password,
  93. baseUrl: subkit.baseUrl
  94. });
  95. }
  96. });
  97. return deferred.promise.nodeify(callback);
  98. },
  99. import: function(file, callback){
  100. var deferred = subkit.$q.defer();
  101. var msg = JSON.parse(JSON.stringify(subkit.options));
  102. msg.headers = {
  103. 'Content-Type': 'application/octed-stream'
  104. };
  105. msg.data = file;
  106. var url = subkit.baseUrl + '/manage/import';
  107. subkit.httpRequest.post(url, msg, function(status, result){
  108. if (status === 0) deferred.reject(new Error('No network connection.'));
  109. else if (status !== 201) deferred.reject(new Error(result.json().message));
  110. else deferred.resolve(result.json());
  111. });
  112. return deferred.promise.nodeify(callback);
  113. },
  114. export: function(callback){
  115. var deferred = subkit.$q.defer();
  116. var url = subkit.baseUrl + '/manage/export';
  117. subkit.httpRequest.get(url, subkit.options, function(status, result){
  118. if (status === 0) deferred.reject(new Error('No network connection.'));
  119. else if (status !== 200) deferred.reject(new Error(result.json().message));
  120. else deferred.resolve('data:application/octet-stream,' + result.text());
  121. });
  122. return deferred.promise.nodeify(callback);
  123. },
  124. backup: function(callback){
  125. if(callback) callback();
  126. },
  127. restore: function(name, callback){
  128. if(callback) callback();
  129. },
  130. password: {
  131. set: function(oldPassword, newPassword, verifyPassword, callback){
  132. var deferred = subkit.$q.defer();
  133. var url = subkit.baseUrl + '/manage/password/action/reset';
  134. var msg = JSON.parse(JSON.stringify(subkit.options));
  135. msg.data = {
  136. password: oldPassword,
  137. newPassword: newPassword,
  138. newPasswordValidation: verifyPassword
  139. };
  140. subkit.httpRequest.put(url, msg, function(status, result){
  141. if (status === 0) deferred.reject(new Error('No network connection.'));
  142. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  143. else deferred.resolve(result.json());
  144. });
  145. return deferred.promise.nodeify(callback);
  146. }
  147. },
  148. user: {
  149. set: function(username, callback){
  150. var deferred = subkit.$q.defer();
  151. var url = subkit.baseUrl + '/manage/user';
  152. var msg = JSON.parse(JSON.stringify(subkit.options));
  153. msg.data = {
  154. username: username
  155. };
  156. subkit.httpRequest.put(url, msg, function(status, result){
  157. if (status === 0) deferred.reject(new Error('No network connection.'));
  158. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  159. else deferred.resolve(result.json());
  160. });
  161. return deferred.promise.nodeify(callback);
  162. }
  163. },
  164. apikey: {
  165. reset: function(callback){
  166. var deferred = subkit.$q.defer();
  167. var url = subkit.baseUrl + '/manage/apikey/action/reset';
  168. subkit.httpRequest.put(url, subkit.options, function(status, result){
  169. if (status === 0) deferred.reject(new Error('No network connection.'));
  170. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  171. else deferred.resolve(result.json());
  172. });
  173. return deferred.promise.nodeify(callback);
  174. }
  175. },
  176. certificate:{
  177. get: function(callback){
  178. var deferred = subkit.$q.defer();
  179. var url = subkit.baseUrl + '/manage/certificate';
  180. subkit.httpRequest.get(url, subkit.options, function(status, result){
  181. if (status === 0) deferred.reject(new Error('No network connection.'));
  182. else if (status !== 200) deferred.reject(new Error(result.json().message));
  183. else deferred.resolve(result.json());
  184. });
  185. return deferred.promise.nodeify(callback);
  186. },
  187. set: function(certificate, callback){
  188. var deferred = subkit.$q.defer();
  189. var url = subkit.baseUrl + '/manage/certificate/action/change';
  190. var msg = JSON.parse(JSON.stringify(subkit.options));
  191. msg.data = certificate;
  192. subkit.httpRequest.put(url, msg, function(status, result){
  193. if (status === 0) deferred.reject(new Error('No network connection.'));
  194. else if (status !== 200 && status !== 201 && status !== 202) deferred.reject(new Error(result.json().message));
  195. else deferred.resolve(result.json());
  196. });
  197. return deferred.promise.nodeify(callback);
  198. }
  199. },
  200. status: {
  201. get: function(callback){
  202. var deferred = subkit.$q.defer();
  203. var url = subkit.baseUrl + '/manage/os';
  204. subkit.httpRequest.get(url, subkit.options, function(status, result){
  205. if (status === 0) deferred.reject(new Error('No network connection.'));
  206. else if (status !== 200) deferred.reject(new Error(result.json().message));
  207. else deferred.resolve(result.json());
  208. });
  209. return deferred.promise.nodeify(callback);
  210. },
  211. kill: function(callback){
  212. var deferred = subkit.$q.defer();
  213. var url = subkit.baseUrl + '/manage/kill';
  214. subkit.httpRequest.put(url, subkit.options, function(status, result){
  215. if (status === 0) deferred.reject(new Error('No network connection.'));
  216. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  217. else deferred.resolve(result.json());
  218. });
  219. return deferred.promise.nodeify(callback);
  220. }
  221. },
  222. plugins: {
  223. list: function(callback){
  224. var deferred = subkit.$q.defer();
  225. var url = subkit.baseUrl + '/manage/plugins';
  226. subkit.httpRequest.get(url, subkit.options, function(status, result){
  227. if (status === 0) deferred.reject(new Error('No network connection.'));
  228. else if (status !== 200) deferred.reject(new Error(result.json().message));
  229. else deferred.resolve(result.json());
  230. });
  231. return deferred.promise.nodeify(callback);
  232. },
  233. install: function(name,callback){
  234. var deferred = subkit.$q.defer();
  235. var url = subkit.baseUrl + '/manage/plugins/' + name;
  236. subkit.httpRequest.post(url, subkit.options, function(status, result){
  237. if (status === 0) deferred.reject(new Error('No network connection.'));
  238. else if (status !== 200 && status !== 201 && status !== 202) deferred.reject(new Error(result.json().message));
  239. else deferred.resolve(result.json());
  240. });
  241. return deferred.promise.nodeify(callback);
  242. },
  243. update: function(name,callback){
  244. var deferred = subkit.$q.defer();
  245. var url = subkit.baseUrl + '/manage/plugins/' + name;
  246. subkit.httpRequest.put(url, subkit.options, function(status, result){
  247. if (status === 0) deferred.reject(new Error('No network connection.'));
  248. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  249. else deferred.resolve(result.json());
  250. });
  251. return deferred.promise.nodeify(callback);
  252. },
  253. uninstall: function(name,callback){
  254. var deferred = subkit.$q.defer();
  255. var url = subkit.baseUrl + '/manage/plugins/' + name;
  256. subkit.httpRequest.del(url, subkit.options, function(status, result){
  257. if (status === 0) deferred.reject(new Error('No network connection.'));
  258. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  259. else deferred.resolve(result.json());
  260. });
  261. return deferred.promise.nodeify(callback);
  262. }
  263. },
  264. permissions:{
  265. roles: function(callback){
  266. var deferred = subkit.$q.defer();
  267. var url = subkit.baseUrl + '/manage/permissions/identities';
  268. subkit.httpRequest.get(url, subkit.options, function(status, result){
  269. if (status === 0) deferred.reject(new Error('No network connection.'));
  270. else if (status !== 200) deferred.reject(new Error(result.json().message));
  271. else deferred.resolve(result.json());
  272. });
  273. return deferred.promise.nodeify(callback);
  274. },
  275. list: function(identity, callback){
  276. var deferred = subkit.$q.defer();
  277. var url = subkit.baseUrl + '/manage/permissions/' + identity;
  278. subkit.httpRequest.get(url, subkit.options, function(status, result){
  279. if (status === 0) deferred.reject(new Error('No network connection.'));
  280. else if (status !== 200) deferred.reject(new Error(result.json().message));
  281. else deferred.resolve(result.json());
  282. });
  283. return deferred.promise.nodeify(callback);
  284. },
  285. set: function(key, callback){
  286. var deferred = subkit.$q.defer();
  287. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key);
  288. subkit.httpRequest.post(url, subkit.options, function(status, result){
  289. if (status === 0) deferred.reject(new Error('No network connection.'));
  290. else if (status !== 200 && status !== 201 && status !== 202) deferred.reject(new Error(result.json().message));
  291. else deferred.resolve(result.json());
  292. });
  293. return deferred.promise.nodeify(callback);
  294. },
  295. remove: function(key, callback){
  296. var deferred = subkit.$q.defer();
  297. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key);
  298. subkit.httpRequest.del(url, subkit.options, function(status, result){
  299. if (status === 0) deferred.reject(new Error('No network connection.'));
  300. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  301. else deferred.resolve(result.json());
  302. });
  303. return deferred.promise.nodeify(callback);
  304. },
  305. grantInsert: function(key, identity, callback){
  306. var deferred = subkit.$q.defer();
  307. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/grantinsert/' + identity;
  308. subkit.httpRequest.put(url, subkit.options, function(status, result){
  309. if (status === 0) deferred.reject(new Error('No network connection.'));
  310. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  311. else deferred.resolve(result.json());
  312. });
  313. return deferred.promise.nodeify(callback);
  314. },
  315. grantUpdate: function(key, identity, callback){
  316. var deferred = subkit.$q.defer();
  317. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/grantupdate/' + identity;
  318. subkit.httpRequest.put(url, subkit.options, function(status, result){
  319. if (status === 0) deferred.reject(new Error('No network connection.'));
  320. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  321. else deferred.resolve(result.json());
  322. });
  323. return deferred.promise.nodeify(callback);
  324. },
  325. grantDelete: function(key, identity, callback){
  326. var deferred = subkit.$q.defer();
  327. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/grantdelete/' + identity;
  328. subkit.httpRequest.put(url, subkit.options, function(status, result){
  329. if (status === 0) deferred.reject(new Error('No network connection.'));
  330. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  331. else deferred.resolve(result.json());
  332. });
  333. return deferred.promise.nodeify(callback);
  334. },
  335. grantRead: function(key, identity, callback){
  336. var deferred = subkit.$q.defer();
  337. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/grantread/' + identity;
  338. subkit.httpRequest.put(url, subkit.options, function(status, result){
  339. if (status === 0) deferred.reject(new Error('No network connection.'));
  340. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  341. else deferred.resolve(result.json());
  342. });
  343. return deferred.promise.nodeify(callback);
  344. },
  345. revokeInsert: function(key, identity, callback){
  346. var deferred = subkit.$q.defer();
  347. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/revokeinsert/' + identity;
  348. subkit.httpRequest.put(url, subkit.options, function(status, result){
  349. if (status === 0) deferred.reject(new Error('No network connection.'));
  350. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  351. else deferred.resolve(result.json());
  352. });
  353. return deferred.promise.nodeify(callback);
  354. },
  355. revokeUpdate: function(key, identity, callback){
  356. var deferred = subkit.$q.defer();
  357. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/revokeupdate/' + identity;
  358. subkit.httpRequest.put(url, subkit.options, function(status, result){
  359. if (status === 0) deferred.reject(new Error('No network connection.'));
  360. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  361. else deferred.resolve(result.json());
  362. });
  363. return deferred.promise.nodeify(callback);
  364. },
  365. revokeDelete: function(key, identity, callback){
  366. var deferred = subkit.$q.defer();
  367. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/revokedelete/' + identity;
  368. subkit.httpRequest.put(url, subkit.options, function(status, result){
  369. if (status === 0) deferred.reject(new Error('No network connection.'));
  370. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  371. else deferred.resolve(result.json());
  372. });
  373. return deferred.promise.nodeify(callback);
  374. },
  375. revokeRead: function(key, identity, callback){
  376. var deferred = subkit.$q.defer();
  377. var url = subkit.baseUrl + '/manage/permissions/' + encodeURIComponent(key) + '/action/revokeread/' + identity;
  378. subkit.httpRequest.put(url, subkit.options, function(status, result){
  379. if (status === 0) deferred.reject(new Error('No network connection.'));
  380. else if (status !== 200 && status !== 202) deferred.reject(new Error(result.json().message));
  381. else deferred.resolve(result.json());
  382. });
  383. return deferred.promise.nodeify(callback);
  384. }
  385. }
  386. };
  387. };
  388. };
  389. },{}],3:[function(require,module,exports){
  390. module.exports = function(subkit, subscriptions, poll){
  391. 'use strict';
  392. return function(store){
  393. var _prepareUrl = function(key){
  394. if(store && !key) return subkit.baseUrl + '/stores/' + store;
  395. if(store && key) return subkit.baseUrl + '/stores/' + store + '/' + key;
  396. if(!store && key && key.indexOf('!') !== -1) {
  397. key = key.replace(/^[a-zA-z0-9]\/\//, '!');
  398. return subkit.baseUrl + '/stores/' + key;
  399. }
  400. if(!store && key) return subkit.baseUrl + '/stores/' + key;
  401. return subkit.baseUrl + '/stores';
  402. };
  403. var _prepareParams = function(url, params){
  404. var queryString = '';
  405. for(var key in params){
  406. if(key === 'where') {
  407. var jsonFilter = JSON.stringify(params[key]);
  408. queryString += '&where=' + jsonFilter;
  409. } else {
  410. queryString += '&' + key + '=' + params[key];
  411. }
  412. }
  413. queryString = queryString.substring(1, queryString.length);
  414. return url + '?' + queryString;
  415. };
  416. var ref = {
  417. key: function(){
  418. return Subkit.UUID();
  419. },
  420. import: function(file, callback){
  421. var deferred = subkit.$q.defer();
  422. var msg = JSON.parse(JSON.stringify(subkit.options));
  423. msg.headers = {
  424. 'Content-Type': 'application/octed-stream',
  425. apiKey: config.apiKey
  426. };
  427. msg.data = file;
  428. var url = subkit.baseUrl + '/manage/import/' + store;
  429. subkit.httpRequest.post(url, msg, function(status, result){
  430. if (status === 0) deferred.reject(new Error('No network connection.'));
  431. else if (status !== 200 && status!==201 && status!==202) deferred.reject(new Error(result.json().message));
  432. else deferred.resolve(result.json());
  433. });
  434. return deferred.promise.nodeify(callback);
  435. },
  436. export: function(callback){
  437. var deferred = subkit.$q.defer();
  438. var url = subkit.baseUrl + '/manage/export/' + store;
  439. subkit.httpRequest.get(url, subkit.options, function(status, result){
  440. if (status === 0) deferred.reject(new Error('No network connection.'));
  441. else if (status !== 200) deferred.reject(new Error(result.json().message));
  442. else deferred.resolve('data:application/octet-stream,' + result.text());
  443. });
  444. return deferred.promise.nodeify(callback);
  445. },
  446. add: function(key, value, callback){
  447. var deferred = subkit.$q.defer();
  448. key = arguments[0];
  449. value = arguments[1];
  450. if(arguments.length === 1 && key instanceof Object){
  451. value = key;
  452. key = Subkit.UUID();
  453. }
  454. var url = _prepareUrl(key);
  455. var msg = JSON.parse(JSON.stringify(subkit.options));
  456. msg.data = value;
  457. subkit.httpRequest.post(url, msg, function(status, result){
  458. if (status === 0) deferred.reject(new Error('No network connection.'));
  459. else if (status!==201) deferred.reject(new Error(result.json().message));
  460. else deferred.resolve(result.json());
  461. });
  462. return deferred.promise.nodeify(callback);
  463. },
  464. set: function(key, value, version, callback){
  465. if(typeof version === 'function') {
  466. callback = version;
  467. version = undefined;
  468. }
  469. var deferred = subkit.$q.defer();
  470. var url = subkit.baseUrl + '/stores/' + store + '/' + key;
  471. var msg = JSON.parse(JSON.stringify(subkit.options));
  472. msg.data = value;
  473. if(version) msg.headers['If-Match'] = version;
  474. subkit.httpRequest.put(url, msg, function(status, result){
  475. if (status === 0) deferred.reject(new Error('No network connection.'));
  476. else if (status !== 200 && status!==202) deferred.reject(new Error(result.json().message));
  477. else deferred.resolve(result.json());
  478. });
  479. return deferred.promise.nodeify(callback);
  480. },
  481. get: function(key, callback){
  482. var deferred = subkit.$q.defer();
  483. subkit.httpRequest.get(_prepareUrl(key), subkit.options, function(status, result){
  484. if (status === 0) deferred.reject(new Error('No network connection.'));
  485. else if (status !== 200) deferred.reject(new Error(result.json().message));
  486. else deferred.resolve(result.json());
  487. });
  488. return deferred.promise.nodeify(callback);
  489. },
  490. find: function(query, callback){
  491. var url = _prepareUrl(query.key);
  492. url = _prepareParams(url, query);
  493. var deferred = subkit.$q.defer();
  494. subkit.httpRequest.get(url, subkit.options, function(status, result){
  495. if (status === 0) deferred.reject(new Error('No network connection.'));
  496. else if (status !== 200) deferred.reject(new Error(result.json().message));
  497. else deferred.resolve(result.json());
  498. });
  499. return deferred.promise.nodeify(callback);
  500. },
  501. remove: function(key, version, callback){
  502. if(typeof version === 'function') {
  503. callback = version;
  504. version = undefined;
  505. }
  506. var deferred = subkit.$q.defer();
  507. var msg = JSON.parse(JSON.stringify(subkit.options));
  508. if(version) msg.headers['If-Match'] = version;
  509. subkit.httpRequest.del(_prepareUrl(key), msg, function(status, result){
  510. if (status === 0) deferred.reject(new Error('No network connection.'));
  511. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  512. else deferred.resolve(result.json());
  513. });
  514. return deferred.promise.nodeify(callback);
  515. },
  516. log: function(callback){
  517. var deferred = subkit.$q.defer();
  518. subkit.httpRequest.get('', subkit.options, function(status, result){
  519. if (status === 0) deferred.reject(new Error('No network connection.'));
  520. else if (status !== 200) deferred.reject(new Error(result.json().message));
  521. else deferred.resolve(result.json());
  522. });
  523. return deferred.promise.nodeify(callback);
  524. },
  525. on: function(callback){
  526. if(subscriptions[store]) subscriptions[store]().abort();
  527. subscriptions[store] = poll(store, callback);
  528. return true;
  529. },
  530. off: function(){
  531. if(subscriptions[store]) subscriptions[store]().abort();
  532. delete subscriptions[store];
  533. return false;
  534. }
  535. };
  536. return ref;
  537. };
  538. };
  539. },{}],4:[function(require,module,exports){
  540. module.exports = function(subkit){
  541. 'use strict';
  542. return function(){
  543. return {
  544. set: function(task, callback){
  545. var deferred = subkit.$q.defer();
  546. var msg = JSON.parse(JSON.stringify(subkit.options));
  547. msg.data = task;
  548. var url = subkit.baseUrl + '/tasks/' + task.name;
  549. subkit.httpRequest.put(url, msg, function(status, result){
  550. if (status === 0) deferred.reject(new Error('No network connection.'));
  551. else if (status !== 200 && status !== 201 && status!==202) deferred.reject(new Error(result.json().message));
  552. else deferred.resolve(result.json());
  553. });
  554. return deferred.promise.nodeify(callback);
  555. },
  556. get: function(taskName, callback){
  557. var deferred = subkit.$q.defer();
  558. var url = subkit.baseUrl + '/tasks/' + taskName;
  559. subkit.httpRequest.get(url, subkit.options, function(status, result){
  560. if (status === 0) deferred.reject(new Error('No network connection.'));
  561. else if (status !== 200) deferred.reject(new Error(result.json().message));
  562. else deferred.resolve(result.json());
  563. });
  564. return deferred.promise.nodeify(callback);
  565. },
  566. remove: function(taskName, callback){
  567. var deferred = subkit.$q.defer();
  568. var url = subkit.baseUrl + '/tasks/' + taskName;
  569. subkit.httpRequest.del(url, subkit.options, function(status, result){
  570. if (status === 0) deferred.reject(new Error('No network connection.'));
  571. else if (status !== 200 && status!==202 && status!==204) deferred.reject(new Error(result.json().message));
  572. else deferred.resolve(result.json());
  573. });
  574. return deferred.promise.nodeify(callback);
  575. },
  576. list: function(callback){
  577. var deferred = subkit.$q.defer();
  578. var url = subkit.baseUrl + '/tasks';
  579. subkit.httpRequest.get(url, subkit.options, function(status, result){
  580. if (status === 0) deferred.reject(new Error('No network connection.'));
  581. else if (status !== 200) deferred.reject(new Error(result.json().message));
  582. else deferred.resolve(result.json());
  583. });
  584. return deferred.promise.nodeify(callback);
  585. },
  586. runDebug: function(taskName, value, callback){
  587. var deferred = subkit.$q.defer();
  588. var url = subkit.baseUrl + '/tasks/api/' + taskName;
  589. var msg = JSON.parse(JSON.stringify(subkit.options));
  590. msg.data = value;
  591. subkit.httpRequest.get(url, msg, function(status, result){
  592. if (status === 0) deferred.reject(new Error('No network connection.'));
  593. else if (status !== 200) deferred.reject(new Error(result.json().message));
  594. else deferred.resolve({
  595. result: result.json(),
  596. raw: result.text(),
  597. headers: result.headers(),
  598. log: result.log()
  599. });
  600. });
  601. return deferred.promise.nodeify(callback);
  602. },
  603. run: function(taskName, value, callback){
  604. var deferred = subkit.$q.defer();
  605. var url = subkit.baseUrl + '/tasks/action/run/' + taskName;
  606. var msg = JSON.parse(JSON.stringify(subkit.options));
  607. msg.data = value;
  608. subkit.httpRequest.get(url, msg, function(status, result){
  609. if (status === 0) deferred.reject(new Error('No network connection.'));
  610. else if (status !== 200) deferred.reject(new Error(result.json().message));
  611. else deferred.resolve(result.json());
  612. });
  613. return deferred.promise.nodeify(callback);
  614. }
  615. };
  616. };
  617. };
  618. },{}],5:[function(require,module,exports){
  619. /** @module Subkit */
  620. /**
  621. * Subkit
  622. * @param {object} config - A Subkit configuration
  623. */
  624. var Subkit = function (config){
  625. 'use strict';
  626. var self = this;
  627. var subscriptions = {};
  628. self.clientId = config.clientId || initClientId();
  629. self.baseUrl = config.baseUrl || ((window.location.origin.indexOf('http') !== -1) ? window.location.origin : 'https://localhost:8080');
  630. self.options = {
  631. apiKey: config.apiKey || '',
  632. username: config.username || '',
  633. password: config.password || '',
  634. headers : {
  635. 'Content-Type': 'application/json'
  636. }
  637. };
  638. self.httpRequest = {
  639. authBasic: function (username, password) {
  640. self.httpRequest.headers({});
  641. ajax.headers['Authorization'] = 'Basic ' + base64(username + ':' + password);
  642. },
  643. connect: function (url, options, callback) {
  644. return ajax('CONNECT', url, options, callback);
  645. },
  646. del: function (url, options, callback) {
  647. return ajax('DELETE', url, options, callback);
  648. },
  649. get: function (url, options, callback) {
  650. return ajax('GET', url, options, callback);
  651. },
  652. head: function (url, options, callback) {
  653. return ajax('HEAD', url, options, callback);
  654. },
  655. headers: function (headers) {
  656. ajax.headers = headers || {};
  657. },
  658. isAllowed: function (url, verb, callback) {
  659. this.options(url, function (status, data) {
  660. callback(data.text().indexOf(verb) !== -1);
  661. });
  662. },
  663. options: function (url, options, callback) {
  664. return ajax('OPTIONS', url, options, callback);
  665. },
  666. patch: function (url, options, callback) {
  667. return ajax('PATCH', url, options, callback);
  668. },
  669. post: function (url, options, callback) {
  670. return ajax('POST', url, options, callback);
  671. },
  672. put: function (url, options, callback) {
  673. return ajax('PUT', url, options, callback);
  674. },
  675. trace: function (url, options, callback) {
  676. return ajax('TRACE', url, options, callback);
  677. }
  678. };
  679. self.$q = require('q');
  680. self.manage = require('./lib/manage')(self);
  681. self.tasks = require('./lib/tasks')(self);
  682. self.stores = require('./lib/stores')(self, subscriptions, poll);
  683. self.events = require('./lib/events')(self, subscriptions, poll);
  684. function getXhr(callback) {
  685. if (window.XMLHttpRequest) {
  686. return callback(null, new XMLHttpRequest());
  687. } else if (window.ActiveXObject) {
  688. try {
  689. return callback(null, new ActiveXObject('Msxml2.XMLHTTP'));
  690. } catch (e) {
  691. return callback(null, new ActiveXObject('Microsoft.XMLHTTP'));
  692. }
  693. }
  694. return callback(new Error());
  695. }
  696. function encodeUsingUrlEncoding(data) {
  697. if(typeof data === 'string') {
  698. return data;
  699. }
  700. var result = [];
  701. for(var dataItem in data) {
  702. if(data.hasOwnProperty(dataItem)) {
  703. result.push(encodeURIComponent(dataItem) + '=' + encodeURIComponent(data[dataItem]));
  704. }
  705. }
  706. return result.join('&');
  707. }
  708. function utf8(text) {
  709. text = text.replace(/\r\n/g, '\n');
  710. var result = '';
  711. for(var i = 0; i < text.length; i++) {
  712. var c = text.charCodeAt(i);
  713. if(c < 128) {
  714. result += String.fromCharCode(c);
  715. } else if((c > 127) && (c < 2048)) {
  716. result += String.fromCharCode((c >> 6) | 192);
  717. result += String.fromCharCode((c & 63) | 128);
  718. } else {
  719. result += String.fromCharCode((c >> 12) | 224);
  720. result += String.fromCharCode(((c >> 6) & 63) | 128);
  721. result += String.fromCharCode((c & 63) | 128);
  722. }
  723. }
  724. return result;
  725. }
  726. function base64(text) {
  727. var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  728. text = utf8(text);
  729. var result = '',
  730. chr1, chr2, chr3,
  731. enc1, enc2, enc3, enc4,
  732. i = 0;
  733. do {
  734. chr1 = text.charCodeAt(i++);
  735. chr2 = text.charCodeAt(i++);
  736. chr3 = text.charCodeAt(i++);
  737. enc1 = chr1 >> 2;
  738. enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  739. enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  740. enc4 = chr3 & 63;
  741. if(isNaN(chr2)) {
  742. enc3 = enc4 = 64;
  743. } else if(isNaN(chr3)) {
  744. enc4 = 64;
  745. }
  746. result +=
  747. keyStr.charAt(enc1) +
  748. keyStr.charAt(enc2) +
  749. keyStr.charAt(enc3) +
  750. keyStr.charAt(enc4);
  751. chr1 = chr2 = chr3 = '';
  752. enc1 = enc2 = enc3 = enc4 = '';
  753. } while(i < text.length);
  754. return result;
  755. }
  756. function mergeHeaders() {
  757. var result = arguments[0];
  758. for(var i = 1; i < arguments.length; i++) {
  759. var currentHeaders = arguments[i];
  760. for(var header in currentHeaders) {
  761. if(currentHeaders.hasOwnProperty(header)) {
  762. result[header] = currentHeaders[header];
  763. }
  764. }
  765. }
  766. return result;
  767. }
  768. function ajax(method, url, options, callback) {
  769. if(typeof options === 'function') {
  770. callback = options;
  771. options = {};
  772. }
  773. options.cache = options.cache || true;
  774. options.headers = options.headers || {};
  775. options.jsonp = options.jsonp || false;
  776. var headers = mergeHeaders({
  777. 'Accept': '*/*',
  778. 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
  779. 'X-Auth-Token': options.apiKey
  780. }, ajax.headers, options.headers);
  781. var payload;
  782. if(options.data) {
  783. if ((method === 'GET') && (headers['Content-Type'] === 'application/json')) {
  784. payload = encodeUsingUrlEncoding(options.data);
  785. }
  786. else if (headers['Content-Type'] === 'application/json') {
  787. payload = JSON.stringify(options.data);
  788. }
  789. else if(headers['Content-Type'].indexOf('application/octed-stream') !== -1){
  790. payload = options.data;
  791. }
  792. else {
  793. payload = encodeUsingUrlEncoding(options.data);
  794. }
  795. }
  796. if(method === 'GET') {
  797. var queryString = [];
  798. if(payload) {
  799. queryString.push(payload);
  800. payload = null;
  801. }
  802. if(!options.cache) {
  803. queryString.push('_=' + (new Date()).getTime());
  804. }
  805. if(options.jsonp) {
  806. queryString.push('callback=' + options.jsonp);
  807. queryString.push('jsonp=' + options.jsonp);
  808. }
  809. queryString = '?' + queryString.join('&');
  810. url += queryString !== '?' ? queryString : '';
  811. if(options.jsonp) {
  812. var head = document.getElementsByTagName('head')[0];
  813. var script = document.createElement('script');
  814. script.type = 'text/javascript';
  815. script.src = url;
  816. head.appendChild(script);
  817. return;
  818. }
  819. }
  820. var xhrRef = null;
  821. getXhr(function (err, xhr) {
  822. xhrRef = xhr;
  823. if(err) return callback(err);
  824. xhr.open(method, url, options.async || true);
  825. for(var header in headers) {
  826. if(headers.hasOwnProperty(header)) {
  827. xhr.setRequestHeader(header, headers[header]);
  828. }
  829. }
  830. xhr.timeout = 240000;
  831. xhr.ontimeout = function (){
  832. callback(0, {
  833. text: function () {
  834. return 'Connection timeout';
  835. },
  836. json: function(){
  837. return {message: 'Connection timeout'}
  838. }
  839. });
  840. }
  841. xhr.onerror = function(){
  842. callback(xhr.status, {
  843. text: function () {
  844. return xhr.statusText;
  845. },
  846. json: function(){
  847. return {message: xhr.statusText}
  848. }
  849. });
  850. };
  851. xhr.onreadystatechange = function () {
  852. if(xhr.readyState === 4 && xhr.status !== 0) {
  853. if(!callback) return;
  854. var data = xhr.responseText || '';
  855. callback(xhr.status, {
  856. text: function () {
  857. return data;
  858. },
  859. json: function () {
  860. if(data) return JSON.parse(data);
  861. return {};
  862. },
  863. headers: function(){
  864. return xhr.getAllResponseHeaders();
  865. },
  866. log: function(){
  867. return xhr.getResponseHeader('subkit-log');
  868. }
  869. });
  870. }
  871. };
  872. xhr.send(payload);
  873. });
  874. return xhrRef;
  875. }
  876. function initClientId(){
  877. var clientId = window.sessionStorage.getItem('clientId');
  878. if(!clientId) {
  879. clientId = Subkit.UUID();
  880. window.sessionStorage.setItem('clientId', clientId);
  881. }
  882. return clientId;
  883. }
  884. function poll(stream, callback) {
  885. var subscribeUrl = self.baseUrl + '/events/bind/' + stream;
  886. var request = null;
  887. var count = 1;
  888. (function _pollRef(){
  889. request = self.httpRequest.get(subscribeUrl, self.options, function(status, result){
  890. if(status !== 200) {
  891. if(subscriptions[stream]){
  892. callback({message: 'subscription error - retry'});
  893. setTimeout(function(){_pollRef(stream, callback);},300*count++);
  894. }
  895. }else{
  896. count = 1;
  897. result.json().forEach(function(item){
  898. callback(null, item);
  899. });
  900. if(subscriptions[stream]) _pollRef(stream, callback);
  901. }
  902. });
  903. })();
  904. return function(){
  905. return request;
  906. };
  907. }
  908. };
  909. Subkit.UUID = function () {
  910. // http://www.ietf.org/rfc/rfc4122.txt
  911. var s = [];
  912. var hexDigits = '0123456789abcdef';
  913. for (var i = 0; i < 36; i++) {
  914. s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
  915. }
  916. s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010
  917. s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
  918. s[8] = s[13] = s[18] = s[23] = '-';
  919. var uuid = s.join('');
  920. return uuid;
  921. };
  922. module.exports = Subkit
  923. },{"./lib/events":1,"./lib/manage":2,"./lib/stores":3,"./lib/tasks":4,"q":7}],6:[function(require,module,exports){
  924. // shim for using process in browser
  925. var process = module.exports = {};
  926. process.nextTick = (function () {
  927. var canSetImmediate = typeof window !== 'undefined'
  928. && window.setImmediate;
  929. var canPost = typeof window !== 'undefined'
  930. && window.postMessage && window.addEventListener
  931. ;
  932. if (canSetImmediate) {
  933. return function (f) { return window.setImmediate(f) };
  934. }
  935. if (canPost) {
  936. var queue = [];
  937. window.addEventListener('message', function (ev) {
  938. var source = ev.source;
  939. if ((source === window || source === null) && ev.data === 'process-tick') {
  940. ev.stopPropagation();
  941. if (queue.length > 0) {
  942. var fn = queue.shift();
  943. fn();
  944. }
  945. }
  946. }, true);
  947. return function nextTick(fn) {
  948. queue.push(fn);
  949. window.postMessage('process-tick', '*');
  950. };
  951. }
  952. return function nextTick(fn) {
  953. setTimeout(fn, 0);
  954. };
  955. })();
  956. process.title = 'browser';
  957. process.browser = true;
  958. process.env = {};
  959. process.argv = [];
  960. process.binding = function (name) {
  961. throw new Error('process.binding is not supported');
  962. }
  963. // TODO(shtylman)
  964. process.cwd = function () { return '/' };
  965. process.chdir = function (dir) {
  966. throw new Error('process.chdir is not supported');
  967. };
  968. },{}],7:[function(require,module,exports){
  969. var process=require("__browserify_process");// vim:ts=4:sts=4:sw=4:
  970. /*!
  971. *
  972. * Copyright 2009-2012 Kris Kowal under the terms of the MIT
  973. * license found at http://github.com/kriskowal/q/raw/master/LICENSE
  974. *
  975. * With parts by Tyler Close
  976. * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
  977. * at http://www.opensource.org/licenses/mit-license.html
  978. * Forked at ref_send.js version: 2009-05-11
  979. *
  980. * With parts by Mark Miller
  981. * Copyright (C) 2011 Google Inc.
  982. *
  983. * Licensed under the Apache License, Version 2.0 (the "License");
  984. * you may not use this file except in compliance with the License.
  985. * You may obtain a copy of the License at
  986. *
  987. * http://www.apache.org/licenses/LICENSE-2.0
  988. *
  989. * Unless required by applicable law or agreed to in writing, software
  990. * distributed under the License is distributed on an "AS IS" BASIS,
  991. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  992. * See the License for the specific language governing permissions and
  993. * limitations under the License.
  994. *
  995. */
  996. (function (definition) {
  997. "use strict";
  998. // This file will function properly as a <script> tag, or a module
  999. // using CommonJS and NodeJS or RequireJS module formats. In
  1000. // Common/Node/RequireJS, the module exports the Q API and when
  1001. // executed as a simple <script>, it creates a Q global instead.
  1002. // Montage Require
  1003. if (typeof bootstrap === "function") {
  1004. bootstrap("promise", definition);
  1005. // CommonJS
  1006. } else if (typeof exports === "object" && typeof module === "object") {
  1007. module.exports = definition();
  1008. // RequireJS
  1009. } else if (typeof define === "function" && define.amd) {
  1010. define(definition);
  1011. // SES (Secure EcmaScript)
  1012. } else if (typeof ses !== "undefined") {
  1013. if (!ses.ok()) {
  1014. return;
  1015. } else {
  1016. ses.makeQ = definition;
  1017. }
  1018. // <script>
  1019. } else if (typeof self !== "undefined") {
  1020. self.Q = definition();
  1021. } else {
  1022. throw new Error("This environment was not anticipated by Q. Please file a bug.");
  1023. }
  1024. })(function () {
  1025. "use strict";
  1026. var hasStacks = false;
  1027. try {
  1028. throw new Error();
  1029. } catch (e) {
  1030. hasStacks = !!e.stack;
  1031. }
  1032. // All code after this point will be filtered from stack traces reported
  1033. // by Q.
  1034. var qStartingLine = captureLine();
  1035. var qFileName;
  1036. // shims
  1037. // used for fallback in "allResolved"
  1038. var noop = function () {};
  1039. // Use the fastest possible means to execute a task in a future turn
  1040. // of the event loop.
  1041. var nextTick =(function () {
  1042. // linked list of tasks (single, with head node)
  1043. var head = {task: void 0, next: null};
  1044. var tail = head;
  1045. var flushing = false;
  1046. var requestTick = void 0;
  1047. var isNodeJS = false;
  1048. function flush() {
  1049. /* jshint loopfunc: true */
  1050. while (head.next) {
  1051. head = head.next;
  1052. var task = head.task;
  1053. head.task = void 0;
  1054. var domain = head.domain;
  1055. if (domain) {
  1056. head.domain = void 0;
  1057. domain.enter();
  1058. }
  1059. try {
  1060. task();
  1061. } catch (e) {
  1062. if (isNodeJS) {
  1063. // In node, uncaught exceptions are considered fatal errors.
  1064. // Re-throw them synchronously to interrupt flushing!
  1065. // Ensure continuation if the uncaught exception is suppressed
  1066. // listening "uncaughtException" events (as domains does).
  1067. // Continue in next event to avoid tick recursion.
  1068. if (domain) {
  1069. domain.exit();
  1070. }
  1071. setTimeout(flush, 0);
  1072. if (domain) {
  1073. domain.enter();
  1074. }
  1075. throw e;
  1076. } else {
  1077. // In browsers, uncaught exceptions are not fatal.
  1078. // Re-throw them asynchronously to avoid slow-downs.
  1079. setTimeout(function() {
  1080. throw e;
  1081. }, 0);
  1082. }
  1083. }
  1084. if (domain) {
  1085. domain.exit();
  1086. }
  1087. }
  1088. flushing = false;
  1089. }
  1090. nextTick = function (task) {
  1091. tail = tail.next = {
  1092. task: task,
  1093. domain: isNodeJS && process.domain,
  1094. next: null
  1095. };
  1096. if (!flushing) {
  1097. flushing = true;
  1098. requestTick();
  1099. }
  1100. };
  1101. if (typeof process !== "undefined" && process.nextTick) {
  1102. // Node.js before 0.9. Note that some fake-Node environments, like the
  1103. // Mocha test runner, introduce a `process` global without a `nextTick`.
  1104. isNodeJS = true;
  1105. requestTick = function () {
  1106. process.nextTick(flush);
  1107. };
  1108. } else if (typeof setImmediate === "function") {
  1109. // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
  1110. if (typeof window !== "undefined") {
  1111. requestTick = setImmediate.bind(window, flush);
  1112. } else {
  1113. requestTick = function () {
  1114. setImmediate(flush);
  1115. };
  1116. }
  1117. } else if (typeof MessageChannel !== "undefined") {
  1118. // modern browsers
  1119. // http://www.nonblocking.io/2011/06/windownexttick.html
  1120. var channel = new MessageChannel();
  1121. // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
  1122. // working message ports the first time a page loads.
  1123. channel.port1.onmessage = function () {
  1124. requestTick = requestPortTick;
  1125. channel.port1.onmessage = flush;
  1126. flush();
  1127. };
  1128. var requestPortTick = function () {
  1129. // Opera requires us to provide a message payload, regardless of
  1130. // whether we use it.
  1131. channel.port2.postMessage(0);
  1132. };
  1133. requestTick = function () {
  1134. setTimeout(flush, 0);
  1135. requestPortTick();
  1136. };
  1137. } else {
  1138. // old browsers
  1139. requestTick = function () {
  1140. setTimeout(flush, 0);
  1141. };
  1142. }
  1143. return nextTick;
  1144. })();
  1145. // Attempt to make generics safe in the face of downstream
  1146. // modifications.
  1147. // There is no situation where this is necessary.
  1148. // If you need a security guarantee, these primordials need to be
  1149. // deeply frozen anyway, and if you don’t need a security guarantee,
  1150. // this is just plain paranoid.
  1151. // However, this **might** have the nice side-effect of reducing the size of
  1152. // the minified code by reducing x.call() to merely x()
  1153. // See Mark Miller’s explanation of what this does.
  1154. // http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
  1155. var call = Function.call;
  1156. function uncurryThis(f) {
  1157. return function () {
  1158. return call.apply(f, arguments);
  1159. };
  1160. }
  1161. // This is equivalent, but slower:
  1162. // uncurryThis = Function_bind.bind(Function_bind.call);
  1163. // http://jsperf.com/uncurrythis
  1164. var array_slice = uncurryThis(Array.prototype.slice);
  1165. var array_reduce = uncurryThis(
  1166. Array.prototype.reduce || function (callback, basis) {
  1167. var index = 0,
  1168. length = this.length;
  1169. // concerning the initial value, if one is not provided
  1170. if (arguments.length === 1) {
  1171. // seek to the first value in the array, accounting
  1172. // for the possibility that is is a sparse array
  1173. do {
  1174. if (index in this) {
  1175. basis = this[index++];
  1176. break;
  1177. }
  1178. if (++index >= length) {
  1179. throw new TypeError();
  1180. }
  1181. } while (1);
  1182. }
  1183. // reduce
  1184. for (; index < length; index++) {
  1185. // account for the possibility that the array is sparse
  1186. if (index in this) {
  1187. basis = callback(basis, this[index], index);
  1188. }
  1189. }
  1190. return basis;
  1191. }
  1192. );
  1193. var array_indexOf = uncurryThis(
  1194. Array.prototype.indexOf || function (value) {
  1195. // not a very good shim, but good enough for our one use of it
  1196. for (var i = 0; i < this.length; i++) {
  1197. if (this[i] === value) {
  1198. return i;
  1199. }
  1200. }
  1201. return -1;
  1202. }
  1203. );
  1204. var array_map = uncurryThis(
  1205. Array.prototype.map || function (callback, thisp) {
  1206. var self = this;
  1207. var collect = [];
  1208. array_reduce(self, function (undefined, value, index) {
  1209. collect.push(callback.call(thisp, value, index, self));
  1210. }, void 0);
  1211. return collect;
  1212. }
  1213. );
  1214. var object_create = Object.create || function (prototype) {
  1215. function Type() { }
  1216. Type.prototype = prototype;
  1217. return new Type();
  1218. };
  1219. var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
  1220. var object_keys = Object.keys || function (object) {
  1221. var keys = [];
  1222. for (var key in object) {
  1223. if (object_hasOwnProperty(object, key)) {
  1224. keys.push(key);
  1225. }
  1226. }
  1227. return keys;
  1228. };
  1229. var object_toString = uncurryThis(Object.prototype.toString);
  1230. function isObject(value) {
  1231. return value === Object(value);
  1232. }
  1233. // generator related shims
  1234. // FIXME: Remove this function once ES6 generators are in SpiderMonkey.
  1235. function isStopIteration(exception) {
  1236. return (
  1237. object_toString(exception) === "[object StopIteration]" ||
  1238. exception instanceof QReturnValue
  1239. );
  1240. }
  1241. // FIXME: Remove this helper and Q.return once ES6 generators are in
  1242. // SpiderMonkey.
  1243. var QReturnValue;
  1244. if (typeof ReturnValue !== "undefined") {
  1245. QReturnValue = ReturnValue;
  1246. } else {
  1247. QReturnValue = function (value) {
  1248. this.value = value;
  1249. };
  1250. }
  1251. // long stack traces
  1252. var STACK_JUMP_SEPARATOR = "From previous event:";
  1253. function makeStackTraceLong(error, promise) {
  1254. // If possible, transform the error stack trace by removing Node and Q
  1255. // cruft, then concatenating with the stack trace of `promise`. See #57.
  1256. if (hasStacks &&
  1257. promise.stack &&
  1258. typeof error === "object" &&
  1259. error !== null &&
  1260. error.stack &&
  1261. error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
  1262. ) {
  1263. var stacks = [];
  1264. for (var p = promise; !!p; p = p.source) {
  1265. if (p.stack) {
  1266. stacks.unshift(p.stack);
  1267. }
  1268. }
  1269. stacks.unshift(error.stack);
  1270. var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
  1271. error.stack = filterStackString(concatedStacks);
  1272. }
  1273. }
  1274. function filterStackString(stackString) {
  1275. var lines = stackString.split("\n");
  1276. var desiredLines = [];
  1277. for (var i = 0; i < lines.length; ++i) {
  1278. var line = lines[i];
  1279. if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
  1280. desiredLines.push(line);
  1281. }
  1282. }
  1283. return desiredLines.join("\n");
  1284. }
  1285. function isNodeFrame(stackLine) {
  1286. return stackLine.indexOf("(module.js:") !== -1 ||
  1287. stackLine.indexOf("(node.js:") !== -1;
  1288. }
  1289. function getFileNameAndLineNumber(stackLine) {
  1290. // Named functions: "at functionName (filename:lineNumber:columnNumber)"
  1291. // In IE10 function name can have spaces ("Anonymous function") O_