Merge branch 'master' of github.com:designcreateplay/NodeBB

v1.18.x
Julian Lam 12 years ago
commit 931beecc21

@ -201,6 +201,15 @@ footer.footer {
display:inline-block;
vertical-align:top;
}
.account-online-status {
.icon-circle-blank {
color:red;
}
.icon-circle {
color:green;
}
}
.user-profile-picture {
width:128px;
@ -549,26 +558,34 @@ body .navbar .nodebb-inline-block {
}
#imagedrop {
background: rgba(64, 64, 64, 0.95);
padding: 0.5em;
display: block;
width: 90%;
min-height:25px;
margin: 1em auto;
resize: none;
color:white;
font-size:20px;
div {
margin-right:10px;
}
span {
line-height:20px;
float:left;
}
button {
padding-left:5px;
}
text-align:center;
color:white;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height:230px;
line-height:230px;
font-size:20px;
vertical-align: middle;
}
#imagelist {
position: absolute;
bottom: 5px;
left: 0px;
padding-left:2em;
div {
margin-right:5px;
}
span {
line-height:20px;
float:left;
}
button {
padding-left:5px;
}
}
}
}

@ -45,6 +45,9 @@
img.hidden-desktop {
max-width: 10px;
max-height: 10px;
padding-top: 5px;
margin-right: 5px;
}
}
.post-content {

@ -37,7 +37,21 @@
$('.user-recent-posts .topic-row').on('click', function() {
ajaxify.go($(this).attr('topic-url'));
})
});
var onlineStatus = $('.account-online-status');
socket.on('api:user.isOnline', function(online) {
if(online) {
onlineStatus.find('span span').text('online');
onlineStatus.find('i').attr('class', 'icon-circle');
} else {
onlineStatus.find('span span').text('offline');
onlineStatus.find('i').attr('class', 'icon-circle-blank');
}
});
socket.emit('api:user.isOnline', theirid);
});

