From 3bd2f530560a1c3eee796ae554d54c59c9e1e19b Mon Sep 17 00:00:00 2001 From: EvSpirit Date: Wed, 25 Mar 2015 20:18:15 +0300 Subject: [PATCH 001/284] #2893 increment --debug-brk port value when forking js-minifier child process --- src/meta/js.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/meta/js.js b/src/meta/js.js index 85188ab3f7..4f575faa41 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -129,7 +129,12 @@ module.exports = function(Meta) { Meta.js.minify = function(minify, callback) { if (nconf.get('isPrimary') === 'true') { - var minifier = Meta.js.minifierProc = fork('minifier.js'), + var forkProcessParams = {}; + if(global.v8debug) { + forkProcessParams = {execArgv: ['--debug-brk=' + (global.process.debugPort + 1)]}; + } + + var minifier = Meta.js.minifierProc = fork('minifier.js', [], forkProcessParams), onComplete = function(err) { if (err) { winston.error('[meta/js] Minification failed: ' + err.message); From 8a6c189d80d15e7c793997906155480cfcf4492b Mon Sep 17 00:00:00 2001 From: EvSpirit Date: Wed, 25 Mar 2015 20:40:42 +0300 Subject: [PATCH 002/284] #2893 increment --debug-brk port value when forking js-minifier child process --- src/meta/js.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/meta/js.js b/src/meta/js.js index 4f575faa41..ff6ef1e32f 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -129,9 +129,21 @@ module.exports = function(Meta) { Meta.js.minify = function(minify, callback) { if (nconf.get('isPrimary') === 'true') { + /** + * Check if the parent process is running with the debug option --debug (or --debug-brk) + */ var forkProcessParams = {}; if(global.v8debug) { - forkProcessParams = {execArgv: ['--debug-brk=' + (global.process.debugPort + 1)]}; + /** + * use the line below if you want to debug minifier.js script too (or even --debug-brk option, but + * you'll have to setup your debugger and connect to the forked process) + */ + //forkProcessParams = {execArgv: ['--debug=' + (global.process.debugPort + 1), '--nolazy']}; + + /** + * otherwise, just clean up --debug/--debug-brk options which are set up by default from the parent one + */ + forkProcessParams = {execArgv: []}; } var minifier = Meta.js.minifierProc = fork('minifier.js', [], forkProcessParams), From 550140ada7dade2fb7dae24c9c775ce6a3a67c4a Mon Sep 17 00:00:00 2001 From: A Catty Alpaca Date: Thu, 21 May 2015 01:10:56 +0200 Subject: [PATCH 003/284] General-Purpose Dockerfile --- Dockerfile | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..c44b71096d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:0.10-onbuild + +ENV NODE_ENV=production \ + daemon=false \ + silent=false + +CMD node app --setup && npm start +EXPOSE 4567 From c13589735d0a49dc70d8ffc742d4ce1f6bf74bb1 Mon Sep 17 00:00:00 2001 From: Mani Wang Date: Mon, 20 Jul 2015 16:57:35 +0800 Subject: [PATCH 004/284] allow use github module avoid `outdated` error when use github address as module. --- src/meta/dependencies.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/meta/dependencies.js b/src/meta/dependencies.js index 3bc9719890..487640ee81 100644 --- a/src/meta/dependencies.js +++ b/src/meta/dependencies.js @@ -23,7 +23,7 @@ module.exports = function(Meta) { var pkgData = JSON.parse(pkgData), ok = semver.satisfies(pkgData.version, pkg.dependencies[module]); - if (ok) { + if (ok || pkgData._fromGithub) { next(true); } else { process.stdout.write('[' + 'outdated'.yellow + '] ' + module.bold + ' v' + pkgData.version + ', requires ' + pkg.dependencies[module] + '\n') @@ -38,4 +38,4 @@ module.exports = function(Meta) { callback(!ok && global.env !== 'development' ? new Error('dependencies-out-of-date') : null); }); }; -}; \ No newline at end of file +}; From 45df5a3d0b6976b72af2079931be1beadfc66fd0 Mon Sep 17 00:00:00 2001 From: bdharrington7 Date: Tue, 21 Jul 2015 21:20:13 +0800 Subject: [PATCH 005/284] stores the user's bookmark on the server --- public/src/client/topic.js | 17 +++++++++++++---- src/socket.io/topics.js | 5 +++++ src/topics.js | 8 ++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 1cdd1cabbc..c25a910431 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -197,10 +197,19 @@ define('forum/topic', [ } } - var currentBookmark = localStorage.getItem('topic:' + ajaxify.data.tid + ':bookmark'); - - if (!currentBookmark || parseInt(postIndex, 10) >= parseInt(currentBookmark, 10)) { - localStorage.setItem('topic:' + ajaxify.data.tid + ':bookmark', postIndex); + var bookmarkKey = 'topic:' + ajaxify.data.tid + ':bookmark'; + var currentBookmark = localStorage.getItem(bookmarkKey); + + if (!currentBookmark || parseInt(postIndex, 10) > parseInt(currentBookmark, 10)) { + localStorage.setItem(bookmarkKey, postIndex); + if (app.user.uid) { + var data = { + 'tid': ajaxify.data.tid, + 'uid': app.user.uid, + 'postIndex': postIndex + } + socket.emit('topics.bookmark', data); + } app.removeAlert('bookmark'); } diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 6e9cafcf63..02e092aad8 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -96,6 +96,11 @@ SocketTopics.postcount = function(socket, tid, callback) { topics.getTopicField(tid, 'postcount', callback); }; +SocketTopics.bookmark = function(socket, data, callback) { + // data contains tid, uid, and postIndex + topics.setUserBookmark(data, callback); +} + SocketTopics.markAsRead = function(socket, tids, callback) { if(!Array.isArray(tids) || !socket.uid) { return callback(new Error('[[error:invalid-data]]')); diff --git a/src/topics.js b/src/topics.js index 13522aad00..36a7dc89b1 100644 --- a/src/topics.js +++ b/src/topics.js @@ -327,6 +327,14 @@ var async = require('async'), }); } + Topics.getUserBookmark = function (tid, uid, callback) { + Topics.getTopicField(tid + ':bookmarks', uid, callback); + } + + Topics.setUserBookmark = function(data, callback) { + Topics.setTopicField(data.tid + ':bookmarks', data.uid, data.postIndex, callback); + } + Topics.getTopicField = function(tid, field, callback) { db.getObjectField('topic:' + tid, field, callback); }; From 4d99f60b3d1c7788ceafa1ab05eb15b5dda1300e Mon Sep 17 00:00:00 2001 From: bdharrington7 Date: Tue, 21 Jul 2015 23:46:05 +0800 Subject: [PATCH 006/284] uses server-side bookmark if available --- public/src/client/topic.js | 8 +++++--- src/topics.js | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index c25a910431..f2e1b0bab4 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -116,7 +116,8 @@ define('forum/topic', [ }; function handleBookmark(tid) { - var bookmark = localStorage.getItem('topic:' + tid + ':bookmark'); + // use the user's bookmark data if available, fallback to local if available + var bookmark = ajaxify.data.bookmark || localStorage.getItem('topic:' + tid + ':bookmark'); var postIndex = getPostIndex(); if (postIndex && window.location.search.indexOf('page=') === -1) { @@ -198,10 +199,9 @@ define('forum/topic', [ } var bookmarkKey = 'topic:' + ajaxify.data.tid + ':bookmark'; - var currentBookmark = localStorage.getItem(bookmarkKey); + var currentBookmark = ajaxify.data.bookmark || localStorage.getItem(bookmarkKey); if (!currentBookmark || parseInt(postIndex, 10) > parseInt(currentBookmark, 10)) { - localStorage.setItem(bookmarkKey, postIndex); if (app.user.uid) { var data = { 'tid': ajaxify.data.tid, @@ -209,6 +209,8 @@ define('forum/topic', [ 'postIndex': postIndex } socket.emit('topics.bookmark', data); + } else { + localStorage.setItem(bookmarkKey, postIndex); } app.removeAlert('bookmark'); } diff --git a/src/topics.js b/src/topics.js index 36a7dc89b1..44e277e04f 100644 --- a/src/topics.js +++ b/src/topics.js @@ -221,7 +221,8 @@ var async = require('async'), category: async.apply(Topics.getCategoryData, tid), threadTools: async.apply(plugins.fireHook, 'filter:topic.thread_tools', {topic: topicData, uid: uid, tools: []}), tags: async.apply(Topics.getTopicTagsObjects, tid), - isFollowing: async.apply(Topics.isFollowing, [tid], uid) + isFollowing: async.apply(Topics.isFollowing, [tid], uid), + bookmark: async.apply(Topics.getUserBookmark, tid, uid) }, function(err, results) { if (err) { return callback(err); @@ -232,6 +233,7 @@ var async = require('async'), topicData.thread_tools = results.threadTools.tools; topicData.tags = results.tags; topicData.isFollowing = results.isFollowing[0]; + topicData.bookmark = results.bookmark; topicData.unreplied = parseInt(topicData.postcount, 10) === 1; topicData.deleted = parseInt(topicData.deleted, 10) === 1; From 54180acf9b4e2f26152568324515c544b48ba4e6 Mon Sep 17 00:00:00 2001 From: bdharrington7 Date: Wed, 22 Jul 2015 06:55:48 +0800 Subject: [PATCH 007/284] saves updated bookmark in callback --- public/src/client/topic.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index f2e1b0bab4..858c3d7fd3 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -208,10 +208,19 @@ define('forum/topic', [ 'uid': app.user.uid, 'postIndex': postIndex } - socket.emit('topics.bookmark', data); + socket.emit('topics.bookmark', data, function(err) { + if (err) { + console.warn('Error saving bookmark:', err); + } + ajaxify.data.bookmark = postIndex; + }); } else { localStorage.setItem(bookmarkKey, postIndex); } + } + + // removes the bookmark alert when we get to / past the bookmark + if (!currentBookmark || parseInt(postIndex, 10) >= parseInt(currentBookmark, 10)) { app.removeAlert('bookmark'); } From 92968dfd8d6db3fa28a409609abbe75ac55ea8b5 Mon Sep 17 00:00:00 2001 From: Mani Wang Date: Wed, 22 Jul 2015 19:49:15 +0800 Subject: [PATCH 008/284] avoid outdated error when use github address as module --- src/meta/dependencies.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/meta/dependencies.js b/src/meta/dependencies.js index 487640ee81..419708381f 100644 --- a/src/meta/dependencies.js +++ b/src/meta/dependencies.js @@ -23,7 +23,7 @@ module.exports = function(Meta) { var pkgData = JSON.parse(pkgData), ok = semver.satisfies(pkgData.version, pkg.dependencies[module]); - if (ok || pkgData._fromGithub) { + if (ok || pkgData._resolved.indexOf('//github.com') != -1) { next(true); } else { process.stdout.write('[' + 'outdated'.yellow + '] ' + module.bold + ' v' + pkgData.version + ', requires ' + pkg.dependencies[module] + '\n') From 29fcbf67507175be3526fcbefe000921115a1670 Mon Sep 17 00:00:00 2001 From: jsdream Date: Fri, 24 Jul 2015 18:18:22 +0300 Subject: [PATCH 009/284] Add 'filter:middleware.renderHeader' hook --- src/middleware/middleware.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 77951daf74..08241a7a59 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -286,7 +286,9 @@ middleware.renderHeader = function(req, res, callback) { templateValues.template = {name: res.locals.template}; templateValues.template[res.locals.template] = true; - app.render('header', templateValues, callback); + plugins.fireHook('filter:middleware.renderHeader', {templateValues: templateValues, req: req, res: res}, function(err, data) { + app.render('header', data.templateValues, callback); + }); }); }; @@ -495,4 +497,4 @@ module.exports = function(webserver) { middleware.admin = require('./admin')(webserver); return middleware; -}; \ No newline at end of file +}; From c0ec6faed343972d961ae7806bf30a0a987de9f1 Mon Sep 17 00:00:00 2001 From: bdharrington7 Date: Mon, 27 Jul 2015 19:59:19 -0700 Subject: [PATCH 010/284] Clarifies code by calling native db method instead of Topics method --- src/topics.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/topics.js b/src/topics.js index 81839f9d68..8ba4c9c513 100644 --- a/src/topics.js +++ b/src/topics.js @@ -330,12 +330,12 @@ var async = require('async'), } Topics.getUserBookmark = function (tid, uid, callback) { - Topics.getTopicField(tid + ':bookmarks', uid, callback); - } + db.getObjectField('topic:' + tid + ':bookmarks', uid, callback); + }; Topics.setUserBookmark = function(data, callback) { - Topics.setTopicField(data.tid + ':bookmarks', data.uid, data.postIndex, callback); - } + db.setObjectField('topic:' + data.tid + ':bookmarks', data.uid, data.postIndex, callback); + }; Topics.getTopicField = function(tid, field, callback) { db.getObjectField('topic:' + tid, field, callback); From 05411651b3bdd7bbe373e99a4f9a569fa6b9212f Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 28 Jul 2015 13:26:52 -0400 Subject: [PATCH 011/284] server side check so you can't leave admin group --- src/socket.io/groups.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/socket.io/groups.js b/src/socket.io/groups.js index 6f2d364b0a..7ee8d59b0b 100644 --- a/src/socket.io/groups.js +++ b/src/socket.io/groups.js @@ -43,6 +43,10 @@ SocketGroups.leave = function(socket, data, callback) { return callback(new Error('[[error:invalid-uid]]')); } + if (data.groupName === 'administrators') { + return callback(new Error('[[error:cant-remove-self-as-admin]]')); + } + groups.leave(data.groupName, socket.uid, callback); }; @@ -131,7 +135,7 @@ function acceptRejectAll(type, socket, data, callback) { } ], callback); }); -}; +} SocketGroups.issueInvite = function(socket, data, callback) { if (!data) { From 47cc1083df8c7239b96cb51d5f138c84837b5b4c Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 28 Jul 2015 15:03:20 -0400 Subject: [PATCH 012/284] fix mark all read --- src/socket.io/topics.js | 6 +++--- src/topics/unread.js | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 6e9cafcf63..06ea14d9d7 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -97,7 +97,7 @@ SocketTopics.postcount = function(socket, tid, callback) { }; SocketTopics.markAsRead = function(socket, tids, callback) { - if(!Array.isArray(tids) || !socket.uid) { + if (!Array.isArray(tids) || !socket.uid) { return callback(new Error('[[error:invalid-data]]')); } @@ -123,14 +123,14 @@ SocketTopics.markAsRead = function(socket, tids, callback) { }; SocketTopics.markTopicNotificationsRead = function(socket, tid, callback) { - if(!tid || !socket.uid) { + if (!tid || !socket.uid) { return callback(new Error('[[error:invalid-data]]')); } topics.markTopicNotificationsRead(tid, socket.uid); }; SocketTopics.markAllRead = function(socket, data, callback) { - topics.getLatestTidsFromSet('topics:recent', 0, -1, 'day', function(err, tids) { + db.getSortedSetRevRangeByScore('topics:recent', 0, -1, '+inf', Date.now() - topics.unreadCutoff, function(err, tids) { if (err) { return callback(err); } diff --git a/src/topics/unread.js b/src/topics/unread.js index b0252d02ce..7abaf5ab4c 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -14,6 +14,8 @@ module.exports = function(Topics) { var unreadCutoff = 86400000 * 2; + Topics.unreadCutoff = unreadCutoff; + Topics.getTotalUnread = function(uid, callback) { Topics.getUnreadTids(0, uid, 0, 20, function(err, tids) { callback(err, tids ? tids.length : 0); From 60a6775c7234fffb3f0064c67e9e2389b0d7cc8a Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 12:41:09 -0400 Subject: [PATCH 013/284] Changed behaviour of the Chat Typing Notification Instead of being placed at the bottom of the modal/list, it will now be displayed at the top of the modal, and not shown in the chats page at all (as it is already present in the contact list) --- public/src/client/chats.js | 12 ------------ public/src/modules/chat.js | 7 ++----- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 95fa9266b7..68ee5bf98a 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -148,22 +148,10 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', }); socket.on('event:chats.userStartTyping', function(withUid) { - var typingNotifEl = $('.user-typing'); - - if (Chats.isCurrentChat(withUid)) { - typingNotifEl.removeClass('hide'); - } - $('.chats-list li[data-uid="' + withUid + '"]').addClass('typing'); }); socket.on('event:chats.userStopTyping', function(withUid) { - var typingNotifEl = $('.user-typing'); - - if (Chats.isCurrentChat(withUid)) { - typingNotifEl.addClass('hide'); - } - $('.chats-list li[data-uid="' + withUid + '"]').removeClass('typing'); }); diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 54b8fbe93f..da4efcafd5 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -312,8 +312,6 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra } }); - chatModal.find('.user-typing .text').translateText('[[modules:chat.user_typing, ' + data.username + ']]'); - taskbar.push('chat', chatModal.attr('UUID'), { title: data.username, touid: data.touid, @@ -459,14 +457,13 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra } module.appendChatMessage = function(chatModal, data, done) { - var chatContent = chatModal.find('#chat-content'), - typingNotif = chatModal.find('.user-typing'); + var chatContent = chatModal.find('#chat-content'); Chats.parseMessage(data, function(html) { var message = $(html); message.find('img:not(".chat-user-image")').addClass('img-responsive'); message.find('.timeago').timeago(); - message.insertBefore(typingNotif); + message.appendTo(chatContent); Chats.scrollToBottom(chatContent); if (typeof done === 'function') { From 81dc2b96150a01523e889f1955fcba30f5faed65 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 12:43:25 -0400 Subject: [PATCH 014/284] updated theme minvers --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6d0d473261..f00fb0e28f 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-rewards-essentials": "^0.0.1", "nodebb-theme-lavender": "^1.0.48", - "nodebb-theme-persona": "^1.0.20", - "nodebb-theme-vanilla": "^2.0.16", + "nodebb-theme-persona": "^1.0.22", + "nodebb-theme-vanilla": "^2.0.18", "nodebb-widget-essentials": "^1.0.2", "npm": "^2.1.4", "passport": "^0.2.1", From 2593f1b4d9122d9f395bd6dbab0d471659120d50 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 12:58:06 -0400 Subject: [PATCH 015/284] Fix bug where new chat messages would not append ... due to incorrect class and id assignment of the chat modal. Regression was caused by an earlier commit that moved the typing span elsewhere. --- public/src/client/chats.js | 5 +++-- public/src/modules/chat.js | 16 ++++++++-------- src/messaging.js | 3 +++ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 68ee5bf98a..d9b309bd5d 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -125,8 +125,9 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', }; function onMessagesParsed(html) { - var newMessage = $(html); - newMessage.insertBefore($('.user-typing')); + var newMessage = $(html), + chatContainer = $('.chat-content'); + newMessage.appendTo(chatContainer); newMessage.find('.timeago').timeago(); newMessage.find('img:not(".chat-user-image")').addClass('img-responsive'); Chats.scrollToBottom($('.expanded-chat .chat-content')); diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index da4efcafd5..8d2fe2217b 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -80,7 +80,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra if (modal.is(":visible")) { taskbar.updateActive(modal.attr('UUID')); - Chats.scrollToBottom(modal.find('#chat-content')); + Chats.scrollToBottom(modal.find('.chat-content')); } else { module.toggleNew(modal.attr('UUID'), true, true); } @@ -111,7 +111,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra socket.on('event:chats.userStartTyping', function(withUid) { var modal = module.getModal(withUid); - var chatContent = modal.find('#chat-content'); + var chatContent = modal.find('.chat-content'); if (!chatContent.length) { return; } @@ -234,7 +234,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra return; } - chatModal.find('#chat-content').css('height', module.calculateChatListHeight(chatModal)); + chatModal.find('.chat-content').css('height', module.calculateChatListHeight(chatModal)); }); chatModal.draggable({ @@ -373,7 +373,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra chatModal.removeClass('hide'); checkStatus(chatModal); taskbar.updateActive(uuid); - Chats.scrollToBottom(chatModal.find('#chat-content')); + Chats.scrollToBottom(chatModal.find('.chat-content')); module.bringModalToTop(chatModal); module.focusInput(chatModal); socket.emit('modules.chats.markRead', chatModal.attr('touid')); @@ -387,7 +387,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra module.enableMobileBehaviour = function(modalEl) { app.toggleNavbar(false); modalEl.attr('data-mobile', '1'); - var messagesEl = modalEl.find('#chat-content'); + var messagesEl = modalEl.find('.chat-content'); messagesEl.css('height', module.calculateChatListHeight(modalEl)); $(window).on('resize', function() { @@ -402,7 +402,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra module.calculateChatListHeight = function(modalEl) { var totalHeight = modalEl.find('.modal-content').outerHeight() - modalEl.find('.modal-header').outerHeight(), padding = parseInt(modalEl.find('.modal-body').css('padding-top'), 10) + parseInt(modalEl.find('.modal-body').css('padding-bottom'), 10), - contentMargin = parseInt(modalEl.find('#chat-content').css('margin-top'), 10) + parseInt(modalEl.find('#chat-content').css('margin-bottom'), 10), + contentMargin = parseInt(modalEl.find('.chat-content').css('margin-top'), 10) + parseInt(modalEl.find('.chat-content').css('margin-bottom'), 10), sinceHeight = modalEl.find('.since-bar').outerHeight(true), inputGroupHeight = modalEl.find('.input-group').outerHeight(); @@ -426,7 +426,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra function loadChatSince(chatModal, since, callback) { socket.emit('modules.chats.get', {touid: chatModal.attr('touid'), since: since}, function(err, messages) { - var chatContent = chatModal.find('#chat-content'); + var chatContent = chatModal.find('.chat-content'); chatContent.find('.chat-message').remove(); module.appendChatMessage(chatModal, messages, callback); }); @@ -457,7 +457,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra } module.appendChatMessage = function(chatModal, data, done) { - var chatContent = chatModal.find('#chat-content'); + var chatContent = chatModal.find('.chat-content'); Chats.parseMessage(data, function(html) { var message = $(html); diff --git a/src/messaging.js b/src/messaging.js index 9edd99d836..bb1ce85182 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -164,6 +164,9 @@ var db = require('./database'), if (index > 0 && parseInt(message.timestamp, 10) > parseInt(messages[index-1].timestamp, 10) + (1000*60*5)) { // If it's been 5 minutes, this is a new set of messages message.newSet = true; + } else if (index > 0 && message.fromuid !== messages[index-1].fromuid) { + // If the previous message was from the other person, this is also a new set + message.newSet = true } return message; From 8b5195fa827d58d65a1c3582795adda54513d938 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 12:59:38 -0400 Subject: [PATCH 016/284] updating theme minvers again --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f00fb0e28f..6a50b86f93 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-rewards-essentials": "^0.0.1", "nodebb-theme-lavender": "^1.0.48", - "nodebb-theme-persona": "^1.0.22", - "nodebb-theme-vanilla": "^2.0.18", + "nodebb-theme-persona": "^1.0.23", + "nodebb-theme-vanilla": "^2.0.19", "nodebb-widget-essentials": "^1.0.2", "npm": "^2.1.4", "passport": "^0.2.1", From 98b74f848eaddc574f624c49ebb82fc8252192c5 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 13:16:52 -0400 Subject: [PATCH 017/284] Fix newSet detection on chat messages --- public/src/client/chats.js | 4 +++- public/src/modules/chat.js | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/public/src/client/chats.js b/public/src/client/chats.js index d9b309bd5d..373a97d71c 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -136,11 +136,13 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', Chats.addSocketListeners = function() { socket.on('event:chats.receive', function(data) { var typingNotifEl = $('.user-typing'), - containerEl = $('.expanded-chat ul'); + containerEl = $('.expanded-chat ul'), + lastSpeaker = parseInt(containerEl.find('.chat-message').last().attr('data-uid'), 10); if (Chats.isCurrentChat(data.withUid)) { newMessage = data.self === 0; data.message.self = data.self; + data.message.newSet = lastSpeaker !== data.message.fromuid; Chats.parseMessage(data.message, onMessagesParsed); } else { $('.chats-list li[data-uid="' + data.withUid + '"]').addClass('unread'); diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 8d2fe2217b..5e9c5c7b42 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -457,7 +457,10 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra } module.appendChatMessage = function(chatModal, data, done) { - var chatContent = chatModal.find('.chat-content'); + var chatContent = chatModal.find('.chat-content'), + lastSpeaker = parseInt(chatContent.find('.chat-message').last().attr('data-uid'), 10); + + data.newSet = lastSpeaker !== data.fromuid; Chats.parseMessage(data, function(html) { var message = $(html); From 53a1e6106e0b37e57992e071b6ca7a4ad39dd503 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 14:31:33 -0400 Subject: [PATCH 018/284] Fix bug where an empty chat message would appear in the chat modal --- public/src/modules/chat.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 5e9c5c7b42..41d178a413 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -460,7 +460,9 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra var chatContent = chatModal.find('.chat-content'), lastSpeaker = parseInt(chatContent.find('.chat-message').last().attr('data-uid'), 10); - data.newSet = lastSpeaker !== data.fromuid; + if (!Array.isArray(data)) { + data.newSet = lastSpeaker !== data.fromuid; + } Chats.parseMessage(data, function(html) { var message = $(html); From cead53ec8641c8e3baf4bb1a18041d0ef6e059a6 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jul 2015 15:22:00 -0400 Subject: [PATCH 019/284] Fix list behaviour in chat page --- package.json | 2 +- public/src/client/chats.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6a50b86f93..52665b2e92 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-rewards-essentials": "^0.0.1", "nodebb-theme-lavender": "^1.0.48", - "nodebb-theme-persona": "^1.0.23", + "nodebb-theme-persona": "^1.0.24", "nodebb-theme-vanilla": "^2.0.19", "nodebb-widget-essentials": "^1.0.2", "npm": "^2.1.4", diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 373a97d71c..53478fdcc5 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -164,7 +164,7 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', }; Chats.resizeMainWindow = function() { - var messagesList = $('.expanded-chat ul'); + var messagesList = $('.expanded-chat .chat-content'); if (messagesList.length) { var margin = $('.expanded-chat ul').outerHeight(true) - $('.expanded-chat ul').height(), From 79d772197138bba66b363187c2469c0eba6262c3 Mon Sep 17 00:00:00 2001 From: Axel Date: Wed, 29 Jul 2015 21:33:36 +0200 Subject: [PATCH 020/284] Add category and subcategories localization --- public/language/en_GB/category.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/language/en_GB/category.json b/public/language/en_GB/category.json index 53a0eb3bc8..cb805d7942 100644 --- a/public/language/en_GB/category.json +++ b/public/language/en_GB/category.json @@ -1,4 +1,7 @@ { + "category": "Category", + "subcategories": "Subcategories", + "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", From 91e81065dc2133e8efe308a5cc637e497f8f480a Mon Sep 17 00:00:00 2001 From: Axel Date: Wed, 29 Jul 2015 21:40:41 +0200 Subject: [PATCH 021/284] Localize "Group Name:" --- public/language/en_GB/groups.json | 4 +++- public/src/client/groups/list.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json index fbc841a4d3..f8b5aff0d6 100644 --- a/public/language/en_GB/groups.json +++ b/public/language/en_GB/groups.json @@ -52,5 +52,7 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/src/client/groups/list.js b/public/src/client/groups/list.js index e70eed5789..c02b9904eb 100644 --- a/public/src/client/groups/list.js +++ b/public/src/client/groups/list.js @@ -17,7 +17,7 @@ define('forum/groups/list', ['forum/infinitescroll'], function(infinitescroll) { // Group creation $('button[data-action="new"]').on('click', function() { - bootbox.prompt('Group Name:', function(name) { + bootbox.prompt('[[group:new-group.group_name]]', function(name) { if (name && name.length) { socket.emit('groups.create', { name: name From e24bd2c0e33f642e8fdbc0d6b6a52dc6624d0d9a Mon Sep 17 00:00:00 2001 From: Mikica Ivosevic Date: Thu, 30 Jul 2015 18:53:20 +0200 Subject: [PATCH 022/284] Update index.js, fix outgoing XSS Fix XSS on /outgoing route --- src/controllers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/index.js b/src/controllers/index.js index 25e0b7f1ee..f08d696765 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -181,7 +181,7 @@ Controllers.robots = function (req, res) { Controllers.outgoing = function(req, res, next) { var url = req.query.url, data = { - url: url, + url: validator.escape(url), title: meta.config.title, breadcrumbs: helpers.buildBreadcrumbs([{text: '[[notifications:outgoing_link]]'}]) }; From e592499d48c3112ec24da3ba2f9876dcf1808ff7 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 30 Jul 2015 15:14:02 -0400 Subject: [PATCH 023/284] correctly hide/show user in browsing users --- public/src/app.js | 4 +++- public/src/client/topic/browsing.js | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index a14a403da5..650a509eda 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -185,7 +185,8 @@ app.cacheBuster = null; enter: room, username: app.user.username, userslug: app.user.userslug, - picture: app.user.picture + picture: app.user.picture, + status: app.user.status }, function(err) { if (err) { app.alertError(err.message); @@ -454,6 +455,7 @@ app.cacheBuster = null; return app.alertError(err.message); } $('#logged-in-menu #user_label #user-profile-link>i').attr('class', 'fa fa-circle status ' + status); + app.user.status = status; }); e.preventDefault(); }); diff --git a/public/src/client/topic/browsing.js b/public/src/client/topic/browsing.js index 0bed58f952..9eeb22c9d8 100644 --- a/public/src/client/topic/browsing.js +++ b/public/src/client/topic/browsing.js @@ -4,14 +4,14 @@ /* globals define, app, config, socket, ajaxify */ -define('forum/topic/browsing', ['translator'], function(translator) { +define('forum/topic/browsing', function() { var Browsing = {}; Browsing.onUpdateUsersInRoom = function(data) { if (data && data.room.indexOf('topic_' + ajaxify.data.tid) !== -1) { $('[component="topic/browsing/list"]').parent().toggleClass('hidden', !data.users.length); - for(var i=0; i'); } } From d5128d051332e459d17b4d16bce9a73204a279ad Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 30 Jul 2015 15:23:48 -0400 Subject: [PATCH 024/284] closes #3370 --- public/src/client/notifications.js | 2 +- src/user/approval.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/client/notifications.js b/public/src/client/notifications.js index 2848704541..4f2dfbf197 100644 --- a/public/src/client/notifications.js +++ b/public/src/client/notifications.js @@ -7,7 +7,7 @@ define('forum/notifications', ['components', 'notifications'], function(componen Notifications.init = function() { var listEl = $('.notifications-list'); - listEl.on('click', 'a', function(e) { + listEl.on('click', '[component="notifications/item/link"]', function(e) { var nid = $(this).parents('[data-nid]').attr('data-nid'); socket.emit('notifications.markRead', nid, function(err) { if (err) { diff --git a/src/user/approval.js b/src/user/approval.js index d148842204..2c263d2c46 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -46,7 +46,7 @@ module.exports = function(User) { function sendNotificationToAdmins(username, callback) { notifications.create({ bodyShort: '[[notifications:new_register, ' + username + ']]', - nid: 'new_register' + username, + nid: 'new_register:' + username, path: '/admin/manage/users/registration' }, function(err, notification) { if (err) { From 25203ee67e0df38caceb67dbaf9a9af4a28fa846 Mon Sep 17 00:00:00 2001 From: bdharrington7 Date: Thu, 30 Jul 2015 23:13:34 -0700 Subject: [PATCH 025/284] changes bookmark storage to sortedset, gets uid from socket rather than being passed from client --- public/src/client/topic.js | 11 +++++------ src/socket.io/topics.js | 7 +++---- src/topics.js | 6 +++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 858c3d7fd3..b39d8dc77d 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -203,12 +203,11 @@ define('forum/topic', [ if (!currentBookmark || parseInt(postIndex, 10) > parseInt(currentBookmark, 10)) { if (app.user.uid) { - var data = { - 'tid': ajaxify.data.tid, - 'uid': app.user.uid, - 'postIndex': postIndex - } - socket.emit('topics.bookmark', data, function(err) { + var payload = { + 'tid': ajaxify.data.tid, + 'index': postIndex + }; + socket.emit('topics.bookmark', payload, function(err) { if (err) { console.warn('Error saving bookmark:', err); } diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 02e092aad8..5b4b1c140d 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -96,10 +96,9 @@ SocketTopics.postcount = function(socket, tid, callback) { topics.getTopicField(tid, 'postcount', callback); }; -SocketTopics.bookmark = function(socket, data, callback) { - // data contains tid, uid, and postIndex - topics.setUserBookmark(data, callback); -} +SocketTopics.bookmark = function(socket, payload, callback) { + topics.setUserBookmark(payload.tid, socket.uid, payload.index, callback); +}; SocketTopics.markAsRead = function(socket, tids, callback) { if(!Array.isArray(tids) || !socket.uid) { diff --git a/src/topics.js b/src/topics.js index 8ba4c9c513..9dc3b29cf2 100644 --- a/src/topics.js +++ b/src/topics.js @@ -330,11 +330,11 @@ var async = require('async'), } Topics.getUserBookmark = function (tid, uid, callback) { - db.getObjectField('topic:' + tid + ':bookmarks', uid, callback); + db.sortedSetScore('topic:' + tid + ':bookmarks', uid, callback); }; - Topics.setUserBookmark = function(data, callback) { - db.setObjectField('topic:' + data.tid + ':bookmarks', data.uid, data.postIndex, callback); + Topics.setUserBookmark = function(tid, uid, index, callback) { + db.sortedSetAdd('topic:' + tid + ':bookmarks', index, uid, callback); }; Topics.getTopicField = function(tid, field, callback) { From bd26961fa6ae2c799552074cceb709030793a4b3 Mon Sep 17 00:00:00 2001 From: bdharrington7 Date: Thu, 30 Jul 2015 23:29:14 -0700 Subject: [PATCH 026/284] Makes bookmark click scroll to last read instead of past it --- public/src/client/topic.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index b39d8dc77d..50a8ebe705 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -129,7 +129,7 @@ define('forum/topic', [ timeout: 0, type: 'info', clickfn : function() { - navigator.scrollToPost(parseInt(bookmark, 10), true); + navigator.scrollToPost(parseInt(bookmark - 1, 10), true); }, closefn : function() { localStorage.removeItem('topic:' + tid + ':bookmark'); From 1da5b2ca3445da19c58acc66d546cb677b263f36 Mon Sep 17 00:00:00 2001 From: jsdream Date: Fri, 31 Jul 2015 16:51:55 +0300 Subject: [PATCH 027/284] Add 'filter:recent.build' hook --- src/controllers/categories.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/controllers/categories.js b/src/controllers/categories.js index fe44af90a8..86ff0c69c4 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -26,7 +26,13 @@ categoriesController.recent = function(req, res, next) { data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; data.rssFeedUrl = nconf.get('relative_path') + '/recent.rss'; data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[recent:title]]'}]); - res.render('recent', data); + + plugins.fireHook('filter:recent.build', {req: req, res: res, templateData: data}, function(err, data) { + if (err) { + return next(err); + } + res.render('recent', data.templateData); + }); }); }; From 0dfe2e0e90af19467982217b7220890e563d1e0c Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 31 Jul 2015 20:03:51 -0400 Subject: [PATCH 028/284] only display readable categories in /unread dropdown --- src/controllers/unread.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/controllers/unread.js b/src/controllers/unread.js index 672ec37542..02f0b0cc1f 100644 --- a/src/controllers/unread.js +++ b/src/controllers/unread.js @@ -5,6 +5,7 @@ var async = require('async'), meta = require('../meta'), categories = require('../categories'), + privileges = require('../privileges'), user = require('../user'), topics = require('../topics'), helpers = require('./helpers'); @@ -30,11 +31,15 @@ unreadController.unread = function(req, res, next) { }, function(_results, next) { results = _results; - categories.getMultipleCategoryFields(results.watchedCategories, ['cid', 'name', 'slug', 'icon', 'link', 'disabled'], next); + + privileges.categories.filterCids('read', results.watchedCategories, req.uid, next); + }, + function(cids, next) { + categories.getMultipleCategoryFields(cids, ['cid', 'name', 'slug', 'icon', 'link'], next); }, function(categories, next) { categories = categories.filter(function(category) { - return category && !category.link && !category.disabled; + return category && !category.link; }); categories.forEach(function(category) { category.selected = parseInt(category.cid, 10) === parseInt(cid, 10); From 8178e210e4a0f3e4874207b68644150edc539883 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sat, 1 Aug 2015 17:38:11 -0400 Subject: [PATCH 029/284] Fix indents --- public/language/en_GB/category.json | 6 +++--- public/language/en_GB/groups.json | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/public/language/en_GB/category.json b/public/language/en_GB/category.json index cb805d7942..79166bd772 100644 --- a/public/language/en_GB/category.json +++ b/public/language/en_GB/category.json @@ -1,7 +1,7 @@ { - "category": "Category", - "subcategories": "Subcategories", - + "category": "Category", + "subcategories": "Subcategories", + "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json index f8b5aff0d6..958efd13e0 100644 --- a/public/language/en_GB/groups.json +++ b/public/language/en_GB/groups.json @@ -47,12 +47,12 @@ "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", - - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject", - - "new-group.group_name": "Group Name:" + + "membership.accept-invitation": "Accept Invitation", + "membership.invitation-pending": "Invitation Pending", + "membership.join-group": "Join Group", + "membership.leave-group": "Leave Group", + "membership.reject": "Reject", + + "new-group.group_name": "Group Name:" } \ No newline at end of file From 7c0b798036c51286104125d2da7d382642cd1dc7 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sat, 1 Aug 2015 18:45:03 -0400 Subject: [PATCH 030/284] fix indents --- src/controllers/categories.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/controllers/categories.js b/src/controllers/categories.js index 86ff0c69c4..34e1bc1f0b 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -26,13 +26,13 @@ categoriesController.recent = function(req, res, next) { data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; data.rssFeedUrl = nconf.get('relative_path') + '/recent.rss'; data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[recent:title]]'}]); - + plugins.fireHook('filter:recent.build', {req: req, res: res, templateData: data}, function(err, data) { - if (err) { - return next(err); - } - res.render('recent', data.templateData); - }); + if (err) { + return next(err); + } + res.render('recent', data.templateData); + }); }); }; From 808d64e0d9cd27f07bf3109eb308019302b6559f Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sun, 2 Aug 2015 14:42:01 -0400 Subject: [PATCH 031/284] delete topic bookmarks on topic purge --- src/topics.js | 4 ++-- src/topics/delete.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/topics.js b/src/topics.js index 21788c3c8d..e68786d454 100644 --- a/src/topics.js +++ b/src/topics.js @@ -331,11 +331,11 @@ var async = require('async'), } Topics.getUserBookmark = function (tid, uid, callback) { - db.sortedSetScore('topic:' + tid + ':bookmarks', uid, callback); + db.sortedSetScore('tid:' + tid + ':bookmarks', uid, callback); }; Topics.setUserBookmark = function(tid, uid, index, callback) { - db.sortedSetAdd('topic:' + tid + ':bookmarks', index, uid, callback); + db.sortedSetAdd('tid:' + tid + ':bookmarks', index, uid, callback); }; Topics.getTopicField = function(tid, field, callback) { diff --git a/src/topics/delete.js b/src/topics/delete.js index 47cb384214..30c926e1e5 100644 --- a/src/topics/delete.js +++ b/src/topics/delete.js @@ -86,7 +86,8 @@ module.exports = function(Topics) { db.deleteAll([ 'tid:' + tid + ':followers', 'tid:' + tid + ':posts', - 'tid:' + tid + ':posts:votes' + 'tid:' + tid + ':posts:votes', + 'tid:' + tid + ':bookmarks' ], next); }, function(next) { From 8ec08337aa9280f8b8a9ca72ae76e4502fee5cd5 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 3 Aug 2015 19:57:01 -0400 Subject: [PATCH 032/284] closes #3383 --- src/upgrade.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/upgrade.js b/src/upgrade.js index 33f8dccd1c..6d985264b9 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -273,7 +273,7 @@ Upgrade.upgrade = function(callback) { async.eachLimit(users, 100, function(user, next) { var newEmail = user.value.replace(/\uff0E/g, '.'); if (newEmail === user.value) { - return next(); + return process.nextTick(next); } async.series([ async.apply(db.sortedSetRemove, 'email:uid', user.value), @@ -341,13 +341,13 @@ Upgrade.upgrade = function(callback) { if (err) { return callback(err); } - var index = 0; + + userData = userData.filter(function(user) { + return user && user.value; + }); + async.eachLimit(userData, 500, function(userData, next) { - if (userData && userData.value) { - db.sortedSetAdd(set + ':sorted', 0, userData.value.toLowerCase() + ':' + userData.score, next); - } else { - next(); - } + db.sortedSetAdd(set + ':sorted', 0, userData.value.toLowerCase() + ':' + userData.score, next); }, function(err) { callback(err); }); @@ -390,10 +390,9 @@ Upgrade.upgrade = function(callback) { return callback(err); } + groupNames = groupNames.filter(Boolean); + async.eachLimit(groupNames, 500, function(groupName, next) { - if (!groupName) { - return next(); - } db.getObjectFields('group:' + groupName, ['hidden', 'system', 'createtime', 'memberCount'], function(err, groupData) { if (err) { return next(err); From ccb5094d54ed615009f75d249f0c94be9dd0d332 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 4 Aug 2015 10:14:13 -0400 Subject: [PATCH 033/284] Increased contacts limit to 200, from 20 So that if you have more than 20 friends (or followed > 20 people), you will see all of them (up to 200, anyway...) in the "Contacts" portion of the `/chats` route. --- src/controllers/accounts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/accounts.js b/src/controllers/accounts.js index 64a6d26786..1049f06269 100644 --- a/src/controllers/accounts.js +++ b/src/controllers/accounts.js @@ -498,7 +498,7 @@ accountsController.getChats = function(req, res, next) { } async.parallel({ - contacts: async.apply(user.getFollowing, req.user.uid, 0, 19), + contacts: async.apply(user.getFollowing, req.user.uid, 0, 199), recentChats: async.apply(messaging.getRecentChats, req.user.uid, 0, 19) }, function(err, results) { if (err) { From 56b399c9005297d9cba6308bcdcdadbe3e384316 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 4 Aug 2015 10:34:25 -0400 Subject: [PATCH 034/284] Add new mixin, and added mixins to stylesheet.css --- public/less/mixins.less | 18 ++++++++++++++++++ src/meta/css.js | 1 + 2 files changed, 19 insertions(+) diff --git a/public/less/mixins.less b/public/less/mixins.less index e6ea7ceac4..cadde9db5d 100644 --- a/public/less/mixins.less +++ b/public/less/mixins.less @@ -51,4 +51,22 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; +} + +.fix-lists { + ul { + > li { + list-style-type: disc; + + ul > li { + list-style-type: circle; + + ul > li { + list-style-type: square; + } + } + } + + margin-bottom: 10px; + } } \ No newline at end of file diff --git a/src/meta/css.js b/src/meta/css.js index 50369f89fb..c379d410a8 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -69,6 +69,7 @@ module.exports = function(Meta) { source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/textcomplete/jquery.textcomplete.css";'; source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";'; source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/generics.less";'; + source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/mixins.less";'; var acpSource = '\n@import "..' + path.sep + 'public/less/admin/admin";\n' + source; acpSource += '\n@import "..' + path.sep + 'public/less/generics.less";'; From b75dfa9f6ec3b1ba101ad4c7dce5211da34a9471 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 4 Aug 2015 14:10:18 -0400 Subject: [PATCH 035/284] upped theme minvers --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 52665b2e92..5740bc3cea 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-rewards-essentials": "^0.0.1", "nodebb-theme-lavender": "^1.0.48", - "nodebb-theme-persona": "^1.0.24", - "nodebb-theme-vanilla": "^2.0.19", + "nodebb-theme-persona": "^2.0.1", + "nodebb-theme-vanilla": "^3.0.1", "nodebb-widget-essentials": "^1.0.2", "npm": "^2.1.4", "passport": "^0.2.1", From f6be4efe8bb881cb0cb5a1dfccb294dfb0950afe Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 4 Aug 2015 14:25:56 -0400 Subject: [PATCH 036/284] when a post is moved update recent topics order --- src/topics/fork.js | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/topics/fork.js b/src/topics/fork.js index 3302797f38..34eb758300 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -44,7 +44,7 @@ module.exports = function(Topics) { if (err) { return callback(err); } - + Topics.create({uid: results.postData.uid, title: title, cid: results.cid}, function(err, tid) { if (err) { return callback(err); @@ -94,7 +94,7 @@ module.exports = function(Topics) { } if (parseInt(post.tid, 10) === parseInt(tid, 10)) { - return next(new Error('[[error:cant-move-to-same-topic]]')) + return next(new Error('[[error:cant-move-to-same-topic]]')); } postData = post; @@ -117,6 +117,12 @@ module.exports = function(Topics) { Topics.addPostToTopic(tid, pid, postData.timestamp, postData.votes, next); } ], next); + }, + function(results, next) { + async.parallel([ + async.apply(updateRecentTopic, tid), + async.apply(updateRecentTopic, postData.tid) + ], next); } ], function(err) { if (err) { @@ -126,4 +132,23 @@ module.exports = function(Topics) { callback(); }); }; + + function updateRecentTopic(tid, callback) { + async.waterfall([ + function(next) { + Topics.getLatestUndeletedPid(tid, next); + }, + function(pid, next) { + if (!pid) { + return callback(); + } + posts.getPostField(pid, 'timestamp', next); + }, + function(timestamp, next) { + Topics.updateTimestamp(tid, timestamp, next); + } + ], callback); + } + + }; From 9604779be180b5cc185825d4df7ad449d01d9818 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 4 Aug 2015 15:51:35 -0400 Subject: [PATCH 037/284] fix unreplied --- src/topics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/topics.js b/src/topics.js index e68786d454..9da377f58d 100644 --- a/src/topics.js +++ b/src/topics.js @@ -196,7 +196,7 @@ var async = require('async'), topics[i].locked = parseInt(topics[i].locked, 10) === 1; topics[i].deleted = parseInt(topics[i].deleted, 10) === 1; topics[i].unread = !results.hasRead[i]; - topics[i].unreplied = parseInt(topics[i].postcount, 10) <= 1 && meta.config.teaserPost !== 'first'; + topics[i].unreplied = !topics[i].teaser; } } From f53fb1946846687925e79c59e4e125ddca2c80ab Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 4 Aug 2015 16:59:50 -0400 Subject: [PATCH 038/284] Fix #3384 Resolved issue where if a bundled plugin was uninstalled, NodeBB would no longer start as the dep check could not be completed. --- src/meta/dependencies.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/meta/dependencies.js b/src/meta/dependencies.js index 3bc9719890..62f978aaaa 100644 --- a/src/meta/dependencies.js +++ b/src/meta/dependencies.js @@ -19,6 +19,12 @@ module.exports = function(Meta) { fs.readFile(path.join(__dirname, '../../node_modules/', module, 'package.json'), { encoding: 'utf-8' }, function(err, pkgData) { + // If a bundled plugin/theme is not present, skip the dep check (#3384) + if (err && err.code === 'ENOENT' && (module.startsWith('nodebb-plugin') || module.startsWith('nodebb-theme'))) { + winston.warn('[meta/dependencies] Bundled plugin ' + module + ' not found, skipping dependency check.'); + return next(true); + } + try { var pkgData = JSON.parse(pkgData), ok = semver.satisfies(pkgData.version, pkg.dependencies[module]); @@ -30,7 +36,7 @@ module.exports = function(Meta) { next(false); } } catch(e) { - winston.error('[meta.dependencies] Could not read: ' + module); + winston.error('[meta/dependencies] Could not read: ' + module); process.exit(); } }) From e60194292f1906fa1d2decac581b4a580cf8e757 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 6 Aug 2015 12:41:16 -0400 Subject: [PATCH 039/284] Fix a myriad of problems with the ACP/Plugins page - Fixed #3350 - Fixed issue where the normalised API return would have the wrong id for all plugins - Fixed issue where uninstalling a locally installed plugin via ACP would cause NodeBB to crash - Simplified ACP/Plugins client-side code to simply refresh the page after installing or uninstalling a plugin. --- public/src/admin/extend/plugins.js | 17 +---------------- src/plugins.js | 6 +++++- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js index c12e9f02d7..5a70d29a41 100644 --- a/public/src/admin/extend/plugins.js +++ b/public/src/admin/extend/plugins.js @@ -186,22 +186,7 @@ define('admin/extend/plugins', function() { return app.alertError(err.message); } - var targetList = (pluginData.installed ? 'installed' : 'download'), - otherList = (pluginData.installed ? 'download' : 'installed'), - payload = {}; - - payload[targetList] = pluginData; - templates.parse('admin/partials/' + targetList + '_plugin_item', payload, function(html) { - var pluginList = $('ul.' + targetList); - - pluginList.append(html); - $('ul.' + otherList).find('li[data-plugin-id="' + pluginID + '"]').slideUp('slow', function() { - $(this).remove(); - $('html,body').animate({ - scrollTop: pluginList.find('li').last().offset().top - 48 - }, 1000); - }); - }); + ajaxify.refresh(); app.alert({ alert_id: 'plugin_toggled', diff --git a/src/plugins.js b/src/plugins.js index 138948374c..c9a686d8f8 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -170,9 +170,13 @@ var fs = require('fs'), require('request')(url, { json: true }, function(err, res, body) { + if (res.statusCode === 404 || !body.payload) { + return callback(err, {}); + } + Plugins.normalise([body.payload], function(err, normalised) { normalised = normalised.filter(function(plugin) { - return plugin.id = id; + return plugin.id === id; }); return callback(err, !err ? normalised[0] : undefined); }); From e341b80d937a1c15bb5e96d509e5ecbec9660995 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 6 Aug 2015 16:25:36 -0400 Subject: [PATCH 040/284] use set to get groups --- src/groups.js | 4 ++-- src/privileges/categories.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/groups.js b/src/groups.js index 4a0d2a563e..f0f7efe066 100644 --- a/src/groups.js +++ b/src/groups.js @@ -105,8 +105,8 @@ var async = require('async'), } }; - Groups.getGroups = function(start, stop, callback) { - db.getSortedSetRevRange('groups:createtime', start, stop, callback); + Groups.getGroups = function(set, start, stop, callback) { + db.getSortedSetRevRange(set, start, stop, callback); }; Groups.get = function(groupName, options, callback) { diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 4572de2e92..feb3c53bc6 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -92,7 +92,7 @@ module.exports = function(privileges) { }), next); }, function(memberSets, next) { - groups.getGroups(0, -1, function(err, groupNames) { + groups.getGroups('groups:createtime', 0, -1, function(err, groupNames) { if (err) { return next(err); } From fba6f3ba8166c9ce106834e890c00cf43847fa9a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 6 Aug 2015 16:38:20 -0400 Subject: [PATCH 041/284] https://github.com/psychobunny/templates.js/issues/33 --- src/controllers/users.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/users.js b/src/controllers/users.js index d416207e29..b2b9c32233 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -40,7 +40,7 @@ usersController.getOnlineUsers = function(req, res, next) { } var userData = { - 'users:online': true, + 'route_users:online': true, search_display: 'hidden', loadmore_display: results.count > 50 ? 'block' : 'hide', users: results.users, @@ -75,7 +75,7 @@ usersController.getUsers = function(set, start, stop, req, res, next) { users: data.users, pagination: pagination.create(1, pageCount) }; - userData[set] = true; + userData['route_' + set] = true; render(req, res, userData, next); }); }; From 1b9c4430762e64b0aa14611b99903e78a0c3fbdd Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 7 Aug 2015 00:58:44 -0400 Subject: [PATCH 042/284] toggle browsing if all users are gone --- public/src/client/topic/browsing.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/src/client/topic/browsing.js b/public/src/client/topic/browsing.js index 9eeb22c9d8..873d95c438 100644 --- a/public/src/client/topic/browsing.js +++ b/public/src/client/topic/browsing.js @@ -59,6 +59,7 @@ define('forum/topic/browsing', function() { var user = activeEl.find('a[data-uid="'+ data.uid + '"]'); if (user.length) { user.parent().toggleClass('hidden', data.status === 'offline'); + activeEl.parent().toggleClass('hidden', !activeEl.children(':not(.hidden)').length); } } From 61dac1a01ede5fdeb83dbb5ff1a518b34e908e8c Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 7 Aug 2015 12:27:35 -0400 Subject: [PATCH 043/284] closes #3390 --- src/views/admin/settings/guest.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/admin/settings/guest.tpl b/src/views/admin/settings/guest.tpl index e0a399f9f7..e338ce3553 100644 --- a/src/views/admin/settings/guest.tpl +++ b/src/views/admin/settings/guest.tpl @@ -27,7 +27,7 @@
From 0534da0ed1debdf26c52d9016d7d7f39637d49a9 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 7 Aug 2015 16:44:20 -0400 Subject: [PATCH 044/284] closes #3389 --- src/middleware/middleware.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 093362c433..f11575b4d4 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -407,7 +407,8 @@ middleware.maintenanceMode = function(req, res, next) { '/templates/[\\w/]+.tpl', '/api/login', '/api/?', - '/language/.+' + '/language/.+', + '/uploads/system/site-logo.png' ], render = function() { res.status(503); From 8f98d03239f2fd0075d0c12e6b024624d14e5a4a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 7 Aug 2015 17:25:35 -0400 Subject: [PATCH 045/284] waterfall for topics --- src/topics.js | 129 ++++++++++++++++++++++++--------------------- src/topics/user.js | 29 +++++----- 2 files changed, 82 insertions(+), 76 deletions(-) diff --git a/src/topics.js b/src/topics.js index 9da377f58d..fd9e19ca24 100644 --- a/src/topics.js +++ b/src/topics.js @@ -97,7 +97,7 @@ var async = require('async'), user.getSettings(uid, next); } }, function(err, results) { - if(err) { + if (err) { return callback(err); } callback(null, Math.ceil((results.index + 1) / results.settings.topicsPerPage)); @@ -107,7 +107,7 @@ var async = require('async'), Topics.getCategoryData = function(tid, callback) { Topics.getTopicField(tid, 'cid', function(err, cid) { if (err) { - callback(err); + return callback(err); } categories.getCategoryData(cid, callback); @@ -144,43 +144,44 @@ var async = require('async'), return callback(null, []); } - Topics.getTopicsData(tids, function(err, topics) { - function mapFilter(array, field) { - return array.map(function(topic) { - return topic && topic[field] && topic[field].toString(); - }).filter(function(value, index, array) { - return utils.isNumber(value) && array.indexOf(value) === index; - }); - } + var uids, cids, topics; - if (err) { - return callback(err); - } - - var uids = mapFilter(topics, 'uid'); - var cids = mapFilter(topics, 'cid'); - - async.parallel({ - teasers: function(next) { - Topics.getTeasers(topics, next); - }, - users: function(next) { - user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], next); - }, - categories: function(next) { - categories.getMultipleCategoryFields(cids, ['cid', 'name', 'slug', 'icon', 'bgColor', 'color', 'disabled'], next); - }, - hasRead: function(next) { - Topics.hasReadTopics(tids, uid, next); - }, - tags: function(next) { - Topics.getTopicsTagsObjects(tids, next); - } - }, function(err, results) { - if (err) { - return callback(err); + async.waterfall([ + function(next) { + Topics.getTopicsData(tids, next); + }, + function(_topics, next) { + function mapFilter(array, field) { + return array.map(function(topic) { + return topic && topic[field] && topic[field].toString(); + }).filter(function(value, index, array) { + return utils.isNumber(value) && array.indexOf(value) === index; + }); } + topics = _topics; + uids = mapFilter(topics, 'uid'); + cids = mapFilter(topics, 'cid'); + + async.parallel({ + users: function(next) { + user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], next); + }, + categories: function(next) { + categories.getMultipleCategoryFields(cids, ['cid', 'name', 'slug', 'icon', 'bgColor', 'color', 'disabled'], next); + }, + hasRead: function(next) { + Topics.hasReadTopics(tids, uid, next); + }, + teasers: function(next) { + Topics.getTeasers(topics, next); + }, + tags: function(next) { + Topics.getTopicsTagsObjects(tids, next); + } + }, next); + }, + function(results, next) { var users = _.object(uids, results.users); var categories = _.object(cids, results.categories); @@ -204,31 +205,36 @@ var async = require('async'), return topic && topic.category && !topic.category.disabled; }); - plugins.fireHook('filter:topics.get', {topics: topics, uid: uid}, function(err, topicData) { - callback(err, topicData.topics); - }); - }); - }); + plugins.fireHook('filter:topics.get', {topics: topics, uid: uid}, next); + }, + function(data, next) { + next(null, data.topics); + } + ], callback); }; Topics.getTopicWithPosts = function(tid, set, uid, start, stop, reverse, callback) { - Topics.getTopicData(tid, function(err, topicData) { - if (err || !topicData) { - return callback(err || new Error('[[error:no-topic]]')); - } - - async.parallel({ - posts: async.apply(getMainPostAndReplies, topicData, set, uid, start, stop, reverse), - category: async.apply(Topics.getCategoryData, tid), - threadTools: async.apply(plugins.fireHook, 'filter:topic.thread_tools', {topic: topicData, uid: uid, tools: []}), - tags: async.apply(Topics.getTopicTagsObjects, tid), - isFollowing: async.apply(Topics.isFollowing, [tid], uid), - bookmark: async.apply(Topics.getUserBookmark, tid, uid) - }, function(err, results) { - if (err) { - return callback(err); + var topicData; + async.waterfall([ + function(next) { + Topics.getTopicData(tid, next); + }, + function(_topicData, next) { + topicData = _topicData; + if (!topicData) { + return callback(new Error('[[error:no-topic]]')); } + async.parallel({ + posts: async.apply(getMainPostAndReplies, topicData, set, uid, start, stop, reverse), + category: async.apply(Topics.getCategoryData, tid), + threadTools: async.apply(plugins.fireHook, 'filter:topic.thread_tools', {topic: topicData, uid: uid, tools: []}), + tags: async.apply(Topics.getTopicTagsObjects, tid), + isFollowing: async.apply(Topics.isFollowing, [tid], uid), + bookmark: async.apply(Topics.getUserBookmark, tid, uid) + }, next); + }, + function(results, next) { topicData.posts = results.posts; topicData.category = results.category; topicData.thread_tools = results.threadTools.tools; @@ -241,11 +247,12 @@ var async = require('async'), topicData.locked = parseInt(topicData.locked, 10) === 1; topicData.pinned = parseInt(topicData.pinned, 10) === 1; - plugins.fireHook('filter:topic.get', {topic: topicData, uid: uid}, function(err, data) { - callback(err, data ? data.topic : null); - }); - }); - }); + plugins.fireHook('filter:topic.get', {topic: topicData, uid: uid}, next); + }, + function(data, next) { + next(null, data.topic); + } + ], callback); }; function getMainPostAndReplies(topic, set, uid, start, stop, reverse, callback) { diff --git a/src/topics/user.js b/src/topics/user.js index 64651c2fd1..4db380efdf 100644 --- a/src/topics/user.js +++ b/src/topics/user.js @@ -2,7 +2,8 @@ 'use strict'; -var db = require('../database'), +var async = require('async'), + db = require('../database'), posts = require('../posts'); @@ -19,24 +20,22 @@ module.exports = function(Topics) { }; Topics.getUids = function(tid, callback) { - Topics.getPids(tid, function(err, pids) { - if (err) { - return callback(err); - } - - posts.getPostsFields(pids, ['uid'], function(err, postData) { - if (err) { - return callback(err); - } - + async.waterfall([ + function(next) { + Topics.getPids(tid, next); + }, + function(pids, next) { + posts.getPostsFields(pids, ['uid'], next); + }, + function(postData, next) { var uids = postData.map(function(post) { return post && post.uid; }).filter(function(uid, index, array) { - return array.indexOf(uid) === index; + return uid && array.indexOf(uid) === index; }); - callback(null, uids); - }); - }); + next(null, uids); + } + ], callback); }; }; \ No newline at end of file From 3c6333606379021917688bac216370a204c1b798 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 7 Aug 2015 17:56:03 -0400 Subject: [PATCH 046/284] another waterfall --- src/topics/teaser.js | 80 +++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/src/topics/teaser.js b/src/topics/teaser.js index 29e05703d2..5f8aaadf31 100644 --- a/src/topics/teaser.js +++ b/src/topics/teaser.js @@ -22,39 +22,36 @@ module.exports = function(Topics) { var counts = []; var teaserPids = []; + var postData; + var tidToPost = {}; topics.forEach(function(topic) { counts.push(topic && (parseInt(topic.postcount, 10) || 0)); if (topic) { - if (meta.config.teaserPost === 'first') { - teaserPids.push(topic.mainPid); - } else { - teaserPids.push(topic.teaserPid); - } + teaserPids.push(meta.config.teaserPost === 'first' ? topic.mainPid : topic.teaserPid); } }); - posts.getPostsFields(teaserPids, ['pid', 'uid', 'timestamp', 'tid', 'content'], function(err, postData) { - if (err) { - return callback(err); - } - - var uids = postData.map(function(post) { - return post.uid; - }).filter(function(uid, index, array) { - return array.indexOf(uid) === index; - }); - - user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], function(err, usersData) { - if (err) { - return callback(err); - } + async.waterfall([ + function(next) { + posts.getPostsFields(teaserPids, ['pid', 'uid', 'timestamp', 'tid', 'content'], next); + }, + function(_postData, next) { + postData = _postData; + var uids = postData.map(function(post) { + return post.uid; + }).filter(function(uid, index, array) { + return array.indexOf(uid) === index; + }); + user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], next); + }, + function(usersData, next) { var users = {}; usersData.forEach(function(user) { users[user.uid] = user; }); - var tidToPost = {}; + async.each(postData, function(post, next) { // If the post author isn't represented in the retrieved users' data, then it means they were deleted, assume guest. @@ -66,30 +63,29 @@ module.exports = function(Topics) { post.timestamp = utils.toISOString(post.timestamp); tidToPost[post.tid] = post; posts.parsePost(post, next); - }, function(err) { - if (err) { - return callback(err); + }, next); + }, + function(next) { + var teasers = topics.map(function(topic, index) { + if (!topic) { + return null; } - var teasers = topics.map(function(topic, index) { - if (!topic) { - return null; - } - if (tidToPost[topic.tid]) { - tidToPost[topic.tid].index = meta.config.teaserPost === 'first' ? 1 : counts[index]; - if (tidToPost[topic.tid].content) { - var s = S(tidToPost[topic.tid].content); - tidToPost[topic.tid].content = s.stripTags.apply(s, utils.stripTags).s; - } + if (tidToPost[topic.tid]) { + tidToPost[topic.tid].index = meta.config.teaserPost === 'first' ? 1 : counts[index]; + if (tidToPost[topic.tid].content) { + var s = S(tidToPost[topic.tid].content); + tidToPost[topic.tid].content = s.stripTags.apply(s, utils.stripTags).s; } - return tidToPost[topic.tid]; - }); - - plugins.fireHook('filter:teasers.get', {teasers: teasers}, function(err, data) { - callback(err, data ? data.teasers : null); - }); + } + return tidToPost[topic.tid]; }); - }); - }); + + plugins.fireHook('filter:teasers.get', {teasers: teasers}, next); + }, + function(data, next) { + next(null, data.teasers); + } + ], callback); }; Topics.getTeasersByTids = function(tids, callback) { From a0d01a05ed93e2dd72502474795c02cf5dbed355 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sun, 9 Aug 2015 20:17:28 -0400 Subject: [PATCH 047/284] Update behaviour so a theme reset sets Persona, not vanilla --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 0f5de4bfe9..81fa124f88 100644 --- a/app.js +++ b/app.js @@ -345,7 +345,7 @@ function resetThemes(callback) { meta.themes.set({ type: 'local', - id: 'nodebb-theme-vanilla' + id: 'nodebb-theme-persona' }, function(err) { winston.info('[reset] Theme reset to Vanilla'); if (typeof callback === 'function') { From 5a15ee7713bca83c11454dbc57a223e6bac60cdd Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 10 Aug 2015 17:18:28 -0400 Subject: [PATCH 048/284] #3424 --- public/src/ajaxify.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 4fd4586b6b..1c143a4c07 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -282,7 +282,9 @@ $(document).ready(function() { if (window.location.pathname === this.pathname && this.hash.length) { window.location.hash = this.hash; } else { - window.location.hash = ''; + if (window.location.hash) { + window.location.hash = ''; + } if (ajaxify.go(pathname)) { e.preventDefault(); } From 9e1d5c8113c530480316db38f0541a5e208c9bea Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 10 Aug 2015 17:57:51 -0400 Subject: [PATCH 049/284] closes #3424 --- public/src/ajaxify.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 1c143a4c07..35c692c550 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -30,15 +30,15 @@ $(document).ready(function() { ajaxify.currentPage = null; - ajaxify.go = function (url, callback, quiet, search) { + ajaxify.go = function (url, callback, quiet) { if (!socket.connected) { if (ajaxify.reconnectAction) { $(window).off('action:reconnected', ajaxify.reconnectAction); } ajaxify.reconnectAction = function(e) { - ajaxify.go(url, callback, quiet, search); + ajaxify.go(url, callback, quiet); $(window).off(e); - } + }; $(window).on('action:reconnected', ajaxify.reconnectAction); } @@ -54,7 +54,7 @@ $(document).ready(function() { apiXHR.abort(); } - url = ajaxify.start(url, quiet, search); + url = ajaxify.start(url, quiet); $('#footer, #content').removeClass('hide').addClass('ajaxifying'); @@ -87,10 +87,8 @@ $(document).ready(function() { }; - ajaxify.start = function(url, quiet, search) { + ajaxify.start = function(url, quiet) { url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, '')); - var hash = window.location.hash; - search = search || ''; $(window).trigger('action:ajaxify.start', {url: url}); @@ -102,8 +100,8 @@ $(document).ready(function() { if (window.history && window.history.pushState) { window.history[!quiet ? 'pushState' : 'replaceState']({ - url: url + search + hash - }, url, RELATIVE_PATH + '/' + url + search + hash); + url: url + }, url, RELATIVE_PATH + '/' + url); } return url; }; @@ -282,9 +280,6 @@ $(document).ready(function() { if (window.location.pathname === this.pathname && this.hash.length) { window.location.hash = this.hash; } else { - if (window.location.hash) { - window.location.hash = ''; - } if (ajaxify.go(pathname)) { e.preventDefault(); } From f8f3e3faa768c073c424a7d504c4a0ec89998f61 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 11 Aug 2015 13:19:25 -0400 Subject: [PATCH 050/284] closes https://github.com/NodeBB/nodebb-theme-persona/issues/79 --- public/language/en_GB/category.json | 1 + public/src/app.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/public/language/en_GB/category.json b/public/language/en_GB/category.json index 79166bd772..aa15153b0b 100644 --- a/public/language/en_GB/category.json +++ b/public/language/en_GB/category.json @@ -8,6 +8,7 @@ "browsing": "browsing", "no_replies": "No one has replied", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", diff --git a/public/src/app.js b/public/src/app.js index 650a509eda..63e6e2399e 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -381,7 +381,8 @@ app.cacheBuster = null; }; function createHeaderTooltips() { - if (utils.findBootstrapEnvironment() === 'xs') { + var env = utils.findBootstrapEnvironment(); + if (env === 'xs' || env === 'sm') { return; } $('#header-menu li a[title]').each(function() { From 1b812068ca850128e0beca8b02fcf920d0cb42b9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 11 Aug 2015 17:09:05 -0400 Subject: [PATCH 051/284] Fix bug where translator would split on all colons, and not just the first --- public/src/modules/translator.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 42efe5c529..8d37c1f004 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -168,6 +168,7 @@ var variables = key.split(regexes.split); var parsedKey = key.replace('[[', '').replace(']]', '').split(':'); + parsedKey = [parsedKey[0]].concat(parsedKey.slice(1).join(':')); if (!(parsedKey[0] && parsedKey[1])) { return callback(data); } From bd960ea6ac07e8f5c3cf30f6103c8b5d85b494c0 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 12 Aug 2015 09:57:41 -0400 Subject: [PATCH 052/284] latest translations --- public/language/ar/global.json | 4 +-- public/language/ar/unread.json | 2 +- public/language/bg/global.json | 2 +- public/language/es/global.json | 2 +- public/language/et/global.json | 2 +- public/language/fr/category.json | 2 +- public/language/fr/global.json | 2 +- public/language/it/global.json | 4 +-- public/language/it/register.json | 2 +- public/language/it/unread.json | 2 +- public/language/it/user.json | 28 +++++++++--------- public/language/it/users.json | 18 ++++++------ public/language/lt/category.json | 6 ++-- public/language/lt/global.json | 10 +++---- public/language/lt/modules.json | 10 +++---- public/language/lt/notifications.json | 18 ++++++------ public/language/lt/register.json | 2 +- public/language/lt/reset_password.json | 2 +- public/language/lt/unread.json | 2 +- public/language/lt/user.json | 40 +++++++++++++------------- public/language/lt/users.json | 20 ++++++------- public/language/ms/global.json | 6 ++-- public/language/ms/notifications.json | 2 +- public/language/sv/category.json | 6 ++-- public/language/sv/global.json | 16 +++++------ public/language/sv/login.json | 2 +- public/language/sv/modules.json | 10 +++---- public/language/sv/notifications.json | 4 +-- public/language/sv/recent.json | 20 ++++++------- public/language/sv/register.json | 2 +- public/language/sv/reset_password.json | 6 ++-- public/language/sv/unread.json | 2 +- public/language/sv/user.json | 14 ++++----- public/language/sv/users.json | 26 ++++++++--------- public/language/tr/global.json | 4 +-- public/language/tr/notifications.json | 2 +- public/language/tr/register.json | 2 +- public/language/tr/unread.json | 2 +- public/language/tr/user.json | 8 +++--- public/language/tr/users.json | 18 ++++++------ public/language/zh_CN/global.json | 2 +- 41 files changed, 167 insertions(+), 167 deletions(-) diff --git a/public/language/ar/global.json b/public/language/ar/global.json index d2c9af8495..50b3877256 100644 --- a/public/language/ar/global.json +++ b/public/language/ar/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 من %2", "pagination.enter_index": "أدخل الرقم التسلسلي", "header.admin": "مدبر نظام", - "header.categories": "Categories", + "header.categories": "الفئات", "header.recent": "حديث", "header.unread": "غير مقروء", "header.tags": "وسم", @@ -51,7 +51,7 @@ "views": "المشاهدات", "reputation": "السمعة", "read_more": "اقرأ المزيد", - "more": "More", + "more": "المزيد", "posted_ago_by_guest": "كتب %1 من طرف زائر", "posted_ago_by": "كتب %1 من طرف %2", "posted_ago": "كتب %1", diff --git a/public/language/ar/unread.json b/public/language/ar/unread.json index 365303bf35..992ffa6f5c 100644 --- a/public/language/ar/unread.json +++ b/public/language/ar/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "حدد غير مقروء", "selected": "المحددة", "all": "الكل", - "all_categories": "All categories", + "all_categories": "كل الفئات", "topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!" } \ No newline at end of file diff --git a/public/language/bg/global.json b/public/language/bg/global.json index 7c5c0d7e2d..3d3b9e63a2 100644 --- a/public/language/bg/global.json +++ b/public/language/bg/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 от %2", "pagination.enter_index": "Въведете номер", "header.admin": "Администратор", - "header.categories": "Categories", + "header.categories": "Категории", "header.recent": "Скорошни", "header.unread": "Непрочетени", "header.tags": "Етикети", diff --git a/public/language/es/global.json b/public/language/es/global.json index fd67f9c881..66a7b6fbe7 100644 --- a/public/language/es/global.json +++ b/public/language/es/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 de %2", "pagination.enter_index": "Introduzca el número", "header.admin": "Administración", - "header.categories": "Categories", + "header.categories": "Categorías", "header.recent": "Recientes", "header.unread": "No leídos", "header.tags": "Etiquetas", diff --git a/public/language/et/global.json b/public/language/et/global.json index 153c49c35d..ce9d277529 100644 --- a/public/language/et/global.json +++ b/public/language/et/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 kõigist %2-st", "pagination.enter_index": "Sisetage indeks", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Kategooriad", "header.recent": "Hiljutised", "header.unread": "Lugemata", "header.tags": "Märksõnad", diff --git a/public/language/fr/category.json b/public/language/fr/category.json index 0e0a238c35..62f1fe79a3 100644 --- a/public/language/fr/category.json +++ b/public/language/fr/category.json @@ -6,7 +6,7 @@ "no_replies": "Personne n'a répondu", "share_this_category": "Partager cette catégorie", "watch": "Suivre", - "ignore": "Ignorer", + "ignore": "Ne plus suivre", "watch.message": "Vous suivez désormais les mises à jour de cette catégorie.", "ignore.message": "Vous ne suivez plus les mises jour de cette catégorie." } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index 75faa6dc2e..c9a2550c37 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 sur %2", "pagination.enter_index": "Entrer un numéro de page", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Catégories", "header.recent": "Récent", "header.unread": "Non lu", "header.tags": "Mots-clés", diff --git a/public/language/it/global.json b/public/language/it/global.json index 47269df850..a015eb3476 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 di %2", "pagination.enter_index": "Inserisci numero", "header.admin": "Amministratore", - "header.categories": "Categories", + "header.categories": "Categorie", "header.recent": "Recenti", "header.unread": "Non letti", "header.tags": "Tags", @@ -51,7 +51,7 @@ "views": "Visualizzazioni", "reputation": "Reputazione", "read_more": "per saperne di più", - "more": "More", + "more": "Altro", "posted_ago_by_guest": "scritto %1 di Ospite", "posted_ago_by": "scritto %1 di %2", "posted_ago": "postato %1", diff --git a/public/language/it/register.json b/public/language/it/register.json index b345928150..373ca07801 100644 --- a/public/language/it/register.json +++ b/public/language/it/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Altri metodi di registrazione", "terms_of_use": "Termini di Utilizzo", "agree_to_terms_of_use": "Accetto i Termini di Utilizzo", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "La tua registrazione è stata aggiunta alla coda di moderazione. Riceverai una mail quando verrà accettata da un amministratore." } \ No newline at end of file diff --git a/public/language/it/unread.json b/public/language/it/unread.json index 415f8b5d3c..e2e6018a47 100644 --- a/public/language/it/unread.json +++ b/public/language/it/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Segna come Letto", "selected": "Selezionati", "all": "Tutti", - "all_categories": "All categories", + "all_categories": "Tutte le categorie", "topics_marked_as_read.success": "Discussione marcata come letta!" } \ No newline at end of file diff --git a/public/language/it/user.json b/public/language/it/user.json index 692831ff5c..f4e1a869d7 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -6,12 +6,12 @@ "postcount": "Numero post", "email": "Email", "confirm_email": "Conferma Email", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "BAN dell'account", + "ban_account_confirm": "Sei sicuro di voler bannare questo utente?", + "unban_account": "Togli il BAN", "delete_account": "Elimina Account", "delete_account_confirm": "Sei sicuro di voler cancellare il tuo account?
Questa azione è irreversibile e non potrai recuperare nessun dato

Inserisci il tuo username per confermare che vuoi eliminare questo account.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Sei sicuro di voler cancellare questo account?
Questa azione è irreversibile e non potrai recuperare nessun dato

", "fullname": "Nome e Cognome", "website": "Sito Internet", "location": "Località", @@ -25,7 +25,7 @@ "watched": "Osservati", "followers": "Da chi è seguito", "following": "Chi segue", - "aboutme": "About me", + "aboutme": "Su di me", "signature": "Firma", "gravatar": "Gravatar", "birthday": "Data di nascita", @@ -68,21 +68,21 @@ "settings-require-reload": "Alcuni cambiamenti di impostazioni richiedono un ricaricamento. Clicca qui per ricaricare la pagina.", "has_no_follower": "Questo utente non è seguito da nessuno :(", "follows_no_one": "Questo utente non segue nessuno :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Questo utente non ha ancora scritto niente.", + "has_no_topics": "Questo utente non ha ancora avviato discussioni.", + "has_no_watched_topics": "Questo utente non sta osservando discussioni.", "email_hidden": "Email Nascosta", "hidden": "nascosta", - "paginate_description": "Paginate topics and posts instead of using infinite scroll", + "paginate_description": "Non utilizzare lo scroll infinito per discussioni e messaggi", "topics_per_page": "Discussioni per Pagina", "posts_per_page": "Post per Pagina", - "notification_sounds": "Play a sound when you receive a notification", + "notification_sounds": "Riproduci un suono quando si riceve una notifica", "browsing": "Impostazioni di Navigazione", - "open_links_in_new_tab": "Open outgoing links in new tab", + "open_links_in_new_tab": "Apri i link web in una nuova pagina", "enable_topic_searching": "Abilita la ricerca negli argomenti", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "follow_topics_you_reply_to": "Follow topics that you reply to", - "follow_topics_you_create": "Follow topics you create", + "topic_search_help": "Se abilitata, la ricerca negli argomenti ignorerà il comportamento predefinito del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo", + "follow_topics_you_reply_to": "Segui le discussioni a cui hai risposto", + "follow_topics_you_create": "Segui le discussioni che hai iniziato", "grouptitle": "Seleziona il titolo del gruppo che vorresti vedere", "no-group-title": "Nessun titolo al gruppo" } \ No newline at end of file diff --git a/public/language/it/users.json b/public/language/it/users.json index d9a9e68427..5fc544d8ac 100644 --- a/public/language/it/users.json +++ b/public/language/it/users.json @@ -9,13 +9,13 @@ "filter-by": "Filtra per", "online-only": "Solo online", "picture-only": "Solo con foto", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Invita", + "invitation-email-sent": "Una mail di invito è stata inviata a %1", + "user_list": "Lista utenti", + "recent_topics": "Discussioni Recenti", + "popular_topics": "Discussioni Popolari", + "unread_topics": "Discussioni non lette", + "categories": "Categorie", + "tags": "Tag", + "map": "Mappa" } \ No newline at end of file diff --git a/public/language/lt/category.json b/public/language/lt/category.json index 3fc832a8e4..324084f60e 100644 --- a/public/language/lt/category.json +++ b/public/language/lt/category.json @@ -5,8 +5,8 @@ "browsing": "naršo", "no_replies": "Niekas dar neatsakė", "share_this_category": "Pasidalinti šią kategoriją", - "watch": "Watch", + "watch": "Stebėti", "ignore": "Nepaisyti", - "watch.message": "You are now watching updates from this category", - "ignore.message": "You are now ignoring updates from this category" + "watch.message": "Jūs dabar stebite atnaujinimus iš šios kategorijos", + "ignore.message": "Jūs dabar ignoruojate atnaujinimus iš šios kategorijos" } \ No newline at end of file diff --git a/public/language/lt/global.json b/public/language/lt/global.json index 541becf696..f320a7c376 100644 --- a/public/language/lt/global.json +++ b/public/language/lt/global.json @@ -3,10 +3,10 @@ "search": "Ieškoti", "buttons.close": "Uždaryti", "403.title": "Prieiga negalima", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "Matosi užklupai į ta puslapį kur neturi tam tikrų teisių jį peržiūrėti", + "403.login": "Tikriausiai tu turėtum pabandyt prisijungt?", "404.title": "Nerasta", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "Pasirodo sėdi puslapyje kurio net nėra. Grįžk į namų puslapį.", "500.title": "Vidinė klaida.", "500.message": "Oops! Atrodo, kad kažkas nutiko!", "register": "Registruotis", @@ -22,7 +22,7 @@ "pagination.out_of": "%1 iš %2", "pagination.enter_index": "Įrašykite indeksą", "header.admin": "Administratorius", - "header.categories": "Categories", + "header.categories": "Kategorijos", "header.recent": "Naujausi", "header.unread": "Neskaityti", "header.tags": "Žymos", @@ -51,7 +51,7 @@ "views": "Peržiūros", "reputation": "Reputacija", "read_more": "skaityti plačiau", - "more": "More", + "more": "Daugiau", "posted_ago_by_guest": "parašyta %2 nuo svečio", "posted_ago_by": "parašyta %1 nuo %2", "posted_ago": "parašyta %1", diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index 1ad666d77e..17e2994996 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -15,12 +15,12 @@ "chat.seven_days": "7 dienos", "chat.thirty_days": "30 dienų", "chat.three_months": "3 mėnesiai", - "composer.compose": "Compose", - "composer.show_preview": "Show Preview", - "composer.hide_preview": "Hide Preview", + "composer.compose": "Sukomponuoti", + "composer.show_preview": "Rodyti pavyzdį", + "composer.hide_preview": "Slėpti pavyzdį", "composer.user_said_in": "%1 parašė į %2:", "composer.user_said": "%1 parašė:", "composer.discard": "Ar tikrai norite sunaikinti šį pranešimą?", - "composer.submit_and_lock": "Submit and Lock", - "composer.toggle_dropdown": "Toggle Dropdown" + "composer.submit_and_lock": "Pateikti ir užrakinti", + "composer.toggle_dropdown": "Perjungti Nukritimą" } \ No newline at end of file diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json index 11589e9fc5..9da122b4e0 100644 --- a/public/language/lt/notifications.json +++ b/public/language/lt/notifications.json @@ -5,22 +5,22 @@ "mark_all_read": "Žymėti visus perspėjimus kaip skaitytus", "back_to_home": "Atgal į %1", "outgoing_link": "Išeinanti nuoroda", - "outgoing_link_message": "You are now leaving %1.", - "continue_to": "Continue to %1", + "outgoing_link_message": "Jūs dabar paliekate %1", + "continue_to": "Tęsti į %1", "return_to": "Grįžti į %1", "new_notification": "Naujas pranešimas", "you_have_unread_notifications": "Jūs turite neperskaitytų pranešimų.", "new_message_from": "Nauja žinutė nuo %1", - "upvoted_your_post_in": "%1 has upvoted your post in %2.", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", - "favourited_your_post_in": "%1 has favourited your post in %2.", - "user_flagged_post_in": "%1 flagged a post in %2", + "upvoted_your_post_in": "%1 užbalsavo už jūsų pranešima čia %2.", + "moved_your_post": "%1 perkėlė jūsų pranešimą", + "moved_your_topic": "%1 perkėlė jūsų temą", + "favourited_your_post_in": "%1 patinka jūsų pranešimas čia %2", + "user_flagged_post_in": "%1pagrįso nuomone čia %2", "user_posted_to": "%1 parašė atsaką %2", "user_posted_topic": "%1 paskelbė naują temą: %2", "user_mentioned_you_in": "%1 paminėjo Jus %2", - "user_started_following_you": "%1 started following you.", - "new_register": "%1 sent a registration request.", + "user_started_following_you": "%1 pradėjo sekti tave", + "new_register": "%1 atsiuntė registracijos prašymą", "email-confirmed": "El. paštas patvirtintas", "email-confirmed-message": "Dėkojame už el. pašto patvirtinimą. Jūsų paskyra pilnai aktyvuota.", "email-confirm-error-message": "Įvyko klaida mėginant patvirtinti Jūsų el. pašto adresą. Galbūt kodas yra neteisingas, arba nebegalioajantis.", diff --git a/public/language/lt/register.json b/public/language/lt/register.json index a4c931e7d7..52cf32608c 100644 --- a/public/language/lt/register.json +++ b/public/language/lt/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Alternatyvūs registracijos būdai", "terms_of_use": "Naudojimo sąlygos", "agree_to_terms_of_use": "Aš sutinku su vartojimo sąlygomis", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Jūsų registracijos prašymas buvo pridėtas į laukiančiųjų sąrašą. Jūs gausite el.paštu laišką kada administratorius patvirtins jus" } \ No newline at end of file diff --git a/public/language/lt/reset_password.json b/public/language/lt/reset_password.json index 870d8563d0..6c2b1a11cf 100644 --- a/public/language/lt/reset_password.json +++ b/public/language/lt/reset_password.json @@ -13,5 +13,5 @@ "invalid_email": "Klaidingas arba neegzistuojantis el. pašto adresas!", "password_too_short": "Įvestas slaptažodis yra per trumpas, prašome pasirinkti kitą slaptažodį.", "passwords_do_not_match": "Du slaptažodžiai, kuriuos įvedėte, nesutampa.", - "password_expired": "Your password has expired, please choose a new password" + "password_expired": "Jūsų slaptažodžio laikas baigėsi, pasirinkite nauja slaptažodį" } \ No newline at end of file diff --git a/public/language/lt/unread.json b/public/language/lt/unread.json index 56db7f7d15..37c42dc40d 100644 --- a/public/language/lt/unread.json +++ b/public/language/lt/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Pažymėti kaip perskaitytus", "selected": "Pasirinkti", "all": "Visi", - "all_categories": "All categories", + "all_categories": "Visos kategorijos", "topics_marked_as_read.success": "Temos pažymėtos kaip perskaitytos." } \ No newline at end of file diff --git a/public/language/lt/user.json b/public/language/lt/user.json index 70f6a75bc2..b4bae70ee4 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -6,12 +6,12 @@ "postcount": "Įrašų kiekis", "email": "El. paštas", "confirm_email": "Patvirtinti el. paštą", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "Užblokuoti Paskyrą", + "ban_account_confirm": "Jūs tikrai norite užblokuoti šį vartotoją?", + "unban_account": "Atblokuoti Paskyrą", "delete_account": "Ištrinti paskyrą", "delete_account_confirm": "Ar tikrai norite ištrinti savo paskyrą?
Šis veiksmas yra negrįžtamas, ir jūs negalėsite susigrąžinti jokių duomenų

Įveskite savo vardą, kad patvirtintumėte, jog norite panaikinti šią paskyrą.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Ar jūs tikrai norite ištrint šią paskyrą?
Šis veiksmas nebesugražinamas ir jūs nebegalėsite atgauti jokių duomenų

", "fullname": "Vardas ir pavardė", "website": "Tinklalapis", "location": "Vieta", @@ -22,17 +22,17 @@ "profile_views": "Profilio peržiūros", "reputation": "Reputacija", "favourites": "Mėgstamiausi", - "watched": "Watched", + "watched": "Peržiūrėjo", "followers": "Sekėjai", "following": "Seka", - "aboutme": "About me", + "aboutme": "Apie mane", "signature": "Parašas", "gravatar": "Gravatar", "birthday": "Gimimo diena", "chat": "Susirašinėti", "follow": "Sekti", "unfollow": "Nesekti", - "more": "More", + "more": "Daugiau", "profile_update_success": "Profilis sėkmingai atnaujintas!", "change_picture": "Pakeisti paveikslėlį", "edit": "Redaguoti", @@ -65,24 +65,24 @@ "digest_monthly": "Kas mėnesį", "send_chat_notifications": "Jeigu gaunama nauja pokalbių žinutė ir aš neprisijungęs, siųsti el. laišką", "send_post_notifications": "Atsiųsti el. laišką kai parašomi atsakymai į mano prenumeruojamas temas", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", + "settings-require-reload": "Kai kurie nustatymų pakeitimai reikalauja perkrovimo. Spauskite čia kad perkrauti puslapį", "has_no_follower": "Šis vartotojas neturi jokių sekėjų :(", "follows_no_one": "Šis vartotojas nieko neseka :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Šis vartotojas pakolkas neparašė jokių pranešimų", + "has_no_topics": "Šis vartotojas pakolkas nesukūrė jokių temų", + "has_no_watched_topics": "Šis vartotojas pakolkas nestebėjo jokių temų", "email_hidden": "El. paštas paslėptas", "hidden": "paslėptas", - "paginate_description": "Paginate topics and posts instead of using infinite scroll", + "paginate_description": "Puslapiavimas temų ir pranešimų, vietoj kad naudoti judėjimą su pelytė į viršų ir į apačia", "topics_per_page": "Temų puslapyje", "posts_per_page": "Pranešimų puslapyje", - "notification_sounds": "Play a sound when you receive a notification", + "notification_sounds": "Paleisti garsą kai jūs gaunate pranešimą", "browsing": "Naršymo nustatymai", - "open_links_in_new_tab": "Open outgoing links in new tab", - "enable_topic_searching": "Enable In-Topic Searching", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "follow_topics_you_reply_to": "Follow topics that you reply to", - "follow_topics_you_create": "Follow topics you create", - "grouptitle": "Select the group title you would like to display", - "no-group-title": "No group title" + "open_links_in_new_tab": "Atidaryti išeinančias nuorodas naujam skirtuke", + "enable_topic_searching": "Įjungti Temų Ieškojimą ", + "topic_search_help": "Jeigu įjungtas, temų ieškojimas, nepaisys naršyklės puslapio ieškojimo, ir pradės ieškoti tik toje temoje kuri bus rodoma ekrane", + "follow_topics_you_reply_to": "Sekti tas temas kur atrašai tu", + "follow_topics_you_create": "Sekti tas temas kurias sukuri tu", + "grouptitle": "Pasirinkite grupės pavadinimą kurį norėtumėte kad atvaizduotu", + "no-group-title": "Nėra grupės pavadinimo" } \ No newline at end of file diff --git a/public/language/lt/users.json b/public/language/lt/users.json index ddfb31c12b..a04cdd5093 100644 --- a/public/language/lt/users.json +++ b/public/language/lt/users.json @@ -7,15 +7,15 @@ "load_more": "Įkelti daugiau", "users-found-search-took": "Rasta %1 vartotojas(-ai)! Paieška užtruko %2 sekundes.", "filter-by": "Filtruoti pagal", - "online-only": "Online only", + "online-only": "Tik prisijunge", "picture-only": "Tik paveikslėlis", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Pakviesti", + "invitation-email-sent": "Pakvietimas el.paštu buvo išsiųstas į %1!", + "user_list": "Vartotojų sąrašas", + "recent_topics": "Paskutinės temos", + "popular_topics": "Populiarios temos", + "unread_topics": "Neperskaitytos temos", + "categories": "Kategorijos", + "tags": "Žymos", + "map": "Žemėlapis" } \ No newline at end of file diff --git a/public/language/ms/global.json b/public/language/ms/global.json index f35004ec2a..c15415dc99 100644 --- a/public/language/ms/global.json +++ b/public/language/ms/global.json @@ -19,13 +19,13 @@ "save_changes": "Simpan perubahan", "close": "Tutup", "pagination": "Mukasurat", - "pagination.out_of": "%1 out of %2", + "pagination.out_of": "%1 daripada %2", "pagination.enter_index": "Masukkan indeks", "header.admin": "Pentadbir", - "header.categories": "Categories", + "header.categories": "Kategori", "header.recent": "Terkini", "header.unread": "Belum dibaca", - "header.tags": "Tags", + "header.tags": "Tag", "header.popular": "Popular", "header.users": "Pengguna", "header.groups": "Kumpulan", diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json index 2da026aa39..d020f54afa 100644 --- a/public/language/ms/notifications.json +++ b/public/language/ms/notifications.json @@ -20,7 +20,7 @@ "user_posted_topic": "%1 membuka topik baru : %2", "user_mentioned_you_in": "%1 sebut anda di %2", "user_started_following_you": "%1 mula mengikut anda.", - "new_register": "%1 sent a registration request.", + "new_register": "%1 menghantar jemputan pendaftaran.", "email-confirmed": "EMel Disahkan", "email-confirmed-message": "Terima kasih kerana mengesahkan emel anda. Akaun anda telah diaktifkan sepenuhnya.", "email-confirm-error-message": "Berlaku masalah semasa mengesahkan emel anda. Mungkin kod tidak sah atau tamat tempoh.", diff --git a/public/language/sv/category.json b/public/language/sv/category.json index d82abe3a24..3fdd64e037 100644 --- a/public/language/sv/category.json +++ b/public/language/sv/category.json @@ -5,8 +5,8 @@ "browsing": "läser", "no_replies": "Ingen har svarat", "share_this_category": "Dela den här kategorin", - "watch": "Watch", + "watch": "Bevaka", "ignore": "Ignorera", - "watch.message": "You are now watching updates from this category", - "ignore.message": "You are now ignoring updates from this category" + "watch.message": "Du bevakar nu uppdateringar ifrån denna kategori", + "ignore.message": "Du ignorerar nu uppdateringar ifrån denna kategori" } \ No newline at end of file diff --git a/public/language/sv/global.json b/public/language/sv/global.json index 647cbec5d0..b7ad673b45 100644 --- a/public/language/sv/global.json +++ b/public/language/sv/global.json @@ -3,10 +3,10 @@ "search": "Sök", "buttons.close": "Stäng", "403.title": "Tillgång Nekad", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "Du verkar ha ramlat in på en sida du ej har tillgång till.", + "403.login": "Du kanske bör försöka logga in?", "404.title": "Sidan saknas", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "Du verkar ha ramlat in på en sida som inte finns. Återgå till första sidan.", "500.title": "Internt fel.", "500.message": "Hoppsan! Verkar som att något gått snett!", "register": "Registrera", @@ -22,13 +22,13 @@ "pagination.out_of": "%1 av %2", "pagination.enter_index": "Skriv in index ", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Kategorier", "header.recent": "Senaste", "header.unread": "Olästa", "header.tags": "Märkningar", "header.popular": "Populära", "header.users": "Användare", - "header.groups": "Groups", + "header.groups": "Grupper", "header.chats": "Chattar", "header.notifications": "Notiser", "header.search": "Sök", @@ -51,7 +51,7 @@ "views": "Visningar", "reputation": "Rykte", "read_more": "läs mer", - "more": "More", + "more": "Mer", "posted_ago_by_guest": "inskickad %1 av anonym", "posted_ago_by": "inskickad %1 av %2", "posted_ago": "inskickad %1", @@ -77,7 +77,7 @@ "updated.title": "Forum uppdaterades", "updated.message": "Det här forumet har nu uppdaterats till senaste versionen. Klicka här för att ladda om sidan.", "privacy": "Integritet", - "follow": "Follow", - "unfollow": "Unfollow", + "follow": "Följ", + "unfollow": "Sluta följ", "delete_all": "Ta bort Alla" } \ No newline at end of file diff --git a/public/language/sv/login.json b/public/language/sv/login.json index 363da51e9b..1b3cf37221 100644 --- a/public/language/sv/login.json +++ b/public/language/sv/login.json @@ -1,7 +1,7 @@ { "username-email": "Användarnamn eller epostadress", "username": "Användarnamn", - "email": "Email", + "email": "Epostadress", "remember_me": "Kom ihåg mig?", "forgot_password": "Glömt lösenord?", "alternative_logins": "Alternativa inloggningssätt", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index 008af93bc0..a370feb0b1 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -15,12 +15,12 @@ "chat.seven_days": "7 Dagar", "chat.thirty_days": "30 Dagar", "chat.three_months": "3 Månader", - "composer.compose": "Compose", - "composer.show_preview": "Show Preview", - "composer.hide_preview": "Hide Preview", + "composer.compose": "Komponera", + "composer.show_preview": "Visa förhandsgranskning", + "composer.hide_preview": "Dölj förhandsgranskning", "composer.user_said_in": "%1 sa i %2:", "composer.user_said": "%1 sa:", "composer.discard": "Är du säker på att du vill förkasta det här inlägget?", - "composer.submit_and_lock": "Submit and Lock", - "composer.toggle_dropdown": "Toggle Dropdown" + "composer.submit_and_lock": "Skicka och lås", + "composer.toggle_dropdown": "Visa/Dölj dropdown" } \ No newline at end of file diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json index c95db1b8ee..424b6f4e42 100644 --- a/public/language/sv/notifications.json +++ b/public/language/sv/notifications.json @@ -2,7 +2,7 @@ "title": "Notiser", "no_notifs": "Du har inga nya notiser", "see_all": "Visa alla notiser", - "mark_all_read": "Mark all notifications read", + "mark_all_read": "Markera alla notiser som lästa", "back_to_home": "Tillbaka till %1", "outgoing_link": "Utgående länk", "outgoing_link_message": "Du lämnar nu %1. ", @@ -20,7 +20,7 @@ "user_posted_topic": "%1 har skapat ett nytt ämne: %2", "user_mentioned_you_in": "%1 nämnde dig i %2", "user_started_following_you": "%1 började följa dig.", - "new_register": "%1 sent a registration request.", + "new_register": "%1 skickade en registreringsförfrågan.", "email-confirmed": "Epost bekräftad", "email-confirmed-message": "Tack för att du bekräftat din epostadress. Ditt konto är nu fullt ut aktiverat.", "email-confirm-error-message": "Det uppstod ett fel med att bekräfta din epostadress. Kanske var koden ogiltig eller har gått ut.", diff --git a/public/language/sv/recent.json b/public/language/sv/recent.json index 28a0d6f599..46d7531d3c 100644 --- a/public/language/sv/recent.json +++ b/public/language/sv/recent.json @@ -6,14 +6,14 @@ "year": "År", "alltime": "Alltid", "no_recent_topics": "Det finns inga olästa ämnen.", - "no_popular_topics": "There are no popular topics.", - "there-is-a-new-topic": "There is a new topic.", - "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", - "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", - "there-are-new-topics": "There are %1 new topics.", - "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", - "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", - "there-is-a-new-post": "There is a new post.", - "there-are-new-posts": "There are %1 new posts.", - "click-here-to-reload": "Click here to reload." + "no_popular_topics": "Det finns inga populära ämnen", + "there-is-a-new-topic": "Det finns ett nytt ämne", + "there-is-a-new-topic-and-a-new-post": "Det finns ett nytt ämne och ett nytt inlägg.", + "there-is-a-new-topic-and-new-posts": "Det finns ett nytt ämne och %1 nya inlägg.", + "there-are-new-topics": "Det finns %1 nya ämnen.", + "there-are-new-topics-and-a-new-post": "Det finns %1 nya ämnen och ett nytt inlägg..", + "there-are-new-topics-and-new-posts": "Det finns %1 nya ämnen och %2 nya inlägg.", + "there-is-a-new-post": "Det finns ett nytt inlägg.", + "there-are-new-posts": "Det finns %1 nya inlägg.", + "click-here-to-reload": "Klicka här för att ladda om." } \ No newline at end of file diff --git a/public/language/sv/register.json b/public/language/sv/register.json index 750db5cc62..6f1aa3764b 100644 --- a/public/language/sv/register.json +++ b/public/language/sv/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Alternativ registrering", "terms_of_use": "Användarvillkor", "agree_to_terms_of_use": "Jag godkänner användarvillkoren", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Din registrering har lagts till i kön. Du kommer att få ett mail när den accepteras av en administratör." } \ No newline at end of file diff --git a/public/language/sv/reset_password.json b/public/language/sv/reset_password.json index 17c4447925..9f79207d43 100644 --- a/public/language/sv/reset_password.json +++ b/public/language/sv/reset_password.json @@ -11,7 +11,7 @@ "enter_email_address": "Skriv in epostadress", "password_reset_sent": "Lösenordsåterställning skickad", "invalid_email": "Felaktig epost / Epost finns inte!", - "password_too_short": "The password entered is too short, please pick a different password.", - "passwords_do_not_match": "The two passwords you've entered do not match.", - "password_expired": "Your password has expired, please choose a new password" + "password_too_short": "Lösenordet är för kort, var god välj ett annat lösenord.", + "passwords_do_not_match": "De två lösenorden du har fyllt i matchar ej varandra.", + "password_expired": "Ditt lösenord har gått ut, var god välj ett nytt lösenord." } \ No newline at end of file diff --git a/public/language/sv/unread.json b/public/language/sv/unread.json index b6a20d21ca..0ed0a80ae7 100644 --- a/public/language/sv/unread.json +++ b/public/language/sv/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Markerad som läst", "selected": "Vald", "all": "Alla", - "all_categories": "All categories", + "all_categories": "Alla kategorier", "topics_marked_as_read.success": "Ämnet markerat som läst." } \ No newline at end of file diff --git a/public/language/sv/user.json b/public/language/sv/user.json index c76476de52..6ccc8a3760 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -6,12 +6,12 @@ "postcount": "Antal inlägg", "email": "Epost", "confirm_email": "Bekräfta epostadress ", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "Bannlys konto", + "ban_account_confirm": "Vill du verkligen bannlysa den här användaren?", + "unban_account": "Ta bort bannlysning", "delete_account": "Ta bort ämne", "delete_account_confirm": "Är du säker på att du vill radera ditt konto?
Denna åtgärd går inte att ångra och du kommer inte kunna återställa ditt konto

Skriv in ditt användarnamn för att bekräfta att du vill radera ditt konto.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Är du säker på att du vill ta bort detta konto?
Detta går ej att ångra - data går förlorad för alltid

", "fullname": "Hela namnet", "website": "Webbsida", "location": "Plats", @@ -68,9 +68,9 @@ "settings-require-reload": "Vissa inställningar som ändrades kräver att sidan laddas om. Klicka här för att ladda om sidan.", "has_no_follower": "Denna användare har inga följare :(", "follows_no_one": "Denna användare följer ingen :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Användaren har inte skrivit några inlägg ännu", + "has_no_topics": "Användaren har inte skrivit några ämnen ännu", + "has_no_watched_topics": "Användaren har inte bevakat några ämnen ännu", "email_hidden": "Epost dold", "hidden": "dold", "paginate_description": "Gör så att ämnen och inlägg visas som sidor istället för oändlig skroll", diff --git a/public/language/sv/users.json b/public/language/sv/users.json index 1e364986af..5acd1b0f84 100644 --- a/public/language/sv/users.json +++ b/public/language/sv/users.json @@ -5,17 +5,17 @@ "search": "Sök", "enter_username": "Ange ett användarnamn för att söka", "load_more": "Ladda fler", - "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", - "filter-by": "Filter By", - "online-only": "Online only", - "picture-only": "Picture only", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "users-found-search-took": "%1 användare hittades! Sökningen tog %2 sekunder.", + "filter-by": "Filtrera på", + "online-only": "Endast online", + "picture-only": "Endast bild", + "invite": "Bjud in", + "invitation-email-sent": "En inbjudan har skickats till %1", + "user_list": "Användarlista", + "recent_topics": "Senaste ämnen", + "popular_topics": "Populära ämnen", + "unread_topics": "Olästa ämnen", + "categories": "Kategorier", + "tags": "Märkord", + "map": "Karta" } \ No newline at end of file diff --git a/public/language/tr/global.json b/public/language/tr/global.json index 7e63e5e3bd..979e9715c5 100644 --- a/public/language/tr/global.json +++ b/public/language/tr/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 - %2", "pagination.enter_index": "İndex gir", "header.admin": "Yönetim", - "header.categories": "Categories", + "header.categories": "Kategoriler", "header.recent": "Yeni", "header.unread": "Okunmamış", "header.tags": "Etiketler", @@ -51,7 +51,7 @@ "views": "Görüntülemeler", "reputation": "Saygınlık", "read_more": "daha fazla oku", - "more": "More", + "more": "Daha Fazla", "posted_ago_by_guest": "Ziyaretçi tarafından %1 yayımlandı", "posted_ago_by": "%2 tarafından %1 yayımlandı", "posted_ago": "%1 yayımlandı", diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index 948a1dfeca..d498a13dbe 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -20,7 +20,7 @@ "user_posted_topic": "%1 yeni bir konu yarattı: %2", "user_mentioned_you_in": "%1 %2 başlığında sizden bahsetti.", "user_started_following_you": "%1 sizi takip etmeye başladı.", - "new_register": "%1 sent a registration request.", + "new_register": "%1 kayıt olma isteği gönderdi.", "email-confirmed": "E-posta onaylandı", "email-confirmed-message": "E-postanızı onaylandığınız için teşekkürler. Hesabınız tamamen aktive edildi.", "email-confirm-error-message": "E-posta adresinizi onaylarken bir hata oluştu. Kodunuz geçersiz ya da eski olabilir.", diff --git a/public/language/tr/register.json b/public/language/tr/register.json index cd4d6c67c9..c46c27ad32 100644 --- a/public/language/tr/register.json +++ b/public/language/tr/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Alternatif Kayıt", "terms_of_use": "Kullanım Şartları", "agree_to_terms_of_use": "Kullanım Şartlarını kabul ediyorum", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Kayıt olma isteğiniz kabul listesine eklenmiştir. Yönetici tarafından kabul edildiğinizde mail alacaksınız." } \ No newline at end of file diff --git a/public/language/tr/unread.json b/public/language/tr/unread.json index 95268cf85c..49b8995dc5 100644 --- a/public/language/tr/unread.json +++ b/public/language/tr/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Okundu Olarak İşaretle", "selected": "Seçili", "all": "Hepsi", - "all_categories": "All categories", + "all_categories": "Tüm kategoriler", "topics_marked_as_read.success": "Başlıklar okundu olarak işaretlendi!" } \ No newline at end of file diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 2739622bee..ac16ae1970 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -11,7 +11,7 @@ "unban_account": "Hesabı Kullanıma Aç", "delete_account": "Hesabı Sil", "delete_account_confirm": "Hesabınızı silmek istediğinize emin misiniz?
Bu işlem geri çevrilemez ve tüm verileriniz sistemden silinecek.

Eğer hesabınızı silmek istiyorsanız lütfen kullanıcı isminizi girerek işlemi onaylayın.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Bu hesabı silmek istediğinizden emin misiniz?
Bu işlem geri döndürülemez ve hiç bir veriyi kurtaramazsınız

", "fullname": "Tam Ad", "website": "Websitesi", "location": "Konum", @@ -68,9 +68,9 @@ "settings-require-reload": "Bazı ayar değişiklikleri sayfayı tekrar yüklemenizi gerektirir. Buraya tıklayarak sayfayı tekrar yükleyebilirsiniz.", "has_no_follower": "Bu kullanıcının hiç takipçisi yok :(", "follows_no_one": "Bu kullanıcı kimseyi takip etmiyor :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Bu kullanıcı henüz herhangi bir ileti yazmamış.", + "has_no_topics": "Bu kullanıcı henüz hiç bir başlık açmamış.", + "has_no_watched_topics": "Bu kullanıcı henüz hiç bir başlık okumamış.", "email_hidden": "E-posta gizli", "hidden": "gizli", "paginate_description": "Sonsuz yükleme yerine konu ve iletileri sayfalara böl", diff --git a/public/language/tr/users.json b/public/language/tr/users.json index cee4c4445a..00c8b00be9 100644 --- a/public/language/tr/users.json +++ b/public/language/tr/users.json @@ -9,13 +9,13 @@ "filter-by": "Şu şekilde filtrele", "online-only": "Sadece çevrimiçi", "picture-only": "Sadece resim", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Davet et", + "invitation-email-sent": "%1'e bir davet maili gönderildi", + "user_list": "Kullanıcı Listesi", + "recent_topics": "Güncel Başlıklar", + "popular_topics": "Popüler Başlıklar", + "unread_topics": "Okunmamış Başlıklar", + "categories": "Kategoriler", + "tags": "Etiketler", + "map": "Harita" } \ No newline at end of file diff --git a/public/language/zh_CN/global.json b/public/language/zh_CN/global.json index 82d3030953..69daf31adf 100644 --- a/public/language/zh_CN/global.json +++ b/public/language/zh_CN/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 / %2", "pagination.enter_index": "输入索引", "header.admin": "管理", - "header.categories": "Categories", + "header.categories": "版面", "header.recent": "最新", "header.unread": "未读", "header.tags": "话题", From 08af92c2c09fd9c7f0a12d61479ef54a4f38b900 Mon Sep 17 00:00:00 2001 From: Ziggy Date: Wed, 12 Aug 2015 10:09:27 -0400 Subject: [PATCH 053/284] added Kinyarwanda, Murakoze cyane!! --- .tx/config | 20 +++++ public/language/rw/category.json | 12 +++ public/language/rw/email.json | 32 ++++++++ public/language/rw/error.json | 90 ++++++++++++++++++++++ public/language/rw/global.json | 83 ++++++++++++++++++++ public/language/rw/groups.json | 49 ++++++++++++ public/language/rw/login.json | 11 +++ public/language/rw/modules.json | 26 +++++++ public/language/rw/notifications.json | 28 +++++++ public/language/rw/pages.json | 21 ++++++ public/language/rw/recent.json | 19 +++++ public/language/rw/register.json | 19 +++++ public/language/rw/reset_password.json | 17 +++++ public/language/rw/search.json | 40 ++++++++++ public/language/rw/success.json | 6 ++ public/language/rw/tags.json | 7 ++ public/language/rw/topic.json | 100 +++++++++++++++++++++++++ public/language/rw/unread.json | 10 +++ public/language/rw/user.json | 88 ++++++++++++++++++++++ public/language/rw/users.json | 21 ++++++ 20 files changed, 699 insertions(+) create mode 100644 public/language/rw/category.json create mode 100644 public/language/rw/email.json create mode 100644 public/language/rw/error.json create mode 100644 public/language/rw/global.json create mode 100644 public/language/rw/groups.json create mode 100644 public/language/rw/login.json create mode 100644 public/language/rw/modules.json create mode 100644 public/language/rw/notifications.json create mode 100644 public/language/rw/pages.json create mode 100644 public/language/rw/recent.json create mode 100644 public/language/rw/register.json create mode 100644 public/language/rw/reset_password.json create mode 100644 public/language/rw/search.json create mode 100644 public/language/rw/success.json create mode 100644 public/language/rw/tags.json create mode 100644 public/language/rw/topic.json create mode 100644 public/language/rw/unread.json create mode 100644 public/language/rw/user.json create mode 100644 public/language/rw/users.json diff --git a/.tx/config b/.tx/config index 7581d243ab..8359bf4ef0 100644 --- a/.tx/config +++ b/.tx/config @@ -33,6 +33,7 @@ trans.pl = public/language/pl/category.json trans.pt_BR = public/language/pt_BR/category.json trans.ru = public/language/ru/category.json trans.ro = public/language/ro/category.json +trans.rw = public/language/rw/category.json trans.sc = public/language/sc/category.json trans.sk = public/language/sk/category.json trans.sr = public/language/sr/category.json @@ -76,6 +77,7 @@ trans.pl = public/language/pl/login.json trans.pt_BR = public/language/pt_BR/login.json trans.ru = public/language/ru/login.json trans.ro = public/language/ro/login.json +trans.rw = public/language/rw/login.json trans.sc = public/language/sc/login.json trans.sk = public/language/sk/login.json trans.sr = public/language/sr/login.json @@ -119,6 +121,7 @@ trans.pl = public/language/pl/recent.json trans.pt_BR = public/language/pt_BR/recent.json trans.ru = public/language/ru/recent.json trans.ro = public/language/ro/recent.json +trans.rw = public/language/rw/recent.json trans.sc = public/language/sc/recent.json trans.sk = public/language/sk/recent.json trans.sr = public/language/sr/recent.json @@ -162,6 +165,7 @@ trans.pl = public/language/pl/unread.json trans.pt_BR = public/language/pt_BR/unread.json trans.ru = public/language/ru/unread.json trans.ro = public/language/ro/unread.json +trans.rw = public/language/rw/unread.json trans.sc = public/language/sc/unread.json trans.sk = public/language/sk/unread.json trans.sr = public/language/sr/unread.json @@ -205,6 +209,7 @@ trans.pl = public/language/pl/modules.json trans.pt_BR = public/language/pt_BR/modules.json trans.ru = public/language/ru/modules.json trans.ro = public/language/ro/modules.json +trans.rw = public/language/rw/modules.json trans.sc = public/language/sc/modules.json trans.sk = public/language/sk/modules.json trans.sr = public/language/sr/modules.json @@ -248,6 +253,7 @@ trans.pl = public/language/pl/register.json trans.pt_BR = public/language/pt_BR/register.json trans.ru = public/language/ru/register.json trans.ro = public/language/ro/register.json +trans.rw = public/language/rw/register.json trans.sc = public/language/sc/register.json trans.sk = public/language/sk/register.json trans.sr = public/language/sr/register.json @@ -291,6 +297,7 @@ trans.pl = public/language/pl/user.json trans.pt_BR = public/language/pt_BR/user.json trans.ru = public/language/ru/user.json trans.ro = public/language/ro/user.json +trans.rw = public/language/rw/user.json trans.sc = public/language/sc/user.json trans.sk = public/language/sk/user.json trans.sr = public/language/sr/user.json @@ -334,6 +341,7 @@ trans.pl = public/language/pl/global.json trans.pt_BR = public/language/pt_BR/global.json trans.ru = public/language/ru/global.json trans.ro = public/language/ro/global.json +trans.rw = public/language/rw/global.json trans.sc = public/language/sc/global.json trans.sk = public/language/sk/global.json trans.sr = public/language/sr/global.json @@ -377,6 +385,7 @@ trans.pl = public/language/pl/notifications.json trans.pt_BR = public/language/pt_BR/notifications.json trans.ru = public/language/ru/notifications.json trans.ro = public/language/ro/notifications.json +trans.rw = public/language/rw/notifications.json trans.sc = public/language/sc/notifications.json trans.sk = public/language/sk/notifications.json trans.sr = public/language/sr/notifications.json @@ -420,6 +429,7 @@ trans.pl = public/language/pl/reset_password.json trans.pt_BR = public/language/pt_BR/reset_password.json trans.ru = public/language/ru/reset_password.json trans.ro = public/language/ro/reset_password.json +trans.rw = public/language/rw/reset_password.json trans.sc = public/language/sc/reset_password.json trans.sk = public/language/sk/reset_password.json trans.sr = public/language/sr/reset_password.json @@ -463,6 +473,7 @@ trans.pl = public/language/pl/users.json trans.pt_BR = public/language/pt_BR/users.json trans.ru = public/language/ru/users.json trans.ro = public/language/ro/users.json +trans.rw = public/language/rw/users.json trans.sc = public/language/sc/users.json trans.sk = public/language/sk/users.json trans.sr = public/language/sr/users.json @@ -506,6 +517,7 @@ trans.pl = public/language/pl/language.json trans.pt_BR = public/language/pt_BR/language.json trans.ru = public/language/ru/language.json trans.ro = public/language/ro/language.json +trans.rw = public/language/rw/language.json trans.sc = public/language/sc/language.json trans.sk = public/language/sk/language.json trans.sr = public/language/sr/language.json @@ -549,6 +561,7 @@ trans.pl = public/language/pl/pages.json trans.pt_BR = public/language/pt_BR/pages.json trans.ru = public/language/ru/pages.json trans.ro = public/language/ro/pages.json +trans.rw = public/language/rw/pages.json trans.sc = public/language/sc/pages.json trans.sk = public/language/sk/pages.json trans.sr = public/language/sr/pages.json @@ -592,6 +605,7 @@ trans.pl = public/language/pl/topic.json trans.pt_BR = public/language/pt_BR/topic.json trans.ru = public/language/ru/topic.json trans.ro = public/language/ro/topic.json +trans.rw = public/language/rw/topic.json trans.sc = public/language/sc/topic.json trans.sk = public/language/sk/topic.json trans.sr = public/language/sr/topic.json @@ -635,6 +649,7 @@ trans.pl = public/language/pl/success.json trans.pt_BR = public/language/pt_BR/success.json trans.ru = public/language/ru/success.json trans.ro = public/language/ro/success.json +trans.rw = public/language/rw/success.json trans.sc = public/language/sc/success.json trans.sk = public/language/sk/success.json trans.sr = public/language/sr/success.json @@ -678,6 +693,7 @@ trans.pl = public/language/pl/error.json trans.pt_BR = public/language/pt_BR/error.json trans.ru = public/language/ru/error.json trans.ro = public/language/ro/error.json +trans.rw = public/language/rw/error.json trans.sc = public/language/sc/error.json trans.sk = public/language/sk/error.json trans.sr = public/language/sr/error.json @@ -721,6 +737,7 @@ trans.pl = public/language/pl/tags.json trans.pt_BR = public/language/pt_BR/tags.json trans.ru = public/language/ru/tags.json trans.ro = public/language/ro/tags.json +trans.rw = public/language/rw/tags.json trans.sc = public/language/sc/tags.json trans.sk = public/language/sk/tags.json trans.sr = public/language/sr/tags.json @@ -764,6 +781,7 @@ trans.pl = public/language/pl/email.json trans.pt_BR = public/language/pt_BR/email.json trans.ru = public/language/ru/email.json trans.ro = public/language/ro/email.json +trans.rw = public/language/rw/email.json trans.sc = public/language/sc/email.json trans.sk = public/language/sk/email.json trans.sr = public/language/sr/email.json @@ -807,6 +825,7 @@ trans.pl = public/language/pl/search.json trans.pt_BR = public/language/pt_BR/search.json trans.ru = public/language/ru/search.json trans.ro = public/language/ro/search.json +trans.rw = public/language/rw/search.json trans.sc = public/language/sc/search.json trans.sk = public/language/sk/search.json trans.sr = public/language/sr/search.json @@ -850,6 +869,7 @@ trans.pl = public/language/pl/groups.json trans.pt_BR = public/language/pt_BR/groups.json trans.ru = public/language/ru/groups.json trans.ro = public/language/ro/groups.json +trans.rw = public/language/rw/groups.json trans.sc = public/language/sc/groups.json trans.sk = public/language/sk/groups.json trans.sr = public/language/sr/groups.json diff --git a/public/language/rw/category.json b/public/language/rw/category.json new file mode 100644 index 0000000000..fa8c80e689 --- /dev/null +++ b/public/language/rw/category.json @@ -0,0 +1,12 @@ +{ + "new_topic_button": "Ikiganiro Gishya", + "guest-login-post": "Injiramo wandike", + "no_topics": "Nta biganiro byo muri iki cyiciro bihari
Watangije kimwe hano se?", + "browsing": "abari kureba", + "no_replies": "Nta muntu urasubiza", + "share_this_category": "Sangiza iki cyiciro", + "watch": "Kurikirana", + "ignore": "Ihorere", + "watch.message": "Uzajya ubu ukurikirana ibishya byongewe muri iki cyiciro", + "ignore.message": "Ubu urekeye aho kuzajya ubona ibishya byongewe muri iki cyiciro" +} \ No newline at end of file diff --git a/public/language/rw/email.json b/public/language/rw/email.json new file mode 100644 index 0000000000..63c2b1bce2 --- /dev/null +++ b/public/language/rw/email.json @@ -0,0 +1,32 @@ +{ + "password-reset-requested": "Ubusabe bwo Gutangiza Bundibushya Ijambobanga - %1!", + "welcome-to": "Ikaze kuri %1", + "invite": "Ubutumire buvuye kuri %1", + "greeting_no_name": "Mwirwe", + "greeting_with_name": "Mwiriwe %1", + "welcome.text1": "Urakoze kwiyandika nk'ukoresha %1!", + "welcome.text2": "Kugirango tuguhe uburenganzira busesuye bwo gukoresha konte yawe, tugomba kubanza gusuzuma niba email watanze wiyandikisha ari iyawe. ", + "welcome.text3": "Umuyobozi w'urubuga yemeye ubusabe bwawe bwo kwandikwa nk'ukoresha urubuga. Ushobora noneho kwinjiramo ukoresheje izina n'ijambobanga byawe.", + "welcome.cta": "Kanda hano kugirango wemeze ko email watanze ari iyawe", + "invitation.text1": "%1 yagutumiye kuri %2", + "invitation.ctr": "Kanda hano kugirango utangize konte", + "reset.text1": "Twabonye ubusabe bwo gutangiza ijambobanga ryawe bundibushya, wenda bitewe n'uko wibagiwe iryo wari ufite. Niba atari ko bimeze, si ngombwa kwita ku bindi byanditse muri iyi email.", + "reset.text2": "Niba ushaka kujya aho uri butangize ijambobanga ryawe, kanda ku murongo ukurikira:", + "reset.cta": "Kanda hano kugirango utangize bundibushya ijambobanga ryawe", + "reset.notify.subject": "Ijambobanga ryahinduwe nta ngorane", + "reset.notify.text1": "Turakumenyesha ko kuri %1, ijambobanga wakoreshaga ryahinduwe nk'uko byari byasabwe.", + "reset.notify.text2": "Niba atari wowe wari wabisabye ku bushake bwawe, bimenyeshe umuyobozi w'urubuga aka kanya. ", + "digest.notifications": "Ufite amatangazo atarasomwa aturutse kuri %1:", + "digest.latest_topics": "Ibiganiro biheruka bya %1", + "digest.cta": "Kanda hano kugirango usure %1", + "digest.unsub.info": "Izi ngingo z'ingenzi zakohererejwe kuko waziyandikishijeho", + "digest.no_topics": "Nta biganiro bishyushye byagaragaye mu gihe gishize cya %1", + "notif.chat.subject": "Ubutumwa bwo mu gikari bwaturutse kuri %1", + "notif.chat.cta": "Kanda hano kugirango ukomeze", + "notif.chat.unsub.info": "Iri tangazo rijyanye n'ubutumwa bwo mu gikari waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", + "notif.post.cta": "Kanda hano kugirango usome inkuru yose", + "notif.post.unsub.info": "Iri tangazo rijyanye n'ibyashyizwe ku rubuga waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", + "test.text1": "Iyi message ni igerageza kugirango harebwe niba emailer ya NodeBB yarateguwe neza", + "unsub.cta": "Kanda hano kugirango uhindure uko bizajya bigenda", + "closing": "Murakoze!" +} \ No newline at end of file diff --git a/public/language/rw/error.json b/public/language/rw/error.json new file mode 100644 index 0000000000..93e1a9fedc --- /dev/null +++ b/public/language/rw/error.json @@ -0,0 +1,90 @@ +{ + "invalid-data": "Ibyashyizwemo Ntibyemewe", + "not-logged-in": "Biragaragara ko utinjiyemo.", + "account-locked": "Konte yawe yabaye ifunze", + "search-requires-login": "Gushaka ikintu bisaba kuba ufite konte - Injiramo cyangwa wiyandike.", + "invalid-cid": "Nimero y'Icyiciro Ntiyemewe", + "invalid-tid": "Nimero y'Ikiganiro Ntiyemewe", + "invalid-pid": "Nimero y'Icyashyizweho Ntiyemewe", + "invalid-uid": "Nimero y'Umuntu Ntiyemewe", + "invalid-username": "Izina Ntiryemewe", + "invalid-email": "Email Ntiyemewe", + "invalid-title": "Umutwe utemewe!", + "invalid-user-data": "Ibyatanzwe Ntibyemewe!", + "invalid-password": "Ijambobanga Ntiryemewe", + "invalid-username-or-password": "Tanga izina ukoresha n'ijambobanga", + "invalid-search-term": "Icyashatswe nticyemewe", + "invalid-pagination-value": "Umubare wa paji watanzwe ntiwemewe", + "username-taken": "Izina ryarafashwe mbere", + "email-taken": "Email yarafashwe mbere", + "email-not-confirmed": "Email yawe ntabwo iremezwa. Kanda hano kugirango wemeze email yawe.", + "email-not-confirmed-chat": "Ntabwo uremererwa kuganirira mu gikari kuko email yawe itari yemezwa. Kanda hano kugirango wemeze email yawe. ", + "no-email-to-confirm": "Uru rubuga rusaba ko wemeza ko utunze email. Kanda hano kugirango utange email yawe", + "email-confirm-failed": "Ntabwo email yawe yabashije kwemezwa. Ongera ugerageze mu bundi buryo. ", + "confirm-email-already-sent": "Email yo kwemeza yamaze koherezwa. Tegereza iminota (umunota) %1 mbere yo kohereza indi. ", + "username-too-short": "Izina ni rigufi cyane", + "username-too-long": "Izina ni rirerire cyane", + "user-banned": "Umuntu wirukanwe", + "user-too-new": "Wihangena kuko usabwa gutegereza amasegonda (isegonda) %1 mbere yo gushyiraho ikintu cyawe cya mbere", + "no-category": "Icyiciro kitabaho", + "no-topic": "Ikiganiro kitabaho", + "no-post": "Icyashyizweho kitabaho", + "no-group": "Itsinda ritabaho", + "no-user": "Umuntu utabaho", + "no-teaser": "Inshamake itabaho", + "no-privileges": "Ntabwo uragira uburenganzira buhagije ngo wemererwe iki gikorwa", + "no-emailers-configured": "Nta plugin yifashishwa mu kohereza email yari yashyirwamo. Email y'igerageza ntabwo yakunda. ", + "category-disabled": "Icyiciro cyabujijwe", + "topic-locked": "Ikiganiro Cyafungiranywe", + "post-edit-duration-expired": "Wemerewe gusa kugira icyo uhindura ku byo washyizeho nyuma y'amasegonda (isegonda) %1 nyuma yo kubishyiraho", + "still-uploading": "Tegereza gupakira bibanze birangire.", + "content-too-short": "Gerageza ushyireho ikintu kirekireho. Icyo ushyiraho kigomba kuba kigizwe nibura n'inyuguti (cyangwa ibimenyetso) zigera kuri %1.", + "content-too-long": "Gerageza ushyireho ibintu bigufiyaho. Icyo ushyiraho kigomba kuba kigizwe n'inyuguti (cyangwa ibimenyetso) zirenga %1. ", + "title-too-short": "Gerageza ushyireho umutwe muremureho. Umutwe ugomba kuba ugizwe n'inyuguti (cyangwa ibimenyetso) zigera kuri %1. ", + "title-too-long": "Gerageza ushyireho umutwe mugufiyaho. Umutwe ugomba kuba ugizwe n'inyuguti (cyangwa ibimenyetso) zitarenga %1. ", + "too-many-posts": "Wemerewe kugira icyo ushyiraho rimwe mu masegonda (isegonda) %1. Ba utegerejeho gato kugirango wongere", + "too-many-posts-newbie": "Nk'umuntu mushya, wemerewe gushyiraho ikintu rimwe mu masegonda (isegonda) %1 kugeza igihe ugize amanota agera kuri %2. Ba utegerejeho gato kugirango wongere", + "tag-too-short": "Gerageza ukoreshe akamenyetso kagizwe n'inyuguti (cyangwa ibimenyetso) nibura zigera kuri %1", + "tag-too-long": "Gerageza ukoreshe akamenyetso kagizwe n'inyuguti (cyangwa ibimenyetso) zitarenze %1", + "not-enough-tags": "Nta tumenyetso turiho duhagije. Ibiganiro bigomba kugira utumenyetso (akamenyetso) nibura %1", + "too-many-tags": "Hariho utumenyetso twinshi. Ibiganiro ntibyarenza utumenyetso (akamenyetso) %1", + "file-too-big": "Ubunini bwemewe bushoboka bw'ifayilo ni kB %1. Gerageza upakire ifayilo ntoyaho", + "cant-vote-self-post": "Ntabwo wemerewe kwiha amanota", + "already-favourited": "Wari wararangije gutonesha iki ngiki", + "already-unfavourited": "Wari wararekeye aho gutonesha iki ngiki", + "cant-ban-other-admins": "Ntabwo wakwirukana abandi bayobozi!", + "cant-remove-last-admin": "Ni wowe muyobozi wenyine. Ongeramo undi muntu nk'umuyobozi mbere y'uko wikura ku buyobozi", + "invalid-image-type": "Ubwoko bw'ifoto wahisemo ntibwemewe. Hemewe gusa: %1", + "invalid-image-extension": "Impera itemewe igaragaza foruma y'ifoto", + "invalid-file-type": "Ubwoko bw'ifayilo ntibwemewe. Hemewe gusa: %1", + "group-name-too-short": "Izina ry'itsinda ni rigufi cyane", + "group-already-exists": "Itsinda ryitwa gutya risanzweho", + "group-name-change-not-allowed": "Guhindura izina ry'itsinda ntibyemewe", + "group-already-member": "Usanzwe uri umunyamuryango w'iri tsinda", + "group-needs-owner": "Iri tsinda risaba kugira nibura umuyobozi umwe", + "group-already-invited": "Uyu muntu yari yaramaze gutumirwa", + "group-already-requested": "Ubusabe bwo kuba mu itsinda bwari bwaramaze koherezwa", + "post-already-deleted": "Ibi byari byarakuweho", + "post-already-restored": "Ibi byari byaragaruwe", + "topic-already-deleted": "Iki kiganiro cyari cyarakuweho", + "topic-already-restored": "Iki kiganiro cyari cyaragaruwe", + "cant-purge-main-post": "Ntabwo ushobora gusibanganya icyashyizweho kandi ibindi bigishamikiyeho. Ahubwo wakuraho ikiganiro cyose", + "topic-thumbnails-are-disabled": "Ishushondanga ntiyemerewe. ", + "invalid-file": "Ifayilo Ntiyemewe", + "uploads-are-disabled": "Ipakira Ntiryemerewe", + "signature-too-long": "Intero yawe ntabwo yemerewe kurenza inyuguti (cyangwa ibimenyetso) %1. ", + "about-me-too-long": "Inshamake y'Ubuzima yawe ntiyemerewe kurenza inyuguti (cyangwa ibimenyetso) %1.", + "cant-chat-with-yourself": "Ntabwo wakwiganiriza!", + "chat-restricted": "Uyu muntu yemerera kuganirira mu gikari n'abantu bamwe na bamwe. Agomba kuba yarahisemo kugukurikira kugirango ube wabasha kumuganiriza uciye mu gikari. ", + "too-many-messages": "Wohereje ubutumwa bwinshi cyane. Ba utegerejeho gato. ", + "reputation-system-disabled": "Ibijyanye n'itangwa ry'amanota ntibyemerewe. ", + "downvoting-disabled": "Kwambura amanota ntibyemerewe", + "not-enough-reputation-to-downvote": "Ntabwo ufite amanota ahagije ngo ube wakwemererwa kugira uwo wambura amanota", + "not-enough-reputation-to-flag": "Ntabwo ufite amanota ahagije ngo ube wakwemererwa gutambikana uyu muntu", + "already-flagged": "Wari waramaze gutambikana ibi", + "reload-failed": "NodeBB yahuye n'ingorane mu gihe cy'ipakira: \"%1\". NodeBB irakomeza kuzana ibyo yari ifite ku ruhande rw'imbere nubwo ufite kuba wasubira inyuma ugafata ibyo wari wakoze mbere yo gupakira. ", + "registration-error": "Ukwibeshya mu Iyandika", + "parse-error": "Hari ikibazo cyavutse mu gihe twari kugerageza kuzana igisubizo kivuye kuri server", + "wrong-login-type-email": "Koresha email yawe kugirango winjiremo", + "wrong-login-type-username": "Koresha izina ry'umukoresha ryawe kugirango winjiremo" +} \ No newline at end of file diff --git a/public/language/rw/global.json b/public/language/rw/global.json new file mode 100644 index 0000000000..a00250d8cc --- /dev/null +++ b/public/language/rw/global.json @@ -0,0 +1,83 @@ +{ + "home": "Imbere", + "search": "Shaka", + "buttons.close": "Funga", + "403.title": "Ntibyemewe Kuhagera", + "403.message": "Wageze kuri paji udafitiye uburenganzira bwo kureba", + "403.login": "Wenda ahari ukeneye kugerageza kwinjiramo", + "404.title": "Ntacyabonetse", + "404.message": "Biragaragara ko wageze kuri paji itariho ikintu. Subira Imbere.", + "500.title": "Hari ikibazo cya tekinike imbere. ", + "500.message": "Ye baba we! Ntibikunze!", + "register": "Iyandikishe\n", + "login": "Injiramo", + "please_log_in": "Injiramo", + "logout": "Sohokamo", + "posting_restriction_info": "Gushyiraho ikintu byemewe ku banyamuryango gusa. Niba uri we, kanda hano winjiremo. ", + "welcome_back": "Urakaza Neza Urisanga", + "you_have_successfully_logged_in": "Winjiyemo nta ngorane", + "save_changes": "Bika ibyamaze gukorwa", + "close": "Funga", + "pagination": "Umubare wa Paji", + "pagination.out_of": "%1 muri %2", + "pagination.enter_index": "Shyiramo umubare", + "header.admin": "Umuyobozi Mukuru", + "header.categories": "Ibyiciro", + "header.recent": "Ibiheruka", + "header.unread": "Ibitarasomwa", + "header.tags": "Ibimenyetso", + "header.popular": "Ibikunzwe", + "header.users": "Abantu", + "header.groups": "Amatsinda", + "header.chats": "Ubutumwa", + "header.notifications": "Amatangazo", + "header.search": "Shaka", + "header.profile": "Ishusho", + "notifications.loading": "Amatangazo Araje", + "chats.loading": "Ubutumwa Buraje", + "motd.welcome": "Urakaza neza kuri NodeBB, urubuga rujyanye n'ibihe bizaza", + "previouspage": "Paji Ibanza", + "nextpage": "Paji Ikurikira", + "alert.success": "Byaciyemo", + "alert.error": "Byanze", + "alert.banned": "Birukanwe", + "alert.banned.message": "Ubu ngubu umaze gukumirirwa, ukaba ugiye no guhita usohorwamo", + "alert.unfollow": "Ntabwo ukimukurikira %1!", + "alert.follow": "Ubu ngubu ukurikira %1!", + "online": "Ku Murongo", + "users": "Abantu", + "topics": "Ibiganiro", + "posts": "Ibyashyizweho", + "views": "Byarebwe", + "reputation": "Amanota", + "read_more": "komeza usome", + "more": "Ibindi", + "posted_ago_by_guest": "byashyizweho %1 na Umushyitsi", + "posted_ago_by": "byashyizweho %1 na %2", + "posted_ago": "byashyizweho %1", + "posted_in_ago_by_guest": "byashyizwe muri %1 %2 na Umushyitsi", + "posted_in_ago_by": "byashyizwe muri %1 %2 na %3", + "posted_in_ago": "byashyizwe muri %1 %2", + "replied_ago": "yasubije %1", + "user_posted_ago": "%1 yashyizeho %2", + "guest_posted_ago": "Umushyitsi yashyizeho %1", + "last_edited_by_ago": "byahinduweho na %1 %2", + "norecentposts": "Nta Biherutseho", + "norecenttopics": "Nta Biganiro Biherutse", + "recentposts": "Ibiherutseho", + "recentips": "Aderesi za IP Ziheruka Gusura", + "away": "Ahandi", + "dnd": "Nta Kubonana", + "invisible": "Nta Kugaragara", + "offline": "Nta Murongo", + "email": "Email", + "language": "Ururimi", + "guest": "Umushyitsi", + "guests": "Abashyitsi", + "updated.title": "Urubuga Rushyizwe ku Gihe", + "updated.message": "Uru rubuga rumaze gushyirwa ku gihe. Kanda hano kugirango ubashe kuvugurura paji uriho. ", + "privacy": "Umuhezo", + "follow": "Kurikira", + "unfollow": "Reka Gukurikira", + "delete_all": "Siba Byose" +} \ No newline at end of file diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json new file mode 100644 index 0000000000..6d1d5f5f69 --- /dev/null +++ b/public/language/rw/groups.json @@ -0,0 +1,49 @@ +{ + "groups": "Amatsinda", + "view_group": "Reba Itsinda", + "owner": "Nyir'Itsinda ", + "new_group": "Tangiza Itsinda Rishya", + "no_groups_found": "Nta matsinda agaragara", + "pending.accept": "Emera", + "pending.reject": "Hakanira", + "pending.accept_all": "Emererera Bose", + "pending.reject_all": "Hakanira Bose", + "pending.none": "Nta banyamuryango bategereje bahari", + "invited.none": "Nta banyamuryango batumiwe bahari", + "invited.uninvite": "Kuraho Ubutumire", + "invited.search": "Shaka umuntu wo gutumira muri iri tsinda", + "cover-instructions": "Terura Urekure ifoto aha. Ushobora kuringaniza ifoto uko ushatse ubundi ukande kuri Bika", + "cover-change": "Hindura", + "cover-save": "Bika", + "cover-saving": "Kubika", + "details.title": "Ibijyanye n'Itsinda", + "details.members": "Urutonde rw'Abagize Itsinda", + "details.pending": "Abategereje Kwemererwa", + "details.invited": "Abatumiwe", + "details.has_no_posts": "Uyu munyamuryango ntabwo arashyiraho ikintu na kimwe", + "details.latest_posts": "Ibiheruka Gushyirwaho", + "details.private": "Yigenga", + "details.grant": "Tanga/Ambura Ubuyobozi", + "details.kick": "Tera", + "details.owner_options": "Ubuyobozi bw'Itsinda", + "details.group_name": "Izina ry'Itsinda", + "details.member_count": "Umubare w'Abagize Itsinda", + "details.creation_date": "Igihe Ryaremewe", + "details.description": "Ibiriranga", + "details.badge_preview": "Ibisobanuro ku Kirango", + "details.change_icon": "Hindura Akarango", + "details.change_colour": "Hindura Ibara", + "details.badge_text": "Amagambo y'Ikirango", + "details.userTitleEnabled": "Erekana Ikirango", + "details.private_help": "Nubyemera, kujya mu itsinda runaka bizajya bisaba guca kwa nyir'itsinda", + "details.hidden": "Ahishe", + "details.hidden_help": "Nubyemera, iri tsinda ntabwo rizajya rigaragara ku rutonde rw'andi matsinda kandi abantu bazajya basabwa kuritumirwamo buri wese ku giti cye mbere yo kurijyamo", + "details.delete_group": "Senya Itsinda", + "event.updated": "Amakuru ku itsinda yahinduweho bijyanye n'igihe", + "event.deleted": "Itsinda rya \"%1\" ryakuweho", + "membership.accept-invitation": "Emera Ubutumire", + "membership.invitation-pending": "Ubutumire Buracyategereje", + "membership.join-group": "Injira mu Itsinda", + "membership.leave-group": "Va mu Itsinda", + "membership.reject": "Hakanira" +} \ No newline at end of file diff --git a/public/language/rw/login.json b/public/language/rw/login.json new file mode 100644 index 0000000000..72ae32e57c --- /dev/null +++ b/public/language/rw/login.json @@ -0,0 +1,11 @@ +{ + "username-email": "Izina / Email", + "username": "Izina ", + "email": "Email", + "remember_me": "Wibukwe?", + "forgot_password": "Wibagiwe ijambobanga?", + "alternative_logins": "Ukundi Wakwinjiramo", + "failed_login_attempt": "Ntiwinjiyemo. Ongera ugerageze. ", + "login_successful": "Winjiyemo nta ngorane!", + "dont_have_account": "Nta konte ufite?" +} \ No newline at end of file diff --git a/public/language/rw/modules.json b/public/language/rw/modules.json new file mode 100644 index 0000000000..401a21121c --- /dev/null +++ b/public/language/rw/modules.json @@ -0,0 +1,26 @@ +{ + "chat.chatting_with": "Ikiganiro na ", + "chat.placeholder": "Andika ubutumwa bwawe aha. Ushobora gukanda \"Enter\" ngo wohereze.", + "chat.send": "Ohereza", + "chat.no_active": "Nta biganiro byo mu gikari ufite. ", + "chat.user_typing": "%1 ari kwandika ...", + "chat.user_has_messaged_you": "%1 yagusigiye ubutumwa.", + "chat.see_all": "Reba Ubutumwa Bwose", + "chat.no-messages": "Hitamo umuntu ushaka kurebera ibyo mwandikiranye", + "chat.recent-chats": "Ubutumwa Buheruka", + "chat.contacts": "Abo Kuvugisha", + "chat.message-history": "Ubutumwa Bwahise", + "chat.pop-out": "Fungura Akadirishya k'Igikari", + "chat.maximize": "Marirayo", + "chat.seven_days": "Iminsi 7", + "chat.thirty_days": "Iminsi 30", + "chat.three_months": "Amezi 3", + "composer.compose": "Andika", + "composer.show_preview": "Bona Uko Biza Gusa", + "composer.hide_preview": "Hisha Uko Biza Gusa", + "composer.user_said_in": "%1 yavuze muri %2:", + "composer.user_said": "%1 yavuze:", + "composer.discard": "Wiringiye neza ko ushaka kureka kubishyiraho?", + "composer.submit_and_lock": "Shyiraho kandi Unafungirane", + "composer.toggle_dropdown": "Hindura Icyerekezo" +} \ No newline at end of file diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json new file mode 100644 index 0000000000..e7cdb0a674 --- /dev/null +++ b/public/language/rw/notifications.json @@ -0,0 +1,28 @@ +{ + "title": "Amatangazo", + "no_notifs": "Nta matangazo mashya ufite", + "see_all": "Reba Amatangazo Yose", + "mark_all_read": "Garagaza amatangazo yose nk'ayasomwe", + "back_to_home": "Subira kuri %1", + "outgoing_link": "Umurongo Usohoka", + "outgoing_link_message": "Uri kuva muri %1.", + "continue_to": "Komereza kuri %1", + "return_to": "Subira kuri %1", + "new_notification": "Itangazo Rishya", + "you_have_unread_notifications": "Ufite amatangazo utarasoma. ", + "new_message_from": " %1 yakwandikiye", + "upvoted_your_post_in": "%1 yagushimye aguha inota kuri %2 washyizeho.", + "moved_your_post": "%1 yimuye icyo wari washyizeho. ", + "moved_your_topic": "%1 yimuriye ikiganiro cyawe ahandi.", + "favourited_your_post_in": "%1 yatonesheje %2 washyizeho.", + "user_flagged_post_in": "%1 yatambikanye ikintu muri %2", + "user_posted_to": "%1 yanditse kuri: %2", + "user_posted_topic": "%1 yatangije ikiganiro gishya: %2", + "user_mentioned_you_in": "%1 yakuvuze muri %2", + "user_started_following_you": "%1 yatangiye kugukurikira.", + "new_register": "%1 yasabye kwandikwa.", + "email-confirmed": "Email Yemejwe", + "email-confirmed-message": "Urakoze kugaragaza ko email yawe ikora. Ubu ngubu konte yawe irakora nta kabuza. ", + "email-confirm-error-message": "Havutse ikibazo mu gushaka kumenya niba email yawe ikora. Ushobora kuba wakoresheje kode itari yo cyangwa se yarengeje igihe. ", + "email-confirm-sent": "Hoherejwe email yo kubyemeza." +} \ No newline at end of file diff --git a/public/language/rw/pages.json b/public/language/rw/pages.json new file mode 100644 index 0000000000..aa4a415f98 --- /dev/null +++ b/public/language/rw/pages.json @@ -0,0 +1,21 @@ +{ + "home": "Imbere", + "unread": "Ibiganiro Bitarasomwa", + "popular": "Ibiganiro Bikunzwe", + "recent": "Ibiganiro Biheruka", + "users": "Abantu Banditse", + "notifications": "Amatangazo", + "tags": "Ibimenyetso", + "tag": "Ibiganiro bifite ibimenyetso bya \"%1\"", + "user.edit": "Uguhinduraho kwa \"%1\"", + "user.following": "Abantu %1 Akurikira", + "user.followers": "Abantu Bakurikira %1", + "user.posts": "Ibyashyizweho na %1", + "user.topics": "Ibiganiro byatangijwe na %1", + "user.groups": "Amatsinda ya %1", + "user.favourites": "Ibyo %1 Yatonesheje", + "user.settings": "Ugutunganya", + "user.watched": "Ibiganiro bikurikirwa na %1", + "maintenance.text": "%1 ntiboneka kuko ubu iri gutunganywa. Muze kongera kugaruka. ", + "maintenance.messageIntro": "Byongeye, kandi, umuyobozi yasize ubu butumwa: " +} \ No newline at end of file diff --git a/public/language/rw/recent.json b/public/language/rw/recent.json new file mode 100644 index 0000000000..ac9843086b --- /dev/null +++ b/public/language/rw/recent.json @@ -0,0 +1,19 @@ +{ + "title": "Ubuheruka", + "day": "Umunsi", + "week": "Icyumweru", + "month": "Ukwezi", + "year": "Umwaka", + "alltime": "Ibihe Byose", + "no_recent_topics": "Nta biganiro biheruka. ", + "no_popular_topics": "Nta biganiro bikunzwe. ", + "there-is-a-new-topic": "Hari ikiganiro gishya. ", + "there-is-a-new-topic-and-a-new-post": "Hari ikiganiro gishya kimwe n'icyashyizweho gishya kimwe. ", + "there-is-a-new-topic-and-new-posts": "Hari ikiganiro gishya kimwe n'ibyashyizweho bishya %1 .", + "there-are-new-topics": "Hari ibiganiro bishya %1. ", + "there-are-new-topics-and-a-new-post": "Hari ibiganiro bishya %1 n'icyashyizweho gishya kimwe.", + "there-are-new-topics-and-new-posts": "Hari ibiganiro bishya %1 n'ibyashyizweho bishya %2.", + "there-is-a-new-post": "Hari icyashyizweho gishya. ", + "there-are-new-posts": "Hari ibyashyizweho bishya %1.", + "click-here-to-reload": "Kanda hano wongere upakire." +} \ No newline at end of file diff --git a/public/language/rw/register.json b/public/language/rw/register.json new file mode 100644 index 0000000000..332517de87 --- /dev/null +++ b/public/language/rw/register.json @@ -0,0 +1,19 @@ +{ + "register": "Iyandike", + "help.email": "Ubusanzwe, email yawe ntabwo iba ibonwa na bose", + "help.username_restrictions": "Izina rigomba kuba ryihariye kuri uru rubuga kandi rikaba rifite uburebure bw'inyuguti buva kuri %1 kugera kuri %2. Iryo zina ni ryo abantu bazajya bifashisha nka @username mu gihe bakoresheje izina ryawe mu byo banditse. ", + "help.minimum_password_length": "Umubare w'inyuguti n'ibimenyetso bigize ijambobanga ryawe ugomba kuba nibura %1.", + "email_address": "Aderesi ya Email", + "email_address_placeholder": "Shyiramo Aderesi ya Email", + "username": "Izina Ukoresha", + "username_placeholder": "Shyiramo Izina Ukoresha", + "password": "Ijambobanga", + "password_placeholder": "Shyiramo Ijambobanga", + "confirm_password": "Emeza Ijambobanga", + "confirm_password_placeholder": "Emeza Ijambobanga", + "register_now_button": "Iyandike", + "alternative_registration": "Ukundi Wakwiyandika", + "terms_of_use": "Amategeko n'Amabwiriza", + "agree_to_terms_of_use": "Nzakurikiza Amategeko n'Amabwiriza", + "registration-added-to-queue": "Icyifuzo cy'iyandikwa ryawe cyakiriwe ariko gitegereje isuzuma. Uzabimenyeshwa biciye muri email niba ubuyobozi bwakwemereye kwandikwa. " +} \ No newline at end of file diff --git a/public/language/rw/reset_password.json b/public/language/rw/reset_password.json new file mode 100644 index 0000000000..b5450e687d --- /dev/null +++ b/public/language/rw/reset_password.json @@ -0,0 +1,17 @@ +{ + "reset_password": "Rema Bundibushya Ijambobanga", + "update_password": "Vugurura Ijambobanga", + "password_changed.title": "Ijambobanga Ryahinduwe", + "password_changed.message": "

Ijambobanga ryaremwe bundi bushya. Urasabwa kongera ukinjiramo.", + "wrong_reset_code.title": "Kode Itari Yo mu Kurema Bundibushya Ijambobanga", + "wrong_reset_code.message": "Kode yakiriwe mu kurema bundibushya ijambobanga si yo. Ongera ugerageze cyangwa se usabe indi kode.", + "new_password": "Ijambobanga Rishya", + "repeat_password": "Emeza Ijambobanga", + "enter_email": "Tanga email ukoresha maze tuze kukoherereza ubutumwa bugusobanuria uko uri bureme bundibushya konte yawe.", + "enter_email_address": "Shyiramo Email", + "password_reset_sent": "Ubusabe bwo Kurema Bundibushya Bwakiriwe", + "invalid_email": "Email Itemewe / Email Itabaho!", + "password_too_short": "Ijambobanga washyizemo ni rigufi cyane. Gerageza ufate irindi. ", + "passwords_do_not_match": "Ijambobanga waryanditse mu buryo bubiri butandukanye kandi bitemewe. ", + "password_expired": "Ijambobanga ryawe ryarashaje. Shaka irindi. " +} \ No newline at end of file diff --git a/public/language/rw/search.json b/public/language/rw/search.json new file mode 100644 index 0000000000..745860b9a1 --- /dev/null +++ b/public/language/rw/search.json @@ -0,0 +1,40 @@ +{ + "results_matching": "Habonetse ibintu (ikintu) %1 gihura na \"%2\". (Byafashe amasegonda %3)", + "no-matches": "Nta cyabonetse", + "advanced-search": "Gushaka Byisumbuye", + "in": "Muri", + "titles": "Imitwe", + "titles-posts": "Imitwe n'Ibyashyizweho", + "posted-by": "Mu Byashyizweho na", + "in-categories": "Mu Byiciro bya", + "search-child-categories": "Shakira no mu byiciro bikomokaho", + "reply-count": "Umubare w'Ibisubizo", + "at-least": "Ungana Nibura na", + "at-most": "Utarengeje", + "post-time": "Igihe Byashyiriweho", + "newer-than": "Nyuma ya", + "older-than": "Mbere ya", + "any-date": "Itariki Yose", + "yesterday": "Ejo Hashize", + "one-week": "Icyumweru kimwe", + "two-weeks": "Ibyumweru bibiri", + "one-month": "Ukwezi kumwe", + "three-months": "Amezi atatu", + "six-months": "Amezi atandatu", + "one-year": "Umwaka umwe", + "sort-by": "Bigaragare Ukurikije", + "last-reply-time": "Igihe baherukira gusubiza", + "topic-title": "Umutwe w'ikiganiro", + "number-of-replies": "Umubare w'ibisubizo", + "number-of-views": "Umubare w'ababirebye", + "topic-start-date": "Igihe ikiganiro cyatangijwe", + "username": "Izina ry'umukoresha", + "category": "Icyiciro", + "descending": "Uva ku kinini ujya ku gito", + "ascending": "Uva ku gito ujya ku kinini", + "save-preferences": "Bika ibyo wahisemo", + "clear-preferences": "Hanagura ibyo wahisemo", + "search-preferences-saved": "Ibyo wahisemo mu gihe cy'ishaka byabitswe", + "search-preferences-cleared": "Ibyo wahisemo mu gihe cy'ishaka byahanaguwe", + "show-results-as": "Ibiboneka bigaragazwe nk'" +} \ No newline at end of file diff --git a/public/language/rw/success.json b/public/language/rw/success.json new file mode 100644 index 0000000000..80f0d8d3ad --- /dev/null +++ b/public/language/rw/success.json @@ -0,0 +1,6 @@ +{ + "success": "Byaciyemo", + "topic-post": "Wabishyizeho nta ngorane. ", + "authentication-successful": "Igenzura Ryaciyemo", + "settings-saved": "Ibyatunganyijwe byakiriwe!" +} \ No newline at end of file diff --git a/public/language/rw/tags.json b/public/language/rw/tags.json new file mode 100644 index 0000000000..378fa2b3e8 --- /dev/null +++ b/public/language/rw/tags.json @@ -0,0 +1,7 @@ +{ + "no_tag_topics": "Nta biganiro bifite aka kamenyetso bihari. ", + "tags": "Utumenyetso", + "enter_tags_here": "Andika akamenyetso bijyanye aha. Buri kamenyetso kagomba kuba kagizwe n'inyuguti hagati ya %1 na %2. ", + "enter_tags_here_short": "Shyiraho utumenyetso...", + "no_tags": "Nta tumenyetso twari twashyirwaho. " +} \ No newline at end of file diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json new file mode 100644 index 0000000000..adba67df80 --- /dev/null +++ b/public/language/rw/topic.json @@ -0,0 +1,100 @@ +{ + "topic": "Ikiganiro", + "topic_id": "Nimero y'Ikiganiro", + "topic_id_placeholder": "Shyiramo nimero y'ikiganiro", + "no_topics_found": "Nta kiganiro cyabonetse!", + "no_posts_found": "Nta cyashyizweho cyabonetse!", + "post_is_deleted": "Ibyari byanditse byakuweho!", + "topic_is_deleted": "Iki kiganiro cyakuweho!", + "profile": "Ishusho", + "posted_by": "Byashyizweho na %1", + "posted_by_guest": "Byashyizweho na Umushyitsi", + "chat": "Igikari", + "notify_me": "Uzajye umenyeshwa ibisubizo bishya kuri iki kiganiro", + "quote": "Terura", + "reply": "Subiza", + "guest-login-reply": "Injiramo maze usubize", + "edit": "Hinduraho", + "delete": "Siba", + "purge": "Sibanganya", + "restore": "Garuraho", + "move": "Imura", + "fork": "Gabanyamo", + "link": "Shyiraho Umurongo", + "share": "Sangiza", + "tools": "Ibikoresho", + "flag": "Tambikana", + "locked": "Birafungiranye", + "bookmark_instructions": "Kanda hano kugirango ugezwe aho wari ugeze usoma. Niba utabishaka, wafunga aka kadirishya. ", + "flag_title": "Menyesha ibi ubuyobozi niba ubona bidakwiye", + "flag_confirm": "Wiringiye neza ko ushaka kumenyesha ubuyobozi ibi? ", + "flag_success": "Bimaze kumenyeshwa ubuyobozi ngo bikurikiranwe. ", + "deleted_message": "Iki kiganiro cyamaze gukurwaho. Abantu babifitiye uburenganzira ni bo bonyine bashobora kukibona. ", + "following_topic.message": "Ntabwo uzongera kubimenyeshwa nihagira umuntu ugira icyo yandika kuri iki kiganiro. ", + "not_following_topic.message": "Ntabwo uzongera kujya umenyeshwa ku bibera muri iki kiganiro. ", + "login_to_subscribe": "Ba umunyamuryango cyangwa winjiremo niba ushaka kwiyandikisha kuri iki kiganiro. ", + "markAsUnreadForAll.success": "Ikiganiro kigizwe nk'icyasomwe na bose", + "watch": "Cunga", + "unwatch": "Rekeraho Gucunga", + "watch.title": "Ujye umenyeshwa ibyongerwaho bishya kuri iki kiganiro", + "unwatch.title": "Rekera aho gucunga iki kiganiro", + "share_this_post": "Sangiza Ibi", + "thread_tools.title": "Ibikoresho by'Ikiganiro", + "thread_tools.markAsUnreadForAll": "Bigaragaze nk'Ibyasomwe", + "thread_tools.pin": "Zamura Ikiganiro", + "thread_tools.unpin": "Manura Ikiganiro", + "thread_tools.lock": "Fungirana Ikiganiro", + "thread_tools.unlock": "Fungurira Ikiganiro", + "thread_tools.move": "Imura Ikiganiro", + "thread_tools.move_all": "Byimure Byose", + "thread_tools.fork": "Gabanyaho ku Kiganiro", + "thread_tools.delete": "Kuraho Ikiganiro", + "thread_tools.delete_confirm": "Wiringiye neza ko ushaka gukuraho iki kiganiro?", + "thread_tools.restore": "Subizaho Ikiganiro", + "thread_tools.restore_confirm": "Wiringiye neza ko ushaka kugarura iki kiganiro?", + "thread_tools.purge": "Sibanganya Ikiganiro", + "thread_tools.purge_confirm": "Wiringiye neza ko ushaka gusibanganya iki kiganiro?", + "topic_move_success": "Nta ngorane, iki kiganiro kimaze kwimurirwa muri %1", + "post_delete_confirm": "Wiringiye neza ko ushaka gukuraho iki kiganiro?", + "post_restore_confirm": "Wiringiye neza ko ushaka kugarura iki kiganiro? ", + "post_purge_confirm": "Wiringiye neza ko ushaka gusibangaya iki kiganiro?", + "load_categories": "Ibyiciro Biraje", + "disabled_categories_note": "Ibyiciro bitagaragazwa birasa n'ibipfutse", + "confirm_move": "Imura", + "confirm_fork": "Gabanyaho", + "favourite": "Tonesha", + "favourites": "Ibyatoneshejwe", + "favourites.has_no_favourites": "Nta kintu na kimwe wari watonesha. Tonesha ibintu bimwe na bimwe kugirango ujye ubibona aha!", + "loading_more_posts": "Ibindi Biraje", + "move_topic": "Imura Ikiganiro", + "move_topics": "Imura Ibiganiro", + "move_post": "Imura Icyashyizweho", + "post_moved": "Icyashizweho kirimuwe!", + "fork_topic": "Gabanyaho ku Kiganiro", + "topic_will_be_moved_to": "Iki kiganiro kirimurirwa mu cyiciro", + "fork_topic_instruction": "Kanda ku byashizweho ushaka kugabanyaho", + "fork_no_pids": "Nta kintu wahisemo!", + "fork_success": "Umaze kugabanyaho ku kiganiro! Kanda hano ugezwe ku kiganiro cyavutse. ", + "composer.title_placeholder": "Shyira umutwe w'ikiganiro cyawe aha...", + "composer.handle_placeholder": "Izina", + "composer.discard": "Byihorere", + "composer.submit": "Shyiraho", + "composer.replying_to": "Gusubiza %1", + "composer.new_topic": "Ikiganiro Gishya", + "composer.uploading": "gupakira...", + "composer.thumb_url_label": "Omekaho thumbnail URL y'ikiganiro", + "composer.thumb_title": "Ongera agafotondanga kuri iki kiganiro", + "composer.thumb_url_placeholder": "http://example.com/thumb.png", + "composer.thumb_file_label": "Cyangwa upakireho ifayilo ", + "composer.thumb_remove": "Hanagura imirongo", + "composer.drag_and_drop_images": "Terura Ubundi Utereke Amafoto Aha", + "more_users_and_guests": "Abantu (umuntu) banditse barenga %1 n'abashyitsi (umushyitsi) %2 ", + "more_users": "Abantu (umuntu) banditse barenga %1 ", + "more_guests": "Abashyitsi (umushyitsi) barenga %1 ", + "users_and_others": "%1 n'abandi %2 ", + "sort_by": "Ubigaragaze Ukurikije", + "oldest_to_newest": "Ibya Kera Ujya ku bya Vuba", + "newest_to_oldest": "Ibya Vuba Ujya ku bya Kera", + "most_votes": "Amajwi yiganje", + "most_posts": "Ibyashyizweho byiganje" +} \ No newline at end of file diff --git a/public/language/rw/unread.json b/public/language/rw/unread.json new file mode 100644 index 0000000000..075fdc7792 --- /dev/null +++ b/public/language/rw/unread.json @@ -0,0 +1,10 @@ +{ + "title": "Ibitarasomwa", + "no_unread_topics": "Nta biganiro bitarasomwa bihari. ", + "load_more": "Zana Ibindi", + "mark_as_read": "Bigire nkaho Byasomwe", + "selected": "Ibyatoranyijwe", + "all": "Byose", + "all_categories": "Ibyiciro Byose", + "topics_marked_as_read.success": "Ibiganiro byamaze kugaragazwa nk'ibyasomwe!" +} \ No newline at end of file diff --git a/public/language/rw/user.json b/public/language/rw/user.json new file mode 100644 index 0000000000..3deea4707a --- /dev/null +++ b/public/language/rw/user.json @@ -0,0 +1,88 @@ +{ + "banned": "Yarirukanwe", + "offline": "Ntari ku Murongo", + "username": "Izina ry'Umuntu", + "joindate": "Igiye Yaziye", + "postcount": "Ingano y'ibyo Yashyizeho", + "email": "Email", + "confirm_email": "Emeza Email", + "ban_account": "Irukana", + "ban_account_confirm": "Wiringiye neza ko ushaka kwirukana uyu muntu?", + "unban_account": "Garura iyi Konte", + "delete_account": "Siba Konte", + "delete_account_confirm": "Wiringiye neza ko ushaka gusiba konte yawe?
Numara kuyisiba ntabwo urabasha kwisubira kandi nturabasha kugarura ibyo wari ufiteho

Shyiramo izina ryawe kugirango wemeze ko koko ushaka gusenya iyi konte.", + "delete_this_account_confirm": "Wiringiye neza ko ushaka gusiba iyi konte?
Ntabwo uri bubashe kwisubira kandi ntabwo urabasha gusubirana ibyo wari ufiteho numara kuyisiba

", + "fullname": "Izina Ryuzuye", + "website": "Urubuga", + "location": "Ahantu", + "age": "Imyaka", + "joined": "Yaje", + "lastonline": "Aheruka ku Murongo", + "profile": "Ishusho", + "profile_views": "Ishusho Yarebwe", + "reputation": "Amanota", + "favourites": "Ibitoneshwa", + "watched": "Ibikurikiranwa", + "followers": "Abamukurikira", + "following": "Akurikira", + "aboutme": "Inshamake y'Ubuzima", + "signature": "Intero", + "gravatar": "Gravatar", + "birthday": "Itariki y'Amavuko", + "chat": "Mu Gikari", + "follow": "Kurikira", + "unfollow": "Ntukurikire", + "more": "Ibindi", + "profile_update_success": "Ishusho yashyizwe ku gihe nta ngorane!", + "change_picture": "Hindura Ifoto", + "edit": "Hinduraho", + "uploaded_picture": "Ifoto Yapakiwe", + "upload_new_picture": "Pakira Ifoto Nshya", + "upload_new_picture_from_url": "Pakira Ifoto Nshya Ukoresheje URL", + "current_password": "Ijambobanga Risanzweho", + "change_password": "Hindura Ijambobanga", + "change_password_error": "Ijambobanga Ritari Ryo!", + "change_password_error_wrong_current": "Ijambobanga ryawe watanze nk'irisanzweho ntabwo ari ryo!", + "change_password_error_length": "Ijambobanga watanze ni rigufi cyane!", + "change_password_error_match": "Ijambobanga ugomba kuryandukura mu buryo bumwe inshuro ebyiri!", + "change_password_error_privileges": "Nta burenganzira ufite bwo guhindura iri jambobanga. ", + "change_password_success": "Ijambobanga ryawe ryavuguruwe!", + "confirm_password": "Emeza Ijambobanga", + "password": "Ijambobanga", + "username_taken_workaround": "Izina ushaka kujya ukoresha twasanze ryarafashwe. Ntugire impungenge kuko twakuboneye iryo byenda kumera kimwe. Uzaba uzwi ku izina rya %1", + "upload_picture": "Gushyiraho ifoto", + "upload_a_picture": "Shyiraho ifoto", + "image_spec": "Wemerewe gushyiraho ifoto iri muri foruma ya PNG, JPG, cyangwa GIF ", + "settings": "Itunganya", + "show_email": "Hagaragazwe Email Yanjye", + "show_fullname": "Hagaragazwe Izina Ryuzuye Ryanjye", + "restrict_chats": "Emerera ubutumwa buciye mu gikari abantu ukurikira gusa", + "digest_label": "Iyandikishe ku Ngingo z'Ingenzi", + "digest_description": "Iyandikishe ku makuru aciye kuri email ajyanye n'ibivugirwa aha (amatangazo mashya n'ibiganiro) biciye muri gahunda yagenwe", + "digest_off": "Birafunze", + "digest_daily": "Buri Munsi", + "digest_weekly": "Buri Cyumweru", + "digest_monthly": "Buri Kwezi", + "send_chat_notifications": "Njye nohererezwa email igihe hari ubutumwa bwo mu gikari banyoherereje ntari ku murongo", + "send_post_notifications": "Njye nohererezwa email mu gihe hari abanditse ku biganiro niyandikishijeho", + "settings-require-reload": "Hari igihe ibyo watunganyije bitagaragara iyo utongeye ngo upakire paji uriho. Kanda hano upakire iyi paji bundibushya. ", + "has_no_follower": "Uyu muntu ntabwo afite abamukurikira :(", + "follows_no_one": "Uyu muntu ntabwo akurikira umuntu numwe :(", + "has_no_posts": "Uyu muntu nta kintu arashyiraho. ", + "has_no_topics": "Uyu muntu nta kiganiro aratangiza na kimwe. ", + "has_no_watched_topics": "Uyu muntu ntabwo arakurikira ikiganiro na kimwe.", + "email_hidden": "Email Yahishwe", + "hidden": "byahishwe", + "paginate_description": "Gabanya ibiganiro n'ibyashyizweho mu ma paji aho kugirango umuntu ajye amanuka ubudahagarara ", + "topics_per_page": "Ibiganiro kuri Buri Paji", + "posts_per_page": "Ibyashyizweho kuri Buri Paji", + "notification_sounds": "Hajye humvikana ijwi rikumenyesha ko haje itangazo rishya", + "browsing": "Gutunganya Uburyo Usoma", + "open_links_in_new_tab": "Fungurira imirongo ijya hanze mu idirishya rishya", + "enable_topic_searching": "Emerera Ugushakira mu Kiganiro", + "topic_search_help": "Nibyemerwa, ugushakira mu kiganiro bizajya biba ari byo bikorwa maze bitume umuntu abasha gushakira mu kiganiro hose aho gushakira kuri paji igaragarira amaso, imbere yawe gusa", + "follow_topics_you_reply_to": "Kurikira ibiganiro ushyiraho ibisubizo", + "follow_topics_you_create": "Kurikira ibiganiro uba watangije", + "grouptitle": "Hitamo umutwe w'itsinda ushaka ko uzajya ugaragara", + "no-group-title": "Nta mutwe w'itsinda" +} \ No newline at end of file diff --git a/public/language/rw/users.json b/public/language/rw/users.json new file mode 100644 index 0000000000..944183afcb --- /dev/null +++ b/public/language/rw/users.json @@ -0,0 +1,21 @@ +{ + "latest_users": "Abantu Bashya", + "top_posters": "Abashyizeho Byinshi", + "most_reputation": "Abafite Amanota Menshi", + "search": "Shaka", + "enter_username": "Shyiramo izina ryo gushaka", + "load_more": "Zana Ibindi", + "users-found-search-took": "Habonetse abantu (umuntu) %1! Byatwaye amasegonda %2 gusa.", + "filter-by": "Yungurura Ukurikije", + "online-only": "Abari ku murongo gusa", + "picture-only": "Ifoto gusa", + "invite": "Tumira", + "invitation-email-sent": "Ubutumire bwa email bwohererejwe %1", + "user_list": "Urutonde rw'Abantu", + "recent_topics": "Ibiganiro Biheruka", + "popular_topics": "Ibiganiro Bikunzwe", + "unread_topics": "Ibiganiro Bitarasomwa", + "categories": "Ibyiciro", + "tags": "Ibimenyetso", + "map": "Ikarita" +} \ No newline at end of file From 7160e157deea311790ebe8f7bd4d487222d34b89 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 12 Aug 2015 10:17:38 -0400 Subject: [PATCH 054/284] added missing language.json file for Kinyarwanda --- public/language/rw/language.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 public/language/rw/language.json diff --git a/public/language/rw/language.json b/public/language/rw/language.json new file mode 100644 index 0000000000..fb851f2e06 --- /dev/null +++ b/public/language/rw/language.json @@ -0,0 +1,5 @@ +{ + "name": "Kinyarwanda", + "code": "rw", + "dir": "ltr" +} \ No newline at end of file From 937875b0be66a82db249910008f27663318c40e5 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 12 Aug 2015 11:00:09 -0400 Subject: [PATCH 055/284] updated mentions minver --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5740bc3cea..f655cf9ec6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "nodebb-plugin-dbsearch": "^0.2.12", "nodebb-plugin-emoji-extended": "^0.4.8", "nodebb-plugin-markdown": "^4.0.0", - "nodebb-plugin-mentions": "^0.11.7", + "nodebb-plugin-mentions": "1.0.0", "nodebb-plugin-soundpack-default": "^0.1.1", "nodebb-plugin-spam-be-gone": "^0.4.0", "nodebb-rewards-essentials": "^0.0.1", From 0d789261a92c485de154c060bed5df9bc5560dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 12 Aug 2015 14:49:26 -0400 Subject: [PATCH 056/284] filter falsy check valid --- src/database/mongo/main.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/database/mongo/main.js b/src/database/mongo/main.js index 9d8fae3b65..4c18fbc634 100644 --- a/src/database/mongo/main.js +++ b/src/database/mongo/main.js @@ -36,17 +36,19 @@ module.exports = function(db, module) { } if (Array.isArray(data.cid) && data.cid.length) { + data.cid = data.cid.filter(Boolean); if (data.cid.length > 1) { searchQuery.cid = {$in: data.cid.map(String)}; - } else { + } else if (data.cid[0]) { searchQuery.cid = data.cid[0].toString(); } } if (Array.isArray(data.uid) && data.uid.length) { + data.uid = data.uid.filter(Boolean); if (data.uid.length > 1) { searchQuery.uid = {$in: data.uid.map(String)}; - } else { + } else if (data.uid[0]) { searchQuery.uid = data.uid[0].toString(); } } From fd87bedc900ada6dd5f0df10e9022443904b7362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 12 Aug 2015 14:54:49 -0400 Subject: [PATCH 057/284] fix indent --- src/database/mongo/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/database/mongo/main.js b/src/database/mongo/main.js index 4c18fbc634..045bc2c5bc 100644 --- a/src/database/mongo/main.js +++ b/src/database/mongo/main.js @@ -37,7 +37,7 @@ module.exports = function(db, module) { if (Array.isArray(data.cid) && data.cid.length) { data.cid = data.cid.filter(Boolean); - if (data.cid.length > 1) { + if (data.cid.length > 1) { searchQuery.cid = {$in: data.cid.map(String)}; } else if (data.cid[0]) { searchQuery.cid = data.cid[0].toString(); From 235a981dd10ba443776e088ee5de457eb35b829e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 12 Aug 2015 16:14:48 -0400 Subject: [PATCH 058/284] added mongodb memory usage --- src/database/mongo.js | 13 +++++++++++-- src/views/admin/advanced/database.tpl | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/database/mongo.js b/src/database/mongo.js index 389a85bf7d..49f2da5edd 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -177,16 +177,25 @@ }; module.info = function(db, callback) { - db.stats({scale:1024}, function(err, stats) { - if(err) { + async.parallel({ + serverStats: function(next) { + db.command({'serverStatus': 1}, next); + }, + stats: function(next) { + db.stats({scale:1024}, next); + } + }, function(err, results) { + if (err) { return callback(err); } + var stats = results.stats; stats.avgObjSize = (stats.avgObjSize / 1024).toFixed(2); stats.dataSize = (stats.dataSize / 1024).toFixed(2); stats.storageSize = (stats.storageSize / 1024).toFixed(2); stats.fileSize = (stats.fileSize / 1024).toFixed(2); stats.indexSize = (stats.indexSize / 1024).toFixed(2); + stats.mem = results.serverStats.mem; stats.raw = JSON.stringify(stats, null, 4); stats.mongo = true; diff --git a/src/views/admin/advanced/database.tpl b/src/views/admin/advanced/database.tpl index 0390e7a681..b868b322a9 100644 --- a/src/views/admin/advanced/database.tpl +++ b/src/views/admin/advanced/database.tpl @@ -13,6 +13,10 @@ Storage Size {mongo.storageSize} mb
Index Size {mongo.indexSize} mb
File Size {mongo.fileSize} mb
+


+ Resident Memory {mongo.mem.resident} mb
+ Virtual Memory {mongo.mem.virtual} mb
+ Mapped Memory {mongo.mem.mapped} mb
From aeb15ed7ee6fa3233cc62cf206dc6cdf407eb18e Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 13 Aug 2015 12:20:53 -0400 Subject: [PATCH 059/284] moved getMonthlyPageViews to analytics --- src/analytics.js | 19 +++++++++++++++++++ src/socket.io/admin.js | 20 +------------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/analytics.js b/src/analytics.js index 49254954bc..8ac91877c3 100644 --- a/src/analytics.js +++ b/src/analytics.js @@ -66,4 +66,23 @@ var cronJob = require('cron').CronJob, Analytics.getUnwrittenPageviews = function() { return pageViews; }; + + Analytics.getMonthlyPageViews = function(callback) { + var thisMonth = new Date(); + var lastMonth = new Date(); + thisMonth.setMonth(thisMonth.getMonth(), 1); + thisMonth.setHours(0, 0, 0, 0); + lastMonth.setMonth(thisMonth.getMonth() - 1, 1); + lastMonth.setHours(0, 0, 0, 0); + + var values = [thisMonth.getTime(), lastMonth.getTime()]; + + db.sortedSetScores('analytics:pageviews:month', values, function(err, scores) { + if (err) { + return callback(err); + } + callback(null, {thisMonth: scores[0] || 0, lastMonth: scores[1] || 0}); + }); + }; + }(exports)); \ No newline at end of file diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index a9d75b3f89..00fea0c730 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -233,7 +233,7 @@ SocketAdmin.analytics.get = function(socket, data, callback) { getHourlyStatsForSet('analytics:pageviews', data.amount, next); }, monthlyPageViews: function(next) { - getMonthlyPageViews(next); + analytics.getMonthlyPageViews(next); } }, function(err, data) { data.pastDay = data.pageviews.reduce(function(a, b) {return parseInt(a, 10) + parseInt(b, 10);}); @@ -286,24 +286,6 @@ function getHourlyStatsForSet(set, hours, callback) { }); } -function getMonthlyPageViews(callback) { - var thisMonth = new Date(); - var lastMonth = new Date(); - thisMonth.setMonth(thisMonth.getMonth(), 1); - thisMonth.setHours(0, 0, 0, 0); - lastMonth.setMonth(thisMonth.getMonth() - 1, 1); - lastMonth.setHours(0, 0, 0, 0); - - var values = [thisMonth.getTime(), lastMonth.getTime()]; - - db.sortedSetScores('analytics:pageviews:month', values, function(err, scores) { - if (err) { - return callback(err); - } - callback(null, {thisMonth: scores[0] || 0, lastMonth: scores[1] || 0}); - }); -} - SocketAdmin.getMoreEvents = function(socket, next, callback) { var start = parseInt(next, 10); if (start < 0) { From 46bcd66297cac9c8cfc0ef74be51fe9776a88360 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 13 Aug 2015 12:33:24 -0400 Subject: [PATCH 060/284] filter system plugins from list --- src/plugins.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins.js b/src/plugins.js index c9a686d8f8..d2a726096b 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -216,6 +216,10 @@ var fs = require('fs'), return callback(err); } + installedPlugins = installedPlugins.filter(function(plugin) { + return plugin && !plugin.system; + }); + async.each(installedPlugins, function(plugin, next) { // If it errored out because a package.json or plugin.json couldn't be read, no need to do this stuff if (plugin.error) { From aab765195996a0a48ae2fb1bc0bdd048f9a38e16 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 13 Aug 2015 12:47:59 -0400 Subject: [PATCH 061/284] add default plugins --- src/install.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/install.js b/src/install.js index 48e42d5295..17fd45ef30 100644 --- a/src/install.js +++ b/src/install.js @@ -486,6 +486,15 @@ function enableDefaultPlugins(next) { 'nodebb-plugin-soundpack-default', 'nodebb-plugin-emoji-extended' ]; + + if (Array.isArray(nconf.get('defaultPlugins'))) { + defaultEnabled = defaultEnabled.concat(nconf.get('defaultPlugins')); + } + + defaultEnabled = defaultEnabled.filter(function(plugin, index, array) { + return array.indexOf(plugin) === -1; + }); + var db = require('./database'); var order = defaultEnabled.map(function(plugin, index) { return index; From d986fc7cb6fb7607376c46a5223bb87540d833a9 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 13 Aug 2015 12:49:15 -0400 Subject: [PATCH 062/284] fix indent --- src/install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.js b/src/install.js index 17fd45ef30..b1b9cadb78 100644 --- a/src/install.js +++ b/src/install.js @@ -495,7 +495,7 @@ function enableDefaultPlugins(next) { return array.indexOf(plugin) === -1; }); - var db = require('./database'); + var db = require('./database'); var order = defaultEnabled.map(function(plugin, index) { return index; }); From dfd840b001dd5bccaddcb112583bd9132f82a2cc Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 13 Aug 2015 14:23:09 -0400 Subject: [PATCH 063/284] Fix defaultPlugins logic to parse the incoming value --- src/install.js | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/install.js b/src/install.js index b1b9cadb78..fb100280c7 100644 --- a/src/install.js +++ b/src/install.js @@ -478,17 +478,24 @@ function enableDefaultPlugins(next) { process.stdout.write('Enabling default plugins\n'); var defaultEnabled = [ - 'nodebb-plugin-composer-default', - 'nodebb-plugin-markdown', - 'nodebb-plugin-mentions', - 'nodebb-widget-essentials', - 'nodebb-rewards-essentials', - 'nodebb-plugin-soundpack-default', - 'nodebb-plugin-emoji-extended' - ]; - - if (Array.isArray(nconf.get('defaultPlugins'))) { - defaultEnabled = defaultEnabled.concat(nconf.get('defaultPlugins')); + 'nodebb-plugin-composer-default', + 'nodebb-plugin-markdown', + 'nodebb-plugin-mentions', + 'nodebb-widget-essentials', + 'nodebb-rewards-essentials', + 'nodebb-plugin-soundpack-default', + 'nodebb-plugin-emoji-extended' + ], + customDefaults = nconf.get('defaultPlugins'); + + if (customDefaults && customDefaults.length) { + try { + customDefaults = JSON.parse(customDefaults); + defaultEnabled = defaultEnabled.concat(customDefaults); + } catch (e) { + // Invalid value received + winston.warn('[install/enableDefaultPlugins] Invalid defaultPlugins value received. Ignoring.'); + } } defaultEnabled = defaultEnabled.filter(function(plugin, index, array) { From 6e630b3cfd08b507da3d532779df09e517a9f5c3 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 13 Aug 2015 15:30:24 -0400 Subject: [PATCH 064/284] closes #3434, thanks to @psychobunny --- public/src/modules/translator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 8d37c1f004..1b09a14119 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -9,7 +9,7 @@ var languages = {}, regexes = { - match: /\[\[\w+:[\s\S]+?\]\]/g, + match: /\[\[\w+:[^\]]+?\]\]/g, split: /[,][\s]*/, replace: /\]+$/ }; From 8333a5dcd998a769d01c69ef8511221086eba924 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 13 Aug 2015 16:03:15 -0400 Subject: [PATCH 065/284] fix filter --- src/install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.js b/src/install.js index fb100280c7..caafcbfacc 100644 --- a/src/install.js +++ b/src/install.js @@ -499,7 +499,7 @@ function enableDefaultPlugins(next) { } defaultEnabled = defaultEnabled.filter(function(plugin, index, array) { - return array.indexOf(plugin) === -1; + return array.indexOf(plugin) === index; }); var db = require('./database'); From c3304b5cd8c381124a78818fc9b99231f391b1c8 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 14 Aug 2015 10:32:51 -0400 Subject: [PATCH 066/284] Update dependency minimum versions, and removed ^ for stability purposes --- package.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index f655cf9ec6..4f84892919 100644 --- a/package.json +++ b/package.json @@ -40,18 +40,18 @@ "mmmagic": "^0.3.13", "morgan": "^1.3.2", "nconf": "~0.7.1", - "nodebb-plugin-composer-default": "^1.0.7", - "nodebb-plugin-dbsearch": "^0.2.12", - "nodebb-plugin-emoji-extended": "^0.4.8", - "nodebb-plugin-markdown": "^4.0.0", + "nodebb-plugin-composer-default": "1.0.9", + "nodebb-plugin-dbsearch": "0.2.15", + "nodebb-plugin-emoji-extended": "0.4.9", + "nodebb-plugin-markdown": "4.0.2", "nodebb-plugin-mentions": "1.0.0", - "nodebb-plugin-soundpack-default": "^0.1.1", - "nodebb-plugin-spam-be-gone": "^0.4.0", - "nodebb-rewards-essentials": "^0.0.1", - "nodebb-theme-lavender": "^1.0.48", - "nodebb-theme-persona": "^2.0.1", - "nodebb-theme-vanilla": "^3.0.1", - "nodebb-widget-essentials": "^1.0.2", + "nodebb-plugin-soundpack-default": "0.1.2", + "nodebb-plugin-spam-be-gone": "0.4.1", + "nodebb-rewards-essentials": "0.0.2", + "nodebb-theme-lavender": "1.0.49", + "nodebb-theme-persona": "2.0.7", + "nodebb-theme-vanilla": "3.0.1", + "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", "passport-local": "1.0.0", From 5e3e1f878145c5749c35ee711166ef1fbd0a207c Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 14 Aug 2015 15:14:20 -0400 Subject: [PATCH 067/284] #3430 --- public/src/admin/admin.js | 5 ++--- public/src/ajaxify.js | 4 ++-- public/src/app.js | 2 +- public/src/modules/settings.js | 7 +------ public/src/modules/sounds.js | 8 ++++---- public/src/modules/translator.js | 4 +++- public/src/variables.js | 8 ++++---- 7 files changed, 17 insertions(+), 21 deletions(-) diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index bc6d81d747..22d5319708 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -74,7 +74,6 @@ }); Mousetrap.bind('ctrl+shift+a R', function() { - console.log('[admin] Restarting NodeBB...'); socket.emit('admin.restart'); }); @@ -196,9 +195,9 @@ if (checked) { checkbox.after(''); - } + } else { - checkbox.after(''); + checkbox.after(''); } checkbox.attr('data-toggle-added', true); diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 35c692c550..622bc0afde 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -253,8 +253,6 @@ $(document).ready(function() { }; function ajaxifyAnchors() { - templates.registerLoader(ajaxify.loadTemplate); - function hrefEmpty(href) { return href === undefined || href === '' || href === 'javascript:;'; } @@ -298,6 +296,8 @@ $(document).ready(function() { }); } + templates.registerLoader(ajaxify.loadTemplate); + if (window.history && window.history.pushState) { // Progressive Enhancement, ajaxify available only to modern browsers ajaxifyAnchors(); diff --git a/public/src/app.js b/public/src/app.js index 63e6e2399e..858200e02d 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -92,7 +92,7 @@ app.cacheBuster = null; switch(url_parts[0]) { case 'user': - room = 'user/' + ajaxify.data.theirid; + room = 'user/' + ajaxify.data ? ajaxify.data.theirid : 0; break; case 'topic': room = 'topic_' + url_parts[1]; diff --git a/public/src/modules/settings.js b/public/src/modules/settings.js index d541b35e84..0092f4ca46 100644 --- a/public/src/modules/settings.js +++ b/public/src/modules/settings.js @@ -294,7 +294,6 @@ define('settings', function () { message: "NodeBB failed to save the settings.", timeout: 5000 }); - console.log('[settings] Unable to set settings for hash: ', hash); } else { app.alert({ title: 'Settings Saved', @@ -387,7 +386,6 @@ define('settings', function () { hash: hash }, function (err, values) { if (err) { - console.log('[settings] Unable to load settings for hash: ', hash); if (typeof callback === 'function') { callback(err); } @@ -455,10 +453,9 @@ define('settings', function () { hash: hash }, function (err, values) { if (err) { - console.log('[settings] Unable to load settings for hash: ', hash); return callback(err); } - + // Parse all values. If they are json, return json for(var key in values) { if (values.hasOwnProperty(key)) { @@ -508,8 +505,6 @@ define('settings', function () { }); } }); - } else { - console.log('[settings] Form not found.'); } } }; diff --git a/public/src/modules/sounds.js b/public/src/modules/sounds.js index fa0eade2b5..3314500ce5 100644 --- a/public/src/modules/sounds.js +++ b/public/src/modules/sounds.js @@ -1,5 +1,5 @@ "use strict"; -/* global define, socket, config */ +/* global app, define, socket, config */ define('sounds', ['buzz'], function(buzz) { var Sounds = {}; @@ -17,7 +17,7 @@ define('sounds', ['buzz'], function(buzz) { function loadFiles() { socket.emit('modules.sounds.getSounds', function(err, sounds) { if (err) { - return console.log('[sounds] Could not initialise!'); + return app.alertError('[sounds] Could not initialise!'); } files = sounds; @@ -27,7 +27,7 @@ define('sounds', ['buzz'], function(buzz) { function loadMapping() { socket.emit('modules.sounds.getMapping', function(err, mapping) { if (err) { - return console.log('[sounds] Could not load sound mapping!'); + return app.alertError('[sounds] Could not load sound mapping!'); } eventSoundMapping = mapping; }); @@ -65,7 +65,7 @@ define('sounds', ['buzz'], function(buzz) { if (loadedSounds[fileName]) { loadedSounds[fileName].play(); } else { - console.log('[sounds] Not found:', fileName); + app.alertError('[sounds] Not found: ' + fileName); } } diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 1b09a14119..46bb79e812 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -302,7 +302,9 @@ // Expose a global `translator` object for backwards compatibility window.translator = { translate: function() { - console.warn('[translator] Global invocation of the translator is now deprecated, please `require` the module instead.'); + if (typeof console !== 'undefined' && console.warn) { + console.warn('[translator] Global invocation of the translator is now deprecated, please `require` the module instead.'); + } _translator.translate.apply(_translator, arguments); } } diff --git a/public/src/variables.js b/public/src/variables.js index 16ad223073..c11b2d8c0d 100644 --- a/public/src/variables.js +++ b/public/src/variables.js @@ -7,14 +7,14 @@ ajaxify.variables = {}; ajaxify.variables.set = function(key, value) { - if (console && console.warn) { - console.warn('[deprecated] variables.set is deprecated, please use ajaxify.data, key=' + key); - } + if (typeof console !== 'undefined' && console.warn) { + console.warn('[deprecated] variables.set is deprecated, please use ajaxify.data, key=' + key); + } parsedVariables[key] = value; }; ajaxify.variables.get = function(key) { - if (console && console.warn) { + if (typeof console !== 'undefined' && console.warn) { console.warn('[deprecated] variables.get is deprecated, please use ajaxify.data, key=' + key); } return parsedVariables[key]; From c70267bd239f426428771833a6fe8fe9bd392b3a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 14 Aug 2015 15:15:46 -0400 Subject: [PATCH 068/284] fix indent --- public/src/variables.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/variables.js b/public/src/variables.js index c11b2d8c0d..1a4b4e244c 100644 --- a/public/src/variables.js +++ b/public/src/variables.js @@ -8,8 +8,8 @@ ajaxify.variables.set = function(key, value) { if (typeof console !== 'undefined' && console.warn) { - console.warn('[deprecated] variables.set is deprecated, please use ajaxify.data, key=' + key); - } + console.warn('[deprecated] variables.set is deprecated, please use ajaxify.data, key=' + key); + } parsedVariables[key] = value; }; From 08fb30378a2f19a336b640e03ce54469f2113e93 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 17 Aug 2015 11:31:31 -0400 Subject: [PATCH 069/284] Closes #3302 - Fixes issue where the served path for the favicon was incorrect (included relative path when one was not needed) - Also fixes issue where favicons were just plain not served for subfolder installations - Fixed unsemantic HTML in ACP/General regarding Site Logo and Favicon fieldsets --- src/controllers/admin/uploads.js | 2 +- src/middleware/index.js | 2 +- src/views/admin/settings/general.tpl | 37 ++++++++++++++++++---------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/controllers/admin/uploads.js b/src/controllers/admin/uploads.js index 88509df0a0..8cdf5f81f3 100644 --- a/src/controllers/admin/uploads.js +++ b/src/controllers/admin/uploads.js @@ -38,7 +38,7 @@ uploadsController.uploadFavicon = function(req, res, next) { return next(err); } - res.json([{name: uploadedFile.name, url: nconf.get('relative_path') + image.url}]); + res.json([{name: uploadedFile.name, url: image.url}]); }); } }; diff --git a/src/middleware/index.js b/src/middleware/index.js index c7358ca5ac..51f7b10d05 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -22,7 +22,7 @@ var middleware = {}; function setupFavicon(app) { var faviconPath = path.join(__dirname, '../../', 'public', meta.config['brand:favicon'] ? meta.config['brand:favicon'] : 'favicon.ico'); if (fs.existsSync(faviconPath)) { - app.use(favicon(faviconPath)); + app.use(nconf.get('relative_path'), favicon(faviconPath)); } } diff --git a/src/views/admin/settings/general.tpl b/src/views/admin/settings/general.tpl index ae63b28cbf..9b3c0e73f2 100644 --- a/src/views/admin/settings/general.tpl +++ b/src/views/admin/settings/general.tpl @@ -31,25 +31,36 @@
Site Logo
-
- -
- -

- -
-
+
+ +
+ + + + +
+
+
+ + +

+ When the logo is clicked, send users to this address. If left blank, user will be sent to the forum index. +

+
Favicon
-
-
-
- -
+
+
+ + + + +
+
From 842815e5e9e2a51f80f6ced98b4b1dd840df8937 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 11:47:13 -0400 Subject: [PATCH 070/284] closes #3445 --- src/middleware/middleware.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index f11575b4d4..7aa8d762b7 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -291,6 +291,7 @@ middleware.renderHeader = function(req, res, callback) { templateValues.customCSS = results.customCSS; templateValues.customJS = results.customJS; templateValues.maintenanceHeader = parseInt(meta.config.maintenanceMode, 10) === 1 && !results.isAdmin; + templateValues.defaultLang = res.locals.config.defaultLang; templateValues.template = {name: res.locals.template}; templateValues.template[res.locals.template] = true; From 4a4644665de138e9cb8cc32ec5605d7c88dd1cb2 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 11:48:58 -0400 Subject: [PATCH 071/284] upping theme versions #3445 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4f84892919..ec50021f80 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.2", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.7", - "nodebb-theme-vanilla": "3.0.1", + "nodebb-theme-persona": "2.0.8", + "nodebb-theme-vanilla": "3.0.2", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", From b3639f3c71613bc277260f9d88630f7c553c6947 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 12:16:12 -0400 Subject: [PATCH 072/284] closes #3429 --- src/middleware/middleware.js | 1 + src/views/admin/settings/general.tpl | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 7aa8d762b7..930431f3c2 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -211,6 +211,7 @@ middleware.renderHeader = function(req, res, callback) { 'cache-buster': meta.config['cache-buster'] ? 'v=' + meta.config['cache-buster'] : '', 'brand:logo': meta.config['brand:logo'] || '', 'brand:logo:url': meta.config['brand:logo:url'] || '', + 'brand:logo:alt': meta.config['brand:logo:alt'] || '', 'brand:logo:display': meta.config['brand:logo']?'':'hide', allowRegistration: registrationType === 'normal' || registrationType === 'admin-approval', searchEnabled: plugins.hasListeners('filter:search.query') diff --git a/src/views/admin/settings/general.tpl b/src/views/admin/settings/general.tpl index 9b3c0e73f2..05f2237f78 100644 --- a/src/views/admin/settings/general.tpl +++ b/src/views/admin/settings/general.tpl @@ -47,6 +47,10 @@ When the logo is clicked, send users to this address. If left blank, user will be sent to the forum index.

+
+ + +
From fb34df627bca6ba628d4838041c13a3ab3e8af42 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 12:19:02 -0400 Subject: [PATCH 073/284] upping themes #3429 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ec50021f80..06f5c8cff0 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.2", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.8", - "nodebb-theme-vanilla": "3.0.2", + "nodebb-theme-persona": "2.0.9", + "nodebb-theme-vanilla": "3.0.3", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", From 2da3761c599877485dbf0dca9801207f9b472dd0 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 12:23:31 -0400 Subject: [PATCH 074/284] closes #3446 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 06f5c8cff0..0971f51208 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.2", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.9", - "nodebb-theme-vanilla": "3.0.3", + "nodebb-theme-persona": "2.0.10", + "nodebb-theme-vanilla": "3.0.4", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", From 5299e1fdc65a486b2c2304a1bd1590acd87bd3bf Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 12:28:16 -0400 Subject: [PATCH 075/284] closes #3322 --- public/src/app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/app.js b/public/src/app.js index 858200e02d..48bb938610 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -241,7 +241,9 @@ app.cacheBuster = null; app.processPage = function () { highlightNavigationLink(); - $('.timeago').timeago(); + $('.timeago').timeago().each(function() { + $(this).attr('title', (new Date($(this).attr('title'))).toString()); + }); utils.makeNumbersHumanReadable($('.human-readable-number')); From f9b104192b943c882330afd0a99163baf702e610 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 12:29:36 -0400 Subject: [PATCH 076/284] fixing deprecated global translator call --- public/src/app.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 48bb938610..606277f467 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -469,11 +469,13 @@ app.cacheBuster = null; return; } - translator.translate('[[global:' + status + ']]', function(translated) { - el.removeClass('online offline dnd away') - .addClass(status) - .attr('title', translated) - .attr('data-original-title', translated); + require(['translator'], function(translator) { + translator.translate('[[global:' + status + ']]', function(translated) { + el.removeClass('online offline dnd away') + .addClass(status) + .attr('title', translated) + .attr('data-original-title', translated); + }); }); }; From 64ab43b7fc34e7eb527916fc3579617294f311ba Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 17 Aug 2015 12:08:13 -0400 Subject: [PATCH 077/284] fixed language name for Greek --- public/language/el/language.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/language/el/language.json b/public/language/el/language.json index 9e32448715..5ed4fbe754 100644 --- a/public/language/el/language.json +++ b/public/language/el/language.json @@ -1,5 +1,5 @@ { - "name": "Ελληνικά (Ελλάδα/Κύπρος)", + "name": "Greek", "code": "el", "dir": "ltr" -} \ No newline at end of file +} From 3d9415b65eda1ce3616baf93620aeedff32cc81b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 17 Aug 2015 12:38:28 -0400 Subject: [PATCH 078/284] Fixes #3442 --- public/src/modules/translator.js | 125 +++++----- .../vendor/jquery/timeago/jquery.timeago.js | 221 ++++++++++++++++++ .../jquery/timeago/jquery.timeago.min.js | 16 -- .../timeago/locales/jquery.timeago.et.js | 22 +- .../timeago/locales/jquery.timeago.fa.js | 2 +- .../timeago/locales/jquery.timeago.he.js | 14 +- .../timeago/locales/jquery.timeago.ko.js | 21 +- .../timeago/locales/jquery.timeago.mk.js | 2 +- .../timeago/locales/jquery.timeago.nl.js | 4 +- .../timeago/locales/jquery.timeago.ro.js | 4 +- .../timeago/locales/jquery.timeago.rs.js | 2 +- .../timeago/locales/jquery.timeago.sl.js | 32 ++- .../timeago/locales/jquery.timeago.tr.js | 4 +- .../timeago/locales/jquery.timeago.uz.js | 10 +- .../timeago/locales/jquery.timeago.zh-CN.js | 24 +- .../timeago/locales/jquery.timeago.zh-TW.js | 22 +- src/meta/js.js | 2 +- 17 files changed, 360 insertions(+), 167 deletions(-) create mode 100644 public/vendor/jquery/timeago/jquery.timeago.js delete mode 100644 public/vendor/jquery/timeago/jquery.timeago.min.js diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 46bb79e812..90784747c9 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -44,81 +44,72 @@ }; translator.prepareDOM = function() { - // Load the appropriate timeago locale file - if (config.userLang !== 'en_GB' && config.userLang !== 'en_US') { - // Correct NodeBB language codes to timeago codes, if necessary - var languageCode; - switch(config.userLang) { - case 'cs': - languageCode = 'cz'; - break; - - case 'fa_IR': - languageCode = 'fa'; - break; - - case 'pt_BR': - languageCode = 'pt-br'; - break; - - case 'nb': - languageCode = 'no'; - break; - - case 'zh_TW': - languageCode = 'zh-TW'; - break; - - case 'zh_CN': - languageCode = 'zh-CN'; - break; - - default: - languageCode = config.userLang; - break; - } + // Load the appropriate timeago locale file, and correct NodeBB language codes to timeago codes, if necessary + var languageCode; + switch(config.userLang) { + case 'cs': + languageCode = 'cz'; + break; + + case 'fa_IR': + languageCode = 'fa'; + break; + + case 'pt_BR': + languageCode = 'pt-br'; + break; + + case 'nb': + languageCode = 'no'; + break; + + case 'zh_TW': + languageCode = 'zh-TW'; + break; + + case 'zh_CN': + languageCode = 'zh-CN'; + break; + + default: + languageCode = config.userLang; + break; + } + + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { + $('.timeago').timeago(); + translator.timeagoShort = $.extend({}, jQuery.timeago.settings.strings); - $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { - $('.timeago').timeago(); + // Retrieve the shorthand timeago values as well + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '-short.js').success(function() { + // Switch back to long-form + translator.toggleTimeagoShorthand(); }).fail(function() { + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en-short.js').success(function() { + // Switch back to long-form + translator.toggleTimeagoShorthand(); + }); + }); + }).fail(function() { + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en-short.js').success(function() { + // Switch back to long-form + translator.toggleTimeagoShorthand(); $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en.js'); }); + }); - // Add directional code if necessary - translator.translate('[[language:dir]]', function(value) { - if (value) { - $('html').css('direction', value).attr('data-dir', value); - } - }); - } + // Add directional code if necessary + translator.translate('[[language:dir]]', function(value) { + if (value) { + $('html').css('direction', value).attr('data-dir', value); + } + }); }; translator.toggleTimeagoShorthand = function() { - if (!translator.timeagoStrings) { - translator.timeagoStrings = $.extend({}, jQuery.timeago.settings.strings); - jQuery.timeago.settings.strings = { - prefixAgo: null, - prefixFromNow: null, - suffixAgo: "", - suffixFromNow: "", - seconds: "1m", - minute: "1m", - minutes: "%dm", - hour: "1h", - hours: "%dh", - day: "1d", - days: "%dd", - month: "1mo", - months: "%dmo", - year: "1yr", - years: "%dyr", - wordSeparator: " ", - numbers: [] - }; - } else { - jQuery.timeago.settings.strings = $.extend({}, translator.timeagoStrings); - delete translator.timeagoStrings; - } + var tmp = $.extend({}, jQuery.timeago.settings.strings); + jQuery.timeago.settings.strings = $.extend({}, translator.timeagoShort); + translator.timeagoShort = $.extend({}, tmp); }; translator.translate = function (text, language, callback) { diff --git a/public/vendor/jquery/timeago/jquery.timeago.js b/public/vendor/jquery/timeago/jquery.timeago.js new file mode 100644 index 0000000000..15805a6193 --- /dev/null +++ b/public/vendor/jquery/timeago/jquery.timeago.js @@ -0,0 +1,221 @@ +/** + * Timeago is a jQuery plugin that makes it easy to support automatically + * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). + * + * @name timeago + * @version 1.4.1 + * @requires jQuery v1.2.3+ + * @author Ryan McGeary + * @license MIT License - http://www.opensource.org/licenses/mit-license.php + * + * For usage and examples, visit: + * http://timeago.yarp.com/ + * + * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) + */ + +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + $.timeago = function(timestamp) { + if (timestamp instanceof Date) { + return inWords(timestamp); + } else if (typeof timestamp === "string") { + return inWords($.timeago.parse(timestamp)); + } else if (typeof timestamp === "number") { + return inWords(new Date(timestamp)); + } else { + return inWords($.timeago.datetime(timestamp)); + } + }; + var $t = $.timeago; + + $.extend($.timeago, { + settings: { + refreshMillis: 60000, + allowPast: true, + allowFuture: false, + localeTitle: false, + cutoff: 0, + strings: { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "ago", + suffixFromNow: "from now", + inPast: 'any moment now', + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years", + wordSeparator: " ", + numbers: [] + } + }, + + inWords: function(distanceMillis) { + if(!this.settings.allowPast && ! this.settings.allowFuture) { + throw 'timeago allowPast and allowFuture settings can not both be set to false.'; + } + + var $l = this.settings.strings; + var prefix = $l.prefixAgo; + var suffix = $l.suffixAgo; + if (this.settings.allowFuture) { + if (distanceMillis < 0) { + prefix = $l.prefixFromNow; + suffix = $l.suffixFromNow; + } + } + + if(!this.settings.allowPast && distanceMillis >= 0) { + return this.settings.strings.inPast; + } + + var seconds = Math.abs(distanceMillis) / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + function substitute(stringOrFunction, number) { + var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; + var value = ($l.numbers && $l.numbers[number]) || number; + return string.replace(/%d/i, value); + } + + var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || + seconds < 90 && substitute($l.minute, 1) || + minutes < 45 && substitute($l.minutes, Math.round(minutes)) || + minutes < 90 && substitute($l.hour, 1) || + hours < 24 && substitute($l.hours, Math.round(hours)) || + hours < 42 && substitute($l.day, 1) || + days < 30 && substitute($l.days, Math.round(days)) || + days < 45 && substitute($l.month, 1) || + days < 365 && substitute($l.months, Math.round(days / 30)) || + years < 1.5 && substitute($l.year, 1) || + substitute($l.years, Math.round(years)); + + var separator = $l.wordSeparator || ""; + if ($l.wordSeparator === undefined) { separator = " "; } + return $.trim([prefix, words, suffix].join(separator)); + }, + + parse: function(iso8601) { + var s = $.trim(iso8601); + s = s.replace(/\.\d+/,""); // remove milliseconds + s = s.replace(/-/,"/").replace(/-/,"/"); + s = s.replace(/T/," ").replace(/Z/," UTC"); + s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 + s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900 + return new Date(s); + }, + datetime: function(elem) { + var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); + return $t.parse(iso8601); + }, + isTime: function(elem) { + // jQuery's `is()` doesn't play well with HTML5 in IE + return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); + } + }); + + // functions that can be called via $(el).timeago('action') + // init is default when no action is given + // functions are called with context of a single element + var functions = { + init: function(){ + var refresh_el = $.proxy(refresh, this); + refresh_el(); + var $s = $t.settings; + if ($s.refreshMillis > 0) { + this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis); + } + }, + update: function(time){ + var parsedTime = $t.parse(time); + $(this).data('timeago', { datetime: parsedTime }); + if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString()); + refresh.apply(this); + }, + updateFromDOM: function(){ + $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) }); + refresh.apply(this); + }, + dispose: function () { + if (this._timeagoInterval) { + window.clearInterval(this._timeagoInterval); + this._timeagoInterval = null; + } + } + }; + + $.fn.timeago = function(action, options) { + var fn = action ? functions[action] : functions.init; + if(!fn){ + throw new Error("Unknown function name '"+ action +"' for timeago"); + } + // each over objects here and call the requested function + this.each(function(){ + fn.call(this, options); + }); + return this; + }; + + function refresh() { + //check if it's still visible + if(!$.contains(document.documentElement,this)){ + //stop if it has been removed + $(this).timeago("dispose"); + return this; + } + + var data = prepareData(this); + var $s = $t.settings; + + if (!isNaN(data.datetime)) { + if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) { + $(this).text(inWords(data.datetime)); + } + } + return this; + } + + function prepareData(element) { + element = $(element); + if (!element.data("timeago")) { + element.data("timeago", { datetime: $t.datetime(element) }); + var text = $.trim(element.text()); + if ($t.settings.localeTitle) { + element.attr("title", element.data('timeago').datetime.toLocaleString()); + } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { + element.attr("title", text); + } + } + return element.data("timeago"); + } + + function inWords(date) { + return $t.inWords(distance(date)); + } + + function distance(date) { + return (new Date().getTime() - date.getTime()); + } + + // fix for IE6 suckage + document.createElement("abbr"); + document.createElement("time"); +})); diff --git a/public/vendor/jquery/timeago/jquery.timeago.min.js b/public/vendor/jquery/timeago/jquery.timeago.min.js deleted file mode 100644 index a3567b0148..0000000000 --- a/public/vendor/jquery/timeago/jquery.timeago.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Timeago is a jQuery plugin that makes it easy to support automatically - * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). - * - * @name timeago - * @version 1.3.1 - * @requires jQuery v1.2.3+ - * @author Ryan McGeary - * @license MIT License - http://www.opensource.org/licenses/mit-license.php - * - * For usage and examples, visit: - * http://timeago.yarp.com/ - * - * Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) - */ -!function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(jQuery)}}(function($){$.timeago=function(timestamp){if(timestamp instanceof Date){return inWords(timestamp)}else if(typeof timestamp==="string"){return inWords($.timeago.parse(timestamp))}else if(typeof timestamp==="number"){return inWords(new Date(timestamp))}else{return inWords($.timeago.datetime(timestamp))}};var $t=$.timeago;$.extend($.timeago,{settings:{refreshMillis:6e4,allowFuture:false,localeTitle:false,cutoff:0,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",wordSeparator:" ",numbers:[]}},inWords:function(distanceMillis){var $l=this.settings.strings;var prefix=$l.prefixAgo;var suffix=$l.suffixAgo;if(this.settings.allowFuture){if(distanceMillis<0){prefix=$l.prefixFromNow;suffix=$l.suffixFromNow}}var seconds=Math.abs(distanceMillis)/1e3;var minutes=seconds/60;var hours=minutes/60;var days=hours/24;var years=days/365;function substitute(stringOrFunction,number){var string=$.isFunction(stringOrFunction)?stringOrFunction(number,distanceMillis):stringOrFunction;var value=$l.numbers&&$l.numbers[number]||number;return string.replace(/%d/i,value)}var words=seconds<45&&substitute($l.seconds,Math.round(seconds))||seconds<90&&substitute($l.minute,1)||minutes<45&&substitute($l.minutes,Math.round(minutes))||minutes<90&&substitute($l.hour,1)||hours<24&&substitute($l.hours,Math.round(hours))||hours<42&&substitute($l.day,1)||days<30&&substitute($l.days,Math.round(days))||days<45&&substitute($l.month,1)||days<365&&substitute($l.months,Math.round(days/30))||years<1.5&&substitute($l.year,1)||substitute($l.years,Math.round(years));var separator=$l.wordSeparator||"";if($l.wordSeparator===undefined){separator=" "}return $.trim([prefix,words,suffix].join(separator))},parse:function(iso8601){var s=$.trim(iso8601);s=s.replace(/\.\d+/,"");s=s.replace(/-/,"/").replace(/-/,"/");s=s.replace(/T/," ").replace(/Z/," UTC");s=s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2");s=s.replace(/([\+\-]\d\d)$/," $100");return new Date(s)},datetime:function(elem){var iso8601=$t.isTime(elem)?$(elem).attr("datetime"):$(elem).attr("title");return $t.parse(iso8601)},isTime:function(elem){return $(elem).get(0).tagName.toLowerCase()==="time"}});var functions={init:function(){var refresh_el=$.proxy(refresh,this);refresh_el();var $s=$t.settings;if($s.refreshMillis>0){this._timeagoInterval=setInterval(refresh_el,$s.refreshMillis)}},update:function(time){var parsedTime=$t.parse(time);$(this).data("timeago",{datetime:parsedTime});if($t.settings.localeTitle)$(this).attr("title",parsedTime.toLocaleString());refresh.apply(this)},updateFromDOM:function(){$(this).data("timeago",{datetime:$t.parse($t.isTime(this)?$(this).attr("datetime"):$(this).attr("title"))});refresh.apply(this)},dispose:function(){if(this._timeagoInterval){window.clearInterval(this._timeagoInterval);this._timeagoInterval=null}}};$.fn.timeago=function(action,options){var fn=action?functions[action]:functions.init;if(!fn){throw new Error("Unknown function name '"+action+"' for timeago")}this.each(function(){fn.call(this,options)});return this};function refresh(){var data=prepareData(this);var $s=$t.settings;if(!isNaN(data.datetime)){if($s.cutoff==0||distance(data.datetime)<$s.cutoff){$(this).text(inWords(data.datetime))}}return this}function prepareData(element){element=$(element);if(!element.data("timeago")){element.data("timeago",{datetime:$t.datetime(element)});var text=$.trim(element.text());if($t.settings.localeTitle){element.attr("title",element.data("timeago").datetime.toLocaleString())}else if(text.length>0&&!($t.isTime(element)&&element.attr("title"))){element.attr("title",text)}}return element.data("timeago")}function inWords(date){return $t.inWords(distance(date))}function distance(date){return(new Date).getTime()-date.getTime()}document.createElement("abbr");document.createElement("time")}); \ No newline at end of file diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.et.js b/public/vendor/jquery/timeago/locales/jquery.timeago.et.js index 7d17eb5c61..ca19648b40 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.et.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.et.js @@ -4,15 +4,15 @@ jQuery.timeago.settings.strings = { prefixFromNow: null, suffixAgo: "tagasi", suffixFromNow: "pärast", - seconds: function(n, d) { return d < 0 ? "vähem kui minuti aja" : "vähem kui minut aega" }, - minute: function(n, d) { return d < 0 ? "umbes minuti aja" : "umbes minut aega" }, - minutes: function(n, d) { return d < 0 ? "%d minuti" : "%d minutit" }, - hour: function(n, d) { return d < 0 ? "umbes tunni aja" : "umbes tund aega" }, - hours: function(n, d) { return d < 0 ? "%d tunni" : "%d tundi" }, - day: function(n, d) { return d < 0 ? "umbes päeva" : "umbes päev" }, - days: function(n, d) { return d < 0 ? "%d päeva" : "%d päeva" }, - month: function(n, d) { return d < 0 ? "umbes kuu aja" : "umbes kuu aega" }, - months: function(n, d) { return d < 0 ? "%d kuu" : "%d kuud" }, - year: function(n, d) { return d < 0 ? "umbes aasta aja" : "umbes aasta aega" }, - years: function(n, d) { return d < 0 ? "%d aasta" : "%d aastat" } + seconds: function(n, d) { return d < 0 ? "vähem kui minuti aja" : "vähem kui minut aega"; }, + minute: function(n, d) { return d < 0 ? "umbes minuti aja" : "umbes minut aega"; }, + minutes: function(n, d) { return d < 0 ? "%d minuti" : "%d minutit"; }, + hour: function(n, d) { return d < 0 ? "umbes tunni aja" : "umbes tund aega"; }, + hours: function(n, d) { return d < 0 ? "%d tunni" : "%d tundi"; }, + day: function(n, d) { return d < 0 ? "umbes päeva" : "umbes päev"; }, + days: function(n, d) { return d < 0 ? "%d päeva" : "%d päeva"; }, + month: function(n, d) { return d < 0 ? "umbes kuu aja" : "umbes kuu aega"; }, + months: function(n, d) { return d < 0 ? "%d kuu" : "%d kuud"; }, + year: function(n, d) { return d < 0 ? "umbes aasta aja" : "umbes aasta aega"; }, + years: function(n, d) { return d < 0 ? "%d aasta" : "%d aastat"; } }; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js b/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js index 2bfbf53ccd..36bdb449f3 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js @@ -1,4 +1,4 @@ - + // Persian // Use DIR attribute for RTL text in Persian Language for ABBR tag . // By MB.seifollahi@gmail.com diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.he.js b/public/vendor/jquery/timeago/locales/jquery.timeago.he.js index 9d5b6c6b00..b9d89e1f24 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.he.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.he.js @@ -1,18 +1,16 @@ // Hebrew jQuery.timeago.settings.strings = { prefixAgo: "לפני", - prefixFromNow: "מעכשיו", - suffixAgo: "", - suffixFromNow: "", + prefixFromNow: "עוד", seconds: "פחות מדקה", minute: "דקה", minutes: "%d דקות", hour: "שעה", - hours: "%d שעות", + hours: function(number){return (number==2) ? "שעתיים" : "%d שעות";}, day: "יום", - days: "%d ימים", + days: function(number){return (number==2) ? "יומיים" : "%d ימים";}, month: "חודש", - months: "%d חודשים", + months: function(number){return (number==2) ? "חודשיים" : "%d חודשים";}, year: "שנה", - years: "%d שנים" -}; \ No newline at end of file + years: function(number){return (number==2) ? "שנתיים" : "%d שנים";} +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js b/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js index a192b97bf6..95f4f94b31 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js @@ -1,17 +1,20 @@ // Korean jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, suffixAgo: "전", suffixFromNow: "후", - seconds: "1분 이내", - minute: "1분", + seconds: "1분", + minute: "약 1분", minutes: "%d분", - hour: "1시간", - hours: "%d시간", + hour: "약 1시간", + hours: "약 %d시간", day: "하루", days: "%d일", - month: "한 달", - months: "%d달", - year: "1년", + month: "약 1개월", + months: "%d개월", + year: "약 1년", years: "%d년", - wordSeparator: " " -}; \ No newline at end of file + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js b/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js index 9afdd46268..8d60a30c88 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js @@ -16,5 +16,5 @@ months: "%d месеци", year: "%d година", years: "%d години" - } + }; })(); diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js b/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js index cd68438cca..74d3dc867f 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js @@ -1,9 +1,9 @@ // Dutch jQuery.timeago.settings.strings = { prefixAgo: null, - prefixFromNow: "", + prefixFromNow: "over", suffixAgo: "geleden", - suffixFromNow: "van nu", + suffixFromNow: null, seconds: "minder dan een minuut", minute: "ongeveer een minuut", minutes: "%d minuten", diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js b/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js index 883b548950..2cee429902 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js @@ -1,5 +1,5 @@ // Romanian -$.timeago.settings.strings = { +jQuery.timeago.settings.strings = { prefixAgo: "acum", prefixFromNow: "in timp de", suffixAgo: "", @@ -15,4 +15,4 @@ $.timeago.settings.strings = { months: "%d luni", year: "un an", years: "%d ani" -}; \ No newline at end of file +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js b/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js index 1fc16135e6..0809c9101d 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js @@ -39,7 +39,7 @@ months: function (value) { return numpf(value, "%d mesec", "%d meseca", "%d meseci"); }, - year: "pre godinu dana", + year: "godinu dana", years: function (value) { return numpf(value, "%d godinu", "%d godine", "%d godina"); }, diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js b/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js index e546c0d502..57d4f6020c 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js @@ -1,42 +1,38 @@ // Slovenian with support for dual (function () { var numpf; - numpf = function (n, d, m) { - if (n == 2) { - return d; - } else { - return m; - } + numpf = function (n, a) { + return a[n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0]; }; jQuery.timeago.settings.strings = { - prefixAgo: "pred", + prefixAgo: null, prefixFromNow: "čez", - suffixAgo: null, + suffixAgo: "nazaj", suffixFromNow: null, second: "sekundo", seconds: function (value) { - return numpf(value, "%d sekundama", "%d sekundami"); + return numpf(value, ["%d sekund", "%d sekundo", "%d sekundi", "%d sekunde"]); }, minute: "minuto", minutes: function (value) { - return numpf(value, "%d minutama", "%d minutami"); + return numpf(value, ["%d minut", "%d minuto", "%d minuti", "%d minute"]); }, - hour: "uro", + hour: "eno uro", hours: function (value) { - return numpf(value, "%d urama", "%d urami"); + return numpf(value, ["%d ur", "%d uro", "%d uri", "%d ure"]); }, - day: "dnevom", + day: "en dan", days: function (value) { - return numpf(value, "%d dnevi", "%d dnevi"); + return numpf(value, ["%d dni", "%d dan", "%d dneva", "%d dni"]); }, - month: "enim mescem", + month: "en mesec", months: function (value) { - return numpf(value, "%d mesecema", "%d meseci"); + return numpf(value, ["%d mescov", "%d mesec", "%d mesca", "%d mesce"]); }, - year: "enim letom", + year: "eno leto", years: function (value) { - return numpf(value, "%d letoma", "%d leti"); + return numpf(value, ["%d let", "%d leto", "%d leti", "%d leta"]); }, wordSeparator: " " }; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js b/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js index f3e3a67c84..160190d026 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js @@ -1,5 +1,5 @@ // Turkish -jQuery.extend($.timeago.settings.strings, { +jQuery.timeago.settings.strings = { suffixAgo: 'önce', suffixFromNow: null, seconds: '1 dakikadan', @@ -13,4 +13,4 @@ jQuery.extend($.timeago.settings.strings, { months: '%d ay', year: '1 yıl', years: '%d yıl' -}); \ No newline at end of file +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js b/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js index 380f18dc04..d6a0a7fd20 100755 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js @@ -6,14 +6,14 @@ jQuery.timeago.settings.strings = { suffixFromNow: null, seconds: "bir necha soniya", minute: "1 daqiqa", - minutes: function(value) { return "%d daqiqa" }, + minutes: function(value) { return "%d daqiqa"; }, hour: "1 soat", - hours: function(value) { return "%d soat" }, + hours: function(value) { return "%d soat"; }, day: "1 kun", - days: function(value) { return "%d kun" }, + days: function(value) { return "%d kun"; }, month: "1 oy", - months: function(value) { return "%d oy" }, + months: function(value) { return "%d oy"; }, year: "1 yil", - years: function(value) { return "%d yil" }, + years: function(value) { return "%d yil"; }, wordSeparator: " " }; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js index f39417ef29..f7b979798a 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js @@ -4,17 +4,17 @@ jQuery.timeago.settings.strings = { prefixFromNow: "从现在开始", suffixAgo: "之前", suffixFromNow: null, - seconds: "不到 1 分钟", - minute: "大约 1 分钟", - minutes: "%d 分钟", - hour: "大约 1 小时", - hours: "大约 %d 小时", - day: "1 天", - days: "%d 天", - month: "大约 1 个月", - months: "%d 月", - year: "大约 1 年", - years: "%d 年", + seconds: "不到1分钟", + minute: "大约1分钟", + minutes: "%d分钟", + hour: "大约1小时", + hours: "大约%d小时", + day: "1天", + days: "%d天", + month: "大约1个月", + months: "%d月", + year: "大约1年", + years: "%d年", numbers: [], wordSeparator: "" -}; \ No newline at end of file +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js index c6f8a1b1e6..52633900f3 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js @@ -4,17 +4,17 @@ jQuery.timeago.settings.strings = { prefixFromNow: "從現在開始", suffixAgo: "之前", suffixFromNow: null, - seconds: "不到 1 分鐘", - minute: "大約 1 分鐘", - minutes: "%d 分鐘", - hour: "大約 1 小時", - hours: "%d 小時", - day: "大約 1 天", - days: "%d 天", - month: "大約 1 個月", - months: "%d 個月", - year: "大約 1 年", - years: "%d 年", + seconds: "不到1分鐘", + minute: "大約1分鐘", + minutes: "%d分鐘", + hour: "大約1小時", + hours: "%d小時", + day: "大約1天", + days: "%d天", + month: "大約1個月", + months: "%d個月", + year: "大約1年", + years: "%d年", numbers: [], wordSeparator: "" }; diff --git a/src/meta/js.js b/src/meta/js.js index 020611e7ce..a022497136 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -23,7 +23,7 @@ module.exports = function(Meta) { base: [ 'public/vendor/jquery/js/jquery.js', './node_modules/socket.io-client/socket.io.js', - 'public/vendor/jquery/timeago/jquery.timeago.min.js', + 'public/vendor/jquery/timeago/jquery.timeago.js', 'public/vendor/jquery/js/jquery.form.min.js', 'public/vendor/visibility/visibility.min.js', 'public/vendor/bootstrap/js/bootstrap.min.js', From 6db33f5641f3f305984e1508f0bba3dbeb201d54 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 12:51:54 -0400 Subject: [PATCH 079/284] unused vars --- minifier.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/minifier.js b/minifier.js index bca79e68f1..3ca6155ee3 100644 --- a/minifier.js +++ b/minifier.js @@ -4,9 +4,7 @@ var uglifyjs = require('uglify-js'), less = require('less'), async = require('async'), fs = require('fs'), - path = require('path'), crypto = require('crypto'), - utils = require('./public/src/utils'), Minifier = { js: {} From f4dd0c14aeebd70cf33f55c663ded67bad5383ac Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 17 Aug 2015 13:19:20 -0400 Subject: [PATCH 080/284] update title for new posts as well --- public/src/client/topic/posts.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 6532ae648c..4ad5d3ad60 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -255,7 +255,9 @@ define('forum/topic/posts', [ app.replaceSelfLinks(posts.find('a')); utils.addCommasToNumbers(posts.find('.formatted-number')); utils.makeNumbersHumanReadable(posts.find('.human-readable-number')); - posts.find('.timeago').timeago(); + posts.find('.timeago').timeago().each(function() { + $(this).attr('title', (new Date($(this).attr('title'))).toString()); + }); posts.find('[component="post/content"] img:not(.emoji)').each(function() { var $this = $(this); if (!$this.parent().is('a')) { From 275769a8017db98c1d032b53717542f571b7163a Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 14:53:37 -0400 Subject: [PATCH 081/284] closes #3435 --- app.js | 1 + src/middleware/index.js | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app.js b/app.js index 81fa124f88..ca272c66ec 100644 --- a/app.js +++ b/app.js @@ -118,6 +118,7 @@ function start() { var urlObject = url.parse(nconf.get('url')); var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : ''; nconf.set('base_url', urlObject.protocol + '//' + urlObject.host); + nconf.set('secure', urlObject.protocol === 'https'); nconf.set('use_port', !!urlObject.port); nconf.set('relative_path', relativePath); nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567); diff --git a/src/middleware/index.js b/src/middleware/index.js index 51f7b10d05..fedb8b55cb 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -57,6 +57,10 @@ module.exports = function(app) { cookie.domain = meta.config.cookieDomain; } + if (nconf.get('secure')) { + cookie.secure = true; + } + app.use(session({ store: db.sessionStore, secret: nconf.get('secret'), From c919a2817a5190fb517401e059f6f1cd62fc5359 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 15:18:07 -0400 Subject: [PATCH 082/284] tjs 0.2.28 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0971f51208..0bb5a2f2d8 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "socket.io-redis": "^0.1.3", "socketio-wildcard": "~0.1.1", "string": "^3.0.0", - "templates.js": "^0.2.6", + "templates.js": "0.2.8", "touch": "0.0.3", "uglify-js": "^2.4.23", "underscore": "~1.8.3", From a9035f166b0f2972c4abcc76d2cdf6f9997e30b0 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 15:28:04 -0400 Subject: [PATCH 083/284] fix endsWith error --- minifier.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/minifier.js b/minifier.js index 3ca6155ee3..7289843b2f 100644 --- a/minifier.js +++ b/minifier.js @@ -5,7 +5,8 @@ var uglifyjs = require('uglify-js'), async = require('async'), fs = require('fs'), crypto = require('crypto'), - + utils = require('./public/src/utils'), + Minifier = { js: {} }; From 0150e0e063d21562d3a2bdb78daf5884375402dc Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 15:55:09 -0400 Subject: [PATCH 084/284] closes #3069 --- public/language/en_GB/user.json | 4 +- src/controllers/accounts.js | 76 +++++++++++++++++++++++++++++++++ src/middleware/middleware.js | 5 +++ src/user/settings.js | 2 + 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/public/language/en_GB/user.json b/public/language/en_GB/user.json index 50d5dbf6c0..b11db877cb 100644 --- a/public/language/en_GB/user.json +++ b/public/language/en_GB/user.json @@ -97,5 +97,7 @@ "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", - "no-group-title": "No group title" + "no-group-title": "No group title", + + "select-skin": "Select a Skin" } diff --git a/src/controllers/accounts.js b/src/controllers/accounts.js index 1049f06269..fc49f31e1b 100644 --- a/src/controllers/accounts.js +++ b/src/controllers/accounts.js @@ -424,6 +424,82 @@ accountsController.accountSettings = function(req, res, next) { {value: 'month', name: '[[user:digest_monthly]]', selected: 'month' === userData.settings.dailyDigestFreq} ]; + + userData.bootswatchSkinOptions = [ + { + "name": "Default", + "value": "default" + }, + { + "name": "Cerulean", + "value": "cerulean" + }, + { + "name": "Cosmo", + "value": "cosmo" + }, + { + "name": "Cyborg", + "value": "cyborg" + }, + { + "name": "Darkly", + "value": "darkly" + }, + { + "name": "Flatly", + "value": "flatly" + }, + { + "name": "Journal", + "value": "journal" + }, + { + "name": "Lumen", + "value": "lumen" + }, + { + "name": "Paper", + "value": "paper" + }, + { + "name": "Readable", + "value": "readable" + }, + { + "name": "Sandstone", + "value": "sandstone" + }, + { + "name": "Simplex", + "value": "simplex" + }, + { + "name": "Slate", + "value": "slate" + }, + { + "name": "Spacelab", + "value": "spacelab" + }, + { + "name": "Superhero", + "value": "superhero" + }, + { + "name": "United", + "value": "united" + }, + { + "name": "Yeti", + "value": "yeti" + } + ]; + + userData.bootswatchSkinOptions.forEach(function(skin) { + skin.selected = skin.value === userData.settings.bootswatchSkin; + }); + userData.userGroups.forEach(function(group) { group.selected = group.name === userData.settings.groupTitle; }); diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 930431f3c2..6bab0678e6 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -243,6 +243,11 @@ middleware.renderHeader = function(req, res, callback) { if (err) { return next(err); } + + if (settings.bootswatchSkin && settings.bootswatchSkin !== 'default') { + templateValues.bootswatchCSS = '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + settings.bootswatchSkin + '/bootstrap.min.css'; + } + meta.title.build(req.url.slice(1), settings.userLang, next); }); } else { diff --git a/src/user/settings.js b/src/user/settings.js index ec493457aa..5af9f567c1 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -75,6 +75,7 @@ module.exports = function(User) { settings.sendPostNotifications = parseInt(settings.sendPostNotifications, 10) === 1; settings.restrictChat = parseInt(settings.restrictChat, 10) === 1; settings.topicSearchEnabled = parseInt(settings.topicSearchEnabled, 10) === 1; + settings.bootswatchSkin = settings.bootswatchSkin || 'default'; callback(null, settings); }); @@ -107,6 +108,7 @@ module.exports = function(User) { sendPostNotifications: data.sendPostNotifications, restrictChat: data.restrictChat, topicSearchEnabled: data.topicSearchEnabled, + bootswatchSkin: data.bootswatchSkin, groupTitle: data.groupTitle }, next); }, From 9f97e8fa0c806976550853c5743471592b0ea8ad Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 15:57:04 -0400 Subject: [PATCH 085/284] #3069 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0bb5a2f2d8..663cfe2999 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.2", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.10", - "nodebb-theme-vanilla": "3.0.4", + "nodebb-theme-persona": "2.0.11", + "nodebb-theme-vanilla": "3.0.5", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", From 5b1571ad1ecf5bd4f2e4020fe917b04070ba9d5b Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 16:11:26 -0400 Subject: [PATCH 086/284] don't need to refresh to preview updated skin #3069 --- public/src/client/account/settings.js | 7 +++++++ src/controllers/api.js | 1 + 2 files changed, 8 insertions(+) diff --git a/public/src/client/account/settings.js b/public/src/client/account/settings.js index 434072a0b0..23afc2f5c0 100644 --- a/public/src/client/account/settings.js +++ b/public/src/client/account/settings.js @@ -61,6 +61,13 @@ define('forum/account/settings', ['forum/account/header'], function(header) { return false; }); + + $('#bootswatchSkin').on('change', function() { + var css = $('#bootswatchCSS'), + val = $(this).val() === 'default' ? config['theme:src'] : 'http://maxcdn.bootstrapcdn.com/bootswatch/latest/' + $(this).val() + '/bootstrap.min.css'; + + css.attr('href', val); + }); }; return AccountSettings; diff --git a/src/controllers/api.js b/src/controllers/api.js index c09a96490d..cc51bfce52 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -63,6 +63,7 @@ apiController.getConfig = function(req, res, next) { config.postsPerPage = meta.config.postsPerPage || 20; config.maximumFileSize = meta.config.maximumFileSize; config['theme:id'] = meta.config['theme:id']; + config['theme:src'] = meta.config['theme:src']; config.defaultLang = meta.config.defaultLang || 'en_GB'; config.userLang = req.query.lang || config.defaultLang; config.environment = process.env.NODE_ENV; From 370a7ae2fbc82a86d743562a5eac8f77a76e15aa Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 16:15:36 -0400 Subject: [PATCH 087/284] instant update for skin preview -- themes --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 663cfe2999..81b69798ce 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.2", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.11", - "nodebb-theme-vanilla": "3.0.5", + "nodebb-theme-persona": "2.0.12", + "nodebb-theme-vanilla": "3.0.6", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", From 3d962822c68c7fe4d757afb25217059d500335ce Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 16:26:35 -0400 Subject: [PATCH 088/284] #3322 properly, @barisusakli so no need to copy pasta everywhere timeago is used --- public/src/app.js | 6 +++--- public/src/client/topic/posts.js | 4 +--- public/src/utils.js | 9 +++++++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 606277f467..5bcbb8201d 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -241,9 +241,9 @@ app.cacheBuster = null; app.processPage = function () { highlightNavigationLink(); - $('.timeago').timeago().each(function() { - $(this).attr('title', (new Date($(this).attr('title'))).toString()); - }); + utils.overrideTimeago(); + + $('.timeago').timeago(); utils.makeNumbersHumanReadable($('.human-readable-number')); diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 4ad5d3ad60..6532ae648c 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -255,9 +255,7 @@ define('forum/topic/posts', [ app.replaceSelfLinks(posts.find('a')); utils.addCommasToNumbers(posts.find('.formatted-number')); utils.makeNumbersHumanReadable(posts.find('.human-readable-number')); - posts.find('.timeago').timeago().each(function() { - $(this).attr('title', (new Date($(this).attr('title'))).toString()); - }); + posts.find('.timeago').timeago(); posts.find('[component="post/content"] img:not(.emoji)').each(function() { var $this = $(this); if (!$this.parent().is('a')) { diff --git a/public/src/utils.js b/public/src/utils.js index 930e03501f..66ee10f6cf 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -203,6 +203,15 @@ return text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); }, + overrideTimeago: function() { + var timeagoFn = $.fn.timeago; + $.fn.timeago = function() { + timeagoFn.apply(this, arguments).each(function() { + $(this).attr('title', (new Date($(this).attr('title'))).toString()); + }); + }; + }, + toISOString: function(timestamp) { if (!timestamp || !Date.prototype.toISOString) { return ''; From fe5f1b8c1d0d7c912091156e04214790a393e353 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 17 Aug 2015 16:38:05 -0400 Subject: [PATCH 089/284] moved recent popular --- src/controllers/categories.js | 58 ----------------------------------- src/controllers/index.js | 2 ++ src/controllers/popular.js | 51 ++++++++++++++++++++++++++++++ src/controllers/recent.js | 34 ++++++++++++++++++++ src/controllers/unread.js | 3 +- src/routes/index.js | 6 ++-- 6 files changed, 91 insertions(+), 63 deletions(-) create mode 100644 src/controllers/popular.js create mode 100644 src/controllers/recent.js diff --git a/src/controllers/categories.js b/src/controllers/categories.js index 34e1bc1f0b..bbffcf1a86 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -9,70 +9,12 @@ var categoriesController = {}, privileges = require('../privileges'), user = require('../user'), categories = require('../categories'), - topics = require('../topics'), meta = require('../meta'), plugins = require('../plugins'), pagination = require('../pagination'), helpers = require('./helpers'), utils = require('../../public/src/utils'); -categoriesController.recent = function(req, res, next) { - var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; - topics.getTopicsFromSet('topics:recent', req.uid, 0, stop, function(err, data) { - if (err) { - return next(err); - } - - data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; - data.rssFeedUrl = nconf.get('relative_path') + '/recent.rss'; - data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[recent:title]]'}]); - - plugins.fireHook('filter:recent.build', {req: req, res: res, templateData: data}, function(err, data) { - if (err) { - return next(err); - } - res.render('recent', data.templateData); - }); - }); -}; - -var anonCache = {}, lastUpdateTime = 0; - -categoriesController.popular = function(req, res, next) { - var terms = { - daily: 'day', - weekly: 'week', - monthly: 'month', - alltime: 'alltime' - }; - var term = terms[req.params.term] || 'day'; - - if (!req.uid) { - if (anonCache[term] && (Date.now() - lastUpdateTime) < 60 * 60 * 1000) { - return res.render('popular', anonCache[term]); - } - } - - topics.getPopular(term, req.uid, meta.config.topicsPerList, function(err, topics) { - if (err) { - return next(err); - } - - var data = { - topics: topics, - 'feeds:disableRSS': parseInt(meta.config['feeds:disableRSS'], 10) === 1, - rssFeedUrl: nconf.get('relative_path') + '/popular/' + (req.params.term || 'daily') + '.rss', - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[global:header.popular]]'}]) - }; - - if (!req.uid) { - anonCache[term] = data; - lastUpdateTime = Date.now(); - } - - res.render('popular', data); - }); -}; categoriesController.list = function(req, res, next) { async.parallel({ diff --git a/src/controllers/index.js b/src/controllers/index.js index f08d696765..70854a548a 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -19,6 +19,8 @@ var Controllers = { topics: require('./topics'), categories: require('./categories'), unread: require('./unread'), + recent: require('./recent'), + popular: require('./popular'), tags: require('./tags'), search: require('./search'), users: require('./users'), diff --git a/src/controllers/popular.js b/src/controllers/popular.js new file mode 100644 index 0000000000..6f1b025bc1 --- /dev/null +++ b/src/controllers/popular.js @@ -0,0 +1,51 @@ + +'use strict'; + +var nconf = require('nconf'), + topics = require('../topics'), + meta = require('../meta'), + helpers = require('./helpers'); + +var popularController = {}; + +var anonCache = {}, lastUpdateTime = 0; + +var terms = { + daily: 'day', + weekly: 'week', + monthly: 'month', + alltime: 'alltime' +}; + +popularController.get = function(req, res, next) { + + var term = terms[req.params.term] || 'day'; + + if (!req.uid) { + if (anonCache[term] && (Date.now() - lastUpdateTime) < 60 * 60 * 1000) { + return res.render('popular', anonCache[term]); + } + } + + topics.getPopular(term, req.uid, meta.config.topicsPerList, function(err, topics) { + if (err) { + return next(err); + } + + var data = { + topics: topics, + 'feeds:disableRSS': parseInt(meta.config['feeds:disableRSS'], 10) === 1, + rssFeedUrl: nconf.get('relative_path') + '/popular/' + (req.params.term || 'daily') + '.rss', + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[global:header.popular]]'}]) + }; + + if (!req.uid) { + anonCache[term] = data; + lastUpdateTime = Date.now(); + } + + res.render('popular', data); + }); +}; + +module.exports = popularController; \ No newline at end of file diff --git a/src/controllers/recent.js b/src/controllers/recent.js new file mode 100644 index 0000000000..99b65bab88 --- /dev/null +++ b/src/controllers/recent.js @@ -0,0 +1,34 @@ + +'use strict'; + +var nconf = require('nconf'), + topics = require('../topics'), + meta = require('../meta'), + helpers = require('./helpers'), + plugins = require('../plugins'); + +var recentController = {}; + +recentController.get = function(req, res, next) { + + var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; + + topics.getTopicsFromSet('topics:recent', req.uid, 0, stop, function(err, data) { + if (err) { + return next(err); + } + + data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; + data.rssFeedUrl = nconf.get('relative_path') + '/recent.rss'; + data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[recent:title]]'}]); + + plugins.fireHook('filter:recent.build', {req: req, res: res, templateData: data}, function(err, data) { + if (err) { + return next(err); + } + res.render('recent', data.templateData); + }); + }); +}; + +module.exports = recentController; \ No newline at end of file diff --git a/src/controllers/unread.js b/src/controllers/unread.js index 02f0b0cc1f..edf663ce8d 100644 --- a/src/controllers/unread.js +++ b/src/controllers/unread.js @@ -12,8 +12,7 @@ var async = require('async'), var unreadController = {}; - -unreadController.unread = function(req, res, next) { +unreadController.get = function(req, res, next) { var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; var results; var cid = req.query.cid; diff --git a/src/routes/index.js b/src/routes/index.js index 4935edc372..a70bcec510 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -47,9 +47,9 @@ function tagRoutes(app, middleware, controllers) { function categoryRoutes(app, middleware, controllers) { setupPageRoute(app, '/categories', middleware, [], controllers.categories.list); - setupPageRoute(app, '/popular/:term?', middleware, [], controllers.categories.popular); - setupPageRoute(app, '/recent', middleware, [], controllers.categories.recent); - setupPageRoute(app, '/unread', middleware, [middleware.authenticate], controllers.unread.unread); + setupPageRoute(app, '/popular/:term?', middleware, [], controllers.popular.get); + setupPageRoute(app, '/recent', middleware, [], controllers.recent.get); + setupPageRoute(app, '/unread', middleware, [middleware.authenticate], controllers.unread.get); setupPageRoute(app, '/category/:category_id/:slug/:topic_index', middleware, [], controllers.categories.get); setupPageRoute(app, '/category/:category_id/:slug?', middleware, [], controllers.categories.get); From 0f41654fde7087f5d6369bfa3be1a78dd2a072e6 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 17 Aug 2015 16:53:31 -0400 Subject: [PATCH 090/284] latest rewards-essentials --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 81b69798ce..aa2b796071 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "nodebb-plugin-mentions": "1.0.0", "nodebb-plugin-soundpack-default": "0.1.2", "nodebb-plugin-spam-be-gone": "0.4.1", - "nodebb-rewards-essentials": "0.0.2", + "nodebb-rewards-essentials": "0.0.3", "nodebb-theme-lavender": "1.0.49", "nodebb-theme-persona": "2.0.12", "nodebb-theme-vanilla": "3.0.6", From 5007c3a32c1cabd8e721d4b06fd38d884aebe391 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 17 Aug 2015 17:07:39 -0400 Subject: [PATCH 091/284] latest translations --- public/language/ar/category.json | 3 + public/language/ar/groups.json | 5 +- public/language/bg/category.json | 3 + public/language/bg/error.json | 4 +- public/language/bg/groups.json | 5 +- public/language/bn/category.json | 3 + public/language/bn/groups.json | 3 +- public/language/cs/category.json | 3 + public/language/cs/groups.json | 3 +- public/language/da/category.json | 3 + public/language/da/groups.json | 5 +- public/language/de/category.json | 3 + public/language/de/groups.json | 3 +- public/language/el/category.json | 3 + public/language/el/groups.json | 3 +- public/language/en@pirate/category.json | 3 + public/language/en@pirate/groups.json | 3 +- public/language/en_US/category.json | 3 + public/language/en_US/groups.json | 3 +- public/language/es/category.json | 3 + public/language/es/error.json | 4 +- public/language/es/groups.json | 5 +- public/language/es/tags.json | 2 +- public/language/et/category.json | 3 + public/language/et/error.json | 4 +- public/language/et/groups.json | 13 ++-- public/language/fa_IR/category.json | 3 + public/language/fa_IR/groups.json | 3 +- public/language/fi/category.json | 3 + public/language/fi/groups.json | 3 +- public/language/fr/category.json | 3 + public/language/fr/error.json | 4 +- public/language/fr/groups.json | 5 +- public/language/he/category.json | 3 + public/language/he/groups.json | 3 +- public/language/hu/category.json | 3 + public/language/hu/groups.json | 3 +- public/language/id/category.json | 3 + public/language/id/groups.json | 3 +- public/language/id/topic.json | 10 +-- public/language/it/category.json | 3 + public/language/it/email.json | 8 +-- public/language/it/error.json | 44 ++++++------- public/language/it/groups.json | 27 ++++---- public/language/ja/category.json | 3 + public/language/ja/groups.json | 3 +- public/language/ko/category.json | 3 + public/language/ko/groups.json | 3 +- public/language/lt/category.json | 3 + public/language/lt/email.json | 36 +++++------ public/language/lt/error.json | 66 ++++++++++---------- public/language/lt/groups.json | 49 ++++++++------- public/language/lt/pages.json | 8 +-- public/language/lt/search.json | 12 ++-- public/language/lt/tags.json | 4 +- public/language/lt/topic.json | 6 +- public/language/ms/category.json | 3 + public/language/ms/email.json | 6 +- public/language/ms/error.json | 12 ++-- public/language/ms/groups.json | 27 ++++---- public/language/ms/register.json | 2 +- public/language/ms/topic.json | 4 +- public/language/ms/unread.json | 2 +- public/language/ms/user.json | 18 +++--- public/language/ms/users.json | 18 +++--- public/language/nb/category.json | 3 + public/language/nb/groups.json | 3 +- public/language/nl/category.json | 3 + public/language/nl/groups.json | 3 +- public/language/pl/category.json | 3 + public/language/pl/groups.json | 3 +- public/language/pt_BR/category.json | 3 + public/language/pt_BR/groups.json | 3 +- public/language/ro/category.json | 3 + public/language/ro/groups.json | 3 +- public/language/ru/category.json | 3 + public/language/ru/groups.json | 13 ++-- public/language/rw/category.json | 3 + public/language/rw/global.json | 12 ++-- public/language/rw/groups.json | 3 +- public/language/rw/topic.json | 4 +- public/language/sc/category.json | 3 + public/language/sc/groups.json | 3 +- public/language/sk/category.json | 3 + public/language/sk/groups.json | 3 +- public/language/sr/category.json | 3 + public/language/sr/groups.json | 3 +- public/language/sv/category.json | 3 + public/language/sv/email.json | 8 +-- public/language/sv/error.json | 56 ++++++++--------- public/language/sv/groups.json | 83 +++++++++++++------------ public/language/sv/pages.json | 8 +-- public/language/sv/search.json | 64 +++++++++---------- public/language/sv/tags.json | 2 +- public/language/sv/topic.json | 2 +- public/language/th/category.json | 3 + public/language/th/groups.json | 3 +- public/language/tr/category.json | 3 + public/language/tr/email.json | 8 +-- public/language/tr/error.json | 12 ++-- public/language/tr/groups.json | 27 ++++---- public/language/vi/category.json | 3 + public/language/vi/groups.json | 3 +- public/language/zh_CN/category.json | 3 + public/language/zh_CN/error.json | 4 +- public/language/zh_CN/groups.json | 13 ++-- public/language/zh_TW/category.json | 3 + public/language/zh_TW/groups.json | 3 +- 108 files changed, 536 insertions(+), 384 deletions(-) diff --git a/public/language/ar/category.json b/public/language/ar/category.json index 430a82390d..a03174df07 100644 --- a/public/language/ar/category.json +++ b/public/language/ar/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "موضوع جديد", "guest-login-post": "يجب عليك تسجيل الدخول للرد", "no_topics": "لا توجد مواضيع في هذه الفئةلم لا تحاول إنشاء موضوع؟
", "browsing": "تصفح", "no_replies": "لا توجد ردود.", + "no_new_posts": "No new posts.", "share_this_category": "انشر هذه الفئة", "watch": "متابعة", "ignore": "تجاهل", diff --git a/public/language/ar/groups.json b/public/language/ar/groups.json index ae753b2d42..270d9ea846 100644 --- a/public/language/ar/groups.json +++ b/public/language/ar/groups.json @@ -38,12 +38,13 @@ "details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها", "details.hidden": "مخفي", "details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة يدوية.", - "details.delete_group": "Delete Group", + "details.delete_group": "حذف المجموعة", "event.updated": "تم تحديث بيانات المجموعة", "event.deleted": "تم حذف المجموعة %1", "membership.accept-invitation": "Accept Invitation", "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/bg/category.json b/public/language/bg/category.json index ad4fcb17ee..52d9789bd0 100644 --- a/public/language/bg/category.json +++ b/public/language/bg/category.json @@ -1,9 +1,12 @@ { + "category": "Категория", + "subcategories": "Подкатегории", "new_topic_button": "Нова тема", "guest-login-post": "Влезте, за да можете да публикувате", "no_topics": "Все още няма теми в тази категория.
Защо не създадеш една?", "browsing": "Разглежда", "no_replies": "Все още никой не е отговорил", + "no_new_posts": "Няма нови публикации.", "share_this_category": "Споделяне на тази категория", "watch": "Следене", "ignore": "Игнориране", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 2b45504325..56ae758261 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Като нов потребител, Вие можете да публикувате веднъж на %1 секунда/и, докато не натрупате %2 репутация – моля, изчакайте малко, преди да опитате да публикувате отново", "tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)", "tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)", + "too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)", "file-too-big": "Максималният разрешен размер на файл е %1 КБ – моля, качете по-малък файл", "cant-vote-self-post": "Не можете да гласувате за собствената си публикация", "already-favourited": "Вече сте отбелязали тази публикация като любима", diff --git a/public/language/bg/groups.json b/public/language/bg/groups.json index 1304f49c36..1fa3860f20 100644 --- a/public/language/bg/groups.json +++ b/public/language/bg/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Ако е включено, присъединяването към група изисква одобрението на собственика ѝ", "details.hidden": "Скрита", "details.hidden_help": "Ако е включено, тази група няма да бъде извеждана в списъка от групи и потребителите ще трябва да бъдат поканени лично", - "details.delete_group": "Delete Group", + "details.delete_group": "Изтриване на групата", "event.updated": "Подробностите за групата бяха обновени", "event.deleted": "Групата „%1“ беше изтрита", "membership.accept-invitation": "Приемане на поканата", "membership.invitation-pending": "Чакаща покана", "membership.join-group": "Присъединяване към групата", "membership.leave-group": "Напускане на групата", - "membership.reject": "Отхвърляне" + "membership.reject": "Отхвърляне", + "new-group.group_name": "Име на групата:" } \ No newline at end of file diff --git a/public/language/bn/category.json b/public/language/bn/category.json index 52a6c76853..b543a8dc41 100644 --- a/public/language/bn/category.json +++ b/public/language/bn/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "নতুন টপিক", "guest-login-post": "Log in to post", "no_topics": "এই বিভাগে কোন টপিক নেই!
আপনি চাইলে একটি পোষ্ট করতে পারেন।", "browsing": "ব্রাউজিং", "no_replies": "কোন রিপ্লাই নেই", + "no_new_posts": "No new posts.", "share_this_category": "এই বিভাগটি অন্যের সাথে ভাগাভাগি করুন", "watch": "Watch", "ignore": "উপেক্ষা করুন", diff --git a/public/language/bn/groups.json b/public/language/bn/groups.json index dd582c072a..ee043d39b6 100644 --- a/public/language/bn/groups.json +++ b/public/language/bn/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/cs/category.json b/public/language/cs/category.json index 6f156ea04b..9d75bab919 100644 --- a/public/language/cs/category.json +++ b/public/language/cs/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nové téma", "guest-login-post": "Log in to post", "no_topics": "V této kategorii zatím nejsou žádné příspěvky.
Můžeš být první!", "browsing": "prohlíží", "no_replies": "Nikdo ještě neodpověděl", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignorovat", diff --git a/public/language/cs/groups.json b/public/language/cs/groups.json index 7690fb15a5..dce192132e 100644 --- a/public/language/cs/groups.json +++ b/public/language/cs/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/da/category.json b/public/language/da/category.json index 44a6bed071..d69e9f2fb5 100644 --- a/public/language/da/category.json +++ b/public/language/da/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Underkategorier", "new_topic_button": "Nyt emne", "guest-login-post": "Log ind", "no_topics": "Der er ikke nogen nye emner i denne kategori.
Hvorfor prøver du ikke at lave et?", "browsing": "browse", "no_replies": "Ingen har svaret", + "no_new_posts": "Ingen nye indlæg", "share_this_category": "Del denne kategori", "watch": "Overvåg", "ignore": "Ignorer", diff --git a/public/language/da/groups.json b/public/language/da/groups.json index f7094f1ac1..da21bef337 100644 --- a/public/language/da/groups.json +++ b/public/language/da/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Hvis aktiveret, så vil det kræve godkendelse af gruppe ejeren for at tilslutte sig en gruppe", "details.hidden": "Skjult", "details.hidden_help": "Hvis aktiveret, så vil denne gruppe ikke kunne ses i gruppelisten og bruhere skal inviteres manuelt", - "details.delete_group": "Delete Group", + "details.delete_group": "Slet Gruppe", "event.updated": "Gruppe detaljer er blevet opdateret", "event.deleted": "Gruppen \"%1\" er blevet slettet", "membership.accept-invitation": "Acceptér Invitation", "membership.invitation-pending": "Afventende Invitationer", "membership.join-group": "Bliv medlem af gruppe", "membership.leave-group": "Forlad Gruppe", - "membership.reject": "Afvis" + "membership.reject": "Afvis", + "new-group.group_name": "Gruppe Navn:" } \ No newline at end of file diff --git a/public/language/de/category.json b/public/language/de/category.json index f073846d6d..b42ca1e1a3 100644 --- a/public/language/de/category.json +++ b/public/language/de/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Neues Thema", "guest-login-post": "Anmelden um einen Beitrag zu erstellen", "no_topics": "Es gibt noch keine Themen in dieser Kategorie.
Warum beginnst du nicht eins?", "browsing": "Aktiv", "no_replies": "Niemand hat geantwortet", + "no_new_posts": "No new posts.", "share_this_category": "Teile diese Kategorie", "watch": "Beobachten", "ignore": "Ignorieren", diff --git a/public/language/de/groups.json b/public/language/de/groups.json index 0f26786358..4847692935 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/el/category.json b/public/language/el/category.json index b49b18c0e2..2452ab3542 100644 --- a/public/language/el/category.json +++ b/public/language/el/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Νέο Θέμα", "guest-login-post": "Log in to post", "no_topics": "Δεν υπάρχουν θέματα σε αυτή την κατηγορία.
Γιατί δεν δοκιμάζεις να δημοσιεύσεις ένα εσύ;", "browsing": "περιηγούνται", "no_replies": "Κανείς δεν έχει απαντήσει", + "no_new_posts": "No new posts.", "share_this_category": "Μοιράσου αυτή την κατηγορία", "watch": "Watch", "ignore": "Αγνόηση", diff --git a/public/language/el/groups.json b/public/language/el/groups.json index b81d08c2c4..4eb70181f2 100644 --- a/public/language/el/groups.json +++ b/public/language/el/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/en@pirate/category.json b/public/language/en@pirate/category.json index 7e84700d2f..3c9ba366a2 100644 --- a/public/language/en@pirate/category.json +++ b/public/language/en@pirate/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "Thar be no topics in 'tis category.
Why don't ye give a go' postin' one?", "browsing": "browsin'", "no_replies": "No one has replied to ye message", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/en@pirate/groups.json b/public/language/en@pirate/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/en@pirate/groups.json +++ b/public/language/en@pirate/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/en_US/category.json b/public/language/en_US/category.json index be0b8e42f5..b992c577f3 100644 --- a/public/language/en_US/category.json +++ b/public/language/en_US/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", "browsing": "browsing", "no_replies": "No one has replied", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/en_US/groups.json b/public/language/en_US/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/en_US/groups.json +++ b/public/language/en_US/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/es/category.json b/public/language/es/category.json index 1eecac4aba..8d85614fbe 100644 --- a/public/language/es/category.json +++ b/public/language/es/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nuevo tema", "guest-login-post": "Acceder para poder escribir un mensaje", "no_topics": "No hay temas en esta categoría.
¿Por qué no te animas y publicas uno?", "browsing": "viendo ahora", "no_replies": "Nadie ha respondido aún", + "no_new_posts": "No new posts.", "share_this_category": "Compartir esta categoría", "watch": "Seguir", "ignore": "Ignorar", diff --git a/public/language/es/error.json b/public/language/es/error.json index 030e014195..d4e2062425 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Como nuevo usuario, solo puedes publicar una vez cada %1 segundo(s) hasta hayas ganado una reputación de %2 - por favor espera antes de volver a publicar", "tag-too-short": "Por favor introduce una etiqueta más larga. Las etiquetas deben contener por lo menos %1 caractere(s)", "tag-too-long": "Por favor introduce una etiqueta más corta. Las etiquetas no pueden exceder los %1 caractere(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Etiquetas insuficientes. El tema debe tener al menos %1 etiqueta(s).", + "too-many-tags": "Demasiadas etiquetas. El tema no puede tener mas de %1 etiqueta(s)", "file-too-big": "El tamaño de fichero máximo es de %1 kB - por favor, suba un fichero más pequeño", "cant-vote-self-post": "No puedes votar tus propios posts", "already-favourited": "Ya ha marcado esta publicación como favorita", diff --git a/public/language/es/groups.json b/public/language/es/groups.json index 1da9e025e2..7897e5aec5 100644 --- a/public/language/es/groups.json +++ b/public/language/es/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Si está habilitado, entrar en los grupos requiere aprobación de sus propietarios", "details.hidden": "Oculto", "details.hidden_help": "Si está habilitado, este grupo no aparecerá en los listados de grupos, y los usuarios tendrán que ser invitados manualmente", - "details.delete_group": "Delete Group", + "details.delete_group": "Eliminar grupo", "event.updated": "Los detalles del grupo han sido actualizados", "event.deleted": "El grupo \"%1\" ha sido eliminado", "membership.accept-invitation": "Aceptar Invitación", "membership.invitation-pending": "Invitación Pendiente", "membership.join-group": "Unirse al grupo", "membership.leave-group": "Dejar el grupo", - "membership.reject": "Rechazar" + "membership.reject": "Rechazar", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/es/tags.json b/public/language/es/tags.json index ebb1bc6072..bf8d98d790 100644 --- a/public/language/es/tags.json +++ b/public/language/es/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "No hay temas con esta etiqueta.", "tags": "Etiquetas", - "enter_tags_here": "Introduce aquí las etiquetas, entre 1% y 2% caracteres cada una.", + "enter_tags_here": "Introduce aquí las etiquetas, entre %1 y %2 caracteres cada una.", "enter_tags_here_short": "Introduzca las etiquetas...", "no_tags": "Aún no hay etiquetas." } \ No newline at end of file diff --git a/public/language/et/category.json b/public/language/et/category.json index bbaa42bee5..f89f350050 100644 --- a/public/language/et/category.json +++ b/public/language/et/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Uus teema", "guest-login-post": "Postitamiseks logi sisse", "no_topics": "Kahjuks ei leidu siin kategoorias ühtegi teemat.
Soovid postitada?", "browsing": "vaatab", "no_replies": "Keegi pole vastanud", + "no_new_posts": "No new posts.", "share_this_category": "Jaga seda kategooriat", "watch": "Vaata", "ignore": "Ignoreeri", diff --git a/public/language/et/error.json b/public/language/et/error.json index 865e8cdc76..415dfea720 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Uue kasutajana saadte postitada vaid iga %1 sekundi tagant, seniks kuni olete teeninud vähemalt %2 reputatsiooni - palun oodake enne uue postituse tegemist.", "tag-too-short": "Palun sisestage pikem märksõna. Märksõna pikkus peab olema vähemalt %1 tähemärk(i).", "tag-too-long": "Palun sisestage lühem märksõna. Märksõna pikkus peab olema vähem kui %1 tähemärk(i).", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Liiga vähe märksõnu. Teemadel peab olemalt vähemalt %1 märksõna", + "too-many-tags": "Liiga palju märksõnu. Teemadel ei tohi olla rohkem kui %1 märksõna", "file-too-big": "Maksimaalne üleslaetava faili suurus on %1 kB - valige väiksema mahuga fail.", "cant-vote-self-post": "Sa ei saa hääletada enda postituse poolt", "already-favourited": "Sa juba märkisid selle postituse lemmikuks", diff --git a/public/language/et/groups.json b/public/language/et/groups.json index 1ddeb7ce14..5f1331155f 100644 --- a/public/language/et/groups.json +++ b/public/language/et/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Kui sisse lülitatud, siis grupiga liitumine nõuab grupi omaniku nõusolekut", "details.hidden": "Peidetud", "details.hidden_help": "Kui sisse lülitatud, siis seda gruppi ei kuvata gruppide nimekirjas ning liikmed tuleb lisada manuaalselt", - "details.delete_group": "Delete Group", + "details.delete_group": "Kustuta grupp", "event.updated": "Grupi lisainformatsiooni on uuendatud", "event.deleted": "Grupp \"%1\" on kustutatud", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Aktsepteeri kutse", + "membership.invitation-pending": "Kutse ootel", + "membership.join-group": "Liitu grupiga", + "membership.leave-group": "Lahku grupist", + "membership.reject": "Lükka tagasi", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/fa_IR/category.json b/public/language/fa_IR/category.json index d67bba2cd7..a9c353e7a7 100644 --- a/public/language/fa_IR/category.json +++ b/public/language/fa_IR/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "جستار تازه", "guest-login-post": "برای ثبت نظر وارد شوید", "no_topics": "هیچ پستی در این دسته نیست.
چرا شما یکی نفرستید؟", "browsing": "بیننده‌ها", "no_replies": "هیچ کسی پاسخ نداده است.", + "no_new_posts": "No new posts.", "share_this_category": "به اشتراک‌گذاری این دسته", "watch": "نظارت کردن", "ignore": "نادیده گرفتن", diff --git a/public/language/fa_IR/groups.json b/public/language/fa_IR/groups.json index 4309d8390a..bc42c3c4cf 100644 --- a/public/language/fa_IR/groups.json +++ b/public/language/fa_IR/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/fi/category.json b/public/language/fi/category.json index 0c0233c3b1..7dacbad5ae 100644 --- a/public/language/fi/category.json +++ b/public/language/fi/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Uusi aihe", "guest-login-post": "Kirjaudu sisään voidaksesi kirjoittaa viesti", "no_topics": "Tässä kategoriassa ei ole yhtään aihetta.
Miksi et aloittaisi uutta?", "browsing": "selaamassa", "no_replies": "Kukaan ei ole vastannut", + "no_new_posts": "No new posts.", "share_this_category": "Jaa tämä kategoria", "watch": "Watch", "ignore": "Sivuuta", diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index a2cf33e9ce..a0b9c56f9c 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/fr/category.json b/public/language/fr/category.json index 62f1fe79a3..e051891b6a 100644 --- a/public/language/fr/category.json +++ b/public/language/fr/category.json @@ -1,9 +1,12 @@ { + "category": "Catégorie", + "subcategories": "Sous-catégories", "new_topic_button": "Nouveau sujet", "guest-login-post": "Se connecter pour poster", "no_topics": "Il n'y a aucun sujet dans cette catégorie.
Pourquoi ne pas en créer un ?", "browsing": "parcouru par", "no_replies": "Personne n'a répondu", + "no_new_posts": "Pas de nouveau message", "share_this_category": "Partager cette catégorie", "watch": "Suivre", "ignore": "Ne plus suivre", diff --git a/public/language/fr/error.json b/public/language/fr/error.json index 4b621eea44..4d92d5a7f0 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "En tant que nouvel utilisateur, vous ne pouvez poster que toutes les %1 seconde(s) jusqu'à ce que vous obteniez une réputation de %2 - patientez avant de publier de nouveau.", "tag-too-short": "Veuillez entrer un mot-clé plus long. Les mots-clés doivent contenir au moins %1 caractère(s).", "tag-too-long": "Veuillez entrer un mot-clé plus court. Les mot-clés ne peuvent faire plus de %1 caractère(s).", - "not-enough-tags": "Pas assez de tags. Les sujets doivent avoir au moins %1 tag(s).", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Pas assez de mots-clés. Les sujets doivent avoir au moins %1 mots-clé(s).", + "too-many-tags": "Trop de mots-clés. Les sujets ne peuvent avoir au plus que %1 mots-clé(s).", "file-too-big": "La taille maximale autorisée pour un fichier est de %1 kb. Veuillez envoyer un fichier plus petit.", "cant-vote-self-post": "Vous ne pouvez pas voter pour vos propres messages", "already-favourited": "Vous avez déjà mis ce message en favoris", diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index 35488f192e..75bee36650 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Si cette case est cochée, rejoindre un groupe nécessite l'accord d'un propriétaire du groupe.", "details.hidden": "Masqué", "details.hidden_help": "Si cette case est cochée, ce groupe n'est pas affiché dans la liste des groupes, et les utilisateurs devront être invités manuellement.", - "details.delete_group": "Delete Group", + "details.delete_group": "Supprimer le groupe", "event.updated": "Les détails du groupe ont été mis à jour", "event.deleted": "Le groupe \"%1\" a été supprimé", "membership.accept-invitation": "Accepter l'invitation", "membership.invitation-pending": "Invitation en attente", "membership.join-group": "Rejoindre le groupe", "membership.leave-group": "Quitter le groupe", - "membership.reject": "Refuser" + "membership.reject": "Refuser", + "new-group.group_name": "Nom du groupe :" } \ No newline at end of file diff --git a/public/language/he/category.json b/public/language/he/category.json index 03fb624861..c2ff49eeb1 100644 --- a/public/language/he/category.json +++ b/public/language/he/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "נושא חדש", "guest-login-post": "Log in to post", "no_topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסה להוסיף נושא חדש?", "browsing": "צופים בנושא זה כעת", "no_replies": "אין תגובות", + "no_new_posts": "No new posts.", "share_this_category": "שתף קטגוריה זו", "watch": "Watch", "ignore": "התעלם", diff --git a/public/language/he/groups.json b/public/language/he/groups.json index 0cb4cafcb8..b1637e28ac 100644 --- a/public/language/he/groups.json +++ b/public/language/he/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/hu/category.json b/public/language/hu/category.json index e77bbe78a5..7bd3e55ebe 100644 --- a/public/language/hu/category.json +++ b/public/language/hu/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Új témakör", "guest-login-post": "A hozzászóláshoz be kell lépni", "no_topics": "Nincs nyitva egy téma sem ebben a kategóriában.Hozzunk létre egyet.", "browsing": "böngészés", "no_replies": "Nem érkezett válasz", + "no_new_posts": "No new posts.", "share_this_category": "Kategória megosztása", "watch": "Watch", "ignore": "Ignorálás", diff --git a/public/language/hu/groups.json b/public/language/hu/groups.json index a5332f50b4..5c1ff14024 100644 --- a/public/language/hu/groups.json +++ b/public/language/hu/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/id/category.json b/public/language/id/category.json index 46613ff1ad..95e0e1bc1d 100644 --- a/public/language/id/category.json +++ b/public/language/id/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Topik Baru", "guest-login-post": "Log in to post", "no_topics": "Tidak ada topik dikategori ini
Mengapa anda tidak mencoba membuat yang baru?", "browsing": "penjelajahan", "no_replies": "Belum ada orang yang menjawab", + "no_new_posts": "No new posts.", "share_this_category": "Bagikan kategori ini", "watch": "Watch", "ignore": "Abaikan", diff --git a/public/language/id/groups.json b/public/language/id/groups.json index d67ca443d1..b3b60e6d73 100644 --- a/public/language/id/groups.json +++ b/public/language/id/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/id/topic.json b/public/language/id/topic.json index 5f119c3e80..7f6ae0f2de 100644 --- a/public/language/id/topic.json +++ b/public/language/id/topic.json @@ -2,10 +2,10 @@ "topic": "Topik", "topic_id": "ID Topik", "topic_id_placeholder": "Masukkan ID topik", - "no_topics_found": "Tidak topik yang ditemukan!", + "no_topics_found": "Topik tidak ditemukan!", "no_posts_found": "Tidak ada posting yang ditemukan!", "post_is_deleted": "Posting ini telah dihapus!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Topik terhapus!", "profile": "Profil", "posted_by": "Dibuat oleh %1", "posted_by_guest": "Dibuat oleh Tamu", @@ -13,7 +13,7 @@ "notify_me": "Beritahukan balasan baru untuk topik ini", "quote": "Kutip", "reply": "Balas", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "Log in untuk membalas", "edit": "Ubah", "delete": "Hapus", "purge": "Musnahkan", @@ -76,7 +76,7 @@ "fork_no_pids": "Tidak ada posting yang dipilih!", "fork_success": "Topik berhasil dicabangkan! Klik disini untuk menuju topik yang telah dicabangkan.", "composer.title_placeholder": "Masukkan judul topik di sini...", - "composer.handle_placeholder": "Name", + "composer.handle_placeholder": "Nama", "composer.discard": "Buang", "composer.submit": "Kirim", "composer.replying_to": "Membalas ke %1", @@ -96,5 +96,5 @@ "oldest_to_newest": "Terlama ke Terbaru", "newest_to_oldest": "Terbaru ke Terlama", "most_votes": "Vote terbanyak", - "most_posts": "Most posts" + "most_posts": "Postingan terbanyak" } \ No newline at end of file diff --git a/public/language/it/category.json b/public/language/it/category.json index 224bd2b833..2e2288985d 100644 --- a/public/language/it/category.json +++ b/public/language/it/category.json @@ -1,9 +1,12 @@ { + "category": "Categoria", + "subcategories": "Sottocategorie", "new_topic_button": "Nuova Discussione", "guest-login-post": "Effettua il Log in per pubblicare", "no_topics": "Non ci sono discussioni in questa categoria.
Perché non ne inizi una?", "browsing": "visualizzando", "no_replies": "Nessuno ha risposto", + "no_new_posts": "Nessun nuovo post.", "share_this_category": "Condividi questa Categoria", "watch": "Osserva", "ignore": "Ignora", diff --git a/public/language/it/email.json b/public/language/it/email.json index 3593b754ed..7bdd9cbfaa 100644 --- a/public/language/it/email.json +++ b/public/language/it/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Richiesta di reset della password - %1!", "welcome-to": "Benvenuto in %1", - "invite": "Invitation from %1", + "invite": "Invito da %1", "greeting_no_name": "Ciao", "greeting_with_name": "Ciao %1", "welcome.text1": "Grazie per esserti registrato su %1!", "welcome.text2": "Per attivare completamente il tuo account dobbiamo verificare che sei il proprietario dell'indiritto email con cui ti sei registrato.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "Un Amministratora ha accettato la tua registrazione. Puoi adesso collegarti con il tuo nome utente e la tua password.", "welcome.cta": "Clicca qui per confermare il tuo indirizzo email", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 ti ha invitato a entrare in %2", + "invitation.ctr": "Clicca qui per creare il tuo account.", "reset.text1": "Abbiamo ricevuto una richiesta di reset della tua password, probabilmente perché l'hai dimenticata. Se non è così si prega di ignorare questa email.", "reset.text2": "Per confermare il reset della password per favore clicca il seguente link:", "reset.cta": "Clicca qui per resettare la tua password", diff --git a/public/language/it/error.json b/public/language/it/error.json index 308a5afa08..6ec26dda02 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -2,7 +2,7 @@ "invalid-data": "Dati non validi", "not-logged-in": "Non sembri essere loggato.", "account-locked": "Il tuo account è stato bloccato temporaneamente", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "La ricerca richiede un account! Si prega di loggarsi o registrarsi!", "invalid-cid": "ID Categoria non valido", "invalid-tid": "ID Topic non valido", "invalid-pid": "ID Post non valido", @@ -21,11 +21,11 @@ "email-not-confirmed-chat": "Non potrai chattare finchè non avrai confermato la tua email, per favore clicca qui per farlo ora.", "no-email-to-confirm": "Questo forum richiede la conferma dell'indirizzo email, per favore clicca qui per inserirne uno", "email-confirm-failed": "Non possiamo confermare la tua email, per favore prova ancora più tardi.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "Email di conferma già inviata, per favore attendere %1 minuti per richiederne un'altra.", "username-too-short": "Nome utente troppo corto", "username-too-long": "Nome utente troppo lungo", "user-banned": "Utente bannato", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Devi attendere %1 secondi prima di creare il tuo primo post", "no-category": "La Categoria non esiste", "no-topic": "Il Topic non esiste", "no-post": "Il Post non esiste", @@ -36,24 +36,24 @@ "no-emailers-configured": "Nessun plugin per le email è caricato, quindi la mail di test non può essere inviata", "category-disabled": "Categoria disabilitata", "topic-locked": "Discussione Bloccata", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Ti è consentito modificare un post per %1 secondi dopo averlo inviato", "still-uploading": "Per favore attendere il completamento degli uploads.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Inserisci un testo più lungo. Il messaggio deve contenere almeno %1 caratteri.", + "content-too-long": "Inserisci un post più breve. I post non possono essere più lunghi di %1 caratteri.", + "title-too-short": "Inserisci un titolo più lungo. I titoli devono contenere almeno %1 caratteri.", + "title-too-long": "Inserisci un titolo più corto. I titoli non possono essere più lunghi di %1 caratteri.", + "too-many-posts": "È possibile inserire un Post ogni %1 secondi - si prega di attendere prima di postare di nuovo", + "too-many-posts-newbie": "Come nuovo utente puoi postare solamente una volta ogni %1 secondi finché non hai raggiunto un livello di reputazione %2 - per favore attendi prima di scrivere ancora", + "tag-too-short": "Inserisci un tag più lungo. I tag devono contenere almeno %1 caratteri.", + "tag-too-long": "Per favore inserisci un tag più corto. I tags non dovrebbero essere più lunghi di %1 caratteri", + "not-enough-tags": "Tag non sufficienti. Gli argomenti devono avere almeno %1 Tag", + "too-many-tags": "Troppi Tag. Gli argomenti non possono avere più di %1 Tag", + "file-too-big": "La dimensione massima consentita è di %1 kB - si prega di caricare un file più piccolo", "cant-vote-self-post": "Non puoi votare il tuo stesso post", "already-favourited": "Hai già inserito tra i preferiti questo post", "already-unfavourited": "Hai già inserito tra i Non Preferiti questo post", "cant-ban-other-admins": "Non puoi bannare altri amministratori!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Sei l'unico Amministratore. Aggiungi un altro amministratore prima di rimuovere il tuo ruolo", "invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1", "invalid-image-extension": "Estensione immagine non valida", "invalid-file-type": "Tipo di file non valido. I formati consentiti sono: %1", @@ -62,18 +62,18 @@ "group-name-change-not-allowed": "Il cambio di nome al Gruppo non è consentito", "group-already-member": "Fai già parte di questo gruppo", "group-needs-owner": "Questo gruppo richiede almeno un proprietario.", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-already-invited": "Questo utente è già stato invitato", + "group-already-requested": "La tua richiesta di partecipazione è già stata inviata", "post-already-deleted": "Questo Post è già stato cancellato", "post-already-restored": "Questo Post è già stato ripristinato", "topic-already-deleted": "Questo Topic è già stato cancellato", "topic-already-restored": "Questo Topic è già stato ripristinato", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Non puoi svuotare il primo messaggio, elimina invece l'intera discussione", "topic-thumbnails-are-disabled": "Le anteprime della Discussione sono disabilitate.", "invalid-file": "File non valido", "uploads-are-disabled": "Uploads disabilitati", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Spiacenti, la tua firma non può essere più lunga di %1 caratteri.", + "about-me-too-long": "Spiacenti, il testo non può essere più lungo di %1 caratteri.", "cant-chat-with-yourself": "Non puoi chattare con te stesso!", "chat-restricted": "Questo utente ha ristretto i suoi messaggi in chat alle persone che segue. Per poter chattare con te ti deve prima seguire.", "too-many-messages": "Hai inviato troppi messaggi, aspetta un attimo.", @@ -81,7 +81,7 @@ "downvoting-disabled": "Il Downvoting è disabilitato", "not-enough-reputation-to-downvote": "Non hai i privilegi per votare negativamente questo post", "not-enough-reputation-to-flag": "Tu non hai abbastanza reputazione per segnalare questo Post", - "already-flagged": "You have already flagged this post", + "already-flagged": "Hai già messo marcato questo post", "reload-failed": "NodeBB ha incontrato un problema durante il ricaricamento: \"%1\". NodeBB continuerà a servire gli assets esistenti lato client, così puoi annullare quello che hai fatto prima di ricaricare.", "registration-error": "Errore nella registrazione", "parse-error": "Qualcosa è andato storto durante l'analisi della risposta proveniente dal server", diff --git a/public/language/it/groups.json b/public/language/it/groups.json index 1718c967ac..1f30115a7d 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "Non ci sono gruppi da vedere", "pending.accept": "Accetta", "pending.reject": "Rigetta", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Accetta tutti", + "pending.reject_all": "Rifiuta tutti", + "pending.none": "Non ci sono membri in attesa", + "invited.none": "Non ci sono inviti in sospeso", + "invited.uninvite": "Revoca invito", + "invited.search": "Ricerca un utente da invitare in questo gruppo", "cover-instructions": "Drag and Drop una fotografia, spostarla ad una posizione, e premere Salva", "cover-change": "Cambia", "cover-save": "Salva", @@ -19,7 +19,7 @@ "details.title": "Dettagli Gruppo", "details.members": "Lista Membri", "details.pending": "Membri in attesa", - "details.invited": "Invited Members", + "details.invited": "Membri invitati", "details.has_no_posts": "I membri di questo gruppo non hanno ancora postato.", "details.latest_posts": "Ultimi Post", "details.private": "Privato", @@ -38,12 +38,13 @@ "details.private_help": "Se abilitato, l'ingresso ai gruppi richiede l'approvazione di uno dei proprietari", "details.hidden": "Nascosto", "details.hidden_help": "Se abilitato, questo gruppo non sarà visibile nella lista dei gruppi e gli utenti dovranno essere invitati manualmente", - "details.delete_group": "Delete Group", + "details.delete_group": "Elimina il Gruppo", "event.updated": "I dettagli del Gruppo sono stati aggiornati", "event.deleted": "Il gruppo \"%1\" è stato eliminato", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Accetta l'invito", + "membership.invitation-pending": "Invito in sospeso", + "membership.join-group": "Entra nel Gruppo", + "membership.leave-group": "Lascia il Gruppo", + "membership.reject": "Rifiuta", + "new-group.group_name": "Nome Gruppo:" } \ No newline at end of file diff --git a/public/language/ja/category.json b/public/language/ja/category.json index 8d792897c4..ad17f20b8d 100644 --- a/public/language/ja/category.json +++ b/public/language/ja/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "新規スレッド", "guest-login-post": "Log in to post", "no_topics": "まだスレッドはありません.
一番目のスレッドを書いてみないか?", "browsing": "閲覧中", "no_replies": "返事はまだありません", + "no_new_posts": "No new posts.", "share_this_category": "この板を共有", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/ja/groups.json b/public/language/ja/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/ja/groups.json +++ b/public/language/ja/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/ko/category.json b/public/language/ko/category.json index e2a4059181..36b116392d 100644 --- a/public/language/ko/category.json +++ b/public/language/ko/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "새 주제 생성", "guest-login-post": "로그인", "no_topics": "이 카테고리에는 생성된 주제가 없습니다.
먼저 주제를 생성해 보세요.", "browsing": "이 주제를 읽고 있는 사용자", "no_replies": "답글이 없습니다.", + "no_new_posts": "No new posts.", "share_this_category": "이 카테고리를 공유", "watch": "관심 주제", "ignore": "관심 해제", diff --git a/public/language/ko/groups.json b/public/language/ko/groups.json index ce5f1c3912..b2e8a8ec48 100644 --- a/public/language/ko/groups.json +++ b/public/language/ko/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/lt/category.json b/public/language/lt/category.json index 324084f60e..9659f81503 100644 --- a/public/language/lt/category.json +++ b/public/language/lt/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nauja tema", "guest-login-post": "Prisijungti įrašų paskelbimui", "no_topics": "Šioje kategorijoje temų nėra.
Kodėl gi jums nesukūrus naujos?", "browsing": "naršo", "no_replies": "Niekas dar neatsakė", + "no_new_posts": "No new posts.", "share_this_category": "Pasidalinti šią kategoriją", "watch": "Stebėti", "ignore": "Nepaisyti", diff --git a/public/language/lt/email.json b/public/language/lt/email.json index 12fd68ced9..ebab5de306 100644 --- a/public/language/lt/email.json +++ b/public/language/lt/email.json @@ -1,32 +1,32 @@ { - "password-reset-requested": "Password Reset Requested - %1!", + "password-reset-requested": "Slaptažodžio atstatymas būtinas - %1!", "welcome-to": "Sveiki atvykę į %1", - "invite": "Invitation from %1", + "invite": "Pakvietimas nuo %1", "greeting_no_name": "Sveiki", "greeting_with_name": "Sveiki %1", - "welcome.text1": "Thank you for registering with %1!", - "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text1": "Ačiū kad užsiregistravote %1", + "welcome.text2": "Kad pilnai aktyvuoti jūsų paskira, mums reikia įsitikinti kad jūs tikrai esate el.pašto valdytojas", + "welcome.text3": "Administratorius priemė jūsų prašymą prisijungti prie mūsų. Dabar galite prisijungti su savo slapyvardžiu/slaptažodžiu", "welcome.cta": "El. adreso patvirtinimui spauskite čia", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", - "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", - "reset.text2": "To continue with the password reset, please click on the following link:", + "invitation.text1": "%1 pakvietė tave prisijungti į %2", + "invitation.ctr": "Spauskite čia kad susikurtumėte paskyrą", + "reset.text1": "Mes, gavome prašymą atstatyti jūsų slaptažodį, tikriausiai jūs jį pamiršote. Jeigu problema ne tame, prašome ignoruoti šį laišką", + "reset.text2": "Kad tęsti slaptažodžio atstatymą, prašome paspausti šią nuorodą", "reset.cta": "Slaptažodžio atstatymui spauskite čia", "reset.notify.subject": "Slaptažodis sėkmingai pakeistas", - "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", - "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "reset.notify.text1": "Mes tikriname ar jūs tikrai esate %1, jūsų slaptažodis buvo pakeistas sėkmingai", + "reset.notify.text2": "Jeigu jūs neprašėte šito, prašome perspėti administratoriu nedelsiant", "digest.notifications": "Turite neskaitytų pranešimų nuo %1:", - "digest.latest_topics": "Latest topics from %1", + "digest.latest_topics": "Paskutinės temos iš %1", "digest.cta": "Kad aplankyti %1, spauskite čia", - "digest.unsub.info": "This digest was sent to you due to your subscription settings.", - "digest.no_topics": "There have been no active topics in the past %1", - "notif.chat.subject": "New chat message received from %1", + "digest.unsub.info": "Ši santrauka buvo išsiųsta į tavo prenumeratos nustatymus", + "digest.no_topics": "Nebuvo aktyvių temų praeityje %1", + "notif.chat.subject": "Nauja pokalbio žinutė gauta iš %1", "notif.chat.cta": "Pokalbio pratęsimui spauskite čia", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.chat.unsub.info": "Šios žinutės perpėjimas buvo išsiųstas į tavo prenumeratos nustatymus", "notif.post.cta": "Spauskite čia norėdami skaityti visą temą", - "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", - "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", + "notif.post.unsub.info": "Šios žinutės perspėjimas buvo išsiųstas į tavo prenumeratos nustatymus", + "test.text1": "Ši žinutė yra bandomoji kad įsitikint, kad vartotojas teisingai nustatė nustatymus tavo NodeBB", "unsub.cta": "Spauskite čia norėdami pakeisti šiuos nustatymus", "closing": "Ačiū!" } \ No newline at end of file diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 9134db77db..c7b5d1f3ba 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -2,7 +2,7 @@ "invalid-data": "Klaidingi duomenys", "not-logged-in": "Atrodo, kad jūs neesate prisijungęs.", "account-locked": "Jūsų paskyra buvo laikinai užrakinta", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "Paieška reikalauja vartotojo - prašome prisijungti arba užsiregistruoti", "invalid-cid": "Klaidingas kategorijos ID", "invalid-tid": "Klaidingas temos ID", "invalid-pid": "Klaidingas pranešimo ID", @@ -18,42 +18,42 @@ "username-taken": "Vartotojo vardas jau užimtas", "email-taken": "El. pašto adresas jau užimtas", "email-not-confirmed": "Jūsų el. paštas nepatvirtintas, prašome paspausti čia norint jį patvirtinti.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", + "email-not-confirmed-chat": "Jūs negalite bendrauti, kol jūsų el.paštas nėra patvirtintas, prašome spausti čia kad aktyvuoti jūsų el.paštą", "no-email-to-confirm": "Šis forumas reikalauja patvirtinimo el. paštu prašome spausti čia el. adreso įrašymui", "email-confirm-failed": "Negalime patvirtinti jūsų el. adreso, prašom bandyti vėliau.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "Patvirtinimo laiškas išsiųstas, prašome palaukti %1 minute(s) kad išsiųstume kita", "username-too-short": "Slapyvardis per trumpas", "username-too-long": "Vartotojo vardas per ilgas", "user-banned": "Vartotojas užblokuotas", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Atsiprašome, jūs įpareigoti palaukti %1 sekunde(s) prieš rašant pirmą pranešimą", "no-category": "Tokios kategorijos nėra", "no-topic": "Tokios temos nėra", "no-post": "Tokio įrašo nėra", "no-group": "Grupė neegzistuoja", "no-user": "Tokio vartotojo nėra", - "no-teaser": "Teaser does not exist", + "no-teaser": "Anonsas neegzistuoja", "no-privileges": "Šiam veiksmui jūs neturite pakankamų privilegijų.", - "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", + "no-emailers-configured": "Jokie el.pašto priedai nebuvo pakrauti, bandomasis laiškas nebus išsiųstas", "category-disabled": "Kategorija išjungta", "topic-locked": "Tema užrakinta", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Jums galima redaguoti pranešims tik %1 sekunde(s) po parašymo", "still-uploading": "Prašome palaukti kol bus baigti visi kėlimai į serverį", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Prašome parašyti ilgesni pranešimą. Pranešimas turi sudaryti mažiausiai %1 simboli(us)", + "content-too-long": "Prašome parašyti trumpesnį pranešimą. Pranešimas negali sudaryti daugiau %1 simboli(us)", + "title-too-short": "Prašome įvesti ilgesni pavadinimą. Pavadinimas turi sudaryti mažiausiai %1 simboli(us)", + "title-too-long": "Prašome įvesti trumpersnį pavadinimą. Pavadinimas negali sudaryti daugiau %1 simboli(us)", + "too-many-posts": "Jus galite rašyti kas %1 sekunde(s) - prašome palaukti prieš rašant dar kartą", + "too-many-posts-newbie": "Kadangi esate naujas narys, jūs galite tik rašyti kas %1 sekunde(s) kol jūs pasieksite %2 reputacija - prašome palaukti prieš rašant dar kartą", + "tag-too-short": "Prašome įvesti ilgesnę žymą. Žyma turi sudaryti mažiausiai %1 simboli(us)", + "tag-too-long": "Prašome įvesti trumpesnę žymą. Žyma turi būti ne ilgesni negu %1 simboli(us)", + "not-enough-tags": "Neužteka žymių. Temos turi turėti mažiausiai %1 žyme(s)", + "too-many-tags": "Per daug žymių. Temos turi turėti daugiausiai %1 žyme(s)", + "file-too-big": "Didžiausias įkelimo dydis yra %1 kB - prašome kelti mažesni failą", "cant-vote-self-post": "Jūs negalite balsuoti už savo pranešimą", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", + "already-favourited": "Jums jau patinka šis pranešimas", + "already-unfavourited": "Jums jau nebepatinka šis pranešimas", "cant-ban-other-admins": "Jūs negalite užblokuoti kitų administratorių!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Jūs esate vienintelis administratorius. Pridėkite kitą vartotoja kaip administratorių prieš pašalindamas save", "invalid-image-type": "Neteisingas vaizdo tipas. Leidžiami tipai :%1", "invalid-image-extension": "Neteisingas vaizdo plėtinys", "invalid-file-type": "Neteisingas failo tipas. Leidžiami tipai: %1", @@ -61,30 +61,30 @@ "group-already-exists": "Tokia grupė jau egzistuoja", "group-name-change-not-allowed": "Grupės pavadinimas keitimas neleidžiamas", "group-already-member": "Jūs jau priklausote šiai grupei", - "group-needs-owner": "This group requires at least one owner", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-needs-owner": "Ši grupė reikalauja mažiausiai vieno savininko", + "group-already-invited": "Šis vartotojas jau buvo pakviestas", + "group-already-requested": "Jūsų prašymas dėl narystes jau buvo pateiktas", "post-already-deleted": "Šis įrašas jau buvo ištrintas", "post-already-restored": "Šis įrašas jau atstatytas", "topic-already-deleted": "Ši tema jau ištrinta", "topic-already-restored": "Ši tema jau atkurta", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Jūs negalite išvalyti pagrindinio pranešimo, prašome ištrinkite temą nedelsiant", "topic-thumbnails-are-disabled": "Temos paveikslėliai neleidžiami.", "invalid-file": "Klaidingas failas", "uploads-are-disabled": "Įkėlimai neleidžiami", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Atsiprašome, bet jūsų parašas negali būti ilgesnis negu %1 simbolis (ių)", + "about-me-too-long": "Atsiprašome, bet aprašymas apie jus negali būti ilgesnis negu %1 simbolis (ių)", "cant-chat-with-yourself": "Jūs negalite susirašinėti su savimi!", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "chat-restricted": "Šis vartotojas apribojo savo žinutes. Jie turi sekti jus kad jūs galėtumėte pradėti bendrauti su jais", "too-many-messages": "Išsiuntėte per daug pranešimų, kurį laiką prašome palaukti.", "reputation-system-disabled": "Reputacijos sistema išjungta.", - "downvoting-disabled": "Downvoting is disabled", + "downvoting-disabled": "Downvoting yra išjungtas", "not-enough-reputation-to-downvote": "Jūs neturite pakankamai reputacijos balsuoti prieš šį pranešimą", - "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", - "already-flagged": "You have already flagged this post", - "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", + "not-enough-reputation-to-flag": "Jūs neturite pakankamai reputacijos kad įspėti dėl šito pranešimo", + "already-flagged": "Jūs jau pranešėte apie šį pranešimą", + "reload-failed": "NodeBB susidūrė su problema persikraunant: \"%1\", NodeBB pratęs veikti su šiuo klientu. bet jums reiktu patikrinti ką jūs darėte prieš perkraunant NodeBB", "registration-error": "Registracijos klaida", - "parse-error": "Something went wrong while parsing server response", + "parse-error": "Kažkokia klaida įvyko bandant gaut serverio atsaykmą", "wrong-login-type-email": "Prisijungimui prašom naudoti jūsų el. adresą", "wrong-login-type-username": "Prisijungimui prašome naudoti vartotojo vardą" } \ No newline at end of file diff --git a/public/language/lt/groups.json b/public/language/lt/groups.json index a6e81d61e8..bbd2c17770 100644 --- a/public/language/lt/groups.json +++ b/public/language/lt/groups.json @@ -3,15 +3,15 @@ "view_group": "Grupės peržiūra", "owner": "Grupės savininkas", "new_group": "Kurti naują grupę", - "no_groups_found": "There are no groups to see", + "no_groups_found": "Nėra grupių kurias būtu galima matyti", "pending.accept": "Priimti", "pending.reject": "Atmesti", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Priimti visus", + "pending.reject_all": "Atmesti visus", + "pending.none": "Nėra pretenduojančių narių šiuo momentu", + "invited.none": "Nėra pakviestu narių šiuo momentu", + "invited.uninvite": "Atšaukti pakvietimą", + "invited.search": "Ieškoti nario kad pakviesti į šią grupę", "cover-instructions": "Vilkite čia nuotrauką, perkelkite į reikalingą poziciją ir spauskite Save", "cover-change": "Keisti", "cover-save": "Saugoti", @@ -19,31 +19,32 @@ "details.title": "Grupės detalės", "details.members": "Narių sąrašas", "details.pending": "Laukiantys nariai", - "details.invited": "Invited Members", + "details.invited": "Pakviesti nariai", "details.has_no_posts": "Šios grupės nariai neatliko jokių įrašų.", "details.latest_posts": "Vėliausi įrašai", "details.private": "Asmeniška", - "details.grant": "Grant/Rescind Ownership", - "details.kick": "Kick", - "details.owner_options": "Group Administration", + "details.grant": "Duoti/Atšaukti Nuosavybę", + "details.kick": "Išmesti", + "details.owner_options": "Grupės Administratorius", "details.group_name": "Grupės pavadinimas", - "details.member_count": "Member Count", - "details.creation_date": "Creation Date", + "details.member_count": "Narių skaičiuotuvas", + "details.creation_date": "Sukūrimo Data", "details.description": "Aprašymas", - "details.badge_preview": "Badge Preview", + "details.badge_preview": "Ženklelio Peržiūra", "details.change_icon": "Pakeisti paveikslėlį", "details.change_colour": "Pakeisti spalvą", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.badge_text": "Ženklelio Tekstas", + "details.userTitleEnabled": "Parodyti Ženklelį", + "details.private_help": "Jeigu įjungta, prisijungt prie grupių reikalingas patvirtinimas iš grupės administratoriaus", "details.hidden": "Paslėptas", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "details.delete_group": "Delete Group", + "details.hidden_help": "Jeigu įjungta, ši grupė bus nerodo grupių sąraše, ir vartotojus reikės kviest rankiniu būdu", + "details.delete_group": "Ištrinti grupe", "event.updated": "Grupės informacija atnaujinta", "event.deleted": "Grupė \"%1\" pašalinta", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Priimti Kvietimą", + "membership.invitation-pending": "Pakvietimas Laukiamas", + "membership.join-group": "Prisijungti Prie Grupės", + "membership.leave-group": "Palikti Grupę", + "membership.reject": "Atšaukti", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/lt/pages.json b/public/language/lt/pages.json index 933fd00512..067b94197f 100644 --- a/public/language/lt/pages.json +++ b/public/language/lt/pages.json @@ -5,8 +5,8 @@ "recent": "Paskutinės temos", "users": "Registruoti vartotojai", "notifications": "Pranešimai", - "tags": "Tags", - "tag": "Topics tagged under \"%1\"", + "tags": "Žymos", + "tag": "Temos su šia žymą \"%1\"", "user.edit": "Redaguojama \"%1\"", "user.following": "Vartotojas %1 seka", "user.followers": "Žmonės, kurie seka %1", @@ -15,7 +15,7 @@ "user.groups": "%1's grupės", "user.favourites": "Vartotojo %1 mėgstami pranešimai", "user.settings": "Vartotojo nustatymai", - "user.watched": "Topics watched by %1", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "user.watched": "Temos stebimos %1", + "maintenance.text": "%1 dabar atnaujinimo darbuose. Prašome grįžti vėliau", "maintenance.messageIntro": "Be to, administratorius paliko šį pranešimą:" } \ No newline at end of file diff --git a/public/language/lt/search.json b/public/language/lt/search.json index 34d00a95a7..5c56ca9768 100644 --- a/public/language/lt/search.json +++ b/public/language/lt/search.json @@ -1,14 +1,14 @@ { - "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", + "results_matching": "%1 rezultatas(ai) atitinka \"%2\", (%3 sekundes)", "no-matches": "Atitikmenų nerasta", - "advanced-search": "Advanced Search", - "in": "In", + "advanced-search": "Išplėstinė paieška", + "in": "Į", "titles": "Antraštės", "titles-posts": "Antraštės ir įrašai", "posted-by": "Parašė", "in-categories": "Kategorijose", - "search-child-categories": "Search child categories", - "reply-count": "Reply Count", + "search-child-categories": "Ieškoti vaikų kategorijas", + "reply-count": "Atsakymų skaičiavimas", "at-least": "Mažiausiai", "at-most": "Daugiausia", "post-time": "Įrašo laikas", @@ -23,7 +23,7 @@ "six-months": "Šeši mėnesiai", "one-year": "Vieneri metai", "sort-by": "Rūšiuoti pagal", - "last-reply-time": "Last reply time", + "last-reply-time": "Paskutinis atsakymo laikas", "topic-title": "Temos pavadinimas", "number-of-replies": "Atsakymų skaičius", "number-of-views": "Peržiūrų skaičius", diff --git a/public/language/lt/tags.json b/public/language/lt/tags.json index 2151f58d36..c8f2158cb0 100644 --- a/public/language/lt/tags.json +++ b/public/language/lt/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Temų su šią žyma nėra.", "tags": "Žymos", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", - "enter_tags_here_short": "Enter tags...", + "enter_tags_here": "Įveskite žymas čia, tarp %1 ir %2 simbolių kiekvienam", + "enter_tags_here_short": "Įveskite žymas...", "no_tags": "Žymų kolkas nėra." } \ No newline at end of file diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index 5969a8727b..2a9772ad8b 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -5,7 +5,7 @@ "no_topics_found": "Temų nerasta!", "no_posts_found": "Įrašų nerasta!", "post_is_deleted": "Šis įrašas ištrintas!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Ši tema yra ištrinta!", "profile": "Profilis", "posted_by": "Parašė %1", "posted_by_guest": "Parašė svečias", @@ -29,7 +29,7 @@ "flag_title": "Pažymėti ši pranešimą moderatoriams", "flag_confirm": "Ar jūs tikras, kad norite pažymėti šį įrašą?", "flag_success": "Šis pranešimas buvo pažymėtas moderatorių patikrinimui.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "deleted_message": "Ši tema buvo ištrinta. Tik Vartotojai su temos redagavimo privilegijomis gali matyti ja", "following_topic.message": "Dabar jūs gausite pranešimus kai kas nors atrašys šioje temoje.", "not_following_topic.message": "Jūs daugiau negausite pranešimų iš šios temos.", "login_to_subscribe": "Norėdami prenumeruoti šią temą, prašome prisiregistruoti arba prisijungti.", @@ -74,7 +74,7 @@ "topic_will_be_moved_to": "Ši tema bus perkelta į kategoriją", "fork_topic_instruction": "Pažymėkite ant įrašų, kuriuos norite perkelti į naują temą", "fork_no_pids": "Nepasirinktas joks įrašas!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", + "fork_success": "Sėkmingai išsišakota iš temos! Spausk čia kad nueitu į išsišakota temą", "composer.title_placeholder": "Įrašykite temos pavadinimą...", "composer.handle_placeholder": "Vardas ir pavardė", "composer.discard": "Atšaukti", diff --git a/public/language/ms/category.json b/public/language/ms/category.json index fa77df77b5..667ab36081 100644 --- a/public/language/ms/category.json +++ b/public/language/ms/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Subkategori", "new_topic_button": "Topik Baru", "guest-login-post": "Log masuk untuk kirim", "no_topics": "Tiada topik dalam kategori ini.
Cuba hantar topik yang baru?", "browsing": "melihat", "no_replies": "Tiada jawapan", + "no_new_posts": "Tiada kiriman baru.", "share_this_category": "Kongsi kategori ini", "watch": "Melihat", "ignore": "Abai", diff --git a/public/language/ms/email.json b/public/language/ms/email.json index 5d55029bf5..093b25f7eb 100644 --- a/public/language/ms/email.json +++ b/public/language/ms/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Permintaan set semula kata lalaun - %1!", "welcome-to": "Selamat datang ke %1", - "invite": "Invitation from %1", + "invite": "Jemputan daripada %1", "greeting_no_name": "Salam", "greeting_with_name": "Salam %1", "welcome.text1": "Terima kasih kerana mendaftar dengan %1!", "welcome.text2": "Untuk mengaktifkan akaun anda sepenuhnya, kami perlu mengesahkan bahawa anda memiliki alamat emel yang didaftarkan.", "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", "welcome.cta": "Klik sini untuk sahkan emel anda", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 telah menjemput untuk menyertai %2", + "invitation.ctr": "Klik sini untuk buka akaun anda.", "reset.text1": "Kami menerima permintaan set semula kata laluan anda, kemungkinan kerana anda terlupa. Sekiranya tidak, sila abaikan emel ini.", "reset.text2": "Untuk meneruskan dengan set semula kata laluan, sila klik pautan berikut:", "reset.cta": "Klik sini untuk set semula kata laluan anda", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 49b0f5ff86..d346472fff 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -46,14 +46,14 @@ "too-many-posts-newbie": "Sebagai pengguna baru, anda hanya boleh mengirim sekali setiap %1 saat() sehinnga anda mendapat %2 reputasi - sila tunggu sebelum kiriman seterusnya", "tag-too-short": "Sila masukkan tag yang lebih panjang. Tag mesti mengandungi sekurang-kurangnya %1 aksara()", "tag-too-long": "Sila masukkan tag yang lebih pendek. Tag mesti mengandungi tidak lebih %1 aksara()", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Tag tidak mencukupi. Topik memerlukan sekurang-kurangnya %1 tag()", + "too-many-tags": "Tag terlalu banyak. Topik tidak boleh lebih %1 tag()", "file-too-big": "Maksimum saiz fail yang dibenarkan ialah %1 kB - sila muatnaik fail yang lebih kecil", "cant-vote-self-post": "Anda tidak boleh mengundi kiriman sendiri", "already-favourited": "Anda telah pun menggemari kiriman ini", "already-unfavourited": "Anda telah pun nyah-gemar kiriman ini", "cant-ban-other-admins": "Anda tidak boleh haramkan admin / pentadbir!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Anda satu-satunya pentadbir. Tambah pentadbir lain sebelum membuang diri anda sebagai pentadbir", "invalid-image-type": "Jenis imej tak sah. Jenis yang dibenarkan ialah: %1", "invalid-image-extension": "Sambungan imej tak sah", "invalid-file-type": "Jenis fail tak sah. Jenis fail yang dibenarkan ialah: %1", @@ -72,8 +72,8 @@ "topic-thumbnails-are-disabled": "Topik kecil dilumpuhkan.", "invalid-file": "Fail tak sah", "uploads-are-disabled": "Muatnaik dilumpuhkan", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Maaf, tandatangan anda tidak boleh lebih %1 aksara().", + "about-me-too-long": "Maaf, penerangan tentang anda tidak boleh lebih %1 aksara().", "cant-chat-with-yourself": "Anda tidak boleh sembang dengan diri sendiri!", "chat-restricted": "Pengguna ini menyekat ruangan sembangnya. Dia hendaklah mengikut anda sebelum kalian dapat bersembang", "too-many-messages": "Anda menghantar terlalu banyak pesanan, sila tunggu seketika.", @@ -81,7 +81,7 @@ "downvoting-disabled": "Undi turun dilumpuhkan", "not-enough-reputation-to-downvote": "Anda tidak mempunyai reputasi mencukupi untuk mengundi turun kiriman ini", "not-enough-reputation-to-flag": "Anda tidak mempunyai reputasi mencukupi untuk menanda kiriman ini", - "already-flagged": "You have already flagged this post", + "already-flagged": "Anda telah menanda kiriman ini", "reload-failed": "NodeBB menemui masalah ketika muat semula: \"%1\". NodeBB akan terus melayan aset pelanggan sedia ada, tapi anda seharusnya undur perbuatan yang dilakukan sebelum muat semula.", "registration-error": "Ralat pendaftaran.", "parse-error": "Sesuatu tidak kena berlaku ketika menghuraikan repson pelayan (server)", diff --git a/public/language/ms/groups.json b/public/language/ms/groups.json index 3bc71433f1..9a83a75da2 100644 --- a/public/language/ms/groups.json +++ b/public/language/ms/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "Tiada kumpulan untuk dilihat", "pending.accept": "Terima", "pending.reject": "Tolak", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Terima Semua", + "pending.reject_all": "Tolak Semua", + "pending.none": "Tiada ahli yang sedang menunggu buat masa ini", + "invited.none": "Tiada ahli yang dijemput buat masa ini", + "invited.uninvite": "Batalkan Jemputan", + "invited.search": "Cari pengguna untuk dijemput ke kumpulan ini", "cover-instructions": "Seret dan lepas gambar, lepas ke posisi, dan tekan Simpan", "cover-change": "Ubah", "cover-save": "Simpan", @@ -19,7 +19,7 @@ "details.title": "Perincian Kumpulan", "details.members": "Senarai Ahli", "details.pending": "Ahli Menunggu", - "details.invited": "Invited Members", + "details.invited": "Ahli yang dijemput", "details.has_no_posts": "Kumpulan ahli kumpulan ini belum membuat sebarang kiriman.", "details.latest_posts": "Kiriman Terkini", "details.private": "Privasi", @@ -38,12 +38,13 @@ "details.private_help": "Jika dibolehkan, menyertai kumpulan memerlukan kelulusan pemilik kumpulan", "details.hidden": "Sembunyi", "details.hidden_help": "Jika dibolehkan, kumpulan ini tidak akan dijumpai di senarai kumpulan, dan pengguna hendaklah di jemput secara manual", - "details.delete_group": "Delete Group", + "details.delete_group": "Padam Kumpulan", "event.updated": "Perincian kumpulan telah dikemaskini", "event.deleted": "Kumpulan \"%1\" telah dipadam", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Terima Jemputan", + "membership.invitation-pending": "Jemputan Menunggu", + "membership.join-group": "Masuk Kumpulan", + "membership.leave-group": "Keluar Kumpulan", + "membership.reject": "Tolak", + "new-group.group_name": "Nama Kumpulan:" } \ No newline at end of file diff --git a/public/language/ms/register.json b/public/language/ms/register.json index 633ff4703d..b0a6d79507 100644 --- a/public/language/ms/register.json +++ b/public/language/ms/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Pendaftaran Alternatif", "terms_of_use": "Terma Penggunaan", "agree_to_terms_of_use": "Saya bersetuju dengan Terma Penggunaan", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Pendaftaran anda sedang dimasukkan ke barisan pengesahan. Anda akan menerima emel setelah diterima oleh pentadbir." } \ No newline at end of file diff --git a/public/language/ms/topic.json b/public/language/ms/topic.json index 0b73e10449..258f958a20 100644 --- a/public/language/ms/topic.json +++ b/public/language/ms/topic.json @@ -4,8 +4,8 @@ "topic_id_placeholder": "Masukkan ID topik", "no_topics_found": "Tiada topik yang ditemui", "no_posts_found": "Tiada kirim yang dijumpai", - "post_is_deleted": "Kiriman ini di padam!", - "topic_is_deleted": "This topic is deleted!", + "post_is_deleted": "Kiriman ini dipadam!", + "topic_is_deleted": "Topik ini dipadam!", "profile": "Profil", "posted_by": "Dikirim oleh %1", "posted_by_guest": "Dikirim oleh pelawat", diff --git a/public/language/ms/unread.json b/public/language/ms/unread.json index d12320a5c9..6e23443905 100644 --- a/public/language/ms/unread.json +++ b/public/language/ms/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Tanda sebagai sudah dibaca", "selected": "Dipilih", "all": "Semua", - "all_categories": "All categories", + "all_categories": "Semua Kategori", "topics_marked_as_read.success": "Topik ditandakan sebagai sudah dibaca" } \ No newline at end of file diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 21a7c0a504..66fb7492e8 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -6,12 +6,12 @@ "postcount": "Jumlah Kiriman", "email": "Emel", "confirm_email": "Pastikan Emel", - "ban_account": "Ban Account", + "ban_account": "Haramkan Akaun", "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "unban_account": "Nyah-haram Akaun", "delete_account": "Padam Akaun", - "delete_account_confirm": "Anda yakin untuk paddam akaun anda?
Pebuatan ini tidak boleh diundur dan anda tidak boleh memulihkan sebarang data anda.

Masukkan nama pengguna anda untuk memastikan anda benar-benar ingin memadam akaun ini.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_account_confirm": "Anda yakin untuk padam akaun anda?
Pebuatan ini tidak boleh diundur dan anda tidak boleh memulihkan sebarang data anda.

Masukkan nama pengguna anda untuk memastikan anda benar-benar ingin memadam akaun ini.", + "delete_this_account_confirm": "Anda yakin untuk padam akaum ini?
Pebuatan ini tidak boleh diundur dan anda tidak boleh memulihkan sebarang data

", "fullname": "Nama penuh", "website": "Laman Web", "location": "Lokasi", @@ -68,9 +68,9 @@ "settings-require-reload": "Sebahagian perubahan tetapan memerlukan segar semula. Klik sini untuk segar semula halaman ini.", "has_no_follower": "Pengguna ini tiada pengikut :(", "follows_no_one": "Pengguna ini tidak mengikuti sesiapa :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Pengguna ini belum menulis sebarang kiriman lagi.", + "has_no_topics": "Pengguna ini belum menulis sebarang topik lagi.", + "has_no_watched_topics": "Pengguna ini belum melanggan sebarang topik lagi.", "email_hidden": "Emel disembunyikan", "hidden": "disembunyikan", "paginate_description": "Gunakan muka surat untuk topik dan kiriman daripada penggunaan skroll infiniti", @@ -79,8 +79,8 @@ "notification_sounds": "Mainkan bunyi apabila anda mendapat pemberitahuan", "browsing": "Melihat-lihat Tetapan", "open_links_in_new_tab": "Buka pautan luar di tab yang baru", - "enable_topic_searching": "Enable In-Topic Searching", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "enable_topic_searching": "Aktifkan Pencarian Dalam-Topik", + "topic_search_help": "Jika diaktifkan, pencarian dalam-topik akan membatalkan fungsi asal pencarian pelayan dan membenarkan anda untuk mencari seluruh topik, daripada menunjukkan apa yang terdapat pada skrin sahaja", "follow_topics_you_reply_to": "Ikut topik yang anda balas", "follow_topics_you_create": "Ikut topik yang anda buat", "grouptitle": "Pilih nama kumpulan yang anda ingin tunjukkan", diff --git a/public/language/ms/users.json b/public/language/ms/users.json index f66effd754..92f95319c7 100644 --- a/public/language/ms/users.json +++ b/public/language/ms/users.json @@ -9,13 +9,13 @@ "filter-by": "Saring dengan", "online-only": "Atas talian sahaja", "picture-only": "Gambar sahaja", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Jemput", + "invitation-email-sent": "Emel jemputan telah dihantar ke %1", + "user_list": "Senarai Pengguna", + "recent_topics": "Topik Terkini", + "popular_topics": "Topik Popular", + "unread_topics": "Topik Belum Dibaca", + "categories": "Kategori", + "tags": "Tag", + "map": "Peta" } \ No newline at end of file diff --git a/public/language/nb/category.json b/public/language/nb/category.json index f4b2298a0d..24697ca04f 100644 --- a/public/language/nb/category.json +++ b/public/language/nb/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nytt emne", "guest-login-post": "Logg inn til innlegg", "no_topics": "Det er ingen emner i denne kategorien
Hvorfor ikke lage et?", "browsing": "leser", "no_replies": "Ingen har svart", + "no_new_posts": "No new posts.", "share_this_category": "Del denne kategorien", "watch": "Overvåk", "ignore": "Ignorer", diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index 62e2979113..f4c8e9639c 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/nl/category.json b/public/language/nl/category.json index 7421cee928..8bed1f869f 100644 --- a/public/language/nl/category.json +++ b/public/language/nl/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nieuw onderwerp", "guest-login-post": "Log in om een reactie te plaatsen", "no_topics": "Er zijn geen onderwerpen in deze categorie.
Waarom maak je er niet een aan?", "browsing": "browsing", "no_replies": "Niemand heeft gereageerd", + "no_new_posts": "No new posts.", "share_this_category": "Deel deze categorie", "watch": "Volgen", "ignore": "Negeren", diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index d91ad473b0..a22c5cc62e 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/pl/category.json b/public/language/pl/category.json index 5efaa0f71c..74e175a22b 100644 --- a/public/language/pl/category.json +++ b/public/language/pl/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nowy wątek", "guest-login-post": "Zaloguj się, aby napisać.", "no_topics": "W tej kategorii nie ma jeszcze żadnych wątków.
Dlaczego ty nie utworzysz jakiegoś?", "browsing": "przegląda", "no_replies": "Nikt jeszcze nie odpowiedział", + "no_new_posts": "No new posts.", "share_this_category": "Udostępnij tę kategorię", "watch": "Watch", "ignore": "Ignoruj", diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json index 90c7195a0b..3efc724871 100644 --- a/public/language/pl/groups.json +++ b/public/language/pl/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/pt_BR/category.json b/public/language/pt_BR/category.json index f996f22b23..c8802e7429 100644 --- a/public/language/pt_BR/category.json +++ b/public/language/pt_BR/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Novo Tópico", "guest-login-post": "Logue-se para postar", "no_topics": "Não tem nenhum tópico nesta categoria.
Por que você não tenta postar o algum?", "browsing": "navegando", "no_replies": "Ninguém respondeu", + "no_new_posts": "No new posts.", "share_this_category": "Compartilhar esta categoria", "watch": "Assistir", "ignore": "Ignorar", diff --git a/public/language/pt_BR/groups.json b/public/language/pt_BR/groups.json index 5391da0e8f..04fe94a34b 100644 --- a/public/language/pt_BR/groups.json +++ b/public/language/pt_BR/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/ro/category.json b/public/language/ro/category.json index 6bc07f8f8c..cad17212dc 100644 --- a/public/language/ro/category.json +++ b/public/language/ro/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Subiect Nou", "guest-login-post": "Log in to post", "no_topics": "Nu există nici un subiect de discuție în această categorie.
De ce nu încerci să postezi tu unul?", "browsing": "navighează", "no_replies": "Nu a răspuns nimeni", + "no_new_posts": "No new posts.", "share_this_category": "Distribuie această categorie", "watch": "Watch", "ignore": "Ignoră", diff --git a/public/language/ro/groups.json b/public/language/ro/groups.json index 16d4fbb1d3..b8e9bc1c19 100644 --- a/public/language/ro/groups.json +++ b/public/language/ro/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/ru/category.json b/public/language/ru/category.json index c584f9f4c6..ed08c76fd3 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Создать тему", "guest-login-post": "Войдите чтобы создавать сообщения", "no_topics": "В этой категории еще нет тем.
Почему бы вам не создать первую?", "browsing": "просматривают", "no_replies": "Нет ответов", + "no_new_posts": "No new posts.", "share_this_category": "Поделиться этой категорией", "watch": "Следить", "ignore": "Игнорировать", diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index d4c115bd0d..16b6277be6 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Если включено, вступление в группы будет подтверждаться владельцем группы", "details.hidden": "Скрыто", "details.hidden_help": "Если включено, группа не будет показываться в списках, а пользователи должны приглашаться вручную", - "details.delete_group": "Delete Group", + "details.delete_group": "Удалить группу", "event.updated": "Настройки группы обновлены", "event.deleted": "Группа \"%1\" удалена", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Принять приглашение", + "membership.invitation-pending": "Заявка на рассмотрении", + "membership.join-group": "Вступить", + "membership.leave-group": "Покинуть", + "membership.reject": "Отклонить", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/rw/category.json b/public/language/rw/category.json index fa8c80e689..de8b548b1f 100644 --- a/public/language/rw/category.json +++ b/public/language/rw/category.json @@ -1,9 +1,12 @@ { + "category": "Icyiciro", + "subcategories": "Icyiciro gito", "new_topic_button": "Ikiganiro Gishya", "guest-login-post": "Injiramo wandike", "no_topics": "Nta biganiro byo muri iki cyiciro bihari
Watangije kimwe hano se?", "browsing": "abari kureba", "no_replies": "Nta muntu urasubiza", + "no_new_posts": "Nta bishya.", "share_this_category": "Sangiza iki cyiciro", "watch": "Kurikirana", "ignore": "Ihorere", diff --git a/public/language/rw/global.json b/public/language/rw/global.json index a00250d8cc..a9470c743f 100644 --- a/public/language/rw/global.json +++ b/public/language/rw/global.json @@ -9,7 +9,7 @@ "404.message": "Biragaragara ko wageze kuri paji itariho ikintu. Subira Imbere.", "500.title": "Hari ikibazo cya tekinike imbere. ", "500.message": "Ye baba we! Ntibikunze!", - "register": "Iyandikishe\n", + "register": "Iyandikishe", "login": "Injiramo", "please_log_in": "Injiramo", "logout": "Sohokamo", @@ -21,11 +21,11 @@ "pagination": "Umubare wa Paji", "pagination.out_of": "%1 muri %2", "pagination.enter_index": "Shyiramo umubare", - "header.admin": "Umuyobozi Mukuru", + "header.admin": "Ubuyobozi", "header.categories": "Ibyiciro", "header.recent": "Ibiheruka", "header.unread": "Ibitarasomwa", - "header.tags": "Ibimenyetso", + "header.tags": "Utumenyetso", "header.popular": "Ibikunzwe", "header.users": "Abantu", "header.groups": "Amatsinda", @@ -41,7 +41,7 @@ "alert.success": "Byaciyemo", "alert.error": "Byanze", "alert.banned": "Birukanwe", - "alert.banned.message": "Ubu ngubu umaze gukumirirwa, ukaba ugiye no guhita usohorwamo", + "alert.banned.message": "Ubu ngubu umaze gukumirwa, ugiye guhita usohorwamo", "alert.unfollow": "Ntabwo ukimukurikira %1!", "alert.follow": "Ubu ngubu ukurikira %1!", "online": "Ku Murongo", @@ -54,7 +54,7 @@ "more": "Ibindi", "posted_ago_by_guest": "byashyizweho %1 na Umushyitsi", "posted_ago_by": "byashyizweho %1 na %2", - "posted_ago": "byashyizweho %1", + "posted_ago": "kuva %1", "posted_in_ago_by_guest": "byashyizwe muri %1 %2 na Umushyitsi", "posted_in_ago_by": "byashyizwe muri %1 %2 na %3", "posted_in_ago": "byashyizwe muri %1 %2", @@ -75,7 +75,7 @@ "guest": "Umushyitsi", "guests": "Abashyitsi", "updated.title": "Urubuga Rushyizwe ku Gihe", - "updated.message": "Uru rubuga rumaze gushyirwa ku gihe. Kanda hano kugirango ubashe kuvugurura paji uriho. ", + "updated.message": "Uru rubuga rumaze kuvugururwa. Kanda hano kugirango niba hari ibyahindutse kuri iyi paji bikugereho. ", "privacy": "Umuhezo", "follow": "Kurikira", "unfollow": "Reka Gukurikira", diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json index 6d1d5f5f69..b1d7e5de19 100644 --- a/public/language/rw/groups.json +++ b/public/language/rw/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Ubutumire Buracyategereje", "membership.join-group": "Injira mu Itsinda", "membership.leave-group": "Va mu Itsinda", - "membership.reject": "Hakanira" + "membership.reject": "Hakanira", + "new-group.group_name": "Izina ry'Itsinda:" } \ No newline at end of file diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json index adba67df80..6e4804ed8b 100644 --- a/public/language/rw/topic.json +++ b/public/language/rw/topic.json @@ -26,8 +26,8 @@ "flag": "Tambikana", "locked": "Birafungiranye", "bookmark_instructions": "Kanda hano kugirango ugezwe aho wari ugeze usoma. Niba utabishaka, wafunga aka kadirishya. ", - "flag_title": "Menyesha ibi ubuyobozi niba ubona bidakwiye", - "flag_confirm": "Wiringiye neza ko ushaka kumenyesha ubuyobozi ibi? ", + "flag_title": "Bimenyeshe ubuyobozi", + "flag_confirm": "Wiringiye neza ko ushaka kumenyesha ibi ubuyobozi? ", "flag_success": "Bimaze kumenyeshwa ubuyobozi ngo bikurikiranwe. ", "deleted_message": "Iki kiganiro cyamaze gukurwaho. Abantu babifitiye uburenganzira ni bo bonyine bashobora kukibona. ", "following_topic.message": "Ntabwo uzongera kubimenyeshwa nihagira umuntu ugira icyo yandika kuri iki kiganiro. ", diff --git a/public/language/sc/category.json b/public/language/sc/category.json index 25d11361e2..57d0ccd73e 100644 --- a/public/language/sc/category.json +++ b/public/language/sc/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Arresonada Noa", "guest-login-post": "Log in to post", "no_topics": "Non bi sunt arresonadas in custa creze.
Pro ite non nde pones una?", "browsing": "navighende", "no_replies": "Perunu at rispostu", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/sc/groups.json b/public/language/sc/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/sc/groups.json +++ b/public/language/sc/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sk/category.json b/public/language/sk/category.json index 08035d7fdc..2370e4dec8 100644 --- a/public/language/sk/category.json +++ b/public/language/sk/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nová téma", "guest-login-post": "Log in to post", "no_topics": "V tejto kategórií zatiaľ nie sú žiadne príspevky.
Môžeš byť prvý!", "browsing": "prehliada", "no_replies": "Nikdo ešte neodpovedal", + "no_new_posts": "No new posts.", "share_this_category": "zdielaj túto kategóriu", "watch": "Watch", "ignore": "Ignoruj", diff --git a/public/language/sk/groups.json b/public/language/sk/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/sk/groups.json +++ b/public/language/sk/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sr/category.json b/public/language/sr/category.json index 57bcb77b34..5ab350780e 100644 --- a/public/language/sr/category.json +++ b/public/language/sr/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nova Tema", "guest-login-post": "Пријавите се за слање порука", "no_topics": "Ne postoji nijedna tema u ovoj kategoriji.
Zasto ne bi postavio jednu?", "browsing": "gleda", "no_replies": "Jos uvek nema odgovora", + "no_new_posts": "No new posts.", "share_this_category": "Podeli ovu kategoriju", "watch": "Прати", "ignore": "Игнориши", diff --git a/public/language/sr/groups.json b/public/language/sr/groups.json index a4666c6d8f..d0d34f1efd 100644 --- a/public/language/sr/groups.json +++ b/public/language/sr/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sv/category.json b/public/language/sv/category.json index 3fdd64e037..b83dbb74e6 100644 --- a/public/language/sv/category.json +++ b/public/language/sv/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nytt ämne", "guest-login-post": "Logga in för att posta", "no_topics": "Det finns inga ämnen i denna kategori.
Varför skapar inte du ett ämne?", "browsing": "läser", "no_replies": "Ingen har svarat", + "no_new_posts": "No new posts.", "share_this_category": "Dela den här kategorin", "watch": "Bevaka", "ignore": "Ignorera", diff --git a/public/language/sv/email.json b/public/language/sv/email.json index f71376777c..74f1366e24 100644 --- a/public/language/sv/email.json +++ b/public/language/sv/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Återställning av lösenord efterfrågat - %1!", "welcome-to": "Välkommen till %1", - "invite": "Invitation from %1", + "invite": "Inbjudan ifrån %1", "greeting_no_name": "Hej", "greeting_with_name": "Hej %1", "welcome.text1": "Tack för att du registerar dig på %1!", "welcome.text2": "För att slutföra aktiveringen av ditt konto, behöver vi verifiera att du har tillgång till den epostadress du registrerade dig med.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "En administrator har accepterat din registreringsansökan. Du kan logga in med ditt användarnamn och lösenord nu.", "welcome.cta": "Klicka här för att bekräfta din epostadress ", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 har bjudit in dig till %2", + "invitation.ctr": "Klicka här för att skapa ditt konto.", "reset.text1": "Vi fick en förfrågan om att återställa ditt lösenord, möjligen för att du har glömt det. Om detta inte är fallet, så kan du bortse från det här epostmeddelandet. ", "reset.text2": "För att fortsätta med återställning av lösenordet så kan du klicka på följande länk:", "reset.cta": "Klicka här för att återställa ditt lösenord", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 38992271d5..109a7e7c6a 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -2,7 +2,7 @@ "invalid-data": "Ogiltig data", "not-logged-in": "Du verkar inte vara inloggad.", "account-locked": "Ditt konto har tillfälligt blivit låst", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "Sökning kräver ett konto, var god logga in eller registrera dig.", "invalid-cid": "Ogiltigt id för kategori", "invalid-tid": "Ogiltigt id för ämne", "invalid-pid": "Ogiltigt id för inlägg", @@ -18,14 +18,14 @@ "username-taken": "Användarnamn upptaget", "email-taken": "Epostadress upptagen", "email-not-confirmed": "Din epostadress är ännu inte bekräftad. Klicka här för att bekräfta din epostadress.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", - "email-confirm-failed": "We could not confirm your email, please try again later.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "email-not-confirmed-chat": "Du kan ej använda chatten förrän din epostadress har blivit bekräftad, var god klicka här för att bekräfta din epostadress.", + "no-email-to-confirm": "Detta forum kräver bekräftning av epostadresser, var god klicka här för att fylla i en epostadress", + "email-confirm-failed": "Vi kunde ej bekräfta din epostadress, var god försök igen senare.", + "confirm-email-already-sent": "Bekräftningsbrev redan skickat, var god vänta %1 minut(er) innan du skickar ett nytt.", "username-too-short": "Användarnamnet är för kort", "username-too-long": "Användarnamnet är för långt", "user-banned": "Användare bannlyst", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Du måste vänta %1 sekund(er) innan du gör ditt första inlägg", "no-category": "Kategorin hittades inte", "no-topic": "Ämnet hittades inte", "no-post": "Inlägget hittades inte", @@ -36,52 +36,52 @@ "no-emailers-configured": "Inga tillägg för epostadress har laddats, så något textmeddelande kunde inte skickas", "category-disabled": "Kategorin inaktiverad", "topic-locked": "Ämnet låst", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Du kan endast ändra inlägg inom %1 sekund(er) efter att ha skickat det", "still-uploading": "Vänta medan uppladdningen slutförs.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Skriv ett längre inlägg. Inlägg måste innehålla minst %1 tecken.", + "content-too-long": "Skriv ett kortare inlägg. Inlägg kan inte innehålla mer än %1 tecken.", + "title-too-short": "Skriv en längre rubrik. Rubriker måste innehålla minst %1 tecken.", + "title-too-long": "Skriv en kortare rubrik. Rubriker kan inte innehålla mer än %1 tecken.", + "too-many-posts": "Du måste vänta minst %1 sekund(er) mellan varje inlägg", + "too-many-posts-newbie": "Som ny användare måste du vänta %1 sekund(er) mellan varje inlägg tills dess du har %2 förtroende", + "tag-too-short": "Fyll i ett längre märkord. Märkord måste vara minst %1 tecken långa", + "tag-too-long": "Fyll i ett kortare märkord. Märkord kan ej vara längre än %1 tecken långa", + "not-enough-tags": "Ej tillräckligt många märkord. Ämnen måste ha minst %1 märkord", + "too-many-tags": "För många märkord. Ämnen kan ej har mer än %1 märkord", + "file-too-big": "Den maximalt tillåtna filstorleken är %1 kB - ladda upp en mindre fil", "cant-vote-self-post": "Du kan inte rösta på ditt eget inlägg.", "already-favourited": "Du har redan favoriserat det här inlägget", "already-unfavourited": "Du har redan avfavoriserat det här inlägget", "cant-ban-other-admins": "Du kan inte bannlysa andra administratörer.", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Du är den enda administratören. Lägg till en annan användare som administratör innan du tar bort dig själv.", "invalid-image-type": "Ogiltig bildtyp. Tillåtna typer är: % 1", "invalid-image-extension": "Ogiltigt bildformat", "invalid-file-type": "Ogiltig filtyp. Tillåtna typer är: % 1", "group-name-too-short": "Gruppnamnet är för kort", "group-already-exists": "Gruppen existerar redan", "group-name-change-not-allowed": "Gruppnamnet får inte ändras", - "group-already-member": "You are already part of this group", - "group-needs-owner": "This group requires at least one owner", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-already-member": "Du är redan en del av gruppen", + "group-needs-owner": "Gruppen kräver minst en ägare", + "group-already-invited": "Användaren har redan bjudits in", + "group-already-requested": "Din medlemsskapsförfrågan har redan skickats", "post-already-deleted": "Inlägget är redan raderat", "post-already-restored": "Inlägget är redan återställt", "topic-already-deleted": "Ämnet är redan raderat", "topic-already-restored": "Ämnet är redan återställt", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Huvudinlägg kan ej rensas, ta bort ämnet istället", "topic-thumbnails-are-disabled": "Miniatyrbilder för ämnen är inaktiverat", "invalid-file": "Ogiltig fil", "uploads-are-disabled": "Uppladdningar är inaktiverat", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Din signatur kan inte vara längre än %1 tecken.", + "about-me-too-long": "Din om mig kan inte vara längre än %1 tecken.", "cant-chat-with-yourself": "Du kan inte chatta med dig själv.", "chat-restricted": "Denna användaren har begränsat sina chatt-meddelanden. Användaren måste följa dig innan ni kan chatta med varann", - "too-many-messages": "You have sent too many messages, please wait awhile.", + "too-many-messages": "Du har skickat för många meddelanden, var god vänta", "reputation-system-disabled": "Ryktessystemet är inaktiverat.", "downvoting-disabled": "Nedröstning är inaktiverat", "not-enough-reputation-to-downvote": "Du har inte tillräckligt förtroende för att rösta ner det här meddelandet", "not-enough-reputation-to-flag": "Du har inte tillräckligt förtroende för att flagga det här inlägget.", - "already-flagged": "You have already flagged this post", + "already-flagged": "Du har redan flaggat det här inlägget", "reload-failed": "NodeBB stötte på problem med att ladda om: \"%1\". NodeBB kommer fortsätta servera den befintliga resurser till klienten, men du borde återställa det du gjorde alldeles innan du försökte ladda om.", "registration-error": "Registreringsfel", "parse-error": "Något gick fel vid tolkning av svar från servern", diff --git a/public/language/sv/groups.json b/public/language/sv/groups.json index 2cb6de26df..248beda16e 100644 --- a/public/language/sv/groups.json +++ b/public/language/sv/groups.json @@ -1,49 +1,50 @@ { "groups": "Grupper", "view_group": "Visa grupp ", - "owner": "Group Owner", - "new_group": "Create New Group", - "no_groups_found": "There are no groups to see", - "pending.accept": "Accept", - "pending.reject": "Reject", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", - "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", - "cover-change": "Change", - "cover-save": "Save", - "cover-saving": "Saving", + "owner": "Gruppägare", + "new_group": "Skapa ny grupp", + "no_groups_found": "Det finns inga grupper att se", + "pending.accept": "Acceptera", + "pending.reject": "Neka", + "pending.accept_all": "Acceptera alla", + "pending.reject_all": "Neka alla", + "pending.none": "Det finns inga väntande medlemmar just nu", + "invited.none": "Det finns inga inbjudna medlemmar just nu", + "invited.uninvite": "Dra tillbaka inbjudan", + "invited.search": "Sök efter en användare att lägga till i denna grupp", + "cover-instructions": "Dra och släpp ett foto, dra till position och tryck Spara", + "cover-change": "Ändra", + "cover-save": "Spara", + "cover-saving": "Sparar", "details.title": "Detaljer för gruppen ", "details.members": "Medlemmar", - "details.pending": "Pending Members", - "details.invited": "Invited Members", + "details.pending": "Väntande medlemmar", + "details.invited": "Inbjudna medlemmar", "details.has_no_posts": "Den här gruppens medlemmar har inte skrivit några inlägg.", "details.latest_posts": "Senaste inlägg", - "details.private": "Private", - "details.grant": "Grant/Rescind Ownership", - "details.kick": "Kick", - "details.owner_options": "Group Administration", - "details.group_name": "Group Name", - "details.member_count": "Member Count", - "details.creation_date": "Creation Date", - "details.description": "Description", - "details.badge_preview": "Badge Preview", - "details.change_icon": "Change Icon", - "details.change_colour": "Change Colour", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", - "details.hidden": "Hidden", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "details.delete_group": "Delete Group", - "event.updated": "Group details have been updated", - "event.deleted": "The group \"%1\" has been deleted", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "details.private": "Privat", + "details.grant": "Ge/Ta ifrån ägarskap", + "details.kick": "Sparka ut", + "details.owner_options": "Gruppadministration", + "details.group_name": "Gruppnamn", + "details.member_count": "Medlemsantal", + "details.creation_date": "Skapatdatum", + "details.description": "Beskrivning", + "details.badge_preview": "Förhandsgranskning av märke", + "details.change_icon": "Byt ikon", + "details.change_colour": "Byt färg", + "details.badge_text": "Märkestext", + "details.userTitleEnabled": "Visa märke", + "details.private_help": "Om aktiverat kommer en gruppägare behöva godkänna nya gruppmedlemmar", + "details.hidden": "Dold", + "details.hidden_help": "Om aktiverat kommer gruppen inte synas i grupplistan och användare måste bli inbjudna manuellt", + "details.delete_group": "Ta bort grupp", + "event.updated": "Gruppdetaljerna har uppdaterats", + "event.deleted": "Gruppen \"%1\" har tagits bort", + "membership.accept-invitation": "Acceptera inbjudan", + "membership.invitation-pending": "Inbjudan väntar på svar", + "membership.join-group": "Gå med i grupp", + "membership.leave-group": "Lämna grupp", + "membership.reject": "Neka", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sv/pages.json b/public/language/sv/pages.json index 94c6a26d0e..b05979fb58 100644 --- a/public/language/sv/pages.json +++ b/public/language/sv/pages.json @@ -5,17 +5,17 @@ "recent": "Senaste ämnena", "users": "Registrerade användare", "notifications": "Notiser", - "tags": "Tags", - "tag": "Topics tagged under \"%1\"", + "tags": "Märkord", + "tag": "Ämnen märkta med \"%1\"", "user.edit": "Ändrar \"%1\"", "user.following": "Personer %1 Följer", "user.followers": "Personer som följer %1", "user.posts": "Inlägg skapat av %1", "user.topics": "Ämnen skapade av %1", - "user.groups": "%1's Groups", + "user.groups": "%1s grupper", "user.favourites": "%1's favorit-inlägg", "user.settings": "Avnändarinställningar", - "user.watched": "Topics watched by %1", + "user.watched": "Ämnen bevakade av %1", "maintenance.text": "%1 genomgår underhåll just nu. Vänligen kom tillbaka lite senare.", "maintenance.messageIntro": "Ytterligare så lämnade administratören detta meddelande:" } \ No newline at end of file diff --git a/public/language/sv/search.json b/public/language/sv/search.json index c023bf5927..eeb5a36feb 100644 --- a/public/language/sv/search.json +++ b/public/language/sv/search.json @@ -1,40 +1,40 @@ { "results_matching": "%1 resultat matchar \"%2\", (%3 sekunder)", "no-matches": "Inga träffar", - "advanced-search": "Advanced Search", - "in": "In", - "titles": "Titles", - "titles-posts": "Titles and Posts", - "posted-by": "Posted by", - "in-categories": "In Categories", - "search-child-categories": "Search child categories", - "reply-count": "Reply Count", - "at-least": "At least", - "at-most": "At most", - "post-time": "Post time", - "newer-than": "Newer than", - "older-than": "Older than", - "any-date": "Any date", - "yesterday": "Yesterday", + "advanced-search": "Avancerad sökning", + "in": "i", + "titles": "Ämnen", + "titles-posts": "Ämnen och Inlägg", + "posted-by": "Skapad av", + "in-categories": "I kategorier", + "search-child-categories": "Sök i underkategorier", + "reply-count": "Svarsantal", + "at-least": "Som minst", + "at-most": "Som mest", + "post-time": "Inläggstid", + "newer-than": "Yngre än", + "older-than": "Äldre än", + "any-date": "Alla datum", + "yesterday": "Igår", "one-week": "En vecka", "two-weeks": "Två veckor", "one-month": "En månad", - "three-months": "Three months", - "six-months": "Six months", - "one-year": "One year", - "sort-by": "Sort by", - "last-reply-time": "Last reply time", - "topic-title": "Topic title", - "number-of-replies": "Number of replies", - "number-of-views": "Number of views", - "topic-start-date": "Topic start date", - "username": "Username", - "category": "Category", - "descending": "In descending order", - "ascending": "In ascending order", + "three-months": "Tre månader", + "six-months": "Sex månader", + "one-year": "Ett år", + "sort-by": "Sortera på", + "last-reply-time": "Senaste svarstiden", + "topic-title": "Ämnestitel", + "number-of-replies": "Antal svar", + "number-of-views": "Antal visningar", + "topic-start-date": "Startdatum för ämne", + "username": "Användarnamn", + "category": "Kategori", + "descending": "I fallande ordning", + "ascending": "I stigande ordning", "save-preferences": "Spara inställningar", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as" + "clear-preferences": "Rensa inställningar", + "search-preferences-saved": "Sökinställningar sparade", + "search-preferences-cleared": "Sökinställningar rensade", + "show-results-as": "Visa resultat som" } \ No newline at end of file diff --git a/public/language/sv/tags.json b/public/language/sv/tags.json index d846962ea4..b3fbeebd24 100644 --- a/public/language/sv/tags.json +++ b/public/language/sv/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det finns inga ämnen med detta märkord.", "tags": "Märkord", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", + "enter_tags_here": "Fyll i märkord på mellan %1 och %2 tecken här.", "enter_tags_here_short": "Ange taggar...", "no_tags": "Det finns inga märkord ännu." } \ No newline at end of file diff --git a/public/language/sv/topic.json b/public/language/sv/topic.json index d589412c3a..15befb34f1 100644 --- a/public/language/sv/topic.json +++ b/public/language/sv/topic.json @@ -34,7 +34,7 @@ "not_following_topic.message": "Du kommer inte längre få notiser från detta ämne.", "login_to_subscribe": "Var god registrera eller logga in för att kunna prenumerera på detta ämne.", "markAsUnreadForAll.success": "Ämne markerat som oläst av alla.", - "watch": "Följ", + "watch": "Bevaka", "unwatch": "Sluta bevaka", "watch.title": "Få notis om nya svar till det här ämnet", "unwatch.title": "Sluta bevaka detta ämne", diff --git a/public/language/th/category.json b/public/language/th/category.json index bf35101ba9..66ae73ac7b 100644 --- a/public/language/th/category.json +++ b/public/language/th/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "กระทู้", "guest-login-post": "เข้าสู่ระบบเพื่อโพส", "no_topics": "ยังไม่มีกระทู้ในหมวดนี้
โพสต์กระทู้แรก?", "browsing": "เรียกดู", "no_replies": "ยังไม่มีใครตอบ", + "no_new_posts": "No new posts.", "share_this_category": "แชร์ Category นี้", "watch": "Watch", "ignore": "ไม่ต้องสนใจอีก", diff --git a/public/language/th/groups.json b/public/language/th/groups.json index 027579e466..e1f567f52e 100644 --- a/public/language/th/groups.json +++ b/public/language/th/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/tr/category.json b/public/language/tr/category.json index b78064fb51..dec48d0741 100644 --- a/public/language/tr/category.json +++ b/public/language/tr/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Alt kategoriler", "new_topic_button": "Yeni Başlık", "guest-login-post": "Göndermek için giriş yapın", "no_topics": " Bu kategoride hiç konu yok.
Yeni bir konu açmak istemez misiniz?", "browsing": "gözden geçiriliyor", "no_replies": "Kimse yanıtlamadı", + "no_new_posts": "Yeni ileti yok", "share_this_category": "Bu kategoriyi paylaş", "watch": "İzle", "ignore": "Yoksay", diff --git a/public/language/tr/email.json b/public/language/tr/email.json index cca2d80594..da6f0a2da8 100644 --- a/public/language/tr/email.json +++ b/public/language/tr/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Parola Değiştirme İsteği Gönderildi", "welcome-to": "Hoşgeldiniz", - "invite": "Invitation from %1", + "invite": "%1 sizi davet etti", "greeting_no_name": "Merhaba", "greeting_with_name": "Merhaba %1", "welcome.text1": "Kaydolduğunuz için teşekkürler!", "welcome.text2": "Hesabınızı aktif hale getirmek için, kaydolduğunuz e-posta adresinin size ait olduğunu onaylamamız gerekiyor.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "Yönetici kayıt olma isteğinizi kabul etti. Kullanıcı adı/şifre ile giriş yapabilirsiniz.", "welcome.cta": "E-posta adresinizi onaylamak için buraya tıklayın", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 sizi %2 ye katılmaya davet etti", + "invitation.ctr": "Hesap oluşturmak için buraya tıklayın", "reset.text1": "Şifrenizi değiştirmek istediğinize dair bir ileti aldık. Eğer böyle bir istek göndermediyseniz, lütfen bu e-postayı görmezden gelin.", "reset.text2": "Parola değiştirme işlemine devam etmek için aşağıdaki bağlantıya tıklayın:", "reset.cta": "Parolanızı değiştirmek için buraya tıklayın", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index a530f04e05..9c02802883 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -46,14 +46,14 @@ "too-many-posts-newbie": "Yeni bir kullanıcı olarak, %2 saygınlık kazanana kadar %1 saniye içinde bir ileti gönderebilirsiniz - tekrar ileti göndermeden önce lütfen bekleyin.", "tag-too-short": "Lütfen daha uzun bir etiket girin. Etiketler en az %1 karakter içermelidir.", "tag-too-long": "Lütfen daha kısa bir etiket girin. Etiketler %1 karakterden uzun olamaz.", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Yeterince etiket yok. Başlılar en az %1 etikete sahip olmalıdır", + "too-many-tags": "Etiket sayısı çok fazla. Başlıklar en fazla %1 etikete sahip olabilir", "file-too-big": "İzin verilen en büyük dosya boyutu %1 kb - lütfen daha küçük bir dosya yükleyin", "cant-vote-self-post": "Kendi iletinize oy veremezsiniz", "already-favourited": "Bu iletiyi zaten favorilerinize eklediniz", "already-unfavourited": "Bu iletiyi zaten favorilerinizden çıkardınız", "cant-ban-other-admins": "Başka yöneticileri yasaklayamazsınız!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Tek yönetici sizsiniz. Kendinizi adminlikten çıkarmadan önce başka bir kullanıcıyı admin olarak ekleyiniz", "invalid-image-type": "Geçersiz resim uzantısı. Izin verilen uzantılar: %1", "invalid-image-extension": "Geçersiz resim uzantısı", "invalid-file-type": "Geçersiz dosya türü. İzin verilenler şunlar : %1", @@ -62,8 +62,8 @@ "group-name-change-not-allowed": "Grup ismini değiştiremezsiniz", "group-already-member": "Bu grubun zaten bir parçasısınız.", "group-needs-owner": "Bu grubu en az bir kişi sahiplenmesi gerekiyor", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-already-invited": "Bu kullanıcı zaten davet edilmiş", + "group-already-requested": "Üyelik isteğiniz zaten gönderildi", "post-already-deleted": "İleti zaten silinmiş", "post-already-restored": "İleti zaten geri getirilmiş", "topic-already-deleted": "Başlık zaten silinmiş", @@ -81,7 +81,7 @@ "downvoting-disabled": "Aşagı oylama kapatılmış", "not-enough-reputation-to-downvote": "Bu iletiyi aşagı oylamak için yeterince saygınlığınız yok.", "not-enough-reputation-to-flag": "Bu iletiyi bayraklamak için yeterince saygınlığınız yok", - "already-flagged": "You have already flagged this post", + "already-flagged": "Bu iletiyi zaten bayrakladınız", "reload-failed": "NodeBB tekrar yüklenirken bir sorunla karşılaştı: “%1“. NodeBB varolan dosyaları servis etmeye devam edecek.", "registration-error": "Kayıt Hatası", "parse-error": "Sunucu yanıtı çözümlemesi sırasında bir şeyler ters gitti", diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index bac723142e..c1c65af240 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "Henüz hiç grup yok", "pending.accept": "Onayla", "pending.reject": "Reddet", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Hepsini Kabul Et", + "pending.reject_all": "Hepsini Reddet", + "pending.none": "Şu anda bekleyen üye yok", + "invited.none": "Şu anda davet edilmiş üye yok", + "invited.uninvite": "Daveti iptal et", + "invited.search": "Gruba davet etmek için kullanıcı ara", "cover-instructions": "Bir fotoğrafı Sürükleyin ve Bırakın, uygun yere sürükleyip Kaydet'e tıklayın.", "cover-change": "Değiştir", "cover-save": "Kaydet", @@ -19,7 +19,7 @@ "details.title": "Grup Detayları", "details.members": "Üye Listesi", "details.pending": "Üyeler bekleniyor", - "details.invited": "Invited Members", + "details.invited": "Davet Edilen Üyeler", "details.has_no_posts": "Bu grubun üyeleri henüz bir ileti göndermedi.", "details.latest_posts": "En son iletiler", "details.private": "Özel", @@ -38,12 +38,13 @@ "details.private_help": "Gruba katılmak için eğer etkinse grup sahibini onayı gerekir, ", "details.hidden": "Gizli", "details.hidden_help": "Bu grup eğer etkinse grup listelerinde bulunmaz, ve kullanıcılar bizzat davet eder", - "details.delete_group": "Delete Group", + "details.delete_group": "Grubu Sil", "event.updated": "Grup detayları güncellenmiştir", "event.deleted": "\"%1\" grubu silinmiş", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Daveti Kabul Et", + "membership.invitation-pending": "Davet beklemede", + "membership.join-group": "Gruba Katıl", + "membership.leave-group": "Gruptan Ayrıl", + "membership.reject": "Reddet", + "new-group.group_name": "Grup İsmi:" } \ No newline at end of file diff --git a/public/language/vi/category.json b/public/language/vi/category.json index e209512922..ef607a6f36 100644 --- a/public/language/vi/category.json +++ b/public/language/vi/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Chủ đề mới", "guest-login-post": "Đăng nhập để viết bài", "no_topics": "Không có bài viết trong danh mục này.
Hãy đăng một bài viết mới.", "browsing": "đang xem", "no_replies": "Chưa có bình luận nào", + "no_new_posts": "No new posts.", "share_this_category": "Chia sẻ thư mục này", "watch": "Watch", "ignore": "Bỏ qua", diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index 2deebd443e..b44ae1ecc5 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/zh_CN/category.json b/public/language/zh_CN/category.json index 8024d249a1..3867e3b185 100644 --- a/public/language/zh_CN/category.json +++ b/public/language/zh_CN/category.json @@ -1,9 +1,12 @@ { + "category": "版面", + "subcategories": "子版面", "new_topic_button": "新主题", "guest-login-post": "登录后发表", "no_topics": "此版块还没有任何内容。
赶紧来发帖吧!", "browsing": "正在浏览", "no_replies": "尚无回复", + "no_new_posts": "没有新帖", "share_this_category": "分享此版块", "watch": "关注", "ignore": "忽略", diff --git a/public/language/zh_CN/error.json b/public/language/zh_CN/error.json index 7ad720cf56..4e1ecab7ff 100644 --- a/public/language/zh_CN/error.json +++ b/public/language/zh_CN/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "因为您是新用户,所以限制每隔 %1 秒才能发帖一次,直到您有 %2 点威望为止 —— 请稍候再发帖", "tag-too-short": "话题太短,不能少于 %1 个字符", "tag-too-long": "话题太长,不能超过 %1 个字符", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "没有足够的话题标签。主题必须有至少 %1 个话题标签", + "too-many-tags": "过多话题标签。主题不能超过 %1 个话题标签", "file-too-big": "上传文件的大小限制为 %1 KB - 请缩减文件大小", "cant-vote-self-post": "您不能给自己的帖子投票。", "already-favourited": "您已收藏该帖", diff --git a/public/language/zh_CN/groups.json b/public/language/zh_CN/groups.json index 0f02408c81..d127f71963 100644 --- a/public/language/zh_CN/groups.json +++ b/public/language/zh_CN/groups.json @@ -38,12 +38,13 @@ "details.private_help": "启用此选项后,加入小组需要组长审批。", "details.hidden": "隐藏", "details.hidden_help": "启用此选项后,小组将不在小组列表中展现,成员只能通过邀请加入。", - "details.delete_group": "Delete Group", + "details.delete_group": "删除小组", "event.updated": "小组信息已更新", "event.deleted": "小组 \"%1\" 已被删除", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "接受邀请", + "membership.invitation-pending": "邀请中", + "membership.join-group": "加入小组", + "membership.leave-group": "退出小组", + "membership.reject": "拒绝", + "new-group.group_name": "组名: " } \ No newline at end of file diff --git a/public/language/zh_TW/category.json b/public/language/zh_TW/category.json index 0dff52556a..a1f61a907c 100644 --- a/public/language/zh_TW/category.json +++ b/public/language/zh_TW/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "新主題", "guest-login-post": "登錄後才能發表", "no_topics": "這個類別還沒有任何主題。
為何不來發點東西呢?", "browsing": "正在瀏覽", "no_replies": "還沒有回覆", + "no_new_posts": "No new posts.", "share_this_category": "分享這類別", "watch": "觀看", "ignore": "忽略", diff --git a/public/language/zh_TW/groups.json b/public/language/zh_TW/groups.json index b69c394a33..17d8092035 100644 --- a/public/language/zh_TW/groups.json +++ b/public/language/zh_TW/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file From 9d2c54e26a40662ae1c95679f04bc8168b990bb9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 17 Aug 2015 17:09:47 -0400 Subject: [PATCH 092/284] Add missing timeago locale files --- .../timeago/locales/jquery.timeago.cs.js | 24 +++++++++++++ .../locales/jquery.timeago.es-short.js | 20 +++++++++++ .../timeago/locales/jquery.timeago.ky.js | 34 +++++++++++++++++++ .../locales/jquery.timeago.pt-br-short.js | 20 +++++++++++ .../timeago/locales/jquery.timeago.rw.js | 20 +++++++++++ .../timeago/locales/jquery.timeago.si.js | 18 ++++++++++ 6 files changed, 136 insertions(+) create mode 100644 public/vendor/jquery/timeago/locales/jquery.timeago.cs.js create mode 100644 public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js create mode 100644 public/vendor/jquery/timeago/locales/jquery.timeago.ky.js create mode 100644 public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js create mode 100644 public/vendor/jquery/timeago/locales/jquery.timeago.rw.js create mode 100644 public/vendor/jquery/timeago/locales/jquery.timeago.si.js diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.cs.js b/public/vendor/jquery/timeago/locales/jquery.timeago.cs.js new file mode 100644 index 0000000000..0ce346963b --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.cs.js @@ -0,0 +1,24 @@ +// Czech +(function() { + function f(n, d, a) { + return a[d>=0 ? 0 : a.length==2 || n<5 ? 1 : 2]; + } + + jQuery.timeago.settings.strings = { + prefixAgo: 'před', + prefixFromNow: 'za', + suffixAgo: null, + suffixFromNow: null, + seconds: function(n, d) {return f(n, d, ['méně než minutou', 'méně než minutu']);}, + minute: function(n, d) {return f(n, d, ['minutou', 'minutu']);}, + minutes: function(n, d) {return f(n, d, ['%d minutami', '%d minuty', '%d minut']);}, + hour: function(n, d) {return f(n, d, ['hodinou', 'hodinu']);}, + hours: function(n, d) {return f(n, d, ['%d hodinami', '%d hodiny', '%d hodin']);}, + day: function(n, d) {return f(n, d, ['%d dnem', '%d den']);}, + days: function(n, d) {return f(n, d, ['%d dny', '%d dny', '%d dní']);}, + month: function(n, d) {return f(n, d, ['%d měsícem', '%d měsíc']);}, + months: function(n, d) {return f(n, d, ['%d měsíci', '%d měsíce', '%d měsíců']);}, + year: function(n, d) {return f(n, d, ['%d rokem', '%d rok']);}, + years: function(n, d) {return f(n, d, ['%d lety', '%d roky', '%d let']);} + }; +})(); diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js b/public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js new file mode 100644 index 0000000000..65d85c7154 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js @@ -0,0 +1,20 @@ +// Spanish shortened +jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "", + suffixFromNow: "", + seconds: "1m", + minute: "1m", + minutes: "%dm", + hour: "1h", + hours: "%dh", + day: "1d", + days: "%dd", + month: "1me", + months: "%dme", + year: "1a", + years: "%da", + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.ky.js b/public/vendor/jquery/timeago/locales/jquery.timeago.ky.js new file mode 100644 index 0000000000..8663fe0b23 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.ky.js @@ -0,0 +1,34 @@ +// Russian +(function() { + function numpf(n, f, s, t) { + // f - 1, 21, 31, ... + // s - 2-4, 22-24, 32-34 ... + // t - 5-20, 25-30, ... + var n10 = n % 10; + if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) { + return f; + } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) { + return s; + } else { + return t; + } + } + + jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: "через", + suffixAgo: "мурун", + suffixFromNow: null, + seconds: "1 минуттан аз", + minute: "минута", + minutes: function(value) { return numpf(value, "%d минута", "%d минута", "%d минут"); }, + hour: "саат", + hours: function(value) { return numpf(value, "%d саат", "%d саат", "%d саат"); }, + day: "күн", + days: function(value) { return numpf(value, "%d күн", "%d күн", "%d күн"); }, + month: "ай", + months: function(value) { return numpf(value, "%d ай", "%d ай", "%d ай"); }, + year: "жыл", + years: function(value) { return numpf(value, "%d жыл", "%d жыл", "%d жыл"); } + }; +})(); \ No newline at end of file diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js b/public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js new file mode 100644 index 0000000000..8f63db43d1 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js @@ -0,0 +1,20 @@ +// Portuguese Brasil shortened +jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "", + suffixFromNow: "", + seconds: "1m", + minute: "1m", + minutes: "%dm", + hour: "1h", + hours: "%dh", + day: "1d", + days: "%dd", + month: "1M", + months: "%dM", + year: "1a", + years: "%da", + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.rw.js b/public/vendor/jquery/timeago/locales/jquery.timeago.rw.js new file mode 100644 index 0000000000..18537672eb --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.rw.js @@ -0,0 +1,20 @@ +// Kinyarwanda +jQuery.timeago.settings.strings = { + prefixAgo: "hashize", + prefixFromNow: "mu", + suffixAgo: null, + suffixFromNow: null, + seconds: "amasegonda macye", + minute: "umunota", + minutes: "iminota %d", + hour: "isaha", + hours: "amasaha %d", + day: "umunsi", + days: "iminsi %d", + month: "ukwezi", + months: "amezi %d", + year: "umwaka", + years: "imyaka %d", + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.si.js b/public/vendor/jquery/timeago/locales/jquery.timeago.si.js new file mode 100644 index 0000000000..468bcd7ca9 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.si.js @@ -0,0 +1,18 @@ +// Sinhalese (SI) +jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "පෙර", + suffixFromNow: "පසුව", + seconds: "තත්පර කිහිපයකට", + minute: "මිනිත්තුවකට පමණ", + minutes: "මිනිත්තු %d කට", + hour: "පැයක් පමණ ", + hours: "පැය %d කට පමණ", + day: "දවසක ට", + days: "දවස් %d කට ", + month: "මාසයක් පමණ", + months: "මාස %d කට", + year: "වසරක් පමණ", + years: "වසරක් %d කට පමණ" +}; \ No newline at end of file From 3b3c383d93239aa7b14cf180d0232bb325ec6c63 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 17 Aug 2015 17:20:41 -0400 Subject: [PATCH 093/284] adding a fallback for en_GB and en_US --- public/src/modules/translator.js | 59 +++++++++++++++++--------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 90784747c9..96ec0b513a 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -47,33 +47,38 @@ // Load the appropriate timeago locale file, and correct NodeBB language codes to timeago codes, if necessary var languageCode; switch(config.userLang) { - case 'cs': - languageCode = 'cz'; - break; - - case 'fa_IR': - languageCode = 'fa'; - break; - - case 'pt_BR': - languageCode = 'pt-br'; - break; - - case 'nb': - languageCode = 'no'; - break; - - case 'zh_TW': - languageCode = 'zh-TW'; - break; - - case 'zh_CN': - languageCode = 'zh-CN'; - break; - - default: - languageCode = config.userLang; - break; + case 'en_GB': + case 'en_US': + languageCode = 'en'; + break; + + case 'cs': + languageCode = 'cz'; + break; + + case 'fa_IR': + languageCode = 'fa'; + break; + + case 'pt_BR': + languageCode = 'pt-br'; + break; + + case 'nb': + languageCode = 'no'; + break; + + case 'zh_TW': + languageCode = 'zh-TW'; + break; + + case 'zh_CN': + languageCode = 'zh-CN'; + break; + + default: + languageCode = config.userLang; + break; } $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { From 4b0f50f57e7916354968075eed094b8da7e9b032 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 18 Aug 2015 11:02:14 -0400 Subject: [PATCH 094/284] closes #3448 --- public/src/utils.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/public/src/utils.js b/public/src/utils.js index 66ee10f6cf..4b3b4464fc 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -206,9 +206,13 @@ overrideTimeago: function() { var timeagoFn = $.fn.timeago; $.fn.timeago = function() { - timeagoFn.apply(this, arguments).each(function() { - $(this).attr('title', (new Date($(this).attr('title'))).toString()); - }); + var els = timeagoFn.apply(this, arguments); + + if (els) { + els.each(function() { + $(this).attr('title', (new Date($(this).attr('title'))).toString()); + }); + } }; }, From a990e9c3bfce76f54e8d018ff259604bdd802cda Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 18 Aug 2015 11:27:22 -0400 Subject: [PATCH 095/284] closes #3449 --- package.json | 4 ++-- src/controllers/index.js | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index aa2b796071..0e47780a71 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.3", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.12", - "nodebb-theme-vanilla": "3.0.6", + "nodebb-theme-persona": "2.0.13", + "nodebb-theme-vanilla": "3.0.7", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", diff --git a/src/controllers/index.js b/src/controllers/index.js index 70854a548a..e7ca7e075f 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -110,6 +110,9 @@ Controllers.register = function(req, res, next) { } }, function(next) { + plugins.fireHook('filter:parse.post', {postData: {content: meta.config.termsOfUse}}, next); + }, + function(tos, next) { var loginStrategies = require('../routes/authentication').getLoginStrategies(); var data = { 'register_window:spansize': loginStrategies.length ? 'col-md-6' : 'col-md-12', @@ -121,7 +124,7 @@ Controllers.register = function(req, res, next) { data.minimumUsernameLength = meta.config.minimumUsernameLength; data.maximumUsernameLength = meta.config.maximumUsernameLength; data.minimumPasswordLength = meta.config.minimumPasswordLength; - data.termsOfUse = meta.config.termsOfUse; + data.termsOfUse = tos.postData.content; data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[register:register]]'}]); data.regFormEntry = []; data.error = req.flash('error')[0]; From 5b87af4389b8c3dc0495cc51f86edc176b086c75 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 18 Aug 2015 14:17:16 -0400 Subject: [PATCH 096/284] closes #3447 recursively get all children calculate topic/post count from children new sorted set `cid::children` fix search query params --- public/src/app.js | 2 +- src/categories.js | 72 +++++++++++++++++++++++-------- src/categories/create.js | 5 ++- src/categories/delete.js | 17 ++++++++ src/categories/update.js | 48 ++++++++++++++++++++- src/controllers/categories.js | 17 ++------ src/controllers/search.js | 2 +- src/search.js | 11 +++-- src/sitemap.js | 2 +- src/socket.io/admin/categories.js | 2 +- src/socket.io/categories.js | 4 +- src/upgrade.js | 42 +++++++++++++++++- 12 files changed, 181 insertions(+), 43 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 5bcbb8201d..2e9b479ba6 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -503,7 +503,7 @@ app.cacheBuster = null; app.load = function() { $('document').ready(function () { - var url = ajaxify.start(window.location.pathname.slice(1), true, window.location.search); + var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search, true); ajaxify.end(url, app.template); handleStatusChange(); diff --git a/src/categories.js b/src/categories.js index d30cd0c47a..f1a5ab23dd 100644 --- a/src/categories.js +++ b/src/categories.js @@ -103,10 +103,10 @@ var async = require('async'), }); }; - Categories.getCategoriesByPrivilege = function(uid, privilege, callback) { + Categories.getCategoriesByPrivilege = function(set, uid, privilege, callback) { async.waterfall([ function(next) { - db.getSortedSetRange('categories:cid', 0, -1, next); + db.getSortedSetRange(set, 0, -1, next); }, function(cids, next) { privileges.categories.filterCids(privilege, cids, uid, next); @@ -273,6 +273,7 @@ var async = require('async'), if (!category) { return; } + var postCount = parseInt(category.post_count, 10) || 0; var topicCount = parseInt(category.topic_count, 10) || 0; if (!Array.isArray(category.children) || !category.children.length) { @@ -282,9 +283,11 @@ var async = require('async'), } category.children.forEach(function(child) { - postCount += parseInt(child.post_count, 10) || 0; - topicCount += parseInt(child.topic_count, 10) || 0; + calculateTopicPostCount(child); + postCount += parseInt(child.totalPostCount, 10) || 0; + topicCount += parseInt(child.totalTopicCount, 10) || 0; }); + category.totalPostCount = postCount; category.totalTopicCount = topicCount; } @@ -308,23 +311,58 @@ var async = require('async'), }; Categories.getChildren = function(cids, uid, callback) { + var categories = cids.map(function(cid) { + return {cid: cid}; + }); + + async.each(categories, function(category, next) { + getChildrenRecursive(category, category.cid, uid, next); + }, function (err) { + callback(err, categories.map(function(c) { + return c && c.children; + })); + }); + }; + + function getChildrenRecursive(category, parentCid, uid, callback) { async.waterfall([ - async.apply(db.getSortedSetRange, 'categories:cid', 0, -1), - function(cids, next) { - privileges.categories.filterCids('find', cids, uid, next); + function (next) { + db.getSortedSetRange('cid:' + parentCid + ':children', 0, -1, next); }, - function (cids, next) { - Categories.getCategoriesData(cids, next); + function (children, next) { + privileges.categories.filterCids('find', children, uid, next); + }, + function (children, next) { + if (!children.length) { + category.children = []; + return callback(); + } + Categories.getCategoriesData(children, next); }, - function (categories, next) { - async.map(cids, function(cid, next) { - next(null, categories.filter(function(category) { - return category && parseInt(category.parentCid, 10) === parseInt(cid, 10); - })); + function (childrenData, next) { + category.children = childrenData; + async.each(category.children, function(child, next) { + getChildrenRecursive(child, child.cid, uid, next); }, next); } ], callback); - }; + } + + Categories.flattenCategories = function(allCategories, categoryData) { + categoryData.forEach(function(category) { + if (!category) { + return; + } + + if (!category.parent) { + allCategories.push(category); + } + + if (Array.isArray(category.children) && category.children.length) { + Categories.flattenCategories(allCategories, category.children); + } + }); + } /** * Recursively build tree @@ -335,13 +373,13 @@ var async = require('async'), Categories.getTree = function(categories, parentCid) { var tree = [], i = 0, len = categories.length, category; - for(i; i < len; ++i) { + for (i; i < len; ++i) { category = categories[i]; if (!category.hasOwnProperty('parentCid')) { category.parentCid = 0; } - if(category.parentCid == parentCid){ + if (category.parentCid == parentCid){ tree.push(category); category.children = Categories.getTree(categories, category.cid); } diff --git a/src/categories/create.js b/src/categories/create.js index 71eef4e72e..73a2591714 100644 --- a/src/categories/create.js +++ b/src/categories/create.js @@ -10,6 +10,8 @@ module.exports = function(Categories) { Categories.create = function(data, callback) { var category; + var parentCid = data.parentCid ? data.parentCid : 0; + async.waterfall([ function(next) { db.incrObjectField('global', 'nextCid', next); @@ -27,7 +29,7 @@ module.exports = function(Categories) { bgColor: data.bgColor || colours[0], color: data.color || colours[1], slug: slug, - parentCid: ( data.parentCid ? data.parentCid : 0 ), + parentCid: parentCid, topic_count: 0, post_count: 0, disabled: 0, @@ -48,6 +50,7 @@ module.exports = function(Categories) { async.series([ async.apply(db.setObject, 'category:' + category.cid, category), async.apply(db.sortedSetAdd, 'categories:cid', category.order, category.cid), + async.apply(db.sortedSetAdd, 'cid:' + parentCid + ':children', category.order, category.cid), async.apply(privileges.categories.give, defaultPrivileges, category.cid, 'administrators'), async.apply(privileges.categories.give, defaultPrivileges, category.cid, 'registered-users'), async.apply(privileges.categories.give, ['find', 'read'], category.cid, 'guests') diff --git a/src/categories/delete.js b/src/categories/delete.js index 1679ab6731..8483efaf72 100644 --- a/src/categories/delete.js +++ b/src/categories/delete.js @@ -30,15 +30,32 @@ module.exports = function(Categories) { function(next) { db.sortedSetRemove('categories:cid', cid, next); }, + function(next) { + removeFromParent(cid, next); + }, function(next) { db.deleteAll([ 'cid:' + cid + ':tids', 'cid:' + cid + ':tids:posts', 'cid:' + cid + ':pids', 'cid:' + cid + ':read_by_uid', + 'cid:' + cid + ':children', 'category:' + cid ], next); } ], callback); } + + function removeFromParent(cid, callback) { + async.waterfall([ + function(next) { + Categories.getCategoryField(cid, 'parentCid', next); + }, + function(parentCid, next) { + parentCid = parseInt(parentCid, 10) || 0; + db.sortedSetRemove('cid:' + parentCid + ':children', cid, next); + } + ], callback); + + } }; \ No newline at end of file diff --git a/src/categories/update.js b/src/categories/update.js index fb5cec5054..036b405c96 100644 --- a/src/categories/update.js +++ b/src/categories/update.js @@ -50,17 +50,63 @@ module.exports = function(Categories) { }; function updateCategoryField(cid, key, value, callback) { + if (key === 'parentCid') { + return updateParent(cid, value, callback); + } + db.setObjectField('category:' + cid, key, value, function(err) { if (err) { return callback(err); } if (key === 'order') { - db.sortedSetAdd('categories:cid', value, cid, callback); + updateOrder(cid, value, callback); } else { callback(); } }); } + function updateParent(cid, newParent, callback) { + Categories.getCategoryField(cid, 'parentCid', function(err, oldParent) { + if (err) { + return callback(err); + } + + async.series([ + function (next) { + oldParent = parseInt(oldParent, 10) || 0; + db.sortedSetRemove('cid:' + oldParent + ':children', cid, next); + }, + function (next) { + newParent = parseInt(newParent, 10) || 0; + db.sortedSetAdd('cid:' + newParent + ':children', cid, cid, next); + }, + function (next) { + db.setObjectField('category:' + cid, 'parentCid', newParent, next); + } + ], function(err, results) { + callback(err); + }); + }); + } + + function updateOrder(cid, order, callback) { + Categories.getCategoryField(cid, 'parentCid', function(err, parentCid) { + if (err) { + return callback(err); + } + + async.parallel([ + function (next) { + db.sortedSetAdd('categories:cid', order, cid, next); + }, + function (next) { + parentCid = parseInt(parentCid, 10) || 0; + db.sortedSetAdd('cid:' + parentCid + ':children', order, cid, next); + } + ], callback); + }); + } + }; diff --git a/src/controllers/categories.js b/src/controllers/categories.js index bbffcf1a86..bae16adc3b 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -33,7 +33,7 @@ categoriesController.list = function(req, res, next) { content: 'website' }]; - if(meta.config['brand:logo']) { + if (meta.config['brand:logo']) { res.locals.metaTags.push({ property: 'og:image', content: meta.config['brand:logo'] @@ -46,22 +46,13 @@ categoriesController.list = function(req, res, next) { var categoryData; async.waterfall([ function(next) { - categories.getCategoriesByPrivilege(req.uid, 'find', next); + categories.getCategoriesByPrivilege('cid:0:children', req.uid, 'find', next); }, function(_categoryData, next) { categoryData = _categoryData; - var allCategories = []; - - categoryData = categoryData.filter(function(category) { - if (!category.parent) { - allCategories.push(category); - } - if (Array.isArray(category.children) && category.children.length) { - allCategories.push.apply(allCategories, category.children); - } - return category && !category.parent; - }); + var allCategories = []; + categories.flattenCategories(allCategories, categoryData); categories.getRecentTopicReplies(allCategories, req.uid, next); } diff --git a/src/controllers/search.js b/src/controllers/search.js index 6637acbbc3..2148e6644b 100644 --- a/src/controllers/search.js +++ b/src/controllers/search.js @@ -17,7 +17,7 @@ searchController.search = function(req, res, next) { var breadcrumbs = helpers.buildBreadcrumbs([{text: '[[global:search]]'}]); - categories.getCategoriesByPrivilege(req.uid, 'read', function(err, categories) { + categories.getCategoriesByPrivilege('categories:cid', req.uid, 'read', function(err, categories) { if (err) { return next(err); } diff --git a/src/search.js b/src/search.js index 09e22a7a44..127588a5cd 100644 --- a/src/search.js +++ b/src/search.js @@ -417,11 +417,14 @@ function getChildrenCids(cids, uid, callback) { } var childrenCids = []; + var allCategories = []; + childrenCategories.forEach(function(childrens) { - childrenCids = childrenCids.concat(childrens.map(function(category) { - return category && category.cid; - })); - }); + categories.flattenCategories(allCategories, childrens); + childrenCids = childrenCids.concat(allCategories.map(function(category) { + return category && category.cid; + })); + }); callback(null, childrenCids); }); diff --git a/src/sitemap.js b/src/sitemap.js index eaf7686acd..a1fc3731d9 100644 --- a/src/sitemap.js +++ b/src/sitemap.js @@ -61,7 +61,7 @@ sitemap.getDynamicUrls = function(callback) { async.parallel({ categoryUrls: function(next) { var categoryUrls = []; - categories.getCategoriesByPrivilege(0, 'find', function(err, categoriesData) { + categories.getCategoriesByPrivilege('categories:cid', 0, 'find', function(err, categoriesData) { if (err) { return next(err); } diff --git a/src/socket.io/admin/categories.js b/src/socket.io/admin/categories.js index ea7ad27780..e1e72c5ec8 100644 --- a/src/socket.io/admin/categories.js +++ b/src/socket.io/admin/categories.js @@ -20,7 +20,7 @@ Categories.create = function(socket, data, callback) { Categories.getAll = function(socket, data, callback) { async.waterfall([ - async.apply(db.getSortedSetRangeByScore, 'categories:cid', 0, -1, 0, Date.now()), + async.apply(db.getSortedSetRange, 'categories:cid', 0, -1), async.apply(categories.getCategoriesData), function(categories, next) { //Hook changes, there is no req, and res diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index 0c1af11388..b437349ded 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -15,7 +15,7 @@ SocketCategories.getRecentReplies = function(socket, cid, callback) { }; SocketCategories.get = function(socket, data, callback) { - categories.getCategoriesByPrivilege(socket.uid, 'find', callback); + categories.getCategoriesByPrivilege('categories:cid', socket.uid, 'find', callback); }; SocketCategories.getWatchedCategories = function(socket, data, callback) { @@ -117,7 +117,7 @@ SocketCategories.getUsersInCategory = function(socket, cid, callback) { }; SocketCategories.getCategoriesByPrivilege = function(socket, privilege, callback) { - categories.getCategoriesByPrivilege(socket.uid, privilege, callback); + categories.getCategoriesByPrivilege('categories:cid', socket.uid, privilege, callback); }; SocketCategories.watch = function(socket, cid, callback) { diff --git a/src/upgrade.js b/src/upgrade.js index 6d985264b9..01c3da455c 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -21,7 +21,7 @@ var db = require('./database'), schemaDate, thisSchemaDate, // IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema - latestSchema = Date.UTC(2015, 6, 3); + latestSchema = Date.UTC(2015, 7, 18); Upgrade.check = function(callback) { db.get('schemaDate', function(err, value) { @@ -446,6 +446,46 @@ Upgrade.upgrade = function(callback) { winston.info('[2015/07/03] Enabling default composer plugin skipped'); next(); } + }, + function(next) { + thisSchemaDate = Date.UTC(2015, 7, 18); + if (schemaDate < thisSchemaDate) { + updatesMade = true; + winston.info('[2015/08/18] Creating children category sorted sets'); + + db.getSortedSetRange('categories:cid', 0, -1, function(err, cids) { + if (err) { + return next(err); + } + + async.each(cids, function(cid, next) { + db.getObjectFields('category:' + cid, ['parentCid', 'order'], function(err, category) { + if (err) { + return next(err); + } + if (!category) { + return next(); + } + if (parseInt(category.parentCid, 10)) { + db.sortedSetAdd('cid:' + category.parentCid + ':children', parseInt(category.order, 10), cid, next); + } else { + db.sortedSetAdd('cid:0:children', parseInt(category.order, 10), cid, next); + } + }); + }, function(err) { + if (err) { + return next(err); + } + + winston.info('[2015/08/18] Creating children category sorted sets done'); + Upgrade.update(thisSchemaDate, next); + }); + }); + + } else { + winston.info('[2015/08/18] Creating children category sorted sets skipped'); + next(); + } } From 7bd98a25168a8b6c23d70152d4a37906d01bca60 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 18 Aug 2015 15:01:36 -0400 Subject: [PATCH 097/284] closes #3427 --- src/emailer.js | 1 + src/views/admin/settings/email.tpl | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/emailer.js b/src/emailer.js index a4f2c407bd..14c683d640 100644 --- a/src/emailer.js +++ b/src/emailer.js @@ -71,6 +71,7 @@ var fs = require('fs'), Plugins.fireHook('action:email.send', { to: email, from: meta.config['email:from'] || 'no-reply@localhost.lan', + from_name: meta.config['email:from_name'] || 'NodeBB', subject: translated[2], html: translated[0], plaintext: translated[1], diff --git a/src/views/admin/settings/email.tpl b/src/views/admin/settings/email.tpl index e86eba17cc..6d996900e4 100644 --- a/src/views/admin/settings/email.tpl +++ b/src/views/admin/settings/email.tpl @@ -14,6 +14,13 @@


+
+ +

+ The from name to display in the email. +

+
+

The test email will be sent to the currently logged in user's email address. From 830d27caef6fe041b0b82f81b085f2c0825bf2f9 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 18 Aug 2015 15:17:07 -0400 Subject: [PATCH 098/284] dont ignore error --- src/image.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/image.js b/src/image.js index 078b2d134d..d35040ff9d 100644 --- a/src/image.js +++ b/src/image.js @@ -18,12 +18,16 @@ image.resizeImage = function(path, extension, width, height, callback) { }); } else { lwip.open(path, function(err, image) { + if (err) { + return callback(err); + } + image.batch() .cover(width, height) .crop(width, height) .writeFile(path, function(err) { - callback(err) - }) + callback(err); + }); }); } }; @@ -41,7 +45,7 @@ image.normalise = function(path, extension, callback) { if (err) { return callback(err); } - image.writeFile(path, 'png', callback) + image.writeFile(path, 'png', callback); }); } }; From c45e182bab87b1e45b31ce58f9e667337f01a4f3 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 18 Aug 2015 16:46:06 -0400 Subject: [PATCH 099/284] Fix ./nodebb upgrade process to not use programmatic npm - Closes #3451 - Apparently, programmatically invoking npm is like opening Pandora's box. No thanks. --- nodebb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/nodebb b/nodebb index a93e40c785..d19833d010 100755 --- a/nodebb +++ b/nodebb @@ -5,8 +5,7 @@ var colors = require('colors'), argv = require('minimist')(process.argv.slice(2)), fs = require('fs'), async = require('async'), - touch = require('touch'), - npm = require('npm'); + touch = require('touch'); var getRunningPid = function(callback) { fs.readFile(__dirname + '/pidfile', { @@ -119,15 +118,12 @@ switch(process.argv[2]) { case 'upgrade': async.series([ function(next) { - process.stdout.write('1. '.bold + 'Bringing base dependencies up to date\n'.yellow); - npm.load({ - loglevel: 'silent' - }, function() { - npm.commands.install(next); - }); + process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow); + require('child_process').execFile('/usr/bin/env', ['npm', 'i', '--production'], next); }, function(next) { - process.stdout.write('2. '.bold + 'Updating NodeBB data store schema\n'.yellow); + process.stdout.write('OK\n'.green); + process.stdout.write('2. '.bold + 'Updating NodeBB data store schema.\n'.yellow); var upgradeProc = cproc.fork('app.js', ['--upgrade'], { cwd: __dirname, silent: false @@ -136,7 +132,7 @@ switch(process.argv[2]) { upgradeProc.on('close', next) }, function(next) { - process.stdout.write('3. '.bold + 'Storing upgrade date in "package.json"\n'.yellow); + process.stdout.write('3. '.bold + 'Storing upgrade date in "package.json"... '.yellow); touch(__dirname + '/package.json', {}, next); } ], function(err) { @@ -145,6 +141,8 @@ switch(process.argv[2]) { } else { var message = 'NodeBB Upgrade Complete!', spaces = new Array(Math.floor(process.stdout.columns / 2) - (message.length / 2) + 1).join(' '); + + process.stdout.write('OK\n'.green); process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); } }); From 5ababdbdf06554b904b0388613a3968602790628 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 18 Aug 2015 17:05:28 -0400 Subject: [PATCH 100/284] prevent crash if data.enter is not string --- public/src/app.js | 2 +- src/socket.io/meta.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/public/src/app.js b/public/src/app.js index 2e9b479ba6..1ea9bb1976 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -92,7 +92,7 @@ app.cacheBuster = null; switch(url_parts[0]) { case 'user': - room = 'user/' + ajaxify.data ? ajaxify.data.theirid : 0; + room = 'user/' + (ajaxify.data ? ajaxify.data.theirid : 0); break; case 'topic': room = 'topic_' + url_parts[1]; diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 1e1843a1ca..f0c9dd58ae 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -59,6 +59,10 @@ SocketMeta.rooms.enter = function(socket, data, callback) { return callback(new Error('[[error:invalid-data]]')); } + if (data.enter) { + data.enter = data.enter.toString(); + } + if (data.enter && data.enter.startsWith('uid_') && data.enter !== 'uid_' + socket.uid) { return callback(new Error('[[error:not-allowed]]')); } From 537d539512c192a419fbc749a1e608b81816a8cb Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 18 Aug 2015 18:43:14 -0400 Subject: [PATCH 101/284] fix custom homepage --- src/controllers/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/index.js b/src/controllers/index.js index e7ca7e075f..0b99fea291 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -42,9 +42,9 @@ Controllers.home = function(req, res, next) { if (route === 'categories') { Controllers.categories.list(req, res, next); } else if (route === 'recent') { - Controllers.categories.recent(req, res, next); + Controllers.recent.get(req, res, next); } else if (route === 'popular') { - Controllers.categories.popular(req, res, next); + Controllers.popular.get(req, res, next); } else { next(); } From 7a8cdfc0955719cb0c137570cbb46eacacef5290 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 19 Aug 2015 01:16:30 -0400 Subject: [PATCH 102/284] added core field --- src/controllers/users.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/controllers/users.js b/src/controllers/users.js index b2b9c32233..abff42a4de 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -157,6 +157,7 @@ usersController.getMap = function(req, res, next) { } data.room = validator.escape(categoryData.name); data.link = '/category/' + categoryData.slug; + data.core = false; next(null, data); }); } else if (roomName.startsWith('topic_')) { @@ -167,13 +168,18 @@ usersController.getMap = function(req, res, next) { } data.room = validator.escape(topicData.title); data.link = '/topic/' + topicData.slug; + data.core = false; next(null, data); }); } else { + data.core = true; next(null, data); } }); }, function(err, data) { + if (err) { + return next(err); + } data.sort(function(a, b) { return b.total - a.total; }); From d07fca6907e03979402b6936ffda5112800386cc Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 19 Aug 2015 01:21:12 -0400 Subject: [PATCH 103/284] update theme versions --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0e47780a71..cfc263ae50 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-rewards-essentials": "0.0.3", "nodebb-theme-lavender": "1.0.49", - "nodebb-theme-persona": "2.0.13", - "nodebb-theme-vanilla": "3.0.7", + "nodebb-theme-persona": "2.0.14", + "nodebb-theme-vanilla": "3.0.8", "nodebb-widget-essentials": "1.0.4", "npm": "^2.1.4", "passport": "^0.2.1", From 685b3ce0043926612668b7bbe10bc8cb489e5ca6 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 11:55:51 -0400 Subject: [PATCH 104/284] added bootswatch paper 3.3.5 --- public/less/admin/admin.less | 1 + public/less/admin/bootstrap/variables.less | 197 +++---- public/less/admin/bootswatch.less | 607 +++++++++++++++++++++ 3 files changed, 712 insertions(+), 93 deletions(-) create mode 100644 public/less/admin/bootswatch.less diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 429a37de86..f6b4e5d130 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -1,4 +1,5 @@ @import "./bootstrap/bootstrap"; +@import "./bootswatch"; @import "./mixins"; @import "./vars"; diff --git a/public/less/admin/bootstrap/variables.less b/public/less/admin/bootstrap/variables.less index b13be9d449..a90f4d510b 100644 --- a/public/less/admin/bootstrap/variables.less +++ b/public/less/admin/bootstrap/variables.less @@ -1,4 +1,4 @@ -// +// Paper 3.3.5 // Variables // -------------------------------------------------- @@ -9,16 +9,16 @@ @gray-base: #000; @gray-darker: lighten(@gray-base, 13.5%); // #222 -@gray-dark: lighten(@gray-base, 20%); // #333 -@gray: lighten(@gray-base, 33.5%); // #555 -@gray-light: lighten(@gray-base, 46.7%); // #777 +@gray-dark: #212121; +@gray: #666; +@gray-light: #bbb; @gray-lighter: lighten(@gray-base, 93.5%); // #eee -@brand-primary: darken(#428bca, 6.5%); -@brand-success: #5cb85c; -@brand-info: #5bc0de; -@brand-warning: #f0ad4e; -@brand-danger: #d9534f; +@brand-primary: #2196F3; +@brand-success: #4CAF50; +@brand-info: #9C27B0; +@brand-warning: #ff9800; +@brand-danger: #e51c23; //== Scaffolding @@ -28,7 +28,7 @@ //** Background color for ``. @body-bg: #fff; //** Global text color on ``. -@text-color: @gray-dark; +@text-color: @gray; //** Global textual link color. @link-color: @brand-primary; @@ -42,33 +42,33 @@ // //## Font, line-height, and color for body text, headings, and more. -@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; @font-family-serif: Georgia, "Times New Roman", Times, serif; //** Default monospace fonts for ``, ``, and `

`.
 @font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
 @font-family-base:        @font-family-sans-serif;
 
-@font-size-base:          14px;
+@font-size-base:          13px;
 @font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
 @font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
 
-@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
-@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
-@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
-@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
-@font-size-h5:            @font-size-base;
-@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+@font-size-h1:            56px;
+@font-size-h2:            45px;
+@font-size-h3:            34px;
+@font-size-h4:            24px;
+@font-size-h5:            20px;
+@font-size-h6:            14px;
 
 //** Unit-less `line-height` for use in components like buttons.
-@line-height-base:        1.428571429; // 20/14
+@line-height-base:        1.846; // 20/14
 //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
 @line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
 
 //** By default, this inherits from the ``.
 @headings-font-family:    inherit;
-@headings-font-weight:    500;
+@headings-font-weight:    400;
 @headings-line-height:    1.1;
-@headings-color:          inherit;
+@headings-color:          #444;
 
 
 //== Iconography
@@ -88,7 +88,7 @@
 //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
 
 @padding-base-vertical:     6px;
-@padding-base-horizontal:   12px;
+@padding-base-horizontal:   16px;
 
 @padding-large-vertical:    10px;
 @padding-large-horizontal:  16px;
@@ -99,11 +99,11 @@
 @padding-xs-vertical:       1px;
 @padding-xs-horizontal:     5px;
 
-@line-height-large:         1.33;
+@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
 @line-height-small:         1.5;
 
-@border-radius-base:        4px;
-@border-radius-large:       6px;
+@border-radius-base:        3px;
+@border-radius-large:       3px;
 @border-radius-small:       3px;
 
 //** Global color for active items (e.g., navs or dropdowns).
@@ -144,49 +144,55 @@
 
 @btn-font-weight:                normal;
 
-@btn-default-color:              #333;
+@btn-default-color:              #444;
 @btn-default-bg:                 #fff;
-@btn-default-border:             #ccc;
+@btn-default-border:             transparent;
 
 @btn-primary-color:              #fff;
 @btn-primary-bg:                 @brand-primary;
-@btn-primary-border:             darken(@btn-primary-bg, 5%);
+@btn-primary-border:             transparent;
 
 @btn-success-color:              #fff;
 @btn-success-bg:                 @brand-success;
-@btn-success-border:             darken(@btn-success-bg, 5%);
+@btn-success-border:             transparent;
 
 @btn-info-color:                 #fff;
 @btn-info-bg:                    @brand-info;
-@btn-info-border:                darken(@btn-info-bg, 5%);
+@btn-info-border:                transparent;
 
 @btn-warning-color:              #fff;
 @btn-warning-bg:                 @brand-warning;
-@btn-warning-border:             darken(@btn-warning-bg, 5%);
+@btn-warning-border:             transparent;
 
 @btn-danger-color:               #fff;
 @btn-danger-bg:                  @brand-danger;
-@btn-danger-border:              darken(@btn-danger-bg, 5%);
+@btn-danger-border:              transparent;
 
 @btn-link-disabled-color:        @gray-light;
 
+// Allows for customizing button radius independently from global border radius
+@btn-border-radius-base:         @border-radius-base;
+@btn-border-radius-large:        @border-radius-large;
+@btn-border-radius-small:        @border-radius-small;
+
 
 //== Forms
 //
 //##
 
 //** `` background color
-@input-bg:                       #fff;
+@input-bg:                       transparent;
 //** `` background color
-@input-bg-disabled:              @gray-lighter;
+@input-bg-disabled:              transparent;
 
 //** Text color for ``s
 @input-color:                    @gray;
 //** `` border color
-@input-border:                   #ccc;
+@input-border:                   transparent;
 
 // TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
 //** Default `.form-control` border radius
+// This has no effect on ``s in CSS.
 @input-border-radius:            @border-radius-base;
 //** Large `.form-control` border radius
 @input-border-radius-large:      @border-radius-large;
@@ -197,7 +203,7 @@
 @input-border-focus:             #66afe9;
 
 //** Placeholder text color
-@input-color-placeholder:        #999;
+@input-color-placeholder:        @gray-light;
 
 //** Default `.form-control` height
 @input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
@@ -206,11 +212,14 @@
 //** Small `.form-control` height
 @input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
 
+//** `.form-group` margin
+@form-group-margin-bottom:       15px;
+
 @legend-color:                   @gray-dark;
 @legend-border-color:            #e5e5e5;
 
 //** Background color for textual input addons
-@input-group-addon-bg:           @gray-lighter;
+@input-group-addon-bg:           transparent;
 //** Border color for textual input addons
 @input-group-addon-border-color: @input-border;
 
@@ -232,11 +241,11 @@
 @dropdown-divider-bg:            #e5e5e5;
 
 //** Dropdown link text color.
-@dropdown-link-color:            @gray-dark;
+@dropdown-link-color:            @text-color;
 //** Hover color for dropdown links.
 @dropdown-link-hover-color:      darken(@gray-dark, 5%);
 //** Hover background for dropdown links.
-@dropdown-link-hover-bg:         #f5f5f5;
+@dropdown-link-hover-bg:         @gray-lighter;
 
 //** Active dropdown menu item text color.
 @dropdown-link-active-color:     @component-active-color;
@@ -250,7 +259,7 @@
 @dropdown-header-color:          @gray-light;
 
 //** Deprecated `@dropdown-caret-color` as of v3.1.0
-@dropdown-caret-color:           #000;
+@dropdown-caret-color:           @gray-light;
 
 
 //-- Z-index master list
@@ -265,7 +274,8 @@
 @zindex-popover:           1060;
 @zindex-tooltip:           1070;
 @zindex-navbar-fixed:      1030;
-@zindex-modal:             1040;
+@zindex-modal-background:  1040;
+@zindex-modal:             1050;
 
 
 //== Media queries breakpoints
@@ -347,45 +357,45 @@
 //##
 
 // Basics of a navbar
-@navbar-height:                    50px;
+@navbar-height:                    64px;
 @navbar-margin-bottom:             @line-height-computed;
 @navbar-border-radius:             @border-radius-base;
 @navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
 @navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
 @navbar-collapse-max-height:       340px;
 
-@navbar-default-color:             #777;
-@navbar-default-bg:                #f8f8f8;
-@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
+@navbar-default-color:             @gray-light;
+@navbar-default-bg:                #fff;
+@navbar-default-border:            transparent;
 
 // Navbar links
-@navbar-default-link-color:                #777;
-@navbar-default-link-hover-color:          #333;
+@navbar-default-link-color:                @gray;
+@navbar-default-link-hover-color:          @gray-dark;
 @navbar-default-link-hover-bg:             transparent;
-@navbar-default-link-active-color:         #555;
+@navbar-default-link-active-color:         @gray-dark;
 @navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
 @navbar-default-link-disabled-color:       #ccc;
 @navbar-default-link-disabled-bg:          transparent;
 
 // Navbar brand label
 @navbar-default-brand-color:               @navbar-default-link-color;
-@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
+@navbar-default-brand-hover-color:         @navbar-default-link-hover-color;
 @navbar-default-brand-hover-bg:            transparent;
 
 // Navbar toggle
-@navbar-default-toggle-hover-bg:           #ddd;
-@navbar-default-toggle-icon-bar-bg:        #888;
-@navbar-default-toggle-border-color:       #ddd;
+@navbar-default-toggle-hover-bg:           transparent;
+@navbar-default-toggle-icon-bar-bg:        rgba(0,0,0,0.5);
+@navbar-default-toggle-border-color:       transparent;
 
 
-// Inverted navbar
+//=== Inverted navbar
 // Reset inverted navbar basics
-@navbar-inverse-color:                      lighten(@gray-light, 15%);
-@navbar-inverse-bg:                         #222;
-@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-color:                      @gray-light;
+@navbar-inverse-bg:                         @brand-primary;
+@navbar-inverse-border:                     transparent;
 
 // Inverted navbar links
-@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
+@navbar-inverse-link-color:                 lighten(@brand-primary, 30%);
 @navbar-inverse-link-hover-color:           #fff;
 @navbar-inverse-link-hover-bg:              transparent;
 @navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
@@ -398,10 +408,10 @@
 @navbar-inverse-brand-hover-color:          #fff;
 @navbar-inverse-brand-hover-bg:             transparent;
 
-// Inverted navbar toggle
-@navbar-inverse-toggle-hover-bg:            #333;
-@navbar-inverse-toggle-icon-bar-bg:         #fff;
-@navbar-inverse-toggle-border-color:        #333;
+// Inverted navbar toggle\
+@navbar-inverse-toggle-hover-bg:            transparent;
+@navbar-inverse-toggle-icon-bar-bg:         rgba(0,0,0,0.5);
+@navbar-inverse-toggle-border-color:        transparent;
 
 
 //== Navs
@@ -416,15 +426,15 @@
 @nav-disabled-link-hover-color:             @gray-light;
 
 //== Tabs
-@nav-tabs-border-color:                     #ddd;
+@nav-tabs-border-color:                     transparent;
 
 @nav-tabs-link-hover-border-color:          @gray-lighter;
 
-@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-bg:             transparent;
 @nav-tabs-active-link-hover-color:          @gray;
-@nav-tabs-active-link-hover-border-color:   #ddd;
+@nav-tabs-active-link-hover-border-color:   transparent;
 
-@nav-tabs-justified-link-border-color:            #ddd;
+@nav-tabs-justified-link-border-color:            @nav-tabs-border-color;
 @nav-tabs-justified-active-link-border-color:     @body-bg;
 
 //== Pills
@@ -476,29 +486,30 @@
 
 @jumbotron-padding:              30px;
 @jumbotron-color:                inherit;
-@jumbotron-bg:                   @gray-lighter;
-@jumbotron-heading-color:        inherit;
+@jumbotron-bg:                   #f9f9f9;
+@jumbotron-heading-color:        @headings-color;
 @jumbotron-font-size:            ceil((@font-size-base * 1.5));
+@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));
 
 
 //== Form states and alerts
 //
 //## Define colors for form feedback states and, by default, alerts.
 
-@state-success-text:             #3c763d;
+@state-success-text:             @brand-success;
 @state-success-bg:               #dff0d8;
 @state-success-border:           darken(spin(@state-success-bg, -10), 5%);
 
-@state-info-text:                #31708f;
-@state-info-bg:                  #d9edf7;
+@state-info-text:                @brand-info;
+@state-info-bg:                  #e1bee7;
 @state-info-border:              darken(spin(@state-info-bg, -10), 7%);
 
-@state-warning-text:             #8a6d3b;
-@state-warning-bg:               #fcf8e3;
+@state-warning-text:             @brand-warning;
+@state-warning-bg:               #ffe0b2;
 @state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
 
-@state-danger-text:              #a94442;
-@state-danger-bg:                #f2dede;
+@state-danger-text:              @brand-danger;
+@state-danger-bg:                #f9bdbb;
 @state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
 
 
@@ -511,7 +522,7 @@
 //** Tooltip text color
 @tooltip-color:               #fff;
 //** Tooltip background color
-@tooltip-bg:                  #000;
+@tooltip-bg:                  #727272;
 @tooltip-opacity:             .9;
 
 //** Tooltip arrow width
@@ -529,9 +540,9 @@
 //** Popover maximum width
 @popover-max-width:                   276px;
 //** Popover border color
-@popover-border-color:                rgba(0,0,0,.2);
+@popover-border-color:                transparent;
 //** Popover fallback border color
-@popover-fallback-border-color:       #ccc;
+@popover-fallback-border-color:       transparent;
 
 //** Popover title background color
 @popover-title-bg:                    darken(@popover-bg, 3%);
@@ -544,7 +555,7 @@
 //** Popover outer arrow width
 @popover-arrow-outer-width:           (@popover-arrow-width + 1);
 //** Popover outer arrow color
-@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+@popover-arrow-outer-color:           fadein(@popover-border-color, 7.5%);
 //** Popover outer arrow fallback color
 @popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
 
@@ -587,7 +598,7 @@
 //** Background color of modal content area
 @modal-content-bg:                             #fff;
 //** Modal content border color
-@modal-content-border-color:                   rgba(0,0,0,.2);
+@modal-content-border-color:                   transparent;
 //** Modal content border color **for IE8**
 @modal-content-fallback-border-color:          #999;
 
@@ -596,7 +607,7 @@
 //** Modal backdrop opacity
 @modal-backdrop-opacity:      .5;
 //** Modal header border color
-@modal-header-border-color:   #e5e5e5;
+@modal-header-border-color:   transparent;
 //** Modal footer border color
 @modal-footer-border-color:   @modal-header-border-color;
 
@@ -709,21 +720,21 @@
 @panel-primary-border:        @brand-primary;
 @panel-primary-heading-bg:    @brand-primary;
 
-@panel-success-text:          @state-success-text;
+@panel-success-text:          #fff;
 @panel-success-border:        @state-success-border;
-@panel-success-heading-bg:    @state-success-bg;
+@panel-success-heading-bg:    @brand-success;
 
-@panel-info-text:             @state-info-text;
+@panel-info-text:             #fff;
 @panel-info-border:           @state-info-border;
-@panel-info-heading-bg:       @state-info-bg;
+@panel-info-heading-bg:       @brand-info;
 
-@panel-warning-text:          @state-warning-text;
+@panel-warning-text:          #fff;
 @panel-warning-border:        @state-warning-border;
-@panel-warning-heading-bg:    @state-warning-bg;
+@panel-warning-heading-bg:    @brand-warning;
 
-@panel-danger-text:           @state-danger-text;
+@panel-danger-text:           #fff;
 @panel-danger-border:         @state-danger-border;
-@panel-danger-heading-bg:     @state-danger-bg;
+@panel-danger-heading-bg:     @brand-danger;
 
 
 //== Thumbnails
@@ -749,8 +760,8 @@
 //
 //##
 
-@well-bg:                     #f5f5f5;
-@well-border:                 darken(@well-bg, 7%);
+@well-bg:                     #f9f9f9;
+@well-border:                 transparent;
 
 
 //== Badges
@@ -767,7 +778,7 @@
 //** Badge background color in active nav link
 @badge-active-bg:             #fff;
 
-@badge-font-weight:           bold;
+@badge-font-weight:           normal;
 @badge-line-height:           1;
 @badge-border-radius:         10px;
 
@@ -809,9 +820,9 @@
 //
 //##
 
-@close-font-weight:           bold;
+@close-font-weight:           normal;
 @close-color:                 #000;
-@close-text-shadow:           0 1px 0 #fff;
+@close-text-shadow:           none;
 
 
 //== Code
diff --git a/public/less/admin/bootswatch.less b/public/less/admin/bootswatch.less
new file mode 100644
index 0000000000..cceb643cf6
--- /dev/null
+++ b/public/less/admin/bootswatch.less
@@ -0,0 +1,607 @@
+// Paper 3.3.5
+// Bootswatch
+// -----------------------------------------------------
+
+@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
+
+// Navbar =====================================================================
+
+.navbar {
+  border: none;
+  .box-shadow(0 1px 2px rgba(0,0,0,.3));
+
+  &-brand {
+    font-size: 24px;
+  }
+
+  &-inverse {
+    .form-control {
+      color: #fff;
+      .placeholder(@navbar-inverse-link-color);
+
+      &[type=text],
+      &[type=password] {
+        .box-shadow(inset 0 -1px 0 @navbar-inverse-link-color);
+
+        &:focus {
+          .box-shadow(inset 0 -2px 0 #fff);
+        }
+      }
+    }
+  }
+}
+
+// Buttons ====================================================================
+
+#btn(@class,@bg) {
+  .btn-@{class} {
+    background-size: 200%;
+    background-position: 50%;
+
+    &:focus {
+      background-color: @bg;
+    }
+
+    &:hover,
+    &:active:hover {
+      background-color: darken(@bg, 6%);
+    }
+
+    &:active {
+      background-color: darken(@bg, 12%);
+      #gradient > .radial(darken(@bg, 12%) 10%, @bg 11%);
+      background-size: 1000%;
+      .box-shadow(2px 2px 4px rgba(0,0,0,.4));
+    }
+  }
+}
+
+#btn(default,@btn-default-bg);
+#btn(primary,@btn-primary-bg);
+#btn(success,@btn-success-bg);
+#btn(info,@btn-info-bg);
+#btn(warning,@btn-warning-bg);
+#btn(danger,@btn-danger-bg);
+#btn(link,#fff);
+
+.btn {
+  text-transform: uppercase;
+  border: none;
+  .box-shadow(1px 1px 4px rgba(0,0,0,.4));
+  .transition(all 0.4s);
+
+  &-link {
+    border-radius: @btn-border-radius-base;
+    .box-shadow(none);
+    color: @btn-default-color;
+
+    &:hover,
+    &:focus {
+      .box-shadow(none);
+      color: @btn-default-color;
+      text-decoration: none;
+    }
+  }
+
+  &-default {
+
+    &.disabled {
+      background-color: rgba(0, 0, 0, 0.1);
+      color: rgba(0, 0, 0, 0.4);
+      opacity: 1;
+    }
+  }
+}
+
+.btn-group {
+  .btn + .btn,
+  .btn + .btn-group,
+  .btn-group + .btn,
+  .btn-group + .btn-group {
+    margin-left: 0;
+  }
+
+  &-vertical {
+    > .btn + .btn,
+    > .btn + .btn-group,
+    > .btn-group + .btn,
+    > .btn-group + .btn-group {
+      margin-top: 0;
+    }
+  }
+}
+
+// Typography =================================================================
+
+body {
+  -webkit-font-smoothing: antialiased;
+  letter-spacing: .1px;
+}
+
+p {
+  margin: 0 0 1em;
+}
+
+input,
+button {
+  -webkit-font-smoothing: antialiased;
+  letter-spacing: .1px;
+}
+
+a {
+  .transition(all 0.2s);
+}
+
+// Tables =====================================================================
+
+.table-hover {
+  > tbody > tr,
+  > tbody > tr > th,
+  > tbody > tr > td {
+    .transition(all 0.2s);
+  }
+}
+
+// Forms ======================================================================
+
+label {
+  font-weight: normal;
+}
+
+textarea,
+textarea.form-control,
+input.form-control,
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=number],
+[type=text].form-control,
+[type=password].form-control,
+[type=email].form-control,
+[type=tel].form-control,
+[contenteditable].form-control {
+  padding: 0;
+  border: none;
+  border-radius: 0;
+  -webkit-appearance: none;
+  .box-shadow(inset 0 -1px 0 #ddd);
+  font-size: 16px;
+
+  &:focus {
+    .box-shadow(inset 0 -2px 0 @brand-primary);
+  }
+
+  &[disabled],
+  &[readonly] {
+    .box-shadow(none);
+    border-bottom: 1px dotted #ddd;
+  }
+
+  &.input {
+    &-sm {
+      font-size: @font-size-small;
+    }
+
+    &-lg {
+      font-size: @font-size-large;
+    }
+  }
+}
+
+select,
+select.form-control {
+  border: 0;
+  border-radius: 0;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  padding-left: 0;
+  padding-right: 0\9; // remove padding for < ie9 since default arrow can't be removed
+  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
+  background-size: 13px;
+  background-repeat: no-repeat;
+  background-position: right center;
+  .box-shadow(inset 0 -1px 0 #ddd);
+  font-size: 16px;
+  line-height: 1.5;
+
+  &::-ms-expand {
+    display: none;
+  }
+
+  &.input {
+    &-sm {
+      font-size: @font-size-small;
+    }
+
+    &-lg {
+      font-size: @font-size-large;
+    }
+  }
+
+  &:focus {
+    .box-shadow(inset 0 -2px 0 @brand-primary);
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
+  }
+
+  &[multiple] {
+    background: none;
+  }
+}
+
+.radio,
+.radio-inline,
+.checkbox,
+.checkbox-inline {
+  label {
+    padding-left: 25px;
+  }
+
+  input[type="radio"],
+  input[type="checkbox"] {
+    margin-left: -25px;
+  }
+}
+
+input[type="radio"],
+.radio input[type="radio"],
+.radio-inline input[type="radio"] {
+  position: relative;
+  margin-top: 6px;
+  margin-right: 4px;
+  vertical-align: top;
+  border: none;
+  background-color: transparent;
+  -webkit-appearance: none;
+  appearance: none;
+  cursor: pointer;
+
+  &:focus {
+    outline: none;
+  }
+
+  &:before,
+  &:after {
+    content: "";
+    display: block;
+    width: 18px;
+    height: 18px;
+    border-radius: 50%;
+    .transition(240ms);
+  }
+
+  &:before {
+    position: absolute;
+    left: 0;
+    top: -3px;
+    background-color: @brand-primary;
+    .scale(0);
+  }
+
+  &:after {
+    position: relative;
+    top: -3px;
+    border: 2px solid @gray;
+  }
+
+  &:checked:before {
+    .scale(0.5);
+  }
+
+  &:disabled:checked:before {
+    background-color: @gray-light;
+  }
+
+  &:checked:after {
+    border-color: @brand-primary;
+  }
+
+  &:disabled:after,
+  &:disabled:checked:after {
+    border-color: @gray-light;
+  }
+}
+
+input[type="checkbox"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: relative;
+  border: none;
+  margin-bottom: -4px;
+  -webkit-appearance: none;
+  appearance: none;
+  cursor: pointer;
+
+  &:focus {
+    outline: none;
+  }
+
+  &:after {
+    content: "";
+    display: block;
+    width: 18px;
+    height: 18px;
+    margin-top: -2px;
+    margin-right: 5px;
+    border: 2px solid @gray;
+    border-radius: 2px;
+    .transition(240ms);
+  }
+
+  &:checked:before {
+    content: "";
+    position: absolute;
+    top: 0;
+    left: 6px;
+    display: table;
+    width: 6px;
+    height: 12px;
+    border: 2px solid #fff;
+    border-top-width: 0;
+    border-left-width: 0;
+    .rotate(45deg);
+  }
+
+  &:checked:after {
+    background-color: @brand-primary;
+    border-color: @brand-primary;
+  }
+
+  &:disabled:after {
+    border-color: @gray-light;
+  }
+
+  &:disabled:checked:after {
+    background-color: @gray-light;
+    border-color: transparent;
+  }
+}
+
+.has-warning {
+  input:not([type=checkbox]),
+  .form-control,
+  input.form-control[readonly],
+  input[type=text][readonly],
+  [type=text].form-control[readonly],
+  input:not([type=checkbox]):focus,
+  .form-control:focus {
+    border-bottom: none;
+    .box-shadow(inset 0 -2px 0 @brand-warning);
+  }
+}
+
+.has-error {
+  input:not([type=checkbox]),
+  .form-control,
+  input.form-control[readonly],
+  input[type=text][readonly],
+  [type=text].form-control[readonly],
+  input:not([type=checkbox]):focus,
+  .form-control:focus {
+    border-bottom: none;
+    .box-shadow(inset 0 -2px 0 @brand-danger);
+  }
+}
+
+.has-success {
+  input:not([type=checkbox]),
+  .form-control,
+  input.form-control[readonly],
+  input[type=text][readonly],
+  [type=text].form-control[readonly],
+  input:not([type=checkbox]):focus,
+  .form-control:focus {
+    border-bottom: none;
+    .box-shadow(inset 0 -2px 0 @brand-success);
+  }
+}
+
+// Remove the Bootstrap feedback styles for input addons
+.input-group-addon {
+  .has-warning &, .has-error &, .has-success & {
+    color: @input-color;
+    border-color: @input-group-addon-border-color;
+    background-color: @input-group-addon-bg;
+  }
+}
+
+// Navs =======================================================================
+
+.nav-tabs {
+  > li > a,
+  > li > a:focus {
+    margin-right: 0;
+    background-color: transparent;
+    border: none;
+    color: @navbar-default-link-color;
+    .box-shadow(inset 0 -1px 0 #ddd);
+    .transition(all 0.2s);
+
+    &:hover {
+      background-color: transparent;
+      .box-shadow(inset 0 -2px 0 @brand-primary);
+      color: @brand-primary;
+    }
+  }
+
+  & > li.active > a,
+  & > li.active > a:focus {
+    border: none;
+    .box-shadow(inset 0 -2px 0 @brand-primary);
+    color: @brand-primary;
+
+    &:hover {
+      border: none;
+      color: @brand-primary;
+    }
+  }
+
+  & > li.disabled > a {
+    .box-shadow(inset 0 -1px 0 #ddd);
+  }
+
+  &.nav-justified {
+
+    & > li > a,
+    & > li > a:hover,
+    & > li > a:focus,
+    & > .active > a,
+    & > .active > a:hover,
+    & > .active > a:focus {
+      border: none;
+    }
+  }
+
+  .dropdown-menu {
+    margin-top: 0;
+  }
+}
+
+.dropdown-menu {
+  margin-top: 0;
+  border: none;
+  .box-shadow(0 1px 4px rgba(0,0,0,.3));
+}
+
+// Indicators =================================================================
+
+.alert {
+  border: none;
+  color: #fff;
+
+  &-success {
+    background-color: @brand-success;
+  }
+
+  &-info {
+    background-color: @brand-info;
+  }
+
+  &-warning {
+    background-color: @brand-warning;
+  }
+
+  &-danger {
+    background-color: @brand-danger;
+  }
+
+  a:not(.close),
+  .alert-link {
+    color: #fff;
+    font-weight: bold;
+  }
+
+  .close {
+    color: #fff;
+  }
+}
+
+.badge {
+  padding: 3px 6px 5px;
+}
+
+.progress {
+  position: relative;
+  z-index: 1;
+  height: 6px;
+  border-radius: 0;
+
+  .box-shadow(none);
+
+  &-bar {
+    .box-shadow(none);
+
+    &:last-child {
+      border-radius: 0 3px 3px 0;
+    }
+
+    &:last-child {
+      &:before {
+        display: block;
+        content: "";
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        left: 0;
+        right: 0;
+        z-index: -1;
+        background-color: lighten(@progress-bar-bg, 35%);
+      }
+    }
+
+    &-success:last-child.progress-bar:before {
+      background-color: lighten(@brand-success, 35%);
+    }
+
+    &-info:last-child.progress-bar:before {
+      background-color: lighten(@brand-info, 45%);
+    }
+    &-warning:last-child.progress-bar:before {
+      background-color: lighten(@brand-warning, 35%);
+    }
+
+    &-danger:last-child.progress-bar:before {
+      background-color: lighten(@brand-danger, 25%);
+    }
+  }
+}
+
+// Progress bars ==============================================================
+
+// Containers =================================================================
+
+.close {
+  font-size: 34px;
+  font-weight: 300;
+  line-height: 24px;
+  opacity: 0.6;
+  .transition(all 0.2s);
+
+  &:hover {
+    opacity: 1;
+  }
+}
+
+.list-group {
+
+  &-item {
+    padding: 15px;
+  }
+
+  &-item-text {
+    color: @gray-light;
+  }
+}
+
+.well {
+  border-radius: 0;
+  .box-shadow(none);
+}
+
+.panel {
+  border: none;
+  border-radius: 2px;
+  .box-shadow(0 1px 4px rgba(0,0,0,.3));
+
+  &-heading {
+    border-bottom: none;
+  }
+
+  &-footer {
+    border-top: none;
+  }
+}
+
+.popover {
+  border: none;
+  .box-shadow(0 1px 4px rgba(0,0,0,.3));
+}
+
+.carousel {
+  &-caption {
+    h1, h2, h3, h4, h5, h6 {
+      color: inherit;
+    }
+  }
+}
+

From fed87dded678ef9b4a48a3c6c1177a923f6f408e Mon Sep 17 00:00:00 2001
From: psychobunny 
Date: Wed, 19 Aug 2015 12:02:38 -0400
Subject: [PATCH 105/284] sayonara, acp menu

---
 public/less/admin/admin.less                  | 138 ------------------
 public/src/admin/admin.js                     |  40 -----
 public/vendor/nanoscroller/nanoscroller.css   |  54 -------
 .../vendor/nanoscroller/nanoscroller.min.js   |   3 -
 src/views/admin/header.tpl                    |  10 +-
 5 files changed, 2 insertions(+), 243 deletions(-)
 delete mode 100644 public/vendor/nanoscroller/nanoscroller.css
 delete mode 100644 public/vendor/nanoscroller/nanoscroller.min.js

diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less
index f6b4e5d130..192de77f2c 100644
--- a/public/less/admin/admin.less
+++ b/public/less/admin/admin.less
@@ -23,15 +23,6 @@
 	padding-top: 70px;
 	background: #f0f0f0;
 
-	.container {
-		width: 100% !important;
-		padding: 0px 15px;
-	}
-
-	.jumbotron {
-		padding: @jumbotron-padding;
-	}
-
 	.btn {
 		border-radius: 0;
 	}
@@ -53,129 +44,10 @@
 		color: #fff;
 	}
 
-	&.mobile {
-		#content {
-			padding-left: 20px;
-		}
-
-		#main-menu {
-			width: 200px;
-			height: 100%;
-
-
-			-webkit-transform: translateX(-190px);
-    		transform: translateX(-190px);
-
-			&.transitioning {
-				.transition(.3s ease all);
-			}
-
-			&.open {
-				-webkit-transform: translateX(0);
-    			transform: translateX(0);
-			}
-		}
-	}
-
-
-	#main-menu {
-		position: fixed;
-		width: 200px;
-		height: 100%;
-		padding-top: 50px;
-		top: 0px;
-		left: 0px;
-		background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQMAAACxAfVuAAAAA3NCSVQICAjb4U/gAAAABlBMVEU5OTk1NTVxIqOYAAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABZ0RVh0Q3JlYXRpb24gVGltZQAxNC8xMS8xMc34jO8AAAFQSURBVEiJ7ZUxbsMwDEV/68Fbc4M4aC+QsYOhXstDELg3c9CLqPAFNHYo4tKkEBoMhxgoPEkD8aRBIkV+Enh4VRFvswkLwu4HY09m6pXQ/D6NA5lpUMLHtRojmSkq4RyqS2xD9Z2U0DX1Zzo19ZCU6KW6Tx2ZJT1+SDddZuQ7MyEEcqTdk1ECO0b7KSqBQ9i3ElEmcLAv7xJ7JvmW54P8Uqbtlrx5vL1+zDm699ONyI09NDX/zVdUwmlHmeGvVEJHHvB/J6UVh3wTZbtPSpKjMBeHEkwZMcEUHBNMaTLdivh1QRvnyIjJ99ONyI3dSIgJRkJMsMKQdKw5XEpI8m4kxARTRqJ3U3DSGUxpSg8xEpJus9kyEpLXXT/diNzYjYSYYCTEBCMMphWHRkJyp5GQ5MjtyW73dvu8kdDGOSrzqMyjMo/+KUdlHpV5VObR/foD6jrYlpchAFAAAAAASUVORK5CYII=);
-		z-index: 1;
-		overflow-y: auto;
-
-		.nano-content {
-			top: 51px !important;
-		}
-
-		.sidebar-nav {
-			overflow: hidden;
-			.transition(.4s ease-in-out max-height);
-			max-height: 100%;
-			cursor: pointer;
-			max-height: 38px;
-
-			&.open {
-				max-height: 500px;
-			}
-
-			.nav-header {
-				color: #fff;
-				border-top: 1px solid #32353E;
-				border-bottom: 1px solid #1A1C20;
-				background-color: #272727;
-				text-shadow: 0px 0px 2px #111;
-				padding: 10px;
-				.user-select(none);
-			}
-
-			.nav-list {
-				background: #232323;
-
-				li {
-					i {
-						margin-right: 6px;
-					}
-
-					&:hover a {
-						background-color: #3f3f3f;
-
-						span {
-							opacity: 0.8;
-						}
-					}
-
-					&.active a {
-						padding-left: 20px;
-						background-color: #3f3f3f;
-
-						span {
-							opacity: 0;
-						}
-					}
-
-					a {
-						color: white;
-						padding: 7px 15px;
-						font-size: 13px;
-						padding-left: 11px;
-						outline: 0;
-
-						span {
-							opacity: 0;
-							margin-right: -8px;
-							.transition(.3s ease-in opacity);
-						}
-
-						-webkit-transition: background-color .3s ease-in, padding-left .3s ease-in;
-						   -moz-transition: background-color .3s ease-in, padding-left .3s ease-in;
-						     -o-transition: background-color .3s ease-in, padding-left .3s ease-in;
-						        transition: background-color .3s ease-in, padding-left .3s ease-in;
-					}
-				}
-			}
-		}
-	}
-
-	#content {
-		padding-left: 215px;
-		padding-right: 15px;
-	}
-
 	#breadcrumbs {
 		cursor: default;
 	}
 
-	.wrapper {
-		width: 100%;
-		overflow-y: hidden;
-	}
-
 	.acp-panel-heading {
 		padding: 7px 14px;
 		border: 0;
@@ -312,16 +184,6 @@
   display: inline-block;
 }
 
-@media (min-width: 1200px) {
-	.acp-sidebar {
-		position: fixed;
-		top: 70px;
-		right: 15px;
-		width: initial;
-		max-width: calc( ~"(100% - 200px)/4" );
-	}
-}
-
 .category-settings-form {
 	h3 {
 		margin-top: 0;
diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js
index 22d5319708..d2ea2a9b48 100644
--- a/public/src/admin/admin.js
+++ b/public/src/admin/admin.js
@@ -3,7 +3,6 @@
 
 (function() {
 	$(document).ready(function() {
-		setupMenu();
 		setupKeybindings();
 
 		if(!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
@@ -18,15 +17,12 @@
 			var url = data.url;
 
 			selectMenuItem(data.url);
-			setupHeaderMenu();
 			setupRestartLinks();
 		});
 
 		$(window).on('action:admin.settingsLoaded', setupCheckboxes);
 
 		$('[component="logout"]').on('click', app.logout);
-
-		$(window).resize(setupHeaderMenu);
 	});
 
 	socket.emit('admin.config.get', function(err, config) {
@@ -45,27 +41,6 @@
 		$(window).trigger('action:config.loaded');
 	});
 
-	function setupMenu() {
-		var listElements = $('.sidebar-nav li');
-
-		listElements.on('click', function() {
-			var $this = $(this);
-
-			if ($this.hasClass('nav-header')) {
-				$this.parents('.sidebar-nav').toggleClass('open').bind('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', function (ev) {
-					$('.nano').nanoScroller();
-				});
-			} else {
-				listElements.removeClass('active');
-				$this.addClass('active');
-			}
-		});
-
-		$('.nano').nanoScroller();
-
-		$('#main-menu .nav-list > li a').append(' ');
-	}
-
 	function setupKeybindings() {
 		Mousetrap.bind('ctrl+shift+a r', function() {
 			require(['admin/modules/instance'], function(instance) {
@@ -138,21 +113,6 @@
 		$('#breadcrumbs').html(caret + Array.prototype.slice.call(arguments).join(caret));
 	}
 
-	function setupHeaderMenu() {
-		var env = utils.findBootstrapEnvironment();
-
-		if (env !== 'lg') {
-			if ($('.mobile-header').length || $('#content .col-lg-9').first().height() < 2000) {
-				return;
-			}
-
-			($('#content .col-lg-3').first().clone().addClass('mobile-header'))
-				.insertBefore($('#content .col-lg-9').first());
-		} else {
-			$('.mobile-header').remove();
-		}
-	}
-
 	function setupRestartLinks() {
 		$('.restart').off('click').on('click', function() {
 			bootbox.confirm('Are you sure you wish to restart NodeBB?', function(confirm) {
diff --git a/public/vendor/nanoscroller/nanoscroller.css b/public/vendor/nanoscroller/nanoscroller.css
deleted file mode 100644
index 4bb360f615..0000000000
--- a/public/vendor/nanoscroller/nanoscroller.css
+++ /dev/null
@@ -1,54 +0,0 @@
-/** initial setup **/
-.nano {
-  position : relative;
-  width    : 100%;
-  height   : 100%;
-  overflow : hidden;
-}
-.nano > .nano-content {
-  position      : absolute;
-  overflow      : scroll;
-  overflow-x    : hidden;
-  top           : 0;
-  right         : 0;
-  bottom        : 0;
-  left          : 0;
-}
-.nano > .nano-content:focus {
-  outline: thin dotted;
-}
-.nano > .nano-content::-webkit-scrollbar {
-  display: none;
-}
-.has-scrollbar > .nano-content::-webkit-scrollbar {
-  display: block;
-}
-.nano > .nano-pane {
-  background : rgba(0,0,0,.25);
-  position   : absolute;
-  width      : 10px;
-  right      : 0;
-  top        : 0;
-  bottom     : 0;
-  visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
-  opacity    : .01;
-  -webkit-transition    : .2s;
-  -moz-transition       : .2s;
-  -o-transition         : .2s;
-  transition            : .2s;
-  -moz-border-radius    : 5px;
-  -webkit-border-radius : 5px;
-  border-radius         : 5px;
-}
-.nano > .nano-pane > .nano-slider {
-  background: rgba(255, 255, 255, 0.3);
-  position              : relative;
-  margin                : 0 1px;
-  -moz-border-radius    : 3px;
-  -webkit-border-radius : 3px;
-  border-radius         : 3px;
-}
-.nano:hover > .nano-pane, .nano-pane.active, .nano-pane.flashed {
-  visibility : visible\9; /* Target only IE7 and IE8 with this hack */
-  opacity    : 0.99;
-}
diff --git a/public/vendor/nanoscroller/nanoscroller.min.js b/public/vendor/nanoscroller/nanoscroller.min.js
deleted file mode 100644
index bbe7d3c6d5..0000000000
--- a/public/vendor/nanoscroller/nanoscroller.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! nanoScrollerJS - v0.8.4 - (c) 2014 James Florentino; Licensed MIT */
-
-!function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H;z={paneClass:"nano-pane",sliderClass:"nano-slider",contentClass:"nano-content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},u="scrollbar",t="scroll",l="mousedown",m="mouseenter",n="mousemove",p="mousewheel",o="mouseup",s="resize",h="drag",i="enter",w="up",r="panedown",f="DOMMouseScroll",g="down",x="wheel",j="keydown",k="keyup",v="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,D=b.requestAnimationFrame,y=b.cancelAnimationFrame,F=c.createElement("div").style,H=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in F)return d[a].substr(0,d[a].length-1);return!1}(),G=function(a){return H===!1?!1:""===H?a:H+a.charAt(0).toUpperCase()+a.substr(1)},E=G("transform"),B=E!==!1,A=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=t,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},C=function(){var a,c,d;return c=b.navigator.userAgent,(a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c))?(d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23):!1},q=function(){function j(d,f){this.el=d,this.options=f,e||(e=A()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.body=this.doc.find("body"),this.$content=this.$el.children("."+f.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.previousPosition=0,this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return j.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===w&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===p){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===w&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},j.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},j.prototype.updateScrollValues=function(){var a,b;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,b=this.contentScrollTop>this.previousPosition?"down":this.contentScrollTop=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1}}(this),up:function(a){return function(){return a.isBeingDragged=!1,a.pane.removeClass("active"),a.doc.unbind(n,a.events[h]).unbind(o,a.events[w]),a.body.unbind(m,a.events[i]),!1}}(this),resize:function(a){return function(){a.reset()}}(this),panedown:function(a){return function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1}}(this),scroll:function(a){return function(b){a.updateScrollValues(),a.isBeingDragged||(a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.setOnScrollStyles()),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,w),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))}}(this),wheel:function(a){return function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}(this),enter:function(a){return function(b){var c;if(a.isBeingDragged)return 1!==(b.buttons||b.which)?(c=a.events)[w].apply(c,arguments):void 0}}(this)}},j.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(s,a[s]),this.iOSNativeScrolling||(this.slider.bind(l,a[g]),this.pane.bind(l,a[r]).bind(""+p+" "+f,a[x])),this.$content.bind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(s,a[s]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.generate=function(){var a,c,d,f,g,h,i;return f=this.options,h=f.paneClass,i=f.sliderClass,a=f.contentClass,(g=this.$el.children("."+h)).length||g.children("."+i).length||this.$el.append('
'),this.pane=this.$el.children("."+h),this.slider=this.pane.find("."+i),0===e&&C()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/[^0-9.]+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass("has-scrollbar")),null!=c&&this.$content.css(c),this},j.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},j.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l,m,n;return this.iOSNativeScrolling?void(this.contentHeight=this.content.scrollHeight):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),a=this.content,f=a.style,g=f.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,l=parseInt(this.$el.css("max-height"),10),l>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>l?l:a.scrollHeight)),i=this.pane.outerHeight(!1),k=parseInt(this.pane.css("top"),10),h=parseInt(this.pane.css("bottom"),10),j=i+k+h,n=Math.round(j/b*j),nthis.options.sliderMaxHeight&&(n=this.options.sliderMaxHeight),g===t&&f.overflowX!==t&&(n+=e),this.maxSliderTop=j-n,this.contentHeight=b,this.paneHeight=i,this.paneOuterHeight=j,this.sliderHeight=n,this.paneTop=k,this.slider.height(n),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&g!==t?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&g===t?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),c=this.$content.css("position"),("static"===c||"relative"===c)&&(m=parseInt(this.$content.css("right"),10),m&&this.$content.css({right:"",marginRight:m})),this)},j.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop(this.maxScrollTop*this.sliderY/this.maxSliderTop),this.iOSNativeScrolling||(this.updateScrollValues(),this.setOnScrollStyles()),this):void 0},j.prototype.scrollBottom=function(a){return this.isActive?(this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTop=function(a){return this.isActive?(this.$content.scrollTop(+a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTo=function(a){return this.isActive?(this.scrollTop(this.$el.find(a).get(0).offsetTop),this):void 0},j.prototype.stop=function(){return y&&this.scrollRAF&&(y(this.scrollRAF),this.scrollRAF=null),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},j.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass("has-scrollbar")&&(this.$el.removeClass("has-scrollbar"),this.$content.css({right:""})),this},j.prototype.flash=function(){return!this.iOSNativeScrolling&&this.isActive?(this.reset(),this.pane.addClass("flashed"),setTimeout(function(a){return function(){a.pane.removeClass("flashed")}}(this),this.options.flashDelay),this):void 0},j}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},z,b),this.nanoscroller=d=new q(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),null!=b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(null!=b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=q}(jQuery,window,document); \ No newline at end of file diff --git a/src/views/admin/header.tpl b/src/views/admin/header.tpl index 9516b945d7..7e866a3161 100644 --- a/src/views/admin/header.tpl +++ b/src/views/admin/header.tpl @@ -148,11 +148,5 @@
- -
- -
\ No newline at end of file + +
\ No newline at end of file From e434942a28d17b4ec907ff0ac2b759d0f38b1cd9 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 12:36:42 -0400 Subject: [PATCH 106/284] first pass on settings design --- public/less/admin/admin.less | 9 ++++++++- public/less/admin/settings.less | 5 +++++ src/views/admin/settings/footer.tpl | 12 ++---------- src/views/admin/settings/general.tpl | 29 ++++++++++++++++------------ src/views/admin/settings/header.tpl | 2 +- 5 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 public/less/admin/settings.less diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 192de77f2c..b1438799ac 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -14,6 +14,7 @@ @import "./extend/plugins"; @import "./extend/rewards"; @import "./advanced/database"; +@import "./settings"; @import "./modules/alerts"; @import "./modules/selectable"; @@ -21,7 +22,13 @@ .admin { padding-top: 70px; - background: #f0f0f0; + background: #fff; + font-size: 14px; + + label { + font-weight: 700; + } + .btn { border-radius: 0; diff --git a/public/less/admin/settings.less b/public/less/admin/settings.less new file mode 100644 index 0000000000..13fed59c88 --- /dev/null +++ b/public/less/admin/settings.less @@ -0,0 +1,5 @@ +.settings { + .settings-header { + font-weight: 700; + } +} \ No newline at end of file diff --git a/src/views/admin/settings/footer.tpl b/src/views/admin/settings/footer.tpl index 78e62335c5..f20e3294c7 100644 --- a/src/views/admin/settings/footer.tpl +++ b/src/views/admin/settings/footer.tpl @@ -1,14 +1,6 @@
- -
-
-
Save Settings
-
- - -
-
-
+ - From aec4ee53921e2f35b56af52e18dd36a8cf1792c4 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 19 Aug 2015 12:47:57 -0400 Subject: [PATCH 109/284] crash fix --- src/middleware/middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 6bab0678e6..e4e5ebbc6f 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -297,7 +297,7 @@ middleware.renderHeader = function(req, res, callback) { templateValues.customCSS = results.customCSS; templateValues.customJS = results.customJS; templateValues.maintenanceHeader = parseInt(meta.config.maintenanceMode, 10) === 1 && !results.isAdmin; - templateValues.defaultLang = res.locals.config.defaultLang; + templateValues.defaultLang = meta.config.defaultLang || 'en_GB'; templateValues.template = {name: res.locals.template}; templateValues.template[res.locals.template] = true; From acb1e8a495c80d8706c48518de39da71218c9256 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 12:48:33 -0400 Subject: [PATCH 110/284] added a tweaked mdl.css that works with BS --- public/vendor/mdl/mdl.css | 9724 +++++++++++++++++++++++++++++++++ public/vendor/mdl/mdl.min.css | 1 + src/views/admin/header.tpl | 3 + 3 files changed, 9728 insertions(+) create mode 100644 public/vendor/mdl/mdl.css create mode 100644 public/vendor/mdl/mdl.min.css diff --git a/public/vendor/mdl/mdl.css b/public/vendor/mdl/mdl.css new file mode 100644 index 0000000000..c037532647 --- /dev/null +++ b/public/vendor/mdl/mdl.css @@ -0,0 +1,9724 @@ +/** + * material-design-lite - Material Design Components in CSS, JS and HTML + * @version v1.0.3 + * @license Apache-2.0 + * @copyright 2015 Google, Inc. + * @link https://github.com/google/material-design-lite + */ +@charset "UTF-8"; +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Material Design Lite */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/* + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ +/*html { + color: rgba(0,0,0, 0.87); + font-size: 1em; + line-height: 1.4; }*/ + +/* + * Remove text-shadow in selection highlight: + * https://twitter.com/miketaylr/status/12228805301 + * + * These selection rule sets have to be separate. + * Customize the background color to match your design. + */ +::-moz-selection { + background: #b3d4fc; + text-shadow: none; } +::selection { + background: #b3d4fc; + text-shadow: none; } + +/* + * A better looking default horizontal rule + */ +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; } + +/* + * Remove the gap between audio, canvas, iframes, + * images, videos and the bottom of their containers: + * https://github.com/h5bp/html5-boilerplate/issues/440 + */ +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; } + +/* + * Remove default fieldset styles. + */ +fieldset { + border: 0; + margin: 0; + padding: 0; } + +/* + * Allow only vertical resizing of textareas. + */ +textarea { + resize: vertical; } + +/* ========================================================================== + Browser Upgrade Prompt + ========================================================================== */ +.browserupgrade { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; } + +/* ========================================================================== + Author's custom styles + ========================================================================== */ +/* ========================================================================== + Helper classes + ========================================================================== */ +/* + * Hide visually and from screen readers: + */ +.hidden { + display: none !important; } + +/* + * Hide only visually, but have it available for screen readers: + * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility + */ +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +/* + * Extends the .visuallyhidden class to allow the element + * to be focusable when navigated to via the keyboard: + * https://www.drupal.org/node/897638 + */ +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } + +/* + * Hide visually and from screen readers, but maintain layout + */ +.invisible { + visibility: hidden; } + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ +.clearfix:before, +.clearfix:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + +.clearfix:after { + clear: both; } + +/* ========================================================================== + EXAMPLE Media Queries for Responsive Design. + These examples override the primary ('mobile first') styles. + Modify as content requires. + ========================================================================== */ +/* ========================================================================== + Print styles. + Inlined to avoid the additional HTTP request: + http://www.phpied.com/delay-loading-your-print-css/ + ========================================================================== */ +@media print { + *, + *:before, + *:after, + *:first-letter, + *:first-line { + background: transparent !important; + color: #000 !important; + /* Black prints faster: http://www.sanbeiji.com/archives/953 */ + box-shadow: none !important; + text-shadow: none !important; } + a, + a:visited { + text-decoration: underline; } + a[href]:after { + content: " (" attr(href) ")"; } + abbr[title]:after { + content: " (" attr(title) ")"; } + /* + * Don't show links that are fragment identifiers, + * or use the `javascript:` pseudo protocol + */ + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; } + /* + * Printing Tables: + * http://css-discuss.incutio.com/wiki/Printing_Tables + */ + thead { + display: table-header-group; } + tr, + img { + page-break-inside: avoid; } + img { + max-width: 100% !important; } + p, + h2, + h3 { + orphans: 3; + widows: 3; } + h2, + h3 { + page-break-after: avoid; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Remove the unwanted box around FAB buttons */ +/* More info: http://goo.gl/IPwKi */ +a, .mdl-accordion, .mdl-button, .mdl-card, .mdl-checkbox, .mdl-dropdown-menu, +.mdl-icon-toggle, .mdl-item, .mdl-radio, .mdl-slider, .mdl-switch, .mdl-tabs__tab { + -webkit-tap-highlight-color: transparent; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); } + +/* + * Make html take up the entire screen + * Then set touch-action to avoid touch delay on mobile IE + */ +html { + width: 100%; + height: 100%; + -ms-touch-action: manipulation; + touch-action: manipulation; } + +/* +* Make body take up the entire screen +* Remove body margin so layout containers don't cause extra overflow. +*/ +body { + width: 100%; + min-height: 100%; + margin: 0; } + +/* + * Main display reset for IE support. + * Source: http://weblog.west-wind.com/posts/2015/Jan/12/main-HTML5-Tag-not-working-in-Internet-Explorer-91011 + */ +main { + display: block; } + +/* +* Apply no display to elements with the hidden attribute. +* IE 9 and 10 support. +*/ +*[hidden] { + display: none !important; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +/*html, body { + font-family: "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 20px; } + +h1, h2, h3, h4, h5, h6, p { + margin: 0; + padding: 0; }*/ + +/** + * Styles for HTML elements + */ +/*h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + opacity: 0.54; + font-size: 0.6em; } + +h1 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + margin-top: 24px; + margin-bottom: 24px; } + +h2 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 45px; + font-weight: 400; + line-height: 48px; + margin-top: 24px; + margin-bottom: 24px; } + +h3 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 34px; + font-weight: 400; + line-height: 40px; + margin-top: 24px; + margin-bottom: 24px; } + +h4 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 24px; + font-weight: 400; + line-height: 32px; + -moz-osx-font-smoothing: grayscale; + margin-top: 24px; + margin-bottom: 16px; } + +h5 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + margin-top: 24px; + margin-bottom: 16px; } + +h6 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0.04em; + margin-top: 24px; + margin-bottom: 16px; } + +p { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + margin-bottom: 16px; } + +a { + color: rgb(255,64,129); + font-weight: 500; } + +blockquote { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + position: relative; + font-size: 24px; + font-weight: 300; + font-style: italic; + line-height: 1.35; + letter-spacing: 0.08em; } + blockquote:before { + position: absolute; + left: -0.5em; + content: '“'; } + blockquote:after { + content: '”'; + margin-left: -0.05em; } + +mark { + background-color: #f4ff81; } + +dt { + font-weight: 700; } + +address { + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; + font-style: normal; } + +ul, ol { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; }*/ + +/** + * Class Name Styles + */ +.mdl-typography--display-4 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 112px; + font-weight: 300; + line-height: 1; + letter-spacing: -0.04em; } + +.mdl-typography--display-4-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 112px; + font-weight: 300; + line-height: 1; + letter-spacing: -0.04em; + opacity: 0.54; } + +.mdl-typography--display-3 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; } + +.mdl-typography--display-3-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + opacity: 0.54; } + +.mdl-typography--display-2 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 45px; + font-weight: 400; + line-height: 48px; } + +.mdl-typography--display-2-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 45px; + font-weight: 400; + line-height: 48px; + opacity: 0.54; } + +.mdl-typography--display-1 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 34px; + font-weight: 400; + line-height: 40px; } + +.mdl-typography--display-1-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 34px; + font-weight: 400; + line-height: 40px; + opacity: 0.54; } + +.mdl-typography--headline { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 24px; + font-weight: 400; + line-height: 32px; + -moz-osx-font-smoothing: grayscale; } + +.mdl-typography--headline-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 24px; + font-weight: 400; + line-height: 32px; + -moz-osx-font-smoothing: grayscale; + opacity: 0.87; } + +.mdl-typography--title { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; } + +.mdl-typography--title-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + opacity: 0.87; } + +.mdl-typography--subhead { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0.04em; } + +.mdl-typography--subhead-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0.04em; + opacity: 0.87; } + +.mdl-typography--body-2 { + font-size: 14px; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-2-color-contrast { + font-size: 14px; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--body-1 { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-1-color-contrast { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--body-2-force-preferred-font { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-2-force-preferred-font-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--body-1-force-preferred-font { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-1-force-preferred-font-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--caption { + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--caption-force-preferred-font { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--caption-color-contrast { + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; + opacity: 0.54; } + +.mdl-typography--caption-force-preferred-font-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; + opacity: 0.54; } + +.mdl-typography--menu { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--menu-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 1; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--button { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--button-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + line-height: 1; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--text-left { + text-align: left; } + +.mdl-typography--text-right { + text-align: right; } + +.mdl-typography--text-center { + text-align: center; } + +.mdl-typography--text-justify { + text-align: justify; } + +.mdl-typography--text-nowrap { + white-space: nowrap; } + +.mdl-typography--text-lowercase { + text-transform: lowercase; } + +.mdl-typography--text-uppercase { + text-transform: uppercase; } + +.mdl-typography--text-capitalize { + text-transform: capitalize; } + +.mdl-typography--font-thin { + font-weight: 200 !important; } + +.mdl-typography--font-light { + font-weight: 300 !important; } + +.mdl-typography--font-regular { + font-weight: 400 !important; } + +.mdl-typography--font-medium { + font-weight: 500 !important; } + +.mdl-typography--font-bold { + font-weight: 700 !important; } + +.mdl-typography--font-black { + font-weight: 900 !important; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-color-text--red { + color: rgb(244,67,54) !important; } + +.mdl-color--red { + background-color: rgb(244,67,54) !important; } + +.mdl-color-text--red-50 { + color: rgb(255,235,238) !important; } + +.mdl-color--red-50 { + background-color: rgb(255,235,238) !important; } + +.mdl-color-text--red-100 { + color: rgb(255,205,210) !important; } + +.mdl-color--red-100 { + background-color: rgb(255,205,210) !important; } + +.mdl-color-text--red-200 { + color: rgb(239,154,154) !important; } + +.mdl-color--red-200 { + background-color: rgb(239,154,154) !important; } + +.mdl-color-text--red-300 { + color: rgb(229,115,115) !important; } + +.mdl-color--red-300 { + background-color: rgb(229,115,115) !important; } + +.mdl-color-text--red-400 { + color: rgb(239,83,80) !important; } + +.mdl-color--red-400 { + background-color: rgb(239,83,80) !important; } + +.mdl-color-text--red-500 { + color: rgb(244,67,54) !important; } + +.mdl-color--red-500 { + background-color: rgb(244,67,54) !important; } + +.mdl-color-text--red-600 { + color: rgb(229,57,53) !important; } + +.mdl-color--red-600 { + background-color: rgb(229,57,53) !important; } + +.mdl-color-text--red-700 { + color: rgb(211,47,47) !important; } + +.mdl-color--red-700 { + background-color: rgb(211,47,47) !important; } + +.mdl-color-text--red-800 { + color: rgb(198,40,40) !important; } + +.mdl-color--red-800 { + background-color: rgb(198,40,40) !important; } + +.mdl-color-text--red-900 { + color: rgb(183,28,28) !important; } + +.mdl-color--red-900 { + background-color: rgb(183,28,28) !important; } + +.mdl-color-text--red-A100 { + color: rgb(255,138,128) !important; } + +.mdl-color--red-A100 { + background-color: rgb(255,138,128) !important; } + +.mdl-color-text--red-A200 { + color: rgb(255,82,82) !important; } + +.mdl-color--red-A200 { + background-color: rgb(255,82,82) !important; } + +.mdl-color-text--red-A400 { + color: rgb(255,23,68) !important; } + +.mdl-color--red-A400 { + background-color: rgb(255,23,68) !important; } + +.mdl-color-text--red-A700 { + color: rgb(213,0,0) !important; } + +.mdl-color--red-A700 { + background-color: rgb(213,0,0) !important; } + +.mdl-color-text--pink { + color: rgb(233,30,99) !important; } + +.mdl-color--pink { + background-color: rgb(233,30,99) !important; } + +.mdl-color-text--pink-50 { + color: rgb(252,228,236) !important; } + +.mdl-color--pink-50 { + background-color: rgb(252,228,236) !important; } + +.mdl-color-text--pink-100 { + color: rgb(248,187,208) !important; } + +.mdl-color--pink-100 { + background-color: rgb(248,187,208) !important; } + +.mdl-color-text--pink-200 { + color: rgb(244,143,177) !important; } + +.mdl-color--pink-200 { + background-color: rgb(244,143,177) !important; } + +.mdl-color-text--pink-300 { + color: rgb(240,98,146) !important; } + +.mdl-color--pink-300 { + background-color: rgb(240,98,146) !important; } + +.mdl-color-text--pink-400 { + color: rgb(236,64,122) !important; } + +.mdl-color--pink-400 { + background-color: rgb(236,64,122) !important; } + +.mdl-color-text--pink-500 { + color: rgb(233,30,99) !important; } + +.mdl-color--pink-500 { + background-color: rgb(233,30,99) !important; } + +.mdl-color-text--pink-600 { + color: rgb(216,27,96) !important; } + +.mdl-color--pink-600 { + background-color: rgb(216,27,96) !important; } + +.mdl-color-text--pink-700 { + color: rgb(194,24,91) !important; } + +.mdl-color--pink-700 { + background-color: rgb(194,24,91) !important; } + +.mdl-color-text--pink-800 { + color: rgb(173,20,87) !important; } + +.mdl-color--pink-800 { + background-color: rgb(173,20,87) !important; } + +.mdl-color-text--pink-900 { + color: rgb(136,14,79) !important; } + +.mdl-color--pink-900 { + background-color: rgb(136,14,79) !important; } + +.mdl-color-text--pink-A100 { + color: rgb(255,128,171) !important; } + +.mdl-color--pink-A100 { + background-color: rgb(255,128,171) !important; } + +.mdl-color-text--pink-A200 { + color: rgb(255,64,129) !important; } + +.mdl-color--pink-A200 { + background-color: rgb(255,64,129) !important; } + +.mdl-color-text--pink-A400 { + color: rgb(245,0,87) !important; } + +.mdl-color--pink-A400 { + background-color: rgb(245,0,87) !important; } + +.mdl-color-text--pink-A700 { + color: rgb(197,17,98) !important; } + +.mdl-color--pink-A700 { + background-color: rgb(197,17,98) !important; } + +.mdl-color-text--purple { + color: rgb(156,39,176) !important; } + +.mdl-color--purple { + background-color: rgb(156,39,176) !important; } + +.mdl-color-text--purple-50 { + color: rgb(243,229,245) !important; } + +.mdl-color--purple-50 { + background-color: rgb(243,229,245) !important; } + +.mdl-color-text--purple-100 { + color: rgb(225,190,231) !important; } + +.mdl-color--purple-100 { + background-color: rgb(225,190,231) !important; } + +.mdl-color-text--purple-200 { + color: rgb(206,147,216) !important; } + +.mdl-color--purple-200 { + background-color: rgb(206,147,216) !important; } + +.mdl-color-text--purple-300 { + color: rgb(186,104,200) !important; } + +.mdl-color--purple-300 { + background-color: rgb(186,104,200) !important; } + +.mdl-color-text--purple-400 { + color: rgb(171,71,188) !important; } + +.mdl-color--purple-400 { + background-color: rgb(171,71,188) !important; } + +.mdl-color-text--purple-500 { + color: rgb(156,39,176) !important; } + +.mdl-color--purple-500 { + background-color: rgb(156,39,176) !important; } + +.mdl-color-text--purple-600 { + color: rgb(142,36,170) !important; } + +.mdl-color--purple-600 { + background-color: rgb(142,36,170) !important; } + +.mdl-color-text--purple-700 { + color: rgb(123,31,162) !important; } + +.mdl-color--purple-700 { + background-color: rgb(123,31,162) !important; } + +.mdl-color-text--purple-800 { + color: rgb(106,27,154) !important; } + +.mdl-color--purple-800 { + background-color: rgb(106,27,154) !important; } + +.mdl-color-text--purple-900 { + color: rgb(74,20,140) !important; } + +.mdl-color--purple-900 { + background-color: rgb(74,20,140) !important; } + +.mdl-color-text--purple-A100 { + color: rgb(234,128,252) !important; } + +.mdl-color--purple-A100 { + background-color: rgb(234,128,252) !important; } + +.mdl-color-text--purple-A200 { + color: rgb(224,64,251) !important; } + +.mdl-color--purple-A200 { + background-color: rgb(224,64,251) !important; } + +.mdl-color-text--purple-A400 { + color: rgb(213,0,249) !important; } + +.mdl-color--purple-A400 { + background-color: rgb(213,0,249) !important; } + +.mdl-color-text--purple-A700 { + color: rgb(170,0,255) !important; } + +.mdl-color--purple-A700 { + background-color: rgb(170,0,255) !important; } + +.mdl-color-text--deep-purple { + color: rgb(103,58,183) !important; } + +.mdl-color--deep-purple { + background-color: rgb(103,58,183) !important; } + +.mdl-color-text--deep-purple-50 { + color: rgb(237,231,246) !important; } + +.mdl-color--deep-purple-50 { + background-color: rgb(237,231,246) !important; } + +.mdl-color-text--deep-purple-100 { + color: rgb(209,196,233) !important; } + +.mdl-color--deep-purple-100 { + background-color: rgb(209,196,233) !important; } + +.mdl-color-text--deep-purple-200 { + color: rgb(179,157,219) !important; } + +.mdl-color--deep-purple-200 { + background-color: rgb(179,157,219) !important; } + +.mdl-color-text--deep-purple-300 { + color: rgb(149,117,205) !important; } + +.mdl-color--deep-purple-300 { + background-color: rgb(149,117,205) !important; } + +.mdl-color-text--deep-purple-400 { + color: rgb(126,87,194) !important; } + +.mdl-color--deep-purple-400 { + background-color: rgb(126,87,194) !important; } + +.mdl-color-text--deep-purple-500 { + color: rgb(103,58,183) !important; } + +.mdl-color--deep-purple-500 { + background-color: rgb(103,58,183) !important; } + +.mdl-color-text--deep-purple-600 { + color: rgb(94,53,177) !important; } + +.mdl-color--deep-purple-600 { + background-color: rgb(94,53,177) !important; } + +.mdl-color-text--deep-purple-700 { + color: rgb(81,45,168) !important; } + +.mdl-color--deep-purple-700 { + background-color: rgb(81,45,168) !important; } + +.mdl-color-text--deep-purple-800 { + color: rgb(69,39,160) !important; } + +.mdl-color--deep-purple-800 { + background-color: rgb(69,39,160) !important; } + +.mdl-color-text--deep-purple-900 { + color: rgb(49,27,146) !important; } + +.mdl-color--deep-purple-900 { + background-color: rgb(49,27,146) !important; } + +.mdl-color-text--deep-purple-A100 { + color: rgb(179,136,255) !important; } + +.mdl-color--deep-purple-A100 { + background-color: rgb(179,136,255) !important; } + +.mdl-color-text--deep-purple-A200 { + color: rgb(124,77,255) !important; } + +.mdl-color--deep-purple-A200 { + background-color: rgb(124,77,255) !important; } + +.mdl-color-text--deep-purple-A400 { + color: rgb(101,31,255) !important; } + +.mdl-color--deep-purple-A400 { + background-color: rgb(101,31,255) !important; } + +.mdl-color-text--deep-purple-A700 { + color: rgb(98,0,234) !important; } + +.mdl-color--deep-purple-A700 { + background-color: rgb(98,0,234) !important; } + +.mdl-color-text--indigo { + color: rgb(63,81,181) !important; } + +.mdl-color--indigo { + background-color: rgb(63,81,181) !important; } + +.mdl-color-text--indigo-50 { + color: rgb(232,234,246) !important; } + +.mdl-color--indigo-50 { + background-color: rgb(232,234,246) !important; } + +.mdl-color-text--indigo-100 { + color: rgb(197,202,233) !important; } + +.mdl-color--indigo-100 { + background-color: rgb(197,202,233) !important; } + +.mdl-color-text--indigo-200 { + color: rgb(159,168,218) !important; } + +.mdl-color--indigo-200 { + background-color: rgb(159,168,218) !important; } + +.mdl-color-text--indigo-300 { + color: rgb(121,134,203) !important; } + +.mdl-color--indigo-300 { + background-color: rgb(121,134,203) !important; } + +.mdl-color-text--indigo-400 { + color: rgb(92,107,192) !important; } + +.mdl-color--indigo-400 { + background-color: rgb(92,107,192) !important; } + +.mdl-color-text--indigo-500 { + color: rgb(63,81,181) !important; } + +.mdl-color--indigo-500 { + background-color: rgb(63,81,181) !important; } + +.mdl-color-text--indigo-600 { + color: rgb(57,73,171) !important; } + +.mdl-color--indigo-600 { + background-color: rgb(57,73,171) !important; } + +.mdl-color-text--indigo-700 { + color: rgb(48,63,159) !important; } + +.mdl-color--indigo-700 { + background-color: rgb(48,63,159) !important; } + +.mdl-color-text--indigo-800 { + color: rgb(40,53,147) !important; } + +.mdl-color--indigo-800 { + background-color: rgb(40,53,147) !important; } + +.mdl-color-text--indigo-900 { + color: rgb(26,35,126) !important; } + +.mdl-color--indigo-900 { + background-color: rgb(26,35,126) !important; } + +.mdl-color-text--indigo-A100 { + color: rgb(140,158,255) !important; } + +.mdl-color--indigo-A100 { + background-color: rgb(140,158,255) !important; } + +.mdl-color-text--indigo-A200 { + color: rgb(83,109,254) !important; } + +.mdl-color--indigo-A200 { + background-color: rgb(83,109,254) !important; } + +.mdl-color-text--indigo-A400 { + color: rgb(61,90,254) !important; } + +.mdl-color--indigo-A400 { + background-color: rgb(61,90,254) !important; } + +.mdl-color-text--indigo-A700 { + color: rgb(48,79,254) !important; } + +.mdl-color--indigo-A700 { + background-color: rgb(48,79,254) !important; } + +.mdl-color-text--blue { + color: rgb(33,150,243) !important; } + +.mdl-color--blue { + background-color: rgb(33,150,243) !important; } + +.mdl-color-text--blue-50 { + color: rgb(227,242,253) !important; } + +.mdl-color--blue-50 { + background-color: rgb(227,242,253) !important; } + +.mdl-color-text--blue-100 { + color: rgb(187,222,251) !important; } + +.mdl-color--blue-100 { + background-color: rgb(187,222,251) !important; } + +.mdl-color-text--blue-200 { + color: rgb(144,202,249) !important; } + +.mdl-color--blue-200 { + background-color: rgb(144,202,249) !important; } + +.mdl-color-text--blue-300 { + color: rgb(100,181,246) !important; } + +.mdl-color--blue-300 { + background-color: rgb(100,181,246) !important; } + +.mdl-color-text--blue-400 { + color: rgb(66,165,245) !important; } + +.mdl-color--blue-400 { + background-color: rgb(66,165,245) !important; } + +.mdl-color-text--blue-500 { + color: rgb(33,150,243) !important; } + +.mdl-color--blue-500 { + background-color: rgb(33,150,243) !important; } + +.mdl-color-text--blue-600 { + color: rgb(30,136,229) !important; } + +.mdl-color--blue-600 { + background-color: rgb(30,136,229) !important; } + +.mdl-color-text--blue-700 { + color: rgb(25,118,210) !important; } + +.mdl-color--blue-700 { + background-color: rgb(25,118,210) !important; } + +.mdl-color-text--blue-800 { + color: rgb(21,101,192) !important; } + +.mdl-color--blue-800 { + background-color: rgb(21,101,192) !important; } + +.mdl-color-text--blue-900 { + color: rgb(13,71,161) !important; } + +.mdl-color--blue-900 { + background-color: rgb(13,71,161) !important; } + +.mdl-color-text--blue-A100 { + color: rgb(130,177,255) !important; } + +.mdl-color--blue-A100 { + background-color: rgb(130,177,255) !important; } + +.mdl-color-text--blue-A200 { + color: rgb(68,138,255) !important; } + +.mdl-color--blue-A200 { + background-color: rgb(68,138,255) !important; } + +.mdl-color-text--blue-A400 { + color: rgb(41,121,255) !important; } + +.mdl-color--blue-A400 { + background-color: rgb(41,121,255) !important; } + +.mdl-color-text--blue-A700 { + color: rgb(41,98,255) !important; } + +.mdl-color--blue-A700 { + background-color: rgb(41,98,255) !important; } + +.mdl-color-text--light-blue { + color: rgb(3,169,244) !important; } + +.mdl-color--light-blue { + background-color: rgb(3,169,244) !important; } + +.mdl-color-text--light-blue-50 { + color: rgb(225,245,254) !important; } + +.mdl-color--light-blue-50 { + background-color: rgb(225,245,254) !important; } + +.mdl-color-text--light-blue-100 { + color: rgb(179,229,252) !important; } + +.mdl-color--light-blue-100 { + background-color: rgb(179,229,252) !important; } + +.mdl-color-text--light-blue-200 { + color: rgb(129,212,250) !important; } + +.mdl-color--light-blue-200 { + background-color: rgb(129,212,250) !important; } + +.mdl-color-text--light-blue-300 { + color: rgb(79,195,247) !important; } + +.mdl-color--light-blue-300 { + background-color: rgb(79,195,247) !important; } + +.mdl-color-text--light-blue-400 { + color: rgb(41,182,246) !important; } + +.mdl-color--light-blue-400 { + background-color: rgb(41,182,246) !important; } + +.mdl-color-text--light-blue-500 { + color: rgb(3,169,244) !important; } + +.mdl-color--light-blue-500 { + background-color: rgb(3,169,244) !important; } + +.mdl-color-text--light-blue-600 { + color: rgb(3,155,229) !important; } + +.mdl-color--light-blue-600 { + background-color: rgb(3,155,229) !important; } + +.mdl-color-text--light-blue-700 { + color: rgb(2,136,209) !important; } + +.mdl-color--light-blue-700 { + background-color: rgb(2,136,209) !important; } + +.mdl-color-text--light-blue-800 { + color: rgb(2,119,189) !important; } + +.mdl-color--light-blue-800 { + background-color: rgb(2,119,189) !important; } + +.mdl-color-text--light-blue-900 { + color: rgb(1,87,155) !important; } + +.mdl-color--light-blue-900 { + background-color: rgb(1,87,155) !important; } + +.mdl-color-text--light-blue-A100 { + color: rgb(128,216,255) !important; } + +.mdl-color--light-blue-A100 { + background-color: rgb(128,216,255) !important; } + +.mdl-color-text--light-blue-A200 { + color: rgb(64,196,255) !important; } + +.mdl-color--light-blue-A200 { + background-color: rgb(64,196,255) !important; } + +.mdl-color-text--light-blue-A400 { + color: rgb(0,176,255) !important; } + +.mdl-color--light-blue-A400 { + background-color: rgb(0,176,255) !important; } + +.mdl-color-text--light-blue-A700 { + color: rgb(0,145,234) !important; } + +.mdl-color--light-blue-A700 { + background-color: rgb(0,145,234) !important; } + +.mdl-color-text--cyan { + color: rgb(0,188,212) !important; } + +.mdl-color--cyan { + background-color: rgb(0,188,212) !important; } + +.mdl-color-text--cyan-50 { + color: rgb(224,247,250) !important; } + +.mdl-color--cyan-50 { + background-color: rgb(224,247,250) !important; } + +.mdl-color-text--cyan-100 { + color: rgb(178,235,242) !important; } + +.mdl-color--cyan-100 { + background-color: rgb(178,235,242) !important; } + +.mdl-color-text--cyan-200 { + color: rgb(128,222,234) !important; } + +.mdl-color--cyan-200 { + background-color: rgb(128,222,234) !important; } + +.mdl-color-text--cyan-300 { + color: rgb(77,208,225) !important; } + +.mdl-color--cyan-300 { + background-color: rgb(77,208,225) !important; } + +.mdl-color-text--cyan-400 { + color: rgb(38,198,218) !important; } + +.mdl-color--cyan-400 { + background-color: rgb(38,198,218) !important; } + +.mdl-color-text--cyan-500 { + color: rgb(0,188,212) !important; } + +.mdl-color--cyan-500 { + background-color: rgb(0,188,212) !important; } + +.mdl-color-text--cyan-600 { + color: rgb(0,172,193) !important; } + +.mdl-color--cyan-600 { + background-color: rgb(0,172,193) !important; } + +.mdl-color-text--cyan-700 { + color: rgb(0,151,167) !important; } + +.mdl-color--cyan-700 { + background-color: rgb(0,151,167) !important; } + +.mdl-color-text--cyan-800 { + color: rgb(0,131,143) !important; } + +.mdl-color--cyan-800 { + background-color: rgb(0,131,143) !important; } + +.mdl-color-text--cyan-900 { + color: rgb(0,96,100) !important; } + +.mdl-color--cyan-900 { + background-color: rgb(0,96,100) !important; } + +.mdl-color-text--cyan-A100 { + color: rgb(132,255,255) !important; } + +.mdl-color--cyan-A100 { + background-color: rgb(132,255,255) !important; } + +.mdl-color-text--cyan-A200 { + color: rgb(24,255,255) !important; } + +.mdl-color--cyan-A200 { + background-color: rgb(24,255,255) !important; } + +.mdl-color-text--cyan-A400 { + color: rgb(0,229,255) !important; } + +.mdl-color--cyan-A400 { + background-color: rgb(0,229,255) !important; } + +.mdl-color-text--cyan-A700 { + color: rgb(0,184,212) !important; } + +.mdl-color--cyan-A700 { + background-color: rgb(0,184,212) !important; } + +.mdl-color-text--teal { + color: rgb(0,150,136) !important; } + +.mdl-color--teal { + background-color: rgb(0,150,136) !important; } + +.mdl-color-text--teal-50 { + color: rgb(224,242,241) !important; } + +.mdl-color--teal-50 { + background-color: rgb(224,242,241) !important; } + +.mdl-color-text--teal-100 { + color: rgb(178,223,219) !important; } + +.mdl-color--teal-100 { + background-color: rgb(178,223,219) !important; } + +.mdl-color-text--teal-200 { + color: rgb(128,203,196) !important; } + +.mdl-color--teal-200 { + background-color: rgb(128,203,196) !important; } + +.mdl-color-text--teal-300 { + color: rgb(77,182,172) !important; } + +.mdl-color--teal-300 { + background-color: rgb(77,182,172) !important; } + +.mdl-color-text--teal-400 { + color: rgb(38,166,154) !important; } + +.mdl-color--teal-400 { + background-color: rgb(38,166,154) !important; } + +.mdl-color-text--teal-500 { + color: rgb(0,150,136) !important; } + +.mdl-color--teal-500 { + background-color: rgb(0,150,136) !important; } + +.mdl-color-text--teal-600 { + color: rgb(0,137,123) !important; } + +.mdl-color--teal-600 { + background-color: rgb(0,137,123) !important; } + +.mdl-color-text--teal-700 { + color: rgb(0,121,107) !important; } + +.mdl-color--teal-700 { + background-color: rgb(0,121,107) !important; } + +.mdl-color-text--teal-800 { + color: rgb(0,105,92) !important; } + +.mdl-color--teal-800 { + background-color: rgb(0,105,92) !important; } + +.mdl-color-text--teal-900 { + color: rgb(0,77,64) !important; } + +.mdl-color--teal-900 { + background-color: rgb(0,77,64) !important; } + +.mdl-color-text--teal-A100 { + color: rgb(167,255,235) !important; } + +.mdl-color--teal-A100 { + background-color: rgb(167,255,235) !important; } + +.mdl-color-text--teal-A200 { + color: rgb(100,255,218) !important; } + +.mdl-color--teal-A200 { + background-color: rgb(100,255,218) !important; } + +.mdl-color-text--teal-A400 { + color: rgb(29,233,182) !important; } + +.mdl-color--teal-A400 { + background-color: rgb(29,233,182) !important; } + +.mdl-color-text--teal-A700 { + color: rgb(0,191,165) !important; } + +.mdl-color--teal-A700 { + background-color: rgb(0,191,165) !important; } + +.mdl-color-text--green { + color: rgb(76,175,80) !important; } + +.mdl-color--green { + background-color: rgb(76,175,80) !important; } + +.mdl-color-text--green-50 { + color: rgb(232,245,233) !important; } + +.mdl-color--green-50 { + background-color: rgb(232,245,233) !important; } + +.mdl-color-text--green-100 { + color: rgb(200,230,201) !important; } + +.mdl-color--green-100 { + background-color: rgb(200,230,201) !important; } + +.mdl-color-text--green-200 { + color: rgb(165,214,167) !important; } + +.mdl-color--green-200 { + background-color: rgb(165,214,167) !important; } + +.mdl-color-text--green-300 { + color: rgb(129,199,132) !important; } + +.mdl-color--green-300 { + background-color: rgb(129,199,132) !important; } + +.mdl-color-text--green-400 { + color: rgb(102,187,106) !important; } + +.mdl-color--green-400 { + background-color: rgb(102,187,106) !important; } + +.mdl-color-text--green-500 { + color: rgb(76,175,80) !important; } + +.mdl-color--green-500 { + background-color: rgb(76,175,80) !important; } + +.mdl-color-text--green-600 { + color: rgb(67,160,71) !important; } + +.mdl-color--green-600 { + background-color: rgb(67,160,71) !important; } + +.mdl-color-text--green-700 { + color: rgb(56,142,60) !important; } + +.mdl-color--green-700 { + background-color: rgb(56,142,60) !important; } + +.mdl-color-text--green-800 { + color: rgb(46,125,50) !important; } + +.mdl-color--green-800 { + background-color: rgb(46,125,50) !important; } + +.mdl-color-text--green-900 { + color: rgb(27,94,32) !important; } + +.mdl-color--green-900 { + background-color: rgb(27,94,32) !important; } + +.mdl-color-text--green-A100 { + color: rgb(185,246,202) !important; } + +.mdl-color--green-A100 { + background-color: rgb(185,246,202) !important; } + +.mdl-color-text--green-A200 { + color: rgb(105,240,174) !important; } + +.mdl-color--green-A200 { + background-color: rgb(105,240,174) !important; } + +.mdl-color-text--green-A400 { + color: rgb(0,230,118) !important; } + +.mdl-color--green-A400 { + background-color: rgb(0,230,118) !important; } + +.mdl-color-text--green-A700 { + color: rgb(0,200,83) !important; } + +.mdl-color--green-A700 { + background-color: rgb(0,200,83) !important; } + +.mdl-color-text--light-green { + color: rgb(139,195,74) !important; } + +.mdl-color--light-green { + background-color: rgb(139,195,74) !important; } + +.mdl-color-text--light-green-50 { + color: rgb(241,248,233) !important; } + +.mdl-color--light-green-50 { + background-color: rgb(241,248,233) !important; } + +.mdl-color-text--light-green-100 { + color: rgb(220,237,200) !important; } + +.mdl-color--light-green-100 { + background-color: rgb(220,237,200) !important; } + +.mdl-color-text--light-green-200 { + color: rgb(197,225,165) !important; } + +.mdl-color--light-green-200 { + background-color: rgb(197,225,165) !important; } + +.mdl-color-text--light-green-300 { + color: rgb(174,213,129) !important; } + +.mdl-color--light-green-300 { + background-color: rgb(174,213,129) !important; } + +.mdl-color-text--light-green-400 { + color: rgb(156,204,101) !important; } + +.mdl-color--light-green-400 { + background-color: rgb(156,204,101) !important; } + +.mdl-color-text--light-green-500 { + color: rgb(139,195,74) !important; } + +.mdl-color--light-green-500 { + background-color: rgb(139,195,74) !important; } + +.mdl-color-text--light-green-600 { + color: rgb(124,179,66) !important; } + +.mdl-color--light-green-600 { + background-color: rgb(124,179,66) !important; } + +.mdl-color-text--light-green-700 { + color: rgb(104,159,56) !important; } + +.mdl-color--light-green-700 { + background-color: rgb(104,159,56) !important; } + +.mdl-color-text--light-green-800 { + color: rgb(85,139,47) !important; } + +.mdl-color--light-green-800 { + background-color: rgb(85,139,47) !important; } + +.mdl-color-text--light-green-900 { + color: rgb(51,105,30) !important; } + +.mdl-color--light-green-900 { + background-color: rgb(51,105,30) !important; } + +.mdl-color-text--light-green-A100 { + color: rgb(204,255,144) !important; } + +.mdl-color--light-green-A100 { + background-color: rgb(204,255,144) !important; } + +.mdl-color-text--light-green-A200 { + color: rgb(178,255,89) !important; } + +.mdl-color--light-green-A200 { + background-color: rgb(178,255,89) !important; } + +.mdl-color-text--light-green-A400 { + color: rgb(118,255,3) !important; } + +.mdl-color--light-green-A400 { + background-color: rgb(118,255,3) !important; } + +.mdl-color-text--light-green-A700 { + color: rgb(100,221,23) !important; } + +.mdl-color--light-green-A700 { + background-color: rgb(100,221,23) !important; } + +.mdl-color-text--lime { + color: rgb(205,220,57) !important; } + +.mdl-color--lime { + background-color: rgb(205,220,57) !important; } + +.mdl-color-text--lime-50 { + color: rgb(249,251,231) !important; } + +.mdl-color--lime-50 { + background-color: rgb(249,251,231) !important; } + +.mdl-color-text--lime-100 { + color: rgb(240,244,195) !important; } + +.mdl-color--lime-100 { + background-color: rgb(240,244,195) !important; } + +.mdl-color-text--lime-200 { + color: rgb(230,238,156) !important; } + +.mdl-color--lime-200 { + background-color: rgb(230,238,156) !important; } + +.mdl-color-text--lime-300 { + color: rgb(220,231,117) !important; } + +.mdl-color--lime-300 { + background-color: rgb(220,231,117) !important; } + +.mdl-color-text--lime-400 { + color: rgb(212,225,87) !important; } + +.mdl-color--lime-400 { + background-color: rgb(212,225,87) !important; } + +.mdl-color-text--lime-500 { + color: rgb(205,220,57) !important; } + +.mdl-color--lime-500 { + background-color: rgb(205,220,57) !important; } + +.mdl-color-text--lime-600 { + color: rgb(192,202,51) !important; } + +.mdl-color--lime-600 { + background-color: rgb(192,202,51) !important; } + +.mdl-color-text--lime-700 { + color: rgb(175,180,43) !important; } + +.mdl-color--lime-700 { + background-color: rgb(175,180,43) !important; } + +.mdl-color-text--lime-800 { + color: rgb(158,157,36) !important; } + +.mdl-color--lime-800 { + background-color: rgb(158,157,36) !important; } + +.mdl-color-text--lime-900 { + color: rgb(130,119,23) !important; } + +.mdl-color--lime-900 { + background-color: rgb(130,119,23) !important; } + +.mdl-color-text--lime-A100 { + color: rgb(244,255,129) !important; } + +.mdl-color--lime-A100 { + background-color: rgb(244,255,129) !important; } + +.mdl-color-text--lime-A200 { + color: rgb(238,255,65) !important; } + +.mdl-color--lime-A200 { + background-color: rgb(238,255,65) !important; } + +.mdl-color-text--lime-A400 { + color: rgb(198,255,0) !important; } + +.mdl-color--lime-A400 { + background-color: rgb(198,255,0) !important; } + +.mdl-color-text--lime-A700 { + color: rgb(174,234,0) !important; } + +.mdl-color--lime-A700 { + background-color: rgb(174,234,0) !important; } + +.mdl-color-text--yellow { + color: rgb(255,235,59) !important; } + +.mdl-color--yellow { + background-color: rgb(255,235,59) !important; } + +.mdl-color-text--yellow-50 { + color: rgb(255,253,231) !important; } + +.mdl-color--yellow-50 { + background-color: rgb(255,253,231) !important; } + +.mdl-color-text--yellow-100 { + color: rgb(255,249,196) !important; } + +.mdl-color--yellow-100 { + background-color: rgb(255,249,196) !important; } + +.mdl-color-text--yellow-200 { + color: rgb(255,245,157) !important; } + +.mdl-color--yellow-200 { + background-color: rgb(255,245,157) !important; } + +.mdl-color-text--yellow-300 { + color: rgb(255,241,118) !important; } + +.mdl-color--yellow-300 { + background-color: rgb(255,241,118) !important; } + +.mdl-color-text--yellow-400 { + color: rgb(255,238,88) !important; } + +.mdl-color--yellow-400 { + background-color: rgb(255,238,88) !important; } + +.mdl-color-text--yellow-500 { + color: rgb(255,235,59) !important; } + +.mdl-color--yellow-500 { + background-color: rgb(255,235,59) !important; } + +.mdl-color-text--yellow-600 { + color: rgb(253,216,53) !important; } + +.mdl-color--yellow-600 { + background-color: rgb(253,216,53) !important; } + +.mdl-color-text--yellow-700 { + color: rgb(251,192,45) !important; } + +.mdl-color--yellow-700 { + background-color: rgb(251,192,45) !important; } + +.mdl-color-text--yellow-800 { + color: rgb(249,168,37) !important; } + +.mdl-color--yellow-800 { + background-color: rgb(249,168,37) !important; } + +.mdl-color-text--yellow-900 { + color: rgb(245,127,23) !important; } + +.mdl-color--yellow-900 { + background-color: rgb(245,127,23) !important; } + +.mdl-color-text--yellow-A100 { + color: rgb(255,255,141) !important; } + +.mdl-color--yellow-A100 { + background-color: rgb(255,255,141) !important; } + +.mdl-color-text--yellow-A200 { + color: rgb(255,255,0) !important; } + +.mdl-color--yellow-A200 { + background-color: rgb(255,255,0) !important; } + +.mdl-color-text--yellow-A400 { + color: rgb(255,234,0) !important; } + +.mdl-color--yellow-A400 { + background-color: rgb(255,234,0) !important; } + +.mdl-color-text--yellow-A700 { + color: rgb(255,214,0) !important; } + +.mdl-color--yellow-A700 { + background-color: rgb(255,214,0) !important; } + +.mdl-color-text--amber { + color: rgb(255,193,7) !important; } + +.mdl-color--amber { + background-color: rgb(255,193,7) !important; } + +.mdl-color-text--amber-50 { + color: rgb(255,248,225) !important; } + +.mdl-color--amber-50 { + background-color: rgb(255,248,225) !important; } + +.mdl-color-text--amber-100 { + color: rgb(255,236,179) !important; } + +.mdl-color--amber-100 { + background-color: rgb(255,236,179) !important; } + +.mdl-color-text--amber-200 { + color: rgb(255,224,130) !important; } + +.mdl-color--amber-200 { + background-color: rgb(255,224,130) !important; } + +.mdl-color-text--amber-300 { + color: rgb(255,213,79) !important; } + +.mdl-color--amber-300 { + background-color: rgb(255,213,79) !important; } + +.mdl-color-text--amber-400 { + color: rgb(255,202,40) !important; } + +.mdl-color--amber-400 { + background-color: rgb(255,202,40) !important; } + +.mdl-color-text--amber-500 { + color: rgb(255,193,7) !important; } + +.mdl-color--amber-500 { + background-color: rgb(255,193,7) !important; } + +.mdl-color-text--amber-600 { + color: rgb(255,179,0) !important; } + +.mdl-color--amber-600 { + background-color: rgb(255,179,0) !important; } + +.mdl-color-text--amber-700 { + color: rgb(255,160,0) !important; } + +.mdl-color--amber-700 { + background-color: rgb(255,160,0) !important; } + +.mdl-color-text--amber-800 { + color: rgb(255,143,0) !important; } + +.mdl-color--amber-800 { + background-color: rgb(255,143,0) !important; } + +.mdl-color-text--amber-900 { + color: rgb(255,111,0) !important; } + +.mdl-color--amber-900 { + background-color: rgb(255,111,0) !important; } + +.mdl-color-text--amber-A100 { + color: rgb(255,229,127) !important; } + +.mdl-color--amber-A100 { + background-color: rgb(255,229,127) !important; } + +.mdl-color-text--amber-A200 { + color: rgb(255,215,64) !important; } + +.mdl-color--amber-A200 { + background-color: rgb(255,215,64) !important; } + +.mdl-color-text--amber-A400 { + color: rgb(255,196,0) !important; } + +.mdl-color--amber-A400 { + background-color: rgb(255,196,0) !important; } + +.mdl-color-text--amber-A700 { + color: rgb(255,171,0) !important; } + +.mdl-color--amber-A700 { + background-color: rgb(255,171,0) !important; } + +.mdl-color-text--orange { + color: rgb(255,152,0) !important; } + +.mdl-color--orange { + background-color: rgb(255,152,0) !important; } + +.mdl-color-text--orange-50 { + color: rgb(255,243,224) !important; } + +.mdl-color--orange-50 { + background-color: rgb(255,243,224) !important; } + +.mdl-color-text--orange-100 { + color: rgb(255,224,178) !important; } + +.mdl-color--orange-100 { + background-color: rgb(255,224,178) !important; } + +.mdl-color-text--orange-200 { + color: rgb(255,204,128) !important; } + +.mdl-color--orange-200 { + background-color: rgb(255,204,128) !important; } + +.mdl-color-text--orange-300 { + color: rgb(255,183,77) !important; } + +.mdl-color--orange-300 { + background-color: rgb(255,183,77) !important; } + +.mdl-color-text--orange-400 { + color: rgb(255,167,38) !important; } + +.mdl-color--orange-400 { + background-color: rgb(255,167,38) !important; } + +.mdl-color-text--orange-500 { + color: rgb(255,152,0) !important; } + +.mdl-color--orange-500 { + background-color: rgb(255,152,0) !important; } + +.mdl-color-text--orange-600 { + color: rgb(251,140,0) !important; } + +.mdl-color--orange-600 { + background-color: rgb(251,140,0) !important; } + +.mdl-color-text--orange-700 { + color: rgb(245,124,0) !important; } + +.mdl-color--orange-700 { + background-color: rgb(245,124,0) !important; } + +.mdl-color-text--orange-800 { + color: rgb(239,108,0) !important; } + +.mdl-color--orange-800 { + background-color: rgb(239,108,0) !important; } + +.mdl-color-text--orange-900 { + color: rgb(230,81,0) !important; } + +.mdl-color--orange-900 { + background-color: rgb(230,81,0) !important; } + +.mdl-color-text--orange-A100 { + color: rgb(255,209,128) !important; } + +.mdl-color--orange-A100 { + background-color: rgb(255,209,128) !important; } + +.mdl-color-text--orange-A200 { + color: rgb(255,171,64) !important; } + +.mdl-color--orange-A200 { + background-color: rgb(255,171,64) !important; } + +.mdl-color-text--orange-A400 { + color: rgb(255,145,0) !important; } + +.mdl-color--orange-A400 { + background-color: rgb(255,145,0) !important; } + +.mdl-color-text--orange-A700 { + color: rgb(255,109,0) !important; } + +.mdl-color--orange-A700 { + background-color: rgb(255,109,0) !important; } + +.mdl-color-text--deep-orange { + color: rgb(255,87,34) !important; } + +.mdl-color--deep-orange { + background-color: rgb(255,87,34) !important; } + +.mdl-color-text--deep-orange-50 { + color: rgb(251,233,231) !important; } + +.mdl-color--deep-orange-50 { + background-color: rgb(251,233,231) !important; } + +.mdl-color-text--deep-orange-100 { + color: rgb(255,204,188) !important; } + +.mdl-color--deep-orange-100 { + background-color: rgb(255,204,188) !important; } + +.mdl-color-text--deep-orange-200 { + color: rgb(255,171,145) !important; } + +.mdl-color--deep-orange-200 { + background-color: rgb(255,171,145) !important; } + +.mdl-color-text--deep-orange-300 { + color: rgb(255,138,101) !important; } + +.mdl-color--deep-orange-300 { + background-color: rgb(255,138,101) !important; } + +.mdl-color-text--deep-orange-400 { + color: rgb(255,112,67) !important; } + +.mdl-color--deep-orange-400 { + background-color: rgb(255,112,67) !important; } + +.mdl-color-text--deep-orange-500 { + color: rgb(255,87,34) !important; } + +.mdl-color--deep-orange-500 { + background-color: rgb(255,87,34) !important; } + +.mdl-color-text--deep-orange-600 { + color: rgb(244,81,30) !important; } + +.mdl-color--deep-orange-600 { + background-color: rgb(244,81,30) !important; } + +.mdl-color-text--deep-orange-700 { + color: rgb(230,74,25) !important; } + +.mdl-color--deep-orange-700 { + background-color: rgb(230,74,25) !important; } + +.mdl-color-text--deep-orange-800 { + color: rgb(216,67,21) !important; } + +.mdl-color--deep-orange-800 { + background-color: rgb(216,67,21) !important; } + +.mdl-color-text--deep-orange-900 { + color: rgb(191,54,12) !important; } + +.mdl-color--deep-orange-900 { + background-color: rgb(191,54,12) !important; } + +.mdl-color-text--deep-orange-A100 { + color: rgb(255,158,128) !important; } + +.mdl-color--deep-orange-A100 { + background-color: rgb(255,158,128) !important; } + +.mdl-color-text--deep-orange-A200 { + color: rgb(255,110,64) !important; } + +.mdl-color--deep-orange-A200 { + background-color: rgb(255,110,64) !important; } + +.mdl-color-text--deep-orange-A400 { + color: rgb(255,61,0) !important; } + +.mdl-color--deep-orange-A400 { + background-color: rgb(255,61,0) !important; } + +.mdl-color-text--deep-orange-A700 { + color: rgb(221,44,0) !important; } + +.mdl-color--deep-orange-A700 { + background-color: rgb(221,44,0) !important; } + +.mdl-color-text--brown { + color: rgb(121,85,72) !important; } + +.mdl-color--brown { + background-color: rgb(121,85,72) !important; } + +.mdl-color-text--brown-50 { + color: rgb(239,235,233) !important; } + +.mdl-color--brown-50 { + background-color: rgb(239,235,233) !important; } + +.mdl-color-text--brown-100 { + color: rgb(215,204,200) !important; } + +.mdl-color--brown-100 { + background-color: rgb(215,204,200) !important; } + +.mdl-color-text--brown-200 { + color: rgb(188,170,164) !important; } + +.mdl-color--brown-200 { + background-color: rgb(188,170,164) !important; } + +.mdl-color-text--brown-300 { + color: rgb(161,136,127) !important; } + +.mdl-color--brown-300 { + background-color: rgb(161,136,127) !important; } + +.mdl-color-text--brown-400 { + color: rgb(141,110,99) !important; } + +.mdl-color--brown-400 { + background-color: rgb(141,110,99) !important; } + +.mdl-color-text--brown-500 { + color: rgb(121,85,72) !important; } + +.mdl-color--brown-500 { + background-color: rgb(121,85,72) !important; } + +.mdl-color-text--brown-600 { + color: rgb(109,76,65) !important; } + +.mdl-color--brown-600 { + background-color: rgb(109,76,65) !important; } + +.mdl-color-text--brown-700 { + color: rgb(93,64,55) !important; } + +.mdl-color--brown-700 { + background-color: rgb(93,64,55) !important; } + +.mdl-color-text--brown-800 { + color: rgb(78,52,46) !important; } + +.mdl-color--brown-800 { + background-color: rgb(78,52,46) !important; } + +.mdl-color-text--brown-900 { + color: rgb(62,39,35) !important; } + +.mdl-color--brown-900 { + background-color: rgb(62,39,35) !important; } + +.mdl-color-text--grey { + color: rgb(158,158,158) !important; } + +.mdl-color--grey { + background-color: rgb(158,158,158) !important; } + +.mdl-color-text--grey-50 { + color: rgb(250,250,250) !important; } + +.mdl-color--grey-50 { + background-color: rgb(250,250,250) !important; } + +.mdl-color-text--grey-100 { + color: rgb(245,245,245) !important; } + +.mdl-color--grey-100 { + background-color: rgb(245,245,245) !important; } + +.mdl-color-text--grey-200 { + color: rgb(238,238,238) !important; } + +.mdl-color--grey-200 { + background-color: rgb(238,238,238) !important; } + +.mdl-color-text--grey-300 { + color: rgb(224,224,224) !important; } + +.mdl-color--grey-300 { + background-color: rgb(224,224,224) !important; } + +.mdl-color-text--grey-400 { + color: rgb(189,189,189) !important; } + +.mdl-color--grey-400 { + background-color: rgb(189,189,189) !important; } + +.mdl-color-text--grey-500 { + color: rgb(158,158,158) !important; } + +.mdl-color--grey-500 { + background-color: rgb(158,158,158) !important; } + +.mdl-color-text--grey-600 { + color: rgb(117,117,117) !important; } + +.mdl-color--grey-600 { + background-color: rgb(117,117,117) !important; } + +.mdl-color-text--grey-700 { + color: rgb(97,97,97) !important; } + +.mdl-color--grey-700 { + background-color: rgb(97,97,97) !important; } + +.mdl-color-text--grey-800 { + color: rgb(66,66,66) !important; } + +.mdl-color--grey-800 { + background-color: rgb(66,66,66) !important; } + +.mdl-color-text--grey-900 { + color: rgb(33,33,33) !important; } + +.mdl-color--grey-900 { + background-color: rgb(33,33,33) !important; } + +.mdl-color-text--blue-grey { + color: rgb(96,125,139) !important; } + +.mdl-color--blue-grey { + background-color: rgb(96,125,139) !important; } + +.mdl-color-text--blue-grey-50 { + color: rgb(236,239,241) !important; } + +.mdl-color--blue-grey-50 { + background-color: rgb(236,239,241) !important; } + +.mdl-color-text--blue-grey-100 { + color: rgb(207,216,220) !important; } + +.mdl-color--blue-grey-100 { + background-color: rgb(207,216,220) !important; } + +.mdl-color-text--blue-grey-200 { + color: rgb(176,190,197) !important; } + +.mdl-color--blue-grey-200 { + background-color: rgb(176,190,197) !important; } + +.mdl-color-text--blue-grey-300 { + color: rgb(144,164,174) !important; } + +.mdl-color--blue-grey-300 { + background-color: rgb(144,164,174) !important; } + +.mdl-color-text--blue-grey-400 { + color: rgb(120,144,156) !important; } + +.mdl-color--blue-grey-400 { + background-color: rgb(120,144,156) !important; } + +.mdl-color-text--blue-grey-500 { + color: rgb(96,125,139) !important; } + +.mdl-color--blue-grey-500 { + background-color: rgb(96,125,139) !important; } + +.mdl-color-text--blue-grey-600 { + color: rgb(84,110,122) !important; } + +.mdl-color--blue-grey-600 { + background-color: rgb(84,110,122) !important; } + +.mdl-color-text--blue-grey-700 { + color: rgb(69,90,100) !important; } + +.mdl-color--blue-grey-700 { + background-color: rgb(69,90,100) !important; } + +.mdl-color-text--blue-grey-800 { + color: rgb(55,71,79) !important; } + +.mdl-color--blue-grey-800 { + background-color: rgb(55,71,79) !important; } + +.mdl-color-text--blue-grey-900 { + color: rgb(38,50,56) !important; } + +.mdl-color--blue-grey-900 { + background-color: rgb(38,50,56) !important; } + +.mdl-color--black { + background-color: rgb(0,0,0) !important; } + +.mdl-color-text--black { + color: rgb(0,0,0) !important; } + +.mdl-color--white { + background-color: rgb(255,255,255) !important; } + +.mdl-color-text--white { + color: rgb(255,255,255) !important; } + +.mdl-color--primary { + background-color: rgb(63,81,181) !important; } + +.mdl-color--primary-contrast { + background-color: rgb(255,255,255) !important; } + +.mdl-color--primary-dark { + background-color: rgb(48,63,159) !important; } + +.mdl-color--accent { + background-color: rgb(255,64,129) !important; } + +.mdl-color--accent-contrast { + background-color: rgb(255,255,255) !important; } + +.mdl-color-text--primary { + color: rgb(63,81,181) !important; } + +.mdl-color-text--primary-contrast { + color: rgb(255,255,255) !important; } + +.mdl-color-text--primary-dark { + color: rgb(48,63,159) !important; } + +.mdl-color-text--accent { + color: rgb(255,64,129) !important; } + +.mdl-color-text--accent-contrast { + color: rgb(255,255,255) !important; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-ripple { + background: rgb(0,0,0); + border-radius: 50%; + height: 50px; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 50px; + overflow: hidden; } + .mdl-ripple.is-animating { + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1); + transition: transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1); } + .mdl-ripple.is-visible { + opacity: 0.3; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-animation--default { + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + +.mdl-animation--fast-out-slow-in { + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + +.mdl-animation--linear-out-slow-in { + -webkit-transition-timing-function: cubic-bezier(0, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); } + +.mdl-animation--fast-out-linear-in { + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1); + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-badge { + position: relative; + white-space: nowrap; + margin-right: 24px; } + .mdl-badge:not([data-badge]) { + margin-right: auto; } + .mdl-badge[data-badge]:after { + content: attr(data-badge); + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + position: absolute; + top: -11px; + right: -24px; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-weight: 600; + font-size: 12px; + width: 22px; + height: 22px; + border-radius: 50%; + background: rgb(255,64,129); + color: rgb(255,255,255); } + .mdl-button .mdl-badge[data-badge]:after { + top: -10px; + right: -5px; } + .mdl-badge.mdl-badge--no-background[data-badge]:after { + color: rgb(255,64,129); + background: rgba(255,255,255,0.2); + box-shadow: 0 0 1px gray; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-button { + background: transparent; + border: none; + border-radius: 2px; + color: rgb(0,0,0); + position: relative; + height: 36px; + min-width: 64px; + padding: 0 8px; + display: inline-block; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + line-height: 1; + letter-spacing: 0; + overflow: hidden; + will-change: box-shadow, transform; + -webkit-transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + outline: none; + cursor: pointer; + text-decoration: none; + text-align: center; + line-height: 36px; + vertical-align: middle; } + .mdl-button::-moz-focus-inner { + border: 0; } + .mdl-button:hover { + background-color: rgba(158,158,158, 0.20); } + .mdl-button:focus:not(:active) { + background-color: rgba(0,0,0, 0.12); } + .mdl-button:active { + background-color: rgba(158,158,158, 0.40); } + .mdl-button.mdl-button--colored { + color: rgb(63,81,181); } + .mdl-button.mdl-button--colored:focus:not(:active) { + background-color: rgba(0,0,0, 0.12); } + +input.mdl-button[type="submit"] { + -webkit-appearance: none; } + +.mdl-button--raised { + background: rgba(158,158,158, 0.20); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + .mdl-button--raised:active { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--raised:focus:not(:active) { + box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--raised.mdl-button--colored { + background: rgb(63,81,181); + color: rgb(255,255,255); } + .mdl-button--raised.mdl-button--colored:hover { + background-color: rgb(63,81,181); } + .mdl-button--raised.mdl-button--colored:active { + background-color: rgb(63,81,181); } + .mdl-button--raised.mdl-button--colored:focus:not(:active) { + background-color: rgb(63,81,181); } + .mdl-button--raised.mdl-button--colored .mdl-ripple { + background: rgb(255,255,255); } + +.mdl-button--fab { + border-radius: 50%; + font-size: 24px; + height: 56px; + margin: auto; + min-width: 56px; + width: 56px; + padding: 0; + overflow: hidden; + background: rgba(158,158,158, 0.20); + box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24); + position: relative; + line-height: normal; } + .mdl-button--fab .material-icons { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-12px, -12px); + -ms-transform: translate(-12px, -12px); + transform: translate(-12px, -12px); + line-height: 24px; + width: 24px; } + .mdl-button--fab.mdl-button--mini-fab { + height: 40px; + min-width: 40px; + width: 40px; } + .mdl-button--fab .mdl-button__ripple-container { + border-radius: 50%; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-button--fab:active { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--fab:focus:not(:active) { + box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--fab.mdl-button--colored { + background: rgb(255,64,129); + color: rgb(255,255,255); } + .mdl-button--fab.mdl-button--colored:hover { + background-color: rgb(255,64,129); } + .mdl-button--fab.mdl-button--colored:focus:not(:active) { + background-color: rgb(255,64,129); } + .mdl-button--fab.mdl-button--colored:active { + background-color: rgb(255,64,129); } + .mdl-button--fab.mdl-button--colored .mdl-ripple { + background: rgb(255,255,255); } + +.mdl-button--icon { + border-radius: 50%; + font-size: 24px; + height: 32px; + margin-left: 0; + margin-right: 0; + min-width: 32px; + width: 32px; + padding: 0; + overflow: hidden; + color: inherit; + line-height: normal; } + .mdl-button--icon .material-icons { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-12px, -12px); + -ms-transform: translate(-12px, -12px); + transform: translate(-12px, -12px); + line-height: 24px; + width: 24px; } + .mdl-button--icon.mdl-button--mini-icon { + height: 24px; + min-width: 24px; + width: 24px; } + .mdl-button--icon.mdl-button--mini-icon .material-icons { + top: 0px; + left: 0px; } + .mdl-button--icon .mdl-button__ripple-container { + border-radius: 50%; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + +.mdl-button__ripple-container { + display: block; + height: 100%; + left: 0px; + position: absolute; + top: 0px; + width: 100%; + z-index: 0; + overflow: hidden; } + .mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple, + .mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple { + background-color: transparent; } + +.mdl-button--primary.mdl-button--primary { + color: rgb(63,81,181); } + .mdl-button--primary.mdl-button--primary .mdl-ripple { + background: rgb(255,255,255); } + .mdl-button--primary.mdl-button--primary.mdl-button--raised, .mdl-button--primary.mdl-button--primary.mdl-button--fab { + color: rgb(255,255,255); + background-color: rgb(63,81,181); } + +.mdl-button--accent.mdl-button--accent { + color: rgb(255,64,129); } + .mdl-button--accent.mdl-button--accent .mdl-ripple { + background: rgb(255,255,255); } + .mdl-button--accent.mdl-button--accent.mdl-button--raised, .mdl-button--accent.mdl-button--accent.mdl-button--fab { + color: rgb(255,255,255); + background-color: rgb(255,64,129); } + +.mdl-button[disabled][disabled], +.mdl-button.mdl-button--disabled.mdl-button--disabled { + color: rgba(0,0,0, 0.26); + cursor: auto; + background-color: transparent; } + +.mdl-button--fab[disabled][disabled], +.mdl-button--fab.mdl-button--disabled.mdl-button--disabled { + background-color: rgba(0,0,0, 0.12); + color: rgba(0,0,0, 0.26); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-button--raised[disabled][disabled], +.mdl-button--raised.mdl-button--disabled.mdl-button--disabled { + background-color: rgba(0,0,0, 0.12); + color: rgba(0,0,0, 0.26); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-button--colored[disabled][disabled], +.mdl-button--colored.mdl-button--disabled.mdl-button--disabled { + color: rgba(0,0,0, 0.26); } + +.mdl-button .material-icons { + vertical-align: middle; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-card { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + font-size: 16px; + font-weight: 400; + min-height: 200px; + overflow: hidden; + width: 330px; + z-index: 1; + position: relative; + background: rgb(255,255,255); + border-radius: 2px; + box-sizing: border-box; } + +.mdl-card__media { + background-color: rgb(255,64,129); + background-repeat: repeat; + background-position: 50% 50%; + background-size: cover; + background-origin: padding-box; + background-attachment: scroll; + box-sizing: border-box; } + +.mdl-card__title { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + color: rgb(0,0,0); + display: block; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: stretch; + -webkit-justify-content: stretch; + -ms-flex-pack: stretch; + justify-content: stretch; + line-height: normal; + padding: 16px 16px; + -webkit-perspective-origin: 165px 56px; + perspective-origin: 165px 56px; + -webkit-transform-origin: 165px 56px; + -ms-transform-origin: 165px 56px; + transform-origin: 165px 56px; + box-sizing: border-box; } + .mdl-card__title.mdl-card--border { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); } + +.mdl-card__title-text { + -webkit-align-self: flex-end; + -ms-flex-item-align: end; + align-self: flex-end; + color: inherit; + display: block; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + font-size: 24px; + font-weight: 300; + line-height: normal; + overflow: hidden; + -webkit-transform-origin: 149px 48px; + -ms-transform-origin: 149px 48px; + transform-origin: 149px 48px; + margin: 0; } + +.mdl-card__subtitle-text { + font-size: 14px; + color: grey; + margin: 0; } + +.mdl-card__supporting-text { + color: rgba(0,0,0, 0.54); + font-size: 13px; + line-height: 18px; + overflow: hidden; + padding: 16px 16px; + width: 90%; } + +.mdl-card__actions { + font-size: 16px; + line-height: normal; + width: 100%; + background-color: transparent; + padding: 8px; + box-sizing: border-box; } + .mdl-card__actions.mdl-card--border { + border-top: 1px solid rgba(0, 0, 0, 0.1); } + +.mdl-card--expand { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + +.mdl-card__menu { + position: absolute; + right: 16px; + top: 16px; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-checkbox { + position: relative; + z-index: 1; + vertical-align: middle; + display: inline-block; + box-sizing: border-box; + width: 100%; + height: 24px; + margin: 0; + padding: 0; } + .mdl-checkbox.is-upgraded { + padding-left: 24px; } + +.mdl-checkbox__input { + line-height: 24px; } + .mdl-checkbox.is-upgraded .mdl-checkbox__input { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-checkbox__box-outline { + position: absolute; + top: 3px; + left: 0; + display: inline-block; + box-sizing: border-box; + width: 16px; + height: 16px; + margin: 0; + cursor: pointer; + overflow: hidden; + border: 2px solid rgba(0,0,0, 0.54); + border-radius: 2px; + z-index: 2; } + .mdl-checkbox.is-checked .mdl-checkbox__box-outline { + border: 2px solid rgb(63,81,181); } + .mdl-checkbox.is-disabled .mdl-checkbox__box-outline { + border: 2px solid rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-checkbox__focus-helper { + position: absolute; + top: 3px; + left: 0; + display: inline-block; + box-sizing: border-box; + width: 16px; + height: 16px; + border-radius: 50%; + background-color: transparent; } + .mdl-checkbox.is-focused .mdl-checkbox__focus-helper { + box-shadow: 0 0 0px 8px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1); } + .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper { + box-shadow: 0 0 0px 8px rgba(63,81,181, 0.26); + background-color: rgba(63,81,181, 0.26); } + +.mdl-checkbox__tick-outline { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + -webkit-mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg=="); + mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg=="); + background: transparent; + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: background; + transition-property: background; } + .mdl-checkbox.is-checked .mdl-checkbox__tick-outline { + background: rgb(63,81,181) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K"); } + .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline { + background: rgba(0,0,0, 0.26) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K"); } + +.mdl-checkbox__label { + position: relative; + cursor: pointer; + font-size: 16px; + line-height: 24px; + margin: 0; } + .mdl-checkbox.is-disabled .mdl-checkbox__label { + color: rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-checkbox__ripple-container { + position: absolute; + z-index: 2; + top: -6px; + left: -10px; + box-sizing: border-box; + width: 36px; + height: 36px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-checkbox__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container { + cursor: auto; } + .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple { + background: transparent; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-data-table { + position: relative; + border: 1px solid rgba(0, 0, 0, 0.12); + border-collapse: collapse; + white-space: nowrap; + font-size: 13px; + background-color: rgb(255,255,255); } + .mdl-data-table thead { + padding-bottom: 3px; } + .mdl-data-table thead .mdl-data-table__select { + margin-top: 0; } + .mdl-data-table tbody tr { + position: relative; + height: 48px; + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: background-color; + transition-property: background-color; } + .mdl-data-table tbody tr.is-selected { + background-color: #e0e0e0; } + .mdl-data-table tbody tr:hover { + background-color: #eeeeee; } + .mdl-data-table td, .mdl-data-table th { + padding: 0 18px 0 18px; + text-align: right; } + .mdl-data-table td:first-of-type, .mdl-data-table th:first-of-type { + padding-left: 24px; } + .mdl-data-table td:last-of-type, .mdl-data-table th:last-of-type { + padding-right: 24px; } + .mdl-data-table td { + position: relative; + vertical-align: top; + height: 48px; + border-top: 1px solid rgba(0, 0, 0, 0.12); + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + padding-top: 12px; + box-sizing: border-box; } + .mdl-data-table td .mdl-data-table__select { + vertical-align: top; + position: absolute; + left: 24px; } + .mdl-data-table th { + position: relative; + vertical-align: bottom; + text-overflow: ellipsis; + font-size: 14px; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; + height: 48px; + font-size: 12px; + color: rgba(0, 0, 0, 0.54); + padding-bottom: 8px; + box-sizing: border-box; } + .mdl-data-table th .mdl-data-table__select { + position: absolute; + bottom: 8px; + left: 24px; } + +.mdl-data-table__select { + width: 16px; } + +.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric { + text-align: left; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-mega-footer { + padding: 16px 40px; + color: rgb(158,158,158); + background-color: rgb(66,66,66); } + +.mdl-mega-footer--top-section:after, +.mdl-mega-footer--middle-section:after, +.mdl-mega-footer--bottom-section:after, +.mdl-mega-footer__top-section:after, +.mdl-mega-footer__middle-section:after, +.mdl-mega-footer__bottom-section:after { + content: ''; + display: block; + clear: both; } + +.mdl-mega-footer--left-section, +.mdl-mega-footer__left-section { + margin-bottom: 16px; } + +.mdl-mega-footer--right-section, +.mdl-mega-footer__right-section { + margin-bottom: 16px; } + +.mdl-mega-footer--right-section a, +.mdl-mega-footer__right-section a { + display: block; + margin-bottom: 16px; + color: inherit; + text-decoration: none; } + +@media screen and (min-width: 760px) { + .mdl-mega-footer--left-section, + .mdl-mega-footer__left-section { + float: left; } + .mdl-mega-footer--right-section, + .mdl-mega-footer__right-section { + float: right; } + .mdl-mega-footer--right-section a, + .mdl-mega-footer__right-section a { + display: inline-block; + margin-left: 16px; + line-height: 36px; + vertical-align: middle; } } + +.mdl-mega-footer--social-btn, +.mdl-mega-footer__social-btn { + width: 36px; + height: 36px; + padding: 0; + margin: 0; + background-color: rgb(158,158,158); + border: none; } + +.mdl-mega-footer--drop-down-section, +.mdl-mega-footer__drop-down-section { + display: block; + position: relative; } + +@media screen and (min-width: 760px) { + .mdl-mega-footer--drop-down-section, + .mdl-mega-footer__drop-down-section { + width: 33%; } + .mdl-mega-footer--drop-down-section:nth-child(1), + .mdl-mega-footer--drop-down-section:nth-child(2), + .mdl-mega-footer__drop-down-section:nth-child(1), + .mdl-mega-footer__drop-down-section:nth-child(2) { + float: left; } + .mdl-mega-footer--drop-down-section:nth-child(3), + .mdl-mega-footer__drop-down-section:nth-child(3) { + float: right; } + .mdl-mega-footer--drop-down-section:nth-child(3):after, + .mdl-mega-footer__drop-down-section:nth-child(3):after { + clear: right; } + .mdl-mega-footer--drop-down-section:nth-child(4), + .mdl-mega-footer__drop-down-section:nth-child(4) { + clear: right; + float: right; } + .mdl-mega-footer--middle-section:after, + .mdl-mega-footer__middle-section:after { + content: ''; + display: block; + clear: both; } + .mdl-mega-footer--bottom-section, + .mdl-mega-footer__bottom-section { + padding-top: 0; } } + +@media screen and (min-width: 1024px) { + .mdl-mega-footer--drop-down-section, + .mdl-mega-footer--drop-down-section:nth-child(3), + .mdl-mega-footer--drop-down-section:nth-child(4), + .mdl-mega-footer__drop-down-section, + .mdl-mega-footer__drop-down-section:nth-child(3), + .mdl-mega-footer__drop-down-section:nth-child(4) { + width: 24%; + float: left; } } + +.mdl-mega-footer--heading-checkbox, +.mdl-mega-footer__heading-checkbox { + position: absolute; + width: 100%; + height: 55.8px; + padding: 32px; + margin: 0; + margin-top: -16px; + cursor: pointer; + z-index: 1; + opacity: 0; } + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer__heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer__heading:after { + font-family: 'Material Icons'; + content: '\E5CE'; } + +.mdl-mega-footer--heading-checkbox:checked ~ ul, +.mdl-mega-footer__heading-checkbox:checked ~ ul { + display: none; } + +.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--heading:after, +.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer__heading:after, +.mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer--heading:after, +.mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer__heading:after { + font-family: 'Material Icons'; + content: '\E5CF'; } + +.mdl-mega-footer--heading, +.mdl-mega-footer__heading { + position: relative; + width: 100%; + padding-right: 39.8px; + margin-bottom: 16px; + box-sizing: border-box; + font-size: 14px; + line-height: 23.8px; + font-weight: 500; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: rgb(224,224,224); } + +.mdl-mega-footer--heading:after, +.mdl-mega-footer__heading:after { + content: ''; + position: absolute; + top: 0; + right: 0; + display: block; + width: 23.8px; + height: 23.8px; + background-size: cover; } + +.mdl-mega-footer--link-list, +.mdl-mega-footer__link-list { + list-style: none; + margin: 0; + padding: 0; + margin-bottom: 32px; } + .mdl-mega-footer--link-list:after, + .mdl-mega-footer__link-list:after { + clear: both; + display: block; + content: ''; } + +.mdl-mega-footer--link-list li, +.mdl-mega-footer__link-list li { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + line-height: 20px; } + +.mdl-mega-footer--link-list a, +.mdl-mega-footer__link-list a { + color: inherit; + text-decoration: none; + white-space: nowrap; } + +@media screen and (min-width: 760px) { + .mdl-mega-footer--heading-checkbox, + .mdl-mega-footer__heading-checkbox { + display: none; } + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer__heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer__heading:after { + background-image: none; } + .mdl-mega-footer--heading-checkbox:checked ~ ul, + .mdl-mega-footer__heading-checkbox:checked ~ ul { + display: block; } + .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer__heading:after, + .mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer__heading:after { + content: ''; } } + +.mdl-mega-footer--bottom-section, +.mdl-mega-footer__bottom-section { + padding-top: 16px; + margin-bottom: 16px; } + +.mdl-logo { + margin-bottom: 16px; + color: white; } + +.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li, +.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li { + float: left; + margin-bottom: 0; + margin-right: 16px; } + +@media screen and (min-width: 760px) { + .mdl-logo { + float: left; + margin-bottom: 0; + margin-right: 16px; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-mini-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 32px 16px; + color: rgb(158,158,158); + background-color: rgb(66,66,66); } + .mdl-mini-footer:after { + content: ''; + display: block; } + .mdl-mini-footer .mdl-logo { + line-height: 36px; } + +.mdl-mini-footer--link-list, +.mdl-mini-footer__link-list { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row nowrap; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + list-style: none; + margin: 0; + padding: 0; } + .mdl-mini-footer--link-list li, + .mdl-mini-footer__link-list li { + margin-bottom: 0; + margin-right: 16px; } + @media screen and (min-width: 760px) { + .mdl-mini-footer--link-list li, + .mdl-mini-footer__link-list li { + line-height: 36px; } } + .mdl-mini-footer--link-list a, + .mdl-mini-footer__link-list a { + color: inherit; + text-decoration: none; + white-space: nowrap; } + +.mdl-mini-footer--left-section, +.mdl-mini-footer__left-section { + display: inline-block; + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + +.mdl-mini-footer--right-section, +.mdl-mini-footer__right-section { + display: inline-block; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + +.mdl-mini-footer--social-btn, +.mdl-mini-footer__social-btn { + width: 36px; + height: 36px; + padding: 0; + margin: 0; + background-color: rgb(158,158,158); + border: none; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-icon-toggle { + position: relative; + z-index: 1; + vertical-align: middle; + display: inline-block; + height: 32px; + margin: 0; + padding: 0; } + +.mdl-icon-toggle__input { + line-height: 32px; } + .mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-icon-toggle__label { + display: inline-block; + position: relative; + cursor: pointer; + height: 32px; + width: 32px; + min-width: 32px; + color: rgb(97,97,97); + border-radius: 50%; + padding: 0; + margin-left: 0; + margin-right: 0; + text-align: center; + background-color: transparent; + will-change: background-color; + -webkit-transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-icon-toggle__label.material-icons { + line-height: 32px; + font-size: 24px; } + .mdl-icon-toggle.is-checked .mdl-icon-toggle__label { + color: rgb(63,81,181); } + .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label { + color: rgba(0,0,0, 0.26); + cursor: auto; + -webkit-transition: none; + transition: none; } + .mdl-icon-toggle.is-focused .mdl-icon-toggle__label { + background-color: rgba(0,0,0, 0.12); } + .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label { + background-color: rgba(63,81,181, 0.26); } + +.mdl-icon-toggle__ripple-container { + position: absolute; + z-index: 2; + top: -2px; + left: -2px; + box-sizing: border-box; + width: 36px; + height: 36px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-icon-toggle__ripple-container .mdl-ripple { + background: rgb(97,97,97); } + .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container { + cursor: auto; } + .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple { + background: transparent; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-menu__container { + display: block; + margin: 0; + padding: 0; + border: none; + position: absolute; + overflow: visible; + height: 0; + width: 0; + visibility: hidden; + z-index: -1; } + .mdl-menu__container.is-visible, + .mdl-menu__container.is-animating { + z-index: 999; + visibility: visible; } + +.mdl-menu__outline { + display: block; + background: rgb(255,255,255); + margin: 0; + padding: 0; + border: none; + border-radius: 2px; + position: absolute; + top: 0; + left: 0; + overflow: hidden; + opacity: 0; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + will-change: transform; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + z-index: -1; } + .mdl-menu__container.is-visible .mdl-menu__outline { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + z-index: 999; } + .mdl-menu__outline.mdl-menu--bottom-right { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + transform-origin: 100% 0; } + .mdl-menu__outline.mdl-menu--top-left { + -webkit-transform-origin: 0 100%; + -ms-transform-origin: 0 100%; + transform-origin: 0 100%; } + .mdl-menu__outline.mdl-menu--top-right { + -webkit-transform-origin: 100% 100%; + -ms-transform-origin: 100% 100%; + transform-origin: 100% 100%; } + +.mdl-menu { + position: absolute; + list-style: none; + top: 0; + left: 0; + height: auto; + width: auto; + min-width: 124px; + padding: 8px 0; + margin: 0; + opacity: 0; + clip: rect(0 0 0 0); + z-index: -1; } + .mdl-menu__container.is-visible .mdl-menu { + opacity: 1; + z-index: 999; } + .mdl-menu.is-animating { + -webkit-transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), clip 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), clip 0.3s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-menu.mdl-menu--bottom-right { + left: auto; + right: 0; } + .mdl-menu.mdl-menu--top-left { + top: auto; + bottom: 0; } + .mdl-menu.mdl-menu--top-right { + top: auto; + left: auto; + bottom: 0; + right: 0; } + .mdl-menu.mdl-menu--unaligned { + top: auto; + left: auto; } + +.mdl-menu__item { + display: block; + border: none; + color: rgba(0,0,0, 0.87); + background-color: transparent; + text-align: left; + margin: 0; + padding: 0 16px; + outline-color: rgb(189,189,189); + position: relative; + overflow: hidden; + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + text-decoration: none; + cursor: pointer; + height: 48px; + line-height: 48px; + white-space: nowrap; + opacity: 0; + -webkit-transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .mdl-menu__container.is-visible .mdl-menu__item { + opacity: 1; } + .mdl-menu__item::-moz-focus-inner { + border: 0; } + .mdl-menu__item[disabled] { + color: rgb(189,189,189); + background-color: transparent; + cursor: auto; } + .mdl-menu__item[disabled]:hover { + background-color: transparent; } + .mdl-menu__item[disabled]:focus { + background-color: transparent; } + .mdl-menu__item[disabled] .mdl-ripple { + background: transparent; } + .mdl-menu__item:hover { + background-color: rgb(238,238,238); } + .mdl-menu__item:focus { + outline: none; + background-color: rgb(238,238,238); } + .mdl-menu__item:active { + background-color: rgb(224,224,224); } + +.mdl-menu__item--ripple-container { + display: block; + height: 100%; + left: 0px; + position: absolute; + top: 0px; + width: 100%; + z-index: 0; + overflow: hidden; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-progress { + display: block; + position: relative; + height: 4px; + width: 500px; } + +.mdl-progress > .bar { + display: block; + position: absolute; + top: 0; + bottom: 0; + width: 0%; + -webkit-transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1); } + +.mdl-progress > .progressbar { + background-color: rgb(63,81,181); + z-index: 1; + left: 0; } + +.mdl-progress > .bufferbar { + background-image: -webkit-linear-gradient(left, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), -webkit-linear-gradient(left, rgb(63,81,181), rgb(63,81,181)); + background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); + z-index: 0; + left: 0; } + +.mdl-progress > .auxbar { + right: 0; } + +@supports (-webkit-appearance: none) { + .mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate) > .auxbar { + background-image: -webkit-linear-gradient(left, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), -webkit-linear-gradient(left, rgb(63,81,181), rgb(63,81,181)); + background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); + -webkit-mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo="); + mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo="); } } + +.mdl-progress:not(.mdl-progress__indeterminate) > .auxbar { + background-image: -webkit-linear-gradient(left, rgba(255,255,255, 0.9), rgba(255,255,255, 0.9)), -webkit-linear-gradient(left, rgb(63,81,181), rgb(63,81,181)); + background-image: linear-gradient(to right, rgba(255,255,255, 0.9), rgba(255,255,255, 0.9)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); } + +.mdl-progress.mdl-progress__indeterminate > .bar1 { + background-color: rgb(63,81,181); + -webkit-animation-name: indeterminate1; + animation-name: indeterminate1; + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + +.mdl-progress.mdl-progress__indeterminate > .bar3 { + background-image: none; + background-color: rgb(63,81,181); + -webkit-animation-name: indeterminate2; + animation-name: indeterminate2; + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + +@-webkit-keyframes indeterminate1 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 25%; + width: 75%; } + 75% { + left: 100%; + width: 0%; } } + +@keyframes indeterminate1 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 25%; + width: 75%; } + 75% { + left: 100%; + width: 0%; } } + +@-webkit-keyframes indeterminate2 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 0%; + width: 0%; } + 75% { + left: 0%; + width: 25%; } + 100% { + left: 100%; + width: 0%; } } + +@keyframes indeterminate2 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 0%; + width: 0%; } + 75% { + left: 0%; + width: 25%; } + 100% { + left: 100%; + width: 0%; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-navigation { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + box-sizing: border-box; } + +.mdl-navigation__link { + color: rgb(66,66,66); + text-decoration: none; + font-weight: 500; + font-size: 13px; + margin: 0; } + +.mdl-layout { + width: 100%; + height: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; + position: relative; + -webkit-overflow-scrolling: touch; } + +.mdl-layout.is-small-screen .mdl-layout--large-screen-only { + display: none; } + +.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only { + display: none; } + +.mdl-layout__container { + position: absolute; + width: 100%; + height: 100%; } + +.mdl-layout-title { + display: block; + position: relative; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + font-weight: 400; + box-sizing: border-box; } + +.mdl-layout-spacer { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + +.mdl-layout__drawer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + width: 240px; + height: 100%; + max-height: 100%; + position: absolute; + top: 0; + left: 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + box-sizing: border-box; + border-right: 1px solid rgb(224,224,224); + background: rgb(250,250,250); + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + will-change: transform; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: -webkit-transform; + transition-property: transform; + color: rgb(66,66,66); + overflow: visible; + overflow-y: auto; + z-index: 5; } + .mdl-layout__drawer.is-visible { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); } + .mdl-layout__drawer > * { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + .mdl-layout__drawer > .mdl-layout-title { + line-height: 64px; + padding-left: 40px; } + @media screen and (max-width: 1024px) { + .mdl-layout__drawer > .mdl-layout-title { + line-height: 56px; + padding-left: 16px; } } + .mdl-layout__drawer .mdl-navigation { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + padding-top: 16px; } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link { + display: block; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + padding: 16px 40px; + margin: 0; + color: #757575; } + @media screen and (max-width: 1024px) { + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link { + padding: 16px 16px; } } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover { + background-color: rgb(224,224,224); } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current { + background-color: rgb(0,0,0); + color: rgb(63,81,181); } + @media screen and (min-width: 1025px) { + .mdl-layout--fixed-drawer > .mdl-layout__drawer { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); } } + +.mdl-layout__drawer-button { + display: block; + position: absolute; + height: 48px; + width: 48px; + border: 0; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + overflow: hidden; + text-align: center; + cursor: pointer; + font-size: 26px; + line-height: 50px; + font-family: Helvetica, Arial, sans-serif; + margin: 10px 12px; + top: 0; + left: 0; + color: rgb(255,255,255); + z-index: 4; } + .mdl-layout__header .mdl-layout__drawer-button { + position: absolute; + color: rgb(255,255,255); + background-color: inherit; } + @media screen and (max-width: 1024px) { + .mdl-layout__header .mdl-layout__drawer-button { + margin: 4px; } } + @media screen and (max-width: 1024px) { + .mdl-layout__drawer-button { + margin: 4px; + color: rgba(0, 0, 0, 0.5); } } + @media screen and (min-width: 1025px) { + .mdl-layout--fixed-drawer > .mdl-layout__drawer-button { + display: none; } } + +.mdl-layout__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + box-sizing: border-box; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + width: 100%; + margin: 0; + padding: 0; + border: none; + min-height: 64px; + max-height: 1000px; + z-index: 3; + background-color: rgb(63,81,181); + color: rgb(255,255,255); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: max-height, box-shadow; + transition-property: max-height, box-shadow; } + @media screen and (max-width: 1024px) { + .mdl-layout__header { + min-height: 56px; } } + .mdl-layout--fixed-drawer:not(.is-small-screen) > .mdl-layout__header { + margin-left: 240px; + width: calc(100% - 240px); } + @media screen and (min-width: 1024px) { + .mdl-layout--fixed-drawer > .mdl-layout__header .mdl-layout__header-row { + padding-left: 40px; } } + .mdl-layout__header > .mdl-layout-icon { + position: absolute; + left: 40px; + top: 16px; + height: 32px; + width: 32px; + overflow: hidden; + z-index: 3; + display: block; } + @media screen and (max-width: 1024px) { + .mdl-layout__header > .mdl-layout-icon { + left: 16px; + top: 12px; } } + .mdl-layout.has-drawer .mdl-layout__header > .mdl-layout-icon { + display: none; } + .mdl-layout__header.is-compact { + max-height: 64px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header.is-compact { + max-height: 56px; } } + .mdl-layout__header.is-compact.has-tabs { + height: 112px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header.is-compact.has-tabs { + min-height: 104px; } } + @media screen and (max-width: 1024px) { + .mdl-layout__header { + display: none; } + .mdl-layout--fixed-header > .mdl-layout__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } } + +.mdl-layout__header--transparent.mdl-layout__header--transparent { + background-color: transparent; + box-shadow: none; } + +.mdl-layout__header--seamed { + box-shadow: none; } + +.mdl-layout__header--scroll { + box-shadow: none; } + +.mdl-layout__header--waterfall { + box-shadow: none; + overflow: hidden; } + .mdl-layout__header--waterfall.is-casting-shadow { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-layout__header-row { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + box-sizing: border-box; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 64px; + margin: 0; + padding: 0 40px 0 80px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header-row { + height: 56px; + padding: 0 16px 0 72px; } } + .mdl-layout__header-row > * { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + .mdl-layout__header--scroll .mdl-layout__header-row { + width: 100%; } + .mdl-layout__header-row .mdl-navigation { + margin: 0; + padding: 0; + height: 64px; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + @media screen and (max-width: 1024px) { + .mdl-layout__header-row .mdl-navigation { + height: 56px; } } + .mdl-layout__header-row .mdl-navigation__link { + display: block; + color: rgb(255,255,255); + line-height: 64px; + padding: 0 24px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header-row .mdl-navigation__link { + line-height: 56px; + padding: 0 16px; } } + +.mdl-layout__obfuscator { + background-color: transparent; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 4; + visibility: hidden; + -webkit-transition-property: background-color; + transition-property: background-color; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-layout__drawer.is-visible ~ .mdl-layout__obfuscator { + background-color: rgba(0, 0, 0, 0.5); + visibility: visible; } + +.mdl-layout__content { + -ms-flex: 0 1 auto; + display: inline-block; + overflow-y: auto; + overflow-x: hidden; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + z-index: 1; + -webkit-overflow-scrolling: touch; } + .mdl-layout--fixed-drawer > .mdl-layout__content { + margin-left: 240px; } + .mdl-layout__container.has-scrolling-header .mdl-layout__content { + overflow: visible; } + @media screen and (max-width: 1024px) { + .mdl-layout--fixed-drawer > .mdl-layout__content { + margin-left: 0; } + .mdl-layout__container.has-scrolling-header .mdl-layout__content { + overflow-y: auto; + overflow-x: hidden; } } + +.mdl-layout__tab-bar { + height: 96px; + margin: 0; + width: calc(100% - 112px); + padding: 0 0 0 56px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + background-color: rgb(63,81,181); + overflow-y: hidden; + overflow-x: scroll; } + .mdl-layout__tab-bar::-webkit-scrollbar { + display: none; } + @media screen and (max-width: 1024px) { + .mdl-layout__tab-bar { + width: calc(100% - 60px); + padding: 0 0 0 60px; } } + .mdl-layout--fixed-tabs .mdl-layout__tab-bar { + padding: 0; + overflow: hidden; + width: 100%; } + +.mdl-layout__tab-bar-container { + position: relative; + height: 48px; + width: 100%; + border: none; + margin: 0; + z-index: 2; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + overflow: hidden; } + .mdl-layout__container > .mdl-layout__tab-bar-container { + position: absolute; + top: 0; + left: 0; } + +.mdl-layout__tab-bar-button { + display: inline-block; + position: absolute; + top: 0; + height: 48px; + width: 56px; + z-index: 4; + text-align: center; + background-color: rgb(63,81,181); + color: transparent; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + @media screen and (max-width: 1024px) { + .mdl-layout__tab-bar-button { + display: none; + width: 60px; } } + .mdl-layout--fixed-tabs .mdl-layout__tab-bar-button { + display: none; } + .mdl-layout__tab-bar-button .material-icons { + line-height: 48px; } + .mdl-layout__tab-bar-button.is-active { + color: rgb(255,255,255); } + +.mdl-layout__tab-bar-left-button { + left: 0; } + +.mdl-layout__tab-bar-right-button { + right: 0; } + +.mdl-layout__tab { + margin: 0; + border: none; + padding: 0 24px 0 24px; + float: left; + position: relative; + display: block; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + text-decoration: none; + height: 48px; + line-height: 48px; + text-align: center; + font-weight: 500; + font-size: 14px; + text-transform: uppercase; + color: rgba(255,255,255, 0.6); + overflow: hidden; } + @media screen and (max-width: 1024px) { + .mdl-layout__tab { + padding: 0 12px 0 12px; } } + .mdl-layout--fixed-tabs .mdl-layout__tab { + float: none; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 0; } + .mdl-layout.is-upgraded .mdl-layout__tab.is-active { + color: rgb(255,255,255); } + .mdl-layout.is-upgraded .mdl-layout__tab.is-active::after { + height: 2px; + width: 100%; + display: block; + content: " "; + bottom: 0; + left: 0; + position: absolute; + background: rgb(255,64,129); + -webkit-animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + -webkit-transition: all 1s cubic-bezier(0.4, 0, 1, 1); + transition: all 1s cubic-bezier(0.4, 0, 1, 1); } + .mdl-layout__tab .mdl-layout__tab-ripple-container { + display: block; + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + z-index: 1; + overflow: hidden; } + .mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple { + background-color: rgb(255,255,255); } + +.mdl-layout__tab-panel { + display: block; } + .mdl-layout.is-upgraded .mdl-layout__tab-panel { + display: none; } + .mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active { + display: block; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-radio { + position: relative; + font-size: 16px; + line-height: 24px; + display: inline-block; + box-sizing: border-box; + margin: 0; + padding-left: 0; } + .mdl-radio.is-upgraded { + padding-left: 24px; } + +.mdl-radio__button { + line-height: 24px; } + .mdl-radio.is-upgraded .mdl-radio__button { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-radio__outer-circle { + position: absolute; + top: 4px; + left: 0; + display: inline-block; + box-sizing: border-box; + width: 16px; + height: 16px; + margin: 0; + cursor: pointer; + border: 2px solid rgba(0,0,0, 0.54); + border-radius: 50%; + z-index: 2; } + .mdl-radio.is-checked .mdl-radio__outer-circle { + border: 2px solid rgb(63,81,181); } + .mdl-radio.is-disabled .mdl-radio__outer-circle { + border: 2px solid rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-radio__inner-circle { + position: absolute; + z-index: 1; + margin: 0; + top: 8px; + left: 4px; + box-sizing: border-box; + width: 8px; + height: 8px; + cursor: pointer; + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: -webkit-transform; + transition-property: transform; + -webkit-transform: scale3d(0, 0, 0); + transform: scale3d(0, 0, 0); + border-radius: 50%; + background: rgb(63,81,181); } + .mdl-radio.is-checked .mdl-radio__inner-circle { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + .mdl-radio.is-disabled .mdl-radio__inner-circle { + background: rgba(0,0,0, 0.26); + cursor: auto; } + .mdl-radio.is-focused .mdl-radio__inner-circle { + box-shadow: 0 0 0px 10px rgba(0, 0, 0, 0.1); } + +.mdl-radio__label { + cursor: pointer; } + .mdl-radio.is-disabled .mdl-radio__label { + color: rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-radio__ripple-container { + position: absolute; + z-index: 2; + top: -9px; + left: -13px; + box-sizing: border-box; + width: 42px; + height: 42px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-radio__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + .mdl-radio.is-disabled .mdl-radio__ripple-container { + cursor: auto; } + .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple { + background: transparent; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +_:-ms-input-placeholder, :root .mdl-slider.mdl-slider.is-upgraded { + -ms-appearance: none; + height: 32px; + margin: 0; } + +.mdl-slider { + width: calc(100% - 40px); + margin: 0 20px; } + .mdl-slider.is-upgraded { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 2px; + background: transparent; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: 0; + padding: 0; + color: rgb(63,81,181); + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + z-index: 1; + cursor: pointer; + /**************************** Tracks ****************************/ + /**************************** Thumbs ****************************/ + /**************************** 0-value ****************************/ + /**************************** Disabled ****************************/ } + .mdl-slider.is-upgraded::-moz-focus-outer { + border: 0; } + .mdl-slider.is-upgraded::-ms-tooltip { + display: none; } + .mdl-slider.is-upgraded::-webkit-slider-runnable-track { + background: transparent; } + .mdl-slider.is-upgraded::-moz-range-track { + background: transparent; + border: none; } + .mdl-slider.is-upgraded::-ms-track { + background: none; + color: transparent; + height: 2px; + width: 100%; + border: none; } + .mdl-slider.is-upgraded::-ms-fill-lower { + padding: 0; + background: linear-gradient(to right, transparent, transparent 16px, rgb(63,81,181) 16px, rgb(63,81,181) 0); } + .mdl-slider.is-upgraded::-ms-fill-upper { + padding: 0; + background: linear-gradient(to left, transparent, transparent 16px, rgba(0,0,0, 0.26) 16px, rgba(0,0,0, 0.26) 0); } + .mdl-slider.is-upgraded::-webkit-slider-thumb { + -webkit-appearance: none; + width: 12px; + height: 12px; + box-sizing: border-box; + border-radius: 50%; + background: rgb(63,81,181); + border: none; + -webkit-transition: -webkit-transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-slider.is-upgraded::-moz-range-thumb { + -moz-appearance: none; + width: 12px; + height: 12px; + box-sizing: border-box; + border-radius: 50%; + background-image: none; + background: rgb(63,81,181); + border: none; } + .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb { + box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); } + .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); } + .mdl-slider.is-upgraded:active::-webkit-slider-thumb { + background-image: none; + background: rgb(63,81,181); + -webkit-transform: scale(1.5); + transform: scale(1.5); } + .mdl-slider.is-upgraded:active::-moz-range-thumb { + background-image: none; + background: rgb(63,81,181); + transform: scale(1.5); } + .mdl-slider.is-upgraded::-ms-thumb { + width: 32px; + height: 32px; + border: none; + border-radius: 50%; + background: rgb(63,81,181); + -ms-transform: scale(0.375); + transform: scale(0.375); + transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb { + background: radial-gradient(circle closest-side, rgb(63,81,181) 0%, rgb(63,81,181) 37.5%, rgba(63,81,181, 0.26) 37.5%, rgba(63,81,181, 0.26) 100%); + -ms-transform: scale(1); + transform: scale(1); } + .mdl-slider.is-upgraded:active::-ms-thumb { + background: rgb(63,81,181); + -ms-transform: scale(0.5625); + transform: scale(0.5625); } + .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb { + border: 2px solid rgba(0,0,0, 0.26); + background: transparent; } + .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb { + border: 2px solid rgba(0,0,0, 0.26); + background: transparent; } + .mdl-slider.is-upgraded.is-lowest-value ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb { + box-shadow: 0 0 0 10px rgba(0,0,0, 0.12); + background: rgba(0,0,0, 0.12); } + .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(0,0,0, 0.12); + background: rgba(0,0,0, 0.12); } + .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb { + border: 1.6px solid rgba(0,0,0, 0.26); + -webkit-transform: scale(1.5); + transform: scale(1.5); } + .mdl-slider.is-upgraded.is-lowest-value:active ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 9px; } + .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb { + border: 1.5px solid rgba(0,0,0, 0.26); + transform: scale(1.5); } + .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb { + background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(0,0,0, 0.26) 66.67%, rgba(0,0,0, 0.26) 100%); } + .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb { + background: radial-gradient(circle closest-side, rgba(0,0,0, 0.12) 0%, rgba(0,0,0, 0.12) 25%, rgba(0,0,0, 0.26) 25%, rgba(0,0,0, 0.26) 37.5%, rgba(0,0,0, 0.12) 37.5%, rgba(0,0,0, 0.12) 100%); + -ms-transform: scale(1); + transform: scale(1); } + .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb { + -ms-transform: scale(0.5625); + transform: scale(0.5625); + background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(0,0,0, 0.26) 77.78%, rgba(0,0,0, 0.26) 100%); } + .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower { + background: transparent; } + .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper { + margin-left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper { + margin-left: 9px; } + .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb, + .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb, + .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb { + -webkit-transform: scale(0.667); + transform: scale(0.667); + background: rgba(0,0,0, 0.26); } + .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb, + .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb, + .mdl-slider.is-upgraded:disabled::-moz-range-thumb { + transform: scale(0.667); + background: rgba(0,0,0, 0.26); } + .mdl-slider.is-upgraded:disabled ~ +.mdl-slider__background-flex > .mdl-slider__background-lower { + background-color: rgba(0,0,0, 0.26); + left: -6px; } + .mdl-slider.is-upgraded:disabled ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb { + border: 3px solid rgba(0,0,0, 0.26); + background: transparent; + -webkit-transform: scale(0.667); + transform: scale(0.667); } + .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb { + border: 3px solid rgba(0,0,0, 0.26); + background: transparent; + transform: scale(0.667); } + .mdl-slider.is-upgraded.is-lowest-value:disabled:active ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; } + .mdl-slider.is-upgraded:disabled:focus::-ms-thumb, + .mdl-slider.is-upgraded:disabled:active::-ms-thumb, + .mdl-slider.is-upgraded:disabled::-ms-thumb { + -ms-transform: scale(0.25); + transform: scale(0.25); + background: rgba(0,0,0, 0.26); } + .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb { + -ms-transform: scale(0.25); + transform: scale(0.25); + background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(0,0,0, 0.26) 50%, rgba(0,0,0, 0.26) 100%); } + .mdl-slider.is-upgraded:disabled::-ms-fill-lower { + margin-right: 6px; + background: linear-gradient(to right, transparent, transparent 25px, rgba(0,0,0, 0.26) 25px, rgba(0,0,0, 0.26) 0); } + .mdl-slider.is-upgraded:disabled::-ms-fill-upper { + margin-left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper { + margin-left: 6px; } + +.mdl-slider__ie-container { + height: 18px; + overflow: visible; + border: none; + margin: none; + padding: none; } + +.mdl-slider__container { + height: 18px; + position: relative; + background: none; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + +.mdl-slider__background-flex { + background: transparent; + position: absolute; + height: 2px; + width: calc(100% - 52px); + top: 50%; + left: 0; + margin: 0 26px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + border: 0; + padding: 0; + -webkit-transform: translate(0, -1px); + -ms-transform: translate(0, -1px); + transform: translate(0, -1px); } + +.mdl-slider__background-lower { + background: rgb(63,81,181); + -webkit-box-flex: 0; + -webkit-flex: 0; + -ms-flex: 0; + flex: 0; + position: relative; + border: 0; + padding: 0; } + +.mdl-slider__background-upper { + background: rgba(0,0,0, 0.26); + -webkit-box-flex: 0; + -webkit-flex: 0; + -ms-flex: 0; + flex: 0; + position: relative; + border: 0; + padding: 0; + -webkit-transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1); + transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1); } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-spinner { + display: inline-block; + position: relative; + width: 28px; + height: 28px; } + .mdl-spinner:not(.is-upgraded).is-active:after { + content: "Loading..."; } + .mdl-spinner.is-upgraded.is-active { + -webkit-animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite; + animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite; } + +@-webkit-keyframes mdl-spinner__container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes mdl-spinner__container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.mdl-spinner__layer { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; } + +.mdl-spinner__layer-1 { + border-color: rgb(66,165,245); } + .mdl-spinner--single-color .mdl-spinner__layer-1 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-1 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +.mdl-spinner__layer-2 { + border-color: rgb(244,67,54); } + .mdl-spinner--single-color .mdl-spinner__layer-2 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-2 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +.mdl-spinner__layer-3 { + border-color: rgb(253,216,53); } + .mdl-spinner--single-color .mdl-spinner__layer-3 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-3 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +.mdl-spinner__layer-4 { + border-color: rgb(76,175,80); } + .mdl-spinner--single-color .mdl-spinner__layer-4 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-4 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +@-webkit-keyframes mdl-spinner__fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); } + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); } + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); } + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); } + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); } + to { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); } } + +@keyframes mdl-spinner__fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); } + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); } + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); } + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); } + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); } + to { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); } } + +/** +* HACK: Even though the intention is to have the current .mdl-spinner__layer-N +* at `opacity: 1`, we set it to `opacity: 0.99` instead since this forces Chrome +* to do proper subpixel rendering for the elements being animated. This is +* especially visible in Chrome 39 on Ubuntu 14.04. See: +* +* - https://github.com/Polymer/paper-spinner/issues/9 +* - https://code.google.com/p/chromium/issues/detail?id=436255 +*/ +@-webkit-keyframes mdl-spinner__layer-1-fade-in-out { + from { + opacity: 0.99; } + 25% { + opacity: 0.99; } + 26% { + opacity: 0; } + 89% { + opacity: 0; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0.99; } } +@keyframes mdl-spinner__layer-1-fade-in-out { + from { + opacity: 0.99; } + 25% { + opacity: 0.99; } + 26% { + opacity: 0; } + 89% { + opacity: 0; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0.99; } } + +@-webkit-keyframes mdl-spinner__layer-2-fade-in-out { + from { + opacity: 0; } + 15% { + opacity: 0; } + 25% { + opacity: 0.99; } + 50% { + opacity: 0.99; } + 51% { + opacity: 0; } } + +@keyframes mdl-spinner__layer-2-fade-in-out { + from { + opacity: 0; } + 15% { + opacity: 0; } + 25% { + opacity: 0.99; } + 50% { + opacity: 0.99; } + 51% { + opacity: 0; } } + +@-webkit-keyframes mdl-spinner__layer-3-fade-in-out { + from { + opacity: 0; } + 40% { + opacity: 0; } + 50% { + opacity: 0.99; } + 75% { + opacity: 0.99; } + 76% { + opacity: 0; } } + +@keyframes mdl-spinner__layer-3-fade-in-out { + from { + opacity: 0; } + 40% { + opacity: 0; } + 50% { + opacity: 0.99; } + 75% { + opacity: 0.99; } + 76% { + opacity: 0; } } + +@-webkit-keyframes mdl-spinner__layer-4-fade-in-out { + from { + opacity: 0; } + 65% { + opacity: 0; } + 75% { + opacity: 0.99; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0; } } + +@keyframes mdl-spinner__layer-4-fade-in-out { + from { + opacity: 0; } + 65% { + opacity: 0; } + 75% { + opacity: 0.99; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0; } } + +/** +* Patch the gap that appear between the two adjacent +* div.mdl-spinner__circle-clipper while the spinner is rotating +* (appears on Chrome 38, Safari 7.1, and IE 11). +* +* Update: the gap no longer appears on Chrome when .mdl-spinner__layer-N's +* opacity is 0.99, but still does on Safari and IE. +*/ +.mdl-spinner__gap-patch { + position: absolute; + box-sizing: border-box; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit; } + .mdl-spinner__gap-patch .mdl-spinner__circle { + width: 1000%; + left: -450%; } + +.mdl-spinner__circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit; } + .mdl-spinner__circle-clipper .mdl-spinner__circle { + width: 200%; } + +.mdl-spinner__circle { + box-sizing: border-box; + height: 100%; + border-width: 3px; + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } + .mdl-spinner__left .mdl-spinner__circle { + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + -ms-transform: rotate(129deg); + transform: rotate(129deg); } + .mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle { + -webkit-animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + .mdl-spinner__right .mdl-spinner__circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + -ms-transform: rotate(-129deg); + transform: rotate(-129deg); } + .mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle { + -webkit-animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +@-webkit-keyframes mdl-spinner__left-spin { + from { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); } + to { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } } + +@keyframes mdl-spinner__left-spin { + from { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); } + to { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } } + +@-webkit-keyframes mdl-spinner__right-spin { + from { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); } + to { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } } + +@keyframes mdl-spinner__right-spin { + from { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); } + to { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-switch { + position: relative; + z-index: 1; + vertical-align: middle; + display: inline-block; + box-sizing: border-box; + width: 100%; + height: 24px; + margin: 0; + padding: 0; + overflow: visible; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .mdl-switch.is-upgraded { + padding-left: 28px; } + +.mdl-switch__input { + line-height: 24px; } + .mdl-switch.is-upgraded .mdl-switch__input { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-switch__track { + background: rgba(0,0,0, 0.26); + position: absolute; + left: 0; + top: 5px; + height: 14px; + width: 36px; + border-radius: 14px; + cursor: pointer; } + .mdl-switch.is-checked .mdl-switch__track { + background: rgba(63,81,181, 0.5); } + .mdl-switch.is-disabled .mdl-switch__track { + background: rgba(0,0,0, 0.12); + cursor: auto; } + +.mdl-switch__thumb { + background: rgb(250,250,250); + position: absolute; + left: 0; + top: 2px; + height: 20px; + width: 20px; + border-radius: 50%; + cursor: pointer; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: left; + transition-property: left; } + .mdl-switch.is-checked .mdl-switch__thumb { + background: rgb(63,81,181); + left: 16px; + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); } + .mdl-switch.is-disabled .mdl-switch__thumb { + background: rgb(189,189,189); + cursor: auto; } + +.mdl-switch__focus-helper { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-4px, -4px); + -ms-transform: translate(-4px, -4px); + transform: translate(-4px, -4px); + display: inline-block; + box-sizing: border-box; + width: 8px; + height: 8px; + border-radius: 50%; + background-color: transparent; } + .mdl-switch.is-focused .mdl-switch__focus-helper { + box-shadow: 0 0 0px 20px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1); } + .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper { + box-shadow: 0 0 0px 20px rgba(63,81,181, 0.26); + background-color: rgba(63,81,181, 0.26); } + +.mdl-switch__label { + position: relative; + cursor: pointer; + font-size: 16px; + line-height: 24px; + margin: 0; + left: 24px; } + .mdl-switch.is-disabled .mdl-switch__label { + color: rgb(189,189,189); + cursor: auto; } + +.mdl-switch__ripple-container { + position: absolute; + z-index: 2; + top: -12px; + left: -14px; + box-sizing: border-box; + width: 48px; + height: 48px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); + -webkit-transition-duration: 0.40s; + transition-duration: 0.40s; + -webkit-transition-timing-function: step-end; + transition-timing-function: step-end; + -webkit-transition-property: left; + transition-property: left; } + .mdl-switch__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + .mdl-switch.is-disabled .mdl-switch__ripple-container { + cursor: auto; } + .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple { + background: transparent; } + .mdl-switch.is-checked .mdl-switch__ripple-container { + cursor: auto; + left: 2px; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-tabs { + display: block; + width: 100%; } + +.mdl-tabs__tab-bar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-content: space-between; + -ms-flex-line-pack: justify; + align-content: space-between; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + height: 48px; + padding: 0 0 0 0; + margin: 0; + border-bottom: 1px solid rgb(224,224,224); } + +.mdl-tabs__tab { + margin: 0; + border: none; + padding: 0 24px 0 24px; + float: left; + position: relative; + display: block; + color: red; + text-decoration: none; + height: 48px; + line-height: 48px; + text-align: center; + font-weight: 500; + font-size: 14px; + text-transform: uppercase; + color: rgba(0,0,0, 0.54); + overflow: hidden; } + .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active { + color: rgba(0,0,0, 0.87); } + .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after { + height: 2px; + width: 100%; + display: block; + content: " "; + bottom: 0px; + left: 0px; + position: absolute; + background: rgb(63,81,181); + -webkit-animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + -webkit-transition: all 1s cubic-bezier(0.4, 0, 1, 1); + transition: all 1s cubic-bezier(0.4, 0, 1, 1); } + .mdl-tabs__tab .mdl-tabs__ripple-container { + display: block; + position: absolute; + height: 100%; + width: 100%; + left: 0px; + top: 0px; + z-index: 1; + overflow: hidden; } + .mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + +.mdl-tabs__panel { + display: block; } + .mdl-tabs.is-upgraded .mdl-tabs__panel { + display: none; } + .mdl-tabs.is-upgraded .mdl-tabs__panel.is-active { + display: block; } + +@-webkit-keyframes border-expand { + 0% { + opacity: 0; + width: 0; } + 100% { + opacity: 1; + width: 100%; } } + +@keyframes border-expand { + 0% { + opacity: 0; + width: 0; } + 100% { + opacity: 1; + width: 100%; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-textfield { + position: relative; + font-size: 16px; + display: inline-block; + box-sizing: border-box; + width: 300px; + max-width: 100%; + margin: 0; + padding: 20px 0; } + .mdl-textfield .mdl-button { + position: absolute; + bottom: 20px; } + +.mdl-textfield--align-right { + text-align: right; } + +.mdl-textfield--full-width { + width: 100%; } + +.mdl-textfield--expandable { + min-width: 32px; + width: auto; + min-height: 32px; } + +.mdl-textfield__input { + border: none; + border-bottom: 1px solid rgba(0,0,0, 0.12); + display: block; + font-size: 16px; + margin: 0; + padding: 4px 0; + width: 100%; + text-align: left; + color: inherit; } + .mdl-textfield.is-focused .mdl-textfield__input { + outline: none; } + .mdl-textfield.is-invalid .mdl-textfield__input { + border-color: rgb(222, 50, 38); + box-shadow: none; } + .mdl-textfield.is-disabled .mdl-textfield__input { + background-color: transparent; + border-bottom: 1px dotted rgba(0,0,0, 0.12); + color: rgba(0,0,0, 0.26); } + +.mdl-textfield textarea.mdl-textfield__input { + display: block; } + +.mdl-textfield__label { + bottom: 0; + color: rgba(0,0,0, 0.26); + font-size: 16px; + left: 0; + right: 0; + pointer-events: none; + position: absolute; + display: block; + top: 24px; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-align: left; } + .mdl-textfield.is-dirty .mdl-textfield__label { + visibility: hidden; } + .mdl-textfield--floating-label .mdl-textfield__label { + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label { + color: rgba(0,0,0, 0.26); } + .mdl-textfield--floating-label.is-focused .mdl-textfield__label, + .mdl-textfield--floating-label.is-dirty .mdl-textfield__label { + color: rgb(63,81,181); + font-size: 12px; + top: 4px; + visibility: visible; } + .mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label, + .mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label { + top: -16px; } + .mdl-textfield--floating-label.is-invalid .mdl-textfield__label { + color: rgb(222, 50, 38); + font-size: 12px; } + .mdl-textfield__label:after { + background-color: rgb(63,81,181); + bottom: 20px; + content: ''; + height: 2px; + left: 45%; + position: absolute; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + visibility: hidden; + width: 10px; } + .mdl-textfield.is-focused .mdl-textfield__label:after { + left: 0; + visibility: visible; + width: 100%; } + .mdl-textfield.is-invalid .mdl-textfield__label:after { + background-color: rgb(222, 50, 38); } + +.mdl-textfield__error { + color: rgb(222, 50, 38); + position: absolute; + font-size: 12px; + margin-top: 3px; + visibility: hidden; + display: block; } + .mdl-textfield.is-invalid .mdl-textfield__error { + visibility: visible; } + +.mdl-textfield__expandable-holder { + display: inline-block; + position: relative; + margin-left: 32px; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + display: inline-block; + max-width: 0.1px; } + .mdl-textfield.is-focused .mdl-textfield__expandable-holder, .mdl-textfield.is-dirty .mdl-textfield__expandable-holder { + max-width: 600px; } + .mdl-textfield__expandable-holder .mdl-textfield__label:after { + bottom: 0; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-tooltip { + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + will-change: transform; + z-index: 999; + background: rgba(97,97,97, 0.9); + border-radius: 2px; + color: rgb(255,255,255); + display: inline-block; + font-size: 10px; + font-weight: 500; + line-height: 14px; + max-width: 170px; + position: fixed; + top: -500px; + left: -500px; + padding: 8px; + text-align: center; } + +.mdl-tooltip.is-active { + -webkit-animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards; + animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards; } + +.mdl-tooltip--large { + line-height: 14px; + font-size: 14px; + padding: 16px; } + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + opacity: 0; } + 50% { + -webkit-transform: scale(0.99); + transform: scale(0.99); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + visibility: visible; } } + +@keyframes pulse { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + opacity: 0; } + 50% { + -webkit-transform: scale(0.99); + transform: scale(0.99); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + visibility: visible; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-shadow--2dp { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-shadow--3dp { + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); } + +.mdl-shadow--4dp { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); } + +.mdl-shadow--6dp { + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.2); } + +.mdl-shadow--8dp { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); } + +.mdl-shadow--16dp { + box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* +* NOTE: Some rules here are applied using duplicate selectors. +* This is on purpose to increase their specificity when applied. +* For example: `.mdl-cell--1-col-phone.mdl-cell--1-col-phone` +*/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * 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. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-grid { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin: 0 auto 0 auto; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + .mdl-grid.mdl-grid--no-spacing { + padding: 0; } + +.mdl-cell { + box-sizing: border-box; } + +.mdl-cell--top { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; } + +.mdl-cell--middle { + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; } + +.mdl-cell--bottom { + -webkit-align-self: flex-end; + -ms-flex-item-align: end; + align-self: flex-end; } + +.mdl-cell--stretch { + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; } + +.mdl-grid.mdl-grid--no-spacing > .mdl-cell { + margin: 0; } + +@media (max-width: 479px) { + .mdl-grid { + padding: 8px; } + .mdl-cell { + margin: 8px; + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell { + width: 100%; } + .mdl-cell--hide-phone { + display: none !important; } + .mdl-cell--1-col, + .mdl-cell--1-col-phone.mdl-cell--1-col-phone { + width: calc(25% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--1-col, + .mdl-grid--no-spacing > .mdl-cell--1-col-phone.mdl-cell--1-col-phone { + width: 25%; } + .mdl-cell--2-col, + .mdl-cell--2-col-phone.mdl-cell--2-col-phone { + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--2-col, + .mdl-grid--no-spacing > .mdl-cell--2-col-phone.mdl-cell--2-col-phone { + width: 50%; } + .mdl-cell--3-col, + .mdl-cell--3-col-phone.mdl-cell--3-col-phone { + width: calc(75% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--3-col, + .mdl-grid--no-spacing > .mdl-cell--3-col-phone.mdl-cell--3-col-phone { + width: 75%; } + .mdl-cell--4-col, + .mdl-cell--4-col-phone.mdl-cell--4-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--4-col, + .mdl-grid--no-spacing > .mdl-cell--4-col-phone.mdl-cell--4-col-phone { + width: 100%; } + .mdl-cell--5-col, + .mdl-cell--5-col-phone.mdl-cell--5-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--5-col, + .mdl-grid--no-spacing > .mdl-cell--5-col-phone.mdl-cell--5-col-phone { + width: 100%; } + .mdl-cell--6-col, + .mdl-cell--6-col-phone.mdl-cell--6-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--6-col, + .mdl-grid--no-spacing > .mdl-cell--6-col-phone.mdl-cell--6-col-phone { + width: 100%; } + .mdl-cell--7-col, + .mdl-cell--7-col-phone.mdl-cell--7-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--7-col, + .mdl-grid--no-spacing > .mdl-cell--7-col-phone.mdl-cell--7-col-phone { + width: 100%; } + .mdl-cell--8-col, + .mdl-cell--8-col-phone.mdl-cell--8-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--8-col, + .mdl-grid--no-spacing > .mdl-cell--8-col-phone.mdl-cell--8-col-phone { + width: 100%; } + .mdl-cell--9-col, + .mdl-cell--9-col-phone.mdl-cell--9-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--9-col, + .mdl-grid--no-spacing > .mdl-cell--9-col-phone.mdl-cell--9-col-phone { + width: 100%; } + .mdl-cell--10-col, + .mdl-cell--10-col-phone.mdl-cell--10-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--10-col, + .mdl-grid--no-spacing > .mdl-cell--10-col-phone.mdl-cell--10-col-phone { + width: 100%; } + .mdl-cell--11-col, + .mdl-cell--11-col-phone.mdl-cell--11-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--11-col, + .mdl-grid--no-spacing > .mdl-cell--11-col-phone.mdl-cell--11-col-phone { + width: 100%; } + .mdl-cell--12-col, + .mdl-cell--12-col-phone.mdl-cell--12-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--12-col, + .mdl-grid--no-spacing > .mdl-cell--12-col-phone.mdl-cell--12-col-phone { + width: 100%; } } + +@media (min-width: 480px) and (max-width: 839px) { + .mdl-grid { + padding: 8px; } + .mdl-cell { + margin: 8px; + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell { + width: 50%; } + .mdl-cell--hide-tablet { + display: none !important; } + .mdl-cell--1-col, + .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet { + width: calc(12.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--1-col, + .mdl-grid--no-spacing > .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet { + width: 12.5%; } + .mdl-cell--2-col, + .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet { + width: calc(25% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--2-col, + .mdl-grid--no-spacing > .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet { + width: 25%; } + .mdl-cell--3-col, + .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet { + width: calc(37.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--3-col, + .mdl-grid--no-spacing > .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet { + width: 37.5%; } + .mdl-cell--4-col, + .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet { + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--4-col, + .mdl-grid--no-spacing > .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet { + width: 50%; } + .mdl-cell--5-col, + .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet { + width: calc(62.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--5-col, + .mdl-grid--no-spacing > .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet { + width: 62.5%; } + .mdl-cell--6-col, + .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet { + width: calc(75% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--6-col, + .mdl-grid--no-spacing > .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet { + width: 75%; } + .mdl-cell--7-col, + .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet { + width: calc(87.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--7-col, + .mdl-grid--no-spacing > .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet { + width: 87.5%; } + .mdl-cell--8-col, + .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--8-col, + .mdl-grid--no-spacing > .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet { + width: 100%; } + .mdl-cell--9-col, + .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--9-col, + .mdl-grid--no-spacing > .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet { + width: 100%; } + .mdl-cell--10-col, + .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--10-col, + .mdl-grid--no-spacing > .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet { + width: 100%; } + .mdl-cell--11-col, + .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--11-col, + .mdl-grid--no-spacing > .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet { + width: 100%; } + .mdl-cell--12-col, + .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--12-col, + .mdl-grid--no-spacing > .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet { + width: 100%; } } + +@media (min-width: 840px) { + .mdl-grid { + padding: 8px; } + .mdl-cell { + margin: 8px; + width: calc(33.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell { + width: 33.3333333333%; } + .mdl-cell--hide-desktop { + display: none !important; } + .mdl-cell--1-col, + .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop { + width: calc(8.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--1-col, + .mdl-grid--no-spacing > .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop { + width: 8.3333333333%; } + .mdl-cell--2-col, + .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop { + width: calc(16.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--2-col, + .mdl-grid--no-spacing > .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop { + width: 16.6666666667%; } + .mdl-cell--3-col, + .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop { + width: calc(25% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--3-col, + .mdl-grid--no-spacing > .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop { + width: 25%; } + .mdl-cell--4-col, + .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop { + width: calc(33.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--4-col, + .mdl-grid--no-spacing > .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop { + width: 33.3333333333%; } + .mdl-cell--5-col, + .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop { + width: calc(41.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--5-col, + .mdl-grid--no-spacing > .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop { + width: 41.6666666667%; } + .mdl-cell--6-col, + .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop { + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--6-col, + .mdl-grid--no-spacing > .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop { + width: 50%; } + .mdl-cell--7-col, + .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop { + width: calc(58.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--7-col, + .mdl-grid--no-spacing > .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop { + width: 58.3333333333%; } + .mdl-cell--8-col, + .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop { + width: calc(66.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--8-col, + .mdl-grid--no-spacing > .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop { + width: 66.6666666667%; } + .mdl-cell--9-col, + .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop { + width: calc(75% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--9-col, + .mdl-grid--no-spacing > .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop { + width: 75%; } + .mdl-cell--10-col, + .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop { + width: calc(83.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--10-col, + .mdl-grid--no-spacing > .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop { + width: 83.3333333333%; } + .mdl-cell--11-col, + .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop { + width: calc(91.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--11-col, + .mdl-grid--no-spacing > .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop { + width: 91.6666666667%; } + .mdl-cell--12-col, + .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--12-col, + .mdl-grid--no-spacing > .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop { + width: 100%; } } diff --git a/public/vendor/mdl/mdl.min.css b/public/vendor/mdl/mdl.min.css new file mode 100644 index 0000000000..3815742333 --- /dev/null +++ b/public/vendor/mdl/mdl.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.mdl-button,.mdl-button .material-icons,.mdl-checkbox,audio,canvas,iframe,img,svg,video{vertical-align:middle}.visuallyhidden,hr{border:0;height:1px}.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:112px;font-weight:300;line-height:1;letter-spacing:-.04em}.mdl-typography--display-3,.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif}.mdl-card,.mdl-card__media,.mdl-card__title{box-sizing:border-box}.mdl-badge[data-badge]:after,.mdl-card,.mdl-layout,.mdl-layout__drawer,.mdl-layout__header{-webkit-box-direction:normal}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;border-top:1px solid #ccc;margin:1em 0;padding:0}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.browserupgrade{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.hidden{display:none!important}.visuallyhidden{clip:rect(0 0 0 0);margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}body,html{width:100%}.invisible{visibility:hidden}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before,:first-letter,:first-line{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.mdl-accordion,.mdl-button,.mdl-card,.mdl-checkbox,.mdl-dropdown-menu,.mdl-icon-toggle,.mdl-item,.mdl-radio,.mdl-slider,.mdl-switch,.mdl-tabs__tab,a{-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(255,255,255,0)}html{height:100%;-ms-touch-action:manipulation;touch-action:manipulation}body{min-height:100%;margin:0}main{display:block}[hidden]{display:none!important}.mdl-typography--display-4-color-contrast{opacity:.54}.mdl-typography--display-3,.mdl-typography--display-3-color-contrast{font-size:56px;font-weight:400;line-height:1.35;letter-spacing:-.02em}.mdl-typography--display-3-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;opacity:.54}.mdl-typography--display-2,.mdl-typography--display-2-color-contrast{font-weight:400;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:45px;line-height:48px}.mdl-typography--display-2-color-contrast{opacity:.54}.mdl-typography--display-1{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:34px;font-weight:400;line-height:40px}.mdl-typography--display-1-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:34px;font-weight:400;line-height:40px;opacity:.54}.mdl-typography--headline,.mdl-typography--headline-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:24px;font-weight:400;line-height:32px;-moz-osx-font-smoothing:grayscale}.mdl-typography--headline-color-contrast{opacity:.87}.mdl-typography--title,.mdl-typography--title-color-contrast{font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}.mdl-typography--title{font-family:Roboto,Helvetica,Arial,sans-serif}.mdl-typography--title-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;opacity:.87}.mdl-typography--subhead,.mdl-typography--subhead-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;line-height:24px;font-size:16px;font-weight:400;letter-spacing:.04em}.mdl-typography--subhead-color-contrast{opacity:.87}.mdl-typography--body-2{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0}.mdl-typography--body-2-color-contrast{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;opacity:.87}.mdl-typography--body-1,.mdl-typography--body-1-color-contrast{line-height:24px;letter-spacing:0;font-size:14px;font-weight:400}.mdl-typography--body-1-color-contrast{opacity:.87}.mdl-typography--body-2-force-preferred-font{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0}.mdl-typography--body-2-force-preferred-font-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0;opacity:.87}.mdl-typography--body-1-force-preferred-font,.mdl-typography--body-1-force-preferred-font-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--caption,.mdl-typography--caption-color-contrast,.mdl-typography--caption-force-preferred-font,.mdl-typography--caption-force-preferred-font-color-contrast{font-size:12px;font-weight:400;line-height:1;letter-spacing:0}.mdl-typography--caption-force-preferred-font{font-family:Roboto,Helvetica,Arial,sans-serif}.mdl-typography--caption-color-contrast{opacity:.54}.mdl-typography--caption-force-preferred-font-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;opacity:.54}.mdl-typography--button,.mdl-typography--button-color-contrast,.mdl-typography--menu,.mdl-typography--menu-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;letter-spacing:0;font-weight:500;font-size:14px;line-height:1}.mdl-typography--menu-color-contrast{opacity:.87}.mdl-typography--button{text-transform:uppercase}.mdl-typography--button-color-contrast{text-transform:uppercase;opacity:.87}.mdl-typography--text-left{text-align:left}.mdl-typography--text-right{text-align:right}.mdl-typography--text-center{text-align:center}.mdl-typography--text-justify{text-align:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-button,.mdl-layout__tab,.mdl-tabs__tab{text-decoration:none;text-transform:uppercase}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.mdl-color-text--red{color:#f44336!important}.mdl-color--red{background-color:#f44336!important}.mdl-color-text--red-50{color:#ffebee!important}.mdl-color--red-50{background-color:#ffebee!important}.mdl-color-text--red-100{color:#ffcdd2!important}.mdl-color--red-100{background-color:#ffcdd2!important}.mdl-color-text--red-200{color:#ef9a9a!important}.mdl-color--red-200{background-color:#ef9a9a!important}.mdl-color-text--red-300{color:#e57373!important}.mdl-color--red-300{background-color:#e57373!important}.mdl-color-text--red-400{color:#ef5350!important}.mdl-color--red-400{background-color:#ef5350!important}.mdl-color-text--red-500{color:#f44336!important}.mdl-color--red-500{background-color:#f44336!important}.mdl-color-text--red-600{color:#e53935!important}.mdl-color--red-600{background-color:#e53935!important}.mdl-color-text--red-700{color:#d32f2f!important}.mdl-color--red-700{background-color:#d32f2f!important}.mdl-color-text--red-800{color:#c62828!important}.mdl-color--red-800{background-color:#c62828!important}.mdl-color-text--red-900{color:#b71c1c!important}.mdl-color--red-900{background-color:#b71c1c!important}.mdl-color-text--red-A100{color:#ff8a80!important}.mdl-color--red-A100{background-color:#ff8a80!important}.mdl-color-text--red-A200{color:#ff5252!important}.mdl-color--red-A200{background-color:#ff5252!important}.mdl-color-text--red-A400{color:#ff1744!important}.mdl-color--red-A400{background-color:#ff1744!important}.mdl-color-text--red-A700{color:#d50000!important}.mdl-color--red-A700{background-color:#d50000!important}.mdl-color-text--pink{color:#e91e63!important}.mdl-color--pink{background-color:#e91e63!important}.mdl-color-text--pink-50{color:#fce4ec!important}.mdl-color--pink-50{background-color:#fce4ec!important}.mdl-color-text--pink-100{color:#f8bbd0!important}.mdl-color--pink-100{background-color:#f8bbd0!important}.mdl-color-text--pink-200{color:#f48fb1!important}.mdl-color--pink-200{background-color:#f48fb1!important}.mdl-color-text--pink-300{color:#f06292!important}.mdl-color--pink-300{background-color:#f06292!important}.mdl-color-text--pink-400{color:#ec407a!important}.mdl-color--pink-400{background-color:#ec407a!important}.mdl-color-text--pink-500{color:#e91e63!important}.mdl-color--pink-500{background-color:#e91e63!important}.mdl-color-text--pink-600{color:#d81b60!important}.mdl-color--pink-600{background-color:#d81b60!important}.mdl-color-text--pink-700{color:#c2185b!important}.mdl-color--pink-700{background-color:#c2185b!important}.mdl-color-text--pink-800{color:#ad1457!important}.mdl-color--pink-800{background-color:#ad1457!important}.mdl-color-text--pink-900{color:#880e4f!important}.mdl-color--pink-900{background-color:#880e4f!important}.mdl-color-text--pink-A100{color:#ff80ab!important}.mdl-color--pink-A100{background-color:#ff80ab!important}.mdl-color-text--pink-A200{color:#ff4081!important}.mdl-color--pink-A200{background-color:#ff4081!important}.mdl-color-text--pink-A400{color:#f50057!important}.mdl-color--pink-A400{background-color:#f50057!important}.mdl-color-text--pink-A700{color:#c51162!important}.mdl-color--pink-A700{background-color:#c51162!important}.mdl-color-text--purple{color:#9c27b0!important}.mdl-color--purple{background-color:#9c27b0!important}.mdl-color-text--purple-50{color:#f3e5f5!important}.mdl-color--purple-50{background-color:#f3e5f5!important}.mdl-color-text--purple-100{color:#e1bee7!important}.mdl-color--purple-100{background-color:#e1bee7!important}.mdl-color-text--purple-200{color:#ce93d8!important}.mdl-color--purple-200{background-color:#ce93d8!important}.mdl-color-text--purple-300{color:#ba68c8!important}.mdl-color--purple-300{background-color:#ba68c8!important}.mdl-color-text--purple-400{color:#ab47bc!important}.mdl-color--purple-400{background-color:#ab47bc!important}.mdl-color-text--purple-500{color:#9c27b0!important}.mdl-color--purple-500{background-color:#9c27b0!important}.mdl-color-text--purple-600{color:#8e24aa!important}.mdl-color--purple-600{background-color:#8e24aa!important}.mdl-color-text--purple-700{color:#7b1fa2!important}.mdl-color--purple-700{background-color:#7b1fa2!important}.mdl-color-text--purple-800{color:#6a1b9a!important}.mdl-color--purple-800{background-color:#6a1b9a!important}.mdl-color-text--purple-900{color:#4a148c!important}.mdl-color--purple-900{background-color:#4a148c!important}.mdl-color-text--purple-A100{color:#ea80fc!important}.mdl-color--purple-A100{background-color:#ea80fc!important}.mdl-color-text--purple-A200{color:#e040fb!important}.mdl-color--purple-A200{background-color:#e040fb!important}.mdl-color-text--purple-A400{color:#d500f9!important}.mdl-color--purple-A400{background-color:#d500f9!important}.mdl-color-text--purple-A700{color:#a0f!important}.mdl-color--purple-A700{background-color:#a0f!important}.mdl-color-text--deep-purple{color:#673ab7!important}.mdl-color--deep-purple{background-color:#673ab7!important}.mdl-color-text--deep-purple-50{color:#ede7f6!important}.mdl-color--deep-purple-50{background-color:#ede7f6!important}.mdl-color-text--deep-purple-100{color:#d1c4e9!important}.mdl-color--deep-purple-100{background-color:#d1c4e9!important}.mdl-color-text--deep-purple-200{color:#b39ddb!important}.mdl-color--deep-purple-200{background-color:#b39ddb!important}.mdl-color-text--deep-purple-300{color:#9575cd!important}.mdl-color--deep-purple-300{background-color:#9575cd!important}.mdl-color-text--deep-purple-400{color:#7e57c2!important}.mdl-color--deep-purple-400{background-color:#7e57c2!important}.mdl-color-text--deep-purple-500{color:#673ab7!important}.mdl-color--deep-purple-500{background-color:#673ab7!important}.mdl-color-text--deep-purple-600{color:#5e35b1!important}.mdl-color--deep-purple-600{background-color:#5e35b1!important}.mdl-color-text--deep-purple-700{color:#512da8!important}.mdl-color--deep-purple-700{background-color:#512da8!important}.mdl-color-text--deep-purple-800{color:#4527a0!important}.mdl-color--deep-purple-800{background-color:#4527a0!important}.mdl-color-text--deep-purple-900{color:#311b92!important}.mdl-color--deep-purple-900{background-color:#311b92!important}.mdl-color-text--deep-purple-A100{color:#b388ff!important}.mdl-color--deep-purple-A100{background-color:#b388ff!important}.mdl-color-text--deep-purple-A200{color:#7c4dff!important}.mdl-color--deep-purple-A200{background-color:#7c4dff!important}.mdl-color-text--deep-purple-A400{color:#651fff!important}.mdl-color--deep-purple-A400{background-color:#651fff!important}.mdl-color-text--deep-purple-A700{color:#6200ea!important}.mdl-color--deep-purple-A700{background-color:#6200ea!important}.mdl-color-text--indigo{color:#3f51b5!important}.mdl-color--indigo{background-color:#3f51b5!important}.mdl-color-text--indigo-50{color:#e8eaf6!important}.mdl-color--indigo-50{background-color:#e8eaf6!important}.mdl-color-text--indigo-100{color:#c5cae9!important}.mdl-color--indigo-100{background-color:#c5cae9!important}.mdl-color-text--indigo-200{color:#9fa8da!important}.mdl-color--indigo-200{background-color:#9fa8da!important}.mdl-color-text--indigo-300{color:#7986cb!important}.mdl-color--indigo-300{background-color:#7986cb!important}.mdl-color-text--indigo-400{color:#5c6bc0!important}.mdl-color--indigo-400{background-color:#5c6bc0!important}.mdl-color-text--indigo-500{color:#3f51b5!important}.mdl-color--indigo-500{background-color:#3f51b5!important}.mdl-color-text--indigo-600{color:#3949ab!important}.mdl-color--indigo-600{background-color:#3949ab!important}.mdl-color-text--indigo-700{color:#303f9f!important}.mdl-color--indigo-700{background-color:#303f9f!important}.mdl-color-text--indigo-800{color:#283593!important}.mdl-color--indigo-800{background-color:#283593!important}.mdl-color-text--indigo-900{color:#1a237e!important}.mdl-color--indigo-900{background-color:#1a237e!important}.mdl-color-text--indigo-A100{color:#8c9eff!important}.mdl-color--indigo-A100{background-color:#8c9eff!important}.mdl-color-text--indigo-A200{color:#536dfe!important}.mdl-color--indigo-A200{background-color:#536dfe!important}.mdl-color-text--indigo-A400{color:#3d5afe!important}.mdl-color--indigo-A400{background-color:#3d5afe!important}.mdl-color-text--indigo-A700{color:#304ffe!important}.mdl-color--indigo-A700{background-color:#304ffe!important}.mdl-color-text--blue{color:#2196f3!important}.mdl-color--blue{background-color:#2196f3!important}.mdl-color-text--blue-50{color:#e3f2fd!important}.mdl-color--blue-50{background-color:#e3f2fd!important}.mdl-color-text--blue-100{color:#bbdefb!important}.mdl-color--blue-100{background-color:#bbdefb!important}.mdl-color-text--blue-200{color:#90caf9!important}.mdl-color--blue-200{background-color:#90caf9!important}.mdl-color-text--blue-300{color:#64b5f6!important}.mdl-color--blue-300{background-color:#64b5f6!important}.mdl-color-text--blue-400{color:#42a5f5!important}.mdl-color--blue-400{background-color:#42a5f5!important}.mdl-color-text--blue-500{color:#2196f3!important}.mdl-color--blue-500{background-color:#2196f3!important}.mdl-color-text--blue-600{color:#1e88e5!important}.mdl-color--blue-600{background-color:#1e88e5!important}.mdl-color-text--blue-700{color:#1976d2!important}.mdl-color--blue-700{background-color:#1976d2!important}.mdl-color-text--blue-800{color:#1565c0!important}.mdl-color--blue-800{background-color:#1565c0!important}.mdl-color-text--blue-900{color:#0d47a1!important}.mdl-color--blue-900{background-color:#0d47a1!important}.mdl-color-text--blue-A100{color:#82b1ff!important}.mdl-color--blue-A100{background-color:#82b1ff!important}.mdl-color-text--blue-A200{color:#448aff!important}.mdl-color--blue-A200{background-color:#448aff!important}.mdl-color-text--blue-A400{color:#2979ff!important}.mdl-color--blue-A400{background-color:#2979ff!important}.mdl-color-text--blue-A700{color:#2962ff!important}.mdl-color--blue-A700{background-color:#2962ff!important}.mdl-color-text--light-blue{color:#03a9f4!important}.mdl-color--light-blue{background-color:#03a9f4!important}.mdl-color-text--light-blue-50{color:#e1f5fe!important}.mdl-color--light-blue-50{background-color:#e1f5fe!important}.mdl-color-text--light-blue-100{color:#b3e5fc!important}.mdl-color--light-blue-100{background-color:#b3e5fc!important}.mdl-color-text--light-blue-200{color:#81d4fa!important}.mdl-color--light-blue-200{background-color:#81d4fa!important}.mdl-color-text--light-blue-300{color:#4fc3f7!important}.mdl-color--light-blue-300{background-color:#4fc3f7!important}.mdl-color-text--light-blue-400{color:#29b6f6!important}.mdl-color--light-blue-400{background-color:#29b6f6!important}.mdl-color-text--light-blue-500{color:#03a9f4!important}.mdl-color--light-blue-500{background-color:#03a9f4!important}.mdl-color-text--light-blue-600{color:#039be5!important}.mdl-color--light-blue-600{background-color:#039be5!important}.mdl-color-text--light-blue-700{color:#0288d1!important}.mdl-color--light-blue-700{background-color:#0288d1!important}.mdl-color-text--light-blue-800{color:#0277bd!important}.mdl-color--light-blue-800{background-color:#0277bd!important}.mdl-color-text--light-blue-900{color:#01579b!important}.mdl-color--light-blue-900{background-color:#01579b!important}.mdl-color-text--light-blue-A100{color:#80d8ff!important}.mdl-color--light-blue-A100{background-color:#80d8ff!important}.mdl-color-text--light-blue-A200{color:#40c4ff!important}.mdl-color--light-blue-A200{background-color:#40c4ff!important}.mdl-color-text--light-blue-A400{color:#00b0ff!important}.mdl-color--light-blue-A400{background-color:#00b0ff!important}.mdl-color-text--light-blue-A700{color:#0091ea!important}.mdl-color--light-blue-A700{background-color:#0091ea!important}.mdl-color-text--cyan{color:#00bcd4!important}.mdl-color--cyan{background-color:#00bcd4!important}.mdl-color-text--cyan-50{color:#e0f7fa!important}.mdl-color--cyan-50{background-color:#e0f7fa!important}.mdl-color-text--cyan-100{color:#b2ebf2!important}.mdl-color--cyan-100{background-color:#b2ebf2!important}.mdl-color-text--cyan-200{color:#80deea!important}.mdl-color--cyan-200{background-color:#80deea!important}.mdl-color-text--cyan-300{color:#4dd0e1!important}.mdl-color--cyan-300{background-color:#4dd0e1!important}.mdl-color-text--cyan-400{color:#26c6da!important}.mdl-color--cyan-400{background-color:#26c6da!important}.mdl-color-text--cyan-500{color:#00bcd4!important}.mdl-color--cyan-500{background-color:#00bcd4!important}.mdl-color-text--cyan-600{color:#00acc1!important}.mdl-color--cyan-600{background-color:#00acc1!important}.mdl-color-text--cyan-700{color:#0097a7!important}.mdl-color--cyan-700{background-color:#0097a7!important}.mdl-color-text--cyan-800{color:#00838f!important}.mdl-color--cyan-800{background-color:#00838f!important}.mdl-color-text--cyan-900{color:#006064!important}.mdl-color--cyan-900{background-color:#006064!important}.mdl-color-text--cyan-A100{color:#84ffff!important}.mdl-color--cyan-A100{background-color:#84ffff!important}.mdl-color-text--cyan-A200{color:#18ffff!important}.mdl-color--cyan-A200{background-color:#18ffff!important}.mdl-color-text--cyan-A400{color:#00e5ff!important}.mdl-color--cyan-A400{background-color:#00e5ff!important}.mdl-color-text--cyan-A700{color:#00b8d4!important}.mdl-color--cyan-A700{background-color:#00b8d4!important}.mdl-color-text--teal{color:#009688!important}.mdl-color--teal{background-color:#009688!important}.mdl-color-text--teal-50{color:#e0f2f1!important}.mdl-color--teal-50{background-color:#e0f2f1!important}.mdl-color-text--teal-100{color:#b2dfdb!important}.mdl-color--teal-100{background-color:#b2dfdb!important}.mdl-color-text--teal-200{color:#80cbc4!important}.mdl-color--teal-200{background-color:#80cbc4!important}.mdl-color-text--teal-300{color:#4db6ac!important}.mdl-color--teal-300{background-color:#4db6ac!important}.mdl-color-text--teal-400{color:#26a69a!important}.mdl-color--teal-400{background-color:#26a69a!important}.mdl-color-text--teal-500{color:#009688!important}.mdl-color--teal-500{background-color:#009688!important}.mdl-color-text--teal-600{color:#00897b!important}.mdl-color--teal-600{background-color:#00897b!important}.mdl-color-text--teal-700{color:#00796b!important}.mdl-color--teal-700{background-color:#00796b!important}.mdl-color-text--teal-800{color:#00695c!important}.mdl-color--teal-800{background-color:#00695c!important}.mdl-color-text--teal-900{color:#004d40!important}.mdl-color--teal-900{background-color:#004d40!important}.mdl-color-text--teal-A100{color:#a7ffeb!important}.mdl-color--teal-A100{background-color:#a7ffeb!important}.mdl-color-text--teal-A200{color:#64ffda!important}.mdl-color--teal-A200{background-color:#64ffda!important}.mdl-color-text--teal-A400{color:#1de9b6!important}.mdl-color--teal-A400{background-color:#1de9b6!important}.mdl-color-text--teal-A700{color:#00bfa5!important}.mdl-color--teal-A700{background-color:#00bfa5!important}.mdl-color-text--green{color:#4caf50!important}.mdl-color--green{background-color:#4caf50!important}.mdl-color-text--green-50{color:#e8f5e9!important}.mdl-color--green-50{background-color:#e8f5e9!important}.mdl-color-text--green-100{color:#c8e6c9!important}.mdl-color--green-100{background-color:#c8e6c9!important}.mdl-color-text--green-200{color:#a5d6a7!important}.mdl-color--green-200{background-color:#a5d6a7!important}.mdl-color-text--green-300{color:#81c784!important}.mdl-color--green-300{background-color:#81c784!important}.mdl-color-text--green-400{color:#66bb6a!important}.mdl-color--green-400{background-color:#66bb6a!important}.mdl-color-text--green-500{color:#4caf50!important}.mdl-color--green-500{background-color:#4caf50!important}.mdl-color-text--green-600{color:#43a047!important}.mdl-color--green-600{background-color:#43a047!important}.mdl-color-text--green-700{color:#388e3c!important}.mdl-color--green-700{background-color:#388e3c!important}.mdl-color-text--green-800{color:#2e7d32!important}.mdl-color--green-800{background-color:#2e7d32!important}.mdl-color-text--green-900{color:#1b5e20!important}.mdl-color--green-900{background-color:#1b5e20!important}.mdl-color-text--green-A100{color:#b9f6ca!important}.mdl-color--green-A100{background-color:#b9f6ca!important}.mdl-color-text--green-A200{color:#69f0ae!important}.mdl-color--green-A200{background-color:#69f0ae!important}.mdl-color-text--green-A400{color:#00e676!important}.mdl-color--green-A400{background-color:#00e676!important}.mdl-color-text--green-A700{color:#00c853!important}.mdl-color--green-A700{background-color:#00c853!important}.mdl-color-text--light-green{color:#8bc34a!important}.mdl-color--light-green{background-color:#8bc34a!important}.mdl-color-text--light-green-50{color:#f1f8e9!important}.mdl-color--light-green-50{background-color:#f1f8e9!important}.mdl-color-text--light-green-100{color:#dcedc8!important}.mdl-color--light-green-100{background-color:#dcedc8!important}.mdl-color-text--light-green-200{color:#c5e1a5!important}.mdl-color--light-green-200{background-color:#c5e1a5!important}.mdl-color-text--light-green-300{color:#aed581!important}.mdl-color--light-green-300{background-color:#aed581!important}.mdl-color-text--light-green-400{color:#9ccc65!important}.mdl-color--light-green-400{background-color:#9ccc65!important}.mdl-color-text--light-green-500{color:#8bc34a!important}.mdl-color--light-green-500{background-color:#8bc34a!important}.mdl-color-text--light-green-600{color:#7cb342!important}.mdl-color--light-green-600{background-color:#7cb342!important}.mdl-color-text--light-green-700{color:#689f38!important}.mdl-color--light-green-700{background-color:#689f38!important}.mdl-color-text--light-green-800{color:#558b2f!important}.mdl-color--light-green-800{background-color:#558b2f!important}.mdl-color-text--light-green-900{color:#33691e!important}.mdl-color--light-green-900{background-color:#33691e!important}.mdl-color-text--light-green-A100{color:#ccff90!important}.mdl-color--light-green-A100{background-color:#ccff90!important}.mdl-color-text--light-green-A200{color:#b2ff59!important}.mdl-color--light-green-A200{background-color:#b2ff59!important}.mdl-color-text--light-green-A400{color:#76ff03!important}.mdl-color--light-green-A400{background-color:#76ff03!important}.mdl-color-text--light-green-A700{color:#64dd17!important}.mdl-color--light-green-A700{background-color:#64dd17!important}.mdl-color-text--lime{color:#cddc39!important}.mdl-color--lime{background-color:#cddc39!important}.mdl-color-text--lime-50{color:#f9fbe7!important}.mdl-color--lime-50{background-color:#f9fbe7!important}.mdl-color-text--lime-100{color:#f0f4c3!important}.mdl-color--lime-100{background-color:#f0f4c3!important}.mdl-color-text--lime-200{color:#e6ee9c!important}.mdl-color--lime-200{background-color:#e6ee9c!important}.mdl-color-text--lime-300{color:#dce775!important}.mdl-color--lime-300{background-color:#dce775!important}.mdl-color-text--lime-400{color:#d4e157!important}.mdl-color--lime-400{background-color:#d4e157!important}.mdl-color-text--lime-500{color:#cddc39!important}.mdl-color--lime-500{background-color:#cddc39!important}.mdl-color-text--lime-600{color:#c0ca33!important}.mdl-color--lime-600{background-color:#c0ca33!important}.mdl-color-text--lime-700{color:#afb42b!important}.mdl-color--lime-700{background-color:#afb42b!important}.mdl-color-text--lime-800{color:#9e9d24!important}.mdl-color--lime-800{background-color:#9e9d24!important}.mdl-color-text--lime-900{color:#827717!important}.mdl-color--lime-900{background-color:#827717!important}.mdl-color-text--lime-A100{color:#f4ff81!important}.mdl-color--lime-A100{background-color:#f4ff81!important}.mdl-color-text--lime-A200{color:#eeff41!important}.mdl-color--lime-A200{background-color:#eeff41!important}.mdl-color-text--lime-A400{color:#c6ff00!important}.mdl-color--lime-A400{background-color:#c6ff00!important}.mdl-color-text--lime-A700{color:#aeea00!important}.mdl-color--lime-A700{background-color:#aeea00!important}.mdl-color-text--yellow{color:#ffeb3b!important}.mdl-color--yellow{background-color:#ffeb3b!important}.mdl-color-text--yellow-50{color:#fffde7!important}.mdl-color--yellow-50{background-color:#fffde7!important}.mdl-color-text--yellow-100{color:#fff9c4!important}.mdl-color--yellow-100{background-color:#fff9c4!important}.mdl-color-text--yellow-200{color:#fff59d!important}.mdl-color--yellow-200{background-color:#fff59d!important}.mdl-color-text--yellow-300{color:#fff176!important}.mdl-color--yellow-300{background-color:#fff176!important}.mdl-color-text--yellow-400{color:#ffee58!important}.mdl-color--yellow-400{background-color:#ffee58!important}.mdl-color-text--yellow-500{color:#ffeb3b!important}.mdl-color--yellow-500{background-color:#ffeb3b!important}.mdl-color-text--yellow-600{color:#fdd835!important}.mdl-color--yellow-600{background-color:#fdd835!important}.mdl-color-text--yellow-700{color:#fbc02d!important}.mdl-color--yellow-700{background-color:#fbc02d!important}.mdl-color-text--yellow-800{color:#f9a825!important}.mdl-color--yellow-800{background-color:#f9a825!important}.mdl-color-text--yellow-900{color:#f57f17!important}.mdl-color--yellow-900{background-color:#f57f17!important}.mdl-color-text--yellow-A100{color:#ffff8d!important}.mdl-color--yellow-A100{background-color:#ffff8d!important}.mdl-color-text--yellow-A200{color:#ff0!important}.mdl-color--yellow-A200{background-color:#ff0!important}.mdl-color-text--yellow-A400{color:#ffea00!important}.mdl-color--yellow-A400{background-color:#ffea00!important}.mdl-color-text--yellow-A700{color:#ffd600!important}.mdl-color--yellow-A700{background-color:#ffd600!important}.mdl-color-text--amber{color:#ffc107!important}.mdl-color--amber{background-color:#ffc107!important}.mdl-color-text--amber-50{color:#fff8e1!important}.mdl-color--amber-50{background-color:#fff8e1!important}.mdl-color-text--amber-100{color:#ffecb3!important}.mdl-color--amber-100{background-color:#ffecb3!important}.mdl-color-text--amber-200{color:#ffe082!important}.mdl-color--amber-200{background-color:#ffe082!important}.mdl-color-text--amber-300{color:#ffd54f!important}.mdl-color--amber-300{background-color:#ffd54f!important}.mdl-color-text--amber-400{color:#ffca28!important}.mdl-color--amber-400{background-color:#ffca28!important}.mdl-color-text--amber-500{color:#ffc107!important}.mdl-color--amber-500{background-color:#ffc107!important}.mdl-color-text--amber-600{color:#ffb300!important}.mdl-color--amber-600{background-color:#ffb300!important}.mdl-color-text--amber-700{color:#ffa000!important}.mdl-color--amber-700{background-color:#ffa000!important}.mdl-color-text--amber-800{color:#ff8f00!important}.mdl-color--amber-800{background-color:#ff8f00!important}.mdl-color-text--amber-900{color:#ff6f00!important}.mdl-color--amber-900{background-color:#ff6f00!important}.mdl-color-text--amber-A100{color:#ffe57f!important}.mdl-color--amber-A100{background-color:#ffe57f!important}.mdl-color-text--amber-A200{color:#ffd740!important}.mdl-color--amber-A200{background-color:#ffd740!important}.mdl-color-text--amber-A400{color:#ffc400!important}.mdl-color--amber-A400{background-color:#ffc400!important}.mdl-color-text--amber-A700{color:#ffab00!important}.mdl-color--amber-A700{background-color:#ffab00!important}.mdl-color-text--orange{color:#ff9800!important}.mdl-color--orange{background-color:#ff9800!important}.mdl-color-text--orange-50{color:#fff3e0!important}.mdl-color--orange-50{background-color:#fff3e0!important}.mdl-color-text--orange-100{color:#ffe0b2!important}.mdl-color--orange-100{background-color:#ffe0b2!important}.mdl-color-text--orange-200{color:#ffcc80!important}.mdl-color--orange-200{background-color:#ffcc80!important}.mdl-color-text--orange-300{color:#ffb74d!important}.mdl-color--orange-300{background-color:#ffb74d!important}.mdl-color-text--orange-400{color:#ffa726!important}.mdl-color--orange-400{background-color:#ffa726!important}.mdl-color-text--orange-500{color:#ff9800!important}.mdl-color--orange-500{background-color:#ff9800!important}.mdl-color-text--orange-600{color:#fb8c00!important}.mdl-color--orange-600{background-color:#fb8c00!important}.mdl-color-text--orange-700{color:#f57c00!important}.mdl-color--orange-700{background-color:#f57c00!important}.mdl-color-text--orange-800{color:#ef6c00!important}.mdl-color--orange-800{background-color:#ef6c00!important}.mdl-color-text--orange-900{color:#e65100!important}.mdl-color--orange-900{background-color:#e65100!important}.mdl-color-text--orange-A100{color:#ffd180!important}.mdl-color--orange-A100{background-color:#ffd180!important}.mdl-color-text--orange-A200{color:#ffab40!important}.mdl-color--orange-A200{background-color:#ffab40!important}.mdl-color-text--orange-A400{color:#ff9100!important}.mdl-color--orange-A400{background-color:#ff9100!important}.mdl-color-text--orange-A700{color:#ff6d00!important}.mdl-color--orange-A700{background-color:#ff6d00!important}.mdl-color-text--deep-orange{color:#ff5722!important}.mdl-color--deep-orange{background-color:#ff5722!important}.mdl-color-text--deep-orange-50{color:#fbe9e7!important}.mdl-color--deep-orange-50{background-color:#fbe9e7!important}.mdl-color-text--deep-orange-100{color:#ffccbc!important}.mdl-color--deep-orange-100{background-color:#ffccbc!important}.mdl-color-text--deep-orange-200{color:#ffab91!important}.mdl-color--deep-orange-200{background-color:#ffab91!important}.mdl-color-text--deep-orange-300{color:#ff8a65!important}.mdl-color--deep-orange-300{background-color:#ff8a65!important}.mdl-color-text--deep-orange-400{color:#ff7043!important}.mdl-color--deep-orange-400{background-color:#ff7043!important}.mdl-color-text--deep-orange-500{color:#ff5722!important}.mdl-color--deep-orange-500{background-color:#ff5722!important}.mdl-color-text--deep-orange-600{color:#f4511e!important}.mdl-color--deep-orange-600{background-color:#f4511e!important}.mdl-color-text--deep-orange-700{color:#e64a19!important}.mdl-color--deep-orange-700{background-color:#e64a19!important}.mdl-color-text--deep-orange-800{color:#d84315!important}.mdl-color--deep-orange-800{background-color:#d84315!important}.mdl-color-text--deep-orange-900{color:#bf360c!important}.mdl-color--deep-orange-900{background-color:#bf360c!important}.mdl-color-text--deep-orange-A100{color:#ff9e80!important}.mdl-color--deep-orange-A100{background-color:#ff9e80!important}.mdl-color-text--deep-orange-A200{color:#ff6e40!important}.mdl-color--deep-orange-A200{background-color:#ff6e40!important}.mdl-color-text--deep-orange-A400{color:#ff3d00!important}.mdl-color--deep-orange-A400{background-color:#ff3d00!important}.mdl-color-text--deep-orange-A700{color:#dd2c00!important}.mdl-color--deep-orange-A700{background-color:#dd2c00!important}.mdl-color-text--brown{color:#795548!important}.mdl-color--brown{background-color:#795548!important}.mdl-color-text--brown-50{color:#efebe9!important}.mdl-color--brown-50{background-color:#efebe9!important}.mdl-color-text--brown-100{color:#d7ccc8!important}.mdl-color--brown-100{background-color:#d7ccc8!important}.mdl-color-text--brown-200{color:#bcaaa4!important}.mdl-color--brown-200{background-color:#bcaaa4!important}.mdl-color-text--brown-300{color:#a1887f!important}.mdl-color--brown-300{background-color:#a1887f!important}.mdl-color-text--brown-400{color:#8d6e63!important}.mdl-color--brown-400{background-color:#8d6e63!important}.mdl-color-text--brown-500{color:#795548!important}.mdl-color--brown-500{background-color:#795548!important}.mdl-color-text--brown-600{color:#6d4c41!important}.mdl-color--brown-600{background-color:#6d4c41!important}.mdl-color-text--brown-700{color:#5d4037!important}.mdl-color--brown-700{background-color:#5d4037!important}.mdl-color-text--brown-800{color:#4e342e!important}.mdl-color--brown-800{background-color:#4e342e!important}.mdl-color-text--brown-900{color:#3e2723!important}.mdl-color--brown-900{background-color:#3e2723!important}.mdl-color-text--grey{color:#9e9e9e!important}.mdl-color--grey{background-color:#9e9e9e!important}.mdl-color-text--grey-50{color:#fafafa!important}.mdl-color--grey-50{background-color:#fafafa!important}.mdl-color-text--grey-100{color:#f5f5f5!important}.mdl-color--grey-100{background-color:#f5f5f5!important}.mdl-color-text--grey-200{color:#eee!important}.mdl-color--grey-200{background-color:#eee!important}.mdl-color-text--grey-300{color:#e0e0e0!important}.mdl-color--grey-300{background-color:#e0e0e0!important}.mdl-color-text--grey-400{color:#bdbdbd!important}.mdl-color--grey-400{background-color:#bdbdbd!important}.mdl-color-text--grey-500{color:#9e9e9e!important}.mdl-color--grey-500{background-color:#9e9e9e!important}.mdl-color-text--grey-600{color:#757575!important}.mdl-color--grey-600{background-color:#757575!important}.mdl-color-text--grey-700{color:#616161!important}.mdl-color--grey-700{background-color:#616161!important}.mdl-color-text--grey-800{color:#424242!important}.mdl-color--grey-800{background-color:#424242!important}.mdl-color-text--grey-900{color:#212121!important}.mdl-color--grey-900{background-color:#212121!important}.mdl-color-text--blue-grey{color:#607d8b!important}.mdl-color--blue-grey{background-color:#607d8b!important}.mdl-color-text--blue-grey-50{color:#eceff1!important}.mdl-color--blue-grey-50{background-color:#eceff1!important}.mdl-color-text--blue-grey-100{color:#cfd8dc!important}.mdl-color--blue-grey-100{background-color:#cfd8dc!important}.mdl-color-text--blue-grey-200{color:#b0bec5!important}.mdl-color--blue-grey-200{background-color:#b0bec5!important}.mdl-color-text--blue-grey-300{color:#90a4ae!important}.mdl-color--blue-grey-300{background-color:#90a4ae!important}.mdl-color-text--blue-grey-400{color:#78909c!important}.mdl-color--blue-grey-400{background-color:#78909c!important}.mdl-color-text--blue-grey-500{color:#607d8b!important}.mdl-color--blue-grey-500{background-color:#607d8b!important}.mdl-color-text--blue-grey-600{color:#546e7a!important}.mdl-color--blue-grey-600{background-color:#546e7a!important}.mdl-color-text--blue-grey-700{color:#455a64!important}.mdl-color--blue-grey-700{background-color:#455a64!important}.mdl-color-text--blue-grey-800{color:#37474f!important}.mdl-color--blue-grey-800{background-color:#37474f!important}.mdl-color-text--blue-grey-900{color:#263238!important}.mdl-color--blue-grey-900{background-color:#263238!important}.mdl-color--black{background-color:#000!important}.mdl-color-text--black{color:#000!important}.mdl-color--white{background-color:#fff!important}.mdl-color-text--white{color:#fff!important}.mdl-color--primary{background-color:#3f51b5!important}.mdl-color--primary-contrast{background-color:#fff!important}.mdl-color--primary-dark{background-color:#303f9f!important}.mdl-color--accent{background-color:#ff4081!important}.mdl-color--accent-contrast{background-color:#fff!important}.mdl-color-text--primary{color:#3f51b5!important}.mdl-color-text--primary-contrast{color:#fff!important}.mdl-color-text--primary-dark{color:#303f9f!important}.mdl-color-text--accent{color:#ff4081!important}.mdl-color-text--accent-contrast{color:#fff!important}.mdl-ripple{background:#000;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:50px;overflow:hidden}.mdl-ripple.is-animating{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1)}.mdl-ripple.is-visible{opacity:.3}.mdl-animation--default,.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.mdl-badge{position:relative;white-space:nowrap;margin-right:24px}.mdl-badge:not([data-badge]){margin-right:auto}.mdl-badge[data-badge]:after{content:attr(data-badge);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:-11px;right:-24px;font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:600;font-size:12px;width:22px;height:22px;border-radius:50%;background:#ff4081;color:#fff}.mdl-button .mdl-badge[data-badge]:after{top:-10px;right:-5px}.mdl-badge.mdl-badge--no-background[data-badge]:after{color:#ff4081;background:rgba(255,255,255,.2);box-shadow:0 0 1px gray}.mdl-button{background:0 0;border:none;border-radius:2px;color:#000;position:relative;height:36px;min-width:64px;padding:0 8px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0;overflow:hidden;will-change:box-shadow,transform;-webkit-transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:0;cursor:pointer;text-align:center;line-height:36px}.mdl-button--fab,.mdl-button--icon{overflow:hidden;font-size:24px;padding:0}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:rgba(158,158,158,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:rgba(158,158,158,.4)}.mdl-button.mdl-button--colored{color:#3f51b5}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:rgba(158,158,158,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--raised.mdl-button--colored{background:#3f51b5;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#3f51b5}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;height:56px;margin:auto;min-width:56px;width:56px;background:rgba(158,158,158,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.mdl-button--fab .material-icons{transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab .material-icons,.mdl-button--icon .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px)}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--fab.mdl-button--colored{background:#ff4081;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff4081}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;color:inherit;line-height:normal}.mdl-button--icon .material-icons{transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon .material-icons{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#3f51b5}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#3f51b5}.mdl-button--accent.mdl-button--accent{color:#ff4081}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff4081}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:auto;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled],.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.mdl-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px}.mdl-card__media{background-color:#ff4081;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll}.mdl-card__title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#000;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-webkit-justify-content:stretch;-ms-flex-pack:stretch;justify-content:stretch;line-height:normal;padding:16px;-webkit-perspective-origin:165px 56px;perspective-origin:165px 56px;-webkit-transform-origin:165px 56px;-ms-transform-origin:165px 56px;transform-origin:165px 56px}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;color:inherit;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;-webkit-transform-origin:149px 48px;-ms-transform-origin:149px 48px;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:grey;margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:13px;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__actions,.mdl-checkbox{box-sizing:border-box;width:100%}.mdl-card__actions{font-size:16px;line-height:normal;background-color:transparent;padding:8px}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-checkbox{position:relative;z-index:1;display:inline-block;height:24px;margin:0;padding:0}.mdl-checkbox.is-upgraded{padding-left:24px}.mdl-checkbox__input{line-height:24px}.mdl-checkbox.is-upgraded .mdl-checkbox__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-checkbox__box-outline,.mdl-checkbox__focus-helper{position:absolute;left:0;top:3px;display:inline-block;box-sizing:border-box;width:16px;height:16px}.mdl-checkbox__box-outline{margin:0;cursor:pointer;overflow:hidden;border:2px solid rgba(0,0,0,.54);border-radius:2px;z-index:2}.mdl-checkbox.is-checked .mdl-checkbox__box-outline{border:2px solid #3f51b5}.mdl-checkbox.is-disabled .mdl-checkbox__box-outline{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__focus-helper{border-radius:50%;background-color:transparent}.mdl-checkbox.is-focused .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(63,81,181,.26);background-color:rgba(63,81,181,.26)}.mdl-layout__drawer,.mdl-layout__header,.mdl-menu__outline{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-checkbox__tick-outline{position:absolute;top:0;left:0;height:100%;width:100%;-webkit-mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==);mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==);background:0 0;-webkit-transition-duration:.28s;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background;transition-property:background}.mdl-checkbox__tick-outline,.mdl-data-table tbody tr{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-checkbox__ripple-container,.mdl-icon-toggle__ripple-container{box-sizing:border-box;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K) #3f51b5}.mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K) rgba(0,0,0,.26)}.mdl-checkbox__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0}.mdl-checkbox.is-disabled .mdl-checkbox__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__ripple-container{position:absolute;z-index:2;top:-6px;left:-10px;width:36px;height:36px;border-radius:50%;cursor:pointer}.mdl-checkbox__ripple-container .mdl-ripple{background:#3f51b5}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container{cursor:auto}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple{background:0 0}.mdl-data-table{position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr{position:relative;height:48px;-webkit-transition-duration:.28s;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background-color;transition-property:background-color}.mdl-data-table tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th{padding:0 18px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type{padding-right:24px}.mdl-data-table td{position:relative;vertical-align:top;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select{vertical-align:top;position:absolute;left:24px}.mdl-data-table th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th .mdl-data-table__select{position:absolute;bottom:8px;left:24px}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric{text-align:left}.mdl-mega-footer{padding:16px 40px;color:#9e9e9e;background-color:#424242}.mdl-mega-footer--bottom-section:after,.mdl-mega-footer--middle-section:after,.mdl-mega-footer--top-section:after,.mdl-mega-footer__bottom-section:after,.mdl-mega-footer__middle-section:after,.mdl-mega-footer__top-section:after{content:'';display:block;clear:both}.mdl-mega-footer--left-section,.mdl-mega-footer--right-section,.mdl-mega-footer__left-section,.mdl-mega-footer__right-section{margin-bottom:16px}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:block;margin-bottom:16px;color:inherit;text-decoration:none}@media screen and (min-width:760px){.mdl-mega-footer--left-section,.mdl-mega-footer__left-section{float:left}.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{float:right}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:inline-block;margin-left:16px;line-height:36px;vertical-align:middle}}.mdl-mega-footer--social-btn,.mdl-mega-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{display:block;position:relative}@media screen and (min-width:760px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{width:33%}.mdl-mega-footer--drop-down-section:nth-child(1),.mdl-mega-footer--drop-down-section:nth-child(2),.mdl-mega-footer__drop-down-section:nth-child(1),.mdl-mega-footer__drop-down-section:nth-child(2){float:left}.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(3){float:right}.mdl-mega-footer--drop-down-section:nth-child(3):after,.mdl-mega-footer__drop-down-section:nth-child(3):after{clear:right}.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section:nth-child(4){clear:right;float:right}.mdl-mega-footer--middle-section:after,.mdl-mega-footer__middle-section:after{content:'';display:block;clear:both}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:0}}@media screen and (min-width:1024px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section,.mdl-mega-footer__drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(4){width:24%;float:left}}.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{position:absolute;width:100%;height:55.8px;padding:32px;margin:-16px 0 0;cursor:pointer;z-index:1;opacity:0}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CE'}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:none}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CF'}.mdl-mega-footer--heading,.mdl-mega-footer__heading{position:relative;width:100%;padding-right:39.8px;margin-bottom:16px;box-sizing:border-box;font-size:14px;line-height:23.8px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#e0e0e0}.mdl-mega-footer--heading:after,.mdl-mega-footer__heading:after{content:'';position:absolute;top:0;right:0;display:block;width:23.8px;height:23.8px;background-size:cover}.mdl-mega-footer--link-list,.mdl-mega-footer__link-list{list-style:none;margin:0 0 32px;padding:0}.mdl-mega-footer--link-list:after,.mdl-mega-footer__link-list:after{clear:both;display:block;content:''}.mdl-mega-footer--link-list li,.mdl-mega-footer__link-list li{font-size:14px;font-weight:400;letter-spacing:0;line-height:20px}.mdl-mega-footer--link-list a,.mdl-mega-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:16px;margin-bottom:16px}.mdl-logo{margin-bottom:16px;color:#fff}.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li{float:left;margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{display:none}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{background-image:none}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:block}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{content:''}.mdl-logo{float:left;margin-bottom:0;margin-right:16px}}.mdl-mini-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:'';display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-icon-toggle{position:relative;z-index:1;vertical-align:middle;display:inline-block;height:32px;margin:0;padding:0}.mdl-icon-toggle__input{line-height:32px}.mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-icon-toggle__label{display:inline-block;position:relative;cursor:pointer;height:32px;width:32px;min-width:32px;color:#616161;border-radius:50%;padding:0;margin-left:0;margin-right:0;text-align:center;background-color:transparent;will-change:background-color;-webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.mdl-icon-toggle__label.material-icons{line-height:32px;font-size:24px}.mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:#3f51b5}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26);cursor:auto;-webkit-transition:none;transition:none}.mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(63,81,181,.26)}.mdl-icon-toggle__ripple-container{position:absolute;z-index:2;top:-2px;left:-2px;width:36px;height:36px;border-radius:50%;cursor:pointer}.mdl-menu,.mdl-menu__outline{position:absolute;top:0;left:0}.mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container{cursor:auto}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:0 0}.mdl-menu__container{display:block;margin:0;padding:0;border:none;position:absolute;overflow:visible;height:0;width:0;visibility:hidden;z-index:-1}.mdl-menu__container.is-animating,.mdl-menu__container.is-visible{z-index:999;visibility:visible}.mdl-menu__outline{background:#fff;padding:0;border-radius:2px;overflow:hidden;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;will-change:transform;-webkit-transition:-webkit-transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);z-index:-1}.mdl-menu__item,.mdl-menu__outline{margin:0;display:block;border:none}.mdl-menu__item,.mdl-menu__item[disabled],.mdl-menu__item[disabled]:focus,.mdl-menu__item[disabled]:hover{background-color:transparent}.mdl-menu__container.is-visible .mdl-menu__outline{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);z-index:999}.mdl-menu__outline.mdl-menu--bottom-right{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.mdl-menu__outline.mdl-menu--top-left{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.mdl-menu__outline.mdl-menu--top-right{-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.mdl-menu{list-style:none;height:auto;width:auto;min-width:124px;padding:8px 0;margin:0;opacity:0;clip:rect(0 0 0 0);z-index:-1}.mdl-menu__container.is-visible .mdl-menu{opacity:1;z-index:999}.mdl-menu.is-animating{-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1)}.mdl-menu.mdl-menu--bottom-right{left:auto;right:0}.mdl-menu.mdl-menu--top-left{top:auto;bottom:0}.mdl-menu.mdl-menu--top-right{top:auto;left:auto;bottom:0;right:0}.mdl-menu.mdl-menu--unaligned{top:auto;left:auto}.mdl-menu__item{color:rgba(0,0,0,.87);text-align:left;padding:0 16px;outline-color:#bdbdbd;position:relative;overflow:hidden;font-size:14px;font-weight:400;letter-spacing:0;text-decoration:none;cursor:pointer;height:48px;line-height:48px;white-space:nowrap;opacity:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1);user-select:none}.mdl-layout__tab-bar-button,.mdl-menu__item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.mdl-menu__item:focus,.mdl-textfield.is-focused .mdl-textfield__input{outline:0}.mdl-menu__container.is-visible .mdl-menu__item{opacity:1}.mdl-menu__item::-moz-focus-inner{border:0}.mdl-menu__item[disabled]{color:#bdbdbd;cursor:auto}.mdl-menu__item[disabled] .mdl-ripple{background:0 0}.mdl-menu__item:focus,.mdl-menu__item:hover{background-color:#eee}.mdl-menu__item:active{background-color:#e0e0e0}.mdl-menu__item--ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-progress{display:block;position:relative;height:4px;width:500px}.mdl-progress>.bar{display:block;position:absolute;top:0;bottom:0;width:0;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-layout,.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.mdl-progress>.progressbar{background-color:#3f51b5;z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#3f51b5,#3f51b5);background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#3f51b5,#3f51b5);z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#3f51b5,#3f51b5);background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#3f51b5,#3f51b5);-webkit-mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=);mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=)}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,#3f51b5,#3f51b5);background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,#3f51b5,#3f51b5)}.mdl-progress.mdl-progress__indeterminate>.bar1{background-color:#3f51b5;-webkit-animation-name:indeterminate1;animation-name:indeterminate1;animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;background-color:#3f51b5;-webkit-animation-name:indeterminate2;animation-name:indeterminate2;animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:linear}@-webkit-keyframes indeterminate1{0%{left:0;width:0}50%{left:25%;width:75%}75%{left:100%;width:0}}@keyframes indeterminate1{0%{left:0;width:0}50%{left:25%;width:75%}75%{left:100%;width:0}}@-webkit-keyframes indeterminate2{0%,50%{left:0;width:0}75%{left:0;width:25%}100%{left:100%;width:0}}@keyframes indeterminate2{0%,50%{left:0;width:0}75%{left:0;width:25%}100%{left:100%;width:0}}.mdl-navigation{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only,.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:#3f51b5}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:#fff;z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:#fff;background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}.mdl-layout__header .mdl-layout__drawer-button{margin:4px}.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:#3f51b5;color:#fff;-webkit-transition-duration:.2s;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}.mdl-layout__header,.mdl-layout__obfuscator{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout__header-row,.mdl-layout__header-row .mdl-navigation{-webkit-box-orient:horizontal;-webkit-box-direction:normal;margin:0}@media screen and (min-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__header .mdl-layout__header-row{padding-left:40px}}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px;display:none}.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}.mdl-layout__header.is-compact{max-height:56px}.mdl-layout__header.is-compact.has-tabs{min-height:104px}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--scroll,.mdl-layout__header--seamed{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow,.mdl-switch__thumb{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{padding:0;height:64px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.mdl-layout__header-row .mdl-navigation__link{display:block;color:#fff;line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__tab,.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#3f51b5;overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:#3f51b5;color:transparent;cursor:pointer;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button.is-active{color:#fff}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:48px;text-align:center;font-weight:500;font-size:14px;color:rgba(255,255,255,.6);overflow:hidden}.mdl-radio,.mdl-radio__button,.mdl-switch__input{line-height:24px}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:#fff}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:#ff4081;-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:#fff}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio,.mdl-radio__outer-circle{margin:0;box-sizing:border-box;display:inline-block}.mdl-radio{position:relative;font-size:16px;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:4px;left:0;width:16px;height:16px;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid #3f51b5}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:8px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:#3f51b5}.mdl-radio__ripple-container,.mdl-switch__ripple-container{box-sizing:border-box;z-index:2;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;top:-9px;left:-13px;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden}.mdl-radio__ripple-container .mdl-ripple{background:#3f51b5}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}:root .mdl-slider.mdl-slider.is-upgraded,_:-ms-input-placeholder{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;user-select:none;outline:0;padding:0;color:#3f51b5;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1;cursor:pointer}.mdl-slider.is-upgraded,.mdl-switch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,#3f51b5 16px,#3f51b5 0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26) 16px,rgba(0,0,0,.26) 0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:#3f51b5;border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:#3f51b5;border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(63,81,181,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(63,81,181,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background:#3f51b5;-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background:#3f51b5;transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:#3f51b5;-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,#3f51b5 0,#3f51b5 37.5%,rgba(63,81,181,.26) 37.5%,rgba(63,81,181,.26) 100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:#3f51b5;-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 66.67%,rgba(0,0,0,.26) 66.67%,rgba(0,0,0,.26) 100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 25%,rgba(0,0,0,.26) 25%,rgba(0,0,0,.26) 37.5%,rgba(0,0,0,.12) 37.5%,rgba(0,0,0,.12) 100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0,transparent 77.78%,rgba(0,0,0,.26) 77.78%,rgba(0,0,0,.26) 100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper,.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded:disabled::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled:focus::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0,transparent 50%,rgba(0,0,0,.26) 50%,rgba(0,0,0,.26) 100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26) 25px,rgba(0,0,0,.26) 0)}.mdl-slider__background-flex,.mdl-slider__container{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;display:flex;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:#3f51b5;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0;-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite;animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{100%,25%,90%,from{opacity:.99}26%,89%{opacity:0}}@keyframes mdl-spinner__layer-1-fade-in-out{100%,25%,90%,from{opacity:.99}26%,89%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:.99}}@keyframes mdl-spinner__layer-2-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:.99}}@keyframes mdl-spinner__layer-3-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:.99}}@keyframes mdl-spinner__layer-4-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:.99}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes mdl-spinner__left-spin{from,to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}}@keyframes mdl-spinner__left-spin{from,to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}}@-webkit-keyframes mdl-spinner__right-spin{from,to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}@keyframes mdl-spinner__right-spin{from,to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(63,81,181,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:left}.mdl-switch__ripple-container,.mdl-switch__thumb{border-radius:50%;-webkit-transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:#3f51b5;left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(63,81,181,.26);background-color:rgba(63,81,181,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;top:-12px;left:-14px;width:48px;height:48px;cursor:pointer;overflow:hidden;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:#3f51b5}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:#3f51b5;-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:#3f51b5}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input,.mdl-textfield__label{display:block;font-size:16px;width:100%;text-align:left}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);margin:0;padding:4px 0;color:inherit}.mdl-textfield.is-disabled.is-disabled .mdl-textfield__label,.mdl-textfield__label{color:rgba(0,0,0,.26)}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-textfield textarea.mdl-textfield__input{display:block}.mdl-textfield__label{bottom:0;left:0;right:0;pointer-events:none;position:absolute;top:24px;overflow:hidden;white-space:nowrap}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-dirty .mdl-textfield__label,.mdl-textfield--floating-label.is-focused .mdl-textfield__label{color:#3f51b5;font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label,.mdl-textfield__error{color:#de3226;font-size:12px}.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield__label:after{background-color:#3f51b5;bottom:20px;content:'';height:2px;left:45%;position:absolute;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield__expandable-holder,.mdl-textfield__label:after{-webkit-transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{position:absolute;margin-top:3px;visibility:hidden;display:block}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{position:relative;margin-left:32px;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-dirty .mdl-textfield__expandable-holder,.mdl-textfield.is-focused .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1) forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1) forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col,.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col,.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col,.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col,.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col,.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col,.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col,.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col,.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col,.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col,.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col,.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col,.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col,.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col,.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col,.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col,.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col,.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col,.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col,.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col,.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col,.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col,.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col,.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col,.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col,.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col,.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col,.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col,.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col,.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col,.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col,.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col,.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col,.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col,.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col,.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col,.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col,.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col,.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col,.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col,.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col,.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col,.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col,.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col,.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col,.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col,.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col,.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col,.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.3333333333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col,.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col,.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.3333333333%}.mdl-cell--2-col,.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col,.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.6666666667%}.mdl-cell--3-col,.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col,.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col,.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col,.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.3333333333%}.mdl-cell--5-col,.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col,.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.6666666667%}.mdl-cell--6-col,.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col,.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col,.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col,.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.3333333333%}.mdl-cell--8-col,.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col,.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.6666666667%}.mdl-cell--9-col,.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col,.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col,.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col,.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.3333333333%}.mdl-cell--11-col,.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col,.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.6666666667%}.mdl-cell--12-col,.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col,.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}} \ No newline at end of file diff --git a/src/views/admin/header.tpl b/src/views/admin/header.tpl index 3900c176ee..cb157c57a3 100644 --- a/src/views/admin/header.tpl +++ b/src/views/admin/header.tpl @@ -6,6 +6,8 @@ + + + From d464cb2f0dbb20a7b636ee4f6b91af54b2067515 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 13:27:30 -0400 Subject: [PATCH 111/284] settings - automated table of contents --- public/less/admin/settings.less | 16 +++++++++++----- public/src/admin/settings.js | 10 ++++++++++ src/views/admin/settings/footer.tpl | 1 + src/views/admin/settings/general.tpl | 11 +++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/public/less/admin/settings.less b/public/less/admin/settings.less index 94318e180f..1f7b403cf1 100644 --- a/public/less/admin/settings.less +++ b/public/less/admin/settings.less @@ -1,9 +1,15 @@ .settings { - .settings-header { - font-weight: 700; - } - .row { margin-bottom: 15px; - } + } + + .section-content { + border-left: 3px solid @brand-primary; + + ul { + list-style-type: none; + font-size: 16px; + padding-left: 20px; + } + } } \ No newline at end of file diff --git a/public/src/admin/settings.js b/public/src/admin/settings.js index 1eee16a353..07fe9311ad 100644 --- a/public/src/admin/settings.js +++ b/public/src/admin/settings.js @@ -8,6 +8,16 @@ define('admin/settings', ['uploader', 'sounds'], function(uploader, sounds) { $(window).on('action:config.loaded', Settings.prepare); }; + Settings.populateTOC = function() { + $('.settings-header').each(function() { + var header = $(this).text(), + anchor = header.toLowerCase().replace(/ /g, '-').trim(); + + $(this).prepend(''); + $('.section-content ul').append('
  • ' + header + '
  • '); + }); + }; + Settings.prepare = function(callback) { // Populate the fields on the page from the config var fields = $('#content [data-field]'), diff --git a/src/views/admin/settings/footer.tpl b/src/views/admin/settings/footer.tpl index f20e3294c7..6c39673be5 100644 --- a/src/views/admin/settings/footer.tpl +++ b/src/views/admin/settings/footer.tpl @@ -5,5 +5,6 @@ diff --git a/src/views/admin/settings/general.tpl b/src/views/admin/settings/general.tpl index 860ed527e1..6d2583761f 100644 --- a/src/views/admin/settings/general.tpl +++ b/src/views/admin/settings/general.tpl @@ -1,6 +1,17 @@ +
    +
    + Contents +
    +
    + +
    +
    +
    Site Settings From 878690e5f7d006ee77f3e9f9cef45b9747746c19 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 19 Aug 2015 13:37:48 -0400 Subject: [PATCH 112/284] removed extra param --- src/categories.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/categories.js b/src/categories.js index f1a5ab23dd..0626de3349 100644 --- a/src/categories.js +++ b/src/categories.js @@ -316,7 +316,7 @@ var async = require('async'), }); async.each(categories, function(category, next) { - getChildrenRecursive(category, category.cid, uid, next); + getChildrenRecursive(category, uid, next); }, function (err) { callback(err, categories.map(function(c) { return c && c.children; @@ -324,10 +324,10 @@ var async = require('async'), }); }; - function getChildrenRecursive(category, parentCid, uid, callback) { + function getChildrenRecursive(category, uid, callback) { async.waterfall([ function (next) { - db.getSortedSetRange('cid:' + parentCid + ':children', 0, -1, next); + db.getSortedSetRange('cid:' + category.cid + ':children', 0, -1, next); }, function (children, next) { privileges.categories.filterCids('find', children, uid, next); @@ -342,7 +342,7 @@ var async = require('async'), function (childrenData, next) { category.children = childrenData; async.each(category.children, function(child, next) { - getChildrenRecursive(child, child.cid, uid, next); + getChildrenRecursive(child, uid, next); }, next); } ], callback); @@ -362,7 +362,7 @@ var async = require('async'), Categories.flattenCategories(allCategories, category.children); } }); - } + }; /** * Recursively build tree From 67e450a05b6c47a509f36e08610efb0c4ba31ed7 Mon Sep 17 00:00:00 2001 From: yariplus Date: Wed, 22 Jul 2015 04:52:54 -0400 Subject: [PATCH 113/284] Fix issues with acp category page strange name for background size variable invalid class selectors hijacking of background style --- public/src/admin/manage/category.js | 12 ++++++++---- src/views/admin/manage/category.tpl | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 02dfeee2f3..301535314f 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -50,11 +50,11 @@ define('admin/manage/category', [ function enableColorPicker(idx, inputEl) { var $inputEl = $(inputEl), - previewEl = $inputEl.parents('[data-cid]').find('.preview-box'); + previewEl = $inputEl.parents('[data-cid]').find('.category-preview'); colorpicker.enable($inputEl, function(hsb, hex) { if ($inputEl.attr('data-name') === 'bgColor') { - previewEl.css('background', '#' + hex); + previewEl.css('background-color', '#' + hex); } else if ($inputEl.attr('data-name') === 'color') { previewEl.css('color', '#' + hex); } @@ -83,6 +83,11 @@ define('admin/manage/category', [ modified(ev.target); }); + // Update preview image size on change + $('[data-name="imageClass"]').on('change', function(ev) { + $('.category-preview').css('background-size', $(this).val()); + }); + // Colour Picker $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); @@ -113,8 +118,7 @@ define('admin/manage/category', [ uploader.open(RELATIVE_PATH + '/api/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { inputEl.val(imageUrlOnServer); var previewBox = inputEl.parent().parent().siblings('.category-preview'); - previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') - .css('background-size', 'cover'); + previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')'); modified(inputEl[0]); }); }); diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index ee53173869..781d0c349b 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -41,7 +41,7 @@
    - + + + + + +

    -
    -
    +
    +
    {widgets.name}
    {widgets.description}
    @@ -67,7 +74,6 @@

    Drag and drop on top of any active widget

    -

    Available Containers Drag and drop on top of any widget

    None From 9389c0773e08108589513d9930192d137d9849d4 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 15:31:15 -0400 Subject: [PATCH 120/284] acp themes redesign first pass --- public/less/admin/appearance/themes.less | 24 +++++++++--------- public/src/admin/appearance/skins.js | 4 +-- public/src/admin/appearance/themes.js | 4 +-- src/views/admin/appearance/themes.tpl | 13 ++-------- src/views/admin/partials/theme_list.tpl | 32 +++++++++++++++--------- 5 files changed, 38 insertions(+), 39 deletions(-) diff --git a/public/less/admin/appearance/themes.less b/public/less/admin/appearance/themes.less index aa052d4e67..8766832626 100644 --- a/public/less/admin/appearance/themes.less +++ b/public/less/admin/appearance/themes.less @@ -8,14 +8,6 @@ margin: 0.25em 1em; list-style-type: none; .pointer; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - -webkit-transition: background-color 250ms linear; - -moz-transition: background-color 250ms linear; - -ms-transition: background-color 250ms linear; - -o-transition: background-color 250ms linear; - transition: background-color 250ms linear; img { max-width: 150px; @@ -30,16 +22,24 @@ font-size: 0.9em; } - &:hover { - background-color: rgba(128, 128, 128, 0.2); - } - &.no-themes { font-style: italic; } } } + .theme-card { + .mdl-card__title { + height: 250px; + + .mdl-card__title-text { + background: rgba(0,0,0,0.65); + color: white; + padding: 5px 20px; + } + } + } + textarea[data-field] { min-height: 450px; width: 100%; diff --git a/public/src/admin/appearance/skins.js b/public/src/admin/appearance/skins.js index 1a24b80ef5..05e5fb8fd3 100644 --- a/public/src/admin/appearance/skins.js +++ b/public/src/admin/appearance/skins.js @@ -63,8 +63,8 @@ define('admin/appearance/skins', function() { }; function highlightSelectedTheme(themeId) { - $('.themes li[data-theme]').removeClass('btn-warning'); - $('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning'); + $('.themes li[data-theme]').removeClass('selected').find('[data-action="use"]').html('Use Theme').removeClass('btn-success').addClass('btn-primary'); + $('.themes li[data-theme="' + themeId + '"]').addClass('selected').find('[data-action="use"]').html('Current Theme').removeClass('btn-primary').addClass('btn-success'); } return Skins; diff --git a/public/src/admin/appearance/themes.js b/public/src/admin/appearance/themes.js index e513d677ec..6598e7fe4b 100644 --- a/public/src/admin/appearance/themes.js +++ b/public/src/admin/appearance/themes.js @@ -84,8 +84,8 @@ define('admin/appearance/themes', function() { }; function highlightSelectedTheme(themeId) { - $('.themes li[data-theme]').removeClass('btn-warning'); - $('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning'); + $('.themes li[data-theme]').removeClass('selected'); + $('.themes li[data-theme="' + themeId + '"]').addClass('selected'); } return Themes; diff --git a/src/views/admin/appearance/themes.tpl b/src/views/admin/appearance/themes.tpl index 9e543052f9..d1a135ef35 100644 --- a/src/views/admin/appearance/themes.tpl +++ b/src/views/admin/appearance/themes.tpl @@ -1,14 +1,5 @@
    -
    -
    Installed Themes
    -
    -

    - The following themes are currently installed on your forum. -

    - -
      -
    • Checking for installed themes...
    • -
    -
    +
    + Checking for installed themes...
    \ No newline at end of file diff --git a/src/views/admin/partials/theme_list.tpl b/src/views/admin/partials/theme_list.tpl index cc3d0243fb..27bef4dfa2 100644 --- a/src/views/admin/partials/theme_list.tpl +++ b/src/views/admin/partials/theme_list.tpl @@ -1,21 +1,29 @@ -
  • data-css="{themes.css}"> - -
    -
    - +
    data-css="{themes.css}"> +
    +
    +

    {themes.name}

    -

    {themes.name}

    -

    - {themes.description} +

    +

    + {themes.description} +

    + - (Homepage) +

    + Homepage +

    -

    +
    +
    -
    -
  • +
    +
  • From 656589f71f547622d981d5c4cf28d6a833c2687c Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 15:43:19 -0400 Subject: [PATCH 121/284] acp skins first pass --- public/less/admin/appearance/themes.less | 14 +++++++++++- src/views/admin/appearance/skins.tpl | 29 ++++++++---------------- src/views/admin/partials/theme_list.tpl | 2 +- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/public/less/admin/appearance/themes.less b/public/less/admin/appearance/themes.less index 8766832626..f121f2a766 100644 --- a/public/less/admin/appearance/themes.less +++ b/public/less/admin/appearance/themes.less @@ -28,9 +28,21 @@ } } + [data-type="bootswatch"] { + .mdl-card__title { + height: 195px; + } + + .mdl-card__title-text { + display: none; + } + } .theme-card { + margin-bottom: 30px; + .mdl-card__title { - height: 250px; + height: 223px; + background-size: contain; .mdl-card__title-text { background: rgba(0,0,0,0.65); diff --git a/src/views/admin/appearance/skins.tpl b/src/views/admin/appearance/skins.tpl index 10211893f5..fad2a8d7a2 100644 --- a/src/views/admin/appearance/skins.tpl +++ b/src/views/admin/appearance/skins.tpl @@ -1,24 +1,15 @@
    -
    -
    -
    Bootswatch Themes
    -
    -

    - NodeBB's skins are powered by Bootswatch, a repository containing themes built with Bootstrap as a base theme. Currently, the Vanilla theme is best optimized for use with Bootswatch. -

    -
      -
    • Loading Themes
    • -
    -
    -
    +
    + Loading Themes
    -
    -
    -
    Revert to Default
    -
    -

    This will remove any custom Bootswatch skin applied to your NodeBB, and restore the base theme.

    - -
    +
    + +
    +
    +
    Revert to Default
    +
    +

    This will remove any custom Bootswatch skin applied to your NodeBB, and restore the base theme.

    +
    diff --git a/src/views/admin/partials/theme_list.tpl b/src/views/admin/partials/theme_list.tpl index 27bef4dfa2..930141f806 100644 --- a/src/views/admin/partials/theme_list.tpl +++ b/src/views/admin/partials/theme_list.tpl @@ -1,7 +1,7 @@
    data-css="{themes.css}">
    -
    +

    {themes.name}

    From 103055b2621cf3b9d61560cc3870609234c9e46d Mon Sep 17 00:00:00 2001 From: jsdream Date: Wed, 19 Aug 2015 22:50:04 +0300 Subject: [PATCH 122/284] Add error check in 'filter:middleware.renderHeader' hook callback --- src/middleware/middleware.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 08241a7a59..9393b01d53 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -287,6 +287,10 @@ middleware.renderHeader = function(req, res, callback) { templateValues.template[res.locals.template] = true; plugins.fireHook('filter:middleware.renderHeader', {templateValues: templateValues, req: req, res: res}, function(err, data) { + if (err) { + return callback(err); + } + app.render('header', data.templateValues, callback); }); }); From ba58c83b976f2aad7b54ae8f67569a2d7b2736df Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Aug 2015 15:52:31 -0400 Subject: [PATCH 123/284] acp active states for main menu --- public/less/admin/header.less | 8 +++++++- public/src/admin/admin.js | 18 ++++++------------ src/views/admin/partials/menu.tpl | 20 ++++++++++---------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/public/less/admin/header.less b/public/less/admin/header.less index 06737fdbc5..efeffcb48a 100644 --- a/public/less/admin/header.less +++ b/public/less/admin/header.less @@ -10,17 +10,23 @@ list-style-type: none; padding: 0px; position: absolute; - bottom: 10px; + bottom: -10px; left: 50px; > li { float: left; margin-right: 30px; + &.active { + border-bottom: 3px solid @brand-primary; + padding-bottom: 10px; + } + > a { color: white; text-transform: uppercase; text-decoration: none; + outline: none; } } } diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index d2ea2a9b48..66c4bf316f 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -93,26 +93,20 @@ url = 'admin/general/dashboard'; } - $('#main-menu .nav-list > li').removeClass('active').each(function() { + $('#main-menu li').removeClass('active'); + $('#main-menu a').removeClass('active').each(function() { var menu = $(this), - category = menu.parents('.sidebar-nav'), - href = menu.children('a').attr('href'), + href = menu.attr('href'), isLink = menu.attr('data-link') === '1'; if (!isLink && href && href.slice(1) === url) { - category.addClass('open'); - menu.addClass('active'); - modifyBreadcrumb(category.find('.nav-header').text(), menu.text()); + menu + .parent().addClass('active') + .parents('.menu-item').addClass('active'); } }); } - function modifyBreadcrumb() { - var caret = ' '; - - $('#breadcrumbs').html(caret + Array.prototype.slice.call(arguments).join(caret)); - } - function setupRestartLinks() { $('.restart').off('click').on('click', function() { bootbox.confirm('Are you sure you wish to restart NodeBB?', function(confirm) { diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index 984d632455..9f6b402457 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -1,9 +1,9 @@ \ No newline at end of file From 6b054a6d14f5a26ca38a02d901922f019c469e98 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Fri, 21 Aug 2015 18:50:22 -0400 Subject: [PATCH 221/284] new acp mobile menu, completed --- public/less/admin/mobile.less | 2 +- src/views/admin/partials/menu.tpl | 89 +++++++++++++++++++++++++++++-- 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/public/less/admin/mobile.less b/public/less/admin/mobile.less index ed870595bb..7de94ed462 100644 --- a/public/less/admin/mobile.less +++ b/public/less/admin/mobile.less @@ -17,7 +17,7 @@ box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.26); position: fixed; top: 0px; - z-index: 1; + z-index: 5; #main-page-title { bottom: -31px; diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index a6e68d9ba1..8b4a775fb8 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -2,6 +2,7 @@ + + + + + + + + + + + + + + + + +
    -