Compare commits

..

33 Commits

Author SHA1 Message Date
Hannes Mannerheim
a36628edc7 Merge branch 'master' of git.gnu.io:h2p/Qvitter 2017-02-05 13:39:49 +01:00
Hannes Mannerheim
d4fa67cc8e merge from git.gnu.io 2016-12-30 13:48:54 +01:00
Hannes Mannerheim
51740e4d49 merge from git.gnu.io 2016-11-21 22:47:25 +01:00
Hannes Mannerheim
d7ab9cd72e Merge branch 'master' of git.gnu.io:h2p/Qvitter 2016-10-31 01:07:06 +01:00
Hannes Mannerheim
e5f22390dc merge from git.gnu.io 2016-03-10 13:53:08 +01:00
Hannes Mannerheim
e9df9b7bdb Merge branch 'master' of git.gnu.io:h2p/Qvitter 2016-03-05 16:54:26 +01:00
Hannes Mannerheim
05825ecc93 from git.gnu.io 2016-03-05 14:51:01 +01:00
Hannes Mannerheim
34b25e032e mute etc 2016-03-04 00:22:25 +01:00
Hannes Mannerheim
e6a8cad494 from git.gnu.io 2016-02-29 16:08:06 +01:00
Hannes Mannerheim
2570877580 update from git.gnu.io 2016-02-25 11:10:55 +01:00
Hannes Mannerheim
8dc071c955 favicons and fixes 2016-02-16 13:38:40 +01:00
Hannes Mannerheim
0e99f04c43 update from git.gnu.io 2016-02-16 11:54:47 +01:00
Hannes Mannerheim
f5acc4a386 german update 2016-02-12 14:56:59 +01:00
Hannes Mannerheim
3ab4b1cdb6 twitter cards and opengraph 2016-02-11 17:49:02 +01:00
Hannes Mannerheim
596b4b8e02 don't flash the no-javascript message while loading 2016-02-11 14:55:20 +01:00
Hannes Mannerheim
45b50d3387 turkish 2016-02-11 14:47:58 +01:00
Hannes Mannerheim
6f6a593984 fixes 2016-02-11 14:30:20 +01:00
Hannes Mannerheim
e1c8080e8f pt-br fixes 2016-02-10 14:18:26 +01:00
Hannes Mannerheim
b3eef26174 finnish finished 2016-02-09 20:22:12 +01:00
Hannes Mannerheim
a855c98834 pt-br fixes 2016-02-09 15:21:13 +01:00
Hannes Mannerheim
3037794b6d pt_br update 2016-02-08 11:13:10 +01:00
Hannes Mannerheim
cc5739918e spanish faq addition by @simsa01@quitter.se 2016-02-08 11:09:02 +01:00
Hannes Mannerheim
23ecdf2a07 nl update 2016-02-08 11:04:13 +01:00
Hannes Mannerheim
182ae843ca no > nb 2016-02-08 11:00:32 +01:00
Hannes Mannerheim
13256d2a66 spanish translation 2016-02-08 10:56:46 +01:00
Hannes Mannerheim
fabdad7dc7 terms addition 2016-02-07 14:37:44 +01:00
Hannes Mannerheim
7df7eb1aeb terms for logged in users 2016-02-07 14:17:37 +01:00
Hannes Mannerheim
2590528d63 xss fix, thx @chc4@quitter.se 2016-02-07 02:23:38 +01:00
Hannes Mannerheim
b4f45b8537 sort twkn by id, since we scroll using max_id 2016-02-04 13:52:16 +01:00
Hannes Mannerheim
077a5a04a2 Updated norwegian translation 2016-02-04 02:06:52 +01:00
Hannes Mannerheim
c01906055e blocking 2016-02-02 16:25:34 +01:00
Hannes Mannerheim
d247c08aeb set api format so client errors work 2016-02-01 18:22:41 +01:00
Hannes Mannerheim
4c0f42984c Updated norwegian translation 2016-01-31 02:22:18 +01:00
53 changed files with 5258 additions and 2257 deletions

View File

