var $__app__ = (function() {
"use strict";
var __moduleName = "app";
(function(window, document, angular, $, OC, csrfToken, undefined) {
'use strict';
var app = angular.module('News', ['ngRoute', 'ngSanitize', 'ngAnimate']);
app.config(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);
})};
}));
$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 as Content',
templateUrl: 'content.html',
resolve: getResolve(feedType.SUBSCRIPTIONS),
type: feedType.SUBSCRIPTIONS
}).when('/items/starred', {
controller: 'ContentController as Content',
templateUrl: 'content.html',
resolve: getResolve(feedType.STARRED),
type: feedType.STARRED
}).when('/items/feeds/:id', {
controller: 'ContentController as Content',
templateUrl: 'content.html',
resolve: getResolve(feedType.FEED),
type: feedType.FEED
}).when('/items/folders/:id', {
controller: 'ContentController as Content',
templateUrl: 'content.html',
resolve: getResolve(feedType.FOLDER),
type: feedType.FOLDER
});
});
app.run((function($rootScope, $location, $http, $q, $interval, Loading, ItemResource, FeedResource, FolderResource, SettingsResource, Publisher, BASE_URL, FEED_TYPE, REFRESH_RATE) {
'use strict';
Loading.setLoading('global', true);
Publisher.subscribe(ItemResource).toChannels('items', 'newestItemId', 'starred');
Publisher.subscribe(FolderResource).toChannels('folders');
Publisher.subscribe(FeedResource).toChannels('feeds');
Publisher.subscribe(SettingsResource).toChannels('settings');
var settingsDeferred = $q.defer();
$http.get((BASE_URL + "/settings")).success((function(data) {
Publisher.publishAll(data);
settingsDeferred.resolve();
}));
var activeFeedDeferred = $q.defer();
var path = $location.path();
$http.get((BASE_URL + "/feeds/active")).success((function(data) {
var url;
switch (data.activeFeed.type) {
case FEED_TYPE.FEED:
url = ("/items/feeds/" + data.activeFeed.id);
break;
case FEED_TYPE.FOLDER:
url = ("/items/folders/" + data.activeFeed.id);
break;
case FEED_TYPE.STARRED:
url = '/items/starred';
break;
default:
url = '/items';
}
if (!/^\/items(\/(starred|feeds\/\d+|folders\/\d+))?\/?$/.test(path)) {
$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', function(Loading, FeedResource, FolderResource) {
'use strict';
this.loading = Loading;
this.isFirstRun = (function() {
return FeedResource.size() === 0 && FolderResource.size() === 0;
});
});
app.controller('ContentController', function(Publisher, FeedResource, ItemResource, SettingsResource, data, $route, $routeParams) {
'use strict';
var $__0 = this;
ItemResource.clear();
Publisher.publishAll(data);
this.isAutoPagingEnabled = true;
this.getItems = (function() {
return ItemResource.getAll();
});
this.toggleStar = (function(itemId) {
ItemResource.toggleStar(itemId);
});
this.markRead = (function(itemId) {
var item = ItemResource.get(itemId);
if (!item.keepUnread) {
ItemResource.markItemRead(itemId);
FeedResource.markItemOfFeedRead(item.feedId);
}
});
this.getFeed = (function(feedId) {
return FeedResource.getById(feedId);
});
this.toggleKeepUnread = (function(itemId) {
var item = ItemResource.get(itemId);
if (!item.unread) {
FeedResource.markItemOfFeedUnread(item.feedId);
ItemResource.markItemRead(itemId, false);
}
item.keepUnread = !item.keepUnread;
});
this.orderBy = (function() {
if (SettingsResource.get('oldestFirst')) {
return '-id';
} else {
return 'id';
}
});
this.isCompactView = (function() {
return SettingsResource.get('compact');
});
this.autoPagingEnabled = (function() {
return $__0.isAutoPagingEnabled;
});
this.markReadEnabled = (function() {
return !SettingsResource.get('preventReadOnScroll');
});
this.scrollRead = (function(itemIds) {
var itemId$__9;
var item$__10;
var ids = [];
var feedIds = [];
for (var $__3 = itemIds[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
itemId$__9 = $__4.value;
{
item$__10 = ItemResource.get(itemId$__9);
if (!item$__10.keepUnread) {
ids.push(itemId$__9);
feedIds.push(item$__10.feedId);
}
}
}
FeedResource.markItemsOfFeedsRead(feedIds);
ItemResource.markItemsRead(ids);
});
this.autoPage = (function() {
$__0.isAutoPagingEnabled = false;
var type = $route.current.$$route.type;
var id = $routeParams.id;
ItemResource.autoPage(type, id).success((function(data) {
Publisher.publishAll(data);
if (data.items.length > 0) {
$__0.isAutoPagingEnabled = true;
}
})).error((function() {
$__0.isAutoPagingEnabled = true;
}));
});
this.getRelativeDate = (function(timestamp) {
var languageCode$__11;
var date$__12;
if (timestamp !== undefined && timestamp !== '') {
languageCode$__11 = SettingsResource.get('language');
date$__12 = moment.unix(timestamp).locale(languageCode$__11).fromNow() + '';
return date$__12;
} else {
return '';
}
});
});
app.controller('NavigationController', function($route, FEED_TYPE, FeedResource, FolderResource, ItemResource, SettingsResource) {
'use strict';
var $__0 = this;
this.feedError = '';
this.folderError = '';
this.getFeeds = (function() {
return FeedResource.getAll();
});
this.getFolders = (function() {
return FolderResource.getAll();
});
this.markFolderRead = (function(folderId) {
var feed$__13;
FeedResource.markFolderRead(folderId);
for (var $__3 = FeedResource.getByFolderId(folderId)[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
feed$__13 = $__4.value;
{
ItemResource.markFeedRead(feed$__13.id);
}
}
});
this.markFeedRead = (function(feedId) {
ItemResource.markFeedRead(feedId);
FeedResource.markFeedRead(feedId);
});
this.markRead = (function() {
ItemResource.markRead();
FeedResource.markRead();
});
this.isShowAll = (function() {
return SettingsResource.get('showAll');
});
this.getFeedsOfFolder = (function(folderId) {
return FeedResource.getByFolderId(folderId);
});
this.getUnreadCount = (function() {
return FeedResource.getUnreadCount();
});
this.getFeedUnreadCount = (function(feedId) {
return FeedResource.getById(feedId).unreadCount;
});
this.getFolderUnreadCount = (function(folderId) {
return FeedResource.getFolderUnreadCount(folderId);
});
this.getStarredCount = (function() {
return ItemResource.getStarredCount();
});
this.toggleFolder = (function(folderName) {
FolderResource.toggleOpen(folderName);
});
this.hasFeeds = (function(folderId) {
return FeedResource.getFolderUnreadCount(folderId) !== undefined;
});
this.subFeedActive = (function(folderId) {
var feed$__14;
var type = $route.current.$$route.type;
if (type === FEED_TYPE.FEED) {
feed$__14 = FeedResource.getById($route.current.params.id);
if (feed$__14.folderId === folderId) {
return true;
}
}
return false;
});
this.isSubscriptionsActive = (function() {
return $route.current && $route.current.$$route.type === FEED_TYPE.SUBSCRIPTIONS;
});
this.isStarredActive = (function() {
return $route.current && $route.current.$$route.type === FEED_TYPE.STARRED;
});
this.isFolderActive = (function(folderId) {
var currentId = parseInt($route.current.params.id, 10);
return $route.current && $route.current.$$route.type === FEED_TYPE.FOLDER && currentId === folderId;
});
this.isFeedActive = (function(feedId) {
var currentId = parseInt($route.current.params.id, 10);
return $route.current && $route.current.$$route.type === FEED_TYPE.FEED && currentId === feedId;
});
this.folderNameExists = (function(folderName) {
return FolderResource.get(folderName) !== undefined;
});
this.isAddingFolder = (function() {
return true;
});
this.createFolder = (function(folder) {
console.log(folder.name);
folder.name = '';
});
this.createFeed = (function(feed) {
$__0.newFolder = false;
console.log(feed.url + feed.folder);
feed.url = '';
});
this.cancelRenameFolder = (function(folderId) {
console.log(folderId);
});
this.renameFeed = (function(feedId, feedTitle) {
console.log(feedId + feedTitle);
});
this.cancelRenameFeed = (function(feedId) {
console.log(feedId);
});
this.renameFolder = (function() {
console.log('TBD');
});
this.deleteFeed = (function(feedUrl) {
console.log(feedUrl);
});
this.deleteFolder = (function(folderName) {
console.log(folderName);
});
this.moveFeed = (function(feedId, folderId) {
console.log(feedId + folderId);
});
});
app.controller('SettingsController', function($route, SettingsResource, FeedResource) {
'use strict';
var $__0 = this;
this.importing = false;
this.opmlImportError = false;
this.articleImportError = false;
var set = (function(key, value) {
SettingsResource.set(key, value);
if (['showAll', 'oldestFirst'].indexOf(key) >= 0) {
$route.reload();
}
});
this.toggleSetting = (function(key) {
set(key, !$__0.getSetting(key));
});
this.getSetting = (function(key) {
return SettingsResource.get(key);
});
this.feedSize = (function() {
return FeedResource.size();
});
this.importOpml = (function(content) {
console.log(content);
});
this.importArticles = (function(content) {
console.log(content);
});
});
app.filter('trustUrl', (function($sce) {
'use strict';
return (function(url) {
return $sce.trustAsResourceUrl(url);
});
}));
app.filter('unreadCountFormatter', (function() {
'use strict';
return (function(unreadCount) {
if (unreadCount > 999) {
return '999+';
}
return unreadCount;
});
}));
app.factory('FeedResource', (function(Resource, $http, BASE_URL) {
'use strict';
var FeedResource = function FeedResource($http, BASE_URL) {
$traceurRuntime.superCall(this, $FeedResource.prototype, "constructor", [$http, BASE_URL, 'url']);
this.ids = {};
this.unreadCount = 0;
this.folderUnreadCount = {};
this.folderIds = {};
this.deleted = null;
};
var $FeedResource = FeedResource;
($traceurRuntime.createClass)(FeedResource, {
receive: function(data) {
$traceurRuntime.superCall(this, $FeedResource.prototype, "receive", [data]);
this.updateUnreadCache();
this.updateFolderCache();
},
updateUnreadCache: function() {
var $__56,
$__57,
$__58,
$__59,
$__60;
var value$__15;
this.unreadCount = 0;
this.folderUnreadCount = {};
for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
value$__15 = $__4.value;
{
if (value$__15.unreadCount) {
this.unreadCount += value$__15.unreadCount;
}
if (value$__15.folderId !== undefined) {
$traceurRuntime.setProperty(this.folderUnreadCount, value$__15.folderId, this.folderUnreadCount[$traceurRuntime.toProperty(value$__15.folderId)] || 0);
($__56 = this.folderUnreadCount, $__57 = value$__15.folderId, $__58 = value$__15.unreadCount, $__59 = $__56[$traceurRuntime.toProperty($__57)], $__60 = $__59 + $__58, $traceurRuntime.setProperty($__56, $__57, $__60), $__60);
}
}
}
},
updateFolderCache: function() {
var feed$__16;
this.folderIds = {};
for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
feed$__16 = $__4.value;
{
$traceurRuntime.setProperty(this.folderIds, feed$__16.folderId, this.folderIds[$traceurRuntime.toProperty(feed$__16.folderId)] || []);
this.folderIds[$traceurRuntime.toProperty(feed$__16.folderId)].push(feed$__16);
}
}
},
add: function(value) {
$traceurRuntime.superCall(this, $FeedResource.prototype, "add", [value]);
if (value.id !== undefined) {
$traceurRuntime.setProperty(this.ids, value.id, this.hashMap[$traceurRuntime.toProperty(value.url)]);
}
},
delete: function(url) {
var feed = this.get(url);
this.deleted = feed;
delete this.ids[$traceurRuntime.toProperty(feed.id)];
$traceurRuntime.superCall(this, $FeedResource.prototype, "delete", [url]);
this.updateUnreadCache();
this.updateFolderCache();
return this.http.delete((this.BASE_URL + "/feeds/" + feed.id));
},
markRead: function() {
var feed$__17;
for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
feed$__17 = $__4.value;
{
feed$__17.unreadCount = 0;
}
}
this.unreadCount = 0;
this.folderUnreadCount = {};
},
markFeedRead: function(feedId) {
this.ids[$traceurRuntime.toProperty(feedId)].unreadCount = 0;
this.updateUnreadCache();
},
markFolderRead: function(folderId) {
var feed$__18;
for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
feed$__18 = $__4.value;
{
if (feed$__18.folderId === folderId) {
feed$__18.unreadCount = 0;
}
}
}
this.updateUnreadCache();
},
markItemOfFeedRead: function(feedId) {
this.ids[$traceurRuntime.toProperty(feedId)].unreadCount -= 1;
this.updateUnreadCache();
},
markItemsOfFeedsRead: function(feedIds) {
var feedId$__19;
for (var $__3 = feedIds[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
feedId$__19 = $__4.value;
{
this.ids[$traceurRuntime.toProperty(feedId$__19)].unreadCount -= 1;
}
}
this.updateUnreadCache();
},
markItemOfFeedUnread: function(feedId) {
this.ids[$traceurRuntime.toProperty(feedId)].unreadCount += 1;
this.updateUnreadCache();
},
getUnreadCount: function() {
return this.unreadCount;
},
getFolderUnreadCount: function(folderId) {
return this.folderUnreadCount[$traceurRuntime.toProperty(folderId)];
},
getByFolderId: function(folderId) {
return this.folderIds[$traceurRuntime.toProperty(folderId)] || [];
},
getById: function(feedId) {
return this.ids[$traceurRuntime.toProperty(feedId)];
},
rename: function(url, name) {
var feed = this.get(url);
feed.title = name;
return this.http({
method: 'POST',
url: (this.BASE_URL + "/feeds/" + feed.id + "/rename"),
data: {feedTitle: name}
});
},
move: function(url, folderId) {
var feed = this.get(url);
feed.folderId = folderId;
this.updateFolderCache();
return this.http({
method: 'POST',
url: (this.BASE_URL + "/feeds/" + feed.id + "/move"),
data: {parentFolderId: folderId}
});
},
create: function(url, folderId) {
var title = arguments[2] !== (void 0) ? arguments[2] : null;
if (title) {
title = title.toUpperCase();
}
var feed = {
url: url,
folderId: folderId,
title: title,
faviconLink: '../css/loading.gif'
};
if (!this.get(url)) {
this.add(feed);
}
this.updateFolderCache();
console.log(feed);
},
undoDelete: function() {
if (this.deleted) {
this.add(this.deleted);
return this.http.post((this.BASE_URL + "/feeds/" + this.deleted.id + "/restore"));
}
this.updateFolderCache();
this.updateUnreadCache();
}
}, {}, Resource);
return new FeedResource($http, BASE_URL);
}));
app.factory('FolderResource', (function(Resource, $http, BASE_URL) {
'use strict';
var FolderResource = function FolderResource($http, BASE_URL) {
$traceurRuntime.superCall(this, $FolderResource.prototype, "constructor", [$http, BASE_URL, 'name']);
this.deleted = null;
};
var $FolderResource = FolderResource;
($traceurRuntime.createClass)(FolderResource, {
delete: function(folderName) {
var folder = this.get(folderName);
this.deleted = folder;
$traceurRuntime.superCall(this, $FolderResource.prototype, "delete", [folderName]);
return this.http.delete((this.BASE_URL + "/folders/" + folder.id));
},
toggleOpen: function(folderName) {
var folder = this.get(folderName);
folder.opened = !folder.opened;
return this.http({
url: (this.BASE_URL + "/folders/" + folder.id + "/open"),
method: 'POST',
data: {
folderId: folder.id,
open: folder.opened
}
});
},
rename: function(folderName, toFolderName) {
toFolderName = toFolderName.toUpperCase();
var folder = this.get(folderName);
if (!this.get(toFolderName)) {
folder.name = toFolderName;
delete this.hashMap[$traceurRuntime.toProperty(folderName)];
$traceurRuntime.setProperty(this.hashMap, toFolderName, folder);
}
return this.http({
url: (this.BASE_URL + "/folders/" + folder.id + "/rename"),
method: 'POST',
data: {folderName: toFolderName}
});
},
create: function(folderName) {
var folder$__20;
folderName = folderName.toUpperCase();
if (!this.get(folderName)) {
folder$__20 = {name: folderName};
this.add(folder$__20);
}
return this.http({
url: (this.BASE_URL + "/folders"),
method: 'POST',
data: {folderName: folderName}
});
},
undoDelete: function() {
if (this.deleted) {
this.add(this.deleted);
return this.http.post((this.BASE_URL + "/folders/" + this.deleted.id + "/restore"));
}
}
}, {}, Resource);
return new FolderResource($http, BASE_URL);
}));
app.factory('ItemResource', (function(Resource, $http, BASE_URL, ITEM_BATCH_SIZE) {
'use strict';
var ItemResource = function ItemResource($http, BASE_URL, ITEM_BATCH_SIZE) {
$traceurRuntime.superCall(this, $ItemResource.prototype, "constructor", [$http, BASE_URL]);
this.starredCount = 0;
this.batchSize = ITEM_BATCH_SIZE;
};
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;
},
star: function(itemId) {
var isStarred = arguments[1] !== (void 0) ? arguments[1] : true;
var it = this.get(itemId);
var url = (this.BASE_URL + "/items/" + it.feedId + "/" + it.guidHash + "/star");
it.starred = isStarred;
if (isStarred) {
this.starredCount += 1;
} else {
this.starredCount -= 1;
}
return this.http({
url: url,
method: 'POST',
data: {isStarred: isStarred}
});
},
toggleStar: function(itemId) {
if (this.get(itemId).starred) {
this.star(itemId, false);
} else {
this.star(itemId, true);
}
},
markItemRead: function(itemId) {
var isRead = arguments[1] !== (void 0) ? arguments[1] : true;
this.get(itemId).unread = !isRead;
return this.http({
url: (this.BASE_URL + "/items/" + itemId + "/read"),
method: 'POST',
data: {isRead: isRead}
});
},
markItemsRead: function(itemIds) {
var itemId$__21;
for (var $__3 = itemIds[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
itemId$__21 = $__4.value;
{
this.get(itemId$__21).unread = false;
}
}
return this.http({
url: (this.BASE_URL + "/items/read/multiple"),
method: 'POST',
data: {itemIds: itemIds}
});
},
markFeedRead: function(feedId) {
var item$__22;
var read = arguments[1] !== (void 0) ? arguments[1] : true;
for (var $__3 = this.values.filter((function(i) {
return i.feedId === feedId;
}))[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
item$__22 = $__4.value;
{
item$__22.unread = !read;
}
}
return this.http.post((this.BASE_URL + "/feeds/" + feedId + "/read"));
},
markRead: function() {
var item$__23;
for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
item$__23 = $__4.value;
{
item$__23.unread = false;
}
}
return this.http.post((this.BASE_URL + "/items/read"));
},
autoPage: function(type, id) {
return this.http({
url: (this.BASE_URL + "/items"),
method: 'GET',
params: {
type: type,
id: id,
offset: this.size(),
limit: this.batchSize
}
});
}
}, {}, Resource);
return new ItemResource($http, BASE_URL, ITEM_BATCH_SIZE);
}));
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() {
var channel$__24;
for (var channels = [],
$__7 = 0; $__7 < arguments.length; $__7++)
$traceurRuntime.setProperty(channels, $__7, arguments[$traceurRuntime.toProperty($__7)]);
for (var $__3 = channels[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
channel$__24 = $__4.value;
{
$traceurRuntime.setProperty($__0.channels, channel$__24, $__0.channels[$traceurRuntime.toProperty(channel$__24)] || []);
$__0.channels[$traceurRuntime.toProperty(channel$__24)].push(obj);
}
}
})};
});
this.publishAll = (function(data) {
var $__8$__25,
channel$__26,
messages$__27;
var listener$__28;
for (var $__5 = items(data)[$traceurRuntime.toProperty(Symbol.iterator)](),
$__6; !($__6 = $__5.next()).done; ) {
$__8$__25 = $__6.value;
channel$__26 = $__8$__25[0];
messages$__27 = $__8$__25[1];
{
if ($__0.channels[$traceurRuntime.toProperty(channel$__26)] !== undefined) {
for (var $__3 = $__0.channels[$traceurRuntime.toProperty(channel$__26)][$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
listener$__28 = $__4.value;
{
listener$__28.receive(messages$__27, channel$__26);
}
}
}
}
}
});
});
app.factory('Resource', (function() {
'use strict';
var Resource = function Resource(http, BASE_URL) {
var id = arguments[2] !== (void 0) ? arguments[2] : 'id';
this.id = id;
this.values = [];
this.hashMap = {};
this.http = http;
this.BASE_URL = BASE_URL;
};
($traceurRuntime.createClass)(Resource, {
receive: function(objs) {
var obj$__29;
for (var $__3 = objs[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
obj$__29 = $__4.value;
{
this.add(obj$__29);
}
}
},
add: function(obj) {
var $__8$__30,
key$__31,
value$__32;
var existing = this.hashMap[$traceurRuntime.toProperty(obj[$traceurRuntime.toProperty(this.id)])];
if (existing === undefined) {
this.values.push(obj);
$traceurRuntime.setProperty(this.hashMap, obj[$traceurRuntime.toProperty(this.id)], obj);
} else {
for (var $__3 = items(obj)[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
$__8$__30 = $__4.value;
key$__31 = $__8$__30[0];
value$__32 = $__8$__30[1];
{
$traceurRuntime.setProperty(existing, key$__31, value$__32);
}
}
}
},
size: function() {
return this.values.length;
},
get: function(id) {
return this.hashMap[$traceurRuntime.toProperty(id)];
},
delete: function(id) {
var $__0 = this;
var deleteAtIndex = this.values.findIndex((function(e) {
return e[$traceurRuntime.toProperty($__0.id)] === id;
}));
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('SettingsResource', function($http, BASE_URL) {
'use strict';
var $__0 = this;
this.settings = {
language: 'en',
showAll: false,
compact: false,
oldestFirst: false
};
this.defaultLanguageCode = 'en';
this.supportedLanguageCodes = ['ar-ma', 'ar', 'bg', 'ca', 'cs', 'cv', 'da', 'de', 'el', 'en-ca', 'en-gb', 'eo', 'es', 'et', 'eu', 'fi', 'fr-ca', 'fr', 'gl', 'he', 'hi', 'hu', 'id', 'is', 'it', 'ja', 'ka', 'ko', 'lv', 'ms-my', 'nb', 'ne', 'nl', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'th', 'tr', 'tzm-la', 'tzm', 'uk', 'zh-cn', 'zh-tw'];
this.receive = (function(data) {
var $__8$__33,
key$__34,
value$__35;
for (var $__3 = items(data)[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
$__8$__33 = $__4.value;
key$__34 = $__8$__33[0];
value$__35 = $__8$__33[1];
{
if (key$__34 === 'language') {
value$__35 = $__0.processLanguageCode(value$__35);
}
$traceurRuntime.setProperty($__0.settings, key$__34, value$__35);
}
}
});
this.get = (function(key) {
return $__0.settings[$traceurRuntime.toProperty(key)];
});
this.set = (function(key, value) {
$traceurRuntime.setProperty($__0.settings, key, value);
var data = {};
$traceurRuntime.setProperty(data, key, value);
return $http({
url: (BASE_URL + "/settings"),
method: 'POST',
data: data
});
});
this.processLanguageCode = (function(languageCode) {
languageCode = languageCode.replace('_', '-').toLowerCase();
if ($__0.supportedLanguageCodes.indexOf(languageCode) < 0) {
languageCode = languageCode.split('-')[0];
}
if ($__0.supportedLanguageCodes.indexOf(languageCode) < 0) {
languageCode = $__0.defaultLanguageCode;
}
return languageCode;
});
});
(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 item$__36;
var items = scrollArea.find('.item');
for (var $__3 = items[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
item$__36 = $__4.value;
{
item$__36 = $(item$__36);
if (item$__36.position().top > 1) {
scrollToItem(scrollArea, item$__36);
return;
}
}
}
scrollArea.scrollTop(scrollArea.prop('scrollHeight'));
});
var scrollToPreviousItem = (function(scrollArea) {
var item$__37;
var previous$__38;
var items = scrollArea.find('.item');
for (var $__3 = items[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
item$__37 = $__4.value;
{
item$__37 = $(item$__37);
if (item$__37.position().top >= 0) {
previous$__38 = item$__37.prev();
if (previous$__38.length > 0) {
scrollToItem(scrollArea, previous$__38);
}
return;
}
}
}
if (items.length > 0) {
scrollToItem(scrollArea, items.last());
}
});
var getActiveItem = (function(scrollArea) {
var item$__39;
var items = scrollArea.find('.item');
for (var $__3 = items[$traceurRuntime.toProperty(Symbol.iterator)](),
$__4; !($__4 = $__3.next()).done; ) {
item$__39 = $__4.value;
{
item$__39 = $(item$__39);
if ((item$__39.height() + item$__39.position().top) > 30) {
return item$__39;
}
}
}
});
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));
var call = Function.prototype.call.bind(Function.prototype.call);
var hasOwn = Object.prototype.hasOwnProperty;
window.items = function(obj) {
'use strict';
var $__2;
return ($__2 = {}, Object.defineProperty($__2, Symbol.iterator, {
value: function() {
return ($traceurRuntime.initGeneratorFunction(function $__51() {
var $__52,
$__53,
$__54,
$__55,
x$__40;
return $traceurRuntime.createGeneratorInstance(function($ctx) {
while (true)
switch ($ctx.state) {
case 0:
$__52 = [];
$__53 = obj;
for ($__54 in $__53)
$__52.push($__54);
$ctx.state = 15;
break;
case 15:
$__55 = 0;
$ctx.state = 13;
break;
case 13:
$ctx.state = ($__55 < $__52.length) ? 9 : -2;
break;
case 4:
$__55++;
$ctx.state = 13;
break;
case 9:
x$__40 = $__52[$traceurRuntime.toProperty($__55)];
$ctx.state = 10;
break;
case 10:
$ctx.state = (!($traceurRuntime.toProperty(x$__40) in $__53)) ? 4 : 7;
break;
case 7:
$ctx.state = (call(hasOwn, obj, x$__40)) ? 1 : 4;
break;
case 1:
$ctx.state = 2;
return [x$__40, obj[$traceurRuntime.toProperty(x$__40)]];
case 2:
$ctx.maybeThrow();
$ctx.state = 4;
break;
default:
return $ctx.end();
}
}, $__51, this);
}))();
},
configurable: true,
enumerable: true,
writable: true
}), $__2);
};
window.enumerate = function(list) {
'use strict';
var $__2;
return ($__2 = {}, Object.defineProperty($__2, Symbol.iterator, {
value: function() {
return ($traceurRuntime.initGeneratorFunction(function $__51() {
var counter$__41;
return $traceurRuntime.createGeneratorInstance(function($ctx) {
while (true)
switch ($ctx.state) {
case 0:
counter$__41 = 0;
$ctx.state = 7;
break;
case 7:
$ctx.state = (counter$__41 < list.length) ? 1 : -2;
break;
case 4:
counter$__41 += 1;
$ctx.state = 7;
break;
case 1:
$ctx.state = 2;
return [counter$__41, list[$traceurRuntime.toProperty(counter$__41)]];
case 2:
$ctx.maybeThrow();
$ctx.state = 4;
break;
default:
return $ctx.end();
}
}, $__51, this);
}))();
},
configurable: true,
enumerable: true,
writable: true
}), $__2);
};
window.reverse = function(list) {
'use strict';
var $__2;
return ($__2 = {}, Object.defineProperty($__2, Symbol.iterator, {
value: function() {
return ($traceurRuntime.initGeneratorFunction(function $__51() {
var counter$__42;
return $traceurRuntime.createGeneratorInstance(function($ctx) {
while (true)
switch ($ctx.state) {
case 0:
counter$__42 = list.length;
$ctx.state = 7;
break;
case 7:
$ctx.state = (counter$__42 >= 0) ? 1 : -2;
break;
case 4:
counter$__42 -= 1;
$ctx.state = 7;
break;
case 1:
$ctx.state = 2;
return list[$traceurRuntime.toProperty(counter$__42)];
case 2:
$ctx.maybeThrow();
$ctx.state = 4;
break;
default:
return $ctx.end();
}
}, $__51, this);
}))();
},
configurable: true,
enumerable: true,
writable: true
}), $__2);
};
app.run((function($document, $rootScope) {
'use strict';
$document.click((function(event) {
$rootScope.$broadcast('documentClicked', event);
}));
}));
app.directive('appNavigationEntryUtils', (function() {
'use strict';
return {
restrict: 'C',
link: (function(scope, elm) {
var menu = elm.siblings('.app-navigation-entry-menu');
var button = $(elm).find('.app-navigation-entry-utils-menu-button button');
button.click((function() {
menu.toggleClass('open');
}));
scope.$on('documentClicked', (function(scope, event) {
if (event.target !== button[0]) {
menu.removeClass('open');
}
}));
})
};
}));
app.directive('newsAudio', (function() {
'use strict';
return {
restrict: 'E',
scope: {
src: '@',
type: '@'
},
transclude: true,
template: '' + '' + '',
link: (function(scope, elm) {
var source = elm.children().children('source')[0];
var cantPlay = false;
source.addEventListener('error', (function() {
scope.$apply((function() {
cantPlay = true;
}));
}));
scope.cantPlay = (function() {
return cantPlay;
});
})
};
}));
app.directive('newsAutoFocus', (function() {
'use strict';
return (function(scope, elem, attrs) {
if (attrs.newsAutofocus) {
$(attrs.newsAutofocus).focus();
} else {
elem.focus();
}
});
}));
app.directive('newsBindHtmlUnsafe', (function() {
'use strict';
return (function(scope, elem, attr) {
scope.$watch(attr.newsBindHtmlUnsafe, (function() {
elem.html(scope.$eval(attr.newsBindHtmlUnsafe));
}));
});
}));
app.directive('newsDraggable', (function() {
'use strict';
return (function(scope, elem, attr) {
var options = scope.$eval(attr.newsDraggable);
if (angular.isDefined(options)) {
elem.draggable(options);
} else {
elem.draggable();
}
});
}));
app.directive('newsDroppable', (function($rootScope) {
'use strict';
return (function(scope, elem, attr) {
var details = {
accept: '.feed',
hoverClass: 'drag-and-drop',
greedy: true,
drop: (function(event, ui) {
$('.drag-and-drop').removeClass('drag-and-drop');
var data = {
folderId: parseInt(elem.data('id'), 10),
feedId: parseInt($(ui.draggable).data('id'), 10)
};
$rootScope.$broadcast('moveFeedToFolder', data);
scope.$apply(attr.droppable);
})
};
elem.droppable(details);
});
}));
app.directive('newsFocus', (function($timeout, $interpolate) {
'use strict';
return (function(scope, elem, attrs) {
elem.click((function() {
var toReadd = $($interpolate(attrs.newsFocus)(scope));
$timeout((function() {
toReadd.focus();
}), 500);
}));
});
}));
app.directive('newsReadFile', (function() {
'use strict';
return (function(scope, elem, attr) {
elem.change((function() {
var file = elem[0].files[0];
var reader = new FileReader();
reader.onload = (function(event) {
elem[0].value = 0;
scope.$fileContent = event.target.result;
scope.$apply(attr.newsReadFile);
});
reader.readAsText(file);
}));
});
}));
app.directive('newsScroll', (function($timeout) {
'use strict';
var autoPage = (function(enabled, limit, elem, scope) {
var counter$__43;
var articles$__44;
var item$__46;
if (enabled) {
counter$__43 = 0;
articles$__44 = elem.find('.item');
for (var i$__45 = articles$__44.length - 1; i$__45 >= 0; i$__45 -= 1) {
item$__46 = $(articles$__44[$traceurRuntime.toProperty(i$__45)]);
if (counter$__43 >= limit) {
break;
}
if (item$__46.position().top < 0) {
scope.$apply(scope.newsScrollAutoPage);
break;
}
counter$__43 += 1;
}
}
});
var markRead = (function(enabled, elem, scope) {
var ids$__47;
var articles$__48;
var item$__50;
if (enabled) {
ids$__47 = [];
articles$__48 = elem.find('.item:not(.read)');
for (var i$__49 = 0; i$__49 < articles$__48.length; i$__49 += 1) {
item$__50 = $(articles$__48[$traceurRuntime.toProperty(i$__49)]);
if (item$__50.position().top <= -50) {
ids$__47.push(parseInt(item$__50.data('id'), 10));
} else {
break;
}
}
scope.itemIds = ids$__47;
scope.$apply(scope.newsScrollMarkRead);
}
});
return {
restrict: 'A',
scope: {
'newsScrollAutoPage': '&',
'newsScrollMarkRead': '&',
'newsScrollEnabledMarkRead': '=',
'newsScrollEnabledAutoPage': '=',
'newsScrollMarkReadTimeout': '@',
'newsScrollTimeout': '@',
'newsScrollAutoPageWhenLeft': '@'
},
link: (function(scope, elem) {
var allowScroll = true;
var scrollTimeout = scope.newsScrollTimeout || 1;
var markReadTimeout = scope.newsScrollMarkReadTimeout || 1;
var autoPageLimit = scope.newsScrollAutoPageWhenLeft || 50;
var scrollHandler = (function() {
if (allowScroll) {
allowScroll = false;
$timeout((function() {
allowScroll = true;
}), scrollTimeout * 1000);
autoPage(scope.newsScrollEnabledAutoPage, autoPageLimit, elem, scope);
$timeout((function() {
markRead(scope.newsScrollEnabledMarkRead, elem, scope);
}), markReadTimeout * 1000);
}
});
elem.on('scroll', scrollHandler);
scope.$on('$destroy', (function() {
elem.off('scroll', scrollHandler);
}));
})
};
}));
app.directive('newsTitleUnreadCount', (function($window) {
'use strict';
var baseTitle = $window.document.title;
return {
restrict: 'E',
scope: {unreadCount: '@'},
link: (function(scope, elem, attrs) {
attrs.$observe('unreadCount', (function(value) {
var titles = baseTitle.split('-');
if (value !== '0') {
$window.document.title = titles[0] + '(' + value + ') - ' + titles[1];
}
}));
})
};
}));
app.directive('newsTriggerClick', (function() {
'use strict';
return (function(scope, elm, attr) {
elm.click((function() {
$(attr.newsTriggerClick).trigger('click');
}));
});
}));
})(window, document, angular, jQuery, OC, oc_requesttoken);
return {};
})();