diff --git a/modules/chat/client/config/chat.client.menus.js b/modules/chat/client/config/chat.client.menus.js
index 199775c1..21e7a929 100644
--- a/modules/chat/client/config/chat.client.menus.js
+++ b/modules/chat/client/config/chat.client.menus.js
@@ -13,8 +13,20 @@
title: 'MENU_CHAT',
state: 'chat',
roles: ['*'],
+ class: 'sm-hide',
target: '_blank',
- position: 6
+ position: 7
+ });
+
+ //add to more
+ menuService.addSubMenuItem('topbar', 'more', {
+ title: 'MENU_CHAT',
+ state: 'chat',
+ roles: ['*'],
+ faIcon: 'fa-comment-alt-dots',
+ faClass: 'text-mt',
+ target: '_blank',
+ position: 2
});
}
}());
diff --git a/modules/collections/client/controllers/collections-view.client.controller.js b/modules/collections/client/controllers/collections-view.client.controller.js
index 497a72d4..52ec0d74 100644
--- a/modules/collections/client/controllers/collections-view.client.controller.js
+++ b/modules/collections/client/controllers/collections-view.client.controller.js
@@ -172,10 +172,10 @@
var ele = $('#' + e.$editor.attr('id') + ' .md-footer');
angular.element(ele).addClass('text-right');
- angular.element(ele[0].childNodes[0]).addClass('btn-width-80');
+ angular.element(ele[0].childNodes[0]).addClass('btn-min-width-80');
ele[0].childNodes[0].innerText = $translate.instant('FORUMS.BTN_SAVE');
- var cbtn = angular.element('
');
cbtn.bind('click', function (evt) {
e.setContent(c.overview);
e.$options.hideable = true;
diff --git a/modules/collections/client/views/collection-view.client.view.html b/modules/collections/client/views/collection-view.client.view.html
index 3722cf81..d8a5ff05 100644
--- a/modules/collections/client/views/collection-view.client.view.html
+++ b/modules/collections/client/views/collection-view.client.view.html
@@ -41,16 +41,16 @@
-
-
-
diff --git a/modules/collections/server/controllers/collections.server.controller.js b/modules/collections/server/controllers/collections.server.controller.js
index c6d50518..b331507f 100644
--- a/modules/collections/server/controllers/collections.server.controller.js
+++ b/modules/collections/server/controllers/collections.server.controller.js
@@ -65,7 +65,6 @@ exports.collectioninfo = function (req, res) {
});
};
-
/**
* Create an collection
*/
diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js
index 18223062..5d6bc071 100644
--- a/modules/core/client/app/trans-string-en.js
+++ b/modules/core/client/app/trans-string-en.js
@@ -50,7 +50,9 @@
MENU_ADMIN_TICKETS: 'Support Services Center',
MENU_USERS_ADMIN: 'Manage Users',
MENU_UPLOAD: 'Upload',
+ MENU_MEDALS: 'Medals',
MENU_FORUMS: 'Forums',
+ MENU_MORE: 'More',
MENU_REQUESTS: 'Requests',
MENU_ABOUT: 'About',
MENU_ABOUT_MANUAL: 'User Manual',
@@ -90,6 +92,7 @@
MENU_MY_INVITE: 'My Invitations',
MENU_MY_DATA_CENTER: 'Data center',
MENU_ACCOUNT_STATUS: 'Account Status',
+ MENU_TORRENTS_STATUS: 'Torrents Status',
EDIT_PROFILE: 'Edit Profile',
EDIT_PROFILE_PIC: 'Edit Profile Picture',
EDIT_SIGNATURE: 'Edit Signature Of Forum',
@@ -250,6 +253,7 @@
VIP: 'Vip',
VIP_DONATE: 'Vip Donate',
VIP_RULES: 'Vip Rules',
+ MEDALS: 'Medals Wall',
FORUM: 'Forum',
REQUESTS: 'Requests',
REQUESTS_MY: 'My Requests',
@@ -278,6 +282,7 @@
MESSAGES_BOX: 'Message Box',
MESSAGES_SEND: 'Send Message',
STATUS_ACCOUNT: 'Account Status',
+ STATUS_TORRENTS: 'Torrents Status',
STATUS_UPLOADED: 'Uploaded',
STATUS_SEEDING: 'Seeding',
STATUS_LEECHING: 'Leeching',
@@ -876,6 +881,7 @@
BUTTON_SELECT_PICTURE: 'Select Picture',
BUTTON_USE_THIS_PICTURE: 'Use This Picture',
BUTTON_CANCEL: 'Cancel',
+ BUTTON_CLOSE: 'Close',
BUTTON_SAVE: 'Save',
BUTTON_SET: 'Set',
BUTTON_OK: 'Ok',
@@ -975,7 +981,7 @@
},
//user status
- STATUS_ACCOUNT: 'Account Status',
+ STATUS_ACCOUNT: 'My Account Status',
STATUS_UPLOADED: 'Uploaded torrents',
STATUS_SEEDING: 'Seeding torrents',
STATUS_DOWNLOADING: 'Downloading torrents',
@@ -1004,6 +1010,7 @@
BTN_VIEW_USER_DATA_CENTER: 'Data Center',
BTN_EDIT: 'Edit',
BTN_REMOVE: 'Remove',
+ BTN_ADD_MEDAL: 'Add Medal',
PICTURE: 'Profile picture',
RESET_DEFAULT_PICTURE: 'Reset to default picture',
ADD_VIP_MONTHS: '+ VIP a month',
@@ -1227,6 +1234,8 @@
USER_UPLOADED_FLAG: '{{name}} uploaded',
USER_DOWNLOADED_FLAG: '{{name}} downloaded',
USER_SCORE_LEVEL: '{{name}} score level',
+ USER_RATIO_FLAG: '{{name}} ratio',
+ USER_MEDAL_FLAG: '{{name}} medal',
//traces
ADMIN_TRACES_LIST: 'Traces List',
@@ -1472,6 +1481,115 @@
}
},
+ // medals wall
+ MEDALS: {
+ MEDALS_TITLE: 'Medals Wall',
+ TYPES_COUNT: 'Medals type count',
+ MEDALS_OPENED_COUNT: 'Medals opened count',
+ MEDALS_AWARD_COUNT: 'Medals award count',
+ SELECT_MEDAL_TO_USER: 'Please select a medal transfer to user - {{uname}}',
+ ADD_SUCCESSFULLY: 'Add medal to user successfully',
+ ADD_FAILED: 'Add medal to user failed',
+ REMOVE_SUCCESSFULLY: 'Remove medal to user successfully',
+ REMOVE_FAILED: 'Remove medal to user failed',
+ MEDALS_OVERVIEW: 'The medal is the identity of the users identity and contribution to the site. The medal is awarded in three ways: system automatic help, administrator help, and user self help. The self help medal requires the user to self-request according to the corresponding conditions. Different medals have different system treatments, and the site will also hold a variety of events for users of different medal groups from time to time.',
+ CMD_LIST_USER: 'List users',
+ CMD_REQUEST: 'Request',
+ HELP_CONDITION: 'Condition',
+ OWNED_USERS: 'Owned users',
+ USERS_IS_LOADING: 'Loading uses, please wait ...',
+ USERS_IS_EMPTY: 'Has no anybody owned this medal',
+ REQUEST_CONFIRM_CANCEL: 'Cancel',
+ REQUEST_CONFIRM_OK: 'OK',
+ REQUEST_CONFIRM_HEADER_TEXT: 'Request medal',
+ REQUEST_CONFIRM_BODY_TEXT: 'Are you sure want to request this medal with score {{score}} ?',
+ REQUEST_SUCCESSFULLY: 'Request medal successfully',
+ REQUEST_ERROR: 'Request medal failed',
+ AWARD_AT: 'Award at',
+ CATS: {
+ WORKERS: 'Workers medals',
+ USERS: 'Users medals',
+ VIP: 'VIP medals',
+ EVENTS: 'Events medals',
+ COMMEMORATIVE: 'Commemorative Medals'
+ },
+ PASSHELP: {
+ SYS: 'System automatic help',
+ ADMIN: 'Administrator help',
+ SELF: 'User self help'
+ },
+ DESC: {
+ ROOT: 'Root Administrator Medal',
+ NETWORK_ADMIN: 'Network Administrator Medal',
+ SUPPORT_ADMIN: 'Support Administrator Medal',
+ FORUM_ADMIN: 'Forums Administrator Medal',
+ RESOURCE_ADMIN: 'Resources Administrator Medal',
+ AMBASSADOR: 'Site Ambassador Medal',
+ FORUM_MODERATORS: 'Forum Moderators Medal',
+ MAKER_FOUNDER: 'Resource Group Founder Medal',
+ UPLOADER: 'Resource Uploader Medal',
+ RETIREE: 'Site Retiree Medal',
+
+ BEAUTY_3000: 'Beauty Children User Medal',
+ ROAM: 'Roaming Safe User Medal',
+ NO_EXAMINATION: 'No Examination User Medal',
+ SLUGGER: 'Site Slugger User Medal',
+ ELDER: 'Site Elder User Medal',
+
+ FOREVER_VIP: 'Forever VIP Medal',
+ YEARLY_VIP: 'Yearly VIP Medal',
+ MONTHLY_VIP: 'Monthly VIP Medal',
+ GUEST_VIP: 'Guest VIP Medal',
+
+ SITE_BEGIN: 'Site Begin Medal',
+ FOR_ONE_YEARS: 'Site One Year Medal',
+ FOR_TWO_YEARS: 'Site Two Years Medal',
+
+ EVENT_NAME: 'Special Event Medal'
+ },
+ FOOTERSTRING: {
+ ROOT: 'ROOT',
+ NETWORK_ADMIN: 'NA',
+ SUPPORT_ADMIN: 'SA',
+ FORUM_ADMIN: 'FA',
+ RESOURCE_ADMIN: 'RA',
+ AMBASSADOR: 'AMB',
+ FORUM_MODERATORS: 'FM',
+ MAKER_FOUNDER: 'MGF',
+ UPLOADER: 'UPER',
+ RETIREE: 'RET',
+
+ BEAUTY_3000: 'BEAUTY',
+ ROAM: 'ROAM',
+ NO_EXAMINATION: 'NOEXAM',
+ SLUGGER: 'SLUGGER',
+ ELDER: 'ELDER',
+
+ FOREVER_VIP: 'VIP',
+ YEARLY_VIP: 'VIP',
+ MONTHLY_VIP: 'VIP',
+ GUEST_VIP: 'VIP',
+
+ SITE_BEGIN: 'YEARS',
+ FOR_ONE_YEARS: 'YEARS',
+ FOR_TWO_YEARS: 'YEARS',
+
+ EVENT_NAME: '2018'
+ },
+ HEADERSTRING: {
+ FOREVER_VIP: 'F',
+ YEARLY_VIP: 'Y',
+ MONTHLY_VIP: 'M',
+ GUEST_VIP: 'G',
+
+ SITE_BEGIN: '0',
+ FOR_ONE_YEARS: '1',
+ FOR_TWO_YEARS: '2',
+
+ EVENT_NAME: 'EVE'
+ }
+ },
+
// data center
DATA_CENTER: {
ITEM_SCORE: 'Score data analysis',
@@ -1518,6 +1636,7 @@
REQUEST_ACCEPT_TO: 'Your response of request was accepted
{{rid}}',
SCORE_EXCHANGE_INVITATION: 'Exchange an invitation',
SCORETO_REMOVE_WARNING: 'Remove a H&R warning
{{tid}}',
+ SCORETO_REQUEST_MEDAL: 'Request medal: {{medalDesc | translate}}',
ACTIVE_IDLE_ACCOUNT: 'Active account idle status',
DAILY_CHECK_IN: 'Daily check in',
SEED_TIMED: 'Torrent seeding timed increased score
{{tid}}',
@@ -1531,7 +1650,7 @@
BAD_REQUEST: 'Bad Request',
FORBIDDEN: 'Forbidden',
MADE_BAD_REQUEST: 'You made a bad request',
- NOT_AUTHORIZED_THIS: 'You are not authorized to access this resource',
+ NOT_AUTHORIZED_THIS: 'You are not authorized to access this resource, if your session or cookie is expired, please
sign in.',
NOT_FOUND: 'Not Found',
PAGE_NOT_FOUND: 'Page Or Resources Not Found',
ACCESS_DENY: 'Your current IP is restricted to access this resource,For more help, please contact our {{sNameDesc | translate}} by
Message or
Email.'
@@ -1833,6 +1952,8 @@
ADMIN_PRESENT_USER_INVITATIONS: '`{{by.displayName}}` present `{{numbers}}` official invitations, expires `{{days}}` days',
ADMIN_REMOVE_USER_HNR_WARNING: '`{{by.displayName}}` remove H&R warning, complete id: `{{complete}}`',
ADMIN_CREATE_USER_MAKER_GROUP: '`{{by.displayName}}` create user maker group: `-={{name}}=-`',
+ ADMIN_ADD_USER_MEDAL: '`{{by.displayName}}` add user medal: `{{medalName}}`',
+ ADMIN_REMOVE_USER_MEDAL: '`{{by.displayName}}` remove user medal: `{{medalName}}`',
ADMIN_BAN_USER_INVITER: '`{{by.displayName}}` update account status to: `{{status}}`, reason: invited user [{{uname}}] was banned because [{{reason | translate}}]'
},
@@ -1875,7 +1996,9 @@
UPLOAD_ACCESS_DENY: 'System only accepts resources group to upload torrents',
READ_TORRENT_FILE_FAILD: 'The torrent file parsing error. Please check your torrent file to check if some of the necessary information is missing',
MOVE_TORRENT_FILE_ERROR: 'The torrent file was moved incorrectly. Please do not repeat the submit operation quickly or the uploaded torrent file is missing.',
- YOU_ALREADY_CHECK_IN: 'You already checked in today'
+ YOU_ALREADY_CHECK_IN: 'You already checked in today',
+ USER_ALREADY_HAS_THIS_MEDAL: 'This user already has this medal',
+ USER_HAS_NOT_THIS_MEDAL: 'This user has not this medal'
},
//server message string, content string support markdown and emoji
diff --git a/modules/core/client/app/trans-string-zh-tw.js b/modules/core/client/app/trans-string-zh-tw.js
index 4b431b53..ab257175 100644
--- a/modules/core/client/app/trans-string-zh-tw.js
+++ b/modules/core/client/app/trans-string-zh-tw.js
@@ -50,7 +50,9 @@
MENU_ADMIN_TICKETS: '客戶服務中心',
MENU_USERS_ADMIN: '用戶管理',
MENU_UPLOAD: '發布',
+ MENU_MEDALS: '勳章',
MENU_FORUMS: '論壇',
+ MENU_MORE: '更多',
MENU_REQUESTS: '求種',
MENU_ABOUT: '關於',
MENU_ABOUT_MANUAL: '用戶手冊',
@@ -90,6 +92,7 @@
MENU_MY_INVITE: '我的邀請',
MENU_MY_DATA_CENTER: '數據中心',
MENU_ACCOUNT_STATUS: '帳戶狀態',
+ MENU_TORRENTS_STATUS: '種子狀態',
EDIT_PROFILE: '修改個人資訊',
EDIT_PROFILE_PIC: '修改個人頭像',
EDIT_SIGNATURE: '修改論壇簽名',
@@ -250,6 +253,7 @@
VIP: 'Vip',
VIP_DONATE: '捐贈VIP',
VIP_RULES: 'Vip用戶協議',
+ MEDALS: '勳章牆',
FORUM: '論壇',
REQUESTS: '求種',
REQUESTS_MY: '我的求種',
@@ -278,6 +282,7 @@
MESSAGES_BOX: '站內訊息',
MESSAGES_SEND: '傳送訊息',
STATUS_ACCOUNT: '帳戶狀態',
+ STATUS_TORRENTS: '種子狀態',
STATUS_UPLOADED: '我的種子',
STATUS_SEEDING: '正在做種',
STATUS_LEECHING: '正在下載',
@@ -876,6 +881,7 @@
BUTTON_SELECT_PICTURE: '選擇圖片',
BUTTON_USE_THIS_PICTURE: '應用圖片',
BUTTON_CANCEL: '取消',
+ BUTTON_CLOSE: '關閉',
BUTTON_SAVE: '儲存',
BUTTON_SET: '設定',
BUTTON_OK: '確定',
@@ -975,7 +981,7 @@
},
//user status
- STATUS_ACCOUNT: '帳戶狀態',
+ STATUS_ACCOUNT: '我的帳戶狀態',
STATUS_UPLOADED: '我上傳的種子',
STATUS_SEEDING: '正在做種的種子',
STATUS_DOWNLOADING: '正在下載的種子',
@@ -1004,6 +1010,7 @@
BTN_VIEW_USER_DATA_CENTER: '數據中心',
BTN_EDIT: '編輯',
BTN_REMOVE: '刪除',
+ BTN_ADD_MEDAL: '頒發勳章',
PICTURE: '頭像',
RESET_DEFAULT_PICTURE: '重置為預設圖片',
ADD_VIP_MONTHS: '+ VIP一個月',
@@ -1227,6 +1234,8 @@
USER_UPLOADED_FLAG: '{{name}} 的上傳量',
USER_DOWNLOADED_FLAG: '{{name}} 的下載量',
USER_SCORE_LEVEL: '{{name}} 的積分等級',
+ USER_RATIO_FLAG: '{{name}} 的分享率',
+ USER_MEDAL_FLAG: '{{name}} 的勳章總數',
//traces
ADMIN_TRACES_LIST: '系統日誌',
@@ -1472,6 +1481,115 @@
}
},
+ // medals wall
+ MEDALS: {
+ MEDALS_TITLE: '勳章牆',
+ TYPES_COUNT: '勳章類型',
+ MEDALS_OPENED_COUNT: '勳章開放數',
+ MEDALS_AWARD_COUNT: '勳章頒發數',
+ SELECT_MEDAL_TO_USER: '請選擇要頒發的勳章 - {{uname}}',
+ ADD_SUCCESSFULLY: '給用戶添加勳章成功',
+ ADD_FAILED: '給用戶添加勳章失敗',
+ REMOVE_SUCCESSFULLY: '移除用戶勳章成功',
+ REMOVE_FAILED: '移除用戶勳章失敗',
+ MEDALS_OVERVIEW: '勳章是用戶身份及為站點所做的貢獻的標識,勳章頒發分為系統自動頒發、管理員幫助頒發與用戶自助頒發三種,自助頒發的勳章需要用戶自已根據相應的條件自助申領。不同的勳章對應有不同的系統待遇,站點也會不定期的針對不同的勳章群體用戶舉辦豐富多樣的活動,敬請大家期待。',
+ CMD_LIST_USER: '查看用戶',
+ CMD_REQUEST: '申請勳章',
+ HELP_CONDITION: '申請條件',
+ OWNED_USERS: '擁有用戶',
+ USERS_IS_LOADING: '正在裝載用戶列表,請稍候...',
+ USERS_IS_EMPTY: '還沒有任何用戶擁有此勳章',
+ REQUEST_CONFIRM_CANCEL: '取消',
+ REQUEST_CONFIRM_OK: '確定',
+ REQUEST_CONFIRM_HEADER_TEXT: '申請勳章',
+ REQUEST_CONFIRM_BODY_TEXT: '您確定要使用 {{score}} 積分來申請這枚勳章嗎?',
+ REQUEST_SUCCESSFULLY: '勳章申請成功',
+ REQUEST_ERROR: '勳章申請失敗',
+ AWARD_AT: '授於',
+ CATS: {
+ WORKERS: '工作人員類勳章',
+ USERS: '用戶類勳章',
+ VIP: 'VIP 類勳章',
+ EVENTS: '特別事件類勳章',
+ COMMEMORATIVE: '站點紀念類勳章'
+ },
+ PASSHELP: {
+ SYS: '系統自動頒發',
+ ADMIN: '管理員頒發',
+ SELF: '用戶自助申請'
+ },
+ DESC: {
+ ROOT: '系統管理員勳章',
+ NETWORK_ADMIN: '網站管理員勳章',
+ SUPPORT_ADMIN: '客戶服務管理員勳章',
+ FORUM_ADMIN: '論壇管理員勳章',
+ RESOURCE_ADMIN: '資源管理員勳章',
+ AMBASSADOR: '網站外交大使勳章',
+ FORUM_MODERATORS: '論壇版主勳章',
+ MAKER_FOUNDER: '資源發布組組長勳章',
+ UPLOADER: '資源發布專員勳章',
+ RETIREE: '網站退休工作人員勳章',
+
+ BEAUTY_3000: '佳麗三千后宮勳章',
+ ROAM: '雲遊四方保號勳章',
+ NO_EXAMINATION: '網站免考用戶勳章',
+ SLUGGER: '網站種子用戶勳章',
+ ELDER: '網站元老用戶勳章',
+
+ FOREVER_VIP: '終身 VIP 勳章',
+ YEARLY_VIP: '年度 VIP 勳章',
+ MONTHLY_VIP: '月度 VIP 勳章',
+ GUEST_VIP: '來賓 VIP 勳章',
+
+ SITE_BEGIN: '網站開張紀念勳章',
+ FOR_ONE_YEARS: '網站1週年紀念勳章',
+ FOR_TWO_YEARS: '網站2週年紀念勳章',
+
+ EVENT_NAME: '特別活動勳章'
+ },
+ FOOTERSTRING: {
+ ROOT: '站長',
+ NETWORK_ADMIN: '站長',
+ SUPPORT_ADMIN: '客服',
+ FORUM_ADMIN: '論壇',
+ RESOURCE_ADMIN: '資源',
+ AMBASSADOR: '使臣',
+ FORUM_MODERATORS: '版主',
+ MAKER_FOUNDER: '組長',
+ UPLOADER: '發布',
+ RETIREE: '退休',
+
+ BEAUTY_3000: '佳麗',
+ ROAM: '雲遊',
+ NO_EXAMINATION: '免考',
+ SLUGGER: '種子',
+ ELDER: '元老',
+
+ FOREVER_VIP: 'VIP',
+ YEARLY_VIP: 'VIP',
+ MONTHLY_VIP: 'VIP',
+ GUEST_VIP: 'VIP',
+
+ SITE_BEGIN: '週年',
+ FOR_ONE_YEARS: '週年',
+ FOR_TWO_YEARS: '週年',
+
+ EVENT_NAME: '2018'
+ },
+ HEADERSTRING: {
+ FOREVER_VIP: '終',
+ YEARLY_VIP: '年',
+ MONTHLY_VIP: '月',
+ GUEST_VIP: '賓',
+
+ SITE_BEGIN: '0',
+ FOR_ONE_YEARS: '1',
+ FOR_TWO_YEARS: '2',
+
+ EVENT_NAME: '活動'
+ }
+ },
+
// data center
DATA_CENTER: {
ITEM_SCORE: '積分數據分析',
@@ -1518,6 +1636,7 @@
REQUEST_ACCEPT_TO: '您的響應被求種請求者接受
{{rid}}',
SCORE_EXCHANGE_INVITATION: '兌換了一張邀請函',
SCORETO_REMOVE_WARNING: '移除了一個 H&R 警告
{{tid}}',
+ SCORETO_REQUEST_MEDAL: '申請勳章: {{medalDesc | translate}}',
ACTIVE_IDLE_ACCOUNT: '重新激活帳戶狀態',
DAILY_CHECK_IN: '每日簽到',
SEED_TIMED: '做種時間獲得的積分
{{tid}}',
@@ -1531,7 +1650,7 @@
BAD_REQUEST: '請求錯誤',
FORBIDDEN: '請求禁止',
MADE_BAD_REQUEST: '您發起了一個無效的請求',
- NOT_AUTHORIZED_THIS: '您無權訪問此資源',
+ NOT_AUTHORIZED_THIS: '您無權訪問此資源,如果您的 session 或 cookie 已過期,請
重新登錄。',
NOT_FOUND: '無法訪問',
PAGE_NOT_FOUND: '沒有找到頁面或資源',
ACCESS_DENY: '您的當前IP被限制訪問此資源,如需幫助請給{{sNameDesc | translate}}傳送
訊息 或
郵件.'
@@ -1833,6 +1952,8 @@
ADMIN_PRESENT_USER_INVITATIONS: '`{{by.displayName}}` 贈送 `{{numbers}}` 個官方邀請函, 有效期 `{{days}}` 天',
ADMIN_REMOVE_USER_HNR_WARNING: '`{{by.displayName}}` 移除 H&R 警告, complete id: `{{complete}}`',
ADMIN_CREATE_USER_MAKER_GROUP: '`{{by.displayName}}` 創建用戶資源小組: `-={{name}}=-`',
+ ADMIN_ADD_USER_MEDAL: '`{{by.displayName}}` 添加用戶勳章: `{{medalName}}`',
+ ADMIN_REMOVE_USER_MEDAL: '`{{by.displayName}}` 移除用戶勳章: `{{medalName}}`',
ADMIN_BAN_USER_INVITER: '`{{by.displayName}}` 改變帳戶狀態為: `{{status}}`, 理由: 邀請的用戶[{{uname}}]因為[{{reason | translate}}]被禁止'
},
@@ -1875,7 +1996,9 @@
UPLOAD_ACCESS_DENY: '當前系統只接受資源製作小組上傳種子',
READ_TORRENT_FILE_FAILD: '種子檔案解析錯誤,請檢查您的種子檔案,看是否缺少某些必要資訊',
MOVE_TORRENT_FILE_ERROR: '種子檔案移動錯誤,請不要快速重複進行提交操作或者上傳的種子檔案已丟失',
- YOU_ALREADY_CHECK_IN: '您今天已經完成簽到了,不能重復簽到喔!'
+ YOU_ALREADY_CHECK_IN: '您今天已經完成簽到了,不能重復簽到喔!',
+ USER_ALREADY_HAS_THIS_MEDAL: '該用戶已經擁有了這枚勳章',
+ USER_HAS_NOT_THIS_MEDAL: '該用戶還沒有這枚勳章'
},
//server message string, content string support markdown and emoji
diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js
index 34d3f991..1e800e6a 100644
--- a/modules/core/client/app/trans-string-zh.js
+++ b/modules/core/client/app/trans-string-zh.js
@@ -50,7 +50,9 @@
MENU_ADMIN_TICKETS: '客户服务中心',
MENU_USERS_ADMIN: '用户管理',
MENU_UPLOAD: '发布',
+ MENU_MEDALS: '勋章',
MENU_FORUMS: '论坛',
+ MENU_MORE: '更多',
MENU_REQUESTS: '求种',
MENU_ABOUT: '关于',
MENU_ABOUT_MANUAL: '用户手册',
@@ -90,6 +92,7 @@
MENU_MY_INVITE: '我的邀请',
MENU_MY_DATA_CENTER: '数据中心',
MENU_ACCOUNT_STATUS: '帐户状态',
+ MENU_TORRENTS_STATUS: '种子状态',
EDIT_PROFILE: '修改个人信息',
EDIT_PROFILE_PIC: '修改个人头像',
EDIT_SIGNATURE: '修改论坛签名',
@@ -250,6 +253,7 @@
VIP: 'Vip',
VIP_DONATE: '捐赠VIP',
VIP_RULES: 'Vip用户协议',
+ MEDALS: '勋章墙',
FORUM: '论坛',
REQUESTS: '求种',
REQUESTS_MY: '我的求种',
@@ -278,6 +282,7 @@
MESSAGES_BOX: '站内消息',
MESSAGES_SEND: '发送消息',
STATUS_ACCOUNT: '帐户状态',
+ STATUS_TORRENTS: '种子状态',
STATUS_UPLOADED: '我的种子',
STATUS_SEEDING: '正在做种',
STATUS_LEECHING: '正在下载',
@@ -876,6 +881,7 @@
BUTTON_SELECT_PICTURE: '选择图片',
BUTTON_USE_THIS_PICTURE: '应用图片',
BUTTON_CANCEL: '取消',
+ BUTTON_CLOSE: '关闭',
BUTTON_SAVE: '保存',
BUTTON_SET: '设置',
BUTTON_OK: '确定',
@@ -975,7 +981,7 @@
},
//user status
- STATUS_ACCOUNT: '帐户状态',
+ STATUS_ACCOUNT: '我的帐户状态',
STATUS_UPLOADED: '我上传的种子',
STATUS_SEEDING: '正在做种的种子',
STATUS_DOWNLOADING: '正在下载的种子',
@@ -1004,6 +1010,7 @@
BTN_VIEW_USER_DATA_CENTER: '数据中心',
BTN_EDIT: '编辑',
BTN_REMOVE: '删除',
+ BTN_ADD_MEDAL: '颁发勋章',
PICTURE: '头像',
RESET_DEFAULT_PICTURE: '重置为默认图片',
ADD_VIP_MONTHS: '+ VIP一个月',
@@ -1227,6 +1234,8 @@
USER_UPLOADED_FLAG: '{{name}} 的上传量',
USER_DOWNLOADED_FLAG: '{{name}} 的下载量',
USER_SCORE_LEVEL: '{{name}} 的积分等级',
+ USER_RATIO_FLAG: '{{name}} 的分享率',
+ USER_MEDAL_FLAG: '{{name}} 的勋章总数',
//traces
ADMIN_TRACES_LIST: '系统日志',
@@ -1472,6 +1481,115 @@
}
},
+ // medals wall
+ MEDALS: {
+ MEDALS_TITLE: '勋章墙',
+ TYPES_COUNT: '勋章类型',
+ MEDALS_OPENED_COUNT: '勋章开放数',
+ MEDALS_AWARD_COUNT: '勋章颁发数',
+ SELECT_MEDAL_TO_USER: '请选择要颁发的勋章 - {{uname}}',
+ ADD_SUCCESSFULLY: '给用户添加勋章成功',
+ ADD_FAILED: '给用户添加勋章失败',
+ REMOVE_SUCCESSFULLY: '移除用户勋章成功',
+ REMOVE_FAILED: '移除用户勋章失败',
+ MEDALS_OVERVIEW: '勋章是用户身份及为站点所做的贡献的标识,勋章颁发分为系统自动颁发、管理员帮助颁发与用户自助颁发三种,自助颁发的勋章需要用户自已根据相应的条件自助申领。不同的勋章对应有不同的系统待遇,站点也会不定期的针对不同的勋章群体用户举办丰富多样的活动,敬请大家期待。',
+ CMD_LIST_USER: '查看用户',
+ CMD_REQUEST: '申请勋章',
+ HELP_CONDITION: '申请条件',
+ OWNED_USERS: '拥有用户',
+ USERS_IS_LOADING: '正在装载用户列表,请稍候...',
+ USERS_IS_EMPTY: '还没有任何用户拥有此勋章',
+ REQUEST_CONFIRM_CANCEL: '取消',
+ REQUEST_CONFIRM_OK: '确定',
+ REQUEST_CONFIRM_HEADER_TEXT: '申请勋章',
+ REQUEST_CONFIRM_BODY_TEXT: '您确定要使用 {{score}} 积分来申请这枚勋章吗?',
+ REQUEST_SUCCESSFULLY: '勋章申请成功',
+ REQUEST_ERROR: '勋章申请失败',
+ AWARD_AT: '授于',
+ CATS: {
+ WORKERS: '工作人员类勋章',
+ USERS: '用户类勋章',
+ VIP: 'VIP 类勋章',
+ EVENTS: '特别事件类勋章',
+ COMMEMORATIVE: '站点纪念类勋章'
+ },
+ PASSHELP: {
+ SYS: '系统自动颁发',
+ ADMIN: '管理员颁发',
+ SELF: '用户自助申请'
+ },
+ DESC: {
+ ROOT: '系统管理员勋章',
+ NETWORK_ADMIN: '网站管理员勋章',
+ SUPPORT_ADMIN: '客户服务管理员勋章',
+ FORUM_ADMIN: '论坛管理员勋章',
+ RESOURCE_ADMIN: '资源管理员勋章',
+ AMBASSADOR: '网站外交大使勋章',
+ FORUM_MODERATORS: '论坛版主勋章',
+ MAKER_FOUNDER: '资源发布组组长勋章',
+ UPLOADER: '资源发布专员勋章',
+ RETIREE: '网站退休工作人员勋章',
+
+ BEAUTY_3000: '佳丽三千后宫勋章',
+ ROAM: '云游四方保号勋章',
+ NO_EXAMINATION: '网站免考用户勋章',
+ SLUGGER: '网站种子用户勋章',
+ ELDER: '网站元老用户勋章',
+
+ FOREVER_VIP: '终身 VIP 勋章',
+ YEARLY_VIP: '年度 VIP 勋章',
+ MONTHLY_VIP: '月度 VIP 勋章',
+ GUEST_VIP: '来宾 VIP 勋章',
+
+ SITE_BEGIN: '网站开张纪念勋章',
+ FOR_ONE_YEARS: '网站1周年纪念勋章',
+ FOR_TWO_YEARS: '网站2周年纪念勋章',
+
+ EVENT_NAME: '特别活动勋章'
+ },
+ FOOTERSTRING: {
+ ROOT: '站长',
+ NETWORK_ADMIN: '站长',
+ SUPPORT_ADMIN: '客服',
+ FORUM_ADMIN: '论坛',
+ RESOURCE_ADMIN: '资源',
+ AMBASSADOR: '使臣',
+ FORUM_MODERATORS: '版主',
+ MAKER_FOUNDER: '组长',
+ UPLOADER: '发布',
+ RETIREE: '退休',
+
+ BEAUTY_3000: '佳丽',
+ ROAM: '云游',
+ NO_EXAMINATION: '免考',
+ SLUGGER: '种子',
+ ELDER: '元老',
+
+ FOREVER_VIP: 'VIP',
+ YEARLY_VIP: 'VIP',
+ MONTHLY_VIP: 'VIP',
+ GUEST_VIP: 'VIP',
+
+ SITE_BEGIN: '周年',
+ FOR_ONE_YEARS: '周年',
+ FOR_TWO_YEARS: '周年',
+
+ EVENT_NAME: '2018'
+ },
+ HEADERSTRING: {
+ FOREVER_VIP: '终',
+ YEARLY_VIP: '年',
+ MONTHLY_VIP: '月',
+ GUEST_VIP: '宾',
+
+ SITE_BEGIN: '0',
+ FOR_ONE_YEARS: '1',
+ FOR_TWO_YEARS: '2',
+
+ EVENT_NAME: '活动'
+ }
+ },
+
// data center
DATA_CENTER: {
ITEM_SCORE: '积分数据分析',
@@ -1518,6 +1636,7 @@
REQUEST_ACCEPT_TO: '您的响应被求种请求者接受
{{rid}}',
SCORE_EXCHANGE_INVITATION: '兑换了一张邀请函',
SCORETO_REMOVE_WARNING: '移除了一个 H&R 警告
{{tid}}',
+ SCORETO_REQUEST_MEDAL: '申请勋章: {{medalDesc | translate}}',
ACTIVE_IDLE_ACCOUNT: '重新激活帐户状态',
DAILY_CHECK_IN: '每日签到',
SEED_TIMED: '做种时间获得的积分
{{tid}}',
@@ -1531,7 +1650,7 @@
BAD_REQUEST: '请求错误',
FORBIDDEN: '请求禁止',
MADE_BAD_REQUEST: '您发起了一个无效的请求',
- NOT_AUTHORIZED_THIS: '您无权访问此资源',
+ NOT_AUTHORIZED_THIS: '您无权访问此资源,如果您的 session 或 cookie 已过期,请
重新登录。',
NOT_FOUND: '无法访问',
PAGE_NOT_FOUND: '没有找到页面或资源',
ACCESS_DENY: '您的当前IP被限制访问此资源,如需帮助请给{{sNameDesc | translate}}发送
消息 或
邮件.'
@@ -1833,6 +1952,8 @@
ADMIN_PRESENT_USER_INVITATIONS: '`{{by.displayName}}` 赠送 `{{numbers}}` 个官方邀请函, 有效期 `{{days}}` 天',
ADMIN_REMOVE_USER_HNR_WARNING: '`{{by.displayName}}` 移除 H&R 警告, complete id: `{{complete}}`',
ADMIN_CREATE_USER_MAKER_GROUP: '`{{by.displayName}}` 创建用户资源小组: `-={{name}}=-`',
+ ADMIN_ADD_USER_MEDAL: '`{{by.displayName}}` 添加用户勋章: `{{medalName}}`',
+ ADMIN_REMOVE_USER_MEDAL: '`{{by.displayName}}` 移除用户勋章: `{{medalName}}`',
ADMIN_BAN_USER_INVITER: '`{{by.displayName}}` 改变帐户状态为: `{{status}}`, 理由: 邀请的用户[{{uname}}]因为[{{reason | translate}}]被禁止'
},
@@ -1875,7 +1996,9 @@
UPLOAD_ACCESS_DENY: '当前系统只接受资源制作小组上传种子',
READ_TORRENT_FILE_FAILD: '种子文件解析错误,请检查您的种子文件,看是否缺少某些必要信息',
MOVE_TORRENT_FILE_ERROR: '种子文件移动错误,请不要快速重复进行提交操作或者上传的种子文件已丢失',
- YOU_ALREADY_CHECK_IN: '您今天已经签过到了,不能重复签到'
+ YOU_ALREADY_CHECK_IN: '您今天已经签过到了,不能重复签到',
+ USER_ALREADY_HAS_THIS_MEDAL: '该用户已经拥有了这枚勋章',
+ USER_HAS_NOT_THIS_MEDAL: '该用户还没有这枚勋章'
},
//server message string, content string support markdown and emoji
diff --git a/modules/core/client/config/core-admin.client.menus.js b/modules/core/client/config/core-admin.client.menus.js
index b59632cd..fa442f11 100644
--- a/modules/core/client/config/core-admin.client.menus.js
+++ b/modules/core/client/config/core-admin.client.menus.js
@@ -13,7 +13,8 @@
state: 'admin',
type: 'dropdown',
roles: ['oper', 'admin'],
- position: 10,
+ class: 'menu-left',
+ position: 20,
shouldDotClass: 'header-dot-class-admin'
});
}
diff --git a/modules/core/client/config/core.client.menus.js b/modules/core/client/config/core.client.menus.js
index 6d054d13..f93f99f2 100644
--- a/modules/core/client/config/core.client.menus.js
+++ b/modules/core/client/config/core.client.menus.js
@@ -8,6 +8,15 @@
menuConfig.$inject = ['menuService'];
function menuConfig(menuService) {
+ menuService.addMenuItem('topbar', {
+ title: 'MENU_MORE',
+ state: 'more',
+ type: 'dropdown',
+ roles: ['*'],
+ class: 'sm-show',
+ position: 15
+ });
+
menuService.addMenu('account', {
roles: ['user']
});
@@ -26,32 +35,32 @@
faClass: 'text-mt'
});
- menuService.addSubMenuItem('account', 'settings', {
- title: 'EDIT_PROFILE_PIC',
- state: 'settings.picture',
- faIcon: 'fa-image',
- faClass: 'text-mt'
- });
-
- menuService.addSubMenuItem('account', 'settings', {
- title: 'EDIT_SIGNATURE',
- state: 'settings.signature',
- faIcon: 'fa-sign',
- faClass: 'text-mt'
- });
-
- menuService.addSubMenuItem('account', 'settings', {
- title: 'CHANGE_PASSWORD',
- state: 'settings.password',
- faIcon: 'fa-lock',
- faClass: 'text-mt'
- });
-
- menuService.addSubMenuItem('account', 'settings', {
- title: 'RESET_PASSKEY',
- state: 'settings.passkey',
- faIcon: 'fa-key',
- faClass: 'text-mt'
- });
+ // menuService.addSubMenuItem('account', 'settings', {
+ // title: 'EDIT_PROFILE_PIC',
+ // state: 'settings.picture',
+ // faIcon: 'fa-image',
+ // faClass: 'text-mt'
+ // });
+ //
+ // menuService.addSubMenuItem('account', 'settings', {
+ // title: 'EDIT_SIGNATURE',
+ // state: 'settings.signature',
+ // faIcon: 'fa-sign',
+ // faClass: 'text-mt'
+ // });
+ //
+ // menuService.addSubMenuItem('account', 'settings', {
+ // title: 'CHANGE_PASSWORD',
+ // state: 'settings.password',
+ // faIcon: 'fa-lock',
+ // faClass: 'text-mt'
+ // });
+ //
+ // menuService.addSubMenuItem('account', 'settings', {
+ // title: 'RESET_PASSKEY',
+ // state: 'settings.passkey',
+ // faIcon: 'fa-key',
+ // faClass: 'text-mt'
+ // });
}
}());
diff --git a/modules/core/client/controllers/header.client.controller.js b/modules/core/client/controllers/header.client.controller.js
index a7174b79..9f45eae6 100644
--- a/modules/core/client/controllers/header.client.controller.js
+++ b/modules/core/client/controllers/header.client.controller.js
@@ -124,23 +124,23 @@
/**
* $scope.$watch($('#nav-top-menu').width())
*/
- $scope.$watch(function () {
- return $('#nav-top-menu').width();
- }, function (newVal, oldVal) {
- if (newVal) {
- if (window.outerWidth > 767 && window.outerWidth < 992) { //sm screen
- if (newVal > 540) {
- $('a[ui-sref="chat"]').css('display', 'none');
- }
- } else if (window.outerWidth > 991 && window.outerWidth < 1200) { //md screen
- if (newVal > 580) {
- $('a[ui-sref="chat"]').css('display', 'none');
- }
- } else {
- $('a[ui-sref="chat"]').css('display', 'block');
- }
- }
- });
+ // $scope.$watch(function () {
+ // return $('#nav-top-menu').width();
+ // }, function (newVal, oldVal) {
+ // if (newVal) {
+ // if (window.outerWidth > 767 && window.outerWidth < 992) { //sm screen
+ // if (newVal > 540) {
+ // $('a[ui-sref="chat"]').css('display', 'none');
+ // }
+ // } else if (window.outerWidth > 991 && window.outerWidth < 1200) { //md screen
+ // if (newVal > 580) {
+ // $('a[ui-sref="chat"]').css('display', 'none');
+ // }
+ // } else {
+ // $('a[ui-sref="chat"]').css('display', 'block');
+ // }
+ // }
+ // });
/**
* auth-user-changed
diff --git a/modules/core/client/directives/up-to-top.client.directive.js b/modules/core/client/directives/up-to-top.client.directive.js
index 1ea945c5..19f2c3b7 100644
--- a/modules/core/client/directives/up-to-top.client.directive.js
+++ b/modules/core/client/directives/up-to-top.client.directive.js
@@ -24,6 +24,7 @@
element.css('bottom', '20px');
element.css('width', '36px');
element.css('height', '36px');
+ element.css('z-index', 1);
element.css('border-radius', '50%');
element.css('backgroundColor', 'rgba(255, 255, 255, 0.8)');
diff --git a/modules/core/client/less/home.less b/modules/core/client/less/home.less
index 5753c9dc..cdb0588a 100644
--- a/modules/core/client/less/home.less
+++ b/modules/core/client/less/home.less
@@ -15,23 +15,6 @@
}
}
-.header-dot-class-admin {
- display: none;
- position: absolute;
- width: 10px;
- height: 10px;
- top: 12px;
- right: 25px;
- border-radius: 50%;
- border: solid 1px #fff;
- &.new-torrent {
- background-color: @brand-info;
- }
- &.opened-tickets {
- background-color: @brand-danger !important;
- }
-}
-
.badge-class-admin-torrents {
display: none;
}
diff --git a/modules/core/client/less/margin.less b/modules/core/client/less/margin.less
index 1b429c41..75ce998a 100644
--- a/modules/core/client/less/margin.less
+++ b/modules/core/client/less/margin.less
@@ -3,98 +3,122 @@
/**
margin-top
*/
-.margin-top-2 { margin-top: 2px; }
-.margin-top-5 { margin-top: 5px; }
-.margin-top-10 { margin-top: 10px; }
-.margin-top-15 { margin-top: 15px; }
-.margin-top-20 { margin-top: 20px; }
-.margin-top-30 { margin-top: 30px; }
-.margin-top-40 { margin-top: 40px; }
-.margin-top-50 { margin-top: 50px; }
-.margin-top-100 { margin-top: 100px; }
+.margin-top-2 { margin-top: 2px !important; }
+.margin-top-5 { margin-top: 5px !important; }
+.margin-top-10 { margin-top: 10px !important; }
+.margin-top-15 { margin-top: 15px !important; }
+.margin-top-20 { margin-top: 20px !important; }
+.margin-top-30 { margin-top: 30px !important; }
+.margin-top-40 { margin-top: 40px !important; }
+.margin-top-50 { margin-top: 50px !important; }
+.margin-top-100 { margin-top: 100px !important; }
/**
margin-bottom
*/
-.margin-bottom-5 { margin-bottom: 5px; }
-.margin-bottom-10 { margin-bottom: 10px; }
-.margin-bottom-15 { margin-bottom: 15px; }
-.margin-bottom-20 { margin-bottom: 20px; }
-.margin-bottom-30 { margin-bottom: 30px; }
-.margin-bottom-40 { margin-bottom: 40px; }
-.margin-bottom-50 { margin-bottom: 50px; }
+.margin-bottom-5 { margin-bottom: 5px !important; }
+.margin-bottom-10 { margin-bottom: 10px !important; }
+.margin-bottom-15 { margin-bottom: 15px !important; }
+.margin-bottom-20 { margin-bottom: 20px !important; }
+.margin-bottom-30 { margin-bottom: 30px !important; }
+.margin-bottom-40 { margin-bottom: 40px !important; }
+.margin-bottom-50 { margin-bottom: 50px !important; }
/**
margin-right
*/
-.margin-right-10 { margin-right: 10px; }
-.margin-right-20 { margin-right: 20px; }
-.margin-right-30 { margin-right: 30px; }
-.margin-right-40 { margin-right: 40px; }
-.margin-right-50 { margin-right: 50px; }
+.margin-right-10 { margin-right: 10px !important; }
+.margin-right-20 { margin-right: 20px !important; }
+.margin-right-30 { margin-right: 30px !important; }
+.margin-right-40 { margin-right: 40px !important; }
+.margin-right-50 { margin-right: 50px !important; }
/**
margin-left
*/
-.margin-left-10 { margin-left: 10px; }
-.margin-left-20 { margin-left: 20px; }
-.margin-left-30 { margin-left: 30px; }
-.margin-left-40 { margin-left: 40px; }
-.margin-left-50 { margin-left: 50px; }
-.margin-left-80 { margin-left: 80px; }
-.margin-left-100 { margin-left: 100px; }
+.margin-left-10 { margin-left: 10px !important; }
+.margin-left-20 { margin-left: 20px !important; }
+.margin-left-30 { margin-left: 30px !important; }
+.margin-left-40 { margin-left: 40px !important; }
+.margin-left-50 { margin-left: 50px !important; }
+.margin-left-80 { margin-left: 80px !important; }
+.margin-left-100 { margin-left: 100px !important; }
-.margin-left-m-20 { margin-left: -20px; }
+.margin-left-m-20 { margin-left: -20px !important; }
+
+/**
+ padding-left
+ */
+.padding-left-5 { padding-left: 5px !important; }
+.padding-left-10 { padding-left: 10px !important; }
+.padding-left-15 { padding-left: 15px !important; }
+.padding-left-20 { padding-left: 20px !important; }
+.padding-left-30 { padding-left: 30px !important; }
+.padding-left-40 { padding-left: 40px !important; }
+.padding-left-50 { padding-left: 50px !important; }
+.padding-left-100 { padding-left: 100px !important; }
+
+/**
+ padding-right
+ */
+.padding-right-5 { padding-right: 5px !important; }
+.padding-right-10 { padding-right: 10px !important; }
+.padding-right-15 { padding-right: 15px !important; }
+.padding-right-20 { padding-right: 20px !important; }
+.padding-right-30 { padding-right: 30px !important; }
+.padding-right-40 { padding-right: 40px !important; }
+.padding-right-50 { padding-right: 50px !important; }
+.padding-right-100 { padding-right: 100px !important; }
/**
padding-top
*/
-.padding-top-5 { padding-top: 5px; }
-.padding-top-10 { padding-top: 10px; }
-.padding-top-15 { padding-top: 15px; }
-.padding-top-20 { padding-top: 20px; }
-.padding-top-30 { padding-top: 30px; }
-.padding-top-40 { padding-top: 40px; }
-.padding-top-50 { padding-top: 50px; }
-.padding-top-100 { padding-top: 100px; }
+.padding-top-5 { padding-top: 5px !important; }
+.padding-top-10 { padding-top: 10px !important; }
+.padding-top-15 { padding-top: 15px !important; }
+.padding-top-20 { padding-top: 20px !important; }
+.padding-top-30 { padding-top: 30px !important; }
+.padding-top-40 { padding-top: 40px !important; }
+.padding-top-50 { padding-top: 50px !important; }
+.padding-top-100 { padding-top: 100px !important; }
/**
padding-bottom
*/
-.padding-bottom-5 { padding-bottom: 5px; }
-.padding-bottom-10 { padding-bottom: 10px; }
-.padding-bottom-15 { padding-bottom: 15px; }
-.padding-bottom-20 { padding-bottom: 20px; }
-.padding-bottom-30 { padding-bottom: 30px; }
-.padding-bottom-40 { padding-bottom: 40px; }
-.padding-bottom-50 { padding-bottom: 50px; }
+.padding-bottom-5 { padding-bottom: 5px !important; }
+.padding-bottom-10 { padding-bottom: 10px !important; }
+.padding-bottom-15 { padding-bottom: 15px !important; }
+.padding-bottom-20 { padding-bottom: 20px !important; }
+.padding-bottom-30 { padding-bottom: 30px !important; }
+.padding-bottom-40 { padding-bottom: 40px !important; }
+.padding-bottom-50 { padding-bottom: 50px !important; }
@media (min-width: @screen-xxs-min) {
- .margin-xxs-bottom-0 { margin-bottom: 0; }
- .margin-xxs-bottom-10 { margin-bottom: 10px; }
- .margin-xxs-bottom-20 { margin-bottom: 20px; }
+ .margin-xxs-bottom-0 { margin-bottom: 0 !important; }
+ .margin-xxs-bottom-10 { margin-bottom: 10px !important; }
+ .margin-xxs-bottom-20 { margin-bottom: 20px !important; }
}
@media (min-width: @screen-xs-min) {
- .margin-xs-bottom-0 { margin-bottom: 0; }
- .margin-xs-bottom-10 { margin-bottom: 10px; }
- .margin-xs-bottom-20 { margin-bottom: 20px; }
+ .margin-xs-bottom-0 { margin-bottom: 0 !important; }
+ .margin-xs-bottom-10 { margin-bottom: 10px !important; }
+ .margin-xs-bottom-20 { margin-bottom: 20px !important; }
}
@media (min-width: @screen-sm-min) {
- .margin-sm-bottom-0 { margin-bottom: 0; }
- .margin-sm-bottom-10 { margin-bottom: 10px; }
- .margin-sm-bottom-20 { margin-bottom: 20px; }
+ .margin-sm-bottom-0 { margin-bottom: 0 !important; }
+ .margin-sm-bottom-10 { margin-bottom: 10px !important; }
+ .margin-sm-bottom-20 { margin-bottom: 20px !important; }
}
@media (min-width: @screen-md-min) {
- .margin-md-bottom-0 { margin-bottom: 0; }
- .margin-md-bottom-10 { margin-bottom: 10px; }
- .margin-md-bottom-20 { margin-bottom: 20px; }
+ .margin-md-bottom-0 { margin-bottom: 0 !important; }
+ .margin-md-bottom-10 { margin-bottom: 10px !important; }
+ .margin-md-bottom-20 { margin-bottom: 20px !important; }
}
@media (min-width: @screen-lg-min) {
- .margin-lg-bottom-0 { margin-bottom: 0; }
- .margin-lg-bottom-10 { margin-bottom: 10px; }
- .margin-lg-bottom-20 { margin-bottom: 20px; }
+ .margin-lg-bottom-0 { margin-bottom: 0 !important; }
+ .margin-lg-bottom-10 { margin-bottom: 10px !important; }
+ .margin-lg-bottom-20 { margin-bottom: 20px !important; }
}
diff --git a/modules/core/client/less/media-hide.less b/modules/core/client/less/media-hide.less
index 7cfcba51..d85ef3c9 100644
--- a/modules/core/client/less/media-hide.less
+++ b/modules/core/client/less/media-hide.less
@@ -25,7 +25,7 @@
}
.xxs-show .xs-show, .sm-show, .md-show, .lg-show {
- display: none;
+ display: none !important;
}
@media (max-width: @screen-xs) {
diff --git a/modules/core/client/less/mt-size.less b/modules/core/client/less/mt-size.less
index 5433589b..8332d038 100644
--- a/modules/core/client/less/mt-size.less
+++ b/modules/core/client/less/mt-size.less
@@ -1,21 +1,22 @@
@import (reference) "mt-var.less";
-.width-50, .min-width-50, .btn-width-50 { min-width: 50px !important; }
-.width-60, .min-width-60, .btn-width-60 { min-width: 60px !important; }
-.width-70, .min-width-70, .btn-width-70 { min-width: 70px !important; }
-.width-80, .min-width-80, .btn-width-80 { min-width: 80px !important; }
-.width-90, .min-width-90, .btn-width-90 { min-width: 90px !important; }
-.width-100, .min-width-100, .btn-width-100 { min-width: 100px !important; }
-.width-120, .min-width-120, .btn-width-120 { min-width: 120px !important; }
-.width-140, .min-width-140, .btn-width-140 { min-width: 140px !important; }
-.width-150, .min-width-150, .btn-width-150 { min-width: 150px !important; }
-.width-160, .min-width-160, .btn-width-160 { min-width: 160px !important; }
-.width-170, .min-width-170, .btn-width-170 { min-width: 170px !important; }
-.width-180, .min-width-180, .btn-width-180 { min-width: 180px !important; }
-.width-200, .min-width-200, .btn-width-200 { min-width: 200px !important; }
-.width-300, .min-width-300 { min-width: 300px !important; }
-.width-400, .min-width-400 { min-width: 400px !important; }
-.width-500, .min-width-500 { min-width: 500px !important; }
+.width-50, .min-width-50, .btn-min-width-50 { min-width: 50px !important; }
+.width-60, .min-width-60, .btn-min-width-60 { min-width: 60px !important; }
+.width-70, .min-width-70, .btn-min-width-70 { min-width: 70px !important; }
+.width-80, .min-width-80, .btn-min-width-80 { min-width: 80px !important; }
+.width-90, .min-width-90, .btn-min-width-90 { min-width: 90px !important; }
+.width-100, .min-width-100, .btn-min-width-100 { min-width: 100px !important; }
+.width-120, .min-width-120, .btn-min-width-120 { min-width: 120px !important; }
+.width-140, .min-width-140, .btn-min-width-140 { min-width: 140px !important; }
+.width-150, .min-width-150, .btn-min-width-150 { min-width: 150px !important; }
+.width-160, .min-width-160, .btn-min-width-160 { min-width: 160px !important; }
+.width-170, .min-width-170, .btn-min-width-170 { min-width: 170px !important; }
+.width-180, .min-width-180, .btn-min-width-180 { min-width: 180px !important; }
+.width-190, .min-width-190, .btn-min-width-190 { min-width: 190px !important; }
+.width-200, .min-width-200, .btn-min-width-200 { min-width: 200px !important; }
+.width-300, .min-width-300 { min-width: 300px !important; }
+.width-400, .min-width-400 { min-width: 400px !important; }
+.width-500, .min-width-500 { min-width: 500px !important; }
.max-width-10 { max-width: 10px !important; }
.max-width-20 { max-width: 20px !important; }
@@ -36,6 +37,24 @@
.max-width-400 { max-width: 400px !important; }
.max-width-500 { max-width: 500px !important; }
+.width-50 { width: 50px !important; }
+.width-60 { width: 60px !important; }
+.width-70 { width: 70px !important; }
+.width-80 { width: 80px !important; }
+.width-90 { width: 90px !important; }
+.width-100 { width: 100px !important; }
+.width-120 { width: 120px !important; }
+.width-140 { width: 140px !important; }
+.width-150 { width: 150px !important; }
+.width-160 { width: 160px !important; }
+.width-170 { width: 170px !important; }
+.width-180 { width: 180px !important; }
+.width-190 { width: 190px !important; }
+.width-200 { width: 200px !important; }
+.width-300 { width: 300px !important; }
+.width-400 { width: 400px !important; }
+.width-500 { width: 500px !important; }
+
@media (min-width: @screen-xxs-min) {
.min-xss-width-10 { min-width: 10px !important; }
.min-xss-width-20 { min-width: 20px !important; }
diff --git a/modules/core/client/less/mt.less b/modules/core/client/less/mt.less
index 4cf025fd..919ccc0b 100644
--- a/modules/core/client/less/mt.less
+++ b/modules/core/client/less/mt.less
@@ -50,22 +50,11 @@ body {
cursor: pointer;
font-size: 12px;
color: @mt-base-color;
- text-shadow: 0 0 1px #000,-0 -0 1px #000;
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.9);
- border-radius: 4px;
- background-color: transparent;
- margin-top: 16px;
- padding: 2px 5px;
+ margin: 0 5px;
white-space: nowrap;
overflow: hidden;
box-sizing: border-box;
- @media (min-width: @screen-md) and (max-width: @screen-md-max) {
- width: 120px;
- }
- @media (min-width: @screen-lg) {
- width: 180px;
- }
-
+ max-width: 180px;
span {
display: inline-block;
padding-left: 100%; /* show the marquee just outside the paragraph */
@@ -87,23 +76,6 @@ body {
}
}
-.header-red-dot {
- position: absolute;
- width: 10px;
- height: 10px;
- top: 12px;
- left: 35px;
- border-radius: 50%;
- border: solid 1px #fff;
-
- &.bg-msg {
- background-color: @btn-info-bg !important;
- }
- &.bg-hnr {
- background-color: @btn-danger-bg;
- }
-}
-
.user-header-dropdown-toggle {
.img {
position: relative;
@@ -449,25 +421,6 @@ body {
}
}
-.score-level {
- cursor: pointer;
- color: #FF6600;
- > kbd {
- font-size: 12px;
- background-color: #FF6600;
- }
-}
-
-.score-level-default {
- cursor: pointer;
- color: #333 !important;
- > kbd {
- font-size: 12px;
- color: #333 !important;
- background-color: #eee !important;
- }
-}
-
.menu-score {
position: absolute;
right: 10px;
@@ -521,7 +474,7 @@ body {
color: @brand-success;
background-color: @alert-success-bg;
font-size: 12px;
- border: solid 1px @brand-success;
+ border: solid 1px @brand-success;
border-radius: 3px;
}
}
@@ -1457,12 +1410,24 @@ body {
> a {
padding-left: 10px;
padding-right: 10px;
+ .header-red-dot {
+ left: 30px;
+ }
+ .header-dot-class-admin {
+ right: 16px;
+ }
}
}
@media (min-width: @screen-md) and (max-width: @screen-md-max) {
> a {
padding-left: 12px;
padding-right: 12px;
+ .header-red-dot {
+ left: 32px;
+ }
+ .header-dot-class-admin {
+ right: 18px;
+ }
}
}
}
@@ -1475,6 +1440,48 @@ body {
}
}
}
+ .menu-left {
+ .dropdown-menu {
+ @media (min-width: @screen-sm) and (max-width: @screen-sm-max) {
+ right: 0;
+ left: auto;
+ }
+ }
+ }
+}
+
+.header-dot-class-admin {
+ display: none;
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ top: 12px;
+ right: 21px;
+ border-radius: 50%;
+ border: solid 1px #fff;
+ &.new-torrent {
+ background-color: @brand-info;
+ }
+ &.opened-tickets {
+ background-color: @brand-danger !important;
+ }
+}
+
+.header-red-dot {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ top: 12px;
+ left: 35px;
+ border-radius: 50%;
+ border: solid 1px #fff;
+
+ &.bg-msg {
+ background-color: @btn-info-bg !important;
+ }
+ &.bg-hnr {
+ background-color: @btn-danger-bg;
+ }
}
.torrent-info-tabs {
@@ -1821,13 +1828,6 @@ body {
color: @mt-base-color;
}
-.admin-user-info {
- hr {
- margin-bottom: 15px;
- margin-top: 5px;
- }
-}
-
.lang-list {
margin-top: 5px;
padding-left: 5px;
@@ -1934,15 +1934,6 @@ body {
color: @mt-base-color;
}
-.curr-score {
- color: @mt-base-color;
- font-size: 48px;
-}
-
-.score-progress {
- margin-bottom: 2px;
-}
-
.mt-title {
font-size: 18px;
}
diff --git a/modules/core/client/services/data-middle.client.service.js b/modules/core/client/services/data-middle.client.service.js
new file mode 100644
index 00000000..9ac558c0
--- /dev/null
+++ b/modules/core/client/services/data-middle.client.service.js
@@ -0,0 +1,26 @@
+(function () {
+ 'use strict';
+
+ angular
+ .module('core')
+ .factory('MiddleDataServices', MiddleDataServices);
+
+ function MiddleDataServices() {
+ var middleData = [];
+
+ var service = {
+ setData: setData,
+ getData: getData
+ };
+
+ return service;
+
+ function setData(dataName, data) {
+ middleData[dataName] = data;
+ }
+
+ function getData(dataName) {
+ return middleData[dataName];
+ }
+ }
+}());
diff --git a/modules/core/client/services/safeColors.client.service.js b/modules/core/client/services/safeColors.client.service.js
new file mode 100644
index 00000000..290f5b5c
--- /dev/null
+++ b/modules/core/client/services/safeColors.client.service.js
@@ -0,0 +1,58 @@
+(function () {
+ 'use strict';
+
+ // Authentication service for user variables
+
+ angular
+ .module('core')
+ .factory('SafeColorsServices', SafeColorsServices);
+
+ function SafeColorsServices() {
+ var colors = [
+ '#000000', '#000033', '#000066', '#000099', '#0000CC', '#0000FF',
+ '#003300', '#003333', '#003366', '#003399', '#0033CC', '#0033FF',
+ '#006600', '#006633', '#006666', '#006699', '#0066CC', '#0066FF',
+ '#009900', '#009933', '#009966', '#009999', '#0099CC', '#0099FF',
+
+ '#330000', '#330033', '#330066', '#330099', '#3300CC', '#3300FF',
+ '#333300', '#333333', '#333366', '#333399', '#3333CC', '#3333FF',
+ '#336600', '#336633', '#336666', '#336699', '#3366CC', '#3366FF',
+ '#339900', '#339933', '#339966', '#339999', '#3399CC', '#3399FF',
+
+ '#660000', '#660033', '#660066', '#660099', '#6600CC', '#6600FF',
+ '#663300', '#663333', '#663366', '#663399', '#6633CC', '#6633FF',
+ '#666600', '#666633', '#666666', '#666699', '#6666CC', '#6666FF',
+ '#669900', '#669933', '#669966', '#669999', '#6699CC', '#6699FF',
+
+ '#990000', '#990033', '#990066', '#990099', '#9900CC', '#9900FF',
+ '#993300', '#993333', '#993366', '#993399', '#9933CC', '#9933FF',
+ '#996600', '#996633', '#996666', '#996699', '#9966CC', '#9966FF',
+ '#999900', '#999933', '#999966', '#999999', '#9999CC', '#9999FF',
+
+ '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF',
+ '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF',
+ '#CC6600', '#CC6633', '#CC6666', '#CC6699', '#CC66CC', '#CC66FF',
+ '#CC9900', '#CC9933', '#CC9966', '#CC9999', '#CC99CC', '#CC99FF',
+
+ '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF',
+ '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
+ '#FF6600', '#FF6633', '#FF6666', '#FF6699', '#FF66CC', '#FF66FF',
+ '#FF9900', '#FF9933', '#FF9966', '#FF9999', '#FF99CC', '#FF99FF'
+ ];
+
+ var service = {
+ getSafeColor: getSafeColor
+ };
+
+ return service;
+
+
+ /**
+ * getSafeColor
+ * @returns {*}
+ */
+ function getSafeColor() {
+ return colors[Math.floor((Math.random() * 144) + 1)];
+ }
+ }
+}());
diff --git a/modules/core/client/views/footer.client.view.html b/modules/core/client/views/footer.client.view.html
index 72719495..28539adf 100644
--- a/modules/core/client/views/footer.client.view.html
+++ b/modules/core/client/views/footer.client.view.html
@@ -61,7 +61,7 @@