remote profiles open locally, and "find someone" user search/remote follow input field

This commit is contained in:
Hannes Mannerheim 2017-04-06 13:45:13 +02:00
parent 70ab099e2f
commit a37a4cb9f9
41 changed files with 614 additions and 88 deletions

View File

@ -160,6 +160,10 @@ class QvitterPlugin extends Plugin {
// route/reroute urls
public function onRouterInitialized($m)
{
$m->connect('api/qvitter/statuses/user_timeline.:format',
array('action' => 'ApiQvitterTimelineUser',
'format' => '(xml|json|rss|atom|as)'));
$m->connect(':nickname/mutes',
array('action' => 'qvitter',
'nickname' => Nickname::INPUT_FMT));
@ -371,6 +375,10 @@ class QvitterPlugin extends Plugin {
array('action' => 'shownotice'),
array('notice' => '[0-9]+'),
'qvitter');
URLMapperOverwrite::overwrite_variable($m, 'user/:id',
array('action' => 'userbyid'),
array('id' => '[0-9]+'),
'qvitter');
URLMapperOverwrite::overwrite_variable($m, 'conversation/:id',
array('action' => 'conversation'),
array('id' => '[0-9]+'),
@ -397,6 +405,7 @@ class QvitterPlugin extends Plugin {
case 'api/favorites.json':
case 'api/statuses/friends_timeline.json':
case 'api/statuses/user_timeline.json':
case 'api/qvitter/statuses/user_timeline.json':
// add logged in user's user array
if (common_logged_in() && !isset($_GET['screen_name']) && !isset($_GET['id'])) {
@ -409,13 +418,17 @@ class QvitterPlugin extends Plugin {
if(isset($_GET['screen_name'])) {
$user = User::getKV('nickname', $_GET['screen_name']);
if($user instanceof User) {
$profile = $user->getProfile();
}
}
elseif(isset($_GET['id'])) {
$profile = Profile::getKV('id', $_GET['id']);
$user = User::getKV('id', $_GET['id']);
}
if($user instanceof User) {
header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($user->getProfile())));
if(isset($profile) && $profile instanceof Profile) {
header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($profile)));
}
}
break;

View File

@ -46,14 +46,23 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
{
parent::prepare($args);
$this->format = 'json';
$this->format = 'json';
$profileurl = urldecode($this->arg('profileurl'));
$nickname = urldecode($this->arg('nickname'));
$this->profile = new stdClass();
$this->profile->external = null;
$this->profile->external = null;
$this->profile->local = null;
$this->profile->ostatus = null;
// the user might not exist in our db yet, try to use the Ostatus plugin
// to get it in there
$validate = new Validate();
if ($validate->uri($profileurl)) {
$ostatus_profile = Ostatus_profile::ensureProfileURL($profileurl);
$local_profile = Profile::getKV('id',$ostatus_profile->profile_id);
}
// we can get urls of two types of urls (1) ://instance/nickname
// (2) ://instance/user/1234
@ -97,7 +106,9 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
}
// case (1)
$local_profile = Profile::getKV('profileurl',$profileurl);
if(!isset($local_profile)) {
$local_profile = Profile::getKV('profileurl',$profileurl);
}
if($local_profile instanceof Profile) {
@ -138,13 +149,9 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
{
parent::handle();
if(is_null($this->profile->local) && is_null($this->profile->external)) {
$this->clientError(_('List not found.'), 404);
} else {
$this->initDocument('json');
$this->showJsonObjects($this->profile);
$this->endDocument('json');
}
$this->initDocument('json');
$this->showJsonObjects($this->profile);
$this->endDocument('json');
}
/**

View File

@ -0,0 +1,181 @@
<?php
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
· ·
· Show timelines for both local and remote users ·
· ·
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
· ·
· ·
· Q V I T T E R ·
· ·
· https://git.gnu.io/h2p/Qvitter ·
· ·
· ·
· <o) ·
· /_//// ·
· (____/ ·
· (o< ·
· o> \\\\_\ ·
· \\) \____) ·
· ·
· ·
· ·
· Qvitter is free software: you can redistribute it and / or modify it ·
· under the terms of the GNU Affero General Public License as published by ·
· the Free Software Foundation, either version three of the License or (at ·
· your option) any later version. ·
· ·
· Qvitter is distributed in hope that it will be useful but WITHOUT ANY ·
· WARRANTY; without even the implied warranty of MERCHANTABILTY or FITNESS ·
· FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for ·
· more details. ·
· ·
· You should have received a copy of the GNU Affero General Public License ·
· along with Qvitter. If not, see <http://www.gnu.org/licenses/>. ·
· ·
· Contact h@nnesmannerhe.im if you have any questions. ·
· ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
if (!defined('GNUSOCIAL')) { exit(1); }
class ApiQvitterTimelineUserAction extends ApiBareAuthAction
{
var $notices = null;
var $next_id = null;
/**
* Take arguments for running
*
* @param array $args $_REQUEST args
*
* @return boolean success flag
*/
protected function prepare(array $args=array())
{
parent::prepare($args);
$this->target = $this->getTargetProfile($this->arg('id'));
if (!($this->target instanceof Profile)) {
// TRANS: Client error displayed requesting most recent notices for a non-existing user.
$this->clientError(_('No such user.'), 404);
}
// if (!$this->target->isLocal()) {
// $this->serverError(_('Remote user timelines are not available here yet.'), 501);
// }
$this->notices = $this->getNotices();
return true;
}
/**
* Handle the request
*
* Just show the notices
*
* @return void
*/
protected function handle()
{
parent::handle();
$this->showTimeline();
}
/**
* Show the timeline of notices
*
* @return void
*/
function showTimeline()
{
$this->showJsonTimeline($this->notices);
}
/**
* Get notices
*
* @return array notices
*/
function getNotices()
{
$notices = array();
$notice = $this->target->getNotices(($this->page-1) * $this->count,
$this->count + 1,
$this->since_id,
$this->max_id,
$this->scoped);
while ($notice->fetch()) {
if (count($notices) < $this->count) {
$notices[] = clone($notice);
} else {
$this->next_id = $notice->id;
break;
}
}
return $notices;
}
/**
* We expose AtomPub here, so non-GET/HEAD reqs must be read/write.
*
* @param array $args other arguments
*
* @return boolean true
*/
function isReadOnly($args)
{
return true;
}
/**
* When was this feed last modified?
*
* @return string datestamp of the latest notice in the stream
*/
function lastModified()
{
if (!empty($this->notices) && (count($this->notices) > 0)) {
return strtotime($this->notices[0]->created);
}
return null;
}
/**
* An entity tag for this stream
*
* Returns an Etag based on the action name, language, user ID, and
* timestamps of the first and last notice in the timeline
*
* @return string etag
*/
function etag()
{
if (!empty($this->notices) && (count($this->notices) > 0)) {
$last = count($this->notices) - 1;
return '"' . implode(
':',
array($this->arg('action'),
common_user_cache_hash($this->scoped),
common_language(),
$this->target->getID(),
strtotime($this->notices[0]->created),
strtotime($this->notices[$last]->created))
)
. '"';
}
return null;
}
}

View File

@ -694,6 +694,7 @@ class QvitterAction extends ApiAction
?>
</div>
<div class="menu-container" id="bookmark-container"></div>
<div id="find-someone"><input id="find-someone-input" placeholder="" data-tooltip=""/></div>
<div class="menu-container" id="history-container"></div>
<div id="clear-history"></div>
<div id="qvitter-notice"><?php print common_config('site', 'qvitternotice'); ?></div><?php
@ -817,7 +818,8 @@ class QvitterAction extends ApiAction
}
#user-footer-inner,
.inline-reply-queetbox,
#popup-faq #faq-container p.indent {
#popup-faq #faq-container p.indent,
#find-someone {
background-color:/*LIGHTERBACKGROUNDCOLORSTART*/rgb(205,230,239)/*LIGHTERBACKGROUNDCOLOREND*/;
}
#user-footer-inner,
@ -831,7 +833,8 @@ class QvitterAction extends ApiAction
.quoted-notice:hover,
.oembed-item:hover,
.stream-item:hover:not(.expanded) .quoted-notice:hover,
.stream-item:hover:not(.expanded) .oembed-item:hover {
.stream-item:hover:not(.expanded) .oembed-item:hover,
#find-someone input:focus {
border-color:/*LIGHTERBORDERCOLORSTART*/rgb(155,206,224)/*LIGHTERBORDERCOLOREND*/;
}
span.inline-reply-caret .caret-inner {

View File

@ -1357,6 +1357,47 @@ body.rtl #footer-spinner-container {
top: 9px;
width: 12px;
}
#find-someone {
border: 1px solid rgba(0, 0, 0, 0.1);
text-shadow: 0 1px 0 #FFFFFF;
background-clip: padding-box;
border-radius: 6px;
line-height: 16px;
margin-bottom: 10px;
overflow:hidden;
position: relative;
padding-top: 10px;
padding-right: 12px;
padding-bottom: 10px;
padding-left: 12px;
background-color: #F9F9F9;
}
#find-someone input {
padding: 6px 8px 5px 8px;
position: relative;
border-radius: 3px;
border: 1px solid #ccc;
width: 248px;
font-size: 13px;
color:#333;
line-height: 18px;
background-color: #fff;
margin:0;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(255, 255, 255, 0.075);
outline-color: #aaa;
display: block;
outline: none;
}
#find-someone input[disabled="disabled"] {
background-color: #eee;
color:#aaa;
}
#bookmark-container a:hover .chev-right {
background-position:-18px -508px;
}
@ -4096,6 +4137,27 @@ div.nav-session {
width: 588px;
}
.profile-card.local-user > .ostatus-link,
.profile-card.local-user .username .screen-name-with-server,
.profile-card.remote-user .username .screen-name,
.profile-card.remote-user ul.stats {
display:none;
}
.profile-card .remote-user-info {
background-color: pink;
color: #333;
text-shadow: none;
border: 10px solid #fff;
padding: 10px;
}
.profile-card .remote-user-info a {
text-decoration: underline;
color:#333;
}
.hover-card .profile-card .remote-user-info {
display:none;
}
.hover-card .profile-card {
width:290px;
margin-bottom:0;

View File

@ -394,6 +394,18 @@ function buildProfileCard(data) {
if(isUserMuted(data.id)) {
is_muted = ' user-muted';
}
// local or remote user?
var local_or_remote = '';
var remote_user_info = '';
var serverUrl = guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(data.statusnet_profile_url, data.screen_name);
data.screenNameWithServer = '@' + data.screen_name + '@' + serverUrl;
if(data.is_local !== true) {
remote_user_info = '<div class="remote-user-info">' + window.sL.thisIsARemoteUser.replace('{remote-profile-url}',data.statusnet_profile_url) + '</div>'
local_or_remote = ' remote-user';
}
else {
local_or_remote = ' local-user';
}
var followButton = '';
@ -420,8 +432,9 @@ function buildProfileCard(data) {
// full card html
var profileCardHtml = '\
<div class="profile-card' + is_me + logged_in + is_muted + '">\
<div class="profile-card' + is_me + logged_in + is_muted + local_or_remote + '">\
<script class="profile-json" type="application/json">' + JSON.stringify(data) + '</script>\
<a href="' + data.statusnet_profile_url + '" class="ostatus-link" data-tooltip="' + window.sL.goToTheUsersRemoteProfile + '" donthijack></a>\
<div class="profile-header-inner' + is_silenced + is_sandboxed + '" style="' + coverPhotoHtml + '" data-user-id="' + data.id + '" data-screen-name="' + data.screen_name + '">\
<div class="profile-header-inner-overlay"></div>\
<a class="profile-picture" href="' + data.profile_image_url_original + '">\
@ -432,6 +445,7 @@ function buildProfileCard(data) {
<span class="silenced-flag" data-tooltip="' + window.sL.silencedStreamDescription + '">' + window.sL.silenced + '</span>\
<span class="sandboxed-flag" data-tooltip="' + window.sL.sandboxedStreamDescription + '">' + window.sL.sandboxed + '</span>\
<h2 class="username">\
<span class="screen-name-with-server" data-user-id="' + data.id + '">' + data.screenNameWithServer + '</span>\
<span class="screen-name" data-user-id="' + data.id + '">@' + data.screen_name + '</span>\
' + follows_you + '\
</h2>\
@ -446,6 +460,7 @@ function buildProfileCard(data) {
</div>\
</div>\
<div class="profile-banner-footer">\
' + remote_user_info + '\
<ul class="stats">\
<li class="tweet-num"><a href="' + data.statusnet_profile_url + '" class="tweet-stats">' + window.sL.notices + '<strong>' + data.statuses_count + '</strong></a></li>\
<li class="following-num"><a href="' + data.statusnet_profile_url + '/subscriptions" class="following-stats">' + window.sL.following + '<strong>' + data.friends_count + '</strong></a></li>\
@ -564,7 +579,7 @@ function buildExternalProfileCard(data) {
<span class="sandboxed-flag" data-tooltip="' + window.sL.sandboxedStreamDescription + '">' + window.sL.sandboxed + '</span>\
<h2 class="username">\
<span class="screen-name">' + data.screenNameWithServer + '</span>\
<span class="ostatus-link" data-tooltip="' + window.sL.goToTheUsersRemoteProfile + '">' + window.sL.goToTheUsersRemoteProfile + '</span>\
<span class="ostatus-link" data-tooltip="' + window.sL.goToTheUsersRemoteProfile + '" donthijack>' + window.sL.goToTheUsersRemoteProfile + '</span>\
' + follows_you + '\
</h2>\
</a>\
@ -945,6 +960,13 @@ function setNewCurrentStream(streamObject,setLocation,fallbackId,actionOnSuccess
}
}
// local for local users requested by id, we want to go to the nickname-url instead
else if(streamObject.name == 'profile by id' && userArray && userArray.is_local === true) {
removeHistoryContainerItemByHref(window.siteInstanceURL + 'user/' + userArray.id);
setNewCurrentStream(pathToStreamRouter('/' + userArray.screen_name),true,false,actionOnSuccess);
}
// getting stream failed, and we don't have a fallback id
else if(queet_data === false) {
@ -1017,6 +1039,19 @@ function setNewCurrentStream(streamObject,setLocation,fallbackId,actionOnSuccess
// profile card from user array
if(userArray) {
addProfileCardToDOM(buildProfileCard(userArray));
// set remote users username in the browsing history container
// (because stream-router can't know username from the URL, that only have id:s)
if(userArray.is_local !== true) {
var serverUrl = guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(userArray.statusnet_profile_url, userArray.screen_name);
var screenNameWithServer = '@' + userArray.screen_name + '@' + serverUrl;
updateHistoryContainerItemByHref(window.siteInstanceURL + 'user/' + userArray.id, screenNameWithServer);
updateHistoryContainerItemByHref(userArray.statusnet_profile_url, screenNameWithServer);
}
// if we for some reason have visited a local user's profile by id, adjust the history container
else {
updateHistoryContainerItemByHref(window.siteInstanceURL + 'user/' + userArray.id, userArray.screen_name);
}
}
// remove any trailing profile cards
else {
@ -1781,7 +1816,7 @@ function addToFeed(feed, after, extraClasses) {
// external
var ostatusHtml = '';
if(obj.from_profile.is_local === false) {
ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.from_profile.statusnet_profile_url + '"></a>';
ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.from_profile.statusnet_profile_url + '" donthijack></a>';
}
if(obj.ntype == 'like') {
@ -2027,7 +2062,7 @@ function buildUserStreamItemHtml(obj) {
// 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>';
ostatusHtml = '<a target="_blank" title="' + window.sL.goToTheUsersRemoteProfile + '" class="ostatus-link" href="' + obj.statusnet_profile_url + '" donthijack></a>';
}
// rtl or not
@ -2296,7 +2331,7 @@ function buildQueetHtml(obj, idInStream, extraClasses, requeeted_by, isConversat
// external
var ostatusHtml = '';
if(obj.user.is_local === false) {
ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.external_url + '"></a>';
ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.external_url + '" donthijack></a>';
var qSource = '<a href="' + obj.external_url + '">' + getHost(obj.external_url) + '</a>';
}
else {

View File

@ -893,6 +893,7 @@ function cacheSyntaxHighlightingGroups() {
window.userArrayCache = new Object();
window.convertUriToUserArrayCacheKey = new Object();
window.convertStatusnetProfileUrlToUserArrayCacheKey = new Object();
window.convertLocalIdToUserArrayCacheKey = new Object();
function userArrayCacheStore(data) {
@ -949,6 +950,7 @@ function userArrayCacheStore(data) {
window.userArrayCache[key].modified = Date.now();
// easy conversion between URI and statusnet_profile_url and the key we're using in window.userArrayCache
window.convertLocalIdToUserArrayCacheKey[parseInt(dataToStore.local.id, 10)] = key;
window.convertUriToUserArrayCacheKey[dataToStore.local.ostatus_uri] = key;
window.convertStatusnetProfileUrlToUserArrayCacheKey[dataToStore.local.statusnet_profile_url] = key;
}
@ -963,6 +965,7 @@ function userArrayCacheStore(data) {
window.userArrayCache[key].local = dataToStore.local;
// easy conversion between URI and statusnet_profile_url and the key we're using in window.userArrayCache
window.convertLocalIdToUserArrayCacheKey[dataToStore.local.id] = key;
window.convertUriToUserArrayCacheKey[dataToStore.local.ostatus_uri] = key;
window.convertStatusnetProfileUrlToUserArrayCacheKey[dataToStore.local.statusnet_profile_url] = key;
}
@ -993,9 +996,13 @@ function userArrayCacheGetByLocalNickname(localNickname) {
}
function userArrayCacheGetByProfileUrlAndNickname(profileUrl, nickname) {
var possibleLocalId = false;
if(nickname.substring(0,1) == '@') {
nickname = nickname.substring(1);
}
if(profileUrl.indexOf(window.siteInstanceURL + 'user/') == 0) {
possibleLocalId = parseInt(profileUrl.substring(window.siteInstanceURL.length+5),10);
}
// the url might match a known profile uri
if(typeof window.convertUriToUserArrayCacheKey[profileUrl] != 'undefined') {
if(typeof window.userArrayCache[window.convertUriToUserArrayCacheKey[profileUrl]] != 'undefined') {
@ -1008,6 +1015,12 @@ function userArrayCacheGetByProfileUrlAndNickname(profileUrl, nickname) {
return window.userArrayCache[window.convertStatusnetProfileUrlToUserArrayCacheKey[profileUrl]];
}
}
// or the local id might match a known id
else if(typeof window.convertLocalIdToUserArrayCacheKey[possibleLocalId] != 'undefined') {
if(typeof window.userArrayCache[window.convertLocalIdToUserArrayCacheKey[possibleLocalId]] != 'undefined') {
return window.userArrayCache[window.convertLocalIdToUserArrayCacheKey[possibleLocalId]];
}
}
// or we try to guess the instance url, and see if we have a match in our cache
else if(typeof window.userArrayCache[guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(profileUrl, nickname) + '/' + nickname] != 'undefined') {
return window.userArrayCache[guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(profileUrl, nickname) + '/' + nickname];
@ -1244,7 +1257,7 @@ function updateUserDataInStream() {
// profile urls
// try to find the last account group with this id, if the statusnet_profile_url seems to
// be changed we replace it wherever we can find it, even in list urls etc that starts with statusnet_profile_url
if($('a.account-group[data-user-id="' + userArray.local.id + '"]').last().attr('href') != userArray.local.statusnet_profile_url) {
if(userArray.local.is_local === true && $('a.account-group[data-user-id="' + userArray.local.id + '"]').last().attr('href') != userArray.local.statusnet_profile_url) {
var oldStatusnetProfileURL = $('a.account-group[data-user-id="' + userArray.local.id + '"]').last().attr('href');
// all links with the exact statusnet_profile_url
$.each($('[href="' + oldStatusnetProfileURL + '"]'),function(){
@ -2236,6 +2249,29 @@ function appendAllBookmarks(bookmarkContainer) {
}
/* ·
·
· Change the header of an item in the history container by href attribute
·
· · · · · · · · · · · · · */
function updateHistoryContainerItemByHref(href, streamHeader) {
$('#history-container .stream-selection[href="' + href + '"]').html(streamHeader + '<i class="chev-right" data-tooltip="' + window.sL.tooltipBookmarkStream + '"></i>');
updateHistoryLocalStorage();
}
/* ·
·
· Remove items in the history container by href attribute
·
· · · · · · · · · · · · · */
function removeHistoryContainerItemByHref(href) {
$('#history-container .stream-selection[href="' + href + '"]').remove();
updateHistoryLocalStorage();
}
/* ·
·
· Updates the browsing history local storage

View File

@ -486,6 +486,96 @@ $('body').on('mouseleave','.hover-card', function(e) {
});
/* ·
·
· find someone tool
·
· · · · · · · · · · · · · */
$('#find-someone input').keyup(function(e){
var thisFindSomeoneInput = $(this);
if(e.keyCode==13 && !thisFindSomeoneInput.hasClass('submitted')) {
thisFindSomeoneInput.addClass('submitted');
thisFindSomeoneInput.attr('disabled','disabled');
var val = $.trim(thisFindSomeoneInput.val());
// if this is a simple text input, we assume it is a local user
if(val.length>1 && /^(@)?[a-zA-Z0-9]+$/.test(val)) {
if(val.indexOf('@') == 0) {
val = val.replace('@','');
}
setNewCurrentStream(pathToStreamRouter(val),true,false,function(){
foundSomeone(thisFindSomeoneInput);
});
}
// urls might be a remote user
else if(val.length==0 || /^(ftp|http|https):\/\/[^ "]+$/.test(val)) {
getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(val),function(data){
if(data && data.local !== null) {
setNewCurrentStream(pathToStreamRouter('user/' + data.local.id),true,false,function(){
foundSomeone(thisFindSomeoneInput);
});
}
else {
cantFindSomeone(thisFindSomeoneInput);
}
});
}
// @user@instance.domain style syntax
else if(val.length==0 || /^(@)?[a-zA-Z0-9]+@[a-zA-Z0-9\-]+(\.)(.*)+$/.test(val)) {
if(val.indexOf('@') == 0) {
val = val.substring(1)
}
var username = val.substring(0, val.indexOf('@'));
var domain = val.substring(val.indexOf('@')+1);
var urlToTry = 'https://' + domain + '/' + username;
var secondUrlToTry = 'http://' + domain + '/' + username;
getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(urlToTry),function(data){
if(data && data.local !== null) {
setNewCurrentStream(pathToStreamRouter('user/' + data.local.id),true,false,function(){
foundSomeone(thisFindSomeoneInput);
});
}
else {
getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(secondUrlToTry),function(data){
if(data && data.local !== null) {
setNewCurrentStream(pathToStreamRouter('user/' + data.local.id),true,false,function(){
foundSomeone(thisFindSomeoneInput);
});
}
else {
cantFindSomeone(thisFindSomeoneInput);
}
});
}
});
}
else {
cantFindSomeone(thisFindSomeoneInput);
}
}
});
function cantFindSomeone(thisFindSomeoneInput) {
thisFindSomeoneInput.css('background-color','pink');
thisFindSomeoneInput.effect('shake',{distance:5,times:3,duration:700},function(){
thisFindSomeoneInput.animate({backgroundColor:'#fff'},1000);
thisFindSomeoneInput.removeAttr('disabled');
thisFindSomeoneInput.removeClass('submitted');
thisFindSomeoneInput.focus();
});
}
function foundSomeone(thisFindSomeoneInput) {
thisFindSomeoneInput.removeAttr('disabled');
thisFindSomeoneInput.val('');
thisFindSomeoneInput.blur();
thisFindSomeoneInput.removeClass('submitted');
}
/* ·
@ -970,6 +1060,9 @@ function proceedToSetLanguageAndLogin(data){
$('#clear-history').html(window.sL.clearHistory);
$('#user-screen-name, #user-avatar, #user-name').attr('data-tooltip', window.sL.viewMyProfilePage);
$('#top-menu-profile-link-view-profile').html(window.sL.viewMyProfilePage);
$('#find-someone input').attr('placeholder',window.sL.findSomeone);
$('#find-someone input').attr('data-tooltip',window.sL.findSomeoneTooltip);
// show site body now
$('#user-container').css('display','block');
@ -1841,42 +1934,34 @@ $('body').on('click','a', function(e) {
}
// hijack link if we find a matching link that qvitter can handle
else {
var streamObject = URLtoStreamRouter($(this).attr('href'));
var hrefAttr = $(this).attr('href');
// this might be a remote profile that we want to reroute to a local instance/user/id url, let's check our cache
if(typeof window.convertStatusnetProfileUrlToUserArrayCacheKey[hrefAttr] != 'undefined') {
if(typeof window.userArrayCache[window.convertStatusnetProfileUrlToUserArrayCacheKey[hrefAttr]] != 'undefined') {
var cachedUserArray = window.userArrayCache[window.convertStatusnetProfileUrlToUserArrayCacheKey[hrefAttr]];
if(cachedUserArray.local.is_local === false) {
hrefAttr = window.siteInstanceURL + 'user/' + cachedUserArray.local.id;
}
}
}
else if(typeof window.convertUriToUserArrayCacheKey[hrefAttr] != 'undefined') {
if(typeof window.userArrayCache[window.convertUriToUserArrayCacheKey[hrefAttr]] != 'undefined') {
var cachedUserArray = window.userArrayCache[window.convertUriToUserArrayCacheKey[hrefAttr]];
if(cachedUserArray.local.is_local === false) {
hrefAttr = window.siteInstanceURL + 'user/' + cachedUserArray.local.id;
}
}
}
var streamObject = URLtoStreamRouter(hrefAttr);
if(streamObject && streamObject.stream) {
e.preventDefault();
// if this is a user/{id} type link we want to find the nickname before setting a new stream
// the main reason is that we want to update the browsers location bar and the .stream-selecton
// links as fast as we can. we rather not wait for the server response
if(streamObject.name == 'profile by id') {
// pathToStreamRouter() might have found a cached nickname
if(streamObject.nickname) {
setNewCurrentStream(pathToStreamRouter(streamObject.nickname),true,streamObject.id);
}
// otherwise we might follow the user and thereby already know its nickname
else if (typeof window.following != 'undefined' && typeof window.following[streamObject.id] != 'undefined') {
setNewCurrentStream(pathToStreamRouter(window.following[streamObject.id].username),true,streamObject.id);
}
// if the text() of the clicked element looks like a user nickname, use that (but send id to setNewCurrentStream() in case this is bad data)
else if(/^@[a-zA-Z0-9]+$/.test($(e.target).text()) || /^[a-zA-Z0-9]+$/.test($(e.target).text())) {
var nickname = $(e.target).text();
if(nickname.indexOf('@') == 0) {
nickname = nickname.substring(1); // remove any starting @
}
setNewCurrentStream(pathToStreamRouter(nickname),true,streamObject.id);
}
// if we can't figure out or guess a nickname, query the server for it
else {
getNicknameByUserIdFromAPI(streamObject.id,function(nickname) {
if(nickname) {
setNewCurrentStream(pathToStreamRouter(nickname),true,false);
}
else {
alert('user not found');
}
});
}
// if this is a user/{id} type link but we know the nickname already
if(streamObject.name == 'profile by id' && streamObject.nickname !== false) {
setNewCurrentStream(pathToStreamRouter(streamObject.nickname),true,streamObject.id);
}
// same with group/{id}/id links
else if(streamObject.name == 'group notice stream by id') {

View File

@ -57,7 +57,14 @@ window.pluginStreamObjects = [];
· · · · · · · · · */
function setUrlFromStream(streamObject) {
history.pushState({strm:streamObject.path},'','/' + streamObject.path);
// if we know the nickname for profiles, go with that instead of the id
if(streamObject.name == 'profile by id' && streamObject.nickname !== false) {
history.pushState({strm:streamObject.nickname},'','/' + streamObject.nickname);
}
else {
history.pushState({strm:streamObject.path},'','/' + streamObject.path);
}
}
@ -387,7 +394,7 @@ function pathToStreamRouter(path) {
streamObject.streamSubHeader = window.sL.notices + '<div class="queet-streams">/ <a class="queet-stream mentions" href="' + window.siteInstanceURL + streamObject.nickname + '/replies">' + window.sL.mentions + '</a> / <a class="queet-stream favorites" href="' + window.siteInstanceURL + streamObject.nickname + '/favorites">' + window.sL.favoritesNoun +'</a></div>';
}
streamObject.id = pathSplit[1];
streamObject.stream = 'statuses/user_timeline.json?id=' + streamObject.id + '&withuserarray=1';
streamObject.stream = 'qvitter/statuses/user_timeline.json?id=' + streamObject.id + '&withuserarray=1';
return streamObject;
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Has ocultat aquests comptes de la teva línia temporal. Seguiràs rebent notificacions d'aquests comptes tret que seleccions &quot;Amagar notificacions d'usuaris silenciats&quot; des del menú amb forma de roda dentada a la pàgina de notificacions.",
"profileAndSettings":"Perfil i ajustos",
"profileSettings":"Ajustos del perfil",
"thisIsABookmark":"Això és un marcador va crear en l'interfície Clàssic"
"thisIsABookmark":"Això és un marcador va crear en l'interfície Clàssic",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Du hast diese Nutzer in Deiner Timeline ausgeblendet. Benachrichtigungen von diesen Nutzern werden werden weiterhin angezeigt. Um sie ebenfalls zu verbergen, wähle im Zahnradmenu der Benachrichtigungsseite die Option &quot;Benachrichtigungen von ausgeblendeten Benutzern verbergen&quot;.",
"profileAndSettings":"Profil und Einstellungen",
"profileSettings":"Profileinstellungen",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still receive notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -196,5 +196,9 @@
"userMuted":"Muted accounts",
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings"
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -196,5 +196,8 @@
"mutedStreamDescription":"Has ocultado estas cuentas de tu línea temporal. Seguirás recibiendo notificaciones de dichas cuentas a menos que selecciones &quot;Ocultar notificaciones de usuarios silencioados&quot; desde el menú con forma de rueda dentada en la página de notificaciones.",
"profileAndSettings":"Perfil y ajustes",
"profileSettings":"Ajustes del perfil",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Haz ocultado esas cuentas de tu línea temporal. Igualmente recibirás notificaciones de esas cuentas, a menos que selecciones &quot;Hide notifications from muted users&quot; desde el menú de la rueda dentada en la página de notificaciones.",
"profileAndSettings":"Perfiles y configuraciones",
"profileSettings":"Perfil y configuración",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Has ocultado estas cuentas de tu línea temporal. Seguirás recibiendo notificaciones de dichas cuentas a menos que selecciones &quot;Ocultar notificaciones de usuarios silencioados&quot; desde el menú con forma de rueda dentada en la página de notificaciones.",
"profileAndSettings":"Perfil y ajustes",
"profileSettings":"Ajustes del perfil",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -198,5 +198,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Ocultaches estas contas da túa liña de tempo. Continuarás a recibir notificacións destas contas, a non ser que selecciones &quot;Agochar notificacións de usuarias acaladas&quot; na roda dentada do menú da páxina de notificacións.",
"profileAndSettings":"Perfil e axustes",
"profileSettings":"Axustes do perfil",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"הסתרת את חשבונות אלה מתוך ציר הזמן שלך. You will still recieve notifications from these accounts, unless you select &quot;הסתר התרעות ממשתמשים מוסתרים&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"פרופיל והגדרות",
"profileSettings":"הגדרות פרופיל",
"thisIsABookmark":"זוהי סימנייה שנוצרה בתוך הממשק הקלאסי"
"thisIsABookmark":"זוהי סימנייה שנוצרה בתוך הממשק הקלאסי",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -194,5 +194,8 @@
"mutedStreamDescription":"Դուք թացրել եք այս օգտատերերին Ձեր հոսքից։ Դուք կշարունակեք ստանալ այս օգտատերերից ծանուցումներ, եթե չընտրեք &quot;Թաքցնել արհամարհվող օգտատերերի ծանուցումները &quot; Ծանուցումների էջի մենյուի կարգավորումներում",
"profileAndSettings":"Էջ և կարգավորումներ",
"profileSettings":"Էջի կարգավորումներ",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Tu ha celate iste contos de tu chronologia. Tu recipera totevia notificationes de iste contos, excepte si tu selige &quot;Celar notificationes de usatores ignorate&quot; ab le menu de rota dentate sur le pagina de notificationes.",
"profileAndSettings":"Profilo e configuration",
"profileSettings":"Configuration del profilo",
"thisIsABookmark":"Iste es un marcapaginas create in le interfacie Classic"
"thisIsABookmark":"Iste es un marcapaginas create in le interfacie Classic",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Vu celis ca konti de vua tempolineo. Vu recevos ankore notifiki de ca konti, ecepte se vu selektus &quot;Celar notifiki de muta uzeri&quot; per la menuo dentorota en la pagino di notifiki.",
"profileAndSettings":"Profilo ed ajusti",
"profileSettings":"Ajusti di profilo",
"thisIsABookmark":"Ca esas markorubando kreita en la interfacio klasika"
"thisIsABookmark":"Ca esas markorubando kreita en la interfacio klasika",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Hai nascosto questi account dalla tua bacheca. Riceverai comunque le loro notifiche, per disabilitarle seleziona &quot;Nascondi notifiche dagli account senza voce&quot; dal menu delle impostazioni sulla pagina relativa alle notifiche.",
"profileAndSettings":"Profilo e impostazioni",
"profileSettings":"Impostazioni del profilo",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"あなたのタイムラインから、選択されたユーザーを隠しました。あなたがお知らせページの歯車のメニューにある&quot;ミュートしたユーザーからのお知らせを隠す&quot;を選択しなかったユーザー以外からは、まだお知らせを受け取ります。",
"profileAndSettings":"プロフィールと設定",
"profileSettings":"プロフィール設定",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Du har skjul disse kontoene fra din tidslinje. Du vil alikevel motta notifikasjoner fra disse kontoene, hvis da du ikke velger &quot;Skjul notifikasjoner fra forstummede brukere&quot; fra tannhjul menyen på notifikasjons siden.",
"profileAndSettings":"Profiler og innstillinger",
"profileSettings":"Profil innstillinger",
"thisIsABookmark":"Dette er et bokmerke som ble laget i det klassiske grensesnittet"
"thisIsABookmark":"Dette er et bokmerke som ble laget i det klassiske grensesnittet",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Je negeert deze gebruikers in je tijdlijn. Je krijgt wel nog mededelingen van deze gebruikers, tenzij je &quot;Geen mededelingen van genegeerde gebruikers.&quot; kiest van het instellingen icoon op de mededelingen pagina.",
"profileAndSettings":"Profiel en instellingen",
"profileSettings":"Profiel instellingen",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Ukryłeś te konta na swojej osi czasu. Nadal będziesz otrzymywać powiadomienia od tych użytkowników, chyba że wybierzesz opcję &quot;Ukryj powiadomienia od wyciszonych użytkowników&quot;, znajdującą się w rozwijanym menu na stronie powiadomień.",
"profileAndSettings":"Profil i ustawienia",
"profileSettings":"Ustawienia profilu",
"thisIsABookmark":"To jest zakładka stworzona w klasycznym interfejsie"
}
"thisIsABookmark":"To jest zakładka stworzona w klasycznym interfejsie",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Você escondeu estas contas da sua linha do tempo. Irá continuar a receber notificações delas, a não ser que selecione a opção \"Esconder notificações de utilizadores calados\" a partir do menu da roldana na página de notificações.",
"profileAndSettings":"Perfil e Definições",
"profileSettings":"Definições do Perfil",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Você escondeu estas contas de sua linha do tempo. Você ainda receberá notificações destas contas, a menos que você selecione &quot;Esconder notificações de usuários calados&quot; no menu de engrenagem na página de notificações.",
"profileAndSettings":"Perfil e ajustes",
"profileSettings":"Ajustes de perfil",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -195,5 +195,8 @@
"mutedStreamDescription":"Вы скрыли этих пользователей из вашей ленты. Вы будете продолжать получать уведомления от этих пользователей, если не выберете &quot;Скрыть уведомления от игнорируемых пользователей&quot; в меню с шестерёнкой на странице уведомлений",
"profileAndSettings":"Профиль и настройки",
"profileSettings":"Настройки профиля",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Këto llogari i keni fshehur prej rrjedhës suaj kohore. Do të merrni, prapëseprapë, njoftime nga këto llogari, veç në përzgjedhshi &quot;Fshihi njoftimet prej përdorues me zë të hequr&quot;, te menuja me ikonën e ingranazhit te faqja e njoftimeve.",
"profileAndSettings":"Profil dhe rregullime",
"profileSettings":"Rregullime profili",
"thisIsABookmark":"Ky është një faqerojtës i krijuar nën ndërfaqen Klasike"
"thisIsABookmark":"Ky është një faqerojtës i krijuar nën ndërfaqen Klasike",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Du har dolt dessa användare från dina flöden. Du kommer fortfarande få notiser från dem, om du inte väljer &quot;Dölj notiser från användare som du ignorerar&quot; från kugghjulsmenyn på notissidan.",
"profileAndSettings":"Profil och inställningar",
"profileSettings":"Profilinställningar",
"thisIsABookmark":"Detta är ett bokmärke som skapats i GNU socials standardgränssnitt"
"thisIsABookmark":"Detta är ett bokmärke som skapats i GNU socials standardgränssnitt",
"thisIsARemoteUser":"<strong>Obs!</strong> Detta är en extern användare. Den här sidan visar bara en cachad version av deras profil. Gå till <a href=\"{remote-profile-url}\" donthijack>använderas profil på deras server</a> för se hela deras profil.",
"findSomeone":"Hitta en användare",
"findSomeoneTooltip":"Skriv in ett användarnamn eller en url till en profil, t ex @anvandarnamn eller https://extern.server/anvandarnamn"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -197,5 +197,8 @@
"mutedStreamDescription":"Ви сховали ці облікови записи з вашей стрічкі. Ви будете одержувати оголошення від цих облікових записів, доки Ви не виберіте &quot;Сховати оголошення від корістувачей котрих я ігнорую&quot; в меню з шестернею на сторінкі оголошень.",
"profileAndSettings":"Профіль та налаштування",
"profileSettings":"Налаштування профіля",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -196,5 +196,8 @@
"mutedStreamDescription":"你已从你的时间线中隐藏了这些用户。但你仍将收到这些用户的通知,除非你在设置页的齿轮菜单中选择“隐藏被忽略用户的通知”。",
"profileAndSettings":"个人档案及设置",
"profileSettings":"个人设置",
"thisIsABookmark":"该书签系在旧版视图下创建。"
"thisIsABookmark":"该书签系在旧版视图下创建。",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}

View File

@ -196,5 +196,8 @@
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select &quot;Hide notifications from muted users&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"Profile and settings",
"profileSettings":"Profile settings",
"thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsABookmark":"This is a bookmark created in the Classic interface",
"thisIsARemoteUser":"<strong>Attention!</strong> This is a remote user. This page is only a cached copy of their profile, and includes only data known to this GNU social instance. Go to the <a href=\"{remote-profile-url}\" donthijack>user's profile on their server</a> to view their full profile.",
"findSomeone":"Find someone",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname"
}