@ -131,7 +131,7 @@ class QvitterPlugin extends Plugin {
} }
function onCheckSchema(): bool function onCheckSchema()
{ {
$schema = Schema::get(); $schema = Schema::get();
@ -151,7 +151,7 @@ class QvitterPlugin extends Plugin {
return true; return true;
} }
public function onBeforePluginCheckSchema(): bool public function onBeforePluginCheckSchema()
{ {
QvitterNotification::beforeSchemaUpdate(); QvitterNotification::beforeSchemaUpdate();
return true; return true;
@ -160,10 +160,6 @@ class QvitterPlugin extends Plugin {
// route/reroute urls // route/reroute urls
public function onRouterInitialized($m) 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', $m->connect(':nickname/mutes',
array('action' => 'qvitter', array('action' => 'qvitter',
'nickname' => Nickname::INPUT_FMT)); 'nickname' => Nickname::INPUT_FMT));
@ -375,10 +371,6 @@ class QvitterPlugin extends Plugin {
array('action' => 'shownotice'), array('action' => 'shownotice'),
array('notice' => '[0-9]+'), array('notice' => '[0-9]+'),
'qvitter'); 'qvitter');
URLMapperOverwrite::overwrite_variable($m, 'user/:id',
array('action' => 'userbyid'),
array('id' => '[0-9]+'),
'qvitter');
URLMapperOverwrite::overwrite_variable($m, 'conversation/:id', URLMapperOverwrite::overwrite_variable($m, 'conversation/:id',
array('action' => 'conversation'), array('action' => 'conversation'),
array('id' => '[0-9]+'), array('id' => '[0-9]+'),
@ -405,7 +397,6 @@ class QvitterPlugin extends Plugin {
case 'api/favorites.json': case 'api/favorites.json':
case 'api/statuses/friends_timeline.json': case 'api/statuses/friends_timeline.json':
case 'api/statuses/user_timeline.json': case 'api/statuses/user_timeline.json':
case 'api/qvitter/statuses/user_timeline.json':
// add logged in user's user array // add logged in user's user array
if (common_logged_in() && !isset($_GET['screen_name']) && !isset($_GET['id'])) { if (common_logged_in() && !isset($_GET['screen_name']) && !isset($_GET['id'])) {
@ -418,17 +409,13 @@ class QvitterPlugin extends Plugin {
if(isset($_GET['screen_name'])) { if(isset($_GET['screen_name'])) {
$user = User::getKV('nickname', $_GET['screen_name']); $user = User::getKV('nickname', $_GET['screen_name']);
if($user instanceof User) {
$profile = $user->getProfile();
}
} }
elseif(isset($_GET['id'])) { elseif(isset($_GET['id'])) {
$profile = Profile::getKV('id', $_GET['id']);
$user = User::getKV('id', $_GET['id']); $user = User::getKV('id', $_GET['id']);
} }
if(isset($profile) && $profile instanceof Profile) { if($user instanceof User) {
header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($profile))); header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($user->getProfile())));
} }
} }
break; break;
@ -436,6 +423,16 @@ class QvitterPlugin extends Plugin {
} }
/**
* Remove CSRF cookie on logout
*
*/
function onEndLogout($action) {
common_set_cookie('Qvitter-CSRF', '', 0);
return true;
}
/** /**
* Add script to default ui, to be able to toggle Qvitter with one click * Add script to default ui, to be able to toggle Qvitter with one click
@ -485,7 +482,7 @@ class QvitterPlugin extends Plugin {
* @return boolean hook return * @return boolean hook return
*/ */
function onEndAccountSettingsNav($action): bool function onEndAccountSettingsNav($action)
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
@ -507,7 +504,7 @@ class QvitterPlugin extends Plugin {
* @return boolean hook return * @return boolean hook return
*/ */
function onEndAdminPanelNav($action): bool function onEndAdminPanelNav($action)
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
@ -568,7 +565,7 @@ class QvitterPlugin extends Plugin {
$enclosure_o = $attachment->getEnclosure(); $enclosure_o = $attachment->getEnclosure();
// Oembed // Oembed
if(array_key_exists('Oembed', GNUsocial::getActiveModules())) { if(array_key_exists('Oembed', StatusNet::getActivePlugins())) {
$oembed = File_oembed::getKV('file_id',$attachment->id); $oembed = File_oembed::getKV('file_id',$attachment->id);
if($oembed instanceof File_oembed) { if($oembed instanceof File_oembed) {
$oembed_html = str_replace('<!--//-->','',$oembed->html); // trash left of wordpress' javascript after htmLawed removed the tags $oembed_html = str_replace('<!--//-->','',$oembed->html); // trash left of wordpress' javascript after htmLawed removed the tags
@ -675,8 +672,8 @@ class QvitterPlugin extends Plugin {
// if this attachment has an url this might be a notice url // if this attachment has an url this might be a notice url
if (isset($attachment['url'])) { if (isset($attachment['url'])) {
$noticeurl = common_path('notice/', GNUsocial::isHTTPS()); $noticeurl = common_path('notice/', StatusNet::isHTTPS());
$instanceurl = common_path('', GNUsocial::isHTTPS()); $instanceurl = common_path('', StatusNet::isHTTPS());
// remove protocol for the comparison below // remove protocol for the comparison below
$noticeurl_wo_protocol = preg_replace('(^https?://)', '', $noticeurl); $noticeurl_wo_protocol = preg_replace('(^https?://)', '', $noticeurl);
@ -829,7 +826,7 @@ class QvitterPlugin extends Plugin {
* @return boolean hook return * @return boolean hook return
*/ */
function onTwitterUserArray($profile, &$twitter_user, $scoped): bool function onTwitterUserArray($profile, &$twitter_user, $scoped)
{ {
$twitter_user['cover_photo'] = Profile_prefs::getConfigData($profile, 'qvitter', 'cover_photo'); $twitter_user['cover_photo'] = Profile_prefs::getConfigData($profile, 'qvitter', 'cover_photo');
@ -944,7 +941,7 @@ class QvitterPlugin extends Plugin {
/** /**
* Mark single notification as seen * Mark single notification as seen
*/ */
public static function markNotificationAsSeen($notice_id, $to_profile_id, $ntype) public function markNotificationAsSeen($notice_id, $to_profile_id, $ntype)
{ {
$notification_to_mark_as_seen = QvitterNotification::pkeyGet(array( $notification_to_mark_as_seen = QvitterNotification::pkeyGet(array(
'is_seen' => 0, 'is_seen' => 0,
@ -964,7 +961,7 @@ class QvitterPlugin extends Plugin {
/** /**
* Remove likes in notification table on dislike * Remove likes in notification table on dislike
*/ */
public function onEndDisfavorNotice($profile, $notice): bool public function onEndDisfavorNotice($profile, $notice)
{ {
$notif = new QvitterNotification(); $notif = new QvitterNotification();
$notif->from_profile_id = $profile->id; $notif->from_profile_id = $profile->id;
@ -981,7 +978,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
function onStartNoticeDistribute($notice): bool { function onStartNoticeDistribute($notice) {
assert($notice->id > 0); // since we removed tests below assert($notice->id > 0); // since we removed tests below
@ -1061,7 +1058,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onNoticeDeleteRelated($notice): bool public function onNoticeDeleteRelated($notice)
{ {
$notif = new QvitterNotification(); $notif = new QvitterNotification();
@ -1093,7 +1090,7 @@ class QvitterPlugin extends Plugin {
$user_is_deleted = true; $user_is_deleted = true;
} }
if(!$user_is_deleted && class_exists('GNUsocial') && !array_key_exists('ActivityModeration', GNUsocial::getActiveModules())) { if(!$user_is_deleted && class_exists('StatusNet') && !array_key_exists('ActivityModeration', StatusNet::getActivePlugins())) {
$rendered = sprintf(_m('<a href="%1$s">%2$s</a> deleted notice <a href="%3$s">{{%4$s}}</a>.'), $rendered = sprintf(_m('<a href="%1$s">%2$s</a> deleted notice <a href="%3$s">{{%4$s}}</a>.'),
htmlspecialchars($profile->getUrl()), htmlspecialchars($profile->getUrl()),
htmlspecialchars($profile->getBestName()), htmlspecialchars($profile->getBestName()),
@ -1129,9 +1126,9 @@ class QvitterPlugin extends Plugin {
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onEndHandleFeedEntry($activity): bool { public function onEndHandleFeedEntry($activity) {
if($activity->verb == 'qvitter-delete-notice' && class_exists('GNUsocial') && !array_key_exists('ActivityModeration', GNUsocial::getActiveModules())) { if($activity->verb == 'qvitter-delete-notice' && class_exists('StatusNet') && !array_key_exists('ActivityModeration', StatusNet::getActivePlugins())) {
$deleter_profile_uri = $activity->actor->id; $deleter_profile_uri = $activity->actor->id;
$deleted_notice_uri = $activity->objects[0]->objects[0]->content; $deleted_notice_uri = $activity->objects[0]->objects[0]->content;
@ -1170,7 +1167,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onEndSubscribe($subscriber, $other): bool public function onEndSubscribe($subscriber, $other)
{ {
if(Subscription::exists($subscriber, $other)) { if(Subscription::exists($subscriber, $other)) {
$this->insertNotification($other->id, $subscriber->id, 'follow', 1); $this->insertNotification($other->id, $subscriber->id, 'follow', 1);
@ -1178,7 +1175,7 @@ class QvitterPlugin extends Plugin {
return true; return true;
} }
public function onEndUnsubscribe($subscriber, $other): bool public function onEndUnsubscribe($subscriber, $other)
{ {
if(!Subscription::exists($subscriber, $other)) { if(!Subscription::exists($subscriber, $other)) {
$notif = new QvitterNotification(); $notif = new QvitterNotification();
@ -1196,7 +1193,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onEndLoadDoc($title, &$output): bool public function onEndLoadDoc($title, &$output)
{ {
if($title == 'faq') { if($title == 'faq') {
@ -1221,7 +1218,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onStartPrimaryNav($action): bool public function onStartPrimaryNav($action)
{ {
$action->menuItem(common_local_url('doc', array('title' => 'faq')), $action->menuItem(common_local_url('doc', array('title' => 'faq')),
@ -1241,7 +1238,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onStartUserRegister($profile): bool public function onStartUserRegister($profile)
{ {
if(is_array(self::settings("blocked_ips"))) { if(is_array(self::settings("blocked_ips"))) {
@ -1260,7 +1257,7 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onEndFindMentions($sender, $text, &$mentions): bool { public function onEndFindMentions($sender, $text, &$mentions) {
// get the correct group profiles // get the correct group profiles
if(isset($_POST['post_to_groups'])) { if(isset($_POST['post_to_groups'])) {
@ -1298,7 +1295,25 @@ class QvitterPlugin extends Plugin {
* *
* @return boolean hook flag * @return boolean hook flag
*/ */
public function onEndSetApiUser($user): bool { public function onEndSetApiUser($user) {
// if we're POST:ing and are logged in using a regular session (i.e. not basic auth or oauth)
// check that we have a correct csrf cookie and header, otherwise deny
if(common_logged_in() && $_SERVER['REQUEST_METHOD'] === 'POST') {
if(!isset($_COOKIE['Qvitter-CSRF'])) {
throw new ServerException(_('Error setting user. Missing authorization cookie data. Please logout and login again.'));
}
$csrf_token = sha1(common_config('qvitter', 'appid').session_id());
if($_COOKIE['Qvitter-CSRF'] != $csrf_token) {
throw new ServerException(_('Error setting user. Invalid authorization cookie data. Please logout and login again.'));
}
if(!isset($_SERVER['HTTP_X_QVITTER_CSRF'])) {
throw new ServerException(_('Error setting user. Missing authorization header data. Please logout and login again.'));
}
if($_SERVER['HTTP_X_QVITTER_CSRF'] != $csrf_token) {
throw new ServerException(_('Error setting user. Invalid authorization header data. Please logout and login again.'));
}
}
// cleanup sessions, to allow for simultaneous http-requests, // cleanup sessions, to allow for simultaneous http-requests,
// e.g. if posting a notice takes a very long time // e.g. if posting a notice takes a very long time
@ -1369,7 +1384,7 @@ class QvitterPlugin extends Plugin {
} }
function onPluginVersion(array &$versions): bool function onPluginVersion(array &$versions)
{ {
$versions[] = array('name' => 'Qvitter', $versions[] = array('name' => 'Qvitter',
'version' => '5-alpha', 'version' => '5-alpha',
@ -1417,7 +1432,7 @@ class QvitterPlugin extends Plugin {
} }
} }
if($largest_avatar['size']>0) { if($largest_avatar['size']>0) {
$origurl = common_path('', GNUsocial::isHTTPS()).$largest_avatar['name']; $origurl = common_path('', StatusNet::isHTTPS()).$largest_avatar['name'];
} else { } else {
$origurl = $twitter_user['profile_image_url_profile_size']; $origurl = $twitter_user['profile_image_url_profile_size'];
} }

View File

@ -37,7 +37,6 @@
· · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
require_once INSTALLDIR . '/lib/util/tempfile.php';
if (!defined('GNUSOCIAL')) { if (!defined('GNUSOCIAL')) {
exit(1); exit(1);
@ -94,13 +93,12 @@ class ApiAccountUpdateProfileBannerAction extends ApiAuthAction
$this->img = str_replace(' ', '+', $this->img); $this->img = str_replace(' ', '+', $this->img);
$this->img = base64_decode($this->img, true); $this->img = base64_decode($this->img, true);
$fh = new TemporaryFile('gs-mediaupload'); $fh = tmpfile();
fwrite($fh->getResource(), $this->img); fwrite($fh, $this->img);
unset($this->img); unset($this->img);
fseek($fh, 0);
fflush($fh->getResouce()); $mediafile = MediaFile::fromFilehandle($fh, $this->scoped);
$mediafile = MediaFile::fromFileInfo($fh, $this->scoped);
unset($fh);
} }
// maybe resize // maybe resize

View File

@ -52,17 +52,9 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
$nickname = urldecode($this->arg('nickname')); $nickname = urldecode($this->arg('nickname'));
$this->profile = new stdClass(); $this->profile = new stdClass();
$this->profile->external = null; $this->profile->external = null;
$this->profile->local = null; $this->profile->local = 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 // we can get urls of two types of urls (1) ://instance/nickname
// (2) ://instance/user/1234 // (2) ://instance/user/1234
// //
@ -105,14 +97,10 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
} }
// case (1) // case (1)
if(!isset($local_profile)) { $local_profile = Profile::getKV('profileurl',$profileurl);
$local_profile = Profile::getKV('profileurl',$profileurl);
}
if($local_profile instanceof Profile) { if($local_profile instanceof Profile) {
$this->profile->local = $this->twitterUserArray($local_profile);
// if profile url is not ending with nickname, this is probably a single user instance // if profile url is not ending with nickname, this is probably a single user instance
if(!substr($local_profile->profileurl, -strlen($local_profile->nickname))===$local_profile->nickname) { if(!substr($local_profile->profileurl, -strlen($local_profile->nickname))===$local_profile->nickname) {
$external_instance_url = $local_profile->profileurl; $external_instance_url = $local_profile->profileurl;
@ -129,6 +117,7 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
} }
$this->profile->external = $external_profile; $this->profile->external = $external_profile;
$this->profile->local = $this->twitterUserArray($local_profile);
return true; return true;
} }
@ -149,9 +138,13 @@ class ApiExternalUserShowAction extends ApiPrivateAuthAction
{ {
parent::handle(); parent::handle();
$this->initDocument('json'); if(is_null($this->profile->local) && is_null($this->profile->external)) {
$this->showJsonObjects($this->profile); $this->clientError(_('List not found.'), 404);
$this->endDocument('json'); } else {
$this->initDocument('json');
$this->showJsonObjects($this->profile);
$this->endDocument('json');
}
} }
/** /**

View File

@ -74,7 +74,7 @@ class ApiQvitterMutesAction extends ApiPrivateAuthAction
{ {
parent::handle(); parent::handle();
$this->target = $this->scoped; $this->target = Profile::current();
if(!$this->target instanceof Profile) { if(!$this->target instanceof Profile) {
$this->clientError(_('You have to be logged in to view your mutes.'), 403); $this->clientError(_('You have to be logged in to view your mutes.'), 403);

View File

@ -74,8 +74,8 @@ class ApiQvitterOembedNoticeAction extends ApiAction
{ {
parent::handle(); parent::handle();
$noticeurl = common_path('notice/', GNUsocial::isHTTPS()); $noticeurl = common_path('notice/', StatusNet::isHTTPS());
$instanceurl = common_path('', GNUsocial::isHTTPS()); $instanceurl = common_path('', StatusNet::isHTTPS());
// remove protocol for the comparison below // remove protocol for the comparison below
$noticeurl_wo_protocol = preg_replace('(^https?://)', '', $noticeurl); $noticeurl_wo_protocol = preg_replace('(^https?://)', '', $noticeurl);

View File

@ -1,181 +0,0 @@
<?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

@ -37,7 +37,6 @@
· · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
require_once INSTALLDIR . '/lib/util/tempfile.php';
if (!defined('GNUSOCIAL')) { if (!defined('GNUSOCIAL')) {
exit(1); exit(1);
@ -91,14 +90,15 @@ class ApiUpdateAvatarAction extends ApiAuthAction
$imagefile = null; $imagefile = null;
// write the image to a temporary file // write the image to a temporary file
$fh = new TemporaryFile('gs-mediaupload'); $fh = tmpfile();
fwrite($fh->getResource(), $this->img); fwrite($fh, $this->img);
unset($this->img); // no need to keep it in memory unset($this->img); // no need to keep it in memory
// seek back to position 0, so we don't read EOF directly
fseek($fh, 0);
// read the temporary file as an uploaded image, will store File object // read the temporary file as an uploaded image, will store File object
fflush($fh->getResource()); $mediafile = MediaFile::fromFilehandle($fh, $this->scoped);
$mediafile = MediaFile::fromFileInfo($fh, $this->scoped); // Deletes the temporary file, if it was needed we stored it in fromFilehandle
// Deletes the temporary file, if it was needed we stored it in fromFileInfo fclose($fh);
unset($fh);
// Now try to get it as an ImageFile since it has some handy functions // Now try to get it as an ImageFile since it has some handy functions
$imagefile = ImageFile::fromFileObject($mediafile->fileRecord); $imagefile = ImageFile::fromFileObject($mediafile->fileRecord);

View File

@ -37,7 +37,6 @@
· · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
require_once INSTALLDIR . '/lib/util/tempfile.php';
if (!defined('GNUSOCIAL')) { if (!defined('GNUSOCIAL')) {
exit(1); exit(1);
@ -92,15 +91,15 @@ class ApiUpdateBackgroundImageAction extends ApiAuthAction
$imagefile = null; $imagefile = null;
// put the image data in a temporary file // put the image data in a temporary file
$fh = new TemporaryFile('gs-mediaupload') $fh = tmpfile();
fwrite($fh->getResource(), $this->img); fwrite($fh, $this->img);
unset($this->img); unset($this->img);
fseek($fh, 0); // go to beginning just to be sure the content is read properly
// We get a MediaFile with a File object using the filehandle // We get a MediaFile with a File object using the filehandle
fflush($fh->getResource()); $mediafile = MediaFile::fromFilehandle($fh, $this->scoped);
$mediafile = MediaFile::fromFileInfo($fh, $this->scoped);
// and can dispose of the temporary filehandle since we're certain we have a File on disk now // and can dispose of the temporary filehandle since we're certain we have a File on disk now
unset($fh); fclose($fh);
$imagefile = ImageFile::fromFileObject($mediafile->fileRecord); $imagefile = ImageFile::fromFileObject($mediafile->fileRecord);
unset($mediafile); // No need to keep the MediaFile around anymore, everything we need is in ImageFile unset($mediafile); // No need to keep the MediaFile around anymore, everything we need is in ImageFile

View File

@ -45,17 +45,12 @@ class QvitterAction extends ApiAction
{ {
parent::prepare($args); parent::prepare($args);
// redirect user/:id for local users to their nickname url // if we're logged in but we have missing or incorrect csrf cookie, logout
if(substr($_SERVER['REQUEST_URI'],0,6) == '/user/') { if(common_logged_in()) {
$user_id = substr($_SERVER['REQUEST_URI'],6); $csrf_token = sha1(common_config('qvitter', 'appid').session_id());
try { if(!isset($_COOKIE['Qvitter-CSRF']) || $_COOKIE['Qvitter-CSRF'] != $csrf_token) {
$user = User::getKV('id', $user_id); header('Location: '.common_path('').'main/logout');
if($user instanceof User) { die();
$nickname = $user->nickname;
common_redirect(common_local_url('showstream',array('nickname'=>$nickname)), 303);
}
} catch (Exception $e) {
//
} }
} }
@ -97,34 +92,16 @@ class QvitterAction extends ApiAction
$sitetitle = common_config('site','name'); $sitetitle = common_config('site','name');
$siterootdomain = common_config('site','server'); $siterootdomain = common_config('site','server');
$qvitterpath = Plugin::staticPath('Qvitter', ''); $qvitterpath = Plugin::staticPath('Qvitter', '');
$apiroot = common_path('api/', GNUsocial::isHTTPS()); $apiroot = common_path('api/', StatusNet::isHTTPS());
$instanceurl = common_path('', GNUsocial::isHTTPS()); $attachmentroot = common_path('attachment/', StatusNet::isHTTPS());
$favicon_path = QvitterPlugin::settings("favicon_path"); $instanceurl = common_path('', StatusNet::isHTTPS());
$attachmentconfig=common_config('attachments'); $favicon_path = QvitterPlugin::settings("favicon_path");
if(GNUsocial::isHTTPS() && $attachmentconfig['sslserver']){
$attachmentroot ='https://'.$attachmentconfig['sslserver'].$attachmentconfig['path'];
} elseif(!GNUsocial::isHTTPS() && $attachmentconfig['server']) {
$attachmentroot ='http://'.$attachmentconfig['server'].$attachmentconfig['path'];
} else {
$attachmentroot = $instanceurl.$attachmentconfig['path'];
}
$avatarconfig=common_config('avatar');
if($avatarconfig['server']) {
if(GNUsocial::isHTTPS() ){
$avatarroot ='https://'.$avatarconfig['server'].$avatarconfig['path'];
} else {
$avatarroot ='http://'.$avatarconfig['server'].$avatarconfig['path'];
}
} else {
$avatarroot = $instanceurl.$avatarconfig['path'];
}
// user's browser's language setting
// user's browser's language setting $user_browser_language = 'en'; // use english if we can't find the browser language
$user_browser_language = 'en'; // use english if we can't find the browser language if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $user_browser_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$user_browser_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); }
}
common_set_returnto(''); // forget this common_set_returnto(''); // forget this
@ -206,7 +183,7 @@ class QvitterAction extends ApiAction
} }
// maybe openid // maybe openid
if (array_key_exists('OpenID', GNUsocial::getActiveModules())) { if (array_key_exists('OpenID', StatusNet::getActivePlugins())) {
print ' <link rel="openid2.provider" href="'.common_local_url('openidserver').'"/>'."\n"; print ' <link rel="openid2.provider" href="'.common_local_url('openidserver').'"/>'."\n";
print ' <link rel="openid2.local_id" href="'.$user->getProfile()->profileurl.'"/>'."\n"; print ' <link rel="openid2.local_id" href="'.$user->getProfile()->profileurl.'"/>'."\n";
print ' <link rel="openid2.server" href="'.common_local_url('openidserver').'"/>'."\n"; print ' <link rel="openid2.server" href="'.common_local_url('openidserver').'"/>'."\n";
@ -246,7 +223,7 @@ class QvitterAction extends ApiAction
// oembed discovery for local notices, and twitter cards // oembed discovery for local notices, and twitter cards
if(substr($_SERVER['REQUEST_URI'],0,8) == '/notice/' if(substr($_SERVER['REQUEST_URI'],0,8) == '/notice/'
&& $this->arg('notice') && $this->arg('notice')
&& array_key_exists('Oembed', GNUsocial::getActiveModules())) { && array_key_exists('Oembed', StatusNet::getActivePlugins())) {
$notice = Notice::getKV('id', $this->arg('notice')); $notice = Notice::getKV('id', $this->arg('notice'));
if($notice instanceof Notice) { if($notice instanceof Notice) {
@ -312,8 +289,10 @@ class QvitterAction extends ApiAction
} }
} }
?> ?>
<script> <script>
/* /*
@licstart The following is the entire license notice for the @licstart The following is the entire license notice for the
JavaScript code in this page. JavaScript code in this page.
@ -371,7 +350,7 @@ class QvitterAction extends ApiAction
window.timeBetweenPolling = <?php print QvitterPlugin::settings("timebetweenpolling"); ?>; window.timeBetweenPolling = <?php print QvitterPlugin::settings("timebetweenpolling"); ?>;
window.apiRoot = <?php window.apiRoot = <?php
$api_root = common_path("api/", GNUsocial::isHTTPS()); $api_root = common_path("api/", StatusNet::isHTTPS());
if($this_site_thinks_it_is_http_but_is_actually_https) { if($this_site_thinks_it_is_http_but_is_actually_https) {
$api_root = str_replace('http://','https://',$api_root); $api_root = str_replace('http://','https://',$api_root);
} }
@ -381,7 +360,6 @@ class QvitterAction extends ApiAction
window.fullUrlToThisQvitterApp = '<?php print $qvitterpath; ?>'; window.fullUrlToThisQvitterApp = '<?php print $qvitterpath; ?>';
window.siteRootDomain = '<?php print $siterootdomain; ?>'; window.siteRootDomain = '<?php print $siterootdomain; ?>';
window.siteInstanceURL = '<?php print $instanceurl; ?>'; window.siteInstanceURL = '<?php print $instanceurl; ?>';
window.avatarServer= <?php print json_encode(common_config('avatar', 'server')) ?>;
window.defaultLinkColor = '<?php print QvitterPlugin::settings("defaultlinkcolor"); ?>'; window.defaultLinkColor = '<?php print QvitterPlugin::settings("defaultlinkcolor"); ?>';
window.defaultBackgroundColor = '<?php print QvitterPlugin::settings("defaultbackgroundcolor"); ?>'; window.defaultBackgroundColor = '<?php print QvitterPlugin::settings("defaultbackgroundcolor"); ?>';
window.siteBackground = '<?php print QvitterPlugin::settings("sitebackground"); ?>'; window.siteBackground = '<?php print QvitterPlugin::settings("sitebackground"); ?>';
@ -389,16 +367,15 @@ class QvitterAction extends ApiAction
window.customWelcomeText = <?php print json_encode(QvitterPlugin::settings("customwelcometext")); ?>; window.customWelcomeText = <?php print json_encode(QvitterPlugin::settings("customwelcometext")); ?>;
window.urlShortenerAPIURL = '<?php print QvitterPlugin::settings("urlshortenerapiurl"); ?>'; window.urlShortenerAPIURL = '<?php print QvitterPlugin::settings("urlshortenerapiurl"); ?>';
window.urlShortenerSignature = '<?php print QvitterPlugin::settings("urlshortenersignature"); ?>'; window.urlShortenerSignature = '<?php print QvitterPlugin::settings("urlshortenersignature"); ?>';
window.urlshortenerFormat = '<?php print QvitterPlugin::settings("urlshortenerformat"); ?>'; window.urlshortenerFormat = '<?php print QvitterPlugin::settings("urlshortenerformat"); ?>';
window.commonSessionToken = '<?php print common_session_token(); ?>'; window.commonSessionToken = '<?php print common_session_token(); ?>';
window.siteMaxThumbnailSize = <?php print common_config('thumbnail', 'maxsize'); ?>; window.siteMaxThumbnailSize = <?php print common_config('thumbnail', 'maxsize'); ?>;
window.siteAttachmentURLBase = '<?php print $attachmentroot; ?>'; window.siteAttachmentURLBase = '<?php print $attachmentroot; ?>';
window.siteAvatarURLBase = '<?php print $avatarroot; ?>';
window.siteEmail = '<?php print common_config('site', 'email'); ?>'; window.siteEmail = '<?php print common_config('site', 'email'); ?>';
window.siteLicenseTitle = '<?php print common_config('license', 'title'); ?>'; window.siteLicenseTitle = '<?php print common_config('license', 'title'); ?>';
window.siteLicenseURL = '<?php print common_config('license', 'url'); ?>'; window.siteLicenseURL = '<?php print common_config('license', 'url'); ?>';
window.customTermsOfUse = <?php print json_encode(QvitterPlugin::settings("customtermsofuse")); ?>; window.customTermsOfUse = <?php print json_encode(QvitterPlugin::settings("customtermsofuse")); ?>;
window.siteLocalOnlyDefaultPath = <?php print (common_config('public', 'localonly') ? 'true' : 'false'); ?>; window.siteLocalOnlyDefaultPath = <?php print (common_config('public', 'localonly') ? 'true' : 'false'); ?>;
<?php <?php
// Get all topics in Qvitter's namespace in Profile_prefs // Get all topics in Qvitter's namespace in Profile_prefs
@ -430,9 +407,6 @@ class QvitterAction extends ApiAction
if($disable_keyboard_shortcuts == '1' || $disable_keyboard_shortcuts == 1) { if($disable_keyboard_shortcuts == '1' || $disable_keyboard_shortcuts == 1) {
$disable_keyboard_shortcuts = true; $disable_keyboard_shortcuts = true;
} }
if (is_null($disable_keyboard_shortcuts)) {
$disable_keyboard_shortcuts = false;
}
} catch (Exception $e) { } catch (Exception $e) {
// //
} }
@ -648,7 +622,7 @@ class QvitterAction extends ApiAction
<input type="hidden" id="token" name="token" value="<?php print common_session_token(); ?>"> <input type="hidden" id="token" name="token" value="<?php print common_session_token(); ?>">
<?php <?php
if (array_key_exists('OpenID', GNUsocial::getActiveModules())) { if (array_key_exists('OpenID', StatusNet::getActivePlugins())) {
print '<a href="'.$instanceurl.'main/openid" id="openid-login" title="OpenID" donthijack>OpenID</a>'; print '<a href="'.$instanceurl.'main/openid" id="openid-login" title="OpenID" donthijack>OpenID</a>';
} }
@ -721,7 +695,6 @@ class QvitterAction extends ApiAction
?> ?>
</div> </div>
<div class="menu-container" id="bookmark-container"></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 class="menu-container" id="history-container"></div>
<div id="clear-history"></div> <div id="clear-history"></div>
<div id="qvitter-notice"><?php print common_config('site', 'qvitternotice'); ?></div><?php <div id="qvitter-notice"><?php print common_config('site', 'qvitternotice'); ?></div><?php
@ -845,8 +818,7 @@ class QvitterAction extends ApiAction
} }
#user-footer-inner, #user-footer-inner,
.inline-reply-queetbox, .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*/; background-color:/*LIGHTERBACKGROUNDCOLORSTART*/rgb(205,230,239)/*LIGHTERBACKGROUNDCOLOREND*/;
} }
#user-footer-inner, #user-footer-inner,
@ -860,8 +832,7 @@ class QvitterAction extends ApiAction
.quoted-notice:hover, .quoted-notice:hover,
.oembed-item:hover, .oembed-item:hover,
.stream-item:hover:not(.expanded) .quoted-notice: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*/; border-color:/*LIGHTERBORDERCOLORSTART*/rgb(155,206,224)/*LIGHTERBORDERCOLOREND*/;
} }
span.inline-reply-caret .caret-inner { span.inline-reply-caret .caret-inner {

View File

@ -112,6 +112,17 @@ class QvitterLoginAction extends FormAction
common_rememberme($user); common_rememberme($user);
} }
// make sure we have a unique app id for this Qvitter installation in config
// to use for creating a csrf token
if(common_config('qvitter', 'appid') == false) {
Config::save('qvitter', 'appid', sha1(common_random_hexstr(16)));
}
// set csrf-cookie
$csrf_token = sha1(common_config('qvitter', 'appid').session_id());
common_set_cookie('Qvitter-CSRF', $csrf_token, time() + 60*60*24*30); // 1 month
$url = common_get_returnto(); $url = common_get_returnto();
if ($url) { if ($url) {

View File

@ -114,7 +114,7 @@ class NotificationStream
$all = array_merge($all, $notifications); $all = array_merge($all, $notifications);
if (count($notifications) < count($ids)) { if (count($notifications < count($ids))) {
$offset += $limit; $offset += $limit;
$limit -= count($notifications); $limit -= count($notifications);
} }

View File

@ -40,11 +40,8 @@
font-style: normal; font-style: normal;
} }
@import url(https://fonts.bunny.net/css?family=noto-sans-jp:400,500,700);
body { body {
font-family:"Helvetica Neue",Arial,"Noto Sans JP",sans-serif; font-family:"Helvetica Neue",Arial,sans-serif;
} }
html { html {
@ -242,8 +239,10 @@ body.rtl .discard-error-message {
} }
#top-compose { #top-compose {
border: 1px solid rgba(0, 0, 0, 0.0); border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px; border-radius: 4px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.15) inset;
box-sizing: border-box;
cursor: pointer; cursor: pointer;
display: block; display: block;
height: 32px; height: 32px;
@ -259,7 +258,7 @@ body.rtl .discard-error-message {
cursor: pointer; cursor: pointer;
display: block; display: block;
height: 32px; height: 32px;
margin-top: -4px; margin-top: -3px;
position: absolute; position: absolute;
width: 32px; width: 32px;
z-index: 101; z-index: 101;
@ -276,6 +275,7 @@ body.rtl .discard-error-message {
background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05)); background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05));
} }
.topbar { .topbar {
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
left: 0; left: 0;
position: fixed; position: fixed;
right: 0; right: 0;
@ -506,7 +506,7 @@ body.rtl .dropdown-menu li:not(.dropdown-caret) {
font-weight: normal; font-weight: normal;
line-height: 18px; line-height: 18px;
overflow: hidden; overflow: hidden;
padding: 3px 12px 3px 22px; padding: 3px 0 3px 22px;
position: relative; position: relative;
text-decoration: none; text-decoration: none;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -655,12 +655,13 @@ body.rtl .dropdown-menu .row-type-profile-prefs-toggle::before {
#site-notice { #site-notice {
color: #EEEEEE; color: #EEEEEE;
font-size: 20px; font-size: 30px;
font-weight: 300; font-weight: 300;
line-height: 25px; line-height: 32px;
margin: 0; margin: 0;
padding: 20px; padding: 20px;
text-align: left; text-align: left;
text-shadow: 0 1px 2px #000000;
display:none; display:none;
} }
@ -811,11 +812,17 @@ body.rtl #login-register-container {
} }
#login-content, #login-content,
.front-signup { .front-signup {
font-family: Arial,âsans-serif; font-family: Arial,sans-serif;
font-size: 14px; font-size: 14px;
color: #333333; color: #333333;
line-height: 18px; line-height: 18px;
background: #ffffff; /* Old browsers */ background: #ffffff; /* Old browsers */
background: -moz-linear-gradient(top, #ffffff 0px, #dddddd 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0px,#ffffff), color-stop(100%,#dddddd)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #ffffff 0px,#dddddd 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #ffffff 0px,#dddddd 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #ffffff 0px,#dddddd 100%); /* IE10+ */
background: linear-gradient(to bottom, #ffffff 0px,#dddddd 100%); /* W3C */
background-clip: border-box; background-clip: border-box;
background-origin: padding-box; background-origin: padding-box;
background-size: auto auto; background-size: auto auto;
@ -850,7 +857,7 @@ body.rtl #login-register-container {
.front-signup input, .front-signup input,
#login-content input#nickname, #login-content input#nickname,
#login-content input#password { #login-content input#password {
font-family: Arial,âsans-serif; font-family: Arial,sans-serif;
font-size: 13px; font-size: 13px;
color: #000000; color: #000000;
line-height: 15.4333px; line-height: 15.4333px;
@ -967,7 +974,19 @@ button#submit-login {
font-weight: 700; font-weight: 700;
color: #FFFFFF; color: #FFFFFF;
line-height: 18px; line-height: 18px;
background: #019ad2;
background: -moz-linear-gradient(top, #33bcef 0%, #019ad2 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#33bcef), color-stop(100%,#019ad2)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #33bcef 0%,#019ad2 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #33bcef 0%,#019ad2 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #33bcef 0%,#019ad2 100%); /* IE10+ */
background: linear-gradient(to bottom, #33bcef 0%,#019ad2 100%); /* W3C */
background-repeat: repeat-x;
height: 30px; height: 30px;
margin-top: 0px; margin-top: 0px;
margin-right: 0px; margin-right: 0px;
@ -977,7 +996,18 @@ button#submit-login {
padding-right: 10px; padding-right: 10px;
padding-bottom: 5px; padding-bottom: 5px;
padding-left: 10px; padding-left: 10px;
border: none; border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #057ED0;
border-right-color: #057ED0;
border-bottom-color: #057ED0;
border-left-color: #057ED0;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-left-radius: 4px; border-top-left-radius: 4px;
border-top-right-radius: 4px; border-top-right-radius: 4px;
border-bottom-left-radius: 4px; border-bottom-left-radius: 4px;
@ -994,11 +1024,23 @@ button#submit-login {
border-image-width: 1 1 1 1; border-image-width: 1 1 1 1;
border-spacing: 0px 0px; border-spacing: 0px 0px;
cursor: pointer; cursor: pointer;
transition-duration: 200ms; text-shadow: rgba(0, 0, 0, 0.25) 0px -1px 1px;
} }
button#submit-login:hover { button#submit-login:hover {
background: #0271bf;
background: -moz-linear-gradient(top, #2daddc 0%, #0271bf 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2daddc), color-stop(100%,#0271bf)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #2daddc 0%,#0271bf 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #2daddc 0%,#0271bf 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #2daddc 0%,#0271bf 100%); /* IE10+ */
background: linear-gradient(to bottom, #2daddc 0%,#0271bf 100%); /* W3C */
background-repeat: repeat-x; background-repeat: repeat-x;
border-color:#096eb3;
color:#fff; color:#fff;
} }
@ -1053,7 +1095,7 @@ button#submit-login:hover {
text-decoration:none; text-decoration:none;
} }
#remember-forgot #openid-login:before { #remember-forgot #openid-login:before {
content: " · "; content: " · ";
font-size:11px; font-size:11px;
} }
#remember-forgot #openid-login:after { #remember-forgot #openid-login:after {
@ -1105,9 +1147,16 @@ button#submit-login:hover {
} }
.front-signup .signup-btn { .front-signup .signup-btn {
background: #FFAA22; background-color: #FD9A0F;
border: none; background: -moz-linear-gradient(top, rgba(254,233,79,1) 0px, rgba(253,154,15,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0px,rgba(254,233,79,1)), color-stop(100%,rgba(253,154,15,1)));
background: -webkit-linear-gradient(top, rgba(254,233,79,1) 0px,rgba(253,154,15,1) 100%);
background: -o-linear-gradient(top, rgba(254,233,79,1) 0px,rgba(253,154,15,1) 100%);
background: -ms-linear-gradient(top, rgba(254,233,79,1) 0px,rgba(253,154,15,1) 100%);
background: linear-gradient(to bottom, rgba(254,233,79,1) 0px,rgba(253,154,15,1) 100%);
border: 1px solid #ffaa22;
border-radius: 4px; border-radius: 4px;
box-shadow: 0 1px 0 #ffffff;
color: #333333; color: #333333;
cursor: pointer; cursor: pointer;
display: inline-block; display: inline-block;
@ -1120,10 +1169,17 @@ button#submit-login:hover {
padding-right: 12px; padding-right: 12px;
position: relative; position: relative;
right: 12px; right: 12px;
transition-duration: 200ms; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
} }
.front-signup .signup-btn:hover, .front-signup .signup-btn:focus { .front-signup .signup-btn:hover, .front-signup .signup-btn:focus {
background: #EC8B11; background-color: #FD9512;
background: -moz-linear-gradient(top, rgba(254,220,77,1) 0px, rgba(253,149,18,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0px,rgba(254,220,77,1)), color-stop(100%,rgba(253,149,18,1)));
background: -webkit-linear-gradient(top, rgba(254,220,77,1) 0px,rgba(253,149,18,1) 100%);
background: -o-linear-gradient(top, rgba(254,220,77,1) 0px,rgba(253,149,18,1) 100%);
background: -ms-linear-gradient(top, rgba(254,220,77,1) 0px,rgba(253,149,18,1) 100%);
background: linear-gradient(to bottom, rgba(254,220,77,1) 0px,rgba(253,149,18,1) 100%);
border-color: #EC8B11;
} }
@ -1212,7 +1268,7 @@ button#submit-login:hover {
#page-container { #page-container {
width:890px; width:890px;
padding:17px 14px 0 14px; padding:17px 14px 0 14px;
background-color:rgba(0,0,0,0.5); background-color:rgba(0,0,0,0.2);
margin-left:-459px; margin-left:-459px;
opacity:0; opacity:0;
} }
@ -1285,8 +1341,8 @@ body.rtl #footer-spinner-container {
position: relative; position: relative;
background-color: #F9F9F9; background-color: #F9F9F9;
border-top: 1px solid #E8E8E8; border-top: 1px solid #E8E8E8;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25) inset;
font-size: 14px; font-size: 14px;
transition-duration: 200ms;
} }
.menu-container a:first-child { .menu-container a:first-child {
border-top:0 none; border-top:0 none;
@ -1301,47 +1357,6 @@ body.rtl #footer-spinner-container {
top: 9px; top: 9px;
width: 12px; 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 { #bookmark-container a:hover .chev-right {
background-position:-18px -508px; background-position:-18px -508px;
} }
@ -1849,7 +1864,6 @@ body.rtl .profile-card.user-muted .user-menu-cog::after,
list-style-image: none; list-style-image: none;
list-style-position: outside; list-style-position: outside;
list-style-type: none; list-style-type: none;
transition-duration: 200ms;
height:auto; height:auto;
position:relative; position:relative;
} }
@ -2380,7 +2394,7 @@ body.rtl .queet.rtl .expanded-content {
font-style:italic; font-style:italic;
} }
.oembed-item-provider-url:not(:empty)::before { .oembed-item-provider-url:not(:empty)::before {
content:' · '; content:' · ';
} }
.oembed-item-header, .oembed-item-header,
.oembed-item-body, .oembed-item-body,
@ -2848,7 +2862,7 @@ body.rtl .view-more-container-bottom { direction:rtl; }
text-decoration: underline; text-decoration: underline;
} }
.stream-item-header .created-at:before { .stream-item-header .created-at:before {
content: "·"; content: "·";
display: inline-block; display: inline-block;
margin-left: 4px; margin-left: 4px;
} }
@ -3028,7 +3042,6 @@ ul.queet-actions > li .icon:before {
text-align: center; text-align: center;
vertical-align:text-top; vertical-align:text-top;
width:21px; width:21px;
transition-duration: 200ms;
} }
.stream-item.temp-post ul.queet-actions > li .icon:before { .stream-item.temp-post ul.queet-actions > li .icon:before {
color:rgba(0,0,0,0.05); color:rgba(0,0,0,0.05);
@ -3217,7 +3230,6 @@ ul.queet-actions > li .icon.is-mine:before {
top: 0; top: 0;
width: 30px; width: 30px;
outline:none; outline:none;
transition-duration: 200ms;
} }
.queet.rtl .ostatus-link { .queet.rtl .ostatus-link {
right:auto; right:auto;
@ -4008,8 +4020,9 @@ body.rtl .queet-box-extras {
font-weight: 700; font-weight: 700;
color: #FFFFFF; color: #FFFFFF;
line-height: 16px; line-height: 16px;
border: 1px solid rgba(0, 0, 0, 0.0); border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px; border-radius: 4px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.15) inset;
box-sizing: border-box; box-sizing: border-box;
margin-top: 0px; margin-top: 0px;
margin-right: 0px; margin-right: 0px;
@ -4027,7 +4040,7 @@ body.rtl .queet-box-extras {
border-image-source: none; border-image-source: none;
border-image-width: 1 1 1 1; border-image-width: 1 1 1 1;
cursor: pointer; cursor: pointer;
transition-duration: 200ms; text-shadow: rgba(0, 0, 0, 0.25) 0px -1px 1px;
} }
button.signup-btn.disabled:hover, button.signup-btn.disabled:hover,
button.signup-btn.disabled:focus, button.signup-btn.disabled:focus,
@ -4045,7 +4058,7 @@ button.signup-btn.disabled {
cursor: default; cursor: default;
} }
.queet-toolbar button.enabled:hover { .queet-toolbar button.enabled:hover {
background: #005D7F; background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05));
} }
#settingslink .dropdown-toggle { #settingslink .dropdown-toggle {
@ -4083,27 +4096,6 @@ div.nav-session {
width: 588px; 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 { .hover-card .profile-card {
width:290px; width:290px;
margin-bottom:0; margin-bottom:0;
@ -4361,7 +4353,7 @@ div.nav-session {
float:left; float:left;
} }
.profile-banner-footer ul.stats li a { .profile-banner-footer ul.stats li a {
padding: 0 9px 8px 12px; padding: 0 15px 8px 12px;
} }
.hover-card .profile-banner-footer ul.stats li a { .hover-card .profile-banner-footer ul.stats li a {
padding-bottom: 5px; padding-bottom: 5px;
@ -4401,8 +4393,9 @@ div.clearfix {
font-weight: 700; font-weight: 700;
color: #333; color: #333;
line-height: 16px; line-height: 16px;
border: 1px solid rgba(0, 0, 0, 0); border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px; border-radius: 4px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.15) inset;
box-sizing: border-box; box-sizing: border-box;
margin-top: 0px; margin-top: 0px;
margin-right: 0px; margin-right: 0px;
@ -4420,21 +4413,16 @@ div.clearfix {
border-image-source: none; border-image-source: none;
border-image-width: 1 1 1 1; border-image-width: 1 1 1 1;
cursor: pointer; cursor: pointer;
transition-duration: 200ms; text-shadow: rgba(0, 0, 0, 0.15) 0px -1px 1px;
} }
.qvitter-follow-button, .qvitter-follow-button,
.edit-profile-button, .edit-profile-button,
.abort-edit-profile-button, .abort-edit-profile-button,
.member-button { .member-button {
background-color:#e2e2e2; background-color:#e2e2e2;
text-shadow: rgba(255, 255, 255, 0.15) 0px -1px 1px;
color:#333; color:#333;
} }
.member-button:not(.disabled):not(.member):hover,
.qvitter-follow-button:not(.disabled):not(.following):hover,
.edit-profile-button:hover,
.abort-edit-profile-button:hover {
background-color:#c9c9c9;
}
.external-member-button.disabled, .external-member-button.disabled,
.member-button.disabled, .member-button.disabled,
.external-follow-button.disabled, .external-follow-button.disabled,
@ -4451,6 +4439,17 @@ div.clearfix {
.qvitter-follow-button.disabled i { .qvitter-follow-button.disabled i {
opacity:0.2; opacity:0.2;
} }
.external-member-button:not(.disabled):not(.member):hover,
.member-button:not(.disabled):not(.member):hover,
.external-follow-button:not(.disabled):not(.following):hover,
.qvitter-follow-button:not(.disabled):not(.following):hover,
.edit-profile-button:hover,
.abort-edit-profile-button:hover,
button.shorten:not(.disabled):hover,
.save-profile-button:not(.disabled):hover,
.crop-and-save-button:not(.disabled):hover {
background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05));
}
.external-member-button:not(.disabled):not(.member):active, .external-member-button:not(.disabled):not(.member):active,
.member-button:not(.disabled):not(.member):active, .member-button:not(.disabled):not(.member):active,
.external-follow-button:not(.disabled):not(.following):active, .external-follow-button:not(.disabled):not(.following):active,
@ -4673,7 +4672,6 @@ body.rtl #feed-header-inner .loader {
top:5px; top:5px;
opacity:0.5; opacity:0.5;
cursor:pointer; cursor:pointer;
transition-duration: 200ms;
} }
.reload-stream:hover { .reload-stream:hover {
opacity:1; opacity:1;
@ -5011,7 +5009,7 @@ body.rtl .modal-footer button {
box-shadow: 0 1px 0 #EEEEEE inset, 0 1px 0 #FFFFFF; box-shadow: 0 1px 0 #EEEEEE inset, 0 1px 0 #FFFFFF;
color: #000000; color: #000000;
display: block; display: block;
font-family: Arial,âsans-serif; font-family: Arial,sans-serif;
font-size: 13px; font-size: 13px;
height: 20px; height: 20px;
line-height: 15.4333px; line-height: 15.4333px;
@ -5362,8 +5360,11 @@ content:"\f068";
} }
#popup-shortcuts #shortcuts-container span.shortcut { #popup-shortcuts #shortcuts-container span.shortcut {
background-color: #eee; background-color: #eee;
background-image: linear-gradient(#fff, #eee);
background-repeat: repeat-x; background-repeat: repeat-x;
border: 1px solid #ccc;
border-radius: 3px; border-radius: 3px;
box-shadow: 0 1px 0 #fff inset, 0 0.5px 0 #ccc;
color: #666; color: #666;
display: inline-block; display: inline-block;
font-size: 12px; font-size: 12px;
@ -5671,6 +5672,11 @@ body.rtl #feed-header-inner h2 {
} }
@media (max-width: 910px) { @media (max-width: 910px) {
body {
background:none !important;
}
.upload-background-image { .upload-background-image {
display:none; display:none;
} }
@ -5680,12 +5686,7 @@ body.rtl #feed-header-inner h2 {
} }
.topbar .global-nav:before { .topbar .global-nav:before {
top: 8px; background:none !important;
margin-left: -40px;
background-position: 0 0;
width: 83px;
height: 34px;
border-radius: 10px;
} }
#site-notice, #site-notice,
@ -5701,7 +5702,7 @@ body.rtl #feed-header-inner h2 {
.language-dropdown { .language-dropdown {
width:170px; width:170px;
right:50%; right:50%;
margin-right:-95px; margin-right:-85px;
margin-top:5px; margin-top:5px;
} }
@ -5722,7 +5723,7 @@ body.rtl #feed-header-inner h2 {
height:35px; height:35px;
} }
#page-container { #page-container {
margin-top:59px; margin-top:69px;
background-color:transparent; background-color:transparent;
} }
@ -5761,7 +5762,7 @@ body.rtl #feed-header-inner h2 {
outline: 0 none; outline: 0 none;
padding: 6px 27px 6px 12px; padding: 6px 27px 6px 12px;
position: fixed; position: fixed;
right: 45px; right: 60px;
top: 0; top: 0;
transition: all 0.2s ease-in-out 0s; transition: all 0.2s ease-in-out 0s;
width: 60px; width: 60px;
@ -5805,16 +5806,16 @@ body.rtl #feed-header-inner h2 {
#top-compose { #top-compose {
border: 2px solid #fff; border: 3px solid #fff;
box-shadow: none; box-shadow: none;
cursor: pointer; cursor: pointer;
display: block; display: block;
height: 35px; height: 41px;
margin: 0; margin: 0;
position: fixed; position: fixed;
right: 6px; right: 6px;
top: 5px; top: 5px;
width: 35px; width: 41px;
z-index: 100; z-index: 100;
} }
#top-compose.hidden { #top-compose.hidden {
@ -5822,7 +5823,7 @@ body.rtl #feed-header-inner h2 {
} }
#top-compose:before { #top-compose:before {
font-size:25px; font-size:25px;
line-height: 44px; line-height: 41px;
padding-left: 2px; padding-left: 2px;
} }
@ -5949,7 +5950,7 @@ body.rtl #feed-header-inner h2 {
} }
body { body {
background-color:#fff !important; background-color:#000 !important;
} }
#logo { #logo {
display:none; display:none;
@ -6023,7 +6024,7 @@ body.rtl #feed-header-inner h2 {
} }
.menu-container { .menu-container {
margin:0; margin:0;
height:47px; height:59px;
border:0 none !important; border:0 none !important;
border-radius:0 0 0 0 !important; border-radius:0 0 0 0 !important;
box-shadow: 0 25px 55px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 25px 55px 0 rgba(255, 255, 255, 0.5) inset;
@ -6046,7 +6047,7 @@ body.rtl #feed-header-inner h2 {
float:left; float:left;
font-size:0; font-size:0;
color:transparent; color:transparent;
height:47px; height:55px;
padding:0 !important; padding:0 !important;
margin:0; margin:0;
border-radius:0 0 0 0 !important; border-radius:0 0 0 0 !important;
@ -6062,7 +6063,7 @@ body.rtl #feed-header-inner h2 {
border:0 none !important; border:0 none !important;
} }
.menu-container a:not(.current) { .menu-container a:not(.current) {
height:47px; height:63px;
} }
.menu-container a:after, .menu-container a:after,
.menu-container a.current:after { .menu-container a.current:after {
@ -6082,7 +6083,7 @@ body.rtl #feed-header-inner h2 {
left: 50%; left: 50%;
margin-left: -35px; margin-left: -35px;
width: 70px; width: 70px;
height: 47px; height: 55px;
background-size: 500px 1329px; background-size: 500px 1329px;
background-color:#ccc; background-color:#ccc;
} }

View File

@ -1,16 +0,0 @@
<h3>Действия</h3>
<p><span class="shortcut">n</span><span class="description">Новый квит</span></p>
<p><span class="shortcut">f</span><span class="description">Добавить в избранное</span></p>
<p><span class="shortcut">r</span><span class="description">Ответить</span></p>
<p><span class="shortcut">t</span><span class="description">Реквит</span></p>
<p><span class="shortcut">Enter</span><span class="description">Раскрыть квит</span></p>
<p><span class="shortcut">Ctrl</span><span class="shortcut">Enter</span>или <span class="shortcut">Cmd ⌘</span><span class="shortcut">Enter</span><span class="description">Опубликовать квит</span></p>
<p><span class="shortcut">Esc</span><span class="description">Закрыть все раскрытые квиты</span></p>
<h3>Навигация</h3>
<p><span class="shortcut">?</span><span class="description">Это меню</span></p>
<p><span class="shortcut">j</span><span class="description">Следующий квит</span></p>
<p><span class="shortcut">k</span><span class="description">Предыдущий квит</span></p>
<h3>Отключить</h3>
<p>Отключить горячие клавиши можно в <a href="{instance-url-with-protocol}settings/qvitter">настройках</a>.</p>

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -334,6 +334,9 @@ function postUpdateBookmarks(newBookmarks) {
$.ajax({ url: window.apiRoot + 'qvitter/update_bookmarks.json', $.ajax({ url: window.apiRoot + 'qvitter/update_bookmarks.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
bookmarks: bookmarksString bookmarks: bookmarksString
}, },
@ -358,6 +361,9 @@ function postNewLinkColor(newLinkColor) {
$.ajax({ url: window.apiRoot + 'qvitter/update_link_color.json', $.ajax({ url: window.apiRoot + 'qvitter/update_link_color.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
linkcolor: newLinkColor linkcolor: newLinkColor
}, },
@ -383,6 +389,9 @@ function postNewBackgroundColor(newBackgroundColor) {
$.ajax({ url: window.apiRoot + 'qvitter/update_background_color.json', $.ajax({ url: window.apiRoot + 'qvitter/update_background_color.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
backgroundcolor: newBackgroundColor backgroundcolor: newBackgroundColor
}, },
@ -412,6 +421,9 @@ function postSetProfilePref(namespace, topic, data, callback) {
$.ajax({ url: window.apiRoot + 'qvitter/set_profile_pref.json', $.ajax({ url: window.apiRoot + 'qvitter/set_profile_pref.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
namespace: namespace, namespace: namespace,
topic: topic, topic: topic,
@ -448,6 +460,9 @@ function APIFollowOrUnfollowUser(followOrUnfollow,user_id,this_element,actionOnS
$.ajax({ url: window.apiRoot + postRequest, $.ajax({ url: window.apiRoot + postRequest,
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
user_id: user_id user_id: user_id
}, },
@ -485,6 +500,9 @@ function APIBlockOrUnblockUser(blockOrUnblock,user_id,actionOnSuccess) {
$.ajax({ url: window.apiRoot + postRequest, $.ajax({ url: window.apiRoot + postRequest,
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
id: user_id id: user_id
}, },
@ -515,6 +533,9 @@ function APISandboxCreateOrDestroy(createOrDestroy,userId,actionOnSuccess) {
$.ajax({ url: window.apiRoot + 'qvitter/sandbox/' + createOrDestroy + '.json', $.ajax({ url: window.apiRoot + 'qvitter/sandbox/' + createOrDestroy + '.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
id: userId id: userId
}, },
@ -545,6 +566,9 @@ function APISilenceCreateOrDestroy(createOrDestroy,userId,actionOnSuccess) {
$.ajax({ url: window.apiRoot + 'qvitter/silence/' + createOrDestroy + '.json', $.ajax({ url: window.apiRoot + 'qvitter/silence/' + createOrDestroy + '.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
id: userId id: userId
}, },
@ -577,6 +601,9 @@ function APIJoinOrLeaveGroup(joinOrLeave,group_id,this_element,actionOnSuccess)
$.ajax({ url: window.apiRoot + 'statusnet/groups/' + joinOrLeave + '.json', $.ajax({ url: window.apiRoot + 'statusnet/groups/' + joinOrLeave + '.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
id: group_id id: group_id
}, },
@ -608,6 +635,9 @@ function postQueetToAPI(queetText_txt, in_reply_to_status_id, postToGroups, acti
$.ajax({ url: window.apiRoot + 'qvitter/statuses/update.json', $.ajax({ url: window.apiRoot + 'qvitter/statuses/update.json',
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
status: queetText_txt, status: queetText_txt,
source: 'Qvitter', source: 'Qvitter',
@ -643,6 +673,9 @@ function postActionToAPI(action, actionOnSuccess) {
$.ajax({ url: window.apiRoot + action, $.ajax({ url: window.apiRoot + action,
cache: false, cache: false,
type: "POST", type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader('X-Qvitter-CSRF', getCookieValue('Qvitter-CSRF'));
},
data: { data: {
source: 'Qvitter' source: 'Qvitter'
}, },

View File

@ -394,18 +394,6 @@ function buildProfileCard(data) {
if(isUserMuted(data.id)) { if(isUserMuted(data.id)) {
is_muted = ' user-muted'; 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 = ''; var followButton = '';
@ -432,9 +420,8 @@ function buildProfileCard(data) {
// full card html // full card html
var profileCardHtml = '\ var profileCardHtml = '\
<div class="profile-card' + is_me + logged_in + is_muted + local_or_remote + '">\ <div class="profile-card' + is_me + logged_in + is_muted + '">\
<script class="profile-json" type="application/json">' + JSON.stringify(data) + '</script>\ <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' + is_silenced + is_sandboxed + '" style="' + coverPhotoHtml + '" data-user-id="' + data.id + '" data-screen-name="' + data.screen_name + '">\
<div class="profile-header-inner-overlay"></div>\ <div class="profile-header-inner-overlay"></div>\
<a class="profile-picture" href="' + data.profile_image_url_original + '">\ <a class="profile-picture" href="' + data.profile_image_url_original + '">\
@ -445,7 +432,6 @@ function buildProfileCard(data) {
<span class="silenced-flag" data-tooltip="' + window.sL.silencedStreamDescription + '">' + window.sL.silenced + '</span>\ <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>\ <span class="sandboxed-flag" data-tooltip="' + window.sL.sandboxedStreamDescription + '">' + window.sL.sandboxed + '</span>\
<h2 class="username">\ <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>\ <span class="screen-name" data-user-id="' + data.id + '">@' + data.screen_name + '</span>\
' + follows_you + '\ ' + follows_you + '\
</h2>\ </h2>\
@ -460,7 +446,6 @@ function buildProfileCard(data) {
</div>\ </div>\
</div>\ </div>\
<div class="profile-banner-footer">\ <div class="profile-banner-footer">\
' + remote_user_info + '\
<ul class="stats">\ <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="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>\ <li class="following-num"><a href="' + data.statusnet_profile_url + '/subscriptions" class="following-stats">' + window.sL.following + '<strong>' + data.friends_count + '</strong></a></li>\
@ -488,6 +473,7 @@ function buildProfileCard(data) {
· · · · · · · · · */ · · · · · · · · · */
function buildExternalProfileCard(data) { function buildExternalProfileCard(data) {
// follows me? // follows me?
var follows_you = ''; var follows_you = '';
if(data.local !== null && data.local.follows_you === true && window.loggedIn.id != data.local.id) { if(data.local !== null && data.local.follows_you === true && window.loggedIn.id != data.local.id) {
@ -496,7 +482,7 @@ function buildExternalProfileCard(data) {
// follow button // follow button
var followButton = ''; var followButton = '';
if(window.loggedIn !== false && typeof data.local != 'undefined' && data.local) { if(window.loggedIn !== false && typeof data.local != 'undefined' && data.local !== null) {
var followButton = buildFollowBlockbutton(data.local); var followButton = buildFollowBlockbutton(data.local);
} }
@ -578,7 +564,7 @@ function buildExternalProfileCard(data) {
<span class="sandboxed-flag" data-tooltip="' + window.sL.sandboxedStreamDescription + '">' + window.sL.sandboxed + '</span>\ <span class="sandboxed-flag" data-tooltip="' + window.sL.sandboxedStreamDescription + '">' + window.sL.sandboxed + '</span>\
<h2 class="username">\ <h2 class="username">\
<span class="screen-name">' + data.screenNameWithServer + '</span>\ <span class="screen-name">' + data.screenNameWithServer + '</span>\
<span class="ostatus-link" data-tooltip="' + window.sL.goToTheUsersRemoteProfile + '" donthijack>' + window.sL.goToTheUsersRemoteProfile + '</span>\ <span class="ostatus-link" data-tooltip="' + window.sL.goToTheUsersRemoteProfile + '">' + window.sL.goToTheUsersRemoteProfile + '</span>\
' + follows_you + '\ ' + follows_you + '\
</h2>\ </h2>\
</a>\ </a>\
@ -959,13 +945,6 @@ 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 // getting stream failed, and we don't have a fallback id
else if(queet_data === false) { else if(queet_data === false) {
@ -1035,25 +1014,9 @@ function setNewCurrentStream(streamObject,setLocation,fallbackId,actionOnSuccess
setUrlFromStream(streamObject); setUrlFromStream(streamObject);
} }
// add this stream to the history menu
addStreamToHistoryMenuAndMarkAsCurrent(streamObject);
// profile card from user array // profile card from user array
if(userArray) { if(userArray) {
addProfileCardToDOM(buildProfileCard(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 // remove any trailing profile cards
else { else {
@ -1077,6 +1040,9 @@ function setNewCurrentStream(streamObject,setLocation,fallbackId,actionOnSuccess
window.clearInterval(checkForNewQueetsInterval); window.clearInterval(checkForNewQueetsInterval);
checkForNewQueetsInterval=window.setInterval(function(){checkForNewQueets()},window.timeBetweenPolling); checkForNewQueetsInterval=window.setInterval(function(){checkForNewQueets()},window.timeBetweenPolling);
// add this stream to the history menu
addStreamToHistoryMenuAndMarkAsCurrent(streamObject);
remove_spinner(); remove_spinner();
// some streams, e.g. /statuses/show/1234.json is not enclosed in an array, make sure it is // some streams, e.g. /statuses/show/1234.json is not enclosed in an array, make sure it is
@ -1464,7 +1430,7 @@ function queetBoxPopUpHtml() {
} }
var startText = encodeURIComponent(window.sL.compose); var startText = encodeURIComponent(window.sL.compose);
return '<div class="inline-reply-queetbox"><div id="pop-up-queet-box" class="queet-box queet-box-syntax" data-start-text="' + startText + '" data-cached-text="' + cachedText + '">' + decodeURIComponent(startText) + '</div><div class="syntax-middle"></div><div class="syntax-two" contenteditable="true"></div><div class="mentions-suggestions"></div><div class="queet-toolbar toolbar-reply"><div class="queet-box-extras"><button data-tooltip="' + window.sL.tooltipAttachFile + '" class="upload-image"></button><button data-tooltip="' + window.sL.tooltipShortenUrls + '" class="shorten disabled">URL</button></div><div class="queet-button"><span class="queet-counter"></span><button>' + window.sL.queetVerb + '</button></div></div></div>'; return '<div class="inline-reply-queetbox"><div id="pop-up-queet-box" class="queet-box queet-box-syntax" data-start-text="' + startText + '" data-cached-text="' + cachedText + '">' + decodeURIComponent(startText) + '</div><div class="syntax-middle"></div><div class="syntax-two" contenteditable="true"></div><div class="mentions-suggestions"></div><div class="queet-toolbar toolbar-reply"><div class="queet-box-extras"><button data-tooltip="' + window.sL.tooltipAttachImage + '" class="upload-image"></button><button data-tooltip="' + window.sL.tooltipShortenUrls + '" class="shorten disabled">URL</button></div><div class="queet-button"><span class="queet-counter"></span><button>' + window.sL.queetVerb + '</button></div></div></div>';
} }
@ -1549,7 +1515,7 @@ function replyFormHtml(streamItem,qid) {
startText = encodeURIComponent(startText); startText = encodeURIComponent(startText);
repliesText = encodeURIComponent(repliesText); repliesText = encodeURIComponent(repliesText);
return '<div class="inline-reply-queetbox"><span class="inline-reply-caret"><span class="caret-inner"></span></span><img class="reply-avatar" src="' + $('#user-avatar').attr('src') + '" /><div class="queet-box queet-box-syntax" id="queet-box-' + qid + '" data-start-text="' + startText + '" data-replies-text="' + repliesText + '" data-cached-text="' + cachedText + '">' + decodeURIComponent(startText) + '</div><div class="syntax-middle"></div><div class="syntax-two" contenteditable="true"></div><div class="mentions-suggestions"></div><div class="queet-toolbar toolbar-reply"><div class="queet-box-extras"><button data-tooltip="' + window.sL.tooltipAttachFile + '" class="upload-image"></button><button data-tooltip="' + window.sL.tooltipShortenUrls + '" class="shorten disabled">URL</button></div><div class="queet-button"><span class="queet-counter"></span><button>' + window.sL.queetVerb + '</button></div></div></div>'; return '<div class="inline-reply-queetbox"><span class="inline-reply-caret"><span class="caret-inner"></span></span><img class="reply-avatar" src="' + $('#user-avatar').attr('src') + '" /><div class="queet-box queet-box-syntax" id="queet-box-' + qid + '" data-start-text="' + startText + '" data-replies-text="' + repliesText + '" data-cached-text="' + cachedText + '">' + decodeURIComponent(startText) + '</div><div class="syntax-middle"></div><div class="syntax-two" contenteditable="true"></div><div class="mentions-suggestions"></div><div class="queet-toolbar toolbar-reply"><div class="queet-box-extras"><button data-tooltip="' + window.sL.tooltipAttachImage + '" class="upload-image"></button><button data-tooltip="' + window.sL.tooltipShortenUrls + '" class="shorten disabled">URL</button></div><div class="queet-button"><span class="queet-counter"></span><button>' + window.sL.queetVerb + '</button></div></div></div>';
} }
@ -1815,7 +1781,7 @@ function addToFeed(feed, after, extraClasses) {
// external // external
var ostatusHtml = ''; var ostatusHtml = '';
if(obj.from_profile.is_local === false) { 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 + '" donthijack></a>'; ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.from_profile.statusnet_profile_url + '"></a>';
} }
if(obj.ntype == 'like') { if(obj.ntype == 'like') {
@ -2061,7 +2027,7 @@ function buildUserStreamItemHtml(obj) {
// external // external
var ostatusHtml = ''; var ostatusHtml = '';
if(obj.is_local === false) { if(obj.is_local === false) {
ostatusHtml = '<a target="_blank" title="' + window.sL.goToTheUsersRemoteProfile + '" class="ostatus-link" href="' + obj.statusnet_profile_url + '" donthijack></a>'; ostatusHtml = '<a target="_blank" title="' + window.sL.goToTheUsersRemoteProfile + '" class="ostatus-link" href="' + obj.statusnet_profile_url + '"></a>';
} }
// rtl or not // rtl or not
@ -2308,9 +2274,9 @@ function buildQueetHtml(obj, idInStream, extraClasses, requeeted_by, isConversat
}); });
// if statusnetHTML is contains <p>:s, unwrap those (diaspora..) // if statusnetHTML is contains <p>:s, unwrap those (diaspora..)
/*statusnetHTML.children('p').each(function(){ statusnetHTML.children('p').each(function(){
$(this).contents().unwrap(); $(this).contents().unwrap();
});*/ });
// bookmarks created by the bookmark plugin get's a tooltip // bookmarks created by the bookmark plugin get's a tooltip
statusnetHTML.find('.xfolkentry').each(function(){ statusnetHTML.find('.xfolkentry').each(function(){
@ -2330,7 +2296,7 @@ function buildQueetHtml(obj, idInStream, extraClasses, requeeted_by, isConversat
// external // external
var ostatusHtml = ''; var ostatusHtml = '';
if(obj.user.is_local === false) { if(obj.user.is_local === false) {
ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.external_url + '" donthijack></a>'; ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.external_url + '"></a>';
var qSource = '<a href="' + obj.external_url + '">' + getHost(obj.external_url) + '</a>'; var qSource = '<a href="' + obj.external_url + '">' + getHost(obj.external_url) + '</a>';
} }
else { else {
@ -2615,11 +2581,6 @@ function buildAttachmentHTML(attachments){
noCoverClass=' no-cover'; noCoverClass=' no-cover';
} }
// After uploading media, until creating thumbnail, thumbnail url is null.
if (!this.url) {
this.url = '';
}
// play button for videos and animated gifs // play button for videos and animated gifs
var playButtonClass = ''; var playButtonClass = '';
if(typeof this.animated != 'undefined' && this.animated === true if(typeof this.animated != 'undefined' && this.animated === true

View File

@ -37,6 +37,18 @@
· · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
/* ·
·
· Get cookie by name
·
· @param a: cookie name
·
· · · · · · · · · */
function getCookieValue(a) {
var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
return b ? b.pop() : '';
}
/* · /* ·
· ·
@ -726,13 +738,12 @@ function updateAllQueetsTimes() {
· · · · · · · · · */ · · · · · · · · · */
function isLocalURL(url) { function isLocalURL(url) {
if(url.substring(0,window.siteInstanceURL.length) == window.siteInstanceURL // site url if(url.substring(0,window.siteInstanceURL.length) == window.siteInstanceURL) {
|| url.substring(0,window.siteAttachmentURLBase.length) == window.siteAttachmentURLBase // attachment url
|| url.substring(0,window.siteAvatarURLBase.length) == window.siteAvatarURLBase // avatar url
) {
return true; return true;
} }
return false; else {
return false;
}
} }
@ -889,7 +900,6 @@ function cacheSyntaxHighlightingGroups() {
window.userArrayCache = new Object(); window.userArrayCache = new Object();
window.convertUriToUserArrayCacheKey = new Object(); window.convertUriToUserArrayCacheKey = new Object();
window.convertStatusnetProfileUrlToUserArrayCacheKey = new Object(); window.convertStatusnetProfileUrlToUserArrayCacheKey = new Object();
window.convertLocalIdToUserArrayCacheKey = new Object();
function userArrayCacheStore(data) { function userArrayCacheStore(data) {
@ -946,7 +956,6 @@ function userArrayCacheStore(data) {
window.userArrayCache[key].modified = Date.now(); window.userArrayCache[key].modified = Date.now();
// easy conversion between URI and statusnet_profile_url and the key we're using in window.userArrayCache // 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.convertUriToUserArrayCacheKey[dataToStore.local.ostatus_uri] = key;
window.convertStatusnetProfileUrlToUserArrayCacheKey[dataToStore.local.statusnet_profile_url] = key; window.convertStatusnetProfileUrlToUserArrayCacheKey[dataToStore.local.statusnet_profile_url] = key;
} }
@ -961,7 +970,6 @@ function userArrayCacheStore(data) {
window.userArrayCache[key].local = dataToStore.local; window.userArrayCache[key].local = dataToStore.local;
// easy conversion between URI and statusnet_profile_url and the key we're using in window.userArrayCache // 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.convertUriToUserArrayCacheKey[dataToStore.local.ostatus_uri] = key;
window.convertStatusnetProfileUrlToUserArrayCacheKey[dataToStore.local.statusnet_profile_url] = key; window.convertStatusnetProfileUrlToUserArrayCacheKey[dataToStore.local.statusnet_profile_url] = key;
} }
@ -992,13 +1000,9 @@ function userArrayCacheGetByLocalNickname(localNickname) {
} }
function userArrayCacheGetByProfileUrlAndNickname(profileUrl, nickname) { function userArrayCacheGetByProfileUrlAndNickname(profileUrl, nickname) {
var possibleLocalId = false;
if(nickname.substring(0,1) == '@') { if(nickname.substring(0,1) == '@') {
nickname = nickname.substring(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 // the url might match a known profile uri
if(typeof window.convertUriToUserArrayCacheKey[profileUrl] != 'undefined') { if(typeof window.convertUriToUserArrayCacheKey[profileUrl] != 'undefined') {
if(typeof window.userArrayCache[window.convertUriToUserArrayCacheKey[profileUrl]] != 'undefined') { if(typeof window.userArrayCache[window.convertUriToUserArrayCacheKey[profileUrl]] != 'undefined') {
@ -1011,12 +1015,6 @@ function userArrayCacheGetByProfileUrlAndNickname(profileUrl, nickname) {
return window.userArrayCache[window.convertStatusnetProfileUrlToUserArrayCacheKey[profileUrl]]; 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 // 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') { else if(typeof window.userArrayCache[guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(profileUrl, nickname) + '/' + nickname] != 'undefined') {
return window.userArrayCache[guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(profileUrl, nickname) + '/' + nickname]; return window.userArrayCache[guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(profileUrl, nickname) + '/' + nickname];
@ -1048,10 +1046,12 @@ function userArrayCacheGetUserNicknameById(id) {
· · · · · · · · · */ · · · · · · · · · */
function detectLocalOrExternalUserObject(userObject) { function detectLocalOrExternalUserObject(userObject) {
var dataProfileImageUrlWithoutProtocol = removeProtocolFromUrl(userObject.profile_image_url);
if(isLocalURL(userObject.profile_image_url) ) { var siteInstanceURLWithoutProtocol = removeProtocolFromUrl(window.siteInstanceURL);
if(dataProfileImageUrlWithoutProtocol.substring(0,siteInstanceURLWithoutProtocol.length) == siteInstanceURLWithoutProtocol){
return 'local'; return 'local';
} else { }
else {
return 'external'; return 'external';
} }
} }
@ -1090,11 +1090,6 @@ function guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(profileUrl, ni
guessedInstanceUrl = guessedInstanceUrl.slice(0,-1); guessedInstanceUrl = guessedInstanceUrl.slice(0,-1);
} }
// fix new mastodon style profile urls
if(guessedInstanceUrl.indexOf('/@') > -1) {
guessedInstanceUrl = guessedInstanceUrl.substring(0, guessedInstanceUrl.indexOf('/@'));
}
return guessedInstanceUrl; return guessedInstanceUrl;
} }
@ -1256,7 +1251,7 @@ function updateUserDataInStream() {
// profile urls // profile urls
// try to find the last account group with this id, if the statusnet_profile_url seems to // 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 // be changed we replace it wherever we can find it, even in list urls etc that starts with 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) { if($('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'); var oldStatusnetProfileURL = $('a.account-group[data-user-id="' + userArray.local.id + '"]').last().attr('href');
// all links with the exact statusnet_profile_url // all links with the exact statusnet_profile_url
$.each($('[href="' + oldStatusnetProfileURL + '"]'),function(){ $.each($('[href="' + oldStatusnetProfileURL + '"]'),function(){
@ -2248,29 +2243,6 @@ 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 · Updates the browsing history local storage

View File

@ -50,14 +50,9 @@ checkLocalStorage();
window.loggedIn = iterateRecursiveReplaceHtmlSpecialChars(window.loggedIn); window.loggedIn = iterateRecursiveReplaceHtmlSpecialChars(window.loggedIn);
// hack to supress basic auth popup, e.g. if the user has to tabs open and // hack to supress basic auth popup, e.g. if the user has to tabs open and
// log out in one of them. but microsoft browsers and chrome 59+ doesn't support this // log out in one of them. but microsoft browsers doesn't support this
if(typeof bowser != 'undefined') { if(typeof bowser.msie == 'undefined' && typeof bowser.msedge == 'undefined') {
var bowserIntVersion = parseInt(bowser.version,10); window.apiRoot = window.apiRoot.replace('://','://x:x@');
if(typeof bowser.msie == 'undefined'
&& typeof bowser.msedge == 'undefined'
&& !(typeof bowser.chrome != 'undefined' && bowser.chrome === true && bowserIntVersion <= 59)) {
window.apiRoot = window.apiRoot.replace('://','://x:x@');
}
} }
@ -285,6 +280,7 @@ $('body').on('mouseover',function (e) {
possibleNickname = $(e.target).text(); possibleNickname = $(e.target).text();
} }
} }
// see if we have it in cache, otherwise query server // see if we have it in cache, otherwise query server
getUserArrayData(hrefAttr, possibleNickname, timeNow, targetElement, function(userArray, timeOut){ getUserArrayData(hrefAttr, possibleNickname, timeNow, targetElement, function(userArray, timeOut){
@ -327,8 +323,9 @@ $('body').on('mouseover',function (e) {
// we query it for the lastest data // we query it for the lastest data
if((typeof window.userArrayLastRetrieved[hrefAttr] == 'undefined') || (timeNow - window.userArrayLastRetrieved[hrefAttr]) > 60000) { if((typeof window.userArrayLastRetrieved[hrefAttr] == 'undefined') || (timeNow - window.userArrayLastRetrieved[hrefAttr]) > 60000) {
window.userArrayLastRetrieved[hrefAttr] = timeNow; window.userArrayLastRetrieved[hrefAttr] = timeNow;
// local users // local users
if(userArray.local && userArray.local.is_local === true) { if(userArray.local !== null && userArray.local.is_local === true) {
getFromAPI('users/show.json?id=' + userArray.local.screen_name, function(data){ getFromAPI('users/show.json?id=' + userArray.local.screen_name, function(data){
if(data) { if(data) {
var newProfileCard = buildProfileCard(data); var newProfileCard = buildProfileCard(data);
@ -339,7 +336,7 @@ $('body').on('mouseover',function (e) {
} }
// external users // external users
else if(!userArray.local || userArray.local.is_local === false) { else if(userArray.local === null || userArray.local.is_local === false) {
getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(hrefAttr),function(data){ getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(hrefAttr),function(data){
if(data && data.external !== null) { if(data && data.external !== null) {
var newProfileCard = buildExternalProfileCard(data); var newProfileCard = buildExternalProfileCard(data);
@ -386,7 +383,7 @@ function getUserArrayData(maybeProfileUrl,maybeNickname,timeNow,targetElement,ca
if((typeof window.userArrayLastRetrieved[maybeProfileUrl] == 'undefined') || (timeNow - window.userArrayLastRetrieved[maybeProfileUrl]) > 60000) { if((typeof window.userArrayLastRetrieved[maybeProfileUrl] == 'undefined') || (timeNow - window.userArrayLastRetrieved[maybeProfileUrl]) > 60000) {
window.userArrayLastRetrieved[maybeProfileUrl] = timeNow; window.userArrayLastRetrieved[maybeProfileUrl] = timeNow;
getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(maybeProfileUrl),function(data){ getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(maybeProfileUrl),function(data){
if(data) { if(data && data.external !== null) {
// we want hover cards to appear _at least_ 600ms after hover (see below) // we want hover cards to appear _at least_ 600ms after hover (see below)
var timeAfterServerQuery = new Date().getTime(); var timeAfterServerQuery = new Date().getTime();
@ -484,105 +481,6 @@ $('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;
var thirdUrlToTry = 'https://' + domain + '/@' + username; // mastodon
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 {
getFromAPI('qvitter/external_user_show.json?profileurl=' + encodeURIComponent(thirdUrlToTry),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');
}
/* · /* ·
@ -979,7 +877,7 @@ function proceedToSetLanguageAndLogin(data){
// suggest user to help translate if their browsers language does't exist // suggest user to help translate if their browsers language does't exist
if(typeof window.availableLanguages[window.usersLanguageCode] == 'undefined' && !localStorageObjectCache_GET('languageErrorMessageDiscarded',window.usersLanguageNameInEnglish)) { // but don't nag if(typeof window.availableLanguages[window.usersLanguageCode] == 'undefined' && !localStorageObjectCache_GET('languageErrorMessageDiscarded',window.usersLanguageNameInEnglish)) { // but don't nag
$('#page-container').prepend('<div class="language-error-message" data-language-name="' + window.usersLanguageNameInEnglish + '">' + window.siteTitle + ' is not availible in your language (' + replaceHtmlSpecialChars(window.usersLanguageNameInEnglish) + '). Visit <a href="https://git.wmsci.com/wamo/Qvitter/src/branch/develop/locale">Qvitter\'s repository homepage</a> if you want to help us to translate the interface. <span class="discard-error-message"></span></div>'); $('#page-container').prepend('<div class="language-error-message" data-language-name="' + window.usersLanguageNameInEnglish + '">' + window.siteTitle + ' is not availible in your language (' + replaceHtmlSpecialChars(window.usersLanguageNameInEnglish) + '). Visit <a href="https://git.gnu.io/h2p/Qvitter/tree/master/locale">Qvitter\'s repository homepage</a> if you want to help us to translate the interface. <span class="discard-error-message"></span></div>');
} }
// if selected language is too similar to english, we display a message telling people to help with the translation // if selected language is too similar to english, we display a message telling people to help with the translation
@ -1061,15 +959,12 @@ function proceedToSetLanguageAndLogin(data){
$('#accessibility-toggle-link').html(window.sL.accessibilityToggleLink); $('#accessibility-toggle-link').html(window.sL.accessibilityToggleLink);
$('#settingslink .nav-session').attr('data-tooltip',window.sL.profileAndSettings); $('#settingslink .nav-session').attr('data-tooltip',window.sL.profileAndSettings);
$('#top-compose').attr('data-tooltip',window.sL.compose); $('#top-compose').attr('data-tooltip',window.sL.compose);
$('button.upload-image').attr('data-tooltip',window.sL.tooltipAttachFile); $('button.upload-image').attr('data-tooltip',window.sL.tooltipAttachImage);
$('button.shorten').attr('data-tooltip',window.sL.tooltipShortenUrls); $('button.shorten').attr('data-tooltip',window.sL.tooltipShortenUrls);
$('.reload-stream').attr('data-tooltip',window.sL.tooltipReloadStream); $('.reload-stream').attr('data-tooltip',window.sL.tooltipReloadStream);
$('#clear-history').html(window.sL.clearHistory); $('#clear-history').html(window.sL.clearHistory);
$('#user-screen-name, #user-avatar, #user-name').attr('data-tooltip', window.sL.viewMyProfilePage); $('#user-screen-name, #user-avatar, #user-name').attr('data-tooltip', window.sL.viewMyProfilePage);
$('#top-menu-profile-link-view-profile').html(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 // show site body now
$('#user-container').css('display','block'); $('#user-container').css('display','block');
@ -1093,7 +988,7 @@ function proceedToSetLanguageAndLogin(data){
function proceedLoggedOut() { function proceedLoggedOut() {
display_spinner(); display_spinner();
setNewCurrentStream(getStreamFromUrl(),true,false,function(){ setNewCurrentStream(getStreamFromUrl(),true,false,function(){
// $('input#nickname').focus(); --> maybe not a good idea on mobile? $('input#nickname').focus();
$('#page-container').css('opacity','1'); $('#page-container').css('opacity','1');
}); });
} }
@ -1941,34 +1836,42 @@ $('body').on('click','a', function(e) {
} }
// hijack link if we find a matching link that qvitter can handle // hijack link if we find a matching link that qvitter can handle
else { 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) { if(streamObject && streamObject.stream) {
e.preventDefault(); e.preventDefault();
// if this is a user/{id} type link but we know the nickname already // if this is a user/{id} type link we want to find the nickname before setting a new stream
if(streamObject.name == 'profile by id' && streamObject.nickname !== false) { // the main reason is that we want to update the browsers location bar and the .stream-selecton
setNewCurrentStream(pathToStreamRouter(streamObject.nickname),true,streamObject.id); // 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');
}
});
}
} }
// same with group/{id}/id links // same with group/{id}/id links
else if(streamObject.name == 'group notice stream by id') { else if(streamObject.name == 'group notice stream by id') {
@ -2156,9 +2059,10 @@ function checkForNewQueets() {
if(window.loggedIn && (window.currentStreamObject.type == 'notices' || window.currentStreamObject.type == 'notifications')) { if(window.loggedIn && (window.currentStreamObject.type == 'notices' || window.currentStreamObject.type == 'notifications')) {
var lastId = $('#feed-body').children('.stream-item').not('.temp-post').not('.posted-from-form').attr('data-quitter-id-in-stream'); var lastId = $('#feed-body').children('.stream-item').not('.temp-post').not('.posted-from-form').attr('data-quitter-id-in-stream');
var addThisStream = window.currentStreamObject.stream; var addThisStream = window.currentStreamObject.stream;
var timeNow = new Date().getTime();
getFromAPI(addThisStream + qOrAmp(window.currentStreamObject.stream) + 'since_id=' + lastId,function(data){ getFromAPI(addThisStream + qOrAmp(window.currentStreamObject.stream) + 'since_id=' + lastId,function(data){
$('body').removeClass('loading-newer');
if(data) { if(data) {
$('body').removeClass('loading-newer');
if(addThisStream == window.currentStreamObject.stream) { if(addThisStream == window.currentStreamObject.stream) {
addToFeed(data, false, 'hidden'); addToFeed(data, false, 'hidden');
@ -2178,6 +2082,7 @@ function checkForNewQueets() {
} }
} }
/* · /* ·
· ·
· Show hidden queets when user clicks on new-queets-bar · Show hidden queets when user clicks on new-queets-bar
@ -2848,13 +2753,10 @@ $('body').on('click', '.queet-toolbar button',function () {
var queetBoxID = queetBox.attr('id'); var queetBoxID = queetBox.attr('id');
// jquery's .text() function is not consistent in converting <br>:s to \n:s, // jquery's .text() function is not consistent in converting <br>:s to \n:s,
// so we do this detour to make sure line breaks are preserved. // so we do this detour to make sure line breaks are preserved
// In firefox (and maybe some other browsers), queetBox.html() may have <div>s queetBox.html(queetBox.html().replace(/<br>/g, '{{{lb}}}'));
// and may or may not have <br> in them.
// To deal with this, remove any <br>s right before </div> and then add ones.
queetBox.html(queetBox.html().replace(/(<br>)*<\/div>/g, '<br></div>').replace(/({|})/g, '!$1').replace(/<br>/g, '{{{lb}}}'));
var queetText = $.trim(queetBox.text().replace(/^\s+|\s+$/g, '').replace(/\n/g, '')); var queetText = $.trim(queetBox.text().replace(/^\s+|\s+$/g, '').replace(/\n/g, ''));
queetText = queetText.replace(/{{{lb}}}/g, "\n").replace(/!({|})/g, '$1'); queetText = queetText.replace(/{{{lb}}}/g, "\n");
var queetTempText = replaceHtmlSpecialChars(queetText.replace(/\n/g,'<br>')); // no xss var queetTempText = replaceHtmlSpecialChars(queetText.replace(/\n/g,'<br>')); // no xss
queetTempText = queetTempText.replace(/&lt;br&gt;/g,'<br>'); // but preserve line breaks queetTempText = queetTempText.replace(/&lt;br&gt;/g,'<br>'); // but preserve line breaks
@ -3213,10 +3115,6 @@ $('body').on('keyup paste input', 'div.queet-box-syntax', function() {
currentVal = currentVal.replace(/<br>$/, '').replace(/&nbsp;$/, '').replace(/ $/, ''); // fix currentVal = currentVal.replace(/<br>$/, '').replace(/&nbsp;$/, '').replace(/ $/, ''); // fix
$(this).siblings('.syntax-two').html(currentVal); $(this).siblings('.syntax-two').html(currentVal);
// If user click post area before load finished (top gnu logo), this is undefined.
if (!window.syntaxHighlightingRegexps) {
window.syntaxHighlightingRegexps = Object();
}
// loop through the regexps and highlight // loop through the regexps and highlight
$.each(window.syntaxHighlightingRegexps,function(k,v){ $.each(window.syntaxHighlightingRegexps,function(k,v){
@ -3381,66 +3279,48 @@ $('body').on('keyup', 'div.queet-box-syntax', function(e) {
}); });
}); });
window.lastMention = new Object();
// check for user mentions // check for user mentions
$('body').on('keyup', 'div.queet-box-syntax', function(e) { checkMentions(e, true);}); window.lastMention = new Object();
// check for group mentions $('body').on('keyup', 'div.queet-box-syntax', function(e) {
$('body').on('keyup', 'div.queet-box-syntax', function(e) { checkMentions(e, false);});
/** var queetBox = $(this);
* check for user/group mentions
*
* @param {Object} e: Event object
* @param {boolean} isUser
*/
function checkMentions(e, isUser) {
var mark = '!';
var prefix = 'group';
if (isUser) {
mark = '@';
prefix = 'user';
}
// var queetBox = $(this);
var queetBox = $('body div.queet-box-syntax');
var cursorPosArray = getSelectionInElement(queetBox[0]); var cursorPosArray = getSelectionInElement(queetBox[0]);
var cursorPos = cursorPosArray[0]; var cursorPos = cursorPosArray[0];
if(e.keyCode != '40' && e.keyCode != '38' && e.keyCode != '13' && e.keyCode != '9') { // add space before linebreaks (to separate mentions in beginning of new lines when .text():ing later)
if(e.keyCode == '13') {
e.preventDefault();
var range = createRangeFromCharacterIndices(queetBox[0], cursorPos, cursorPos);
range.insertNode(document.createTextNode(" \n"));
}
else if(e.keyCode != '40' && e.keyCode != '38' && e.keyCode != '13' && e.keyCode != '9') {
var contents = queetBox.text().substring(0,cursorPos); var contents = queetBox.text().substring(0,cursorPos);
var mentionPos = contents.lastIndexOf(mark); var mentionPos = contents.lastIndexOf('@');
var check_contents = contents.substring(mentionPos - 1, cursorPos); var check_contents = contents.substring(mentionPos - 1, cursorPos);
var regex = new RegExp('(^|\s|\.|\n)(' + mark + ')[a-zA-Z0-9]+'); var regex = /(^|\s|\.|\n)(@)[a-zA-Z0-9]+/;
var match = check_contents.match(regex); var match = check_contents.match(regex);
if (contents.indexOf(mark) >= 0 && match) { if (contents.indexOf('@') >= 0 && match) {
if(contents.lastIndexOf(mark) > 1) { if(contents.lastIndexOf('@') > 1) {
match[0] = match[0].substring(1,match[0].length); match[0] = match[0].substring(1,match[0].length);
} }
if((contents.lastIndexOf(mark)+match[0].length) == cursorPos) { if((contents.lastIndexOf('@')+match[0].length) == cursorPos) {
queetBox.siblings('.mentions-suggestions').children('.' + prefix + '-suggestion').remove(); queetBox.siblings('.mentions-suggestions').children('.user-suggestion').remove();
queetBox.siblings('.mentions-suggestions').css('top',(queetBox.height()+20) + 'px'); queetBox.siblings('.mentions-suggestions').css('top',(queetBox.height()+20) + 'px');
var term = match[0].substring(match[0].lastIndexOf(mark)+1, match[0].length).toLowerCase(); var term = match[0].substring(match[0].lastIndexOf('@')+1, match[0].length).toLowerCase();
window.lastMention.mentionPos = mentionPos; window.lastMention.mentionPos = mentionPos;
window.lastMention.cursorPos = cursorPos; window.lastMention.cursorPos = cursorPos;
// see if any user/group we're following matches // see if anyone we're following matches
var suggestionsToShow = []; var suggestionsToShow = [];
var suggestionsUsernameCount = {}; var suggestionsUsernameCount = {};
if (isUser) { suggestionsUsernameCount[window.loggedIn.screen_name] = 1; // any suggestions with the same screen name as mine will get their server url added
suggestionsUsernameCount[window.loggedIn.screen_name] = 1; // any suggestions with the same screen name as mine will get their server url added $.each(window.following,function(){
}
var targets = isUser ? (window.following) : (window.groupMemberships);
$.each(targets, function(){
var userregex = new RegExp(term); var userregex = new RegExp(term);
if(this.username.toLowerCase().match(userregex) || this.name.toLowerCase().match(userregex)) { if(this.username.toLowerCase().match(userregex) || this.name.toLowerCase().match(userregex)) {
var suggestion = {avatar:this.avatar, name:this.name, username:this.username,url:this.url}; suggestionsToShow.push({avatar:this.avatar, name:this.name, username:this.username,url:this.url});
if (!isUser) {
suggestion.id = this.id;
}
suggestionsToShow.push(suggestion);
// count the usernames to see if we need to show the server for any of them // count the usernames to see if we need to show the server for any of them
if(typeof suggestionsUsernameCount[this.username] != 'undefined') { if(typeof suggestionsUsernameCount[this.username] != 'undefined') {
@ -3456,27 +3336,96 @@ function checkMentions(e, isUser) {
$.each(suggestionsToShow,function(){ $.each(suggestionsToShow,function(){
var serverHtml = ''; var serverHtml = '';
if(suggestionsUsernameCount[this.username]>1 && this.url !== false) { if(suggestionsUsernameCount[this.username]>1 && this.url !== false) {
serverHtml = isUser ? ('@' + this.url) : (this.url + '/group/'); serverHtml = '@' + this.url;
}
if (isUser) {
queetBox.siblings('.mentions-suggestions').append('<div class="user-suggestion" title="@' + this.username + serverHtml + '"><img height="24" width="24" src="' + this.avatar + '" /><strong>' + this.name + '</strong> @<span>' + this.username + serverHtml + '</span></div>')
}
else {
queetBox.siblings('.mentions-suggestions').append('<div class="group-suggestion" title="' + serverHtml + this.username + '" data-group-id="' + this.id + '"><img height="24" width="24" src="' + this.avatar + '" /><strong>' + this.name + '</strong> !<span>' + this.username + '</span></div>')
} }
queetBox.siblings('.mentions-suggestions').append('<div class="user-suggestion" title="@' + this.username + serverHtml + '"><img height="24" width="24" src="' + this.avatar + '" /><strong>' + this.name + '</strong> @<span>' + this.username + serverHtml + '</span></div>')
}); });
} }
else { else {
queetBox.siblings('.mentions-suggestions').children('.' + prefix + '-suggestion').remove(); queetBox.siblings('.mentions-suggestions').children('.user-suggestion').remove();
} }
} }
else { else {
queetBox.siblings('.mentions-suggestions').children('.' + prefix + '-suggestion').remove(); queetBox.siblings('.mentions-suggestions').children('.user-suggestion').remove();
} }
} }
} });
// check for group mentions
$('body').on('keyup', 'div.queet-box-syntax', function(e) {
var queetBox = $(this);
var cursorPosArray = getSelectionInElement(queetBox[0]);
var cursorPos = cursorPosArray[0];
// add space before linebreaks (to separate mentions in beginning of new lines when .text():ing later)
if(e.keyCode == '13') {
e.preventDefault();
var range = createRangeFromCharacterIndices(queetBox[0], cursorPos, cursorPos);
range.insertNode(document.createTextNode(" \n"));
}
else if(e.keyCode != '40' && e.keyCode != '38' && e.keyCode != '13' && e.keyCode != '9') {
var contents = queetBox.text().substring(0,cursorPos);
var mentionPos = contents.lastIndexOf('!');
var check_contents = contents.substring(mentionPos - 1, cursorPos);
var regex = /(^|\s|\.|\n)(!)[a-zA-Z0-9]+/;
var match = check_contents.match(regex);
if (contents.indexOf('!') >= 0 && match) {
if(contents.lastIndexOf('!') > 1) {
match[0] = match[0].substring(1,match[0].length);
}
if((contents.lastIndexOf('!')+match[0].length) == cursorPos) {
queetBox.siblings('.mentions-suggestions').children('.group-suggestion').remove();
queetBox.siblings('.mentions-suggestions').css('top',(queetBox.height()+20) + 'px');
var term = match[0].substring(match[0].lastIndexOf('!')+1, match[0].length).toLowerCase();
window.lastMention.mentionPos = mentionPos;
window.lastMention.cursorPos = cursorPos;
// see if any group we're member of matches
var suggestionsToShow = [];
var suggestionsUsernameCount = {};
$.each(window.groupMemberships,function(){
var userregex = new RegExp(term);
if(this.username.toLowerCase().match(userregex) || this.name.toLowerCase().match(userregex)) {
suggestionsToShow.push({id:this.id, avatar:this.avatar, name:this.name, username:this.username,url:this.url});
// count the usernames to see if we need to show the server for any of them
if(typeof suggestionsUsernameCount[this.username] != 'undefined') {
suggestionsUsernameCount[this.username] = suggestionsUsernameCount[this.username] + 1;
}
else {
suggestionsUsernameCount[this.username] = 1;
}
}
});
// show matches
$.each(suggestionsToShow,function(){
var serverHtml = '';
if(suggestionsUsernameCount[this.username]>1 && this.url !== false) {
serverHtml = this.url + '/group/';
}
queetBox.siblings('.mentions-suggestions').append('<div class="group-suggestion" title="' + serverHtml + this.username + '" data-group-id="' + this.id + '"><img height="24" width="24" src="' + this.avatar + '" /><strong>' + this.name + '</strong> !<span>' + this.username + '</span></div>')
});
}
else {
queetBox.siblings('.mentions-suggestions').children('.group-suggestion').remove();
}
}
else {
queetBox.siblings('.mentions-suggestions').children('.group-suggestion').remove();
}
}
});
/* · /* ·
· ·

View File

@ -57,14 +57,7 @@ window.pluginStreamObjects = [];
· · · · · · · · · */ · · · · · · · · · */
function setUrlFromStream(streamObject) { 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);
}
} }
@ -394,7 +387,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.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.id = pathSplit[1];
streamObject.stream = 'qvitter/statuses/user_timeline.json?id=' + streamObject.id + '&withuserarray=1'; streamObject.stream = 'statuses/user_timeline.json?id=' + streamObject.id + '&withuserarray=1';
return streamObject; return streamObject;
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -156,50 +156,46 @@
"myListWithListName":"La meva llista: {list-name}", "myListWithListName":"La meva llista: {list-name}",
"listMembers":"Membres", "listMembers":"Membres",
"listSubscribers":"Subscriptors", "listSubscribers":"Subscriptors",
"ERRORcouldNotFindList":"La llista no existeix.", "ERRORcouldNotFindList":"There is no such list.",
"emailAlreadyInUse":"Ja en ús", "emailAlreadyInUse":"Already in use",
"addEditLanguageLink":"Ajuda a traduir {site-title} a un altre idioma", "addEditLanguageLink":"Ajuda a traduir {site-title} a un altre idioma",
"onlyPartlyTranslated":"{site-title} està només traduït parcialment a <em>{language-name}</em> ({percent}%). Tu pots ajudar a completar la traducció a <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>", "onlyPartlyTranslated":"{site-title} està només traduït parcialment a <em>{language-name}</em> ({percent}%). Tu pots ajudar a completar la traducció a <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Iniciar una conversa", "startRant":"Start a rant",
"continueRant":"Continuar la conversa", "continueRant":"Continue the rant",
"hideEmbeddedInTimeline":"Amagar el contingut incrustat en aquesta línia temporal", "hideEmbeddedInTimeline":"Hide embedded content in this timeline",
"hideQuotesInTimeline":"Amagar cites en aquesta línia temporal", "hideQuotesInTimeline":"Hide quotes in this timeline",
"userBlocks":"Usuaris als qui has bloquejat", "userBlocks":"Accounts you're blocking",
"buttonBlocked":"Bloquejat", "buttonBlocked":"Bloquejat",
"buttonUnblock":"Desbloqueja", "buttonUnblock":"Desbloqueja",
"failedBlockingUser":"Va fallar el bloqueig a l'usuari.", "failedBlockingUser":"Failed to block the user.",
"failedUnblockingUser":"Va fallar el desbloqueig a l'usuari.", "failedUnblockingUser":"Failed to unblock the user.",
"unblockUser": "Desbloqueja {username}", "unblockUser": "Desbloqueja {username}",
"tooltipBlocksYou":"Estàs bloquejat de seguir {username}.", "tooltipBlocksYou":"Estàs bloquejat de seguir {username}.",
"silenced":"Silenciat", "silenced":"Silenciat",
"silencedPlural":"Perfils silenciats", "silencedPlural":"Perfils silenciats",
"silencedUsersOnThisInstance":"Perfils silenciats a {site-title}", "silencedUsersOnThisInstance":"Perfils silenciats a {site-title}",
"sandboxed":"Aïllat", "sandboxed":"Sandboxed",
"sandboxedPlural":"Perfils aïllats", "sandboxedPlural":"Sandboxed profiles",
"sandboxedUsersOnThisInstance":"Perfils aïllats en {site-title}", "sandboxedUsersOnThisInstance":"Sandboxed profiles on {site-title}",
"silencedStreamDescription":"Els usuaris prohibits no poden iniciar sessió ni publicar queets i els ja publicats s'ocultaran. Per a usuaris locals és com una eliminació reversible; per a usuaris remots és com un bloqueig global.", "silencedStreamDescription":"Silenced users can't login or post quips and the quips they've already posted are hidden. For local users it's like a delete that can be reversed, for remote users it's like a site wide block.",
"sandboxedStreamDescription":"Els queets d'usuaris aïllats estan exclosos de la línia temporal pública i de tota la xarxa coneguda. Els queets publicats durant l'aïllament no s'inclouran en les línies temporals públiques encara que es desactivi l'aïllament a l'usuari.", "sandboxedStreamDescription":"Quips from sandboxed users are excluded from the Public Timeline and The Whole Known Network. Apart from that, they can use the site like any other user.",
"onlyShowNotificationsFromUsersIFollow":"Només mostrar notificacions d'usuaris als qui segueixo", "onlyShowNotificationsFromUsersIFollow":"Only show notifications from users I follow",
"userOptions":"Més opcions d'usuari", "userOptions":"More user actions",
"silenceThisUser":"Prohibir a {nickname}", "silenceThisUser":"Silence {nickname}",
"sandboxThisUser":"Aïllar a {nickname}", "sandboxThisUser":"Sandbox {nickname}",
"unSilenceThisUser":"Desactivar la prohibició de {nickname}", "unSilenceThisUser":"Unsilence {nickname}",
"unSandboxThisUser":"Desactivar l'aïllament de {nickname}", "unSandboxThisUser":"Unsandbox {nickname}",
"ERRORfailedSandboxingUser":"Va fallar l'aïllament o la seva desactivació de l'usuari", "ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
"ERRORfailedSilencingUser":"Va fallar la prohibició o la seva desactivació de l'usuari", "ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
"muteUser":"Silenciar", "muteUser":"Mute",
"unmuteUser":"Desactivar silenci", "unmuteUser":"Unmute",
"hideNotificationsFromMutedUsers":"Amagar notificacions d'usuaris silenciats", "hideNotificationsFromMutedUsers":"Hide notifications from muted users",
"thisIsANoticeFromAMutedUser":"Has silenciat a l'autor d'aquest queet. Fes clic per mostrar-ho igualment.", "thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
"userMutes":"Usuaris que has silenciat", "userMutes":"Accounts you're muting",
"userBlocked":"Comptes bloquejats", "userBlocked":"Blocked accounts",
"userMuted":"Comptes silenciats", "userMuted":"Muted accounts",
"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.", "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":"Perfil i ajustos", "profileAndSettings":"Profile and settings",
"profileSettings":"Ajustos del perfil", "profileSettings":"Profile settings",
"thisIsABookmark":"Això és un marcador va crear en l'interfície Clàssic", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>Atenció!</strong>Est és un usuari remot. Aquesta pàgina és només una còpia en caché del seu perfil, i inclou només dades conegudes per aquesta instància social de GNU.Aneu a la <a href=\"{remote-profile-url}\" donthijack>perfil de l'usuari en el seu servidor</a> per veure el seu perfil complet.",
"findSomeone":"Troba a algú",
"findSomeoneTooltip":"Introdueixi un nom d'usuari o una adreça URL de perfil, per exemple @localuser o https://remote.instance/nickname",
"tooltipAttachFile":"Adjuntar un arxiu"
} }

View File

@ -125,11 +125,11 @@
"keyboardShortcuts": "Tastatur-Kürzel", "keyboardShortcuts": "Tastatur-Kürzel",
"classicInterface": "Klassische Ansicht: {site-title}", "classicInterface": "Klassische Ansicht: {site-title}",
"accessibilityToggleLink": "Nutzer von Screenreadern klicken bitte hier, um zur klassischen Version von {site-title} zu gelangen.", "accessibilityToggleLink": "Nutzer von Screenreadern klicken bitte hier, um zur klassischen Version von {site-title} zu gelangen.",
"tooltipBookmarkStream": "Diesen Stream zu den Lesezeichen hinzufügen", "tooltipBookmarkStream": "Diesen Datenstrom zu den Lesezeichen beifügen",
"tooltipTopMenu": "Menü und Einstellungen", "tooltipTopMenu": "Menü und Einstellungen",
"tooltipAttachImage": "Bild anfügen", "tooltipAttachImage": "Bild anfügen",
"tooltipShortenUrls": "Alle URLs im Queet kürzen", "tooltipShortenUrls": "Alle URLs im Queet kürzen",
"tooltipReloadStream": "Diesen Stream aktualisieren", "tooltipReloadStream": "Diesen Datenstrom aktualisieren",
"tooltipRemoveBookmark": "Dieses Lesezeichen löschen", "tooltipRemoveBookmark": "Dieses Lesezeichen löschen",
"clearHistory": "Verlauf löschen", "clearHistory": "Verlauf löschen",
"ERRORsomethingWentWrong": "Irgendetwas ging da schief.", "ERRORsomethingWentWrong": "Irgendetwas ging da schief.",
@ -197,9 +197,5 @@
"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;.", "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", "profileAndSettings":"Profil und Einstellungen",
"profileSettings":"Profileinstellungen", "profileSettings":"Profileinstellungen",
"thisIsABookmark":"Dies ist ein Lesezeichen das in der Klassischen Ansicht erstellt wurde", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>Achtung!</strong> Dies ist ein entfernter Nutzer. Diese Seite ist nur eine zwischengespeicherte Kopie des Profils und enthält nur Daten, welcher dieser GNU Social Instanz bekannt sind. Gehe zum <a href=\"{remote-profile-url}\" donthijack>Profil des Nutzers auf seinem Server</a> um das gesamte Profile zu sehen.",
"findSomeone":"Suche jemanden",
"findSomeoneTooltip":"Gib einen Benutzernamen oder eine Profil-URL ein, z.B. @lokalernutzer oder https://entfernte.instanz/nickname",
"tooltipAttachFile":"Datei anhängen"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -187,19 +187,14 @@
"unSandboxThisUser":"Malsablokesti {nickname}", "unSandboxThisUser":"Malsablokesti {nickname}",
"ERRORfailedSandboxingUser":"Malsukcesis sablokestigi/malsablokestigi la uzanton", "ERRORfailedSandboxingUser":"Malsukcesis sablokestigi/malsablokestigi la uzanton",
"ERRORfailedSilencingUser":"Malsukcesis silentigi/malsilentigi la uzanton", "ERRORfailedSilencingUser":"Malsukcesis silentigi/malsilentigi la uzanton",
"muteUser":"Mutigi", "muteUser":"Mute",
"unmuteUser":"Mlmutigi", "unmuteUser":"Unmute",
"hideNotificationsFromMutedUsers":"Kaŝi sciigojn el mutigitaj uzantoj", "hideNotificationsFromMutedUsers":"Hide notifications from muted users",
"thisIsANoticeFromAMutedUser":"Vi mutigis la verkinton de ĉi tiu mesaĝo. Alklaku ĉi tien por montri ĝi ĉiaokaze.", "thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
"userMutes":"Mutigitaj kontoj", "userMutes":"Accounts you're muting",
"userBlocked":"Blokitaj kontoj", "userBlocked":"Blocked accounts",
"userMuted":"Mutigitaj kontoj", "userMuted":"Muted accounts",
"mutedStreamDescription":"Vi kaŝis ĉi tiujn kontojn el via tempolinio. Vi ankoraŭ ricevos sciigojn el tiuj kontoj, krom se vi elektu &quot;Kaŝi sciigojn el mutigitaj uzantoj&quot; el la dentorado-menuo en la paĝoj pri sciigoj.", "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":"Profilo kaj agordoj", "profileAndSettings":"Profile and settings",
"profileSettings":"Profilaj agordoj", "profileSettings":"Profile settings"
"thisIsABookmark":"Ĉi tio estas paĝosigno kreita en la klasika interfaco",
"thisIsARemoteUser":"<strong>Atentu!</strong> Ĉi tiu estas fora uzanto. Ĉi tiu paĝo estas nur konservita kopio el ĝia profilo, kaj enhavas nur datumojn konatajn de ĉi tiu GNU social-retejo. Vizitu <a href=\"{remote-profile-url}\" donthijack>la uzantprofilon ĉi ĝia servilo</a> por vidi la tutan profilon.",
"findSomeone":"Trovu iun",
"findSomeoneTooltip":"Enigu uzantnomon aŭ profilo-adreson, ekz. @lokauzanto aŭ https://fora.retejo/kromnomo",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -196,9 +196,5 @@
"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.", "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", "profileAndSettings":"Perfil y ajustes",
"profileSettings":"Ajustes del perfil", "profileSettings":"Ajustes del perfil",
"thisIsABookmark":"Este es un marcador creado en la interfaz Classic", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>Atención!</strong> Este es un usuario remoto. Esta página es sólo una copia en caché de su perfil, e incluye sólo datos conocidos por esta instancia social de GNU. Ve a la <a href=\"{remote-profile-url}\" donthijack>perfil de usuario en su servidor</a> para ver su perfil completo.",
"findSomeone":"Encuentra a alguien",
"findSomeoneTooltip":"Introduzca un nombre de usuario o una dirección URL de perfil, por ejemplo @localuser o https://remote.instance/nickname",
"tooltipAttachFile":"Adjuntar un archivo"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Perfiles y configuraciones",
"profileSettings":"Perfil y configuración", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Perfil y ajustes",
"profileSettings":"Ajustes del perfil", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -115,19 +115,19 @@
"FAQ": "FAQ", "FAQ": "FAQ",
"inviteAFriend": "دعوت از دوستانتان", "inviteAFriend": "دعوت از دوستانتان",
"goToExternalProfile": "رفتن به نمایه کامل", "goToExternalProfile": "رفتن به نمایه کامل",
"cropAndSave": "برش و ذخیره", "cropAndSave": "Crop and save",
"showTerms": "Read our Terms of Use", "showTerms": "Read our Terms of Use",
"ellipsisMore": "بیشتر", "ellipsisMore": "More",
"blockUser": "Block {username}", "blockUser": "Block {username}",
"goToOriginalNotice": "Go to original notice", "goToOriginalNotice": "Go to original notice",
"goToTheUsersRemoteProfile": "Go to the user's remote profile", "goToTheUsersRemoteProfile": "Go to the user's remote profile",
"clickToDrag":"کلیک برای کشیدن", "clickToDrag":"Click to drag",
"keyboardShortcuts":"میانبرهای کیبورد", "keyboardShortcuts":"Keyboard shortcuts",
"classicInterface":"کلاسیک {site-title}", "classicInterface":"Classic {site-title}",
"accessibilityToggleLink":"For better accessibility, click this link to switch to the classic interface", "accessibilityToggleLink":"For better accessibility, click this link to switch to the classic interface",
"tooltipBookmarkStream":"Add this stream to your bookmarks", "tooltipBookmarkStream":"Add this stream to your bookmarks",
"tooltipTopMenu":"منو و تنظیمات", "tooltipTopMenu":"Menu and settings",
"tooltipAttachImage":"پیوست عکس", "tooltipAttachImage":"Attach an image",
"tooltipShortenUrls":"Shorten all URLs in the Queet", "tooltipShortenUrls":"Shorten all URLs in the Queet",
"tooltipReloadStream":"Refresh this stream", "tooltipReloadStream":"Refresh this stream",
"tooltipRemoveBookmark":"Remove this bookmark", "tooltipRemoveBookmark":"Remove this bookmark",
@ -136,7 +136,7 @@
"ERRORmustBeLoggedIn":"You must be logged in to view this stream.", "ERRORmustBeLoggedIn":"You must be logged in to view this stream.",
"ERRORcouldNotFindUserWithNickname":"Could not find a user with nickname \"{nickname}\" on this server", "ERRORcouldNotFindUserWithNickname":"Could not find a user with nickname \"{nickname}\" on this server",
"ERRORcouldNotFindGroupWithNickname":"Could not find a group with nickname \"{nickname}\" on this server", "ERRORcouldNotFindGroupWithNickname":"Could not find a group with nickname \"{nickname}\" on this server",
"ERRORcouldNotFindPage":"برگه پیدا نشد", "ERRORcouldNotFindPage":"Could not find that page.",
"ERRORnoticeRemoved": "This notice has been removed.", "ERRORnoticeRemoved": "This notice has been removed.",
"ERRORnoContactWithServer": "Can not establish a connection to the server. The server could be overloaded, or there might be a problem with your internet connecton. Please try again later!", "ERRORnoContactWithServer": "Can not establish a connection to the server. The server could be overloaded, or there might be a problem with your internet connecton. Please try again later!",
"ERRORattachmentUploadFailed": "The upload failed. The format might be unsupported or the size too large.", "ERRORattachmentUploadFailed": "The upload failed. The format might be unsupported or the size too large.",
@ -153,7 +153,7 @@
"newNotifications": "{new-notice-count} new notifications", "newNotifications": "{new-notice-count} new notifications",
"thisIsANoticeFromABlockedUser":"Warning: This is a notice from a user you have blocked. Click to show it.", "thisIsANoticeFromABlockedUser":"Warning: This is a notice from a user you have blocked. Click to show it.",
"nicknamesListWithListName":"{nickname}s list: {list-name}", "nicknamesListWithListName":"{nickname}s list: {list-name}",
"myListWithListName":"لیست من: {list-name}", "myListWithListName":"My list: {list-name}",
"listMembers":"Members", "listMembers":"Members",
"listSubscribers":"Subscribers", "listSubscribers":"Subscribers",
"ERRORcouldNotFindList":"There is no such list.", "ERRORcouldNotFindList":"There is no such list.",
@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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":"پیداکردن کسی",
"findSomeoneTooltip":"Input a username or a profile url, e.g. @localuser or https://remote.instance/nickname",
"tooltipAttachFile":"پیوست فایل"
} }

View File

@ -198,9 +198,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Perfil e axustes",
"profileSettings":"Axustes do perfil", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"mutedStreamDescription":"הסתרת את חשבונות אלה מתוך ציר הזמן שלך. You will still recieve notifications from these accounts, unless you select &quot;הסתר התרעות ממשתמשים מוסתרים&quot; from the cog wheel menu on the notifications page.", "mutedStreamDescription":"הסתרת את חשבונות אלה מתוך ציר הזמן שלך. You will still recieve notifications from these accounts, unless you select &quot;הסתר התרעות ממשתמשים מוסתרים&quot; from the cog wheel menu on the notifications page.",
"profileAndSettings":"פרופיל והגדרות", "profileAndSettings":"פרופיל והגדרות",
"profileSettings":"הגדרות פרופיל", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -194,9 +194,5 @@
"mutedStreamDescription":"Դուք թացրել եք այս օգտատերերին Ձեր հոսքից։ Դուք կշարունակեք ստանալ այս օգտատերերից ծանուցումներ, եթե չընտրեք &quot;Թաքցնել արհամարհվող օգտատերերի ծանուցումները &quot; Ծանուցումների էջի մենյուի կարգավորումներում", "mutedStreamDescription":"Դուք թացրել եք այս օգտատերերին Ձեր հոսքից։ Դուք կշարունակեք ստանալ այս օգտատերերից ծանուցումներ, եթե չընտրեք &quot;Թաքցնել արհամարհվող օգտատերերի ծանուցումները &quot; Ծանուցումների էջի մենյուի կարգավորումներում",
"profileAndSettings":"Էջ և կարգավորումներ", "profileAndSettings":"Էջ և կարգավորումներ",
"profileSettings":"Էջի կարգավորումներ", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -1,205 +0,0 @@
{
"directionality":"ltr",
"languageName": "Interlingua",
"loginUsername": "Nomine de usator o adresse de e-mail",
"loginPassword": "Contrasigno",
"loginSignIn": "Aperir session",
"loginRememberMe": "Memorar me",
"loginForgotPassword": "Contrasigno oblidate?",
"notices": "Granas",
"followers": "Sequitores",
"following": "Sequente",
"groups": "Gruppos",
"compose": "Que passa?",
"queetVerb": "Inviar",
"queetsNounPlural": "Granas",
"logout": "Clauder session",
"languageSelected": "Lingua:",
"viewMyProfilePage": "Vider mi pagina de profilo",
"expand": "Displicar",
"collapse": "Plicar",
"details": "Detalios",
"expandFullConversation": "Displicar tote le conversation",
"replyVerb": "Responder",
"requeetVerb": "Disseminar",
"favoriteVerb": "Favorir",
"requeetedVerb": "Disseminate",
"favoritedVerb": "Favorite",
"replyTo": "Responder a",
"requeetedBy": "Disseminate per {requeeted-by}",
"favoriteNoun": "Favorite",
"favoritesNoun": "Favorites",
"requeetNoun": "Dissemination",
"requeetsNoun": "Disseminationes",
"newQueet": "{new-notice-count} nove grana",
"newQueets": "{new-notice-count} nove granas",
"longmonthsJanuary": "januario",
"longmonthsFebruary": "februario",
"longmonthsMars": "martio",
"longmonthsApril": "april",
"longmonthsMay": "mai",
"longmonthsJune": "junio",
"longmonthsJuly": "julio",
"longmonthsAugust": "augusto",
"longmonthsSeptember": "septembre",
"longmonthsOctober": "octobre",
"longmonthsNovember": "novembre",
"longmonthsDecember": "decembre",
"shortmonthsJanuary": "jan",
"shortmonthsFebruary": "feb",
"shortmonthsMars": "mar",
"shortmonthsApril": "apr",
"shortmonthsMay": "mai",
"shortmonthsJune": "jun",
"shortmonthsJuly": "jul",
"shortmonthsAugust": "aug",
"shortmonthsSeptember": "sep",
"shortmonthsOctober": "oct",
"shortmonthsNovember": "nov",
"shortmonthsDecember": "dec",
"time12am": "{time} am",
"time12pm": "{time} pm",
"longDateFormat": "{time12} le {day} de {month} {year}",
"shortDateFormatSeconds": "{seconds}s",
"shortDateFormatMinutes": "{minutes}m",
"shortDateFormatHours": "{hours}h",
"shortDateFormatDate": "{day} {month}",
"shortDateFormatDateAndY": "{day} {month} {year}",
"now": "ora",
"posting": "entrata",
"viewMoreInConvBefore": "← Vider plus in conversation",
"viewMoreInConvAfter": "Vider plus in conversation →",
"mentions": "Mentiones",
"timeline": "Chronologia",
"publicTimeline": "Chronologia public",
"publicAndExtTimeline": "Tote le rete cognoscite",
"searchVerb": "Cercar",
"deleteVerb": "Deler",
"cancelVerb": "Cancellar",
"deleteConfirmation": "Es tu secur de voler deler iste grana?",
"userExternalFollow": "Sequer a distantia",
"userExternalFollowHelp": "ID de tu conto (p.ex. usator@example.net).",
"userFollow": "Sequer",
"userFollowing": "Sequente",
"userUnfollow": "Non plus sequer",
"joinGroup": "Adherer",
"joinExternalGroup": "Adherer a distantia",
"isMemberOfGroup": "Membro",
"leaveGroup": "Quitar",
"memberCount": "Membros",
"adminCount": "Administratores",
"settings": "Configuration",
"saveChanges": "Salveguardar",
"linkColor": "Color de ligamines",
"backgroundColor": "Color de fundo",
"newToQuitter": "Nove a {site-title}?",
"signUp": "Crear conto",
"signUpFullName": "Nomine complete",
"signUpEmail": "E-mail",
"signUpButtonText": "Crear conto sur {site-title}",
"welcomeHeading": "Benvenite a {site-title}.",
"welcomeText": "Nos es un <span id=\"federated-tooltip\"><div id=\"what-is-federation\">\"Federation\" vole dicer que non es necessari un conto de {site-title} pro poter sequer, esser sequite per, o interager con usatores de {site-title}. On pote crear un conto sur qualcunque servitor de StatusNet o GNU Social o altere servicio basate sur le protocollo <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">Ostatus</a>! Non mesmo es necessari adherer a un servitor essaya installar le elegante software <a href=\"http://www.gnu.org/software/social/\">GNU social</a> sur le prorpie servitor! :)</div>federation</span> de microblogatores qui se preoccupa de justitia social e solidaritate e vole quitar le servicios capitalista centralisate.",
"registerNickname": "Pseudonymo",
"registerHomepage": "Pagina personal",
"registerBio": "Biographia",
"registerLocation": "Loco",
"registerRepeatPassword": "Repete contrasigno",
"moreSettings": "Altere parametros",
"otherServers": "Alternativemente, crea un conto sur un altere servitor del rete GNU Social. <a href=\"http://federation.skilledtests.com/select_your_server.html\">Comparation</a>",
"editMyProfile": "Modificar profilo",
"notifications": "Notificationes",
"xFavedYourQueet": "ha favorite tu grana",
"xRepeatedYourQueet": "ha disseminate tu grana",
"xStartedFollowingYou": "ha comenciate a sequer te",
"followsYou": "te seque",
"FAQ": "FAQ",
"inviteAFriend": "Invita un amico!",
"goToExternalProfile": "Visitar le profilo complete",
"cropAndSave": "Taliar e salveguardar",
"showTerms": "Leger nostre conditiones de uso",
"ellipsisMore": "Plus",
"blockUser": "Blocar",
"goToOriginalNotice": "Visitar le grana original",
"goToTheUsersRemoteProfile": "Visitar le profilo distante del usator",
"clickToDrag":"Clicca pro traher",
"keyboardShortcuts":"Claves accelerator",
"classicInterface":"{site-title} classic",
"accessibilityToggleLink":"Pro melior accessibilitate, clicca sur iste ligamine pro cambiar al interfacie classic",
"tooltipBookmarkStream":"Adder iste fluxo a tu marcapaginas",
"tooltipTopMenu":"Menu e configuration",
"tooltipAttachImage":"Attachar un imagine",
"tooltipShortenUrls":"Abbreviar tote le URLs in le grana",
"tooltipReloadStream":"Refrescar iste fluxo",
"tooltipRemoveBookmark":"Remover iste marcapginas",
"clearHistory":"Rader historia de navigation",
"ERRORsomethingWentWrong":"Un error ha occurrite.",
"ERRORmustBeLoggedIn":"Es necessari aperir session pro vider iste fluxo.",
"ERRORcouldNotFindUserWithNickname":"Non se trova un usator con pseudonymo \"{nickname}\" sur iste servitor",
"ERRORcouldNotFindGroupWithNickname":"Non se trova un gruppo con pseudonymo \"{nickname}\" sur iste servitor",
"ERRORcouldNotFindPage":"Le pagina non ha essite trovate.",
"ERRORnoticeRemoved": "Iste grana ha essite removite.",
"ERRORnoContactWithServer": "Impossibile establir un connexion al servitor. Le servitor poterea esser supercargate, o il poterea haber un problema con tu connextion a internet. Per favor, reproba plus tarde!",
"ERRORattachmentUploadFailed": "Le incargamento ha fallite. Le formato pote esser non supportate o le dimension pote esser troppo grande.",
"hideRepliesToPeopleIDoNotFollow":"Celar responsas a personas que io non seque",
"markAllNotificationsAsSeen":"Marcar tote le notificationes como vidite",
"notifyRepliesAndMentions":"Mentiones e responsas",
"notifyFavs":"Favorites",
"notifyRepeats":"Disseminationes",
"notifyFollows":"Nove sequitores",
"timelineOptions":"Optiones de chronologia",
"ERRORfailedSavingYourSetting":"Error al salveguardar le configuration",
"ERRORfailedMarkingAllNotificationsAsRead":"Error al marcar tote le notificationes como vidite.",
"newNotification": "{new-notice-count} nove notification",
"newNotifications": "{new-notice-count} nove notificationes",
"thisIsANoticeFromABlockedUser":"Nota ben: Iste es un grana de un usator que tu ha blocate. Clicca pro monstrar lo.",
"nicknamesListWithListName":"Lista de {nickname}: {list-name}",
"myListWithListName":"Mi lista: {list-name}",
"listMembers":"Membros",
"listSubscribers":"Abonatos",
"ERRORcouldNotFindList":"Il non ha tal lista.",
"emailAlreadyInUse":"Jam in uso",
"addEditLanguageLink":"Adjuta a traducer {site-title} in un altere lingua",
"onlyPartlyTranslated":"{site-title} ha essite traducite in <em>{language-name}</em> solmente in parte ({percent}%). Tu pote adjutar a completar le traduction al <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">pagina principal del repositorio de Qvitter</a>",
"startRant":"Comenciar un discurso",
"continueRant":"Continuar le discurso",
"hideEmbeddedInTimeline":"Celar contento incastrate in iste chronologia",
"hideQuotesInTimeline":"Celar citatos in iste chronologia",
"userBlocks":"Contos que tu ha blocate",
"buttonBlocked":"Blocate",
"buttonUnblock":"Disblocar",
"failedBlockingUser":"Error al blocar le usator.",
"failedUnblockingUser":"Error al disblocar le usator.",
"unblockUser": "Disblocar",
"tooltipBlocksYou":"Tu es blocate de sequer {username}.",
"silenced":"Silentiate",
"silencedPlural":"Profilos silentiate",
"silencedUsersOnThisInstance":"Profilos silentiate sur {site-title}",
"sandboxed":"In cassa a sablo",
"sandboxedPlural":"Profilos in cassa a sablo",
"sandboxedUsersOnThisInstance":"Profilos in cassa a sablo sur {site-title}",
"silencedStreamDescription":"Usatores silentiate non pote aperir session ni publicar granas e le granas que illes ha jam publicate es celate. Pro usatores local es como un deletion reversibile, pro usatores remote es como un blocada de tote le sito.",
"sandboxedStreamDescription":"Le granas de usatores in cassa a sablo es excludite del Chronologia Public e de Tote Le Rete Cognoscite. Pro le resto, illes pote usar le sito como omne altere usator.",
"onlyShowNotificationsFromUsersIFollow":"Solmente monstrar notificationes de usatores que io seque",
"userOptions":"Altere actiones de usator",
"silenceThisUser":"Silentiar {nickname}",
"sandboxThisUser":"Mitter {nickname} in cassa a sablo",
"unSilenceThisUser":"Non plus silentiar {nickname}",
"unSandboxThisUser":"Liberar {nickname} del cassa a sablo",
"ERRORfailedSandboxingUser":"Error al cambiar le stato de cassa a sablo del usator",
"ERRORfailedSilencingUser":"Error al cambiar le stato de silentiamento del usator",
"muteUser":"Ignorar",
"unmuteUser":"Non plus ignorar",
"hideNotificationsFromMutedUsers":"Celar notificationes de usatores ignorate",
"thisIsANoticeFromAMutedUser":"Tu ha ignorate le autor de iste grana. Clicca hic pro monstrar lo in omne caso.",
"userMutes":"Contos que tu ignora",
"userBlocked":"Contos blocate",
"userMuted":"Contos ignorate",
"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",
"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",
"tooltipAttachFile":"Attach a file"
}

View File

@ -6,7 +6,7 @@
"loginSignIn": "Enirar", "loginSignIn": "Enirar",
"loginRememberMe": "Memorar me", "loginRememberMe": "Memorar me",
"loginForgotPassword": "Ka vu obliviis vua pasvorto?", "loginForgotPassword": "Ka vu obliviis vua pasvorto?",
"notices": "Pipii", "notices": "Pepii",
"followers": "Sequanti", "followers": "Sequanti",
"following": "Vu sequas", "following": "Vu sequas",
"groups": "Grupi", "groups": "Grupi",
@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profilo ed ajusti",
"profileSettings":"Ajusti di profilo", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -1,205 +0,0 @@
{
"directionality": "ltr",
"languageName": "Íslenska",
"loginUsername": "Notandanafn eða netfang",
"loginPassword": "Lykilorð",
"loginSignIn": "Skrá inn",
"loginRememberMe": "Muna eftir mér",
"loginForgotPassword": "Gleymt lykilorð?",
"notices": "Umsagnir",
"followers": "Fylgjendur",
"following": "Fylgist með",
"groups": "Hópar",
"compose": "Skrifa nýja umsögn",
"queetVerb": "Senda",
"queetsNounPlural": "Umsagnir",
"logout": "Skrá út",
"languageSelected": "Tungumál:",
"viewMyProfilePage": "Skoða forsíðuna mína",
"expand": "Þenja út",
"collapse": "Fella saman",
"details": "Nánar",
"expandFullConversation": "Fletta út öllum samskiptaþræðinum",
"replyVerb": "Svara",
"requeetVerb": "Endurvarpa",
"favoriteVerb": "Eftirlæti",
"requeetedVerb": "Endurvarpað",
"favoritedVerb": "Sett í eftirlæti",
"replyTo": "Svara",
"requeetedBy": "Endurvarpað af {requeeted-by}",
"favoriteNoun": "Eftirlæti",
"favoritesNoun": "Eftirlæti",
"requeetNoun": "Endurvarpa",
"requeetsNoun": "Endurvarpanir",
"newQueet": "{new-notice-count} ný umsögn",
"newQueets": "{new-notice-count} nýjar umsagnir",
"longmonthsJanuary": "Janúar",
"longmonthsFebruary": "Febrúar",
"longmonthsMars": "Mars",
"longmonthsApril": "Apríl",
"longmonthsMay": "Maí",
"longmonthsJune": "Júní",
"longmonthsJuly": "Júlí",
"longmonthsAugust": "Ágúst",
"longmonthsSeptember": "September",
"longmonthsOctober": "Október",
"longmonthsNovember": "Nóvember",
"longmonthsDecember": "Desember",
"shortmonthsJanuary": "jan",
"shortmonthsFebruary": "feb",
"shortmonthsMars": "mar",
"shortmonthsApril": "apr",
"shortmonthsMay": "maí",
"shortmonthsJune": "jún",
"shortmonthsJuly": "júl",
"shortmonthsAugust": "ágú",
"shortmonthsSeptember": "sep",
"shortmonthsOctober": "okt",
"shortmonthsNovember": "nóv",
"shortmonthsDecember": "des",
"time12am": "{time} fh",
"time12pm": "{time} eh",
"longDateFormat": "{time24} - {day} {month} {year}",
"shortDateFormatSeconds": "{seconds} sek",
"shortDateFormatMinutes": "{minutes}m",
"shortDateFormatHours": "{hours} klst",
"shortDateFormatDate": "{day} {month}",
"shortDateFormatDateAndY": "{day} {month} {year}",
"now": "núna",
"posting": "sendir inn",
"viewMoreInConvBefore": "← Skoða meira í samskiptaþræði",
"viewMoreInConvAfter": "Skoða meira í samskiptaþræði →",
"mentions": "Tilvísanir",
"timeline": "Tímalína",
"publicTimeline": "Opinber tímalína",
"publicAndExtTimeline": "Allt þekkta netkerfið",
"searchVerb": "Leita",
"deleteVerb": "Eyða",
"cancelVerb": "Hætta við",
"deleteConfirmation": "Ertu viss um að þú viljir eyða þessari umsögn?",
"userExternalFollow": "Fylgjast með fjartengt",
"userExternalFollowHelp": "Auðkenni aðgangsins þíns (t.d. notandi@lén.is).",
"userFollow": "Fylgja",
"userFollowing": "Fylgir",
"userUnfollow": "Hætta að fylgja",
"joinGroup": "Taka þátt",
"joinExternalGroup": "Taka þátt fjartengt",
"isMemberOfGroup": "Meðlimur",
"leaveGroup": "Ganga úr",
"memberCount": "Meðlimir",
"adminCount": "Stjórnendur",
"settings": "Stillingar",
"saveChanges": "Vista breytingar",
"linkColor": "Litur tengils",
"backgroundColor": "Bakgrunnslitur",
"newToQuitter": "Nýr á {site-title}?",
"signUp": "Nýskrá",
"signUpFullName": "Fullt nafn",
"signUpEmail": "Tölvupóstur",
"signUpButtonText": "Nýskrá inn á {site-title}",
"welcomeHeading": "Velkomin í {site-title}.",
"welcomeText": "Við erum <span id=\"federated-tooltip\"><div id=\"what-is-federation\">\"Samband (federation)\" þýðir að þú þarft ekki sérstakan aðgang á {site-title} til að fylgjast með, vera fylgt eða hafa samskipti við notendur á {site-title}. Þú getur verið skráð(ur) á hvaða StatusNet eða GNU samfélagsþjóni sem er, eða í hverja þá þjónustu sem notar <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">Ostatus</a> samskiptamátann! Þú þarft ekki einusinni að skrá þig í neina þjónustu prófaðu að setja upp hinn ástsamlega <a href=\"http://www.gnu.org/software/social/\">GNU social</a> hugbúnað á þínum eigin vefþjóni! :)</div>samband</span> örbloggara sem er annt um félagslegt réttlæti og samstöðu - fólk sem vill komast undan miðstýrðum kapítalískum þjónustum.",
"registerNickname": "Stuttnefni",
"registerHomepage": "Heimasíða",
"registerBio": "Æviágrip",
"registerLocation": "Staðsetning",
"registerRepeatPassword": "Endurtaka lykilorð",
"moreSettings": "Fleiri stillingar",
"otherServers": "Þú getur einnig stofnað aðgang á einhverjum öðrum þjóni á GNU samfélagsmiðlanetinu. <a href=\"http://federation.skilledtests.com/select_your_server.html\">Samanburður</a>",
"editMyProfile": "Breyta sniði",
"notifications": "Tilkynningar",
"xFavedYourQueet": "setti umsögn frá þér í eftirlæti",
"xRepeatedYourQueet": "endurvarpaði frá þér",
"xStartedFollowingYou": "fylgdi þér",
"followsYou": "fylgir þér",
"FAQ": "FAQ / Algengar spurningar",
"inviteAFriend": "Bjóða vini!",
"goToExternalProfile": "Skoða fullt notandasnið",
"cropAndSave": "Utanskera og vista",
"showTerms": "Lestu notkunarskilmálana okkar",
"ellipsisMore": "Meira",
"blockUser": "Loka á",
"goToOriginalNotice": "Fara á upprunalegu umsögnina",
"goToTheUsersRemoteProfile": "Fara á fjartengt upplýsingasnið um notandann",
"clickToDrag": "Smelltu til að draga",
"keyboardShortcuts": "Flýtilyklar",
"classicInterface": "Klassískt {site-title}",
"accessibilityToggleLink": "Til að fá aukið aðgengi fyrir notendur, smelltu á þennan tengil til að skipta yfir í klassíska viðmótið",
"tooltipBookmarkStream": "Bæta þessu streymi í bókamerkin þín",
"tooltipTopMenu": "Valmynd og stillingar",
"tooltipAttachImage": "Hengja við myndskrá",
"tooltipShortenUrls": "Stytta allar vefslóðir í umsögninni",
"tooltipReloadStream": "Uppfæra þetta streymi",
"tooltipRemoveBookmark": "Fjarlægja þetta bókamerki",
"clearHistory": "Hreinsa vafurferil",
"ERRORsomethingWentWrong": "Eitthvað fór úrskeiðis.",
"ERRORmustBeLoggedIn": "Þú verður að vera skráður inn til að skoða þetta streymi.",
"ERRORcouldNotFindUserWithNickname": "Fann ekki notanda með stuttnefnið \"{nickname}\" á þessum þjóni",
"ERRORcouldNotFindGroupWithNickname": "Fann ekki hóp með stuttnefnið \"{nickname}\" á þessum þjóni",
"ERRORcouldNotFindPage": "Fann ekki þessa síðu.",
"ERRORnoticeRemoved": "Þessi umsögn hefur verið fjarlægð.",
"ERRORnoContactWithServer": "Tekst ekki að ná tengingu við þjóninn. Þjónninn gæti verið undir of miklu álagi, eða að vandamál séu með internettenginguna þína. Prófaðu aftur síðar!",
"ERRORattachmentUploadFailed": "Innsending skráar mistókst. Annað hvort er hún of stór eða að skráasnið hennar er ekki stutt.",
"hideRepliesToPeopleIDoNotFollow": "Fela svör til fólks sem ég fylgist ekki með",
"markAllNotificationsAsSeen": "Merkja allar tilkynningar sem séðar",
"notifyRepliesAndMentions": "Tilvísanir og svör",
"notifyFavs": "Eftirlæti",
"notifyRepeats": "Endurvarpanir",
"notifyFollows": "Nýir fylgjendur",
"timelineOptions": "Valkostir tímalínu",
"ERRORfailedSavingYourSetting": "Mistókst að vista stillingarnar þínar",
"ERRORfailedMarkingAllNotificationsAsRead": "Tókst ekki að merkja allar tilkynningar sem séðar.",
"newNotification": "{new-notice-count} ný tilkynning",
"newNotifications": "{new-notice-count} nýjar tilkynningar",
"thisIsANoticeFromABlockedUser": "Aðvörun: Þetta er umsögn frá notanda sem þú hefur útilokað. Smelltu til að birta hana.",
"nicknamesListWithListName": "Listi eftir {nickname}: {list-name}",
"myListWithListName": "Listinn minn: {list-name}",
"listMembers": "Meðlimir",
"listSubscribers": "Áskrifendur",
"ERRORcouldNotFindList": "Það er enginn slíkur listi.",
"emailAlreadyInUse": "Þegar í notkun",
"addEditLanguageLink": "Hjálpaðu til við að þýða {site-title} á annað tungumál",
"onlyPartlyTranslated": "{site-title} er aðeins þýtt af hluta til yfir á <em>{language-name}</em> ({percent}%). Þú getur hjálpað til við að klára þýðinguna á <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">vefsíðu hugbúnaðarsafns Qvitter</a>",
"startRant": "Byrja nöldur",
"continueRant": "Halda áfram með nöldur",
"hideEmbeddedInTimeline": "Fela innbyggt efni í þessari tímalínu",
"hideQuotesInTimeline": "Fela tilvitnanir í þessari tímalínu",
"userBlocks": "Aðgangar sem þú útilokar",
"buttonBlocked": "Útilokaður",
"buttonUnblock": "Opna á",
"failedBlockingUser": "Tókst ekki að útiloka þennan notanda.",
"failedUnblockingUser": "Tókst ekki að opna á þennan notanda.",
"unblockUser": "Opna á",
"tooltipBlocksYou": "Þú ert útilokaður frá því að fylgja {username}.",
"silenced": "Þaggaður",
"silencedPlural": "Niðurþögguð notendasnið",
"silencedUsersOnThisInstance": "Niðurþögguð notendasnið á {site-title}",
"sandboxed": "Einangrað",
"sandboxedPlural": "Einangruð notendasnið",
"sandboxedUsersOnThisInstance": "Einangruð notendasnið á {site-title}",
"silencedStreamDescription": "Þaggaðir notendur geta ekki skráð sig inn eða sent inn umsagnir, og umsagnir sem þeir hafa þegar sent inn eru faldar. Fyrir staðværa notendur er þetta eins og eyðing sem hægt er að afturkalla, fyrir fjartengda notendur er þetta eins og bann á vefsvæðinu.",
"sandboxedStreamDescription": "Umsagnir frá einöngruðum notendum eru útilokaðar frá opinberu tímalínunni og frá öllu þekkta netinu. Að þessu undanskildu geta þessir notendur notað vefsvæðið rétt eins og hver annar notandi.",
"onlyShowNotificationsFromUsersIFollow": "Einungis birta tilkynningar frá notendum sem ég fylgi",
"userOptions": "Fleiri notandaaðgerðir",
"silenceThisUser": "Þagga niður í {nickname}",
"sandboxThisUser": "Einangra {nickname}",
"unSilenceThisUser": "Hætta að þagga niður í {nickname}",
"unSandboxThisUser": "Taka {nickname} úr einangrun",
"ERRORfailedSandboxingUser": "Tókst ekki að setja þennan notanda í/út einangrun",
"ERRORfailedSilencingUser": "Tókst ekki að þagga/afþagga þennan notanda",
"muteUser": "Þagga niður",
"unmuteUser": "Hætta þöggun",
"hideNotificationsFromMutedUsers": "Fela tilkynningar frá þögguðum notendum",
"thisIsANoticeFromAMutedUser": "Þú hefur þaggað niður í höfundi þessarar umsagnar. Smelltu hér til að birta hana samt.",
"userMutes": "Aðgangar sem þú þaggar niður í",
"userBlocked": "Útilokaðir aðgangar",
"userMuted": "Þaggaðir aðgangar",
"mutedStreamDescription": "Þú hefur falið þessa aðganga á tímalínunni þinni. Þú munt áfram fá tilkynningar frá þessum aðgöngum, nema ef þú velur &quot;Fela tilkynningar frá þögguðum notendum&quot; úr valmyndinni á tilkynningasíðunni.",
"profileAndSettings": "Persónusnið og stillingar",
"profileSettings": "Sniðstillingar",
"thisIsABookmark": "Þetta er bókamerki sem búið var til í klassíska viðmótinu",
"thisIsARemoteUser": "<strong>Aðvörun!</strong> Þetta er fjartengdur notandi. Þessi síða er einungis afrit af notandasniði hans og inniheldur einungis þau gögn sem tiltæk eru þessum þjóni á GNU samfélagsnetinu. Farðu á <a href=\"{remote-profile-url}\" donthijack>notandasniðið á þeirra eigin þjóni</a> til að skoða allt notandasniðið.",
"findSomeone": "Finna einhvern",
"findSomeoneTooltip": "Settu inn notandanafn eða slóð á notandasnið, t.d. @notandi eða https://fjartengt.kerfi/stuttnefni",
"tooltipAttachFile": "Hengja við skrá"
}

View File

@ -126,7 +126,7 @@
"classicInterface":"Classic {site-title}", "classicInterface":"Classic {site-title}",
"accessibilityToggleLink":"Passare all'interfaccia classica (Accessibilità)", "accessibilityToggleLink":"Passare all'interfaccia classica (Accessibilità)",
"tooltipBookmarkStream":"Aggiungi ai preferiti", "tooltipBookmarkStream":"Aggiungi ai preferiti",
"tooltipTopMenu":"Menu e impostazioni", "tooltipTopMenu":"Menu and settings",
"tooltipAttachImage":"Carica un'immagine", "tooltipAttachImage":"Carica un'immagine",
"tooltipShortenUrls":"Shorten all URLs in the Queet", "tooltipShortenUrls":"Shorten all URLs in the Queet",
"tooltipReloadStream":"Aggiorna", "tooltipReloadStream":"Aggiorna",
@ -162,7 +162,7 @@
"onlyPartlyTranslated":"{site-title} è solo parzialmente tradotto in <em>{language-name}</em> ({percent}%). Puoi completare la traduzione sul <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">repository di Qvitter</a>", "onlyPartlyTranslated":"{site-title} è solo parzialmente tradotto in <em>{language-name}</em> ({percent}%). Puoi completare la traduzione sul <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">repository di Qvitter</a>",
"startRant":"Start a rant", "startRant":"Start a rant",
"continueRant":"Continue the rant", "continueRant":"Continue the rant",
"hideEmbeddedInTimeline":"Nascondi anteprime da questa bacheca", "hideEmbeddedInTimeline":"Hide embedded content in this timeline",
"hideQuotesInTimeline":"Hide quotes in this timeline", "hideQuotesInTimeline":"Hide quotes in this timeline",
"userBlocks":"Account bloccati", "userBlocks":"Account bloccati",
"buttonBlocked":"Bloccato", "buttonBlocked":"Bloccato",
@ -170,17 +170,17 @@
"failedBlockingUser":"Tentativo di bloccare l'utente non riuscito.", "failedBlockingUser":"Tentativo di bloccare l'utente non riuscito.",
"failedUnblockingUser":"Tentativo di sblocco dell'utente non riuscito.", "failedUnblockingUser":"Tentativo di sblocco dell'utente non riuscito.",
"unblockUser": "Sblocca {username}", "unblockUser": "Sblocca {username}",
"tooltipBlocksYou":"Sei stato bloccato da {username}.", "tooltipBlocksYou":"You are blocked from following {username}.",
"silenced":"Silenziati", "silenced":"Silenziati",
"silencedPlural":"Silenziati", "silencedPlural":"Silenziati",
"silencedUsersOnThisInstance":"Account silenziati su {site-title}", "silencedUsersOnThisInstance":"Account silenziati su {site-title}",
"sandboxed":"Sandboxati", "sandboxed":"Sandboxati",
"sandboxedPlural":"Account sandboxati", "sandboxedPlural":"Account sandboxati",
"sandboxedUsersOnThisInstance":"Account sandboxati su {site-title}", "sandboxedUsersOnThisInstance":"Account sandboxati su {site-title}",
"silencedStreamDescription":"Utenti silenziati non possono accedere o postare queet e i queet che hanno già postato sono nascosti per gli utenti locali è come una cancellazione reversibile, per gli utenti remoti costituisce un blocco all'intero sito.", "silencedStreamDescription":"Utenti silenziati non possono accedere o postare quips e i quips che hanno già postato sono nascosti per gli utenti locali è come una cancellazione reversibile, per gli utenti remoti costituisce un blocco all'intero sito.",
"sandboxedStreamDescription":"Queet da utenti sandboxati sono esclusi dalla bacheca pubblica e dal resto del network. a parte questo possono usare il sito come ogni altro utente", "sandboxedStreamDescription":"Quips da utenti sandboxati sono esclusi dalla bacheca pubblica e dal resto del network. a parte questo possono usare il sito come ogni altro utente",
"onlyShowNotificationsFromUsersIFollow":"Mostrami le notifiche solo dagli utenti che seguo", "onlyShowNotificationsFromUsersIFollow":"Mostrami le notifiche solo dagli utenti che seguo",
"userOptions":"Mostra più opzioni", "userOptions":"More user actions",
"silenceThisUser":"Nascondi notifiche da {nickname}", "silenceThisUser":"Nascondi notifiche da {nickname}",
"sandboxThisUser":"Aggiungi alla sandbox {nickname}", "sandboxThisUser":"Aggiungi alla sandbox {nickname}",
"unSilenceThisUser":"Mostra notifiche da {nickname}", "unSilenceThisUser":"Mostra notifiche da {nickname}",
@ -190,17 +190,12 @@
"muteUser":"Togli voce", "muteUser":"Togli voce",
"unmuteUser":"Ridai voce", "unmuteUser":"Ridai voce",
"hideNotificationsFromMutedUsers":"Nascondi notifiche dagli account senza voce", "hideNotificationsFromMutedUsers":"Nascondi notifiche dagli account senza voce",
"thisIsANoticeFromAMutedUser":"Hai nascosto dalla bacheca i queet di questo account. Clicca qui per mostrare ugualmente.", "thisIsANoticeFromAMutedUser":"Hai nascosto dalla bacheca i quip di questo account. Clicca qui per mostrare ugualmente.",
"userMutes":"Account a cui hai tolto la voce", "userMutes":"Account a cui hai tolto la voce",
"userBlocked":"Account bloccati", "userBlocked":"Account bloccati",
"userMuted":"Account a cui hai tolto la voce", "userMuted":"Account a cui hai tolto la voce",
"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.", "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", "profileAndSettings":"Profilo e impostazioni",
"profileSettings":"Impostazioni del profilo", "profileSettings":"Impostazioni del profilo",
"thisIsABookmark":"Questo è un segnalibro creato nell'interfaccia classica", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>Attenzione!</strong> Questo è un utente remoto. Questa pagina è solo una copia mantenuta nella cache, e include solo i dati presenti al momento dell'operazione di caching effettuata da GNU social. Vai al <a href=\"{remote-profile-url}\" donthijack>profilo dell'utente sul suo server</a> per vedere il profilo completo.",
"findSomeone":"Cerca qualcuno",
"findSomeoneTooltip":"Inserisci l'username o l'url del profilo, es. @localuser o https://remote.instance/nickname",
"tooltipAttachFile":"Allega un file"
} }

View File

@ -197,9 +197,5 @@
"mutedStreamDescription":"あなたのタイムラインから、選択されたユーザーを隠しました。あなたがお知らせページの歯車のメニューにある&quot;ミュートしたユーザーからのお知らせを隠す&quot;を選択しなかったユーザー以外からは、まだお知らせを受け取ります。", "mutedStreamDescription":"あなたのタイムラインから、選択されたユーザーを隠しました。あなたがお知らせページの歯車のメニューにある&quot;ミュートしたユーザーからのお知らせを隠す&quot;を選択しなかったユーザー以外からは、まだお知らせを受け取ります。",
"profileAndSettings":"プロフィールと設定", "profileAndSettings":"プロフィールと設定",
"profileSettings":"プロフィール設定", "profileSettings":"プロフィール設定",
"thisIsABookmark":"これはクラシックインターフェースで作られたブックマークです", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>注意!</strong> これはリモートユーザーです。このページはリモートユーザーのプロフィールのキャッシュされている複製であり、このGNU socialインスタンスに保存されたデータのみを含みます。<a href=\"{remote-profile-url}\" donthijack>このユーザーが所属するサーバーのプロフィール</a>で完全なプロフィールを閲覧できます。",
"findSomeone":"誰かを検索",
"findSomeoneTooltip":"ユーザー名またはプロフィールURLを入力 (例: @localuser または https://remote.instance/nickname)",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -1,7 +1,7 @@
{ {
"directionality":"ltr", "directionality":"ltr",
"languageName": "Norsk", "languageName": "Norsk",
"loginUsername": "Brukernavn eller epost", "loginUsername": "Brukernavn eller e-Post",
"loginPassword": "Passord", "loginPassword": "Passord",
"loginSignIn": "Logg inn", "loginSignIn": "Logg inn",
"loginRememberMe": "Husk meg", "loginRememberMe": "Husk meg",
@ -33,18 +33,18 @@
"requeetsNoun": "Requeeter", "requeetsNoun": "Requeeter",
"newQueet": "{new-notice-count} ny Queet", "newQueet": "{new-notice-count} ny Queet",
"newQueets": "{new-notice-count} nye Queets", "newQueets": "{new-notice-count} nye Queets",
"longmonthsJanuary": "januar", "longmonthsJanuary": "Januar",
"longmonthsFebruary": "februar", "longmonthsFebruary": "Februar",
"longmonthsMars": "mars", "longmonthsMars": "Mars",
"longmonthsApril": "april", "longmonthsApril": "April",
"longmonthsMay": "mai", "longmonthsMay": "Mai",
"longmonthsJune": "juni", "longmonthsJune": "Juni",
"longmonthsJuly": "juli", "longmonthsJuly": "Juli",
"longmonthsAugust": "august", "longmonthsAugust": "August",
"longmonthsSeptember": "september", "longmonthsSeptember": "September",
"longmonthsOctober": "oktober", "longmonthsOctober": "Oktober",
"longmonthsNovember": "november", "longmonthsNovember": "November",
"longmonthsDecember": "desember", "longmonthsDecember": "Desember",
"shortmonthsJanuary": "jan", "shortmonthsJanuary": "jan",
"shortmonthsFebruary": "feb", "shortmonthsFebruary": "feb",
"shortmonthsMars": "mar", "shortmonthsMars": "mar",
@ -59,7 +59,7 @@
"shortmonthsDecember": "des", "shortmonthsDecember": "des",
"time12am": "{time} am", "time12am": "{time} am",
"time12pm": "{time} pm", "time12pm": "{time} pm",
"longDateFormat": "{time24} - {day} {month} {year}", "longDateFormat": "{time12} - {day} {month} {year}",
"shortDateFormatSeconds": "{seconds}s", "shortDateFormatSeconds": "{seconds}s",
"shortDateFormatMinutes": "{minutes}m", "shortDateFormatMinutes": "{minutes}m",
"shortDateFormatHours": "{hours}t", "shortDateFormatHours": "{hours}t",
@ -94,8 +94,8 @@
"backgroundColor": "Bakgrunds farge", "backgroundColor": "Bakgrunds farge",
"newToQuitter": "Ny på {site-title}?", "newToQuitter": "Ny på {site-title}?",
"signUp": "Registrere deg", "signUp": "Registrere deg",
"signUpFullName": "Fullt navn", "signUpFullName": "Fult navn",
"signUpEmail": "epost", "signUpEmail": "e-Post",
"signUpButtonText": "Registrere deg på {site-title}", "signUpButtonText": "Registrere deg på {site-title}",
"welcomeHeading": "Velkommen til {site-title}.", "welcomeHeading": "Velkommen til {site-title}.",
"welcomeText": "Vi er en <span id=\"federated-tooltip\"><div id=\"what-is-federation\">\"Forenet eller (Federation)\" betyr i denne konteksten at du ikke behøver å ha en {site-title}-konto for å følge eller følges av andre og prate med andre i nettverket. Du kan registrere deg på hvilken som helst instans/server som støtter protokollen <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">Ostatus</a>, eller mikroblogge på en helt egen server, med den frie programvaren <a href=\"http://www.gnu.org/software/social/\">GNU social</a> (som {site-title} bygger på).</div>forenet</span> allmenhet, der du som har hoppet av de sentraliserte tjenestene kan mikroblogge etisk og solidarisk.", "welcomeText": "Vi er en <span id=\"federated-tooltip\"><div id=\"what-is-federation\">\"Forenet eller (Federation)\" betyr i denne konteksten at du ikke behøver å ha en {site-title}-konto for å følge eller følges av andre og prate med andre i nettverket. Du kan registrere deg på hvilken som helst instans/server som støtter protokollen <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">Ostatus</a>, eller mikroblogge på en helt egen server, med den frie programvaren <a href=\"http://www.gnu.org/software/social/\">GNU social</a> (som {site-title} bygger på).</div>forenet</span> allmenhet, der du som har hoppet av de sentraliserte tjenestene kan mikroblogge etisk og solidarisk.",
@ -122,23 +122,23 @@
"goToOriginalNotice": "Gå til den opprinnelige queeten", "goToOriginalNotice": "Gå til den opprinnelige queeten",
"goToTheUsersRemoteProfile": "Vis brukerens profil", "goToTheUsersRemoteProfile": "Vis brukerens profil",
"clickToDrag":"Klikk - dra og slipp", "clickToDrag":"Klikk - dra og slipp",
"keyboardShortcuts":"Tastatursnarveier", "keyboardShortcuts":"Tastatur snarveier",
"classicInterface":"Klassisk {site-title}", "classicInterface":"Klassisk {site-title}",
"accessibilityToggleLink":"For bedre synlighet, klikk denne lenken for å bytte til klassisk grensesnitt", "accessibilityToggleLink":"For bedre synlighet, klikk denne lenken for å bytte til klassisk grensesnitt",
"tooltipBookmarkStream":"Legg denne strømmen til i dine bokmerker", "tooltipBookmarkStream":"Legg til denne strømmen til dine bokmerker",
"tooltipTopMenu":"Meny og innstillinger", "tooltipTopMenu":"Meny og innstillinger",
"tooltipAttachImage":"Legg til et bilde", "tooltipAttachImage":"Legg til et bilde",
"tooltipShortenUrls":"Krympe alle URLer i din Queet", "tooltipShortenUrls":"Krympe alle URLer i din Queet",
"tooltipReloadStream":"Last denne strømmen inn på nytt", "tooltipReloadStream":"Laste inn på nytt denne strømmen",
"tooltipRemoveBookmark":"Slett dette bokmerket", "tooltipRemoveBookmark":"Slett dette bokmerket",
"clearHistory":"Slett besøkshistorie", "clearHistory":"Slett nettleser historie",
"ERRORsomethingWentWrong":"Noe gikk galt.", "ERRORsomethingWentWrong":"Noe gikk galt.",
"ERRORmustBeLoggedIn":"Du må være pålogget for å vise denne strømmen.", "ERRORmustBeLoggedIn":"Du må være pålogget for å vise denne strømmen.",
"ERRORcouldNotFindUserWithNickname":"Kan ikke finne en bruker med brukerid \"{nickname}\" på denne instansen", "ERRORcouldNotFindUserWithNickname":"Kan ikke finne en bruker med brukerid \"{nickname}\" på denne instansen",
"ERRORcouldNotFindGroupWithNickname":"Kan ikke finne en gruppe med gruppenavnet \"{nickname}\" på denne instansen", "ERRORcouldNotFindGroupWithNickname":"Kan ikke finne en gruppe med gruppenavnet \"{nickname}\" på denne instansen",
"ERRORcouldNotFindPage":"Kan ikke finne siden.", "ERRORcouldNotFindPage":"Kan ikke finne siden.",
"ERRORnoticeRemoved": "Denne notisen er slettet.", "ERRORnoticeRemoved": "Denne notisen er slettet.",
"ERRORnoContactWithServer": "Kan ikke etablere en kobling til instansen. Dette kan skyldes at den er overbelastet, eller det er et problem med din internettt-tilkobling. Vennligst forsøk senere.", "ERRORnoContactWithServer": "Kan ikke etablere en kobling til instansen. Dette kan skyldes at den er overbelastet, eller det er et problem med din internet kobling. Vennligst forsøk senere.",
"ERRORattachmentUploadFailed": "Opplasting feilet. Formatet er muligens ikke supportert, eller filen er for stor.", "ERRORattachmentUploadFailed": "Opplasting feilet. Formatet er muligens ikke supportert, eller filen er for stor.",
"hideRepliesToPeopleIDoNotFollow":"Skjul svar fra profiler jeg ikke følger.", "hideRepliesToPeopleIDoNotFollow":"Skjul svar fra profiler jeg ikke følger.",
"markAllNotificationsAsSeen":"Marker alle varsler som lest", "markAllNotificationsAsSeen":"Marker alle varsler som lest",
@ -162,7 +162,7 @@
"onlyPartlyTranslated":"{site-title} er kun delvis oversatt til <em>{language-name}</em> ({percent}%). Du kan hjelpe å oversette i følgende lenke <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository hjemmeside</a>", "onlyPartlyTranslated":"{site-title} er kun delvis oversatt til <em>{language-name}</em> ({percent}%). Du kan hjelpe å oversette i følgende lenke <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository hjemmeside</a>",
"startRant":"Start en utblåsning", "startRant":"Start en utblåsning",
"continueRant":"Fortsett utblåsningen", "continueRant":"Fortsett utblåsningen",
"hideEmbeddedInTimeline":"Skjul innebygget innhold i denne tidslinjen", "hideEmbeddedInTimeline":"Skjul inkluderende innhold i denne tidslinjen",
"hideQuotesInTimeline":"Skjul sitater i denne tidslinjen", "hideQuotesInTimeline":"Skjul sitater i denne tidslinjen",
"userBlocks":"Brukere du blokkerer", "userBlocks":"Brukere du blokkerer",
"buttonBlocked":"Blokkert", "buttonBlocked":"Blokkert",
@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profiler og innstillinger",
"profileSettings":"Profil 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>Advarsel!</strong> Dette er en ekstern bruker. Denne siden er en hurtiglagret versjon av profilen som bare inneholder data kjent for denne GNU social instansen. Gå til <a href=\"{remote-profile-url}\" donthijack>brukerens profil på egen instans</a> for å vise hele profilen.",
"findSomeone":"Finn noen",
"findSomeoneTooltip":"Skriv inn et brukernavn, eller en profil url, for eksempel. @lokalbruker eller https://ekstern.instans/brukernavn",
"tooltipAttachFile":"Legg ved fil"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profiel en instellingen",
"profileSettings":"Profiel 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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -1,205 +1,201 @@
{ {
"directionality":"ltr", "directionality":"ltr",
"languageName": "Polish", "languageName": "Polish",
"loginUsername": "Nazwa użytkownika lub email", "loginUsername": "Nazwa użytkownika lub email",
"loginPassword": "Hasło", "loginPassword": "Hasło",
"loginSignIn": "Zaloguj się", "loginSignIn": "Zaloguj się",
"loginRememberMe": "Zapamiętaj mnie", "loginRememberMe": "Zapamiętaj mnie",
"loginForgotPassword": "Nie pamiętasz hasła?", "loginForgotPassword": "Nie pamiętasz hasła?",
"notices": "Queety", "notices": "Queety",
"followers": "Obserwujący", "followers": "Obserwujący",
"following": "Obserwowani", "following": "Obserwowani",
"groups": "Grupy", "groups": "Grupy",
"compose": "Co się dzieje?", "compose": "Co się dzieje?",
"queetVerb": "Wyślij", "queetVerb": "Wyślij",
"queetsNounPlural": "Queety", "queetsNounPlural": "Queety",
"logout": "Wyloguj się", "logout": "Wyloguj się",
"languageSelected": "Język:", "languageSelected": "Język:",
"viewMyProfilePage": "Zobacz swój profil", "viewMyProfilePage": "Zobacz swój profil",
"expand": "Rozwiń", "expand": "Rozwiń",
"collapse": "Zwiń", "collapse": "Zwiń",
"details": "Szczegóły", "details": "Szczegóły",
"expandFullConversation": "Rozwiń całą rozmowę", "expandFullConversation": "Rozwiń całą rozmowę",
"replyVerb": "Odpowiedź", "replyVerb": "Odpowiedź",
"requeetVerb": "Podaj dalej", "requeetVerb": "Podaj dalej",
"favoriteVerb": "Ulubiony", "favoriteVerb": "Ulubiony",
"requeetedVerb": "Podany dalej", "requeetedVerb": "Podany dalej",
"favoritedVerb": "Polubione", "favoritedVerb": "Polubione",
"replyTo": "Odpowiedz", "replyTo": "Odpowiedz",
"requeetedBy": "Podany dalej przez {requeeted-by}", "requeetedBy": "Podany dalej przez {requeeted-by}",
"favoriteNoun": "Ulubiony", "favoriteNoun": "Ulubiony",
"favoritesNoun": "Ulubione", "favoritesNoun": "Ulubione",
"requeetNoun": "Podaj dalej", "requeetNoun": "Podaj dalej",
"requeetsNoun": "Podane dalej", "requeetsNoun": "Podane dalej",
"newQueet": "{new-notice-count} nowy queet", "newQueet": "{new-notice-count} nowy queet",
"newQueets": "{new-notice-count} nowych queetów", "newQueets": "{new-notice-count} nowych queetów",
"longmonthsJanuary": "styczeń", "longmonthsJanuary": "styczeń",
"longmonthsFebruary": "luty", "longmonthsFebruary": "luty",
"longmonthsMars": "marzec", "longmonthsMars": "marzec",
"longmonthsApril": "kwiecień", "longmonthsApril": "kwiecień",
"longmonthsMay": "maj", "longmonthsMay": "maj",
"longmonthsJune": "czerwiec", "longmonthsJune": "czerwiec",
"longmonthsJuly": "lipiec", "longmonthsJuly": "lipiec",
"longmonthsAugust": "sierpień", "longmonthsAugust": "sierpień",
"longmonthsSeptember": "wrzesień", "longmonthsSeptember": "wrzesień",
"longmonthsOctober": "październik", "longmonthsOctober": "październik",
"longmonthsNovember": "listopad", "longmonthsNovember": "listopad",
"longmonthsDecember": "grudzień", "longmonthsDecember": "grudzień",
"shortmonthsJanuary": "styczeń", "shortmonthsJanuary": "styczeń",
"shortmonthsFebruary": "luty", "shortmonthsFebruary": "luty",
"shortmonthsMars": "marzec", "shortmonthsMars": "marzec",
"shortmonthsApril": "kwiecien", "shortmonthsApril": "kwiecien",
"shortmonthsMay": "maj", "shortmonthsMay": "maj",
"shortmonthsJune": "czerwiec", "shortmonthsJune": "czerwiec",
"shortmonthsJuly": "lipiec", "shortmonthsJuly": "lipiec",
"shortmonthsAugust": "sierpień", "shortmonthsAugust": "sierpień",
"shortmonthsSeptember": "wrzesień", "shortmonthsSeptember": "wrzesień",
"shortmonthsOctober": "październik", "shortmonthsOctober": "październik",
"shortmonthsNovember": "listopad", "shortmonthsNovember": "listopad",
"shortmonthsDecember": "grudzień", "shortmonthsDecember": "grudzień",
"time12am": "{time} am", "time12am": "{time} am",
"time12pm": "{time} pm", "time12pm": "{time} pm",
"longDateFormat": "{time12} - {day} {month} {year}", "longDateFormat": "{time12} - {day} {month} {year}",
"shortDateFormatSeconds": "{seconds}s", "shortDateFormatSeconds": "{seconds}s",
"shortDateFormatMinutes": "{minutes}m", "shortDateFormatMinutes": "{minutes}m",
"shortDateFormatHours": "{hours}godz.", "shortDateFormatHours": "{hours}godz.",
"shortDateFormatDate": "{day} {month}", "shortDateFormatDate": "{day} {month}",
"shortDateFormatDateAndY": "{day} {month} {year}", "shortDateFormatDateAndY": "{day} {month} {year}",
"now": "teraz", "now": "teraz",
"posting": "dodawanie", "posting": "dodawanie",
"viewMoreInConvBefore": " zobacz więcej w rozmowie", "viewMoreInConvBefore": " zobacz więcej w rozmowie",
"viewMoreInConvAfter": "Zobacz więcej w rozmowie ", "viewMoreInConvAfter": "Zobacz więcej w rozmowie ",
"mentions": "Wzmianki", "mentions": "Wzmianki",
"timeline": "Oś czasu", "timeline": "Oś czasu",
"publicTimeline": "Publiczna oś czasu", "publicTimeline": "Publiczna oś czasu",
"publicAndExtTimeline": "Cała znana sieć", "publicAndExtTimeline": "Cała znana sieć",
"searchVerb": "Szukaj", "searchVerb": "Szukaj",
"deleteVerb": "Usuń", "deleteVerb": "Usuń",
"cancelVerb": "Anuluj", "cancelVerb": "Anuluj",
"deleteConfirmation": "Czy na pewno chcesz usunąć ten queet?", "deleteConfirmation": "Czy na pewno chcesz usunąć ten queet?",
"userExternalFollow": "Zdalne obserwowanie", "userExternalFollow": "Zdalne obserwowanie",
"userExternalFollowHelp": "ID Twojego konta (np user@rainbowdash.net).", "userExternalFollowHelp": "ID Twojego konta (np user@rainbowdash.net).",
"userFollow": "Obserwuj", "userFollow": "Obserwuj",
"userFollowing": "Obserwowany", "userFollowing": "Obserwowany",
"userUnfollow": "Przestań obserwować", "userUnfollow": "Przestań obserwować",
"joinGroup": "Dołącz", "joinGroup": "Dołącz",
"joinExternalGroup": "Dołącz zdalnie", "joinExternalGroup": "Dołącz zdalnie",
"isMemberOfGroup": "Użytkownik", "isMemberOfGroup": "Użytkownik",
"leaveGroup": "Opuść", "leaveGroup": "Opuść",
"memberCount": "Członkowie", "memberCount": "Członkowie",
"adminCount": "Administratorzy", "adminCount": "Administratorzy",
"settings": "Ustawienia", "settings": "Ustawienia",
"saveChanges": "Zapisz zmiany", "saveChanges": "Zapisz zmiany",
"linkColor": "Kolor linku", "linkColor": "Kolor linku",
"backgroundColor": "Kolor tła", "backgroundColor": "Kolor tła",
"newToQuitter": "Nowy na {site-title}?", "newToQuitter": "Nowy na {site-title}?",
"signUp": "Zarejestruj się", "signUp": "Zarejestruj się",
"signUpFullName": "Imię i nazwisko", "signUpFullName": "Imię i nazwisko",
"signUpEmail": "Email", "signUpEmail": "Email",
"signUpButtonText": "Zarejestruj się na {site-title}", "signUpButtonText": "Zarejestruj się na {site-title}",
"welcomeHeading": "Witamy na {site-title}.", "welcomeHeading": "Witamy na {site-title}.",
"welcomeText": "Jesteśmy społecznością mikroblogerów, złożoną z globalnej <span id=\"federated-tooltip\"><div id=\"what-is-federation\">Oznacza to, że nie musisz posiadać konta na {site-title} aby komunikować się z użytkownikami {site-title}, obserwować lub aby mieć obserwujących na {site-title}. Możesz się także rejestrować na innych serwerach <a href=\"http://www.gnu.org/software/social/\">GNU social</a> lub na innej usłudze, która obsługuje protokół <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">OStatus</a>. Możesz nawet uczestniczyć bez rejestracji, jeśli zainstalujesz GNU social na własnym serwerze. </div>Sieci</span> niezależnych serwerów Gnu social, znanych również jako StatusNet. Jesteśmy idealnym miejscem dla <strong>ludzi takich jak Ty</strong>, dla których etyka i solidarność coś znaczy, a które nie chcą uczestniczyć w scentralizowanych usługach komercyjnych.", "welcomeText": "Jesteśmy społecznością mikroblogerów, złożoną z globalnej <span id=\"federated-tooltip\"><div id=\"what-is-federation\">Oznacza to, że nie musisz posiadać konta na {site-title} aby komunikować się z użytkownikami {site-title}, obserwować lub aby mieć obserwujących na {site-title}. Możesz się także rejestrować na innych serwerach <a href=\"http://www.gnu.org/software/social/\">GNU social</a> lub na innej usłudze, która obsługuje protokół <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">OStatus</a>. Możesz nawet uczestniczyć bez rejestracji, jeśli zainstalujesz GNU social na własnym serwerze. </div>Sieci</span> niezależnych serwerów Gnu social, znanych również jako StatusNet. Jesteśmy idealnym miejscem dla <strong>ludzi takich jak Ty</strong>, dla których etyka i solidarność coś znaczy, a które nie chcą uczestniczyć w scentralizowanych usługach komercyjnych.",
"registerNickname": "Nick", "registerNickname": "Nick",
"registerHomepage": "Strona internetowa", "registerHomepage": "Strona internetowa",
"registerBio": "O mnie", "registerBio": "O mnie",
"registerLocation": "Lokalizacja", "registerLocation": "Lokalizacja",
"registerRepeatPassword": "Powtórz hasło", "registerRepeatPassword": "Powtórz hasło",
"moreSettings": "Więcej ustawień", "moreSettings": "Więcej ustawień",
"otherServers": "Alternatywnie można utworzyć konto na innym serwerze GNU social <a href=\"http://federation.skilledtests.com/select_your_server.html\">Porównanie</a>", "otherServers": "Alternatywnie można utworzyć konto na innym serwerze GNU social <a href=\"http://federation.skilledtests.com/select_your_server.html\">Porównanie</a>",
"editMyProfile": "Edytuj profil", "editMyProfile": "Edytuj profil",
"notifications": "Powiadomienia", "notifications": "Powiadomienia",
"xFavedYourQueet": "dodał do ulubionych twój Queet", "xFavedYourQueet": "dodał do ulubionych twój Queet",
"xRepeatedYourQueet": "podał dalej Twojego Queeta", "xRepeatedYourQueet": "podał dalej Twojego Queeta",
"xStartedFollowingYou": "zaczął Cię obserwować", "xStartedFollowingYou": "zaczął Cię obserwować",
"followsYou": "obserwuje Cię", "followsYou": "obserwuje Cię",
"FAQ": "FAQ", "FAQ": "FAQ",
"inviteAFriend": "Zaproś przyjaciół!", "inviteAFriend": "Zaproś przyjaciół!",
"goToExternalProfile": "Pokaż pełny profil", "goToExternalProfile": "Pokaż pełny profil",
"cropAndSave": "Przytnij i zapisz", "cropAndSave": "Przytnij i zapisz",
"showTerms": "Przeczytaj nasze Warunki korzystania", "showTerms": "Przeczytaj nasze Warunki korzystania",
"ellipsisMore": "Więcej", "ellipsisMore": "Więcej",
"blockUser": "Zablokuj", "blockUser": "Zablokuj",
"goToOriginalNotice": "Idź do pierwotnego queeta", "goToOriginalNotice": "Idź do pierwotnego queeta",
"goToTheUsersRemoteProfile": "Idź do zdalnego profilu użytkownika", "goToTheUsersRemoteProfile": "Idź do zdalnego profilu użytkownika",
"clickToDrag":"Kliknij, aby przeciągnąć", "clickToDrag":"Kliknij, aby przeciągnąć",
"keyboardShortcuts":"Skróty klawiszowe", "keyboardShortcuts":"Skróty klawiszowe",
"classicInterface":"Klasyczny {site-title}", "classicInterface":"Klasyczny {site-title}",
"accessibilityToggleLink":"Dla lepszej dostępności należy kliknąć ten link, aby przejść do klasycznego interfejsu", "accessibilityToggleLink":"Dla lepszej dostępności należy kliknąć ten link, aby przejść do klasycznego interfejsu",
"tooltipBookmarkStream":"Dodaj ten strumień do zakładek", "tooltipBookmarkStream":"Dodaj ten strumień do zakładek",
"tooltipTopMenu":"Menu i ustawienia", "tooltipTopMenu":"Menu i ustawienia",
"tooltipAttachImage":"Dodaj zdjęcie", "tooltipAttachImage":"Dodaj zdjęcie",
"tooltipShortenUrls":"Skrócić wszystkie adresy URL w tym queecie", "tooltipShortenUrls":"Skrócić wszystkie adresy URL w tym queecie",
"tooltipReloadStream":"Odśwież strumień", "tooltipReloadStream":"Odśwież strumień",
"tooltipRemoveBookmark":"Usuń tę zakładkę", "tooltipRemoveBookmark":"Usuń tę zakładkę",
"clearHistory":"Wyczyść historię przeglądania", "clearHistory":"Wyczyść historię przeglądania",
"ERRORsomethingWentWrong":"Coś poszło nie tak.", "ERRORsomethingWentWrong":"Coś poszło nie tak.",
"ERRORmustBeLoggedIn":"Musisz być zalogowany, aby zobaczyć ten strumień.", "ERRORmustBeLoggedIn":"Musisz być zalogowany, aby zobaczyć ten strumień.",
"ERRORcouldNotFindUserWithNickname":"Nie można znaleźć użytkownika o nicku \"{nickname}\" na tym serwerze", "ERRORcouldNotFindUserWithNickname":"Nie można znaleźć użytkownika o nicku \"{nickname}\" na tym serwerze",
"ERRORcouldNotFindGroupWithNickname":"Nie można znaleźć grupy o nazie \"{nickname}\" na tym serwerze", "ERRORcouldNotFindGroupWithNickname":"Nie można znaleźć grupy o nazie \"{nickname}\" na tym serwerze",
"ERRORcouldNotFindPage":"Nie można znaleźć podanej strony.", "ERRORcouldNotFindPage":"Nie można znaleźć podanej strony.",
"ERRORnoticeRemoved": "Ten queet został usunięty.", "ERRORnoticeRemoved": "Ten queet został usunięty.",
"ERRORnoContactWithServer": "Nie można nawiązać połączenia z serwerem. Serwer może być przeciążony lub możesz mieć problemy z połączeniem internetowym. Spróbuj ponownie później.", "ERRORnoContactWithServer": "Nie można nawiązać połączenia z serwerem. Serwer może być przeciążony lub możesz mieć problemy z połączeniem internetowym. Spróbuj ponownie później.",
"ERRORattachmentUploadFailed": "Przesyłanie nie powiodło się. Format może być nieobsługiwany lub rozmiar jest zbyt duży.", "ERRORattachmentUploadFailed": "Przesyłanie nie powiodło się. Format może być nieobsługiwany lub rozmiar jest zbyt duży.",
"hideRepliesToPeopleIDoNotFollow":"Ukryj odpowiedzieci od ludzi, których nie obserwuję", "hideRepliesToPeopleIDoNotFollow":"Ukryj odpowiedzieci od ludzi, których nie obserwuję",
"markAllNotificationsAsSeen":"Oznacz wszystkie powiadomienia jako przeczytane", "markAllNotificationsAsSeen":"Oznacz wszystkie powiadomienia jako przeczytane",
"notifyRepliesAndMentions":"Wzmianki i odpowiedzi", "notifyRepliesAndMentions":"Wzmianki i odpowiedzi",
"notifyFavs":"Ulubione", "notifyFavs":"Ulubione",
"notifyRepeats":"Podane dalej", "notifyRepeats":"Podane dalej",
"notifyFollows":"Nowi obserwujący", "notifyFollows":"Nowi obserwujący",
"timelineOptions":"Ustawienia osi czasu", "timelineOptions":"Ustawienia osi czasu",
"ERRORfailedSavingYourSetting":"Błąd podczas zapisywania Twoich ustawień", "ERRORfailedSavingYourSetting":"Błąd podczas zapisywania Twoich ustawień",
"ERRORfailedMarkingAllNotificationsAsRead":"Błąd podczas ozanczania powiadomień jako przeczytane.", "ERRORfailedMarkingAllNotificationsAsRead":"Błąd podczas ozanczania powiadomień jako przeczytane.",
"newNotification": "{new-notice-count} nowe powiadomienie", "newNotification": "{new-notice-count} nowe powiadomienie",
"newNotifications": "{new-notice-count} nowych powiadomień", "newNotifications": "{new-notice-count} nowych powiadomień",
"thisIsANoticeFromABlockedUser":"Ostrzeżenie: To queet od użytkownika, którego zablokowałeś. Kliknij, by zobaczyć.", "thisIsANoticeFromABlockedUser":"Ostrzeżenie: To queet od użytkownika, którego zablokowałeś. Kliknij, by zobaczyć.",
"nicknamesListWithListName":"Lista użytkownika {nickname}: {list-name}", "nicknamesListWithListName":"Lista użytkownika {nickname}: {list-name}",
"myListWithListName":"Moja lista: {list-name}", "myListWithListName":"Moja lista: {list-name}",
"listMembers":"Użytkownicy", "listMembers":"Użytkownicy",
"listSubscribers":"Subskrybujący", "listSubscribers":"Subskrybujący",
"ERRORcouldNotFindList":"Nie ma takiej listy.", "ERRORcouldNotFindList":"Nie ma takiej listy.",
"emailAlreadyInUse":"Już w użyciu", "emailAlreadyInUse":"Już w użyciu",
"addEditLanguageLink":"Pomóż przetłumaczyć {site-title} na inny język", "addEditLanguageLink":"Pomóż przetłumaczyć {site-title} na inny język",
"onlyPartlyTranslated":"{site-title} został przetłumaczony częściowo na język <em>{language-name}</em> ({percent}%).Możesz pomóc w ukończeniu tłumaczenia na <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>", "onlyPartlyTranslated":"{site-title} został przetłumaczony częściowo na język <em>{language-name}</em> ({percent}%).Możesz pomóc w ukończeniu tłumaczenia na <a href=\"https://git.gnu.io/h2p/Qvitter/tree/master/locale\">Qvitter's repository homepage</a>",
"startRant":"Rozpocznij przemówienie", "startRant":"Rozpocznij przemówienie",
"continueRant":"Kontynuuj przemówienie", "continueRant":"Kontynuuj przemówienie",
"hideEmbeddedInTimeline":"Ukryj osadzony kontent na tej osi czasu", "hideEmbeddedInTimeline":"Ukryj osadzony kontent na tej osi czasu",
"hideQuotesInTimeline":"Ukryj cytaty na tej osi czasu", "hideQuotesInTimeline":"Ukryj cytaty na tej osi czasu",
"userBlocks":"Konta, które blokujesz", "userBlocks":"Konta, które blokujesz",
"buttonBlocked":"Zablokowany", "buttonBlocked":"Zablokowany",
"buttonUnblock":"Odblokuj", "buttonUnblock":"Odblokuj",
"failedBlockingUser":"Nie udało się zablokować użytkownika.", "failedBlockingUser":"Nie udało się zablokować użytkownika.",
"failedUnblockingUser":"Nie udało się odblokować użytkownika.", "failedUnblockingUser":"Nie udało się odblokować użytkownika.",
"unblockUser": "Odblokuj", "unblockUser": "Odblokuj",
"tooltipBlocksYou":"Jesteś zablokowany przez {username}.", "tooltipBlocksYou":"Jesteś zablokowany przez {username}.",
"silenced":"Wyciszony", "silenced":"Wyciszony",
"silencedPlural":"Wyciszone profile", "silencedPlural":"Wyciszone profile",
"silencedUsersOnThisInstance":"Wyciszone profile na {site-title}", "silencedUsersOnThisInstance":"Wyciszone profile na {site-title}",
"sandboxed":"Zsandboksowany", "sandboxed":"Zsandboksowany",
"sandboxedPlural":"Zsandboksowane profile", "sandboxedPlural":"Zsandboksowane profile",
"sandboxedUsersOnThisInstance":"Zsandboksowane profile na {site-title}", "sandboxedUsersOnThisInstance":"Zsandboksowane profile na {site-title}",
"silencedStreamDescription":"Wyciszeni użytkownicy nie mogą się zalogować ani dodawać nowych queetów, a te, które już dodali, są ukryte. Dla użytkowników lokalnych jest to podobne do usunięcia, które można cofnąć, zaś dla użytkowników zdalnych jest to zablokowanie całej strony.", "silencedStreamDescription":"Wyciszeni użytkownicy nie mogą się zalogować ani dodawać nowych queetów, a te, które już dodali, są ukryte. Dla użytkowników lokalnych jest to podobne do usunięcia, które można cofnąć, zaś dla użytkowników zdalnych jest to zablokowanie całej strony.",
"sandboxedStreamDescription":"Queety od zsandboksowanych użytkowników są wyłączone z publicznej osi czasu oraz całej sieci. Poza tym mogą oni używać strony jak każdy inny użytkownik.", "sandboxedStreamDescription":"Queety od zsandboksowanych użytkowników są wyłączone z publicznej osi czasu oraz całej sieci. Poza tym mogą oni używać strony jak każdy inny użytkownik.",
"onlyShowNotificationsFromUsersIFollow":"Pokazuj tylko powiadomienia od użytkowników, których obserwuję", "onlyShowNotificationsFromUsersIFollow":"Pokazuj tylko powiadomienia od użytkowników, których obserwuję",
"userOptions":"Więcej opcji", "userOptions":"Więcej opcji",
"silenceThisUser":"Wycisz {nickname}", "silenceThisUser":"Wycisz {nickname}",
"sandboxThisUser":"Zsandboksuj użytkownika {nickname}", "sandboxThisUser":"Zsandboksuj użytkownika {nickname}",
"unSilenceThisUser":"Odcisz {nickname}", "unSilenceThisUser":"Odcisz {nickname}",
"unSandboxThisUser":"Odsandboksuj użytkownika {nickname}", "unSandboxThisUser":"Odsandboksuj użytkownika {nickname}",
"ERRORfailedSandboxingUser":"Błąd poczas sandboksowania/odsandboksowywania użytkownika", "ERRORfailedSandboxingUser":"Błąd poczas sandboksowania/odsandboksowywania użytkownika",
"ERRORfailedSilencingUser":"Błąd podczas uciszania/odciszania użytkownika", "ERRORfailedSilencingUser":"Błąd podczas uciszania/odciszania użytkownika",
"muteUser":"Wycisz", "muteUser":"Wycisz",
"unmuteUser":"Odcisz", "unmuteUser":"Odcisz",
"hideNotificationsFromMutedUsers":"Ukryj powiadomienia od wycziszonych użytkowników", "hideNotificationsFromMutedUsers":"Ukryj powiadomienia od wycziszonych użytkowników",
"thisIsANoticeFromAMutedUser":"Wyciszyłeś autora tego queeta. Kliknij tu, aby go pokazać.", "thisIsANoticeFromAMutedUser":"Wyciszyłeś autora tego queeta. Kliknij tu, aby go pokazać.",
"userMutes":"Użytkownicy, których wyciszyłeś", "userMutes":"Użytkownicy, których wyciszyłeś",
"userBlocked":"Zablokowani użytkownicy", "userBlocked":"Zablokowani użytkownicy",
"userMuted":"Wyciszeni użytkownicy", "userMuted":"Wyciszeni użytkownicy",
"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ń.", "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", "profileAndSettings":"Profil i ustawienia",
"profileSettings":"Ustawienia profilu", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Perfil e Definições",
"profileSettings":"Definições do Perfil", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Perfil e ajustes",
"profileSettings":"Ajustes de perfil", "profileSettings":"Ajustes de perfil",
"thisIsABookmark":"Este é um favorito criado na interface clássica", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>Atenção!</strong> Este é um usuário remoto. Esta página é apenas uma cópia preservada do perfil do usuário, e inclui apenas dados conhecidos por esta instância do GNU social. Visite <a href=\"{remote-profile-url}\" donthijack>o perfil deste usuário no servidor dele</a> para ver o perfil completo.",
"findSomeone":"Encontrar alguém",
"findSomeoneTooltip":"Escreva o nome de usuário ou url do perfil, por exemplo @usuariolocal ou https://instancia.remota/apelido",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -15,7 +15,7 @@
"queetsNounPlural": "Квиты", "queetsNounPlural": "Квиты",
"logout": "Выйти", "logout": "Выйти",
"languageSelected": "Язык:", "languageSelected": "Язык:",
"viewMyProfilePage": "Мой профиль", "viewMyProfilePage": "Просмотр моего профиля",
"expand": "Развернуть", "expand": "Развернуть",
"collapse": "Свернуть", "collapse": "Свернуть",
"details": "Подробно", "details": "Подробно",
@ -112,18 +112,18 @@
"xRepeatedYourQueet": "реквитнули", "xRepeatedYourQueet": "реквитнули",
"xStartedFollowingYou": "теперь читают вас", "xStartedFollowingYou": "теперь читают вас",
"followsYou": "читают вас", "followsYou": "читают вас",
"FAQ": "ЧаВо", "FAQ": "FAQ",
"inviteAFriend": "Пригласите друзей!", "inviteAFriend": "Пригласите друзей!",
"goToExternalProfile": "Перейти к полному профилю", "goToExternalProfile": "Перейти к полному профилю",
"cropAndSave": "Обрезать и сохранить", "cropAndSave": "Обрезать и сохранить",
"showTerms": "Прочтите условия использования", "showTerms": "Прочтите наши Условия использования",
"ellipsisMore": "Больше", "ellipsisMore": "Больше",
"blockUser": "Заблокировать {username}", "blockUser": "Заблокировать {username}",
"goToOriginalNotice": "Перейти к оригинальному квиту", "goToOriginalNotice": "Перейти к оригинальному квиту",
"goToTheUsersRemoteProfile": "Перейти к удалённому профилю пользователя", "goToTheUsersRemoteProfile": "Перейти к удалённому профилю пользователя",
"clickToDrag":"Нажмите для перетаскивания", "clickToDrag":"Нажмите для перетаскивания",
"keyboardShortcuts":"Горячие клавиши", "keyboardShortcuts":"Горячие клавиши",
"classicInterface":"Классический вид: {site-title}", "classicInterface":"Классический {site-title}",
"accessibilityToggleLink":"Для большего удобства, нажмите на эту ссылку, чтобы переключиться на классический интерфейс", "accessibilityToggleLink":"Для большего удобства, нажмите на эту ссылку, чтобы переключиться на классический интерфейс",
"tooltipBookmarkStream":"Добавить эту ленту в закладки", "tooltipBookmarkStream":"Добавить эту ленту в закладки",
"tooltipTopMenu":"Меню и настройки", "tooltipTopMenu":"Меню и настройки",
@ -179,12 +179,12 @@
"sandboxedStreamDescription":"Квиты пользователей в \"песочнице\" исключаются из Публичной Ленты и Всей известной сети. В остальном такие пользователи могут пользоваться сайтом так же, как остальные.", "sandboxedStreamDescription":"Квиты пользователей в \"песочнице\" исключаются из Публичной Ленты и Всей известной сети. В остальном такие пользователи могут пользоваться сайтом так же, как остальные.",
"onlyShowNotificationsFromUsersIFollow":"Показывать уведомления от только читаемых мной пользователей", "onlyShowNotificationsFromUsersIFollow":"Показывать уведомления от только читаемых мной пользователей",
"userOptions":"Пользовательские опции", "userOptions":"Пользовательские опции",
"silenceThisUser":"Заблокировать пользователя {nickname}", "silenceThisUser":"Silence {nickname}",
"sandboxThisUser":"Поместить {nickname} в \"песочницу\"", "sandboxThisUser":"Поместить {nickname} в \"песочницу\"",
"unSilenceThisUser":"Разблокировать {nickname}", "unSilenceThisUser":"Разбанить {nickname}",
"unSandboxThisUser":"Удалить {nickname} из \"песочницы\"", "unSandboxThisUser":"Удалить {nickname} из \"песочницы\"",
"ERRORfailedSandboxingUser":"Ошибка при помещении пользователя в \"песочницу\" или удалении из неё", "ERRORfailedSandboxingUser":"Ошибка при помещении пользователя в \"песочницу\" или удалении из неё",
"ERRORfailedSilencingUser":"Ошибка при блокировки/разблокировки пользователя.", "ERRORfailedSilencingUser":"Ошибка при бане/разбане пользователя.",
"muteUser":"Игнорировать", "muteUser":"Игнорировать",
"unmuteUser":"Прекратить игнорировать", "unmuteUser":"Прекратить игнорировать",
"hideNotificationsFromMutedUsers":"Скрыть уведомления от игнорируемых пользователей", "hideNotificationsFromMutedUsers":"Скрыть уведомления от игнорируемых пользователей",
@ -195,11 +195,5 @@
"mutedStreamDescription":"Вы скрыли этих пользователей из вашей ленты. Вы будете продолжать получать уведомления от этих пользователей, если не выберете &quot;Скрыть уведомления от игнорируемых пользователей&quot; в меню с шестерёнкой на странице уведомлений", "mutedStreamDescription":"Вы скрыли этих пользователей из вашей ленты. Вы будете продолжать получать уведомления от этих пользователей, если не выберете &quot;Скрыть уведомления от игнорируемых пользователей&quot; в меню с шестерёнкой на странице уведомлений",
"profileAndSettings":"Профиль и настройки", "profileAndSettings":"Профиль и настройки",
"profileSettings":"Настройки профиля", "profileSettings":"Настройки профиля",
"thisIsABookmark":"Это закладка, созданная в классическом интерфейсе", "thisIsABookmark":"This is a bookmark created in the Classic interface"
"thisIsARemoteUser":"<strong>Внимание!</strong> Это удаленный пользователь. Эта страница - кешированная копия его профиля, и включает только данные известные этой инстанции GNU social. Перейдите на <a href=\"{remote-profile-url}\" donthijack>профиль пользователя на этом серверсе</a> чтобы просмотреть полный профиль.",
"findSomeone":"Найти кого-нибудь",
"findSomeoneTooltip":"Введите имя пользователя или url профиля, например @localuser или https://remote.instance/nickname",
"tooltipAttachFile":"Прикрепить файл",
"hideEmbeddedInTimeline": "Не показывать предварительный просмотр встроенного контента",
"hideQuotesInTimeline": "Скрыть цитаты"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profil dhe rregullime",
"profileSettings":"Rregullime profili", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -197,9 +197,5 @@
"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.", "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", "profileAndSettings":"Profil och inställningar",
"profileSettings":"Profilinstä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ändarens profil på deras server</a> för att 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",
"tooltipAttachFile":"Bifoga en fil"
} }

View File

@ -95,17 +95,17 @@
"newToQuitter": "{site-title}'da yeni misin?", "newToQuitter": "{site-title}'da yeni misin?",
"signUp": "Kayıt ol", "signUp": "Kayıt ol",
"signUpFullName": "Ad ve soyad", "signUpFullName": "Ad ve soyad",
"signUpEmail": "E-posta", "signUpEmail": "Eposta",
"signUpButtonText": "{site-title}'a kaydol", "signUpButtonText": "{site-title}'a kaydol",
"welcomeHeading": "{site-title} a hoşgeldin.", "welcomeHeading": "{site-title} a hoşgeldin.",
"welcomeText": "Biz bir <span id=\"federated-tooltip\"><div id=\"what-is-federation\">\"Federasyon\" bunun anlamı, {site-title} 'yi izleyebilmen için bir hesaba ihtiyacın yok.{site-title}'daki kullanıcılarla iletişim kurabilirsin. Herhangi bir StatusNet veya GNU social sunucusuna üye olabilir, ya da <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">Ostatus</a> tabanlı protokol üyesi olabilirsin! Herhangi bir servise bağlanmadan <a href=\"http://www.gnu.org/software/social/\">GNU social</a> bağlantısında bulunan yazılımı kendi sunucunda deneyebilirsin! :)</div>federation</span> sosyal adalet ve dayanışmaya önem veren ve merkezi kapitalist hizmetleri bırakmak isteyen mikroblogcuların topluluğudur.", "welcomeText": "We are a <span id=\"federated-tooltip\"><div id=\"what-is-federation\">\"Federation\" means that you don't need a {site-title} account to be able to follow, be followed by or interact with {site-title} users. You can register on any StatusNet or GNU social server or any service based on the the <a href=\"http://www.w3.org/community/ostatus/wiki/Main_Page\">Ostatus</a> protocol! You don't even have to join a service try installing the lovely <a href=\"http://www.gnu.org/software/social/\">GNU social</a> software on your own server! :)</div>federation</span> of microbloggers who care about ethics and solidarity and want to quit the centralised capitalist services.",
"registerNickname": "Kullanıcı adı", "registerNickname": "Kullanıcı adı",
"registerHomepage": "İnternet Sitesi", "registerHomepage": "İnternet Sitesi",
"registerBio": "Kişisel Bilgiler", "registerBio": "Kişisel Bilgiler",
"registerLocation": "Konum", "registerLocation": "Konum",
"registerRepeatPassword": "Şifreni tekrar gir", "registerRepeatPassword": "Şifreni tekrar gir",
"moreSettings": "Diğer ayarlar", "moreSettings": "Diğer ayarlar",
"otherServers": "Alternatif olarak GNU sosyal ında başka bir sunucuda hesap oluşturabilirsiniz. <a href=\"http://federation.skilledtests.com/select_your_server.html\">Karşılaştırın</a>", "otherServers": "Alternatif olarak GNU sosyal networkünde başka bir sunucu da hesap oluşturabilirsiniz. <a href=\"http://federation.skilledtests.com/select_your_server.html\">Karşılaştırın</a>",
"editMyProfile": "Profili düzenle", "editMyProfile": "Profili düzenle",
"notifications": "Bildirimler", "notifications": "Bildirimler",
"xFavedYourQueet": "Queet'ini favorilerine ekledi", "xFavedYourQueet": "Queet'ini favorilerine ekledi",
@ -118,11 +118,11 @@
"cropAndSave": "Kırp ve kaydet", "cropAndSave": "Kırp ve kaydet",
"showTerms": "Kullanım Şartlarını okuyun", "showTerms": "Kullanım Şartlarını okuyun",
"ellipsisMore": "Daha fazla", "ellipsisMore": "Daha fazla",
"blockUser": "{username}'i engelle", "blockUser": "Engelle {username}",
"goToOriginalNotice": "Orijinal iletiye git", "goToOriginalNotice": "Orijinal iletiye git",
"goToTheUsersRemoteProfile": "Kullanıcının uzak profiline git", "goToTheUsersRemoteProfile": "Kullanıcının uzak profiline git",
"clickToDrag":"Sürüklemek için tıklayın", "clickToDrag":"Sürüklemek için tıklayın",
"keyboardShortcuts":"Klavye kısayolları", "keyboardShortcuts":"Kılavye kısayolları",
"classicInterface":"Klasik {site-title}", "classicInterface":"Klasik {site-title}",
"accessibilityToggleLink":"Daha iyi erişilebilirlik için klasik arayüze geçin.", "accessibilityToggleLink":"Daha iyi erişilebilirlik için klasik arayüze geçin.",
"tooltipBookmarkStream":"Akışı yer imlerinize ekleyin", "tooltipBookmarkStream":"Akışı yer imlerinize ekleyin",
@ -134,10 +134,10 @@
"clearHistory":"Arama geçmişini temizle", "clearHistory":"Arama geçmişini temizle",
"ERRORsomethingWentWrong":"Bir şeyler yanlış gitti.", "ERRORsomethingWentWrong":"Bir şeyler yanlış gitti.",
"ERRORmustBeLoggedIn":"Bu akışı görmek için giriş yapmalısınız.", "ERRORmustBeLoggedIn":"Bu akışı görmek için giriş yapmalısınız.",
"ERRORcouldNotFindUserWithNickname":"Sunucuda \"{nickname}\" kullanıcı adına sahip bir kullanıcı yok.", "ERRORcouldNotFindUserWithNickname":"Sunucuda böyle bir kullanıcı adına sahip \"{nickname}\" kullanıcı yok.",
"ERRORcouldNotFindGroupWithNickname":"Sunucuda \"{nickname}\" kullanıcı adına sahip bir grup yok.", "ERRORcouldNotFindGroupWithNickname":"Sunucuda böyle bir kulanıcı adına sahip \"{nickname}\" grup yok.",
"ERRORcouldNotFindPage":"Sayfa bulunamadı.", "ERRORcouldNotFindPage":"Sayfayı bulamadım.",
"ERRORnoticeRemoved": "İleti kaldırıldı.", "ERRORnoticeRemoved": "ileti kaldırıldı.",
"ERRORnoContactWithServer": "Sunucuyla bağlantı kurulamıyor. Sunucu aşırı yüklenmiş veya internet bağlantısıyla ilgili bir sorun olabilir. Lütfen daha sonra tekrar deneyin!", "ERRORnoContactWithServer": "Sunucuyla bağlantı kurulamıyor. Sunucu aşırı yüklenmiş veya internet bağlantısıyla ilgili bir sorun olabilir. Lütfen daha sonra tekrar deneyin!",
"ERRORattachmentUploadFailed": "Yükleme başarısız oldu. Biçimi desteklenmiyor veya boyutu çok büyük olabilir.", "ERRORattachmentUploadFailed": "Yükleme başarısız oldu. Biçimi desteklenmiyor veya boyutu çok büyük olabilir.",
"hideRepliesToPeopleIDoNotFollow":"Takip etmediğim kullanıcıların cevaplarını gizle", "hideRepliesToPeopleIDoNotFollow":"Takip etmediğim kullanıcıların cevaplarını gizle",
@ -147,7 +147,7 @@
"notifyRepeats":"Requeets", "notifyRepeats":"Requeets",
"notifyFollows":"Yeni takipçiler", "notifyFollows":"Yeni takipçiler",
"timelineOptions":"Akış ayarları", "timelineOptions":"Akış ayarları",
"ERRORfailedSavingYourSetting":"Ayarlar kaydedilirken bir hata oluştu.", "ERRORfailedSavingYourSetting":"Ayarlar kaydedilemedi.",
"ERRORfailedMarkingAllNotificationsAsRead":"Tüm bildirimler görüntülenemedi.", "ERRORfailedMarkingAllNotificationsAsRead":"Tüm bildirimler görüntülenemedi.",
"newNotification": "{new-notice-count} yeni bildirim", "newNotification": "{new-notice-count} yeni bildirim",
"newNotifications": "{new-notice-count} yeni bildirimler", "newNotifications": "{new-notice-count} yeni bildirimler",
@ -164,42 +164,38 @@
"continueRant":"Konuşmaya devam et", "continueRant":"Konuşmaya devam et",
"hideEmbeddedInTimeline":"Bu akışta gömülü içeriği gizle", "hideEmbeddedInTimeline":"Bu akışta gömülü içeriği gizle",
"hideQuotesInTimeline":"Bu akışta alıntıları gizle", "hideQuotesInTimeline":"Bu akışta alıntıları gizle",
"userBlocks":"Engellediğin hesaplar", "userBlocks":"Hesabın engellendi",
"buttonBlocked":"Engellenmiş", "buttonBlocked":"Engellenmiş",
"buttonUnblock":"Engeli kaldır", "buttonUnblock":"Engeli kaldır",
"failedBlockingUser":"Kullanıcı engellenemedi.", "failedBlockingUser":"Kullanıcı engellenemedi.",
"failedUnblockingUser":"Kullanıcının engeli kaldırılamadı.", "failedUnblockingUser":"Kullanıcının engeli kaldırılamadı.",
"unblockUser": "{username} engelini kaldır", "unblockUser": "{username} engelini kaldır",
"tooltipBlocksYou":"{username} kullanıcısı tarafından engellendiniz", "tooltipBlocksYou":"{username} kullanıcısını engellediniz.",
"silenced":"Sessizleştirildi", "silenced":"Susturuldu",
"silencedPlural":"Sessizleştirilen profiller", "silencedPlural":"Susturulan profiller",
"silencedUsersOnThisInstance":"{site-title}'da sessizleştirilen profiller", "silencedUsersOnThisInstance":"Silenced profiles on {site-title}",
"sandboxed":"Karantinaya alınmış", "sandboxed":"Sandboxed",
"sandboxedPlural":"Karantinaya alınan profiller", "sandboxedPlural":"Sandboxed profiles",
"sandboxedUsersOnThisInstance":"{site-title}'da karantinaya alınan profiller", "sandboxedUsersOnThisInstance":"Sandboxed profiles on {site-title}",
"silencedStreamDescription":"Sessizleştirilen kullanıcılar giriş yapamaz ve quip gönderemezler. Yerel kullanıcılar için bu tersine çevrilebilecek bir silme gibidir, dolaylı kullanıcılar için ise bu site çapında bir blok gibidir.", "silencedStreamDescription":"Silenced users can't login or post quips and the quips they've already posted are hidden. For local users it's like a delete that can be reversed, for remote users it's like a site wide block.",
"sandboxedStreamDescription":"Karantinaya alınan kullanıcılar tarafından gönderiler quipler Herkese açık akış ve bilinen bütün ağlardan kovulurlar. Onun dışında, siteyi diğer kullanıcılar gibi kullanabilirler.", "sandboxedStreamDescription":"Quips from sandboxed users are excluded from the Public Timeline and The Whole Known Network. Apart from that, they can use the site like any other user.",
"onlyShowNotificationsFromUsersIFollow":"Sadece takip ettiğim kullanıcılardan gelen bildirimleri göster", "onlyShowNotificationsFromUsersIFollow":"Only show notifications from users I follow",
"userOptions":"Daha fazla kullanıcı ayarları", "userOptions":"More user actions",
"silenceThisUser":"{nickname}'ı sessizleştir", "silenceThisUser":"Silence {nickname}",
"sandboxThisUser":"{nickname}'ı karantinaya al", "sandboxThisUser":"Sandbox {nickname}",
"unSilenceThisUser":"{nickname}'in sessizleştirmesini kaldır", "unSilenceThisUser":"Unsilence {nickname}",
"unSandboxThisUser":"{nickname}'i karantinadan çıkar", "unSandboxThisUser":"Unsandbox {nickname}",
"ERRORfailedSandboxingUser":"Kullanıcıyı karantinaya almada/karantinadan çıkarmada bir hata oluştu", "ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
"ERRORfailedSilencingUser":"Kullanıcıyı sessizleştirme/sessizleştirmesini kaldırmada bir hata oluştu", "ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
"muteUser":"Kullanıcıyı sustur", "muteUser":"Mute",
"unmuteUser":"Susturmayı kaldır", "unmuteUser":"Unmute",
"hideNotificationsFromMutedUsers":"Susturulan kullanıcılardan gelen bildirimleri gizle", "hideNotificationsFromMutedUsers":"Hide notifications from muted users",
"thisIsANoticeFromAMutedUser":"Bu quipin yazarını susturmuşsunuz. Yine de görüntülemek için tıklayın", "thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
"userMutes":"Susturduğun hesaplar", "userMutes":"Accounts you're muting",
"userBlocked":"Engellenmiş hesaplar", "userBlocked":"Blocked accounts",
"userMuted":"Susturulmuş hesaplar", "userMuted":"Muted accounts",
"mutedStreamDescription":"Bu hesapları zaman akışından gizledin. Bildirimler sayfasındaki dişli çark menüsünden &quot;Susturulan kullanıcılardan gelen bildirimleri gizle&quot; seçeneğini seçmediğin sürece bu kullanıcılardan bildirim almaya devam edeceksin.", "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":"Profil ve ayarlar", "profileAndSettings":"Profile and settings",
"profileSettings":"Profil ayarları", "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>Dikkat!</strong>Bu dolaylı bir kullanıcı. Bu sayfa kullanıcının sadece bir önbellek kopyasını ve sadece bu GNU social örneğinde bilinen verileri içerir. Bu kullanıcının profilinin tamamını görmek için <a href=\"{remote-profile-url}\" donthijack>kendi sunucularındaki profilini</a> ziyaret edin.",
"findSomeone":"Bir kullanıcı ara",
"findSomeoneTooltip":"Bir kullanıcı adı veya profil URL'si gir (ör. @localuser veya https://remote.instance/nickname)",
"tooltipAttachFile":"Dosya ekle"
} }

View File

@ -197,9 +197,5 @@
"mutedStreamDescription":"Ви сховали ці облікови записи з вашей стрічкі. Ви будете одержувати оголошення від цих облікових записів, доки Ви не виберіте &quot;Сховати оголошення від корістувачей котрих я ігнорую&quot; в меню з шестернею на сторінкі оголошень.", "mutedStreamDescription":"Ви сховали ці облікови записи з вашей стрічкі. Ви будете одержувати оголошення від цих облікових записів, доки Ви не виберіте &quot;Сховати оголошення від корістувачей котрих я ігнорую&quot; в меню з шестернею на сторінкі оголошень.",
"profileAndSettings":"Профіль та налаштування", "profileAndSettings":"Профіль та налаштування",
"profileSettings":"Налаштування профіля", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -196,9 +196,5 @@
"mutedStreamDescription":"你已从你的时间线中隐藏了这些用户。但你仍将收到这些用户的通知,除非你在设置页的齿轮菜单中选择“隐藏被忽略用户的通知”。", "mutedStreamDescription":"你已从你的时间线中隐藏了这些用户。但你仍将收到这些用户的通知,除非你在设置页的齿轮菜单中选择“隐藏被忽略用户的通知”。",
"profileAndSettings":"个人档案及设置", "profileAndSettings":"个人档案及设置",
"profileSettings":"个人设置", "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",
"tooltipAttachFile":"Attach a file"
} }

View File

@ -196,9 +196,5 @@
"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.", "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", "profileAndSettings":"Profile and settings",
"profileSettings":"Profile 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",
"tooltipAttachFile":"Attach a file"
} }