From 6406e6816bfd892c71c59737bf631d211c84a805 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 26 Jun 2016 21:31:58 +0800 Subject: [PATCH] support customize page title --- src/index.html | 1 + src/langs/zh_CN.json | 2 ++ src/scripts/config/constants.js | 3 +- src/scripts/config/defaultLanguage.js | 2 ++ src/scripts/controllers/main.js | 9 +++++- src/scripts/directives/tooltip.js | 32 ++++++++++++++++++++ src/scripts/services/ariaNgSettingService.js | 20 +++++++++++- src/views/settings-ariang.html | 10 ++++++ 8 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 src/scripts/directives/tooltip.js diff --git a/src/index.html b/src/index.html index 40cf25c..a8e9d37 100644 --- a/src/index.html +++ b/src/index.html @@ -295,6 +295,7 @@ + diff --git a/src/langs/zh_CN.json b/src/langs/zh_CN.json index f086860..66a57d7 100644 --- a/src/langs/zh_CN.json +++ b/src/langs/zh_CN.json @@ -100,12 +100,14 @@ "Failed to load file!": "加载文件失败!", "More Options": "更多选项", "Language": "语言", + "Page Title": "页面标题", "Aria2 RPC Host": "Aria2 RPC 主机", "Aria2 RPC Port": "Aria2 RPC 端口", "Aria2 RPC Protocol": "Aria2 RPC 协议", "Aria2 RPC Secret Token": "Aria2 RPC 密钥", "Global Stat Refresh Interval": "全局状态刷新间隔", "Download Task Refresh Interval": "下载任务刷新间隔", + "Supported Placeholder: AriaNg Title ${title}, Downloading Count ${downloading}, Waiting Count ${waiting}, Stopped Count ${stopped}, Download Speed ${downspeed}, Upload Speed ${upspeed}.": "支持的占位符: AriaNg 标题 ${title}, 正在下载数量 ${downloading}, 正在等待数量 ${waiting}, 已停止数量 ${stopped}, 下载速度 ${downspeed}, 上传速度: ${upspeed}.", "Aria2 Version": "Aria2 版本", "Enabled Features": "已启用的功能", "Functions": "方法", diff --git a/src/scripts/config/constants.js b/src/scripts/config/constants.js index c38927c..7a279f3 100644 --- a/src/scripts/config/constants.js +++ b/src/scripts/config/constants.js @@ -2,7 +2,7 @@ 'use strict'; angular.module('ariaNg').constant('ariaNgConstants', { - title: 'Aria Ng', + title: 'AriaNg', appPrefix: 'AriaNg', optionStorageKey: 'Options', globalStatStorageCapacity: 120, @@ -108,6 +108,7 @@ ] }).constant('ariaNgDefaultOptions', { language: 'en', + title: '${downspeed}, ${upspeed} - ${title}', rpcHost: '', rpcPort: '6800', protocol: 'http', diff --git a/src/scripts/config/defaultLanguage.js b/src/scripts/config/defaultLanguage.js index ca018bf..e862e20 100644 --- a/src/scripts/config/defaultLanguage.js +++ b/src/scripts/config/defaultLanguage.js @@ -104,12 +104,14 @@ 'Failed to load file!': 'Failed to load file!', 'More Options': 'More Options', 'Language': 'Language', + 'Page Title': 'Page Title', 'Aria2 RPC Host': 'Aria2 RPC Host', 'Aria2 RPC Port': 'Aria2 RPC Port', 'Aria2 RPC Protocol': 'Aria2 RPC Protocol', 'Aria2 RPC Secret Token': 'Aria2 RPC Secret Token', 'Global Stat Refresh Interval': 'Global Stat Refresh Interval', 'Download Task Refresh Interval': 'Download Task Refresh Interval', + 'Supported Placeholder: AriaNg Title ${title}, Downloading Count ${downloading}, Waiting Count ${waiting}, Stopped Count ${stopped}, Download Speed ${downspeed}, Upload Speed ${upspeed}.': 'Supported Placeholder: AriaNg Title ${title}, Downloading Count ${downloading}, Waiting Count ${waiting}, Stopped Count ${stopped}, Download Speed ${downspeed}, Upload Speed ${upspeed}.', 'Aria2 Version': 'Aria2 Version', 'Enabled Features': 'Enabled Features', 'Functions': 'Functions', diff --git a/src/scripts/controllers/main.js b/src/scripts/controllers/main.js index a25bfd3..0dc862d 100644 --- a/src/scripts/controllers/main.js +++ b/src/scripts/controllers/main.js @@ -1,7 +1,7 @@ (function () { 'use strict'; - angular.module('ariaNg').controller('MainController', ['$rootScope', '$scope', '$route', '$location', '$interval', 'aria2RpcErrors', 'ariaNgCommonService', 'ariaNgSettingService', 'ariaNgMonitorService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $route, $location, $interval, aria2RpcErrors, ariaNgCommonService, ariaNgSettingService, ariaNgMonitorService, aria2TaskService, aria2SettingService) { + angular.module('ariaNg').controller('MainController', ['$rootScope', '$scope', '$route', '$location', '$document', '$interval', 'aria2RpcErrors', 'ariaNgCommonService', 'ariaNgSettingService', 'ariaNgMonitorService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $route, $location, $document, $interval, aria2RpcErrors, ariaNgCommonService, ariaNgSettingService, ariaNgMonitorService, aria2TaskService, aria2SettingService) { var globalStatRefreshPromise = null; var refreshGlobalStat = function (silent) { @@ -13,6 +13,13 @@ if (response.success) { $scope.globalStat = response.data; + $document[0].title = ariaNgSettingService.getFinalTitle({ + downloadingCount: $scope.globalStat.numActive, + waitingCount: $scope.globalStat.numWaiting, + stoppedCount: $scope.globalStat.numStopped, + downloadSpeed: $scope.globalStat.downloadSpeed, + uploadSpeed: $scope.globalStat.uploadSpeed + }); ariaNgMonitorService.recordGlobalStat(response.data); } }, silent); diff --git a/src/scripts/directives/tooltip.js b/src/scripts/directives/tooltip.js new file mode 100644 index 0000000..32908da --- /dev/null +++ b/src/scripts/directives/tooltip.js @@ -0,0 +1,32 @@ +(function () { + 'use strict'; + + angular.module('ariaNg').directive('ngTooltip', function () { + return { + restrict: 'A', + scope: { + title: '@ngTooltip' + }, + link: function (scope, element, attrs) { + var options = { + ngTooltipPlacement: 'top', + ngTooltipContainer: null, + ngTooltipTrigger: 'hover' + }; + + angular.extend(options, attrs); + + $(element).tooltip({ + title: scope.title, + placement: options.ngTooltipPlacement, + container: options.ngTooltipContainer, + trigger: options.ngTooltipTrigger + }); + + scope.$watch('title', function () { + $(element).attr('title', scope.title).tooltip('fixTitle'); + }); + } + }; + }); +})(); diff --git a/src/scripts/services/ariaNgSettingService.js b/src/scripts/services/ariaNgSettingService.js index 6690aa6..94282cf 100644 --- a/src/scripts/services/ariaNgSettingService.js +++ b/src/scripts/services/ariaNgSettingService.js @@ -1,7 +1,7 @@ (function () { 'use strict'; - angular.module('ariaNg').factory('ariaNgSettingService', ['$location', '$translate', 'base64', 'amMoment', 'localStorageService', 'ariaNgConstants', 'ariaNgDefaultOptions', 'ariaNgLanguages', function ($location, $translate, base64, amMoment, localStorageService, ariaNgConstants, ariaNgDefaultOptions, ariaNgLanguages) { + angular.module('ariaNg').factory('ariaNgSettingService', ['$location', '$filter', '$translate', 'base64', 'amMoment', 'localStorageService', 'ariaNgConstants', 'ariaNgDefaultOptions', 'ariaNgLanguages', function ($location, $filter, $translate, base64, amMoment, localStorageService, ariaNgConstants, ariaNgDefaultOptions, ariaNgLanguages) { var getDefaultRpcHost = function () { return $location.$$host; }; @@ -71,6 +71,24 @@ setOption('language', value); } }, + getTitle: function () { + return getOption('title'); + }, + getFinalTitle: function (context) { + var title = this.getTitle(); + + title = title.replace(/\$\{downloading\}/g, $translate.instant('Downloading') + ': ' + context.downloadingCount); + title = title.replace(/\$\{waiting\}/g, $translate.instant('Waiting') + ': ' + context.waitingCount); + title = title.replace(/\$\{stopped\}/g, $translate.instant('Downloaded / Stopped') + ': ' + context.stoppedCount); + title = title.replace(/\$\{downspeed\}/g, $translate.instant('Download') + ': ' + $filter('readableVolumn')(context.downloadSpeed) + '/s'); + title = title.replace(/\$\{upspeed\}/g, $translate.instant('Upload') + ': ' + $filter('readableVolumn')(context.uploadSpeed) + '/s'); + title = title.replace(/\$\{title\}/g, ariaNgConstants.title); + + return title; + }, + setTitle: function (value) { + setOption('title', value); + }, getJsonRpcUrl: function () { var protocol = getOption('protocol'); var rpcHost = getOption('rpcHost'); diff --git a/src/views/settings-ariang.html b/src/views/settings-ariang.html index 502f1e7..de4e246 100644 --- a/src/views/settings-ariang.html +++ b/src/views/settings-ariang.html @@ -11,6 +11,16 @@ +
+
+ Page Title + +
+
+ +
+
Aria2 RPC Host