rant mode, design fixes, move user stream item html to separate function, etc

This commit is contained in:
Hannes Mannerheim 2016-01-18 19:30:29 +01:00
parent 74c52babc2
commit 3cc2eb3f14
24 changed files with 233 additions and 94 deletions

View File

@ -1279,7 +1279,9 @@ function queetBoxPopUpHtml() {
·
· · · · · · · · · */
function replyFormHtml(q,qid) {
function replyFormHtml(streamItem,qid) {
var q = streamItem.children('.queet');
// if we have cached text in localstorage
var data = localStorageObjectCache_GET('queetBoxInput','queet-box-' + qid);
@ -1287,33 +1289,55 @@ function replyFormHtml(q,qid) {
var cachedText = encodeURIComponent(data);
}
// get all @:s
var user_screen_name = q.children('.queet').find('.screen-name').html().substring(1);
var user_screen_name_html = '<a>@' + user_screen_name + '</a>';
var user_screen_name_text = '@' + user_screen_name;
var reply_to_screen_name = '';
var reply_to_screen_name_html = '';
var reply_to_screen_name_text = '';
if(q.attr('data-in-reply-to-screen-name').length>0 // not if not a reply
&& q.attr('data-in-reply-to-screen-name') != $('#user-screen-name').html() // not if it's me
&& q.attr('data-in-reply-to-screen-name') != user_screen_name // not same screen name twice
) {
reply_to_screen_name = q.attr('data-in-reply-to-screen-name');
reply_to_screen_name_html = '&nbsp;<a>@' + reply_to_screen_name + '</a>';
reply_to_screen_name_text = ' @' + reply_to_screen_name;
var screenNamesToAdd = {};
// add the screen name to the one we're replying to (if it's not me)
if(!thisIsALinkToMyProfile(q.find('.account-group').attr('href'))) {
var replyToScreenName = q.find('.account-group span.screen-name').html().replace('@','');
screenNamesToAdd[q.find('.account-group').attr('href')] = replyToScreenName;
}
var more_reply_tos = '';
var more_reply_tos_text = '';
$.each(q.children('.queet').find('.queet-text').find('.mention'),function(key,obj){
var thisMention = $(obj).html().replace('@','');
if(thisMention != user_screen_name && thisMention != reply_to_screen_name && thisMention != $('#user-screen-name').html()) {
more_reply_tos = more_reply_tos + '&nbsp;<a>@' + thisMention + '</a>';
more_reply_tos_text = more_reply_tos_text + ' @' + thisMention;
// add the screen name to the one who the one we're replying to is replying to (if it's not me)
if(q.find('i.addressees > span.reply-to').length > 0
&& !thisIsALinkToMyProfile(q.find('i.addressees > span.reply-to > a').attr('href'))) {
var replyToScreenName = q.find('i.addressees > span.reply-to > a').html().replace('@','');
if(typeof screenNamesToAdd[q.find('i.addressees > span.reply-to > a').attr('href')] == 'undefined') {
screenNamesToAdd[q.find('i.addressees > span.reply-to > a').attr('href')] = replyToScreenName;
}
}
// get all other mentions (if it's not me)
$.each(q.find('.queet-text').find('.mention'),function(key,obj){
if(!thisIsALinkToMyProfile($(obj).attr('href'))) {
if(typeof screenNamesToAdd[$(obj).attr('href')] == 'undefined') {
var thisMention = $(obj).html().replace('@','');
screenNamesToAdd[$(obj).attr('href')] = thisMention;
}
}
});
var startText = window.sL.replyTo + ' ' + user_screen_name_html + reply_to_screen_name_html + more_reply_tos + '&nbsp;<br>';
var repliesText = user_screen_name_text + reply_to_screen_name_text + more_reply_tos_text + '&nbsp;';
// build reply/rant strings
var repliesText = '';
if(Object.keys(screenNamesToAdd).length < 1
&& q.find('strong.name').attr('data-user-id') == window.loggedIn.id) {
if(streamItem.attr('data-in-reply-to-status-id') == 'null' || streamItem.attr('data-in-reply-to-status-id') == 'false' || streamItem.attr('data-in-reply-to-status-id') == 'undefined' || streamItem.attr('data-in-reply-to-status-id') == '') {
var startText = window.sL.startRant + ' ';
}
else {
var startText = window.sL.continueRant + ' ';
}
}
else {
var startText = window.sL.replyTo + ' ';
var repliesArray = [];
$.each(screenNamesToAdd, function(url,screenName){
repliesArray.push(screenName);
});
if(repliesArray.length>0) {
startText = '<a>@' + repliesArray.join('</a>&nbsp;<a>@') + '</a>&nbsp;<br>';
repliesText = '@' + repliesArray.join(' @') + '&nbsp;';
}
}
startText = encodeURIComponent(startText);
repliesText = encodeURIComponent(repliesText);
@ -1595,10 +1619,7 @@ function addToFeed(feed, after, extraClasses) {
' + obj.from_profile.name + '\
</strong>\
</a> \
' + window.sL.xFavedYourQueet + '\
<small class="created-at" data-created-at="' + obj.created_at + '" data-tooltip="' + parseTwitterLongDate(obj.created_at) + '">\
' + notificationTime + '\
</small>\
' + window.sL.xFavedYourQueet + '<small class="created-at" data-created-at="' + obj.created_at + '" data-tooltip="' + parseTwitterLongDate(obj.created_at) + '"> <a>' + notificationTime + '</a></small>\
</div>\
<div class="small-grey-notice">\
<a data-created-at="' + obj.notice.created_at + '" data-tooltip="' + parseTwitterLongDate(obj.notice.created_at) + '" href="' + window.siteInstanceURL + 'notice/' + obj.notice.id + '">\
@ -1624,10 +1645,7 @@ function addToFeed(feed, after, extraClasses) {
' + obj.from_profile.name + '\
</strong>\
</a> \
' + window.sL.xRepeatedYourQueet + '\
<small class="created-at" data-created-at="' + obj.created_at + '" data-tooltip="' + parseTwitterLongDate(obj.created_at) + '">\
' + notificationTime + '\
</small>\
' + window.sL.xRepeatedYourQueet + '<small class="created-at" data-created-at="' + obj.created_at + '" data-tooltip="' + parseTwitterLongDate(obj.created_at) + '"> <a>' + notificationTime + '</a></small>\
</div>\
<div class="small-grey-notice">\
<a data-created-at="' + obj.notice.created_at + '" data-tooltip="' + parseTwitterLongDate(obj.notice.created_at) + '" href="' + window.siteInstanceURL + 'notice/' + obj.notice.id + '">\
@ -1657,10 +1675,7 @@ function addToFeed(feed, after, extraClasses) {
' + obj.from_profile.name + '\
</strong>\
</a> \
' + window.sL.xStartedFollowingYou + '\
<small class="created-at" data-created-at="' + obj.created_at + '" title="' + obj.created_at + '">\
' + notificationTime + '\
</small>\
' + window.sL.xStartedFollowingYou + '<small class="created-at" data-created-at="' + obj.created_at + '" title="' + obj.created_at + '"> <a>' + notificationTime + '</a></small>\
</div>\
</div>\
</div>\
@ -1683,40 +1698,7 @@ function addToFeed(feed, after, extraClasses) {
// only if not user is already in stream
if($('#stream-item-' + obj.id).length == 0) {
obj.description = obj.description || '';
// external
var ostatusHtml = '';
if(obj.is_local === false) {
ostatusHtml = '<a target="_blank" title="' + window.sL.goToTheUsersRemoteProfile + '" class="ostatus-link" href="' + obj.statusnet_profile_url + '"></a>';
}
// rtl or not
var rtlOrNot = '';
if($('body').hasClass('rtl')) {
rtlOrNot = 'rtl';
}
// show user actions
var followingClass = '';
if(obj.following) {
followingClass = 'following';
}
var followButton = '';
if(typeof window.loggedIn.screen_name != 'undefined' // if logged in
&& window.loggedIn.id != obj.id) { // not if this is me
if(!(obj.statusnet_profile_url.indexOf('/twitter.com/')>-1 && obj.following === false)) { // only unfollow twitter users
var followButton = '<div class="user-actions">\
<button data-follow-user-id="' + obj.id + '" data-follow-user="' + obj.statusnet_profile_url + '" type="button" class="qvitter-follow-button ' + followingClass + '">\
<span class="button-text follow-text"><i class="follow"></i>' + window.sL.userFollow + '</span>\
<span class="button-text following-text">' + window.sL.userFollowing + '</span>\
<span class="button-text unfollow-text">' + window.sL.userUnfollow + '</span>\
</button>\
</div>';
}
}
var userHtml = '<div id="stream-item-' + obj.id + '" class="stream-item user"><div class="queet ' + rtlOrNot + '">' + followButton + '<div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.statusnet_profile_url + '" data-user-id="' + obj.id + '"><img class="avatar profile-size" src="' + obj.profile_image_url_profile_size + '" data-user-id="' + obj.id + '" /><strong class="name" data-user-id="' + obj.id + '">' + obj.name + '</strong> <span class="screen-name" data-user-id="' + obj.id + '">@' + obj.screen_name + '</span></a>' + ostatusHtml + '</div><div class="queet-text">' + obj.description + '</div></div></div></div>';
var userHtml = buildUserStreamItemHtml(obj);
if(after) {
$('#' + after).after(userHtml);
@ -1842,6 +1824,69 @@ function addToFeed(feed, after, extraClasses) {
}
/* ·
·
· Build HTML for a user stream item from an object
·
· @param obj: a user object
·
· · · · · · · · · · · · · */
function buildUserStreamItemHtml(obj) {
obj.description = obj.description || '';
// external
var ostatusHtml = '';
if(obj.is_local === false) {
ostatusHtml = '<a target="_blank" title="' + window.sL.goToTheUsersRemoteProfile + '" class="ostatus-link" href="' + obj.statusnet_profile_url + '"></a>';
}
// rtl or not
var rtlOrNot = '';
if($('body').hasClass('rtl')) {
rtlOrNot = 'rtl';
}
// show user actions
var followingClass = '';
if(obj.following) {
followingClass = 'following';
}
var followButton = '';
if(typeof window.loggedIn.screen_name != 'undefined' // if logged in
&& window.loggedIn.id != obj.id) { // not if this is me
if(!(obj.statusnet_profile_url.indexOf('/twitter.com/')>-1 && obj.following === false)) { // only unfollow twitter users
var followButton = '<div class="user-actions">\
<button data-follow-user-id="' + obj.id + '" data-follow-user="' + obj.statusnet_profile_url + '" type="button" class="qvitter-follow-button ' + followingClass + '">\
<span class="button-text follow-text"><i class="follow"></i>' + window.sL.userFollow + '</span>\
<span class="button-text following-text">' + window.sL.userFollowing + '</span>\
<span class="button-text unfollow-text">' + window.sL.userUnfollow + '</span>\
</button>\
</div>';
}
}
return '<div id="stream-item-' + obj.id + '" class="stream-item user">\
<div class="queet ' + rtlOrNot + '">\
' + followButton + '\
<div class="queet-content">\
<div class="stream-item-header">\
<a class="account-group" href="' + obj.statusnet_profile_url + '" data-user-id="' + obj.id + '">\
<img class="avatar profile-size" src="' + obj.profile_image_url_profile_size + '" data-user-id="' + obj.id + '" />\
<strong class="name" data-user-id="' + obj.id + '">' + obj.name + '</strong> \
<span class="screen-name" data-user-id="' + obj.id + '">@' + obj.screen_name + '</span>\
</a>\
' + ostatusHtml + '\
</div>\
<div class="queet-text">' + obj.description + '</div>\
</div>\
</div>\
</div>';
}
/* ·
·
· Build HTML for a queet from an object

View File

@ -683,6 +683,33 @@ function removeProtocolFromUrl(url) {
}
/* ·
·
· Is this url a link to my profile?
·
· · · · · · · · · */
function thisIsALinkToMyProfile(url) {
if(typeof url == 'undefined') {
return false;
}
if(!window.loggedIn) {
return false;
}
if(url.slice(-1) == '/') { // remove trailing '/'
url = url.slice(0,-1);
}
var urlWithoutProtocol = removeProtocolFromUrl(url);
if(removeProtocolFromUrl(window.loggedIn.statusnet_profile_url) == urlWithoutProtocol) {
return true;
}
var userIdUrlWithoutProtocol = removeProtocolFromUrl(window.siteInstanceURL) + 'user/' + window.loggedIn.id;
if(userIdUrlWithoutProtocol == urlWithoutProtocol) {
return true;
}
return false;
}
/* ·
·

View File

@ -2437,7 +2437,7 @@ $('body').on('click', '.queet-toolbar button',function () {
var queetTempText = replaceHtmlSpecialChars(queetText.replace(/\n/g,'<br>')); // no xss
queetTempText = queetTempText.replace(/&lt;br&gt;/g,'<br>'); // but preserve line breaks
var queetHtml = '<div id="' + tempPostId + '" class="stream-item conversation temp-post" style="opacity:1"><div class="queet"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group"><img class="avatar" src="' + $('#user-avatar').attr('src') + '" /><strong class="name">' + $('#user-name').html() + '</strong> <span class="screen-name">@' + $('#user-screen-name').html() + '</span></a><small class="created-at">posting</small></div><div class="queet-text">' + queetTempText + '</div><div class="stream-item-footer"><ul class="queet-actions"><li class="action-reply-container"><a class="with-icn"><span class="icon sm-reply" title="' + window.sL.replyVerb + '"></span></a></li><li class="action-del-container"><a class="with-icn"><span class="icon sm-trash" title="' + window.sL.deleteVerb + '"></span></a></li></i></li><li class="action-fav-container"><a class="with-icn"><span class="icon sm-fav" title="' + window.sL.favoriteVerb + '"></span></a></li></ul></div></div></div></div>';
var queetHtml = '<div id="' + tempPostId + '" class="stream-item conversation temp-post" style="opacity:1"><div class="queet"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group"><img class="avatar" src="' + $('#user-avatar').attr('src') + '" /><strong class="name">' + $('#user-name').html() + '</strong> <span class="screen-name">@' + $('#user-screen-name').html() + '</span></a><small class="created-at"> ' + window.sL.posting + '</small></div><div class="queet-text">' + queetTempText + '</div><div class="stream-item-footer"><ul class="queet-actions"><li class="action-reply-container"><a class="with-icn"><span class="icon sm-reply" title="' + window.sL.replyVerb + '"></span></a></li><li class="action-del-container"><a class="with-icn"><span class="icon sm-trash" title="' + window.sL.deleteVerb + '"></span></a></li></i></li><li class="action-fav-container"><a class="with-icn"><span class="icon sm-fav" title="' + window.sL.favoriteVerb + '"></span></a></li></ul></div></div></div></div>';
queetHtml = detectRTL(queetHtml);
// popup reply
@ -2462,16 +2462,22 @@ $('body').on('click', '.queet-toolbar button',function () {
// if the queet is in conversation, add it to parent's conversation
if($('.stream-item.replying-to').length > 0 && $('.stream-item.replying-to').hasClass('conversation')) {
var insertedTempQueet = $(queetHtml).appendTo($('.stream-item.replying-to').parent());
findAndMarkLastVisibleInConversation($('.stream-item.replying-to').parent());
insertedTempQueet.parent().children('.view-more-container-bottom').remove(); // remove any view-more-container-bottom:s, they only cause trouble at this point
tempQueetInsertedInConversation = true;
}
// if the queet is expanded, add it to its conversation
else if($('.stream-item.replying-to').length > 0 && $('.stream-item.replying-to').hasClass('expanded')) {
var insertedTempQueet = $(queetHtml).appendTo($('.stream-item.replying-to'));
findAndMarkLastVisibleInConversation($('.stream-item.replying-to'));
insertedTempQueet.parent().children('.view-more-container-bottom').remove(); // remove any view-more-container-bottom:s, they only cause trouble at this point
tempQueetInsertedInConversation = true;
}
// maybe the replying-to class is missing but we still have a suiting place to add it
else if($('.stream-item.expanded[data-quitter-id="' + in_reply_to_status_id + '"]').length > 0) {
var insertedTempQueet = $(queetHtml).appendTo($('.stream-item.expanded[data-quitter-id="' + in_reply_to_status_id + '"]'));
findAndMarkLastVisibleInConversation($('.stream-item.expanded[data-quitter-id="' + in_reply_to_status_id + '"]'));
insertedTempQueet.parent().children('.view-more-container-bottom').remove(); // remove any view-more-container-bottom:s, they only cause trouble at this point
tempQueetInsertedInConversation = true;
}
// if we can't find a proper place, add it to top and remove conversation class
@ -2528,7 +2534,24 @@ $('body').on('click', '.queet-toolbar button',function () {
}
}
else {
insertedTempQueet.after(queetHtml);
var newInsertedQueet = $(queetHtml).insertBefore(insertedTempQueet);
findAndMarkLastVisibleInConversation(insertedTempQueet.parent());
// make ranting easier, move the reply-form to this newly created notice
// if we have not started writing in it, or if it's missing
// only if this is an expanded conversation
// and only if we're ranting, i.e. no replies the queetbox
var parentQueetBox = insertedTempQueet.parent().find('.inline-reply-queetbox');
if(parentQueetBox.length == 0
|| parentQueetBox.children('.syntax-middle').css('display') == 'none') {
if(insertedTempQueet.parent().hasClass('expanded') || insertedTempQueet.parent().hasClass('conversation')) {
console.log(parentQueetBox.attr('data-replies-text'));
if(parentQueetBox.children('.queet-box').attr('data-replies-text') == '') {
insertedTempQueet.parent().find('.inline-reply-queetbox').remove();
newInsertedQueet.children('.queet').append(replyFormHtml(newInsertedQueet,newInsertedQueet.attr('data-quitter-id')));
}
}
}
}
// remove temp queet
@ -2629,13 +2652,14 @@ $('body').on('click contextmenu','.queet-box-syntax',function () {
$(this)[0].addEventListener("paste", stripHtmlFromPaste);
if(typeof $(this).attr('data-replies-text') != 'undefined') {
$(this).html(decodeURIComponent($(this).attr('data-replies-text')));
var repliesLen = decodeURIComponent($(this).attr('data-replies-text')).length-5;
var repliesLen = decodeURIComponent($(this).attr('data-replies-text')).replace('&nbsp;',' ').length;
setSelectionRange($(this)[0], repliesLen, repliesLen);
}
else {
$(this).html('');
}
$(this).trigger('input');
$(this).closest('.stream-item').addClass('replying-to');
}
});
$('body').on('mousedown','.syntax-two',function () {
@ -2687,6 +2711,7 @@ $('body').on('blur','.queet-box-syntax',function (e) {
});
function collapseQueetBox(qB) {
qB.closest('.stream-item').removeClass('replying-to');
qB.siblings('.upload-image-container').remove();
qB.siblings('.syntax-middle').css('display','none');
qB.siblings('.syntax-two').css('display','none');

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"Diese Liste gibt es nicht.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -160,5 +160,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"אין רשימה כזו.",
"emailAlreadyInUse":"כבר בשימוש",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"Det eksisterer ingen slik liste.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -159,5 +159,7 @@
"ERRORcouldNotFindList":"Det finns ingen sådan lista.",
"emailAlreadyInUse":"Används redan",
"addEditLanguageLink":"Hjälp till att översätta {site-title} till ett annat språk",
"onlyPartlyTranslated":"Bara {percent}% av gränssnittet är översatt till svenska. Du kan hjälpa till med översättningen på <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitters hemsida</a>"
"onlyPartlyTranslated":"Bara {percent}% av gränssnittet är översatt till svenska. Du kan hjälpa till med översättningen på <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitters hemsida</a>",
"startRant":"Påbörja en harang",
"continueRant":"Fortsätt harangen"
}

View File

@ -158,5 +158,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}

View File

@ -158,5 +158,7 @@
"ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Help translate {site-title} to another language",
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>"
"onlyPartlyTranslated":"{site-title} is only partly translated to <em>{language-name}</em> ({percent}%). You can help complete the translation at <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Start a rant",
"continueRant":"Continue the rant"
}