@ -10,6 +10,7 @@ define(['taskbar'], function(taskbar) {
function loadFile(file) {
var reader = new FileReader();
var dropDiv = $('#imagedrop');
var imagelist = $('#imagelist');
var uuid = dropDiv.parents('[data-uuid]').attr('data-uuid');
var posts = composer.posts[uuid];
@ -33,15 +34,11 @@ define(['taskbar'], function(taskbar) {
if(index !== -1) {
posts.images.splice(index, 1);
}
if(!dropDiv.children().length) {
dropDiv.html('Drag and drop images here');
}
});
imageLabel.append(closeButton);
dropDiv.append(imageLabel);
imagelist.append(imageLabel);
dropDiv.hide();
});
reader.readAsDataURL(file);
@ -73,9 +70,6 @@ define(['taskbar'], function(taskbar) {
var dt = e.dataTransfer;
var files = dt.files;
if(!posts.images.length)
drop.html('');
for (var i=0; i<files.length; i++) {
loadFile(files[i]);
}
@ -107,8 +101,11 @@ define(['taskbar'], function(taskbar) {
'<button class="btn" data-action="discard" tabIndex="5"><i class="icon-remove"></i> Discard</button>' +
'</div>' +
'</div>' +
'<div id="imagedrop" style="display:none;"></div>'+
'<textarea tabIndex="2"></textarea>' +
'<div style="position:relative;">'+
'<div id="imagedrop" class=""><div>Drag and Drop Images Here</div></div>'+
'<textarea tabIndex="2"></textarea>' +
'<div id="imagelist"></div>'+
'</div>'+
'</div>';
document.body.insertBefore(composer.postContainer, taskbar);
@ -246,9 +243,12 @@ define(['taskbar'], function(taskbar) {
btnRect = taskbarBtn.getBoundingClientRect(),
taskbarRect = document.getElementById('taskbar').getBoundingClientRect(),
dropDiv = $(composer.postContainer).find('#imagedrop'),
imagelist = $(composer.postContainer).find('#imagelist'),
windowRect, leftPos;
dropDiv.html('Drag and drop images here').hide();
dropDiv.hide();
imagelist.empty();
composer.postContainer.style.display = 'block';
windowRect = postWindowEl.getBoundingClientRect();

@ -20,6 +20,9 @@
<div class="account-picture-block">
<img src="{picture}" class="user-profile-picture img-polaroid"/>
</div>
<div class="account-online-status">
<span><i class="icon-circle-blank"></i> <span>offline</span></span>
</div>
<div id="user-actions">
<a id="follow-btn" href="#" class="btn">Follow</a>
</div>

@ -38,7 +38,6 @@
<hr />
<div class="topic-buttons pull-left">
<a href="/users/{main_posts.userslug}" class="username-field btn hidden-phone">{main_posts.username}</a>
<a target="_blank" class="btn hidden-phone" href="../{topic_id}.rss" title="RSS Feed"><i class="icon-rss-sign"></i></a>
<button class="btn follow" type="button" title="Be notified of new replies in this topic"><i class="icon-eye-open"></i></button>
<button id="ids_{main_posts.pid}_{main_posts.uid}" class="btn edit {main_posts.display_moderator_tools}" type="button" title="Edit"><i class="icon-pencil"></i></button>
@ -60,7 +59,7 @@
</div>
<div class="post-signature">{main_posts.signature}</div>
<div class="profile-block">
<img class="hidden-desktop" src="{main_posts.picture}" align="left" /> posted by <strong><a class="" href="/users/{main_posts.userslug}">{main_posts.username}</a></strong> {main_posts.relativeTime} ago
<img class="hidden-desktop" src="{main_posts.picture}" align="left" /> posted by <strong><a class="username-field" href="/users/{main_posts.userslug}">{main_posts.username}</a></strong> {main_posts.relativeTime} ago
<span class="{main_posts.edited-class} hidden-phone">| last edited by <strong><a href="/users/{main_posts.editorslug}">{main_posts.editorname}</a></strong> {main_posts.relativeEditTime} ago</span>
<span class="{main_posts.edited-class}"><i class="icon-edit visible-phone" title="edited by {main_posts.editorname} {main_posts.relativeEditTime} ago"></i></span>
<div class="post-buttons visible-phone">

@ -23,7 +23,8 @@ var user = require('./../user.js'),
Admin.create_routes = function(app) {
(function() {
var routes = ['categories', 'users', 'topics', 'settings', 'themes', 'twitter', 'facebook', 'gplus', 'redis', 'motd'];
var routes = ['categories', 'users', 'topics', 'settings', 'themes', 'twitter', 'facebook', 'gplus', 'redis', 'motd',
'users/latest', 'users/sort-posts', 'users/sort-reputation', 'users/search'];
for (var i=0, ii=routes.length; i<ii; i++) {
(function(route) {

@ -337,7 +337,9 @@ var utils = require('./../public/src/utils.js'),
function iterator(uid, callback) {
User.getUserData(uid, function(userData) {
data.push(userData);
if(userData) {
data.push(userData);
}
callback(null);
});
}

@ -47,7 +47,8 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
userSockets[uid] = userSockets[uid] || [];
userSockets[uid].push(socket);
if(uid)
io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid));
socket.join('uid_' + uid);
});
});
@ -61,8 +62,11 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
userSockets[uid].splice(index, 1);
}
if(userSockets[uid].length === 0)
if(userSockets[uid].length === 0) {
delete users[sessionID];
if(uid)
io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid));
}
for(var roomName in rooms) {
@ -215,12 +219,16 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
user.reset.commit(socket, data.code, data.password);
});
function isUserOnline(uid) {
return !!userSockets[uid] && userSockets[uid].length > 0;
}
socket.on('api:user.get_online_users', function(data) {
var returnData = [];
for(var i=0; i<data.length; ++i) {
var uid = data[i];
if(userSockets[uid] && userSockets[uid].length > 0)
if(isUserOnline(uid))
returnData.push(uid);
else
returnData.push(0);
@ -228,6 +236,10 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
socket.emit('api:user.get_online_users', returnData);
});
socket.on('api:user.isOnline', function(uid) {
socket.emit('api:user.isOnline', isUserOnline(uid));
});
socket.on('api:user.changePassword', function(data) {
user.changePassword(socket, uid, data, function(success) {
if(success) {

Loading…
Cancel
Save