diff --git a/js/interface_common.js b/js/interface_common.js
index 37519bd..028c180 100644
--- a/js/interface_common.js
+++ b/js/interface_common.js
@@ -48,7 +48,7 @@ function closeModalHandler($this)
$modalWindows.fadeOut( "fast", function()
{
- $modalWindows.detach();
+ $modalWindows.remove();
});
$body.css({
"overflow": "auto",
@@ -86,7 +86,7 @@ function closePrompt()
$modalWindows.fadeOut( "fast", function()
{
- $modalWindows.detach();
+ $modalWindows.remove();
});
$body.css({
"overflow": "auto",
@@ -590,7 +590,7 @@ function toggleFollowButton(username, toggleUnfollow, bindFunc) {
.unbind("click")
.bind("click",
(function(e) {
- userClickFollow;
+ userClickFollow(e);
if (this.bindFunc)
this.bindFunc;
@@ -855,9 +855,8 @@ function replyTextKeypress(e) {
tweetAction.click();
}
}
- }else if( !$.Options.keyEnterToSend() ){
+ } else if( !$.Options.keyEnterToSend() ){
if (e.keyCode === 13 && (e.metaKey || e.ctrlKey)) {
-
$this.val($this.val().trim());
if( !tweetAction.hasClass("disabled") ) {
tweetAction.click();
@@ -1367,7 +1366,6 @@ var postSubmit = function(e, oldLastPostId)
if($this.closest('.post-area,.post-reply-content')){
$('.post-area-new').removeClass('open').find('textarea').blur();
};
- setTimeout('requestTimelineUpdate("latest",postsPerRefresh,followingUsers,promotedPostsOnly)', 1000);
$replyText.data("unicodeConversionStack", []);
$replyText.data("disabledUnicodeRules", []);
}
@@ -1448,13 +1446,13 @@ function replaceDashboards() {
$('.wrapper').addClass('w1200');
$('.userMenu').addClass('w1200');
var wf = $('.module.who-to-follow');
- wf.remove();
+ wf.detach();
wf.appendTo($('.dashboard.right'));
} else if ($(window).width() < 1200 && $('.wrapper').hasClass('w1200')) {
$('.wrapper').removeClass('w1200');
$('.userMenu').removeClass('w1200');
var wf = $('.module.who-to-follow');
- wf.remove();
+ wf.detach();
$('.module.mini-profile').after(wf);
}
@@ -1523,6 +1521,7 @@ function initInterfaceCommon() {
$( ".mentions-from-user").bind( "click", openMentionsModal );
replaceDashboards();
+ $( window ).resize(replaceDashboards);
$('.tox-ctc').on('click', function(){
window.prompt(polyglot.t('copy_to_clipboard'), $(this).attr('data'))
diff --git a/js/interface_home.js b/js/interface_home.js
index b9e7df2..6edd06a 100644
--- a/js/interface_home.js
+++ b/js/interface_home.js
@@ -14,11 +14,19 @@ var InterfaceFunctions = function()
this.init = function()
{
$( ".wrapper .postboard-news").click(function() {
- requestTimelineUpdate("latest",postsPerRefresh,followingUsers,promotedPostsOnly);});
+ var newPosts = parseInt($(".userMenu .menu-news").text());
+ if (!newPosts)
+ newPosts = postsPerRefresh;
+ requestTimelineUpdate("latest",newPosts,followingUsers,promotedPostsOnly);
+ });
// Add refresh posts for home link in menu
$( ".userMenu-home.current a").click(function() {
- requestTimelineUpdate("latest",postsPerRefresh,followingUsers,promotedPostsOnly);});
+ var newPosts = parseInt($(".userMenu .menu-news").text());
+ if (!newPosts)
+ newPosts = postsPerRefresh;
+ requestTimelineUpdate("latest",newPosts,followingUsers,promotedPostsOnly);
+ });
$( ".promoted-posts-only").click(function() {
promotedPostsOnly = !promotedPostsOnly;
@@ -139,6 +147,11 @@ var InterfaceFunctions = function()
})
.on("eventUnfollow", function(e, user) {
$(".following-count").text(followingUsers.length-1);
+ $('.wrapper .postboard .post').each( function() {
+ if (($(this).find('[data-screen-name="'+user+'"]').length && !$(this).find(".post-retransmited-by").text())
+ || $(this).find(".post-retransmited-by").text() == '@'+user)
+ $( this ).remove();
+ });
});
}
}
@@ -149,7 +162,6 @@ var InterfaceFunctions = function()
//***********************************************
var interfaceFunctions = new InterfaceFunctions;
$( document ).ready( interfaceFunctions.init );
-$( window ).resize(replaceDashboards);
//função no window que fixa o header das postagens
function fixDiv()
diff --git a/js/mobile_abstract.js b/js/mobile_abstract.js
index 2e8bced..3346188 100644
--- a/js/mobile_abstract.js
+++ b/js/mobile_abstract.js
@@ -104,9 +104,9 @@ var MAL = function()
newTweetsBarMenu.addClass("show");
if ($.Options.getShowDesktopNotifPostsOpt() === 'enable') {
- this.showDesktopNotif(false, polyglot.t('You got')+' '+polyglot.t("new_posts", newPosts)+' '+polyglot.t('in postboard')+'.', false,'twister_notification_new_posts', $.Options.getShowDesktopNotifPostsTimerOpt(), function() {
- requestTimelineUpdate("latest",postsPerRefresh,followingUsers,promotedPostsOnly);
- }, false)
+ this.showDesktopNotif(false, polyglot.t('You got')+' '+polyglot.t('new_posts', newPosts)+' '+polyglot.t('in postboard')+'.', false,'twister_notification_new_posts', $.Options.getShowDesktopNotifPostsTimerOpt(), (function() {
+ requestTimelineUpdate('latest',this,followingUsers,promotedPostsOnly);
+ }).bind(newPosts), false)
}
} else {
newTweetsBar.hide();
diff --git a/js/twister_actions.js b/js/twister_actions.js
index b0cb36e..dfbeb7d 100644
--- a/js/twister_actions.js
+++ b/js/twister_actions.js
@@ -224,7 +224,6 @@ function requestPostRecursively(containerToAppend,username,resource,count,useGet
}
}
-
function newPostMsg(msg, $postOrig) {
if( lastPostId != undefined ) {
var params = [defaultScreenName, lastPostId + 1, msg]
@@ -236,6 +235,7 @@ function newPostMsg(msg, $postOrig) {
function(arg, ret) { incLastPostId(); }, null,
function(arg, ret) { var msg = ("message" in ret) ? ret.message : ret;
alert(polyglot.t("ajax_error", { error: msg })); }, null);
+ setTimeout('requestTimelineUpdate("latest",1,["'+defaultScreenName+'"],promotedPostsOnly)', 1000);
} else {
alert(polyglot.t("Internal error: lastPostId unknown (following yourself may fix!)"));
}
@@ -256,7 +256,7 @@ function newRtMsg($postOrig) {
function(arg, ret) { incLastPostId(); }, null,
function(arg, ret) { var msg = ("message" in ret) ? ret.message : ret;
alert(polyglot.t("ajax_error", { error: msg })); }, null);
- setTimeout('requestTimelineUpdate("latest",postsPerRefresh,followingUsers,promotedPostsOnly)', 1000);
+ setTimeout('requestTimelineUpdate("latest",1,["'+defaultScreenName+'"],promotedPostsOnly)', 1000);
} else {
alert(polyglot.t("Internal error: lastPostId unknown (following yourself may fix!)"));
}
diff --git a/js/twister_following.js b/js/twister_following.js
index 453fa61..71308c4 100644
--- a/js/twister_following.js
+++ b/js/twister_following.js
@@ -86,11 +86,17 @@ TwisterFollowing.prototype = {
//activate updating for only one user...
i = followingUsers.indexOf(username);
- if (i > -1)
+ if (i > -1) {
oneshot = true;
- else if (typeof(this.followingsFollowings[username]) !== 'undefined') {
- delete this.followingsFollowings[username];
- this.save();
+ } else {
+ if (typeof(this.followingsFollowings[username]) !== 'undefined') {
+ delete this.followingsFollowings[username];
+ this.save();
+ }
+ if (typeof _idTrackerMap !== 'undefined' && username in _idTrackerMap)
+ delete _idTrackerMap[username];
+ if (typeof _lastHaveMap !== 'undefined' && username in _lastHaveMap)
+ delete _lastHaveMap[username];
return;
}
}
@@ -105,6 +111,17 @@ TwisterFollowing.prototype = {
if (updated)
this.save();
+ if (typeof _idTrackerMap !== 'undefined')
+ for (var user in _idTrackerMap) {
+ if (followingUsers.indexOf(user) < 0)
+ delete _idTrackerMap[user];
+ }
+ if (typeof _lastHaveMap !== 'undefined')
+ for (var user in _lastHaveMap) {
+ if (followingUsers.indexOf(user) < 0)
+ delete _lastHaveMap[user];
+ }
+
for (; i < followingUsers.length; i++) {
var ctime = new Date().getTime() / 1000;
@@ -351,6 +368,7 @@ function updateFollowing(cbFunc, cbArg) {
// it is safe to call this even if username is already in followingUsers.
// may also be used to set/clear publicFollow.
function follow(user, publicFollow, cbFunc, cbArg) {
+ //console.log('we are following @'+user);
if( followingUsers.indexOf(user) < 0 ) {
followingUsers.push(user);
twisterFollowingO.update(user);
@@ -365,6 +383,7 @@ function follow(user, publicFollow, cbFunc, cbArg) {
// unfollow a single user
function unfollow(user, cbFunc, cbArg) {
+ //console.log('we are not following @'+user+' anymore');
var i = followingUsers.indexOf(user);
if( i >= 0 ) {
followingUsers.splice(i,1);
@@ -681,8 +700,7 @@ function userClickFollow(e) {
e.stopPropagation();
e.preventDefault();
- var $this = $(this);
- var $userInfo = $this.closest("[data-screen-name]");
+ var $userInfo = $(e.target).closest("[data-screen-name]");
var username = $userInfo.attr("data-screen-name");
if(!defaultScreenName)
diff --git a/js/twister_newmsgs.js b/js/twister_newmsgs.js
index 9b499db..a143198 100644
--- a/js/twister_newmsgs.js
+++ b/js/twister_newmsgs.js
@@ -98,10 +98,12 @@ function requestMentionsCount() {
if( _newMentionsUpdated ) {
_newMentionsUpdated = false;
- $.MAL.soundNotifyMentions();
+ if ( _newMentions ) {
+ $.MAL.soundNotifyMentions();
- if ($.Options.getShowDesktopNotifMentionsOpt() === 'enable') {
- $.MAL.showDesktopNotif(false, polyglot.t('You got')+' '+polyglot.t('new_mentions', _newMentions)+'.', false,'twister_notification_new_mentions', $.Options.getShowDesktopNotifMentionsTimerOpt(), function(){$.MAL.showMentions(defaultScreenName)}, false)
+ if ($.Options.getShowDesktopNotifMentionsOpt() === 'enable') {
+ $.MAL.showDesktopNotif(false, polyglot.t('You got')+' '+polyglot.t('new_mentions', _newMentions)+'.', false,'twister_notification_new_mentions', $.Options.getShowDesktopNotifMentionsTimerOpt(), function(){$.MAL.showMentions(defaultScreenName)}, false)
+ }
}
}
diff --git a/js/twister_timeline.js b/js/twister_timeline.js
index 3ebbf02..23aaa05 100644
--- a/js/twister_timeline.js
+++ b/js/twister_timeline.js
@@ -79,6 +79,7 @@ function requestObj(users, mode, count, getspam)
this.mode = mode; // 'latest', 'latestFirstTime' or 'older'
this.count = count;
this.getspam = getspam;
+ this.updateReportNewPosts = (users.toString() === defaultScreenName || mode === 'older') ? false : true;
// getRequest method returns the list parameter expected by getposts rpc
this.getRequest = function() {
@@ -111,10 +112,17 @@ function requestObj(users, mode, count, getspam)
// doneReportProcessing is called after an getposts response is processed
// mode changing may require a new request (to fill gaps)
this.doneReportProcessing = function(receivedCount) {
- if( this.mode == 'latest') this.mode = 'fillgap';
- if( this.mode == 'latestFirstTime') this.mode = 'done';
- if( this.mode == 'older') this.mode = 'done';
- if( receivedCount < this.count ) this.mode = 'done';
+ if (receivedCount === this.count) {
+ this.mode = 'done';
+ } else {
+ if (this.mode === 'latest' || this.mode === 'latestFirstTime') {
+ this.mode = 'fillgap';
+ } else if (this.mode === 'fillgap') {
+ this.mode = 'older';
+ } else if (this.mode === 'older')
+ this.mode = 'done';
+ }
+ //console.log('we got '+receivedCount+' posts from requested '+this.count+', status of processing is "'+this.mode+'"');
}
}
@@ -197,25 +205,36 @@ function processReceivedPosts(req, posts)
}
req.reportProcessedPost(post["userpost"]["n"],post["userpost"]["k"], streamPostAppended);
}
- req.doneReportProcessing(posts.length);
+ req.doneReportProcessing(p2a);
+
+ if (req.updateReportNewPosts) {
+ _newPostsPending = 0; // FIXME maybe we need updating here instead this zeroing
+ $.MAL.reportNewPosts(_newPostsPending);
+ }
- //if the count of posts less then 5....
- if( req.mode == "done" && p2a > 5) {
+ //if the count of recieved posts less then or equals to requested...
+ if (req.mode === 'done') {
timelineLoaded = true;
$.MAL.postboardLoaded();
_refreshInProgress = false;
- $(window).scroll();
} else {
//we will request more older post...
- req.count += postsPerRefresh;
- req.mode = 'older';
- requestGetposts(req);
+ req.count -= p2a;
+ if (req.count > 0) {
+ //console.log('we are requesting '+req.count+' more posts...');
+ requestGetposts(req);
+ } else {
+ timelineLoaded = true;
+ $.MAL.postboardLoaded();
+ _refreshInProgress = false;
+ }
}
}
// request timeline update for a given list of users
function requestTimelineUpdate(mode, count, timelineUsers, getspam)
{
+ //console.log(mode+' timeline update request: '+count+' posts for following users - '+timelineUsers);
if( _refreshInProgress || !defaultScreenName)
return;
$.MAL.postboardLoading();
@@ -226,10 +245,6 @@ function requestTimelineUpdate(mode, count, timelineUsers, getspam)
} else {
console.log("requestTimelineUpdate: not following any users");
}
- if( mode == "latest" || mode == "latestFirstTime" ) {
- _newPostsPending = 0;
- $.MAL.reportNewPosts(0);
- }
}
// getlasthave is called every second to check if followed users have posted anything new
diff --git a/login.html b/login.html
index 9a33cd2..96a853f 100644
--- a/login.html
+++ b/login.html
@@ -53,7 +53,7 @@
-
twister login
+
Existing local users
diff --git a/options.html b/options.html
index 468f29b..b2d6be5 100644
--- a/options.html
+++ b/options.html
@@ -102,7 +102,7 @@
-
+
For new features check twister-calm repository!
diff --git a/theme_calm/css/style.css b/theme_calm/css/style.css
index a45c5b2..ee4be7b 100644
--- a/theme_calm/css/style.css
+++ b/theme_calm/css/style.css
@@ -135,10 +135,12 @@ button.follow, button.unfollow, .following-list button.private {
background: none;
border: solid 1px rgba( 0, 0, 0, .2 );
padding: 3px 15px;
+ font-size: 12px;
}
.following-list .public-following {
padding: 4px 16px;
+ font-size: 12px;
}
.following-list .public-following:hover {
@@ -164,9 +166,9 @@ button.unfollow:hover {
}
.follow-suggestions .follow, .follow-suggestions .unfollow {
- display: block;
- position: relative;
- left: 50%;
+ display: inline-block;
+ float: right;
+ margin-right: 10px;
}
/*************************************
@@ -890,7 +892,8 @@ textarea.splited-post {
.twister-user
{
clear: both;
- padding-bottom: 10px;
+ overflow: hidden;
+ padding-bottom: 4px;
margin-top: 4px;
border-bottom: solid 1px rgba( 69, 71, 77, .1 );
border-top: solid 1px rgba( 69, 71, 77, .1 );
@@ -1531,14 +1534,14 @@ textarea.splited-post {
padding: 10px;
border-radius: 6px;
}
-.singleBlock h2
+.singleBlock h2, .header-bold
{
font-weight: bold;
line-height: 40px;
color: rgba( 255, 255, 255, 1 );
font-variant: small-caps;
border-bottom: solid 1px rgba( 69, 71, 77, .1 );
- margin: 15px 0 0 0;
+ margin: 0;
padding-left: 5px;
background: #768fce;
border-radius: 2px;
@@ -1608,16 +1611,23 @@ textarea.splited-post {
}
/*************************************
-**************************** LOGIN PAGE
+************* LOGIN PAGE *************
**************************************/
-.login .module, .optionsPage .module {
+
+.login .header-bold {
+ display: block;
+ width: 500px;
+ margin: 0px auto 12px auto;
+}
+
+.login .module {
padding: 20px;
width: 500px;
margin: 10px auto;
border: 3px solid #c7cdda;
border-radius: 6px;
}
-.login .module p, .optionsPage .module p{
+.login .module p {
font: 14px "Open Sans", sans-serif;
margin-bottom: 5px;
@@ -1634,7 +1644,7 @@ textarea.splited-post {
background: #fff;
transition: background-color 100ms linear;
}
-.login .module select, .optionsPage select{
+.login .module select {
height: 30px;
font: 13px/24px "Open sans";
text-align: center;
@@ -1742,7 +1752,7 @@ textarea.splited-post {
position: absolute;
right: 0;
top: 0;
- padding: 3px 10px;
+ padding: 1px 10px;
cursor: pointer;
color: rgba( 255, 255, 255, .7 );
font-weight: bold;
@@ -1759,7 +1769,7 @@ textarea.splited-post {
position: absolute;
right: 30px;
top: 0;
- padding: 3px 10px;
+ padding: 1px 10px;
cursor: pointer;
color: rgba( 255, 255, 255, .7 );
font-weight: bold;
@@ -2142,9 +2152,11 @@ textarea.splited-post {
font-size: 12px;
color: rgba( 0, 0, 0, .6 );
}
+
/*************************************
-****************** LOADER ************
+**************** LOADER **************
**************************************/
+
.postboard-loading
{
text-align: right;
@@ -2261,26 +2273,74 @@ textarea.splited-post {
}
/*************************************
-****************** OPTIONS ***********
+**************** OPTIONS *************
**************************************/
.options .module
{
- margin: 5px;
- padding: 15px;
+ display: block;
+ width: 720px;
+ padding: 32px 40px;
+ margin: 8px auto;
+ background: #fff;
+ border: 3px solid #c7cdda;
+ border-radius: 6px;
}
.options .container
{
- margin: 5px 0px 5px 10px;
+ margin: 8px 0px 8px 16px;
+}
+
+.options .label {
+ font-size: 13px;
}
.options .label-h {
- font-weight: 700;
+ font-weight: bold;
+ font-size: 14px;
}
-.options .module label {
- font: 12px "Open Sans", sans-serif;
+.options button, .options input, .options select {
+ font: 13px/24px "Open sans";
+}
+
+.options .module input, .options .module select {
+ background: #f3f3f3;
+ border: solid 1px #ccc;
+ transition: box-shadow 0.3s, border 0.3s;
+}
+
+.options .module input:focus, .options .module select:focus {
+ background: #fff;
+ transition: background-color 100ms linear;
+ box-shadow: 0 0 10px rgba(0, 0, 0, .3 );
+}
+
+.options .module input {
+ padding: 0px 10px;
+ text-align: right;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.options .module select {
+ padding: 0px 30px 0px 10px;
+ text-align: center;
+ background: #fff url(../img/form-arrow-down-black.png) no-repeat right center;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+/* hide default apperance select element and arrow in firefox */
+ -webkit-appearance:none;
+ -moz-appearance:none;
+ appearance:none;
+ text-indent: 0.01px;
+ text-overflow: '';
+/* end */
}
.volValue {
@@ -2300,7 +2360,21 @@ textarea.splited-post {
-ms-transition: height 1s linear;
}
-/* Following page */
+/*************************************
+*********** FOLLOWING PAGE ***********
+**************************************/
+
+.following .postboard-loading
+{
+ text-align: center;
+}
+
+.following .header-bold {
+ display: block;
+ width: 100%;
+ margin: 0px auto 12px auto;
+}
+
.following ol.following-list > li{
display: inline-block;
width: 280px;
@@ -2314,13 +2388,18 @@ textarea.splited-post {
.following ol.following-list li .swarm-status {
font: 11px "Open Sans", sans-serif;
color: #343434;
- margin-left: 10px;
+ display: block;
+ position: absolute;
+ top: 94px;
+ right: 8px;
}
.following ol.following-list li span.mini-profile-name:hover {
color: #5e8da4;
}
.following ol.following-list li span.mini-screen-name {
color: #5e8da4;
+ position: absolute;
+ top: 32px;
}
.following ol.following-list li span.mini-screen-name:hover {
color: #76b2ce;
@@ -2339,6 +2418,14 @@ textarea.splited-post {
vertical-align: middle;
}
+.following-list .following-config
+{
+ width: 100%;
+ position: absolute;
+ top: 60px;
+ text-align: center;
+}
+
/* Autocomplite*/
.textcomplete-wrapper textarea {
display: inline;
diff --git a/theme_nin/css/style.css b/theme_nin/css/style.css
index 9fbc994..91d5516 100644
--- a/theme_nin/css/style.css
+++ b/theme_nin/css/style.css
@@ -1611,6 +1611,75 @@ h3 .isFollowing:after {
display: none;
}
+/*************************************
+************* LOGIN PAGE *************
+**************************************/
+
+.login .header-bold {
+ display: block;
+ width: 720px;
+ margin: 0px auto 12px auto;
+}
+
+.login .module {
+ display: block;
+ width: 720px;
+ padding: 32px 40px;
+ margin: 8px auto;
+ background: #fff;
+}
+
+.login .module p {
+ margin-bottom: 5px;
+}
+
+.login .module input {
+ padding: 5px 10px;
+ background: #f3f3f3;
+ border: solid 1px #dcdcdc;
+ transition: box-shadow 0.3s, border 0.3s;
+ font-size: 14px;
+}
+
+.login .module input:focus, .login .module select:focus {
+ background: #fff;
+ transition: background-color 100ms linear;
+ border-bottom: solid 2px #B4C669;
+}
+
+.login .module select {
+ height: 30px;
+ padding: 3px 30px 3px 10px;
+ margin: 0;
+ border: 1px solid #ccc;
+ font-size: 14px;
+}
+
+.login .module span.availability {
+ margin-left: 10px;
+ color: #45474d;
+}
+
+.with-nickname, .import-secret-key, .create-user {
+ margin-top: 10px;
+}
+
+.login .module:nth-child(2) div ,
+.login .module:nth-child(3) div:nth-child(2),
+.login .secret-key-import,
+.login .username-import {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ margin-left: 16px;
+}
+
+.login .create-user,
+.login .import-secret-key {
+ display: block;
+ margin-left: auto;
+ margin-right: 16px;
+}
+
/************** BUTTONS *********** */
/* line 65, ../sass/_commons.sass */
button, .mini-profile-actions span, a.button {
@@ -2121,6 +2190,10 @@ ul.userMenu-search-profiles button:after, ul.userMenu-search-profiles .mini-prof
margin: 5px 0;
}
+.post-area-new textarea:focus {
+ border-bottom: solid 2px #B4C669;
+}
+
/* line 334, ../sass/style.sass */
#postboard-top {
clear: both;
diff --git a/theme_nin/sass/_login.sass b/theme_nin/sass/_login.sass
new file mode 100644
index 0000000..350832c
--- /dev/null
+++ b/theme_nin/sass/_login.sass
@@ -0,0 +1,55 @@
+.login .header-bold
+ display: block
+ width: 720px
+ margin: 0px auto 12px auto
+
+.login .module
+ display: block
+ width: 720px
+ padding: 32px 40px
+ margin: 8px auto
+ background: white
+
+.login .module p
+ margin-bottom: 5px
+
+.login .module input
+ padding: 5px 10px
+ background: #f3f3f3
+ border: solid 1px #dcdcdc
+ transition: box-shadow 0.3s, border 0.3s
+ font-size: 14px
+
+.login .module input:focus,
+.login .module select:focus
+ background: white
+ transition: background-color 100ms linear
+ border-bottom: solid 2px $color-green
+
+.login .module select
+ height: 30px
+ padding: 3px 30px 3px 10px
+ margin: 0
+ border: 1px solid #ccc
+ font-size: 14px
+
+.login .module span.availability
+ margin-left: 10px
+ color: #45474d
+
+.with-nickname, .import-secret-key, .create-user
+ margin-top: 10px
+
+.login .module:nth-child(2) div,
+.login .module:nth-child(3) div:nth-child(2),
+.login .secret-key-import,
+.login .username-import
+ margin-top: 20px
+ margin-bottom: 20px
+ margin-left: 16px
+
+.login .create-user,
+.login .import-secret-key
+ display: block
+ margin-left: auto
+ margin-right: 16px
diff --git a/theme_nin/sass/style.sass b/theme_nin/sass/style.sass
index 3be1e29..e5c0f00 100755
--- a/theme_nin/sass/style.sass
+++ b/theme_nin/sass/style.sass
@@ -8,6 +8,7 @@
@import _profile
@import _postboard
@import _following
+@import _login
@import _network
@import _commons
@import _tabs
@@ -353,6 +354,8 @@ ul.userMenu-search-profiles
border: 1px solid rgba(0, 0, 0, 0.1)
padding: 3px
margin: 5px 0
+ &:focus
+ border-bottom: solid 2px $color-green
#postboard-top
clear: both