diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-22 01:43:28 +0400 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-22 01:43:28 +0400 |
commit | 0fa67552247b2d29a6ca438c2605b8db2bbdbab7 (patch) | |
tree | 8109135e2fc141a324e8f21c66243ee4277b3b7c | |
parent | d3a774b2bd79654360a3ef12618102abf85a2ce3 (diff) |
es6 all the things
34 files changed, 2681 insertions, 874 deletions
diff --git a/js/.jshintrc b/js/.jshintrc new file mode 100644 index 000000000..cd85aa807 --- /dev/null +++ b/js/.jshintrc @@ -0,0 +1,43 @@ +{ + "esnext": true, + "bitwise": false, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "forin": false, + "immed": true, + "indent": 4, + "latedef": true, + "newcap": true, + "noarg": true, + "noempty": true, + "nonew": true, + "plusplus": true, + "quotmark": "single", + "undef": false, + "unused": true, + "strict": true, + "maxparams": false, + "maxdepth": 3, + "maxlen": 80, + "browser": true, + "devel": true, + "jquery": true, + "globals": { + "angular": true, + "app": true, + "OC": true, + "csrfToken": true, + "inject": true, + "module": true, + "protractor": true, + "browser": true, + "By": true, + "jasmine": true, + "it": true, + "describe": true, + "beforeEach": true, + "expect": true, + "exports": true + } +} diff --git a/js/Gruntfile.js b/js/Gruntfile.js index 1baf2d7d1..e40900f5a 100644 --- a/js/Gruntfile.js +++ b/js/Gruntfile.js @@ -7,36 +7,6 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2012, 2014 */ - -var globals = [ - // libs - '$', - 'jQuery', - 'angular', - // app - 'app', - // ownCloud - 'OC', - 'oc_requesttoken', - // angular - 'inject', - 'module', - - // protractor - 'protractor', - 'browser', - 'By', - // jasmine - 'jasmine', - 'it', - 'describe', - 'beforeEach', - 'expect', - // js - 'console', - 'exports' -]; - module.exports = function (grunt) { 'use strict'; @@ -44,11 +14,12 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.loadNpmTasks('grunt-jslint'); + grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-phpunit'); grunt.loadNpmTasks('grunt-wrap'); grunt.loadNpmTasks('grunt-karma'); grunt.loadNpmTasks('grunt-ngmin'); + grunt.loadNpmTasks('grunt-traceur'); grunt.loadNpmTasks('grunt-protractor-runner'); grunt.loadNpmTasks('grunt-protractor-webdriver'); @@ -72,7 +43,6 @@ module.exports = function (grunt) { 'filter/**/*.js', 'service/**/*.js', 'gui/**/*.js', - 'model/**/*.js', 'directive/**/*.js' ], dest: '<%= meta.production %>app.js' @@ -84,37 +54,50 @@ module.exports = function (grunt) { dest: '<%= meta.production %>app.js' } }, + traceur: { + app: { + files: { + '<%= meta.production %>app.js': ['<%= meta.production %>app.js'] + } + }, + options: { + blockBinding: true, + sourceMap: false, + experimental: true, + modules: 'inline' + } + }, wrap: { basic: { src: ['<%= meta.production %>app.js'], dest: '<%= meta.production %>app.js', options: { wrapper: [ - '(function(angular, $, OC, oc_requesttoken, undefined){\n\n\'use strict\';\n\n', - '\n})(angular, jQuery, OC, oc_requesttoken);' + '(function(window, document, angular, $, OC, ' + + 'csrfToken, undefined){\n\n\'use strict\';\n\n', + + '\n})(window, document, angular, jQuery, OC, ' + + 'oc_requesttoken);' ] } } }, - jslint: { - browser: { + jshint: { + app: { src: [ - 'app/**/*.js', + 'app/Config.js', + 'app/Run.js', 'filter/**/*.js', 'service/**/*.js', 'model/**/*.js', 'controller/**/*.js', 'directive/**/*.js', 'tests/**/*.js', - 'gui/**/*.js', - 'Gruntfile.js', - 'karma.conf.js', - 'protractor*conf.js' - ], - directives: { - browser: true, - predef: globals - } + 'gui/**/*.js' + ] + }, + options: { + jshintrc: true } }, watch: { @@ -146,7 +129,6 @@ module.exports = function (grunt) { karma: { unit: { configFile: 'karma.conf.js', - browsers: ['PhantomJS'], autoWatch: true }, continuous: { @@ -199,7 +181,7 @@ module.exports = function (grunt) { }); // make tasks available under simpler commands - grunt.registerTask('default', ['jslint', 'concat', 'ngmin', 'wrap']); + grunt.registerTask('default', ['jshint', 'concat', 'wrap', 'traceur', 'ngmin']); grunt.registerTask('dev', ['watch:concat']); grunt.registerTask('test', ['karma:unit']); grunt.registerTask('phpunit', ['watch:phpunit']); diff --git a/js/app/App.js b/js/app/App.js index 947a68a2e..3dbc907da 100644 --- a/js/app/App.js +++ b/js/app/App.js @@ -7,4 +7,4 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -var app = angular.module('News', ['ngRoute', 'ngSanitize', 'ngAnimate']);
\ No newline at end of file +let app = angular.module('News', ['ngRoute', 'ngSanitize', 'ngAnimate']);
\ No newline at end of file diff --git a/js/app/Config.js b/js/app/Config.js index 5581af0e4..bd38f897b 100644 --- a/js/app/Config.js +++ b/js/app/Config.js @@ -9,10 +9,8 @@ */ app.config(function ($routeProvider, $provide, $httpProvider) { 'use strict'; - var getResolve, - feedType; - feedType = { + let feedType = { FEED: 0, FOLDER: 1, STARRED: 2, @@ -21,17 +19,17 @@ app.config(function ($routeProvider, $provide, $httpProvider) { }; // constants - $provide.constant('REFRESH_RATE', 60); // seconds, how often feeds and folders shoudl be refreshed + $provide.constant('REFRESH_RATE', 60); // seconds $provide.constant('ITEM_BATCH_SIZE', 50); // how many items to autopage by $provide.constant('BASE_URL', OC.generateUrl('/apps/news')); $provide.constant('FEED_TYPE', feedType); // make sure that the CSRF header is only sent to the ownCloud domain - $provide.factory('CSRFInterceptor', function ($q, BASE_URL) { + $provide.factory('CSRFInterceptor', ($q, BASE_URL) => { return { - request: function (config) { + request: (config) => { if (config.url.indexOf(BASE_URL) === 0) { - config.headers.requesttoken = oc_requesttoken; + config.headers.requesttoken = csrfToken; } return config || $q.when(config); @@ -41,7 +39,7 @@ app.config(function ($routeProvider, $provide, $httpProvider) { $httpProvider.interceptors.push('CSRFInterceptor'); // routing - getResolve = function (type) { + let getResolve = (type) => { return { // request to items also returns feeds data: [ @@ -50,12 +48,9 @@ app.config(function ($routeProvider, $provide, $httpProvider) { '$q', 'BASE_URL', 'ITEM_BATCH_SIZE', - function ($http, $route, $q, BASE_URL, ITEM_BATCH_SIZE) { + ($http, $route, $q, BASE_URL, ITEM_BATCH_SIZE) => { - var parameters, - deferred; - - parameters = { + let parameters = { type: type, limit: ITEM_BATCH_SIZE }; @@ -64,13 +59,13 @@ app.config(function ($routeProvider, $provide, $httpProvider) { parameters.id = $route.current.params.id; } - deferred = $q.defer(); + let deferred = $q.defer(); $http({ url: BASE_URL + '/items', method: 'GET', params: parameters - }).success(function (data) { + }).success((data) => { deferred.resolve(data); }); diff --git a/js/app/Run.js b/js/app/Run.js index c60150fbe..743f83c9b 100644 --- a/js/app/Run.js +++ b/js/app/Run.js @@ -7,36 +7,34 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.run(function ($rootScope, $location, $http, $q, $interval, Loading, - ItemResource, FeedResource, FolderResource, Settings, - Publisher, BASE_URL, FEED_TYPE, REFRESH_RATE) { +app.run(($rootScope, $location, $http, $q, $interval, Loading, ItemResource, + FeedResource, FolderResource, Settings, Publisher, BASE_URL, FEED_TYPE, + REFRESH_RATE) => { 'use strict'; + console.log($location); + // show Loading screen Loading.setLoading('global', true); // listen to keys in returned queries to automatically distribute the // incoming values to models - Publisher.subscribe(ItemResource).toChannels('items', 'newestItemId', 'starred'); + Publisher.subscribe(ItemResource).toChannels('items', 'newestItemId', + 'starred'); Publisher.subscribe(FolderResource).toChannels('folders'); Publisher.subscribe(FeedResource).toChannels('feeds'); Publisher.subscribe(Settings).toChannels('settings'); // load feeds, settings and last read feed - var settingsDeferred, - activeFeedDeferred, - folderDeferred, - feedDeferred; - - settingsDeferred = $q.defer(); - $http.get(BASE_URL + '/settings').success(function (data) { + let settingsDeferred = $q.defer(); + $http.get(BASE_URL + '/settings').success((data) => { Publisher.publishAll(data); settingsDeferred.resolve(); }); - activeFeedDeferred = $q.defer(); - $http.get(BASE_URL + '/feeds/active').success(function (data) { - var url; + let activeFeedDeferred = $q.defer(); + $http.get(BASE_URL + '/feeds/active').success((data) => { + let url; switch (data.type) { @@ -60,14 +58,14 @@ app.run(function ($rootScope, $location, $http, $q, $interval, Loading, activeFeedDeferred.resolve(); }); - folderDeferred = $q.defer(); - $http.get(BASE_URL + '/folders').success(function (data) { + let folderDeferred = $q.defer(); + $http.get(BASE_URL + '/folders').success((data) => { Publisher.publishAll(data); folderDeferred.resolve(); }); - feedDeferred = $q.defer(); - $http.get(BASE_URL + '/feeds').success(function (data) { + let feedDeferred = $q.defer(); + $http.get(BASE_URL + '/feeds').success((data) => { Publisher.publishAll(data); feedDeferred.resolve(); }); @@ -81,27 +79,27 @@ app.run(function ($rootScope, $location, $http, $q, $interval, Loading, folderDeferred.promise ] ) - .then(function () { + .then(() => { Loading.setLoading('global', false); }); // refresh feeds and folders - $interval(function () { + $interval(() => { $http.get(BASE_URL + '/feeds'); $http.get(BASE_URL + '/folders'); }, REFRESH_RATE * 1000); - $rootScope.$on('$routeChangeStart', function () { + $rootScope.$on('$routeChangeStart', () => { Loading.setLoading('content', true); }); - $rootScope.$on('$routeChangeSuccess', function () { + $rootScope.$on('$routeChangeSuccess', () => { Loading.setLoading('content', false); }); // in case of wrong id etc show all items - $rootScope.$on('$routeChangeError', function () { + $rootScope.$on('$routeChangeError', () => { $location.path('/items'); }); });
\ No newline at end of file diff --git a/js/bower.json b/js/bower.json index 0ed1b0cc4..f48e00076 100644 --- a/js/bower.json +++ b/js/bower.json @@ -30,6 +30,7 @@ "angular-sanitize": "~1.2.16", "jquery": "~2.1.1", "momentjs": "~2.6.0", - "angular-animate": "~1.2.16" + "angular-animate": "~1.2.16", + "traceur-runtime": "~0.0.41" } } diff --git a/js/build/app.js b/js/build/app.js index cad42c8ae..7e68fc320 100644 --- a/js/build/app.js +++ b/js/build/app.js @@ -1,521 +1,569 @@ -(function(angular, $, OC, oc_requesttoken, undefined){ - -'use strict'; - - -var app = angular.module('News', [ - 'ngRoute', - 'ngSanitize', - 'ngAnimate' - ]); -app.config([ - '$routeProvider', - '$provide', - '$httpProvider', - function ($routeProvider, $provide, $httpProvider) { +var $__build_47_app__ = function () { 'use strict'; - var getResolve, feedType; - feedType = { - FEED: 0, - FOLDER: 1, - STARRED: 2, - SUBSCRIPTIONS: 3, - SHARED: 4 - }; - // constants - $provide.constant('REFRESH_RATE', 60); - // seconds, how often feeds and folders shoudl be refreshed - $provide.constant('ITEM_BATCH_SIZE', 50); - // how many items to autopage by - $provide.constant('BASE_URL', OC.generateUrl('/apps/news')); - $provide.constant('FEED_TYPE', feedType); - // make sure that the CSRF header is only sent to the ownCloud domain - $provide.factory('CSRFInterceptor', function ($q, BASE_URL) { - return { - request: function (config) { - if (config.url.indexOf(BASE_URL) === 0) { - config.headers.requesttoken = oc_requesttoken; - } - return config || $q.when(config); - } - }; - }); - $httpProvider.interceptors.push('CSRFInterceptor'); - // routing - getResolve = function (type) { - return { - data: [ - '$http', - '$route', - '$q', - 'BASE_URL', - 'ITEM_BATCH_SIZE', - function ($http, $route, $q, BASE_URL, ITEM_BATCH_SIZE) { - var parameters, deferred; - parameters = { - type: type, - limit: ITEM_BATCH_SIZE + var __moduleName = 'build/app'; + (function (window, document, angular, $, OC, csrfToken, undefined) { + 'use strict'; + var app = angular.module('News', [ + 'ngRoute', + 'ngSanitize', + 'ngAnimate' + ]); + app.config([ + '$routeProvider', + '$provide', + '$httpProvider', + function ($routeProvider, $provide, $httpProvider) { + 'use strict'; + var feedType = { + FEED: 0, + FOLDER: 1, + STARRED: 2, + SUBSCRIPTIONS: 3, + SHARED: 4 + }; + $provide.constant('REFRESH_RATE', 60); + $provide.constant('ITEM_BATCH_SIZE', 50); + $provide.constant('BASE_URL', OC.generateUrl('/apps/news')); + $provide.constant('FEED_TYPE', feedType); + $provide.factory('CSRFInterceptor', function ($q, BASE_URL) { + return { + request: function (config) { + if (config.url.indexOf(BASE_URL) === 0) { + config.headers.requesttoken = csrfToken; + } + return config || $q.when(config); + } }; - if ($route.current.params.id !== undefined) { - parameters.id = $route.current.params.id; + }); + $httpProvider.interceptors.push('CSRFInterceptor'); + var getResolve = function (type) { + return { + data: [ + '$http', + '$route', + '$q', + 'BASE_URL', + 'ITEM_BATCH_SIZE', + function ($http, $route, $q, BASE_URL, ITEM_BATCH_SIZE) { + var parameters = { + type: type, + limit: ITEM_BATCH_SIZE + }; + if ($route.current.params.id !== undefined) { + parameters.id = $route.current.params.id; + } + var deferred = $q.defer(); + $http({ + url: BASE_URL + '/items', + method: 'GET', + params: parameters + }).success(function (data) { + deferred.resolve(data); + }); + return deferred.promise; + } + ] + }; + }; + $routeProvider.when('/items', { + controller: 'ContentController', + templateUrl: 'content.html', + resolve: getResolve(feedType.SUBSCRIPTIONS) + }).when('/items/starred', { + controller: 'ContentController', + templateUrl: 'content.html', + resolve: getResolve(feedType.STARRED) + }).when('/items/feeds/:id', { + controller: 'ContentController', + templateUrl: 'content.html', + resolve: getResolve(feedType.FEED) + }).when('/items/folders/:id', { + controller: 'ContentController', + templateUrl: 'content.html', + resolve: getResolve(feedType.FOLDER) + }).otherwise({ redirectTo: '/items' }); + } + ]); + app.run([ + '$rootScope', + '$location', + '$http', + '$q', + '$interval', + 'Loading', + 'ItemResource', + 'FeedResource', + 'FolderResource', + 'Settings', + 'Publisher', + 'BASE_URL', + 'FEED_TYPE', + 'REFRESH_RATE', + function ($rootScope, $location, $http, $q, $interval, Loading, ItemResource, FeedResource, FolderResource, Settings, Publisher, BASE_URL, FEED_TYPE, REFRESH_RATE) { + 'use strict'; + console.log($location); + Loading.setLoading('global', true); + Publisher.subscribe(ItemResource).toChannels('items', 'newestItemId', 'starred'); + Publisher.subscribe(FolderResource).toChannels('folders'); + Publisher.subscribe(FeedResource).toChannels('feeds'); + Publisher.subscribe(Settings).toChannels('settings'); + var settingsDeferred = $q.defer(); + $http.get(BASE_URL + '/settings').success(function (data) { + Publisher.publishAll(data); + settingsDeferred.resolve(); + }); + var activeFeedDeferred = $q.defer(); + $http.get(BASE_URL + '/feeds/active').success(function (data) { + var url; + switch (data.type) { + case FEED_TYPE.FEED: + url = '/items/feeds/' + data.id; + break; + case FEED_TYPE.FOLDER: + url = '/items/folders/' + data.id; + break; + case FEED_TYPE.STARRED: + url = '/items/starred'; + break; + default: + url = '/items'; } - deferred = $q.defer(); - $http({ - url: BASE_URL + '/items', - method: 'GET', - params: parameters - }).success(function (data) { - deferred.resolve(data); - }); - return deferred.promise; - } - ] - }; - }; - $routeProvider.when('/items', { - controller: 'ContentController', - templateUrl: 'content.html', - resolve: getResolve(feedType.SUBSCRIPTIONS) - }).when('/items/starred', { - controller: 'ContentController', - templateUrl: 'content.html', - resolve: getResolve(feedType.STARRED) - }).when('/items/feeds/:id', { - controller: 'ContentController', - templateUrl: 'content.html', - resolve: getResolve(feedType.FEED) - }).when('/items/folders/:id', { - controller: 'ContentController', - templateUrl: 'content.html', - resolve: getResolve(feedType.FOLDER) - }).otherwise({ redirectTo: '/items' }); - } -]); -app.run([ - '$rootScope', - '$location', - '$http', - '$q', - '$interval', - 'Loading', - 'ItemResource', - 'FeedResource', - 'FolderResource', - 'Settings', - 'Publisher', - 'BASE_URL', - 'FEED_TYPE', - 'REFRESH_RATE', - function ($rootScope, $location, $http, $q, $interval, Loading, ItemResource, FeedResource, FolderResource, Settings, Publisher, BASE_URL, FEED_TYPE, REFRESH_RATE) { - 'use strict'; - // show Loading screen - Loading.setLoading('global', true); - // listen to keys in returned queries to automatically distribute the - // incoming values to models - Publisher.subscribe(ItemResource).toChannels('items', 'newestItemId', 'starred'); - Publisher.subscribe(FolderResource).toChannels('folders'); - Publisher.subscribe(FeedResource).toChannels('feeds'); - Publisher.subscribe(Settings).toChannels('settings'); - // load feeds, settings and last read feed - var settingsDeferred, activeFeedDeferred, folderDeferred, feedDeferred; - settingsDeferred = $q.defer(); - $http.get(BASE_URL + '/settings').success(function (data) { - Publisher.publishAll(data); - settingsDeferred.resolve(); - }); - activeFeedDeferred = $q.defer(); - $http.get(BASE_URL + '/feeds/active').success(function (data) { - var url; - switch (data.type) { - case FEED_TYPE.FEED: - url = '/items/feeds/' + data.id; - break; - case FEED_TYPE.FOLDER: - url = '/items/folders/' + data.id; - break; - case FEED_TYPE.STARRED: - url = '/items/starred'; - break; - default: - url = '/items'; - } - $location.path(url); - activeFeedDeferred.resolve(); - }); - folderDeferred = $q.defer(); - $http.get(BASE_URL + '/folders').success(function (data) { - Publisher.publishAll(data); - folderDeferred.resolve(); - }); - feedDeferred = $q.defer(); - $http.get(BASE_URL + '/feeds').success(function (data) { - Publisher.publishAll(data); - feedDeferred.resolve(); - }); - // disable loading if all initial requests finished - $q.all([ - settingsDeferred.promise, - activeFeedDeferred.promise, - feedDeferred.promise, - folderDeferred.promise - ]).then(function () { - Loading.setLoading('global', false); - }); - // refresh feeds and folders - $interval(function () { - $http.get(BASE_URL + '/feeds'); - $http.get(BASE_URL + '/folders'); - }, REFRESH_RATE * 1000); - $rootScope.$on('$routeChangeStart', function () { - Loading.setLoading('content', true); - }); - $rootScope.$on('$routeChangeSuccess', function () { - Loading.setLoading('content', false); - }); - // in case of wrong id etc show all items - $rootScope.$on('$routeChangeError', function () { - $location.path('/items'); - }); - } -]); -app.controller('AppController', [ - 'Loading', - 'FeedResource', - 'FolderResource', - function (Loading, FeedResource, FolderResource) { - 'use strict'; - this.loading = Loading; - this.isFirstRun = function () { - return FeedResource.size() === 0 && FolderResource.size() === 0; - }; - } -]); -app.controller('ContentController', [ - 'Publisher', - 'FeedResource', - 'ItemResource', - 'data', - function (Publisher, FeedResource, ItemResource, data) { - 'use strict'; - // distribute data to models based on key - Publisher.publishAll(data); - this.getItems = function () { - return ItemResource.getAll(); - }; - this.getFeeds = function () { - return FeedResource.getAll(); - }; - } -]); -app.controller('NavigationController', function () { - 'use strict'; - console.log('here'); -}); -app.controller('SettingsController', function () { - 'use strict'; - console.log('here'); -}); -app.factory('FeedResource', [ - 'Resource', - '$http', - function (Resource, $http) { - 'use strict'; - var FeedResource = function ($http) { - Resource.call(this, 'url', $http); - }; - FeedResource.prototype = Object.create(Resource.prototype); - return new FeedResource($http); - } -]); -app.factory('FolderResource', [ - 'Resource', - '$http', - function (Resource, $http) { - 'use strict'; - var FolderResource = function ($http) { - Resource.call(this, 'name', $http); - }; - FolderResource.prototype = Object.create(Resource.prototype); - return new FolderResource($http); - } -]); -app.factory('ItemResource', [ - 'Resource', - '$http', - function (Resource, $http) { - 'use strict'; - var ItemResource = function ($http) { - Resource.call(this, 'id', $http); - }; - ItemResource.prototype = Object.create(Resource.prototype); - ItemResource.prototype.receive = function (value, channel) { - switch (channel) { - case 'newestItemId': - this.newestItemId = value; - break; - case 'starred': - this.starredCount = value; - break; - default: - Resource.prototype.receive.call(this, value, channel); - } - }; - ItemResource.prototype.getNewestItemId = function () { - return this.newestItemId; - }; - ItemResource.prototype.getStarredCount = function () { - return this.starredCount; - }; - return new ItemResource($http); - } -]); -app.service('Loading', function () { - 'use strict'; - this.loading = { - global: false, - content: false, - autopaging: false - }; - this.setLoading = function (area, isLoading) { - this.loading[area] = isLoading; - }; - this.isLoading = function (area) { - return this.loading[area]; - }; -}); -app.service('Publisher', function () { - 'use strict'; - var self = this; - this.channels = {}; - this.subscribe = function (object) { - return { - toChannels: function () { - var counter, channel; - for (counter = 0; counter < arguments.length; counter += 1) { - channel = arguments[counter]; - self.channels[channel] = self.channels[channel] || []; - self.channels[channel].push(object); + $location.path(url); + activeFeedDeferred.resolve(); + }); + var folderDeferred = $q.defer(); + $http.get(BASE_URL + '/folders').success(function (data) { + Publisher.publishAll(data); + folderDeferred.resolve(); + }); + var feedDeferred = $q.defer(); + $http.get(BASE_URL + '/feeds').success(function (data) { + Publisher.publishAll(data); + feedDeferred.resolve(); + }); + $q.all([ + settingsDeferred.promise, + activeFeedDeferred.promise, + feedDeferred.promise, + folderDeferred.promise + ]).then(function () { + Loading.setLoading('global', false); + }); + $interval(function () { + $http.get(BASE_URL + '/feeds'); + $http.get(BASE_URL + '/folders'); + }, REFRESH_RATE * 1000); + $rootScope.$on('$routeChangeStart', function () { + Loading.setLoading('content', true); + }); + $rootScope.$on('$routeChangeSuccess', function () { + Loading.setLoading('content', false); + }); + $rootScope.$on('$routeChangeError', function () { + $location.path('/items'); + }); + } + ]); + app.controller('AppController', [ + 'Loading', + 'FeedResource', + 'FolderResource', + function (Loading, FeedResource, FolderResource) { + 'use strict'; + this.loading = Loading; + this.isFirstRun = function () { + return FeedResource.size() === 0 && FolderResource.size() === 0; + }; } - } - }; - }; - this.publishAll = function (data) { - var channel, counter; - for (channel in data) { - if (data.hasOwnProperty(channel) && this.channels[channel] !== undefined) { - for (counter = 0; counter < this.channels[channel].length; counter += 1) { - this.channels[channel][counter].receive(data[channel], channel); + ]); + app.controller('ContentController', [ + 'Publisher', + 'FeedResource', + 'ItemResource', + 'data', + function (Publisher, FeedResource, ItemResource, data) { + 'use strict'; + Publisher.publishAll(data); + this.getItems = function () { + return ItemResource.getAll(); + }; + this.getFeeds = function () { + return FeedResource.getAll(); + }; } - } - } - }; -}); -app.factory('Resource', function () { - 'use strict'; - var Resource = function (id, http) { - this.id = id; - this.values = []; - this.hashMap = {}; - this.http = http; - }; - Resource.prototype = { - receive: function (values) { - var self = this; - values.forEach(function (value) { - self.add(value); + ]); + app.controller('NavigationController', function () { + 'use strict'; + console.log('here'); }); - }, - add: function (value) { - var key, existing; - existing = this.hashMap[value[this.id]]; - if (existing === undefined) { - this.values.push(value); - this.hashMap[value[this.id]] = value; - } else { - // copy values from new to old object if it exists already - for (key in value) { - if (value.hasOwnProperty(key)) { - existing[key] = value[key]; - } + app.controller('SettingsController', function () { + 'use strict'; + console.log('here'); + }); + app.factory('FeedResource', [ + 'Resource', + '$http', + function (Resource, $http) { + 'use strict'; + var FeedResource = function FeedResource($http) { + $traceurRuntime.superCall(this, $FeedResource.prototype, 'constructor', [ + 'url', + $http + ]); + }; + var $FeedResource = FeedResource; + $traceurRuntime.createClass(FeedResource, {}, {}, Resource); + return new FeedResource($http); } - } - }, - size: function () { - return this.values.length; - }, - get: function (id) { - return this.hashMap[id]; - }, - delete: function (id) { - // find index of object that should be deleted - var i, deleteAtIndex; - for (i = 0; i < this.values.length; i += 1) { - if (this.values[i][this.id] === id) { - deleteAtIndex = i; - break; + ]); + app.factory('FolderResource', [ + 'Resource', + '$http', + function (Resource, $http) { + 'use strict'; + var FolderResource = function FolderResource($http) { + $traceurRuntime.superCall(this, $FolderResource.prototype, 'constructor', [ + 'name', + $http + ]); + }; + var $FolderResource = FolderResource; + $traceurRuntime.createClass(FolderResource, {}, {}, Resource); + return new FolderResource($http); } - } - if (deleteAtIndex !== undefined) { - this.values.splice(deleteAtIndex, 1); - } - if (this.hashMap[id] !== undefined) { - delete this.hashMap[id]; - } - }, - clear: function () { - this.hashMap = {}; - // http://stackoverflow.com/questions/1232040/how-to-empty-an-array-in-javascript - // this is the fastes way to empty an array when you want to keep the - // reference around - while (this.values.length > 0) { - this.values.pop(); - } - }, - getAll: function () { - return this.values; - } - }; - return Resource; -}); -app.service('Settings', function () { - 'use strict'; - this.settings = {}; - this.receive = function (data) { - var key; - for (key in data) { - if (data.hasOwnProperty(key)) { - this.settings[key] = data[key]; - } - } - }; - this.get = function (key) { - return this.settings[key]; - }; - this.set = function (key, value) { - this.settings[key] = value; - }; -}); -/** - * Code in here acts only as a click shortcut mechanism. That's why its not - * being put into a directive since it has to be tested with protractor - * anyways and theres no benefit from wiring it into the angular app - */ -(function (window, document, $) { - 'use strict'; - var noInputFocused, noModifierKey, scrollArea, scrollToItem, scrollToNextItem, scrollToPreviousItem, toggleStar, toggleUnread, expandItem, openLink, getActiveItem; - scrollArea = $('#app-content'); - noInputFocused = function (element) { - return !(element.is('input') && element.is('select') && element.is('textarea') && element.is('checkbox')); - }; - noModifierKey = function (event) { - return !(event.shiftKey || event.altKey || event.ctrlKey || event.metaKey); - }; - scrollToItem = function (item, scrollArea) { - scrollArea.scrollTop(item.offset().top - scrollArea.offset().top + scrollArea.scrollTop()); - }; - scrollToNextItem = function (scrollArea) { - var items, counter, item; - items = scrollArea.find('.feed_item'); - for (counter = 0; counter < items.length; counter += 1) { - item = $(items[counter]); - if (item.position().top > 1) { - scrollToItem(scrollArea, item); - return; - } - } - // in case this is the last item it should still scroll below the top - scrollArea.scrollTop(scrollArea.prop('scrollHeight')); - }; - scrollToPreviousItem = function (scrollArea) { - var items, item, counter, previous; - items = scrollArea.find('.feed_item'); - for (counter = 0; counter < items.length; counter += 1) { - item = $(items[counter]); - if (item.position().top >= 0) { - previous = item.prev(); - // if there are no items before the current one - if (previous.length > 0) { - scrollToItem(scrollArea, previous); + ]); + app.factory('ItemResource', [ + 'Resource', + '$http', + function (Resource, $http) { + 'use strict'; + var ItemResource = function ItemResource($http) { + $traceurRuntime.superCall(this, $ItemResource.prototype, 'constructor', [ + 'id', + $http + ]); + }; + var $ItemResource = ItemResource; + $traceurRuntime.createClass(ItemResource, { + receive: function (value, channel) { + switch (channel) { + case 'newestItemId': + this.newestItemId = value; + break; + case 'starred': + this.starredCount = value; + break; + default: + $traceurRuntime.superCall(this, $ItemResource.prototype, 'receive', [ + value, + channel + ]); + } + }, + getNewestItemId: function () { + return this.newestItemId; + }, + getStarredCount: function () { + return this.starredCount; + } + }, {}, Resource); + return new ItemResource($http); } - return; - } - } - // if there was no jump jump to the last element - if (items.length > 0) { - scrollToItem(scrollArea, items.last()); - } - }; - getActiveItem = function (scrollArea) { - var items, item, counter; - items = scrollArea.find('.feed_item'); - for (counter = 0; counter < items.length; counter += 1) { - item = $(items[counter]); - // 130px of the item should be visible - if (item.height() + item.position().top > 30) { - return item; - } - } - }; - toggleUnread = function (scrollArea) { - var item = getActiveItem(scrollArea); - item.find('.keep_unread').trigger('click'); - }; - toggleStar = function (scrollArea) { - var item = getActiveItem(scrollArea); - item.find('.item_utils .star').trigger('click'); - }; - expandItem = function (scrollArea) { - var item = getActiveItem(scrollArea); - item.find('.item_heading a').trigger('click'); - }; - openLink = function (scrollArea) { - var item = getActiveItem(scrollArea).find('.item_title a'); - item.trigger('click'); - // mark read - window.open(item.attr('href'), '_blank'); - }; - $(document).keyup(function (event) { - var keyCode; - keyCode = event.keyCode; - if (noInputFocused($(':focus')) && noModifierKey(event)) { - // j, n, right arrow - if ([ - 74, - 78, - 34 - ].indexOf(keyCode) >= 0) { - event.preventDefault(); - scrollToNextItem(scrollArea); // k, p, left arrow - } else if ([ - 75, - 80, - 37 - ].indexOf(keyCode) >= 0) { - event.preventDefault(); - scrollToPreviousItem(scrollArea); // u - } else if ([85].indexOf(keyCode) >= 0) { - event.preventDefault(); - toggleUnread(scrollArea); // e - } else if ([69].indexOf(keyCode) >= 0) { - event.preventDefault(); - expandItem(scrollArea); // s, i, l - } else if ([ - 73, - 83, - 76 - ].indexOf(keyCode) >= 0) { - event.preventDefault(); - toggleStar(scrollArea); // h - } else if ([72].indexOf(keyCode) >= 0) { - event.preventDefault(); - toggleStar(scrollArea); - scrollToNextItem(scrollArea); // o - } else if ([79].indexOf(keyCode) >= 0) { - event.preventDefault(); - openLink(scrollArea); - } - } - }); -}(window, document, jQuery)); - -})(angular, jQuery, OC, oc_requesttoken);
\ No newline at end of file + ]); + app.service('Loading', function () { + 'use strict'; + var $__0 = this; + this.loading = { + global: false, + content: false, + autopaging: false + }; + this.setLoading = function (area, isLoading) { + $traceurRuntime.setProperty($__0.loading, area, isLoading); + }; + this.isLoading = function (area) { + return $__0.loading[$traceurRuntime.toProperty(area)]; + }; + }); + app.service('Publisher', function () { + 'use strict'; + var $__0 = this; + this.channels = {}; + this.subscribe = function (obj) { + return { + toChannels: function () { + for (var channels = [], $__4 = 0; $__4 < arguments.length; $__4++) + $traceurRuntime.setProperty(channels, $__4, arguments[$traceurRuntime.toProperty($__4)]); + for (var $__2 = channels[$traceurRuntime.toProperty(Symbol.iterator)](), $__3; !($__3 = $__2.next()).done;) { + try { + throw undefined; + } catch (channel) { + channel = $__3.value; + { + $traceurRuntime.setProperty($__0.channels, channel, $__0.channels[$traceurRuntime.toProperty(channel)] || []); + $__0.channels[$traceurRuntime.toProperty(channel)].push(obj); + } + } + } + } + }; + }; + this.publishAll = function (data) { + for (var $channel in data) { + try { + throw undefined; + } catch (channel) { + channel = $channel; + if ($__0.channels[$traceurRuntime.toProperty(channel)] !== undefined) { + for (var $__2 = $__0.channels[$traceurRuntime.toProperty(channel)][$traceurRuntime.toProperty(Symbol.iterator)](), $__3; !($__3 = $__2.next()).done;) { + try { + throw undefined; + } catch (listener) { + listener = $__3.value; + { + listener.receive(data[$traceurRuntime.toProperty(channel)], channel); + } + } + } + } + } + } + }; + }); + app.factory('Resource', function () { + 'use strict'; + var Resource = function Resource(id, http) { + this.id = id; + this.values = []; + this.hashMap = {}; + this.http = http; + }; + $traceurRuntime.createClass(Resource, { + receive: function (values) { + var $__0 = this; + values.forEach(function (value) { + $__0.add(value); + }); + }, + add: function (value) { + var existing = this.hashMap[$traceurRuntime.toProperty(value[$traceurRuntime.toProperty(this.id)])]; + if (existing === undefined) { + this.values.push(value); + $traceurRuntime.setProperty(this.hashMap, value[$traceurRuntime.toProperty(this.id)], value); + } else { + for (var $key in value) { + try { + throw undefined; + } catch (key) { + key = $key; + if (value.hasOwnProperty(key)) { + $traceurRuntime.setProperty(existing, key, value[$traceurRuntime.toProperty(key)]); + } + } + } + } + }, + size: function () { + return this.values.length; + }, + get: function (id) { + return this.hashMap[$traceurRuntime.toProperty(id)]; + }, + delete: function (id) { + var deleteAtIndex; + { + try { + throw undefined; + } catch ($i) { + $i = 0; + for (; $i < this.values.length; $i += 1) { + try { + throw undefined; + } catch (i) { + i = $i; + try { + if (this.values[$traceurRuntime.toProperty(i)][$traceurRuntime.toProperty(this.id)] === id) { + deleteAtIndex = i; + break; + } + } finally { + $i = i; + } + } + } + } + } + if (deleteAtIndex !== undefined) { + this.values.splice(deleteAtIndex, 1); + } + if (this.hashMap[$traceurRuntime.toProperty(id)] !== undefined) { + delete this.hashMap[$traceurRuntime.toProperty(id)]; + } + }, + clear: function () { + this.hashMap = {}; + while (this.values.length > 0) { + this.values.pop(); + } + }, + getAll: function () { + return this.values; + } + }, {}); + return Resource; + }); + app.service('Settings', function () { + 'use strict'; + var $__0 = this; + this.settings = {}; + this.receive = function (data) { + for (var $key in data) { + try { + throw undefined; + } catch (key) { + key = $key; + $traceurRuntime.setProperty($__0.settings, key, data[$traceurRuntime.toProperty(key)]); + } + } + }; + this.get = function (key) { + return $__0.settings[$traceurRuntime.toProperty(key)]; + }; + this.set = function (key, value) { + $traceurRuntime.setProperty($__0.settings, key, value); + }; + }); + (function (window, document, $) { + 'use strict'; + var scrollArea = $('#app-content'); + var noInputFocused = function (element) { + return !(element.is('input') && element.is('select') && element.is('textarea') && element.is('checkbox')); + }; + var noModifierKey = function (event) { + return !(event.shiftKey || event.altKey || event.ctrlKey || event.metaKey); + }; + var scrollToItem = function (item, scrollArea) { + scrollArea.scrollTop(item.offset().top - scrollArea.offset().top + scrollArea.scrollTop()); + }; + var scrollToNextItem = function (scrollArea) { + var items = scrollArea.find('.feed_item'); + for (var $__2 = items[$traceurRuntime.toProperty(Symbol.iterator)](), $__3; !($__3 = $__2.next()).done;) { + try { + throw undefined; + } catch (item) { + item = $__3.value; + { + item = $(item); + if (item.position().top > 1) { + scrollToItem(scrollArea, item); + return; + } + } + } + } + scrollArea.scrollTop(scrollArea.prop('scrollHeight')); + }; + var scrollToPreviousItem = function (scrollArea) { + var items = scrollArea.find('.feed_item'); + for (var $__2 = items[$traceurRuntime.toProperty(Symbol.iterator)](), $__3; !($__3 = $__2.next()).done;) { + try { + throw undefined; + } catch (item) { + item = $__3.value; + { + item = $(item); + if (item.position().top >= 0) { + try { + throw undefined; + } catch (previous) { + previous = item.prev(); + if (previous.length > 0) { + scrollToItem(scrollArea, previous); + } + return; + } + } + } + } + } + if (items.length > 0) { + scrollToItem(scrollArea, items.last()); + } + }; + var getActiveItem = function (scrollArea) { + var items = scrollArea.find('.feed_item'); + for (var $__2 = items[$traceurRuntime.toProperty(Symbol.iterator)](), $__3; !($__3 = $__2.next()).done;) { + try { + throw undefined; + } catch (item) { + item = $__3.value; + { + item = $(item); + if (item.height() + item.position().top > 30) { + return item; + } + } + } + } + }; + var toggleUnread = function (scrollArea) { + var item = getActiveItem(scrollArea); + item.find('.keep_unread').trigger('click'); + }; + var toggleStar = function (scrollArea) { + var item = getActiveItem(scrollArea); + item.find('.item_utils .star').trigger('click'); + }; + var expandItem = function (scrollArea) { + var item = getActiveItem(scrollArea); + item.find('.item_heading a').trigger('click'); + }; + var openLink = function (scrollArea) { + var item = getActiveItem(scrollArea).find('.item_title a'); + item.trigger('click'); + window.open(item.attr('href'), '_blank'); + }; + $(document).keyup(function (event) { + var keyCode = event.keyCode; + if (noInputFocused($(':focus')) && noModifierKey(event)) { + if ([ + 74, + 78, + 34 + ].indexOf(keyCode) >= 0) { + event.preventDefault(); + scrollToNextItem(scrollArea); + } else if ([ + 75, + 80, + 37 + ].indexOf(keyCode) >= 0) { + event.preventDefault(); + scrollToPreviousItem(scrollArea); + } else if ([85].indexOf(keyCode) >= 0) { + event.preventDefault(); + toggleUnread(scrollArea); + } else if ([69].indexOf(keyCode) >= 0) { + event.preventDefault(); + expandItem(scrollArea); + } else if ([ + 73, + 83, + 76 + ].indexOf(keyCode) >= 0) { + event.preventDefault(); + toggleStar(scrollArea); + } else if ([72].indexOf(keyCode) >= 0) { + event.preventDefault(); + toggleStar(scrollArea); + scrollToNextItem(scrollArea); + } else if ([79].indexOf(keyCode) >= 0) { + event.preventDefault(); + openLink(scrollArea); + } + } + }); + }(window, document, jQuery)); + }(window, document, angular, jQuery, OC, oc_requesttoken)); + return {}; + }();
\ No newline at end of file diff --git a/js/controller/AppController.js b/js/controller/AppController.js index b833d3fe1..17471e71e 100644 --- a/js/controller/AppController.js +++ b/js/controller/AppController.js @@ -7,12 +7,14 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.controller('AppController', function (Loading, FeedResource, FolderResource) { +app.controller('AppController', +function (Loading, FeedResource, FolderResource) { + 'use strict'; this.loading = Loading; - this.isFirstRun = function () { + this.isFirstRun = () => { return FeedResource.size() === 0 && FolderResource.size() === 0; }; diff --git a/js/controller/ContentController.js b/js/controller/ContentController.js index 8e4632f7e..ae5116dbb 100644 --- a/js/controller/ContentController.js +++ b/js/controller/ContentController.js @@ -7,17 +7,18 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.controller('ContentController', function (Publisher, FeedResource, ItemResource, data) { +app.controller('ContentController', +function (Publisher, FeedResource, ItemResource, data) { 'use strict'; // distribute data to models based on key Publisher.publishAll(data); - this.getItems = function () { + this.getItems = () => { return ItemResource.getAll(); }; - this.getFeeds = function () { + this.getFeeds = () => { return FeedResource.getAll(); }; });
\ No newline at end of file diff --git a/js/gui/keyboardshortcuts.js b/js/gui/keyboardshortcuts.js index ba777dc16..8ba93880e 100644 --- a/js/gui/keyboardshortcuts.js +++ b/js/gui/keyboardshortcuts.js @@ -16,53 +16,37 @@ (function (window, document, $) { 'use strict'; - var noInputFocused, - noModifierKey, - scrollArea, - scrollToItem, - scrollToNextItem, - scrollToPreviousItem, - toggleStar, - toggleUnread, - expandItem, - openLink, - getActiveItem; - - scrollArea = $('#app-content'); - - noInputFocused = function (element) { + let scrollArea = $('#app-content'); + + let noInputFocused = (element) => { return !( - element.is('input') - && element.is('select') - && element.is('textarea') - && element.is('checkbox') + element.is('input') && + element.is('select') && + element.is('textarea') && + element.is('checkbox') ); }; - noModifierKey = function (event) { + let noModifierKey = (event) => { return !( - event.shiftKey - || event.altKey - || event.ctrlKey - || event.metaKey + event.shiftKey || + event.altKey || + event.ctrlKey || + event.metaKey ); }; - scrollToItem = function (item, scrollArea) { + let scrollToItem = (item, scrollArea) => { scrollArea.scrollTop( item.offset().top - scrollArea.offset().top + scrollArea.scrollTop() ); }; - scrollToNextItem = function (scrollArea) { - var items, - counter, - item; - - items = scrollArea.find('.feed_item'); + let scrollToNextItem = (scrollArea) => { + let items = scrollArea.find('.feed_item'); - for (counter = 0; counter < items.length; counter += 1) { - item = $(items[counter]); + for (let item of items) { + item = $(item); if (item.position().top > 1) { scrollToItem(scrollArea, item); @@ -75,19 +59,14 @@ }; - scrollToPreviousItem = function (scrollArea) { - var items, - item, - counter, - previous; - - items = scrollArea.find('.feed_item'); + let scrollToPreviousItem = (scrollArea) => { + let items = scrollArea.find('.feed_item'); - for (counter = 0; counter < items.length; counter += 1) { - item = $(items[counter]); + for (let item of items) { + item = $(item); if (item.position().top >= 0) { - previous = item.prev(); + let previous = item.prev(); // if there are no items before the current one if (previous.length > 0) { @@ -104,15 +83,11 @@ } }; - getActiveItem = function (scrollArea) { - var items, - item, - counter; + let getActiveItem = (scrollArea) => { + let items = scrollArea.find('.feed_item'); - items = scrollArea.find('.feed_item'); - - for (counter = 0; counter < items.length; counter += 1) { - item = $(items[counter]); + for (let item of items) { + item = $(item); // 130px of the item should be visible if ((item.height() + item.position().top) > 30) { @@ -121,32 +96,29 @@ } }; - toggleUnread = function (scrollArea) { - var item = getActiveItem(scrollArea); + let toggleUnread = (scrollArea) => { + let item = getActiveItem(scrollArea); item.find('.keep_unread').trigger('click'); }; - toggleStar = function (scrollArea) { - var item = getActiveItem(scrollArea); + let toggleStar = (scrollArea) => { + let item = getActiveItem(scrollArea); item.find('.item_utils .star').trigger('click'); }; - expandItem = function (scrollArea) { - var item = getActiveItem(scrollArea); + let expandItem = (scrollArea) => { + let item = getActiveItem(scrollArea); item.find('.item_heading a').trigger('click'); }; - openLink = function (scrollArea) { - var item = getActiveItem(scrollArea).find('.item_title a'); + let openLink = (scrollArea) => { + let item = getActiveItem(scrollArea).find('.item_title a'); item.trigger('click'); // mark read window.open(item.attr('href'), '_blank'); }; - $(document).keyup(function (event) { - var keyCode; - - keyCode = event.keyCode; - + $(document).keyup((event) => { + let keyCode = event.keyCode; if (noInputFocused($(':focus')) && noModifierKey(event)) { diff --git a/js/karma.conf.js b/js/karma.conf.js index 5b33469dd..73c083350 100644 --- a/js/karma.conf.js +++ b/js/karma.conf.js @@ -12,8 +12,25 @@ module.exports = function (config) { // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine'], + frameworks: ['jasmine', 'traceur'], + preprocessors: { + 'tests/unit/stubs/*.js': ['traceur'], + 'controller/**/*.js': ['traceur'], + 'filter/**/*.js': ['traceur'], + 'service/**/*.js': ['traceur'], + 'directive/**/*.js': ['traceur'], + 'tests/unit/**/*Spec.js': ['traceur'] + }, + + traceurPreprocessor: { + options: { + blockBinding: true, + experimental: true, + sourceMap: false, + modules: 'inline' + } + }, // list of files / patterns to load in the browser files: [ @@ -25,13 +42,13 @@ module.exports = function (config) { 'vendor/angular-route/angular-route.js', 'vendor/angular-sanitize/angular-sanitize.js', 'vendor/angular-animate/angular-animate.js', - 'tests/unit/stubs/*.js', + 'tests/unit/stubs/App.js', + 'tests/unit/stubs/OC.js', 'controller/**/*.js', 'filter/**/*.js', 'service/**/*.js', - 'model/**/*.js', 'directive/**/*.js', - 'tests/unit/**/*Spec.js' + 'tests/unit/**/*Spec.js', ], @@ -41,13 +58,6 @@ module.exports = function (config) { ], - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - - }, - - // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter @@ -73,7 +83,7 @@ module.exports = function (config) { // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['PhantomJS'], + browsers: ['Firefox'], // Continuous Integration mode diff --git a/js/package.json b/js/package.json index 6a6cea1ac..f1d7fd509 100644 --- a/js/package.json +++ b/js/package.json @@ -28,17 +28,21 @@ "grunt": "^0.4.5", "grunt-contrib-concat": "^0.4.0", "grunt-contrib-connect": "^0.7.1", + "grunt-contrib-jshint": "^0.10.0", "grunt-contrib-watch": "^0.6.1", - "grunt-jslint": "^1.1.11", "grunt-karma": "^0.8.3", "grunt-ngmin": "0.0.3", "grunt-phpunit": "^0.3.3", "grunt-protractor-runner": "^0.2.4", "grunt-protractor-webdriver": "^0.1.6", + "grunt-traceur": "^0.1.2", "grunt-wrap": "^0.3.0", "karma": "^0.12.16", "karma-coverage": "^0.2.1", + "karma-firefox-launcher": "^0.1.3", "karma-jasmine": "^0.1.5", - "karma-phantomjs-launcher": "^0.1.4" + "karma-phantomjs-launcher": "^0.1.4", + "karma-traceur-preprocessor": "^0.2.2", + "traceur": "0.0.42" } } diff --git a/js/service/FeedResource.js b/js/service/FeedResource.js index 09de0a607..903a58241 100644 --- a/js/service/FeedResource.js +++ b/js/service/FeedResource.js @@ -7,14 +7,14 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.factory('FeedResource', function (Resource, $http) { +app.factory('FeedResource', (Resource, $http) => { 'use strict'; - var FeedResource = function ($http) { - Resource.call(this, 'url', $http); - }; - - FeedResource.prototype = Object.create(Resource.prototype); + class FeedResource extends Resource { + constructor ($http) { + super('url', $http); + } + } return new FeedResource($http); });
\ No newline at end of file diff --git a/js/service/FolderResource.js b/js/service/FolderResource.js index 30026b9a2..b1c0271dd 100644 --- a/js/service/FolderResource.js +++ b/js/service/FolderResource.js @@ -7,14 +7,14 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.factory('FolderResource', function (Resource, $http) { +app.factory('FolderResource', (Resource, $http) => { 'use strict'; - var FolderResource = function ($http) { - Resource.call(this, 'name', $http); - }; - - FolderResource.prototype = Object.create(Resource.prototype); + class FolderResource extends Resource { + constructor ($http) { + super('name', $http); + } + } return new FolderResource($http); });
\ No newline at end of file diff --git a/js/service/ItemResource.js b/js/service/ItemResource.js index 9b13f07c7..8cb47d527 100644 --- a/js/service/ItemResource.js +++ b/js/service/ItemResource.js @@ -7,38 +7,39 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.factory('ItemResource', function (Resource, $http) { +app.factory('ItemResource', (Resource, $http) => { 'use strict'; - var ItemResource = function ($http) { - Resource.call(this, 'id', $http); - }; + class ItemResource extends Resource { - ItemResource.prototype = Object.create(Resource.prototype); + constructor ($http) { + super('id', $http); + } - ItemResource.prototype.receive = function (value, channel) { - switch (channel) { + receive (value, channel) { + switch (channel) { - case 'newestItemId': - this.newestItemId = value; - break; + case 'newestItemId': + this.newestItemId = value; + break; - case 'starred': - this.starredCount = value; - break; - default: - Resource.prototype.receive.call(this, value, channel); + case 'starred': + this.starredCount = value; + break; + default: + super.receive(value, channel); + } } - }; - ItemResource.prototype.getNewestItemId = function () { - return this.newestItemId; - }; + getNewestItemId () { + return this.newestItemId; + } - ItemResource.prototype.getStarredCount = function () { - return this.starredCount; - }; + getStarredCount () { + return this.starredCount; + } + } return new ItemResource($http); });
\ No newline at end of file diff --git a/js/service/Loading.js b/js/service/Loading.js index eb42655a5..c07dba9fe 100644 --- a/js/service/Loading.js +++ b/js/service/Loading.js @@ -16,11 +16,11 @@ app.service('Loading', function () { autopaging: false }; - this.setLoading = function (area, isLoading) { + this.setLoading = (area, isLoading) => { this.loading[area] = isLoading; }; - this.isLoading = function (area) { + this.isLoading = (area) => { return this.loading[area]; }; diff --git a/js/service/Publisher.js b/js/service/Publisher.js index 784b2fff6..b6ea722ce 100644 --- a/js/service/Publisher.js +++ b/js/service/Publisher.js @@ -10,31 +10,25 @@ app.service('Publisher', function () { 'use strict'; - var self = this; this.channels = {}; - this.subscribe = function (object) { + this.subscribe = (obj) => { return { - toChannels: function () { - var counter, - channel; - for (counter = 0; counter < arguments.length; counter += 1) { - channel = arguments[counter]; - self.channels[channel] = self.channels[channel] || []; - self.channels[channel].push(object); + toChannels: (...channels) => { + for (let channel of channels) { + this.channels[channel] = this.channels[channel] || []; + this.channels[channel].push(obj); } } }; - }; - this.publishAll = function (data) { - var channel, - counter; + }; - for (channel in data) { - if (data.hasOwnProperty(channel) && this.channels[channel] !== undefined) { - for (counter = 0; counter < this.channels[channel].length; counter += 1) { - this.channels[channel][counter].receive(data[channel], channel); + this.publishAll = (data) => { + for (let channel in data) { + if (this.channels[channel] !== undefined) { + for (let listener of this.channels[channel]) { + listener.receive(data[channel], channel); } } } diff --git a/js/service/Resource.js b/js/service/Resource.js index ecae0fcfd..3c17872dc 100644 --- a/js/service/Resource.js +++ b/js/service/Resource.js @@ -7,57 +7,53 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -app.factory('Resource', function () { +app.factory('Resource', () => { 'use strict'; - var Resource = function (id, http) { - this.id = id; - this.values = []; - this.hashMap = {}; - this.http = http; - }; + class Resource { - Resource.prototype = { - receive: function (values) { - var self = this; - values.forEach(function (value) { - self.add(value); - }); - }, + constructor (id, http) { + this.id = id; + this.values = []; + this.hashMap = {}; + this.http = http; + } - add: function (value) { - var key, - existing; + receive (values) { + values.forEach((value) => { + this.add(value); + }); + } - existing = this.hashMap[value[this.id]]; + add (value) { + let existing = this.hashMap[value[this.id]]; if (existing === undefined) { this.values.push(value); this.hashMap[value[this.id]] = value; } else { // copy values from new to old object if it exists already - for (key in value) { + for (let key in value) { if (value.hasOwnProperty(key)) { existing[key] = value[key]; } } } - }, + } - size: function () { + size () { return this.values.length; - }, + } - get: function (id) { + get (id) { return this.hashMap[id]; - }, + } - delete: function (id) { + delete (id) { // find index of object that should be deleted - var i, - deleteAtIndex; + let deleteAtIndex; - for (i = 0; i < this.values.length; i += 1) { + for (let i = 0; i < this.values.length; i += 1) { if (this.values[i][this.id] === id) { deleteAtIndex = i; break; @@ -71,23 +67,23 @@ app.factory('Resource', function () { if (this.hashMap[id] !== undefined) { delete this.hashMap[id]; } - }, + } - clear: function () { + clear () { this.hashMap = {}; - // http://stackoverflow.com/questions/1232040/how-to-empty-an-array-in-javascript - // this is the fastes way to empty an array when you want to keep the - // reference around + // http://stackoverflow.com/questions/1232040 + // this is the fastes way to empty an array when you want to keep + // the reference around while (this.values.length > 0) { this.values.pop(); } - }, + } - getAll: function () { + getAll () { return this.values; } - }; + } return Resource; });
\ No newline at end of file diff --git a/js/service/Settings.js b/js/service/Settings.js index 09a89f6ed..61e79b25d 100644 --- a/js/service/Settings.js +++ b/js/service/Settings.js @@ -12,20 +12,17 @@ app.service('Settings', function () { this.settings = {}; - this.receive = function (data) { - var key; - for (key in data) { - if (data.hasOwnProperty(key)) { - this.settings[key] = data[key]; - } + this.receive = (data) => { + for (let key in data) { + this.settings[key] = data[key]; } }; - this.get = function (key) { + this.get = (key) => { return this.settings[key]; }; - this.set = function (key, value) { + this.set = (key, value) => { this.settings[key] = value; }; diff --git a/js/tests/e2e/main.js b/js/tests/e2e/main.js index b76110c65..247deb47b 100644 --- a/js/tests/e2e/main.js +++ b/js/tests/e2e/main.js @@ -23,12 +23,9 @@ describe('news page', function () { it('should show the first run page', function () { - var firstRun; - - - firstRun = browser.findElement(By.id('first-run')); + let firstRun = browser.findElement(By.id('first-run')); //firstRun.findElement(By.tagName('h1')).then(function (greeting) { - // expect(greeting.getText()).toBe('Welcome to the ownCloud News app!'); + //expect(greeting.getText()).toBe('Welcome to the ownCloud News app!'); //}); expect(firstRun.isDisplayed()).toBe(true); diff --git a/js/tests/unit/controller/AppControllerSpec.js b/js/tests/unit/controller/AppControllerSpec.js index d44d8b0c3..fc5780a40 100644 --- a/js/tests/unit/controller/AppControllerSpec.js +++ b/js/tests/unit/controller/AppControllerSpec.js @@ -7,36 +7,36 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('AppController', function () { +describe('AppController', () => { 'use strict'; - var controller; + let controller; beforeEach(module('News')); - beforeEach(inject(function ($controller) { + beforeEach(inject(($controller) => { controller = $controller('AppController'); })); - it('should expose Loading', inject(function (Loading) { + it('should expose Loading', inject((Loading) => { expect(controller.loading).toBe(Loading); })); - it('should expose set firstrun if no feeds and folders', inject(function () { + it('should expose set firstrun if no feeds and folders', inject(() => { expect(controller.isFirstRun()).toBe(true); })); - it('should expose set firstrun if feeds', inject(function (FeedResource) { + it('should expose set firstrun if feeds', inject((FeedResource) => { FeedResource.add({url: 'test'}); expect(controller.isFirstRun()).toBe(false); })); - it('should expose set firstrun if folders', inject(function (FolderResource) { + it('should expose set firstrun if folders', inject((FolderResource) => { FolderResource.add({name: 'test'}); expect(controller.isFirstRun()).toBe(false); diff --git a/js/tests/unit/controller/ContentControllerSpec.js b/js/tests/unit/controller/ContentControllerSpec.js index c99cb79ab..1dbd3d936 100644 --- a/js/tests/unit/controller/ContentControllerSpec.js +++ b/js/tests/unit/controller/ContentControllerSpec.js @@ -7,19 +7,19 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('ContentController', function () { +describe('ContentController', () => { 'use strict'; beforeEach(module('News')); - it('should publish data to models', inject(function ($controller, Publisher, - FeedResource, ItemResource) { + it('should publish data to models', inject(($controller, Publisher, + FeedResource, ItemResource) => { Publisher.subscribe(ItemResource).toChannels('items'); Publisher.subscribe(FeedResource).toChannels('feeds'); - var controller = $controller('ContentController', { + let controller = $controller('ContentController', { data: { 'items': [ { diff --git a/js/tests/unit/service/ItemResourceSpec.js b/js/tests/unit/service/ItemResourceSpec.js index 9d6c10ae0..acbf0850c 100644 --- a/js/tests/unit/service/ItemResourceSpec.js +++ b/js/tests/unit/service/ItemResourceSpec.js @@ -7,27 +7,27 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('ItemResource', function () { +describe('ItemResource', () => { 'use strict'; beforeEach(module('News')); - it('should receive the newestItemId', inject(function (ItemResource) { + it('should receive the newestItemId', inject((ItemResource) => { ItemResource.receive(3, 'newestItemId'); expect(ItemResource.getNewestItemId()).toBe(3); })); - it('should receive the newestItemId', inject(function (ItemResource) { + it('should receive the newestItemId', inject((ItemResource) => { ItemResource.receive(2, 'starred'); expect(ItemResource.getStarredCount()).toBe(2); })); - it('should receive items', inject(function (ItemResource) { + it('should receive items', inject((ItemResource) => { ItemResource.receive([ { id: 3 diff --git a/js/tests/unit/service/LoadingSpec.js b/js/tests/unit/service/LoadingSpec.js index 2033f33cc..be654641c 100644 --- a/js/tests/unit/service/LoadingSpec.js +++ b/js/tests/unit/service/LoadingSpec.js @@ -7,18 +7,18 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('Loading', function () { +describe('Loading', () => { 'use strict'; beforeEach(module('News')); - it('should be not load by default', inject(function (Loading) { + it('should be not load by default', inject((Loading) => { expect(Loading.isLoading('global')).toBe(false); expect(Loading.isLoading('content')).toBe(false); expect(Loading.isLoading('autopaging')).toBe(false); })); - it('should set loading', inject(function (Loading) { + it('should set loading', inject((Loading) => { Loading.setLoading('global', true); expect(Loading.isLoading('global')).toBe(true); })); diff --git a/js/tests/unit/service/PublisherSpec.js b/js/tests/unit/service/PublisherSpec.js index 06cd48c6a..38efa9398 100644 --- a/js/tests/unit/service/PublisherSpec.js +++ b/js/tests/unit/service/PublisherSpec.js @@ -7,13 +7,13 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('Publisher', function () { +describe('Publisher', () => { 'use strict'; beforeEach(module('News')); - it('should should publish on all possible channels', inject(function (Publisher) { - var obj = { + it('should should publish on all possible channels', inject((Publisher) => { + let obj = { receive: jasmine.createSpy('receive') }; @@ -27,7 +27,7 @@ describe('Publisher', function () { })); - it('should should publish on all possible channels', inject(function (Publisher) { + it('should should publish on all possible channels', inject((Publisher) => { var obj = { receive: jasmine.createSpy('receive') }; @@ -42,7 +42,7 @@ describe('Publisher', function () { })); - it('should not broadcast to not subscribed channels', inject(function (Publisher) { + it('should not broadcast not subscribed channels', inject((Publisher) => { Publisher.publishAll({ test: 'tom' }); diff --git a/js/tests/unit/service/ResourceSpec.js b/js/tests/unit/service/ResourceSpec.js index ba877fcd4..ec0b95ed9 100644 --- a/js/tests/unit/service/ResourceSpec.js +++ b/js/tests/unit/service/ResourceSpec.js @@ -7,25 +7,26 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('Resource', function () { +describe('Resource', () => { 'use strict'; - var childModel; + let childResource; beforeEach(module('News')); - beforeEach(inject(function (Resource) { - var ChildModel = function () { - Resource.call(this, 'id'); - }; - ChildModel.prototype = Object.create(Resource.prototype); + beforeEach(inject((Resource, $http) => { + class ChildResource extends Resource { + constructor ($http) { + super('id', $http); + } + } - childModel = new ChildModel(); + childResource = new ChildResource($http); })); - it('should receive an object', function () { - var objects = [ + it('should receive an object', () => { + let objects = [ { id: 2 }, @@ -34,118 +35,106 @@ describe('Resource', function () { } ]; - childModel.receive(objects); + childResource.receive(objects); - expect(childModel.size()).toBe(2); + expect(childResource.size()).toBe(2); }); - it('should add an object', function () { - var object = { + it('should add an object', () => { + let object = { id: 3, name: 'test' }; - childModel.add(object); + childResource.add(object); - expect(childModel.get(3)).toBe(object); + expect(childResource.get(3)).toBe(object); }); - it('should overwrite an object if it already exists', function () { - var object1, - object2; - - object1 = { + it('should overwrite an object if it already exists', () => { + let object1 = { id: 3, name: 'test', test: 'ho' }; - object2 = { + let object2 = { id: 3, name: 'test2' }; - childModel.add(object1); - childModel.add(object2); + childResource.add(object1); + childResource.add(object2); - expect(childModel.get(3).name).toBe('test2'); - expect(childModel.get(3).test).toBe('ho'); - expect(childModel.size()).toBe(1); + expect(childResource.get(3).name).toBe('test2'); + expect(childResource.get(3).test).toBe('ho'); + expect(childResource.size()).toBe(1); }); - it('should delete a Resource', function () { - var object1, - object2; - - object1 = { + it('should delete a Resource', () => { + let object1 = { id: 3, name: 'test', test: 'ho' }; - object2 = { + let object2 = { id: 4, name: 'test2' }; - childModel.add(object1); - childModel.add(object2); + childResource.add(object1); + childResource.add(object2); - childModel.delete(3); + childResource.delete(3); - expect(childModel.get(3)).not.toBeDefined(); - expect(childModel.get(4).name).toBe('test2'); - expect(childModel.size()).toBe(1); + expect(childResource.get(3)).not.toBeDefined(); + expect(childResource.get(4).name).toBe('test2'); + expect(childResource.size()).toBe(1); }); - it('should clear all models', function () { - var object1, - object2; - - object1 = { + it('should clear all models', () => { + let object1 = { id: 3, name: 'test', test: 'ho' }; - object2 = { + let object2 = { id: 4, name: 'test2' }; - childModel.add(object1); - childModel.add(object2); + childResource.add(object1); + childResource.add(object2); - childModel.clear(); + childResource.clear(); - expect(childModel.get(3)).not.toBeDefined(); - expect(childModel.get(4)).not.toBeDefined(); - expect(childModel.size()).toBe(0); + expect(childResource.get(3)).not.toBeDefined(); + expect(childResource.get(4)).not.toBeDefined(); + expect(childResource.size()).toBe(0); }); - it('should get all models', function () { - var object1, - object2; - - object1 = { + it('should get all models', () => { + let object1 = { id: 3, name: 'test', test: 'ho' }; - object2 = { + let object2 = { id: 4, name: 'test2' }; - childModel.add(object1); - childModel.add(object2); + childResource.add(object1); + childResource.add(object2); - expect(childModel.getAll()[1].id).toBe(4); + expect(childResource.getAll()[1].id).toBe(4); }); });
\ No newline at end of file diff --git a/js/tests/unit/service/SettingsSpec.js b/js/tests/unit/service/SettingsSpec.js index 65dc4bf2f..b76251e3a 100644 --- a/js/tests/unit/service/SettingsSpec.js +++ b/js/tests/unit/service/SettingsSpec.js @@ -7,12 +7,12 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2014 */ -describe('Settings', function () { +describe('Settings', () => { 'use strict'; beforeEach(module('News')); - it('should receive default settings', inject(function (Settings) { + it('should receive default settings', inject((Settings) => { Settings.receive({ 'showAll': true }); @@ -21,7 +21,7 @@ describe('Settings', function () { })); - it('should set values', inject(function (Settings) { + it('should set values', inject((Settings) => { Settings.set('showAll', true); expect(Settings.get('showAll')).toBe(true); diff --git a/js/tests/unit/stubs/app.js b/js/tests/unit/stubs/App.js index 3cb1b1d3f..dc512f5e1 100644 --- a/js/tests/unit/stubs/app.js +++ b/js/tests/unit/stubs/App.js @@ -7,4 +7,9 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2012, 2014 */ -var app = angular.module('News', ['ngRoute', 'ngSanitize', 'ngAnimate', 'ngMock']);
\ No newline at end of file +window.app = angular.module('News', [ + 'ngRoute', + 'ngSanitize', + 'ngAnimate', + 'ngMock' +]);
\ No newline at end of file diff --git a/js/tests/unit/stubs/oc.js b/js/tests/unit/stubs/OC.js index 07ac96491..82622aab5 100644 --- a/js/tests/unit/stubs/oc.js +++ b/js/tests/unit/stubs/OC.js @@ -7,8 +7,8 @@ * @author Bernhard Posselt <dev@bernhard-posselt.com> * @copyright Bernhard Posselt 2012, 2014 */ -var OC = { - generateUrl: function () { +window.OC = { + generateUrl: () => { 'use strict'; return ''; diff --git a/js/vendor/traceur-runtime/.bower.json b/js/vendor/traceur-runtime/.bower.json new file mode 100644 index 000000000..952c74fff --- /dev/null +++ b/js/vendor/traceur-runtime/.bower.json @@ -0,0 +1,22 @@ +{ + "name": "traceur-runtime", + "version": "0.0.41", + "main": "./traceur-runtime.js", + "ignore": [ + "node_modules", + "Gruntfile.js", + "*.json", + ".*" + ], + "homepage": "https://github.com/jmcriffey/bower-traceur-runtime", + "_release": "0.0.41", + "_resolution": { + "type": "version", + "tag": "0.0.41", + "commit": "1327dd26531cc4c5371bbab30f72c908e1abab2e" + }, + "_source": "git://github.com/jmcriffey/bower-traceur-runtime.git", + "_target": "~0.0.41", + "_originalSource": "traceur-runtime", + "_direct": true +}
\ No newline at end of file diff --git a/js/vendor/traceur-runtime/README.md b/js/vendor/traceur-runtime/README.md new file mode 100644 index 000000000..a1150103b --- /dev/null +++ b/js/vendor/traceur-runtime/README.md @@ -0,0 +1,35 @@ +# bower-traceur-runtime + +This repo is for distribution on `bower`. The source for this module is in the +[main traceur repo](https://github.com/google/traceur-compiler/). +Please file issues and pull requests against that repo. + +## Install + +Install with `bower`: + +```shell +bower install traceur-runtime +``` + +Add a `<script>` to your `index.html`: + +```html +<script src="/bower_components/traceur-runtime/traceur-runtime.js"></script> +``` + +## License + +Copyright 2012 Traceur Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/js/vendor/traceur-runtime/traceur-runtime.js b/js/vendor/traceur-runtime/traceur-runtime.js new file mode 100644 index 000000000..b3f9f54d5 --- /dev/null +++ b/js/vendor/traceur-runtime/traceur-runtime.js @@ -0,0 +1,1712 @@ +(function(global) { + 'use strict'; + if (global.$traceurRuntime) { + return; + } + var $Object = Object; + var $TypeError = TypeError; + var $create = $Object.create; + var $defineProperties = $Object.defineProperties; + var $defineProperty = $Object.defineProperty; + var $freeze = $Object.freeze; + var $getOwnPropertyDescriptor = $Object.getOwnPropertyDescriptor; + var $getOwnPropertyNames = $Object.getOwnPropertyNames; + var $getPrototypeOf = $Object.getPrototypeOf; + var $keys = $Object.keys; + var $hasOwnProperty = $Object.prototype.hasOwnProperty; + var $toString = $Object.prototype.toString; + var $preventExtensions = Object.preventExtensions; + var $seal = Object.seal; + var $isExtensible = Object.isExtensible; + function nonEnum(value) { + return { + configurable: true, + enumerable: false, + value: value, + writable: true + }; + } + var types = { + void: function voidType() {}, + any: function any() {}, + string: function string() {}, + number: function number() {}, + boolean: function boolean() {} + }; + var method = nonEnum; + var counter = 0; + function newUniqueString() { + return '__$' + Math.floor(Math.random() * 1e9) + '$' + ++counter + '$__'; + } + var symbolInternalProperty = newUniqueString(); + var symbolDescriptionProperty = newUniqueString(); + var symbolDataProperty = newUniqueString(); + var symbolValues = $create(null); + var privateNames = $create(null); + function createPrivateName() { + var s = newUniqueString(); + privateNames[s] = true; + return s; + } + function isSymbol(symbol) { + return typeof symbol === 'object' && symbol instanceof SymbolValue; + } + function typeOf(v) { + if (isSymbol(v)) + return 'symbol'; + return typeof v; + } + function Symbol(description) { + var value = new SymbolValue(description); + if (!(this instanceof Symbol)) + return value; + throw new TypeError('Symbol cannot be new\'ed'); + } + $defineProperty(Symbol.prototype, 'constructor', nonEnum(Symbol)); + $defineProperty(Symbol.prototype, 'toString', method(function() { + var symbolValue = this[symbolDataProperty]; + if (!getOption('symbols')) + return symbolValue[symbolInternalProperty]; + if (!symbolValue) + throw TypeError('Conversion from symbol to string'); + var desc = symbolValue[symbolDescriptionProperty]; + if (desc === undefined) + desc = ''; + return 'Symbol(' + desc + ')'; + })); + $defineProperty(Symbol.prototype, 'valueOf', method(function() { + var symbolValue = this[symbolDataProperty]; + if (!symbolValue) + throw TypeError('Conversion from symbol to string'); + if (!getOption('symbols')) + return symbolValue[symbolInternalProperty]; + return symbolValue; + })); + function SymbolValue(description) { + var key = newUniqueString(); + $defineProperty(this, symbolDataProperty, {value: this}); + $defineProperty(this, symbolInternalProperty, {value: key}); + $defineProperty(this, symbolDescriptionProperty, {value: description}); + freeze(this); + symbolValues[key] = this; + } + $defineProperty(SymbolValue.prototype, 'constructor', nonEnum(Symbol)); + $defineProperty(SymbolValue.prototype, 'toString', { + value: Symbol.prototype.toString, + enumerable: false + }); + $defineProperty(SymbolValue.prototype, 'valueOf', { + value: Symbol.prototype.valueOf, + enumerable: false + }); + var hashProperty = createPrivateName(); + var hashPropertyDescriptor = {value: undefined}; + var hashObjectProperties = { + hash: {value: undefined}, + self: {value: undefined} + }; + var hashCounter = 0; + function getOwnHashObject(object) { + var hashObject = object[hashProperty]; + if (hashObject && hashObject.self === object) + return hashObject; + if ($isExtensible(object)) { + hashObjectProperties.hash.value = hashCounter++; + hashObjectProperties.self.value = object; + hashPropertyDescriptor.value = $create(null, hashObjectProperties); + $defineProperty(object, hashProperty, hashPropertyDescriptor); + return hashPropertyDescriptor.value; + } + return undefined; + } + function freeze(object) { + getOwnHashObject(object); + return $freeze.apply(this, arguments); + } + function preventExtensions(object) { + getOwnHashObject(object); + return $preventExtensions.apply(this, arguments); + } + function seal(object) { + getOwnHashObject(object); + return $seal.apply(this, arguments); + } + Symbol.iterator = Symbol(); + freeze(SymbolValue.prototype); + function toProperty(name) { + if (isSymbol(name)) + return name[symbolInternalProperty]; + return name; + } + function getOwnPropertyNames(object) { + var rv = []; + var names = $getOwnPropertyNames(object); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (!symbolValues[name] && !privateNames[name]) + rv.push(name); + } + return rv; + } + function getOwnPropertyDescriptor(object, name) { + return $getOwnPropertyDescriptor(object, toProperty(name)); + } + function getOwnPropertySymbols(object) { + var rv = []; + var names = $getOwnPropertyNames(object); + for (var i = 0; i < names.length; i++) { + var symbol = symbolValues[names[i]]; + if (symbol) + rv.push(symbol); + } + return rv; + } + function hasOwnProperty(name) { + return $hasOwnProperty.call(this, toProperty(name)); + } + function getOption(name) { + return global.traceur && global.traceur.options[name]; + } + function setProperty(object, name, value) { + var sym, + desc; + if (isSymbol(name)) { + sym = name; + name = name[symbolInternalProperty]; + } + object[name] = value; + if (sym && (desc = $getOwnPropertyDescriptor(object, name))) + $defineProperty(object, name, {enumerable: false}); + return value; + } + function defineProperty(object, name, descriptor) { + if (isSymbol(name)) { + if (descriptor.enumerable) { + descriptor = $create(descriptor, {enumerable: {value: false}}); + } + name = name[symbolInternalProperty]; + } + $defineProperty(object, name, descriptor); + return object; + } + function polyfillObject(Object) { + $defineProperty(Object, 'defineProperty', {value: defineProperty}); + $defineProperty(Object, 'getOwnPropertyNames', {value: getOwnPropertyNames}); + $defineProperty(Object, 'getOwnPropertyDescriptor', {value: getOwnPropertyDescriptor}); + $defineProperty(Object.prototype, 'hasOwnProperty', {value: hasOwnProperty}); + $defineProperty(Object, 'freeze', {value: freeze}); + $defineProperty(Object, 'preventExtensions', {value: preventExtensions}); + $defineProperty(Object, 'seal', {value: seal}); + Object.getOwnPropertySymbols = getOwnPropertySymbols; + function is(left, right) { + if (left === right) + return left !== 0 || 1 / left === 1 / right; + return left !== left && right !== right; + } + $defineProperty(Object, 'is', method(is)); + function assign(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + var props = $keys(source); + var p, + length = props.length; + for (p = 0; p < length; p++) { + var name = props[p]; + if (privateNames[name]) + continue; + target[name] = source[name]; + } + } + return target; + } + $defineProperty(Object, 'assign', method(assign)); + function mixin(target, source) { + var props = $getOwnPropertyNames(source); + var p, + descriptor, + length = props.length; + for (p = 0; p < length; p++) { + var name = props[p]; + if (privateNames[name]) + continue; + descriptor = $getOwnPropertyDescriptor(source, props[p]); + $defineProperty(target, props[p], descriptor); + } + return target; + } + $defineProperty(Object, 'mixin', method(mixin)); + } + function exportStar(object) { + for (var i = 1; i < arguments.length; i++) { + var names = $getOwnPropertyNames(arguments[i]); + for (var j = 0; j < names.length; j++) { + var name = names[j]; + if (privateNames[name]) + continue; + (function(mod, name) { + $defineProperty(object, name, { + get: function() { + return mod[name]; + }, + enumerable: true + }); + })(arguments[i], names[j]); + } + } + return object; + } + function isObject(x) { + return x != null && (typeof x === 'object' || typeof x === 'function'); + } + function toObject(x) { + if (x == null) + throw $TypeError(); + return $Object(x); + } + function assertObject(x) { + if (!isObject(x)) + throw $TypeError(x + ' is not an Object'); + return x; + } + function spread() { + var rv = [], + k = 0; + for (var i = 0; i < arguments.length; i++) { + var valueToSpread = toObject(arguments[i]); + for (var j = 0; j < valueToSpread.length; j++) { + rv[k++] = valueToSpread[j]; + } + } + return rv; + } + function superDescriptor(homeObject, name) { + var proto = $getPrototypeOf(homeObject); + do { + var result = $getOwnPropertyDescriptor(proto, name); + if (result) + return result; + proto = $getPrototypeOf(proto); + } while (proto); + return undefined; + } + function superCall(self, homeObject, name, args) { + return superGet(self, homeObject, name).apply(self, args); + } + function superGet(self, homeObject, name) { + var descriptor = superDescriptor(homeObject, name); + if (descriptor) { + if (!descriptor.get) + return descriptor.value; + return descriptor.get.call(self); + } + return undefined; + } + function superSet(self, homeObject, name, value) { + var descriptor = superDescriptor(homeObject, name); + if (descriptor && descriptor.set) { + descriptor.set.call(self, value); + return value; + } + throw $TypeError("super has no setter '" + name + "'."); + } + function getDescriptors(object) { + var descriptors = {}, + name, + names = $getOwnPropertyNames(object); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + descriptors[name] = $getOwnPropertyDescriptor(object, name); + } + return descriptors; + } + function createClass(ctor, object, staticObject, superClass) { + $defineProperty(object, 'constructor', { + value: ctor, + configurable: true, + enumerable: false, + writable: true + }); + if (arguments.length > 3) { + if (typeof superClass === 'function') + ctor.__proto__ = superClass; + ctor.prototype = $create(getProtoParent(superClass), getDescriptors(object)); + } else { + ctor.prototype = object; + } + $defineProperty(ctor, 'prototype', { + configurable: false, + writable: false + }); + return $defineProperties(ctor, getDescriptors(staticObject)); + } + function getProtoParent(superClass) { + if (typeof superClass === 'function') { + var prototype = superClass.prototype; + if ($Object(prototype) === prototype || prototype === null) + return superClass.prototype; + } + if (superClass === null) + return null; + throw new TypeError(); + } + function defaultSuperCall(self, homeObject, args) { + if ($getPrototypeOf(homeObject) !== null) + superCall(self, homeObject, 'constructor', args); + } + var ST_NEWBORN = 0; + var ST_EXECUTING = 1; + var ST_SUSPENDED = 2; + var ST_CLOSED = 3; + var END_STATE = -2; + var RETHROW_STATE = -3; + function getInternalError(state) { + return new Error('Traceur compiler bug: invalid state in state machine: ' + state); + } + function GeneratorContext() { + this.state = 0; + this.GState = ST_NEWBORN; + this.storedException = undefined; + this.finallyFallThrough = undefined; + this.sent_ = undefined; + this.returnValue = undefined; + this.tryStack_ = []; + } + GeneratorContext.prototype = { + pushTry: function(catchState, finallyState) { + if (finallyState !== null) { + var finallyFallThrough = null; + for (var i = this.tryStack_.length - 1; i >= 0; i--) { + if (this.tryStack_[i].catch !== undefined) { + finallyFallThrough = this.tryStack_[i].catch; + break; + } + } + if (finallyFallThrough === null) + finallyFallThrough = RETHROW_STATE; + this.tryStack_.push({ + finally: finallyState, + finallyFallThrough: finallyFallThrough + }); + } + if (catchState !== null) { + this.tryStack_.push({catch: catchState}); + } + }, + popTry: function() { + this.tryStack_.pop(); + }, + get sent() { + this.maybeThrow(); + return this.sent_; + }, + set sent(v) { + this.sent_ = v; + }, + get sentIgnoreThrow() { + return this.sent_; + }, + maybeThrow: function() { + if (this.action === 'throw') { + this.action = 'next'; + throw this.sent_; + } + }, + end: function() { + switch (this.state) { + case END_STATE: + return this; + case RETHROW_STATE: + throw this.storedException; + default: + throw getInternalError(this.state); + } + }, + handleException: function(ex) { + this.GState = ST_CLOSED; + this.state = END_STATE; + throw ex; + } + }; + function nextOrThrow(ctx, moveNext, action, x) { + switch (ctx.GState) { + case ST_EXECUTING: + throw new Error(("\"" + action + "\" on executing generator")); + case ST_CLOSED: + throw new Error(("\"" + action + "\" on closed generator")); + case ST_NEWBORN: + if (action === 'throw') { + ctx.GState = ST_CLOSED; + throw x; + } + if (x !== undefined) + throw $TypeError('Sent value to newborn generator'); + case ST_SUSPENDED: + ctx.GState = ST_EXECUTING; + ctx.action = action; + ctx.sent = x; + var value = moveNext(ctx); + var done = value === ctx; + if (done) + value = ctx.returnValue; + ctx.GState = done ? ST_CLOSED : ST_SUSPENDED; + return { + value: value, + done: done + }; + } + } + var ctxName = createPrivateName(); + var moveNextName = createPrivateName(); + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + GeneratorFunction.prototype = GeneratorFunctionPrototype; + $defineProperty(GeneratorFunctionPrototype, 'constructor', nonEnum(GeneratorFunction)); + GeneratorFunctionPrototype.prototype = { + constructor: GeneratorFunctionPrototype, + next: function(v) { + return nextOrThrow(this[ctxName], this[moveNextName], 'next', v); + }, + throw: function(v) { + return nextOrThrow(this[ctxName], this[moveNextName], 'throw', v); + } + }; + $defineProperties(GeneratorFunctionPrototype.prototype, { + constructor: {enumerable: false}, + next: {enumerable: false}, + throw: {enumerable: false} + }); + defineProperty(GeneratorFunctionPrototype.prototype, Symbol.iterator, nonEnum(function() { + return this; + })); + function createGeneratorInstance(innerFunction, functionObject, self) { + var moveNext = getMoveNext(innerFunction, self); + var ctx = new GeneratorContext(); + var object = $create(functionObject.prototype); + object[ctxName] = ctx; + object[moveNextName] = moveNext; + return object; + } + function initGeneratorFunction(functionObject) { + functionObject.prototype = $create(GeneratorFunctionPrototype.prototype); + functionObject.__proto__ = GeneratorFunctionPrototype; + return functionObject; + } + function AsyncFunctionContext() { + GeneratorContext.call(this); + this.err = undefined; + var ctx = this; + ctx.result = new Promise(function(resolve, reject) { + ctx.resolve = resolve; + ctx.reject = reject; + }); + } + AsyncFunctionContext.prototype = Object.create(GeneratorContext.prototype); + AsyncFunctionContext.prototype.end = function() { + switch (this.state) { + case END_STATE: + this.resolve(this.returnValue); + break; + case RETHROW_STATE: + this.reject(this.storedException); + break; + default: + this.reject(getInternalError(this.state)); + } + }; + AsyncFunctionContext.prototype.handleException = function() { + this.state = RETHROW_STATE; + }; + function asyncWrap(innerFunction, self) { + var moveNext = getMoveNext(innerFunction, self); + var ctx = new AsyncFunctionContext(); + ctx.createCallback = function(newState) { + return function(value) { + ctx.state = newState; + ctx.value = value; + moveNext(ctx); + }; + }; + ctx.errback = function(err) { + handleCatch(ctx, err); + moveNext(ctx); + }; + moveNext(ctx); + return ctx.result; + } + function getMoveNext(innerFunction, self) { + return function(ctx) { + while (true) { + try { + return innerFunction.call(self, ctx); + } catch (ex) { + handleCatch(ctx, ex); + } + } + }; + } + function handleCatch(ctx, ex) { + ctx.storedException = ex; + var last = ctx.tryStack_[ctx.tryStack_.length - 1]; + if (!last) { + ctx.handleException(ex); + return; + } + ctx.state = last.catch !== undefined ? last.catch : last.finally; + if (last.finallyFallThrough !== undefined) + ctx.finallyFallThrough = last.finallyFallThrough; + } + function setupGlobals(global) { + global.Symbol = Symbol; + polyfillObject(global.Object); + } + setupGlobals(global); + global.$traceurRuntime = { + assertObject: assertObject, + asyncWrap: asyncWrap, + createClass: createClass, + defaultSuperCall: defaultSuperCall, + exportStar: exportStar, + initGeneratorFunction: initGeneratorFunction, + createGeneratorInstance: createGeneratorInstance, + getOwnHashObject: getOwnHashObject, + setProperty: setProperty, + setupGlobals: setupGlobals, + spread: spread, + superCall: superCall, + superGet: superGet, + superSet: superSet, + toObject: toObject, + toProperty: toProperty, + type: types, + typeof: typeOf + }; +})(typeof global !== 'undefined' ? global : this); +(function() { + function buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) { + var out = []; + if (opt_scheme) { + out.push(opt_scheme, ':'); + } + if (opt_domain) { + out.push('//'); + if (opt_userInfo) { + out.push(opt_userInfo, '@'); + } + out.push(opt_domain); + if (opt_port) { + out.push(':', opt_port); + } + } + if (opt_path) { + out.push(opt_path); + } + if (opt_queryData) { + out.push('?', opt_queryData); + } + if (opt_fragment) { + out.push('#', opt_fragment); + } + return out.join(''); + } + ; + var splitRe = new RegExp('^' + '(?:' + '([^:/?#.]+)' + ':)?' + '(?://' + '(?:([^/?#]*)@)?' + '([\\w\\d\\-\\u0100-\\uffff.%]*)' + '(?::([0-9]+))?' + ')?' + '([^?#]+)?' + '(?:\\?([^#]*))?' + '(?:#(.*))?' + '$'); + var ComponentIndex = { + SCHEME: 1, + USER_INFO: 2, + DOMAIN: 3, + PORT: 4, + PATH: 5, + QUERY_DATA: 6, + FRAGMENT: 7 + }; + function split(uri) { + return (uri.match(splitRe)); + } + function removeDotSegments(path) { + if (path === '/') + return '/'; + var leadingSlash = path[0] === '/' ? '/' : ''; + var trailingSlash = path.slice(-1) === '/' ? '/' : ''; + var segments = path.split('/'); + var out = []; + var up = 0; + for (var pos = 0; pos < segments.length; pos++) { + var segment = segments[pos]; + switch (segment) { + case '': + case '.': + break; + case '..': + if (out.length) + out.pop(); + else + up++; + break; + default: + out.push(segment); + } + } + if (!leadingSlash) { + while (up-- > 0) { + out.unshift('..'); + } + if (out.length === 0) + out.push('.'); + } + return leadingSlash + out.join('/') + trailingSlash; + } + function joinAndCanonicalizePath(parts) { + var path = parts[ComponentIndex.PATH] || ''; + path = removeDotSegments(path); + parts[ComponentIndex.PATH] = path; + return buildFromEncodedParts(parts[ComponentIndex.SCHEME], parts[ComponentIndex.USER_INFO], parts[ComponentIndex.DOMAIN], parts[ComponentIndex.PORT], parts[ComponentIndex.PATH], parts[ComponentIndex.QUERY_DATA], parts[ComponentIndex.FRAGMENT]); + } + function canonicalizeUrl(url) { + var parts = split(url); + return joinAndCanonicalizePath(parts); + } + function resolveUrl(base, url) { + var parts = split(url); + var baseParts = split(base); + if (parts[ComponentIndex.SCHEME]) { + return joinAndCanonicalizePath(parts); + } else { + parts[ComponentIndex.SCHEME] = baseParts[ComponentIndex.SCHEME]; + } + for (var i = ComponentIndex.SCHEME; i <= ComponentIndex.PORT; i++) { + if (!parts[i]) { + parts[i] = baseParts[i]; + } + } + if (parts[ComponentIndex.PATH][0] == '/') { + return joinAndCanonicalizePath(parts); + } + var path = baseParts[ComponentIndex.PATH]; + var index = path.lastIndexOf('/'); + path = path.slice(0, index + 1) + parts[ComponentIndex.PATH]; + parts[ComponentIndex.PATH] = path; + return joinAndCanonicalizePath(parts); + } + function isAbsolute(name) { + if (!name) + return false; + if (name[0] === '/') + return true; + var parts = split(name); + if (parts[ComponentIndex.SCHEME]) + return true; + return false; + } + $traceurRuntime.canonicalizeUrl = canonicalizeUrl; + $traceurRuntime.isAbsolute = isAbsolute; + $traceurRuntime.removeDotSegments = removeDotSegments; + $traceurRuntime.resolveUrl = resolveUrl; +})(); +(function(global) { + 'use strict'; + var $__2 = $traceurRuntime.assertObject($traceurRuntime), + canonicalizeUrl = $__2.canonicalizeUrl, + resolveUrl = $__2.resolveUrl, + isAbsolute = $__2.isAbsolute; + var moduleInstantiators = Object.create(null); + var baseURL; + if (global.location && global.location.href) + baseURL = resolveUrl(global.location.href, './'); + else + baseURL = ''; + var UncoatedModuleEntry = function UncoatedModuleEntry(url, uncoatedModule) { + this.url = url; + this.value_ = uncoatedModule; + }; + ($traceurRuntime.createClass)(UncoatedModuleEntry, {}, {}); + var UncoatedModuleInstantiator = function UncoatedModuleInstantiator(url, func) { + $traceurRuntime.superCall(this, $UncoatedModuleInstantiator.prototype, "constructor", [url, null]); + this.func = func; + }; + var $UncoatedModuleInstantiator = UncoatedModuleInstantiator; + ($traceurRuntime.createClass)(UncoatedModuleInstantiator, {getUncoatedModule: function() { + if (this.value_) + return this.value_; + return this.value_ = this.func.call(global); + }}, {}, UncoatedModuleEntry); + function getUncoatedModuleInstantiator(name) { + if (!name) + return; + var url = ModuleStore.normalize(name); + return moduleInstantiators[url]; + } + ; + var moduleInstances = Object.create(null); + var liveModuleSentinel = {}; + function Module(uncoatedModule) { + var isLive = arguments[1]; + var coatedModule = Object.create(null); + Object.getOwnPropertyNames(uncoatedModule).forEach((function(name) { + var getter, + value; + if (isLive === liveModuleSentinel) { + var descr = Object.getOwnPropertyDescriptor(uncoatedModule, name); + if (descr.get) + getter = descr.get; + } + if (!getter) { + value = uncoatedModule[name]; + getter = function() { + return value; + }; + } + Object.defineProperty(coatedModule, name, { + get: getter, + enumerable: true + }); + })); + Object.preventExtensions(coatedModule); + return coatedModule; + } + var ModuleStore = { + normalize: function(name, refererName, refererAddress) { + if (typeof name !== "string") + throw new TypeError("module name must be a string, not " + typeof name); + if (isAbsolute(name)) + return canonicalizeUrl(name); + if (/[^\.]\/\.\.\//.test(name)) { + throw new Error('module name embeds /../: ' + name); + } + if (name[0] === '.' && refererName) + return resolveUrl(refererName, name); + return canonicalizeUrl(name); + }, + get: function(normalizedName) { + var m = getUncoatedModuleInstantiator(normalizedName); + if (!m) + return undefined; + var moduleInstance = moduleInstances[m.url]; + if (moduleInstance) + return moduleInstance; + moduleInstance = Module(m.getUncoatedModule(), liveModuleSentinel); + return moduleInstances[m.url] = moduleInstance; + }, + set: function(normalizedName, module) { + normalizedName = String(normalizedName); + moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, (function() { + return module; + })); + moduleInstances[normalizedName] = module; + }, + get baseURL() { + return baseURL; + }, + set baseURL(v) { + baseURL = String(v); + }, + registerModule: function(name, func) { + var normalizedName = ModuleStore.normalize(name); + if (moduleInstantiators[normalizedName]) + throw new Error('duplicate module named ' + normalizedName); + moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, func); + }, + bundleStore: Object.create(null), + register: function(name, deps, func) { + if (!deps || !deps.length && !func.length) { + this.registerModule(name, func); + } else { + this.bundleStore[name] = { + deps: deps, + execute: function() { + var $__0 = arguments; + var depMap = {}; + deps.forEach((function(dep, index) { + return depMap[dep] = $__0[index]; + })); + var registryEntry = func.call(this, depMap); + registryEntry.execute.call(this); + return registryEntry.exports; + } + }; + } + }, + getAnonymousModule: function(func) { + return new Module(func.call(global), liveModuleSentinel); + }, + getForTesting: function(name) { + var $__0 = this; + if (!this.testingPrefix_) { + Object.keys(moduleInstances).some((function(key) { + var m = /(traceur@[^\/]*\/)/.exec(key); + if (m) { + $__0.testingPrefix_ = m[1]; + return true; + } + })); + } + return this.get(this.testingPrefix_ + name); + } + }; + ModuleStore.set('@traceur/src/runtime/ModuleStore', new Module({ModuleStore: ModuleStore})); + var setupGlobals = $traceurRuntime.setupGlobals; + $traceurRuntime.setupGlobals = function(global) { + setupGlobals(global); + }; + $traceurRuntime.ModuleStore = ModuleStore; + global.System = { + register: ModuleStore.register.bind(ModuleStore), + get: ModuleStore.get, + set: ModuleStore.set, + normalize: ModuleStore.normalize + }; + $traceurRuntime.getModuleImpl = function(name) { + var instantiator = getUncoatedModuleInstantiator(name); + return instantiator && instantiator.getUncoatedModule(); + }; +})(typeof global !== 'undefined' ? global : this); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/utils", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/utils"; + var toObject = $traceurRuntime.toObject; + function toUint32(x) { + return x | 0; + } + function isObject(x) { + return x && (typeof x === 'object' || typeof x === 'function'); + } + function isCallable(x) { + return typeof x === 'function'; + } + function toInteger(x) { + x = +x; + if (isNaN(x)) + return 0; + if (!isFinite(x) || x === 0) + return x; + return x > 0 ? Math.floor(x) : Math.ceil(x); + } + var MAX_SAFE_LENGTH = Math.pow(2, 53) - 1; + function toLength(x) { + var len = toInteger(x); + return len < 0 ? 0 : Math.min(len, MAX_SAFE_LENGTH); + } + return { + get toObject() { + return toObject; + }, + get toUint32() { + return toUint32; + }, + get isObject() { + return isObject; + }, + get isCallable() { + return isCallable; + }, + get toInteger() { + return toInteger; + }, + get toLength() { + return toLength; + } + }; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/Array", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/Array"; + var $__3 = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/utils")), + toInteger = $__3.toInteger, + toLength = $__3.toLength, + toObject = $__3.toObject, + isCallable = $__3.isCallable; + function fill(value) { + var start = arguments[1] !== (void 0) ? arguments[1] : 0; + var end = arguments[2]; + var object = toObject(this); + var len = toLength(object.length); + var fillStart = toInteger(start); + var fillEnd = end !== undefined ? toInteger(end) : len; + fillStart = fillStart < 0 ? Math.max(len + fillStart, 0) : Math.min(fillStart, len); + fillEnd = fillEnd < 0 ? Math.max(len + fillEnd, 0) : Math.min(fillEnd, len); + while (fillStart < fillEnd) { + object[fillStart] = value; + fillStart++; + } + return object; + } + function find(predicate) { + var thisArg = arguments[1]; + return findHelper(this, predicate, thisArg); + } + function findIndex(predicate) { + var thisArg = arguments[1]; + return findHelper(this, predicate, thisArg, true); + } + function findHelper(self, predicate) { + var thisArg = arguments[2]; + var returnIndex = arguments[3] !== (void 0) ? arguments[3] : false; + var object = toObject(self); + var len = toLength(object.length); + if (!isCallable(predicate)) { + throw TypeError(); + } + for (var i = 0; i < len; i++) { + if (i in object) { + var value = object[i]; + if (predicate.call(thisArg, value, i, object)) { + return returnIndex ? i : value; + } + } + } + return returnIndex ? -1 : undefined; + } + return { + get fill() { + return fill; + }, + get find() { + return find; + }, + get findIndex() { + return findIndex; + } + }; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/ArrayIterator", [], function() { + "use strict"; + var $__5; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/ArrayIterator"; + var $__6 = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/utils")), + toObject = $__6.toObject, + toUint32 = $__6.toUint32; + var ARRAY_ITERATOR_KIND_KEYS = 1; + var ARRAY_ITERATOR_KIND_VALUES = 2; + var ARRAY_ITERATOR_KIND_ENTRIES = 3; + var ArrayIterator = function ArrayIterator() {}; + ($traceurRuntime.createClass)(ArrayIterator, ($__5 = {}, Object.defineProperty($__5, "next", { + value: function() { + var iterator = toObject(this); + var array = iterator.iteratorObject_; + if (!array) { + throw new TypeError('Object is not an ArrayIterator'); + } + var index = iterator.arrayIteratorNextIndex_; + var itemKind = iterator.arrayIterationKind_; + var length = toUint32(array.length); + if (index >= length) { + iterator.arrayIteratorNextIndex_ = Infinity; + return createIteratorResultObject(undefined, true); + } + iterator.arrayIteratorNextIndex_ = index + 1; + if (itemKind == ARRAY_ITERATOR_KIND_VALUES) + return createIteratorResultObject(array[index], false); + if (itemKind == ARRAY_ITERATOR_KIND_ENTRIES) + return createIteratorResultObject([index, array[index]], false); + return createIteratorResultObject(index, false); + }, + configurable: true, + enumerable: true, + writable: true + }), Object.defineProperty($__5, Symbol.iterator, { + value: function() { + return this; + }, + configurable: true, + enumerable: true, + writable: true + }), $__5), {}); + function createArrayIterator(array, kind) { + var object = toObject(array); + var iterator = new ArrayIterator; + iterator.iteratorObject_ = object; + iterator.arrayIteratorNextIndex_ = 0; + iterator.arrayIterationKind_ = kind; + return iterator; + } + function createIteratorResultObject(value, done) { + return { + value: value, + done: done + }; + } + function entries() { + return createArrayIterator(this, ARRAY_ITERATOR_KIND_ENTRIES); + } + function keys() { + return createArrayIterator(this, ARRAY_ITERATOR_KIND_KEYS); + } + function values() { + return createArrayIterator(this, ARRAY_ITERATOR_KIND_VALUES); + } + return { + get entries() { + return entries; + }, + get keys() { + return keys; + }, + get values() { + return values; + } + }; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/Map", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/Map"; + var isObject = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/utils")).isObject; + var getOwnHashObject = $traceurRuntime.getOwnHashObject; + var $hasOwnProperty = Object.prototype.hasOwnProperty; + var deletedSentinel = {}; + function lookupIndex(map, key) { + if (isObject(key)) { + var hashObject = getOwnHashObject(key); + return hashObject && map.objectIndex_[hashObject.hash]; + } + if (typeof key === 'string') + return map.stringIndex_[key]; + return map.primitiveIndex_[key]; + } + function initMap(map) { + map.entries_ = []; + map.objectIndex_ = Object.create(null); + map.stringIndex_ = Object.create(null); + map.primitiveIndex_ = Object.create(null); + map.deletedCount_ = 0; + } + var Map = function Map() { + var iterable = arguments[0]; + if (!isObject(this)) + throw new TypeError("Constructor Map requires 'new'"); + if ($hasOwnProperty.call(this, 'entries_')) { + throw new TypeError("Map can not be reentrantly initialised"); + } + initMap(this); + if (iterable !== null && iterable !== undefined) { + var iter = iterable[Symbol.iterator]; + if (iter !== undefined) { + for (var $__8 = iterable[Symbol.iterator](), + $__9; !($__9 = $__8.next()).done; ) { + var $__10 = $traceurRuntime.assertObject($__9.value), + key = $__10[0], + value = $__10[1]; + { + this.set(key, value); + } + } + } + } + }; + ($traceurRuntime.createClass)(Map, { + get size() { + return this.entries_.length / 2 - this.deletedCount_; + }, + get: function(key) { + var index = lookupIndex(this, key); + if (index !== undefined) + return this.entries_[index + 1]; + }, + set: function(key, value) { + var objectMode = isObject(key); + var stringMode = typeof key === 'string'; + var index = lookupIndex(this, key); + if (index !== undefined) { + this.entries_[index + 1] = value; + } else { + index = this.entries_.length; + this.entries_[index] = key; + this.entries_[index + 1] = value; + if (objectMode) { + var hashObject = getOwnHashObject(key); + var hash = hashObject.hash; + this.objectIndex_[hash] = index; + } else if (stringMode) { + this.stringIndex_[key] = index; + } else { + this.primitiveIndex_[key] = index; + } + } + return this; + }, + has: function(key) { + return lookupIndex(this, key) !== undefined; + }, + delete: function(key) { + var objectMode = isObject(key); + var stringMode = typeof key === 'string'; + var index; + var hash; + if (objectMode) { + var hashObject = getOwnHashObject(key); + if (hashObject) { + index = this.objectIndex_[hash = hashObject.hash]; + delete this.objectIndex_[hash]; + } + } else if (stringMode) { + index = this.stringIndex_[key]; + delete this.stringIndex_[key]; + } else { + index = this.primitiveIndex_[key]; + delete this.primitiveIndex_[key]; + } + if (index !== undefined) { + this.entries_[index] = deletedSentinel; + this.entries_[index + 1] = undefined; + this.deletedCount_++; + } + }, + clear: function() { + initMap(this); + }, + forEach: function(callbackFn) { + var thisArg = arguments[1]; + for (var i = 0, + len = this.entries_.length; i < len; i += 2) { + var key = this.entries_[i]; + var value = this.entries_[i + 1]; + if (key === deletedSentinel) + continue; + callbackFn.call(thisArg, value, key, this); + } + } + }, {}); + return {get Map() { + return Map; + }}; +}); +System.register("traceur-runtime@0.0.41/node_modules/rsvp/lib/rsvp/asap", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/node_modules/rsvp/lib/rsvp/asap"; + var $__default = function asap(callback, arg) { + var length = queue.push([callback, arg]); + if (length === 1) { + scheduleFlush(); + } + }; + var browserGlobal = (typeof window !== 'undefined') ? window : {}; + var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; + function useNextTick() { + return function() { + process.nextTick(flush); + }; + } + function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, {characterData: true}); + return function() { + node.data = (iterations = ++iterations % 2); + }; + } + function useSetTimeout() { + return function() { + setTimeout(flush, 1); + }; + } + var queue = []; + function flush() { + for (var i = 0; i < queue.length; i++) { + var tuple = queue[i]; + var callback = tuple[0], + arg = tuple[1]; + callback(arg); + } + queue = []; + } + var scheduleFlush; + if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { + scheduleFlush = useNextTick(); + } else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); + } else { + scheduleFlush = useSetTimeout(); + } + return {get default() { + return $__default; + }}; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/Promise", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/Promise"; + var async = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/node_modules/rsvp/lib/rsvp/asap")).default; + var promiseRaw = {}; + function isPromise(x) { + return x && typeof x === 'object' && x.status_ !== undefined; + } + function idResolveHandler(x) { + return x; + } + function idRejectHandler(x) { + throw x; + } + function chain(promise) { + var onResolve = arguments[1] !== (void 0) ? arguments[1] : idResolveHandler; + var onReject = arguments[2] !== (void 0) ? arguments[2] : idRejectHandler; + var deferred = getDeferred(promise.constructor); + switch (promise.status_) { + case undefined: + throw TypeError; + case 0: + promise.onResolve_.push(onResolve, deferred); + promise.onReject_.push(onReject, deferred); + break; + case +1: + promiseEnqueue(promise.value_, [onResolve, deferred]); + break; + case -1: + promiseEnqueue(promise.value_, [onReject, deferred]); + break; + } + return deferred.promise; + } + function getDeferred(C) { + if (this === $Promise) { + var promise = promiseInit(new $Promise(promiseRaw)); + return { + promise: promise, + resolve: (function(x) { + promiseResolve(promise, x); + }), + reject: (function(r) { + promiseReject(promise, r); + }) + }; + } else { + var result = {}; + result.promise = new C((function(resolve, reject) { + result.resolve = resolve; + result.reject = reject; + })); + return result; + } + } + function promiseSet(promise, status, value, onResolve, onReject) { + promise.status_ = status; + promise.value_ = value; + promise.onResolve_ = onResolve; + promise.onReject_ = onReject; + return promise; + } + function promiseInit(promise) { + return promiseSet(promise, 0, undefined, [], []); + } + var Promise = function Promise(resolver) { + if (resolver === promiseRaw) + return; + if (typeof resolver !== 'function') + throw new TypeError; + var promise = promiseInit(this); + try { + resolver((function(x) { + promiseResolve(promise, x); + }), (function(r) { + promiseReject(promise, r); + })); + } catch (e) { + promiseReject(promise, e); + } + }; + ($traceurRuntime.createClass)(Promise, { + catch: function(onReject) { + return this.then(undefined, onReject); + }, + then: function(onResolve, onReject) { + if (typeof onResolve !== 'function') + onResolve = idResolveHandler; + if (typeof onReject !== 'function') + onReject = idRejectHandler; + var that = this; + var constructor = this.constructor; + return chain(this, function(x) { + x = promiseCoerce(constructor, x); + return x === that ? onReject(new TypeError) : isPromise(x) ? x.then(onResolve, onReject) : onResolve(x); + }, onReject); + } + }, { + resolve: function(x) { + if (this === $Promise) { + return promiseSet(new $Promise(promiseRaw), +1, x); + } else { + return new this(function(resolve, reject) { + resolve(x); + }); + } + }, + reject: function(r) { + if (this === $Promise) { + return promiseSet(new $Promise(promiseRaw), -1, r); + } else { + return new this((function(resolve, reject) { + reject(r); + })); + } + }, + cast: function(x) { + if (x instanceof this) + return x; + if (isPromise(x)) { + var result = getDeferred(this); + chain(x, result.resolve, result.reject); + return result.promise; + } + return this.resolve(x); + }, + all: function(values) { + var deferred = getDeferred(this); + var resolutions = []; + try { + var count = values.length; + if (count === 0) { + deferred.resolve(resolutions); + } else { + for (var i = 0; i < values.length; i++) { + this.resolve(values[i]).then(function(i, x) { + resolutions[i] = x; + if (--count === 0) + deferred.resolve(resolutions); + }.bind(undefined, i), (function(r) { + deferred.reject(r); + })); + } + } + } catch (e) { + deferred.reject(e); + } + return deferred.promise; + }, + race: function(values) { + var deferred = getDeferred(this); + try { + for (var i = 0; i < values.length; i++) { + this.resolve(values[i]).then((function(x) { + deferred.resolve(x); + }), (function(r) { + deferred.reject(r); + })); + } + } catch (e) { + deferred.reject(e); + } + return deferred.promise; + } + }); + var $Promise = Promise; + var $PromiseReject = $Promise.reject; + function promiseResolve(promise, x) { + promiseDone(promise, +1, x, promise.onResolve_); + } + function promiseReject(promise, r) { + promiseDone(promise, -1, r, promise.onReject_); + } + function promiseDone(promise, status, value, reactions) { + if (promise.status_ !== 0) + return; + promiseEnqueue(value, reactions); + promiseSet(promise, status, value); + } + function promiseEnqueue(value, tasks) { + async((function() { + for (var i = 0; i < tasks.length; i += 2) { + promiseHandle(value, tasks[i], tasks[i + 1]); + } + })); + } + function promiseHandle(value, handler, deferred) { + try { + var result = handler(value); + if (result === deferred.promise) + throw new TypeError; + else if (isPromise(result)) + chain(result, deferred.resolve, deferred.reject); + else + deferred.resolve(result); + } catch (e) { + try { + deferred.reject(e); + } catch (e) {} + } + } + var thenableSymbol = '@@thenable'; + function isObject(x) { + return x && (typeof x === 'object' || typeof x === 'function'); + } + function promiseCoerce(constructor, x) { + if (!isPromise(x) && isObject(x)) { + var then; + try { + then = x.then; + } catch (r) { + var promise = $PromiseReject.call(constructor, r); + x[thenableSymbol] = promise; + return promise; + } + if (typeof then === 'function') { + var p = x[thenableSymbol]; + if (p) { + return p; + } else { + var deferred = getDeferred(constructor); + x[thenableSymbol] = deferred.promise; + try { + then.call(x, deferred.resolve, deferred.reject); + } catch (r) { + deferred.reject(r); + } + return deferred.promise; + } + } + } + return x; + } + return {get Promise() { + return Promise; + }}; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/String", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/String"; + var $toString = Object.prototype.toString; + var $indexOf = String.prototype.indexOf; + var $lastIndexOf = String.prototype.lastIndexOf; + function startsWith(search) { + var string = String(this); + if (this == null || $toString.call(search) == '[object RegExp]') { + throw TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + var pos = position ? Number(position) : 0; + if (isNaN(pos)) { + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + return $indexOf.call(string, searchString, pos) == start; + } + function endsWith(search) { + var string = String(this); + if (this == null || $toString.call(search) == '[object RegExp]') { + throw TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var pos = stringLength; + if (arguments.length > 1) { + var position = arguments[1]; + if (position !== undefined) { + pos = position ? Number(position) : 0; + if (isNaN(pos)) { + pos = 0; + } + } + } + var end = Math.min(Math.max(pos, 0), stringLength); + var start = end - searchLength; + if (start < 0) { + return false; + } + return $lastIndexOf.call(string, searchString, start) == start; + } + function contains(search) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + var pos = position ? Number(position) : 0; + if (isNaN(pos)) { + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + return $indexOf.call(string, searchString, pos) != -1; + } + function repeat(count) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var n = count ? Number(count) : 0; + if (isNaN(n)) { + n = 0; + } + if (n < 0 || n == Infinity) { + throw RangeError(); + } + if (n == 0) { + return ''; + } + var result = ''; + while (n--) { + result += string; + } + return result; + } + function codePointAt(position) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var size = string.length; + var index = position ? Number(position) : 0; + if (isNaN(index)) { + index = 0; + } + if (index < 0 || index >= size) { + return undefined; + } + var first = string.charCodeAt(index); + var second; + if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) { + second = string.charCodeAt(index + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; + } + function raw(callsite) { + var raw = callsite.raw; + var len = raw.length >>> 0; + if (len === 0) + return ''; + var s = ''; + var i = 0; + while (true) { + s += raw[i]; + if (i + 1 === len) + return s; + s += arguments[++i]; + } + } + function fromCodePoint() { + var codeUnits = []; + var floor = Math.floor; + var highSurrogate; + var lowSurrogate; + var index = -1; + var length = arguments.length; + if (!length) { + return ''; + } + while (++index < length) { + var codePoint = Number(arguments[index]); + if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) { + throw RangeError('Invalid code point: ' + codePoint); + } + if (codePoint <= 0xFFFF) { + codeUnits.push(codePoint); + } else { + codePoint -= 0x10000; + highSurrogate = (codePoint >> 10) + 0xD800; + lowSurrogate = (codePoint % 0x400) + 0xDC00; + codeUnits.push(highSurrogate, lowSurrogate); + } + } + return String.fromCharCode.apply(null, codeUnits); + } + return { + get startsWith() { + return startsWith; + }, + get endsWith() { + return endsWith; + }, + get contains() { + return contains; + }, + get repeat() { + return repeat; + }, + get codePointAt() { + return codePointAt; + }, + get raw() { + return raw; + }, + get fromCodePoint() { + return fromCodePoint; + } + }; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfills/polyfills", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfills/polyfills"; + var Map = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/Map")).Map; + var Promise = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/Promise")).Promise; + var $__13 = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/String")), + codePointAt = $__13.codePointAt, + contains = $__13.contains, + endsWith = $__13.endsWith, + fromCodePoint = $__13.fromCodePoint, + repeat = $__13.repeat, + raw = $__13.raw, + startsWith = $__13.startsWith; + var $__13 = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/Array")), + fill = $__13.fill, + find = $__13.find, + findIndex = $__13.findIndex; + var $__13 = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/ArrayIterator")), + entries = $__13.entries, + keys = $__13.keys, + values = $__13.values; + function maybeDefineMethod(object, name, value) { + if (!(name in object)) { + Object.defineProperty(object, name, { + value: value, + configurable: true, + enumerable: false, + writable: true + }); + } + } + function maybeAddFunctions(object, functions) { + for (var i = 0; i < functions.length; i += 2) { + var name = functions[i]; + var value = functions[i + 1]; + maybeDefineMethod(object, name, value); + } + } + function polyfillPromise(global) { + if (!global.Promise) + global.Promise = Promise; + } + function polyfillCollections(global) { + if (!global.Map) + global.Map = Map; + } + function polyfillString(String) { + maybeAddFunctions(String.prototype, ['codePointAt', codePointAt, 'contains', contains, 'endsWith', endsWith, 'startsWith', startsWith, 'repeat', repeat]); + maybeAddFunctions(String, ['fromCodePoint', fromCodePoint, 'raw', raw]); + } + function polyfillArray(Array, Symbol) { + maybeAddFunctions(Array.prototype, ['entries', entries, 'keys', keys, 'values', values, 'fill', fill, 'find', find, 'findIndex', findIndex]); + if (Symbol && Symbol.iterator) { + Object.defineProperty(Array.prototype, Symbol.iterator, { + value: values, + configurable: true, + enumerable: false, + writable: true + }); + } + } + function polyfill(global) { + polyfillPromise(global); + polyfillCollections(global); + polyfillString(global.String); + polyfillArray(global.Array, global.Symbol); + } + polyfill(this); + var setupGlobals = $traceurRuntime.setupGlobals; + $traceurRuntime.setupGlobals = function(global) { + setupGlobals(global); + polyfill(global); + }; + return {}; +}); +System.register("traceur-runtime@0.0.41/src/runtime/polyfill-import", [], function() { + "use strict"; + var __moduleName = "traceur-runtime@0.0.41/src/runtime/polyfill-import"; + var $__15 = $traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/polyfills")); + return {}; +}); +System.get("traceur-runtime@0.0.41/src/runtime/polyfill-import" + ''); diff --git a/js/vendor/traceur-runtime/traceur-runtime.min.js b/js/vendor/traceur-runtime/traceur-runtime.min.js new file mode 100644 index 000000000..2bcc8c2d3 --- /dev/null +++ b/js/vendor/traceur-runtime/traceur-runtime.min.js @@ -0,0 +1,2 @@ +!function(a){"use strict";function b(a){return{configurable:!0,enumerable:!1,value:a,writable:!0}}function c(){return"__$"+Math.floor(1e9*Math.random())+"$"+ ++ib+"$__"}function d(){var a=c();return nb[a]=!0,a}function e(a){return"object"==typeof a&&a instanceof h}function f(a){return e(a)?"symbol":typeof a}function g(a){var b=new h(a);if(!(this instanceof g))return b;throw new TypeError("Symbol cannot be new'ed")}function h(a){var b=c();Y(this,lb,{value:this}),Y(this,jb,{value:b}),Y(this,kb,{value:a}),j(this),mb[b]=this}function i(a){var b=a[ob];return b&&b.self===a?b:fb(a)?(qb.hash.value=rb++,qb.self.value=a,pb.value=W(null,qb),Y(a,ob,pb),pb.value):void 0}function j(a){return i(a),Z.apply(this,arguments)}function k(a){return i(a),db.apply(this,arguments)}function l(a){return i(a),eb.apply(this,arguments)}function m(a){return e(a)?a[jb]:a}function n(a){for(var b=[],c=_(a),d=0;d<c.length;d++){var e=c[d];mb[e]||nb[e]||b.push(e)}return b}function o(a,b){return $(a,m(b))}function p(a){for(var b=[],c=_(a),d=0;d<c.length;d++){var e=mb[c[d]];e&&b.push(e)}return b}function q(a){return cb.call(this,m(a))}function r(b){return a.traceur&&a.traceur.options[b]}function s(a,b,c){var d,f;return e(b)&&(d=b,b=b[jb]),a[b]=c,d&&(f=$(a,b))&&Y(a,b,{enumerable:!1}),c}function t(a,b,c){return e(b)&&(c.enumerable&&(c=W(c,{enumerable:{value:!1}})),b=b[jb]),Y(a,b,c),a}function u(a){function b(a,b){return a===b?0!==a||1/a===1/b:a!==a&&b!==b}function c(a){for(var b=1;b<arguments.length;b++){var c,d=arguments[b],e=bb(d),f=e.length;for(c=0;f>c;c++){var g=e[c];nb[g]||(a[g]=d[g])}}return a}function d(a,b){var c,d,e=_(b),f=e.length;for(c=0;f>c;c++){var g=e[c];nb[g]||(d=$(b,e[c]),Y(a,e[c],d))}return a}Y(a,"defineProperty",{value:t}),Y(a,"getOwnPropertyNames",{value:n}),Y(a,"getOwnPropertyDescriptor",{value:o}),Y(a.prototype,"hasOwnProperty",{value:q}),Y(a,"freeze",{value:j}),Y(a,"preventExtensions",{value:k}),Y(a,"seal",{value:l}),a.getOwnPropertySymbols=p,Y(a,"is",hb(b)),Y(a,"assign",hb(c)),Y(a,"mixin",hb(d))}function v(a){for(var b=1;b<arguments.length;b++)for(var c=_(arguments[b]),d=0;d<c.length;d++){var e=c[d];nb[e]||!function(b,c){Y(a,c,{get:function(){return b[c]},enumerable:!0})}(arguments[b],c[d])}return a}function w(a){return null!=a&&("object"==typeof a||"function"==typeof a)}function x(a){if(null==a)throw V();return U(a)}function y(a){if(!w(a))throw V(a+" is not an Object");return a}function z(){for(var a=[],b=0,c=0;c<arguments.length;c++)for(var d=x(arguments[c]),e=0;e<d.length;e++)a[b++]=d[e];return a}function A(a,b){var c=ab(a);do{var d=$(c,b);if(d)return d;c=ab(c)}while(c);return void 0}function B(a,b,c,d){return C(a,b,c).apply(a,d)}function C(a,b,c){var d=A(b,c);return d?d.get?d.get.call(a):d.value:void 0}function D(a,b,c,d){var e=A(b,c);if(e&&e.set)return e.set.call(a,d),d;throw V("super has no setter '"+c+"'.")}function E(a){for(var b,c={},d=_(a),e=0;e<d.length;e++){var b=d[e];c[b]=$(a,b)}return c}function F(a,b,c,d){return Y(b,"constructor",{value:a,configurable:!0,enumerable:!1,writable:!0}),arguments.length>3?("function"==typeof d&&(a.__proto__=d),a.prototype=W(G(d),E(b))):a.prototype=b,Y(a,"prototype",{configurable:!1,writable:!1}),X(a,E(c))}function G(a){if("function"==typeof a){var b=a.prototype;if(U(b)===b||null===b)return a.prototype}if(null===a)return null;throw new TypeError}function H(a,b,c){null!==ab(b)&&B(a,b,"constructor",c)}function I(a){return new Error("Traceur compiler bug: invalid state in state machine: "+a)}function J(){this.state=0,this.GState=sb,this.storedException=void 0,this.finallyFallThrough=void 0,this.sent_=void 0,this.returnValue=void 0,this.tryStack_=[]}function K(a,b,c,d){switch(a.GState){case tb:throw new Error('"'+c+'" on executing generator');case vb:throw new Error('"'+c+'" on closed generator');case sb:if("throw"===c)throw a.GState=vb,d;if(void 0!==d)throw V("Sent value to newborn generator");case ub:a.GState=tb,a.action=c,a.sent=d;var e=b(a),f=e===a;return f&&(e=a.returnValue),a.GState=f?vb:ub,{value:e,done:f}}}function L(){}function M(){}function N(a,b,c){var d=R(a,c),e=new J,f=W(b.prototype);return f[yb]=e,f[zb]=d,f}function O(a){return a.prototype=W(M.prototype),a.__proto__=M,a}function P(){J.call(this),this.err=void 0;var a=this;a.result=new Promise(function(b,c){a.resolve=b,a.reject=c})}function Q(a,b){var c=R(a,b),d=new P;return d.createCallback=function(a){return function(b){d.state=a,d.value=b,c(d)}},d.errback=function(a){S(d,a),c(d)},c(d),d.result}function R(a,b){return function(c){for(;;)try{return a.call(b,c)}catch(d){S(c,d)}}}function S(a,b){a.storedException=b;var c=a.tryStack_[a.tryStack_.length-1];return c?(a.state=void 0!==c.catch?c.catch:c.finally,void(void 0!==c.finallyFallThrough&&(a.finallyFallThrough=c.finallyFallThrough))):void a.handleException(b)}function T(a){a.Symbol=g,u(a.Object)}if(!a.$traceurRuntime){var U=Object,V=TypeError,W=U.create,X=U.defineProperties,Y=U.defineProperty,Z=U.freeze,$=U.getOwnPropertyDescriptor,_=U.getOwnPropertyNames,ab=U.getPrototypeOf,bb=U.keys,cb=U.prototype.hasOwnProperty,db=(U.prototype.toString,Object.preventExtensions),eb=Object.seal,fb=Object.isExtensible,gb={"void":function(){},any:function(){},string:function(){},number:function(){},"boolean":function(){}},hb=b,ib=0,jb=c(),kb=c(),lb=c(),mb=W(null),nb=W(null);Y(g.prototype,"constructor",b(g)),Y(g.prototype,"toString",hb(function(){var a=this[lb];if(!r("symbols"))return a[jb];if(!a)throw TypeError("Conversion from symbol to string");var b=a[kb];return void 0===b&&(b=""),"Symbol("+b+")"})),Y(g.prototype,"valueOf",hb(function(){var a=this[lb];if(!a)throw TypeError("Conversion from symbol to string");return r("symbols")?a:a[jb]})),Y(h.prototype,"constructor",b(g)),Y(h.prototype,"toString",{value:g.prototype.toString,enumerable:!1}),Y(h.prototype,"valueOf",{value:g.prototype.valueOf,enumerable:!1});var ob=d(),pb={value:void 0},qb={hash:{value:void 0},self:{value:void 0}},rb=0;g.iterator=g(),j(h.prototype);var sb=0,tb=1,ub=2,vb=3,wb=-2,xb=-3;J.prototype={pushTry:function(a,b){if(null!==b){for(var c=null,d=this.tryStack_.length-1;d>=0;d--)if(void 0!==this.tryStack_[d].catch){c=this.tryStack_[d].catch;break}null===c&&(c=xb),this.tryStack_.push({"finally":b,finallyFallThrough:c})}null!==a&&this.tryStack_.push({"catch":a})},popTry:function(){this.tryStack_.pop()},get sent(){return this.maybeThrow(),this.sent_},set sent(a){this.sent_=a},get sentIgnoreThrow(){return this.sent_},maybeThrow:function(){if("throw"===this.action)throw this.action="next",this.sent_},end:function(){switch(this.state){case wb:return this;case xb:throw this.storedException;default:throw I(this.state)}},handleException:function(a){throw this.GState=vb,this.state=wb,a}};var yb=d(),zb=d();L.prototype=M,Y(M,"constructor",b(L)),M.prototype={constructor:M,next:function(a){return K(this[yb],this[zb],"next",a)},"throw":function(a){return K(this[yb],this[zb],"throw",a)}},X(M.prototype,{constructor:{enumerable:!1},next:{enumerable:!1},"throw":{enumerable:!1}}),t(M.prototype,g.iterator,b(function(){return this})),P.prototype=Object.create(J.prototype),P.prototype.end=function(){switch(this.state){case wb:this.resolve(this.returnValue);break;case xb:this.reject(this.storedException);break;default:this.reject(I(this.state))}},P.prototype.handleException=function(){this.state=xb},T(a),a.$traceurRuntime={assertObject:y,asyncWrap:Q,createClass:F,defaultSuperCall:H,exportStar:v,initGeneratorFunction:O,createGeneratorInstance:N,getOwnHashObject:i,setProperty:s,setupGlobals:T,spread:z,superCall:B,superGet:C,superSet:D,toObject:x,toProperty:m,type:gb,"typeof":f}}}("undefined"!=typeof global?global:this),function(){function a(a,b,c,d,e,f,g){var h=[];return a&&h.push(a,":"),c&&(h.push("//"),b&&h.push(b,"@"),h.push(c),d&&h.push(":",d)),e&&h.push(e),f&&h.push("?",f),g&&h.push("#",g),h.join("")}function b(a){return a.match(h)}function c(a){if("/"===a)return"/";for(var b="/"===a[0]?"/":"",c="/"===a.slice(-1)?"/":"",d=a.split("/"),e=[],f=0,g=0;g<d.length;g++){var h=d[g];switch(h){case"":case".":break;case"..":e.length?e.pop():f++;break;default:e.push(h)}}if(!b){for(;f-->0;)e.unshift("..");0===e.length&&e.push(".")}return b+e.join("/")+c}function d(b){var d=b[i.PATH]||"";return d=c(d),b[i.PATH]=d,a(b[i.SCHEME],b[i.USER_INFO],b[i.DOMAIN],b[i.PORT],b[i.PATH],b[i.QUERY_DATA],b[i.FRAGMENT])}function e(a){var c=b(a);return d(c)}function f(a,c){var e=b(c),f=b(a);if(e[i.SCHEME])return d(e);e[i.SCHEME]=f[i.SCHEME];for(var g=i.SCHEME;g<=i.PORT;g++)e[g]||(e[g]=f[g]);if("/"==e[i.PATH][0])return d(e);var h=f[i.PATH],j=h.lastIndexOf("/");return h=h.slice(0,j+1)+e[i.PATH],e[i.PATH]=h,d(e)}function g(a){if(!a)return!1;if("/"===a[0])return!0;var c=b(a);return c[i.SCHEME]?!0:!1}var h=new RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$"),i={SCHEME:1,USER_INFO:2,DOMAIN:3,PORT:4,PATH:5,QUERY_DATA:6,FRAGMENT:7};$traceurRuntime.canonicalizeUrl=e,$traceurRuntime.isAbsolute=g,$traceurRuntime.removeDotSegments=c,$traceurRuntime.resolveUrl=f}(),function(a){"use strict";function b(a){if(a){var b=o.normalize(a);return i[b]}}function c(a){var b=arguments[1],c=Object.create(null);return Object.getOwnPropertyNames(a).forEach(function(d){var e,f;if(b===n){var g=Object.getOwnPropertyDescriptor(a,d);g.get&&(e=g.get)}e||(f=a[d],e=function(){return f}),Object.defineProperty(c,d,{get:e,enumerable:!0})}),Object.preventExtensions(c),c}var d,e=$traceurRuntime.assertObject($traceurRuntime),f=e.canonicalizeUrl,g=e.resolveUrl,h=e.isAbsolute,i=Object.create(null);d=a.location&&a.location.href?g(a.location.href,"./"):"";var j=function(a,b){this.url=a,this.value_=b};$traceurRuntime.createClass(j,{},{});var k=function(a,b){$traceurRuntime.superCall(this,l.prototype,"constructor",[a,null]),this.func=b},l=k;$traceurRuntime.createClass(k,{getUncoatedModule:function(){return this.value_?this.value_:this.value_=this.func.call(a)}},{},j);var m=Object.create(null),n={},o={normalize:function(a,b){if("string"!=typeof a)throw new TypeError("module name must be a string, not "+typeof a);if(h(a))return f(a);if(/[^\.]\/\.\.\//.test(a))throw new Error("module name embeds /../: "+a);return"."===a[0]&&b?g(b,a):f(a)},get:function(a){var d=b(a);if(!d)return void 0;var e=m[d.url];return e?e:(e=c(d.getUncoatedModule(),n),m[d.url]=e)},set:function(a,b){a=String(a),i[a]=new k(a,function(){return b}),m[a]=b},get baseURL(){return d},set baseURL(a){d=String(a)},registerModule:function(a,b){var c=o.normalize(a);if(i[c])throw new Error("duplicate module named "+c);i[c]=new k(c,b)},bundleStore:Object.create(null),register:function(a,b,c){b&&(b.length||c.length)?this.bundleStore[a]={deps:b,execute:function(){var a=arguments,d={};b.forEach(function(b,c){return d[b]=a[c]});var e=c.call(this,d);return e.execute.call(this),e.exports}}:this.registerModule(a,c)},getAnonymousModule:function(b){return new c(b.call(a),n)},getForTesting:function(a){var b=this;return this.testingPrefix_||Object.keys(m).some(function(a){var c=/(traceur@[^\/]*\/)/.exec(a);return c?(b.testingPrefix_=c[1],!0):void 0}),this.get(this.testingPrefix_+a)}};o.set("@traceur/src/runtime/ModuleStore",new c({ModuleStore:o}));var p=$traceurRuntime.setupGlobals;$traceurRuntime.setupGlobals=function(a){p(a)},$traceurRuntime.ModuleStore=o,a.System={register:o.register.bind(o),get:o.get,set:o.set,normalize:o.normalize},$traceurRuntime.getModuleImpl=function(a){var c=b(a);return c&&c.getUncoatedModule()}}("undefined"!=typeof global?global:this),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/utils",[],function(){"use strict";function a(a){return 0|a}function b(a){return a&&("object"==typeof a||"function"==typeof a)}function c(a){return"function"==typeof a}function d(a){return a=+a,isNaN(a)?0:isFinite(a)&&0!==a?a>0?Math.floor(a):Math.ceil(a):a}function e(a){var b=d(a);return 0>b?0:Math.min(b,g)}var f=$traceurRuntime.toObject,g=Math.pow(2,53)-1;return{get toObject(){return f},get toUint32(){return a},get isObject(){return b},get isCallable(){return c},get toInteger(){return d},get toLength(){return e}}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/Array",[],function(){"use strict";function a(a){var b=void 0!==arguments[1]?arguments[1]:0,c=arguments[2],d=h(this),e=g(d.length),i=f(b),j=void 0!==c?f(c):e;for(i=0>i?Math.max(e+i,0):Math.min(i,e),j=0>j?Math.max(e+j,0):Math.min(j,e);j>i;)d[i]=a,i++;return d}function b(a){var b=arguments[1];return d(this,a,b)}function c(a){var b=arguments[1];return d(this,a,b,!0)}function d(a,b){var c=arguments[2],d=void 0!==arguments[3]?arguments[3]:!1,e=h(a),f=g(e.length);if(!i(b))throw TypeError();for(var j=0;f>j;j++)if(j in e){var k=e[j];if(b.call(c,k,j,e))return d?j:k}return d?-1:void 0}var e=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/utils")),f=e.toInteger,g=e.toLength,h=e.toObject,i=e.isCallable;return{get fill(){return a},get find(){return b},get findIndex(){return c}}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/ArrayIterator",[],function(){"use strict";function a(a,b){var c=h(a),d=new m;return d.iteratorObject_=c,d.arrayIteratorNextIndex_=0,d.arrayIterationKind_=b,d}function b(a,b){return{value:a,done:b}}function c(){return a(this,l)}function d(){return a(this,j)}function e(){return a(this,k)}var f,g=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/utils")),h=g.toObject,i=g.toUint32,j=1,k=2,l=3,m=function(){};return $traceurRuntime.createClass(m,(f={},Object.defineProperty(f,"next",{value:function(){var a=h(this),c=a.iteratorObject_;if(!c)throw new TypeError("Object is not an ArrayIterator");var d=a.arrayIteratorNextIndex_,e=a.arrayIterationKind_,f=i(c.length);return d>=f?(a.arrayIteratorNextIndex_=1/0,b(void 0,!0)):(a.arrayIteratorNextIndex_=d+1,e==k?b(c[d],!1):e==l?b([d,c[d]],!1):b(d,!1))},configurable:!0,enumerable:!0,writable:!0}),Object.defineProperty(f,Symbol.iterator,{value:function(){return this},configurable:!0,enumerable:!0,writable:!0}),f),{}),{get entries(){return c},get keys(){return d},get values(){return e}}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/Map",[],function(){"use strict";function a(a,b){if(c(b)){var e=d(b);return e&&a.objectIndex_[e.hash]}return"string"==typeof b?a.stringIndex_[b]:a.primitiveIndex_[b]}function b(a){a.entries_=[],a.objectIndex_=Object.create(null),a.stringIndex_=Object.create(null),a.primitiveIndex_=Object.create(null),a.deletedCount_=0}var c=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/utils")).isObject,d=$traceurRuntime.getOwnHashObject,e=Object.prototype.hasOwnProperty,f={},g=function(){var a=arguments[0];if(!c(this))throw new TypeError("Constructor Map requires 'new'");if(e.call(this,"entries_"))throw new TypeError("Map can not be reentrantly initialised");if(b(this),null!==a&&void 0!==a){var d=a[Symbol.iterator];if(void 0!==d)for(var f,g=a[Symbol.iterator]();!(f=g.next()).done;){var h=$traceurRuntime.assertObject(f.value),i=h[0],j=h[1];this.set(i,j)}}};return $traceurRuntime.createClass(g,{get size(){return this.entries_.length/2-this.deletedCount_},get:function(b){var c=a(this,b);return void 0!==c?this.entries_[c+1]:void 0},set:function(b,e){var f=c(b),g="string"==typeof b,h=a(this,b);if(void 0!==h)this.entries_[h+1]=e;else if(h=this.entries_.length,this.entries_[h]=b,this.entries_[h+1]=e,f){var i=d(b),j=i.hash;this.objectIndex_[j]=h}else g?this.stringIndex_[b]=h:this.primitiveIndex_[b]=h;return this},has:function(b){return void 0!==a(this,b)},"delete":function(a){var b,e,g=c(a),h="string"==typeof a;if(g){var i=d(a);i&&(b=this.objectIndex_[e=i.hash],delete this.objectIndex_[e])}else h?(b=this.stringIndex_[a],delete this.stringIndex_[a]):(b=this.primitiveIndex_[a],delete this.primitiveIndex_[a]);void 0!==b&&(this.entries_[b]=f,this.entries_[b+1]=void 0,this.deletedCount_++)},clear:function(){b(this)},forEach:function(a){for(var b=arguments[1],c=0,d=this.entries_.length;d>c;c+=2){var e=this.entries_[c],g=this.entries_[c+1];e!==f&&a.call(b,g,e,this)}}},{}),{get Map(){return g}}}),System.register("traceur-runtime@0.0.41/node_modules/rsvp/lib/rsvp/asap",[],function(){"use strict";function a(){return function(){process.nextTick(d)}}function b(){var a=0,b=new h(d),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function c(){return function(){setTimeout(d,1)}}function d(){for(var a=0;a<i.length;a++){var b=i[a],c=b[0],d=b[1];c(d)}i=[]}var e,f=function(a,b){var c=i.push([a,b]);1===c&&e()},g="undefined"!=typeof window?window:{},h=g.MutationObserver||g.WebKitMutationObserver,i=[];return e="undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?a():h?b():c(),{get default(){return f}}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/Promise",[],function(){"use strict";function a(a){return a&&"object"==typeof a&&void 0!==a.status_}function b(a){return a}function c(a){throw a}function d(a){var d=void 0!==arguments[1]?arguments[1]:b,f=void 0!==arguments[2]?arguments[2]:c,g=e(a.constructor);switch(a.status_){case void 0:throw TypeError;case 0:a.onResolve_.push(d,g),a.onReject_.push(f,g);break;case 1:k(a.value_,[d,g]);break;case-1:k(a.value_,[f,g])}return g.promise}function e(a){if(this===r){var b=g(new r(p));return{promise:b,resolve:function(a){h(b,a)},reject:function(a){i(b,a)}}}var c={};return c.promise=new a(function(a,b){c.resolve=a,c.reject=b}),c}function f(a,b,c,d,e){return a.status_=b,a.value_=c,a.onResolve_=d,a.onReject_=e,a}function g(a){return f(a,0,void 0,[],[])}function h(a,b){j(a,1,b,a.onResolve_)}function i(a,b){j(a,-1,b,a.onReject_)}function j(a,b,c,d){0===a.status_&&(k(c,d),f(a,b,c))}function k(a,b){o(function(){for(var c=0;c<b.length;c+=2)l(a,b[c],b[c+1])})}function l(b,c,e){try{var f=c(b);if(f===e.promise)throw new TypeError;a(f)?d(f,e.resolve,e.reject):e.resolve(f)}catch(g){try{e.reject(g)}catch(g){}}}function m(a){return a&&("object"==typeof a||"function"==typeof a)}function n(b,c){if(!a(c)&&m(c)){var d;try{d=c.then}catch(f){var g=s.call(b,f);return c[t]=g,g}if("function"==typeof d){var h=c[t];if(h)return h;var i=e(b);c[t]=i.promise;try{d.call(c,i.resolve,i.reject)}catch(f){i.reject(f)}return i.promise}}return c}var o=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/node_modules/rsvp/lib/rsvp/asap")).default,p={},q=function(a){if(a!==p){if("function"!=typeof a)throw new TypeError;var b=g(this);try{a(function(a){h(b,a)},function(a){i(b,a)})}catch(c){i(b,c)}}};$traceurRuntime.createClass(q,{"catch":function(a){return this.then(void 0,a)},then:function(e,f){"function"!=typeof e&&(e=b),"function"!=typeof f&&(f=c);var g=this,h=this.constructor;return d(this,function(b){return b=n(h,b),b===g?f(new TypeError):a(b)?b.then(e,f):e(b)},f)}},{resolve:function(a){return this===r?f(new r(p),1,a):new this(function(b){b(a)})},reject:function(a){return this===r?f(new r(p),-1,a):new this(function(b,c){c(a)})},cast:function(b){if(b instanceof this)return b;if(a(b)){var c=e(this);return d(b,c.resolve,c.reject),c.promise}return this.resolve(b)},all:function(a){var b=e(this),c=[];try{var d=a.length;if(0===d)b.resolve(c);else for(var f=0;f<a.length;f++)this.resolve(a[f]).then(function(a,e){c[a]=e,0===--d&&b.resolve(c)}.bind(void 0,f),function(a){b.reject(a)})}catch(g){b.reject(g)}return b.promise},race:function(a){var b=e(this);try{for(var c=0;c<a.length;c++)this.resolve(a[c]).then(function(a){b.resolve(a)},function(a){b.reject(a)})}catch(d){b.reject(d)}return b.promise}});var r=q,s=r.reject,t="@@thenable";return{get Promise(){return q}}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/String",[],function(){"use strict";function a(a){var b=String(this);if(null==this||"[object RegExp]"==h.call(a))throw TypeError();var c=b.length,d=String(a),e=(d.length,arguments.length>1?arguments[1]:void 0),f=e?Number(e):0;isNaN(f)&&(f=0);var g=Math.min(Math.max(f,0),c);return i.call(b,d,f)==g}function b(a){var b=String(this);if(null==this||"[object RegExp]"==h.call(a))throw TypeError();var c=b.length,d=String(a),e=d.length,f=c;if(arguments.length>1){var g=arguments[1];void 0!==g&&(f=g?Number(g):0,isNaN(f)&&(f=0))}var i=Math.min(Math.max(f,0),c),k=i-e;return 0>k?!1:j.call(b,d,k)==k}function c(a){if(null==this)throw TypeError();var b=String(this),c=b.length,d=String(a),e=(d.length,arguments.length>1?arguments[1]:void 0),f=e?Number(e):0;isNaN(f)&&(f=0);Math.min(Math.max(f,0),c);return-1!=i.call(b,d,f)}function d(a){if(null==this)throw TypeError();var b=String(this),c=a?Number(a):0;if(isNaN(c)&&(c=0),0>c||1/0==c)throw RangeError();if(0==c)return"";for(var d="";c--;)d+=b;return d}function e(a){if(null==this)throw TypeError();var b=String(this),c=b.length,d=a?Number(a):0;if(isNaN(d)&&(d=0),0>d||d>=c)return void 0;var e,f=b.charCodeAt(d);return f>=55296&&56319>=f&&c>d+1&&(e=b.charCodeAt(d+1),e>=56320&&57343>=e)?1024*(f-55296)+e-56320+65536:f}function f(a){var b=a.raw,c=b.length>>>0;if(0===c)return"";for(var d="",e=0;;){if(d+=b[e],e+1===c)return d;d+=arguments[++e]}}function g(){var a,b,c=[],d=Math.floor,e=-1,f=arguments.length;if(!f)return"";for(;++e<f;){var g=Number(arguments[e]);if(!isFinite(g)||0>g||g>1114111||d(g)!=g)throw RangeError("Invalid code point: "+g);65535>=g?c.push(g):(g-=65536,a=(g>>10)+55296,b=g%1024+56320,c.push(a,b))}return String.fromCharCode.apply(null,c)}var h=Object.prototype.toString,i=String.prototype.indexOf,j=String.prototype.lastIndexOf;return{get startsWith(){return a},get endsWith(){return b},get contains(){return c},get repeat(){return d},get codePointAt(){return e},get raw(){return f},get fromCodePoint(){return g}}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfills/polyfills",[],function(){"use strict";function a(a,b,c){b in a||Object.defineProperty(a,b,{value:c,configurable:!0,enumerable:!1,writable:!0})}function b(b,c){for(var d=0;d<c.length;d+=2){var e=c[d],f=c[d+1];a(b,e,f)}}function c(a){a.Promise||(a.Promise=i)}function d(a){a.Map||(a.Map=h)}function e(a){b(a.prototype,["codePointAt",k,"contains",l,"endsWith",m,"startsWith",q,"repeat",o]),b(a,["fromCodePoint",n,"raw",p])}function f(a,c){b(a.prototype,["entries",u,"keys",v,"values",w,"fill",r,"find",s,"findIndex",t]),c&&c.iterator&&Object.defineProperty(a.prototype,c.iterator,{value:w,configurable:!0,enumerable:!1,writable:!0})}function g(a){c(a),d(a),e(a.String),f(a.Array,a.Symbol)}var h=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/Map")).Map,i=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/Promise")).Promise,j=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/String")),k=j.codePointAt,l=j.contains,m=j.endsWith,n=j.fromCodePoint,o=j.repeat,p=j.raw,q=j.startsWith,j=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/Array")),r=j.fill,s=j.find,t=j.findIndex,j=$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/ArrayIterator")),u=j.entries,v=j.keys,w=j.values;g(this);var x=$traceurRuntime.setupGlobals;return $traceurRuntime.setupGlobals=function(a){x(a),g(a)},{}}),System.register("traceur-runtime@0.0.41/src/runtime/polyfill-import",[],function(){"use strict";$traceurRuntime.assertObject(System.get("traceur-runtime@0.0.41/src/runtime/polyfills/polyfills"));return{}}),System.get("traceur-runtime@0.0.41/src/runtime/polyfill-import"); +//# sourceMappingURL=traceur-runtime.min.map
\ No newline at end of file diff --git a/js/vendor/traceur-runtime/traceur-runtime.min.map b/js/vendor/traceur-runtime/traceur-runtime.min.map new file mode 100644 index 000000000..11092fb99 --- /dev/null +++ b/js/vendor/traceur-runtime/traceur-runtime.min.map @@ -0,0 +1 @@ +{"version":3,"file":"traceur-runtime.min.js","sources":["traceur-runtime.js"],"names":["global","nonEnum","value","configurable","enumerable","writable","newUniqueString","Math","floor","random","counter","createPrivateName","s","privateNames","isSymbol","symbol","SymbolValue","typeOf","v","Symbol","description","this","TypeError","key","$defineProperty","symbolDataProperty","symbolInternalProperty","symbolDescriptionProperty","freeze","symbolValues","getOwnHashObject","object","hashObject","hashProperty","self","$isExtensible","hashObjectProperties","hash","hashCounter","hashPropertyDescriptor","$create","undefined","$freeze","apply","arguments","preventExtensions","$preventExtensions","seal","$seal","toProperty","name","getOwnPropertyNames","rv","names","$getOwnPropertyNames","i","length","push","getOwnPropertyDescriptor","$getOwnPropertyDescriptor","getOwnPropertySymbols","hasOwnProperty","$hasOwnProperty","call","getOption","traceur","options","setProperty","sym","desc","defineProperty","descriptor","polyfillObject","Object","is","left","right","assign","target","p","source","props","$keys","mixin","prototype","method","exportStar","j","mod","get","isObject","x","toObject","$TypeError","$Object","assertObject","spread","k","valueToSpread","superDescriptor","homeObject","proto","$getPrototypeOf","result","superCall","args","superGet","superSet","set","getDescriptors","descriptors","createClass","ctor","staticObject","superClass","__proto__","getProtoParent","$defineProperties","defaultSuperCall","getInternalError","state","Error","GeneratorContext","GState","ST_NEWBORN","storedException","finallyFallThrough","sent_","returnValue","tryStack_","nextOrThrow","ctx","moveNext","action","ST_EXECUTING","ST_CLOSED","ST_SUSPENDED","sent","done","GeneratorFunction","GeneratorFunctionPrototype","createGeneratorInstance","innerFunction","functionObject","getMoveNext","ctxName","moveNextName","initGeneratorFunction","AsyncFunctionContext","err","Promise","resolve","reject","asyncWrap","createCallback","newState","errback","handleCatch","ex","last","catch","finally","handleException","setupGlobals","$traceurRuntime","create","defineProperties","getPrototypeOf","keys","toString","isExtensible","types","void","any","string","number","boolean","symbolValue","valueOf","iterator","END_STATE","RETHROW_STATE","pushTry","catchState","finallyState","popTry","pop",{"end":{"file":"traceur-runtime.js","comments_before":[],"nlb":false,"endpos":12621,"pos":12617,"col":8,"line":398,"value":"sent","type":"name"},"start":{"file":"traceur-runtime.js","comments_before":[],"nlb":false,"endpos":12621,"pos":12617,"col":8,"line":398,"value":"sent","type":"name"},"name":"sent"},"maybeThrow","sentIgnoreThrow","end","constructor","next","throw","type","typeof","buildFromEncodedParts","opt_scheme","opt_userInfo","opt_domain","opt_port","opt_path","opt_queryData","opt_fragment","out","join","split","uri","match","splitRe","removeDotSegments","path","leadingSlash","trailingSlash","slice","segments","up","pos","segment","unshift","joinAndCanonicalizePath","parts","ComponentIndex","PATH","SCHEME","USER_INFO","DOMAIN","PORT","QUERY_DATA","FRAGMENT","canonicalizeUrl","url","resolveUrl","base","baseParts","index","lastIndexOf","isAbsolute","RegExp","getUncoatedModuleInstantiator","ModuleStore","normalize","moduleInstantiators","Module","uncoatedModule","isLive","coatedModule","forEach","getter","liveModuleSentinel","descr","baseURL","$__2","location","href","UncoatedModuleEntry","value_","UncoatedModuleInstantiator","func","$UncoatedModuleInstantiator","getUncoatedModule","moduleInstances","refererName","test","normalizedName","m","moduleInstance","module","String","registerModule","bundleStore","register","deps","execute","$__0","depMap","dep","registryEntry","exports","getAnonymousModule","getForTesting","testingPrefix_","some","exec","System","bind","getModuleImpl","instantiator","toUint32","isCallable","toInteger","isNaN","isFinite","ceil","toLength","len","min","MAX_SAFE_LENGTH","pow","fill","start","fillStart","fillEnd","max","find","predicate","thisArg","findHelper","findIndex","returnIndex","$__3","createArrayIterator","array","kind","ArrayIterator","iteratorObject_","arrayIteratorNextIndex_","arrayIterationKind_","createIteratorResultObject","entries","ARRAY_ITERATOR_KIND_ENTRIES","ARRAY_ITERATOR_KIND_KEYS","values","ARRAY_ITERATOR_KIND_VALUES","$__5","$__6","itemKind","Infinity","lookupIndex","map","objectIndex_","stringIndex_","primitiveIndex_","initMap","entries_","deletedCount_","deletedSentinel","Map","iterable","iter","$__9","$__8","$__10","size","objectMode","stringMode","has","delete","clear","callbackFn","useNextTick","process","nextTick","flush","useMutationObserver","iterations","observer","BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","useSetTimeout","setTimeout","queue","tuple","callback","arg","scheduleFlush","$__default","browserGlobal","window","MutationObserver","WebKitMutationObserver","isPromise","status_","idResolveHandler","idRejectHandler","chain","promise","onResolve","onReject","deferred","getDeferred","onResolve_","onReject_","promiseEnqueue","C","$Promise","promiseInit","promiseRaw","promiseResolve","r","promiseReject","promiseSet","status","promiseDone","reactions","tasks","async","promiseHandle","handler","e","promiseCoerce","then","$PromiseReject","thenableSymbol","default","resolver","that","cast","all","resolutions","count","race","startsWith","search","$toString","stringLength","searchString","position","Number","$indexOf","endsWith","searchLength","$lastIndexOf","contains","repeat","n","RangeError","codePointAt","second","first","charCodeAt","raw","callsite","fromCodePoint","highSurrogate","lowSurrogate","codeUnits","codePoint","fromCharCode","indexOf","maybeDefineMethod","maybeAddFunctions","functions","polyfillPromise","polyfillCollections","polyfillString","polyfillArray","Array","polyfill","$__13"],"mappings":"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"}
\ No newline at end of file |