mute and bugfixes
This commit is contained in:
parent
4d5b8e2907
commit
9bf92d11aa
|
@ -153,6 +153,11 @@ class QvitterPlugin extends Plugin {
|
|||
// route/reroute urls
|
||||
public function onRouterInitialized($m)
|
||||
{
|
||||
$m->connect(':nickname/mutes',
|
||||
array('action' => 'qvitter',
|
||||
'nickname' => Nickname::INPUT_FMT));
|
||||
$m->connect('api/qvitter/mutes.json',
|
||||
array('action' => 'ApiQvitterMutes'));
|
||||
$m->connect('api/qvitter/sandboxed.:format',
|
||||
array('action' => 'ApiQvitterSandboxed',
|
||||
'format' => '(xml|json)'));
|
||||
|
@ -1291,6 +1296,16 @@ class QvitterPlugin extends Plugin {
|
|||
$notification->whereAdd(sprintf('qvitternotification.from_profile_id IN (SELECT subscribed FROM subscription WHERE subscriber = %u)', $user_id));
|
||||
}
|
||||
|
||||
// the user might have opted out from notifications from profiles they have muted
|
||||
$hide_notifications_from_muted_users = Profile_prefs::getConfigData($profile, 'qvitter', 'hide_notifications_from_muted_users');
|
||||
if($hide_notifications_from_muted_users == '1') {
|
||||
$muted_ids = QvitterMuted::getMutedIDs($profile->id,0,10000); // get all (hopefully not more than 10 000...)
|
||||
if($muted_ids !== false && count($muted_ids) > 0) {
|
||||
$ids_imploded = implode(',',$muted_ids);
|
||||
$notification->whereAdd('qvitternotification.from_profile_id NOT IN ('.$ids_imploded.')');
|
||||
}
|
||||
}
|
||||
|
||||
// the user might have opted out from certain notification types
|
||||
$current_profile = $user->getProfile();
|
||||
$disable_notify_replies_and_mentions = Profile_prefs::getConfigData($current_profile, 'qvitter', 'disable_notify_replies_and_mentions');
|
||||
|
|
|
@ -96,7 +96,7 @@ class ApiQvitterBlocksAction extends ApiPrivateAuthAction
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the user's subscribers (followers) as an array of profiles
|
||||
* Get the user's blocked profiles
|
||||
*
|
||||
* @return array Profiles
|
||||
*/
|
||||
|
|
182
actions/apiqvittermutes.php
Normal file
182
actions/apiqvittermutes.php
Normal file
|
@ -0,0 +1,182 @@
|
|||
<?php
|
||||
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
· ·
|
||||
· API for getting all muted profiles for a profile ·
|
||||
· ·
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
· ·
|
||||
· ·
|
||||
· 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 ApiQvitterMutesAction extends ApiPrivateAuthAction
|
||||
{
|
||||
var $profiles = null;
|
||||
|
||||
/**
|
||||
* Take arguments for running
|
||||
*
|
||||
* @param array $args $_REQUEST args
|
||||
*
|
||||
* @return boolean success flag
|
||||
*/
|
||||
protected function prepare(array $args=array())
|
||||
{
|
||||
parent::prepare($args);
|
||||
|
||||
$this->format = 'json';
|
||||
|
||||
$this->count = (int)$this->arg('count', 100);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the request
|
||||
*
|
||||
* Show the profiles
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function handle()
|
||||
{
|
||||
parent::handle();
|
||||
|
||||
$this->target = Profile::current();
|
||||
|
||||
if(!$this->target instanceof Profile) {
|
||||
$this->clientError(_('You have to be logged in to view your mutes.'), 403);
|
||||
}
|
||||
|
||||
$this->profiles = $this->getProfiles();
|
||||
|
||||
$this->initDocument('json');
|
||||
print json_encode($this->showProfiles());
|
||||
$this->endDocument('json');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user's muted profiles
|
||||
*
|
||||
* @return array Profiles
|
||||
*/
|
||||
protected function getProfiles()
|
||||
{
|
||||
$offset = ($this->page - 1) * $this->count;
|
||||
$limit = $this->count;
|
||||
|
||||
$mutes = QvitterMuted::getMutedProfiles($this->target->id, $offset, $limit);
|
||||
|
||||
if($mutes) {
|
||||
return $mutes;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this action read only?
|
||||
*
|
||||
* @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 profile in the stream
|
||||
*/
|
||||
function lastModified()
|
||||
{
|
||||
if (!empty($this->profiles) && (count($this->profiles) > 0)) {
|
||||
return strtotime($this->profiles[0]->modified);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* An entity tag for this action
|
||||
*
|
||||
* Returns an Etag based on the action name, language, user ID, and
|
||||
* timestamps of the first and last profiles in the subscriptions list
|
||||
* There's also an indicator to show whether this action is being called
|
||||
* as /api/statuses/(friends|followers) or /api/(friends|followers)/ids
|
||||
*
|
||||
* @return string etag
|
||||
*/
|
||||
function etag()
|
||||
{
|
||||
if (!empty($this->profiles) && (count($this->profiles) > 0)) {
|
||||
|
||||
$last = count($this->profiles) - 1;
|
||||
|
||||
return '"' . implode(
|
||||
':',
|
||||
array($this->arg('action'),
|
||||
common_user_cache_hash($this->auth_user),
|
||||
common_language(),
|
||||
$this->target->id,
|
||||
'Profiles',
|
||||
strtotime($this->profiles[0]->modified),
|
||||
strtotime($this->profiles[$last]->modified))
|
||||
)
|
||||
. '"';
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the profiles as Twitter-style useres and statuses
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function showProfiles()
|
||||
{
|
||||
$user_arrays = array();
|
||||
if($this->profiles !== false) {
|
||||
foreach ($this->profiles as $profile) {
|
||||
$user_arrays[] = $this->twitterUserArray($profile, false );
|
||||
}
|
||||
}
|
||||
return $user_arrays;
|
||||
}
|
||||
}
|
|
@ -480,11 +480,8 @@ class QvitterAction extends ApiAction
|
|||
<span class="caret-outer"></span>
|
||||
<span class="caret-inner"></span>
|
||||
</li>
|
||||
<li class="fullwidth"><a id="logout"></a></li>
|
||||
<li class="fullwidth"><a id="top-menu-profile-link" class="no-hover-card" href="<?php print $instanceurl.$logged_in_user_obj['screen_name']; ?>"><div id="top-menu-profile-link-fullname"><?php print $logged_in_user_obj['name']; ?></div><div id="top-menu-profile-link-view-profile"></div></a></li>
|
||||
<li class="fullwidth dropdown-divider"></li>
|
||||
<li class="fullwidth"><a id="edit-profile-header-link"></a></li>
|
||||
<li class="fullwidth"><a id="settings" href="<?php print $instanceurl; ?>settings/profile" donthijack></a></li>
|
||||
<li class="fullwidth"><a id="blocking-link" href="<?php print $instanceurl.$logged_in_user_obj['screen_name'].'/blocks'; ?>"></a></li>
|
||||
<li class="fullwidth"><a id="faq-link"></a></li>
|
||||
<li class="fullwidth"><a id="tou-link"></a></li>
|
||||
<li class="fullwidth"><a id="shortcuts-link"></a></li>
|
||||
|
@ -492,6 +489,8 @@ class QvitterAction extends ApiAction
|
|||
<li class="fullwidth"><a id="invite-link" href="<?php print $instanceurl; ?>main/invite"></a></li>
|
||||
<?php } ?>
|
||||
<li class="fullwidth"><a id="classic-link"></a></li>
|
||||
<li class="fullwidth dropdown-divider"></li>
|
||||
<li class="fullwidth"><a id="logout"></a></li>
|
||||
<li class="fullwidth language dropdown-divider"></li>
|
||||
<?php
|
||||
|
||||
|
@ -601,7 +600,7 @@ class QvitterAction extends ApiAction
|
|||
if($logged_in_user) { ?>
|
||||
<div id="user-container" style="display:none;">
|
||||
<div id="user-header" style="background-image:url('<?php print htmlspecialchars($logged_in_user_obj['cover_photo']) ?>')">
|
||||
<div id="mini-edit-profile-button"></div>
|
||||
<div id="mini-logged-in-user-cog-wheel"></div>
|
||||
<div class="profile-header-inner-overlay"></div>
|
||||
<div id="user-avatar-container"><img id="user-avatar" src="<?php print htmlspecialchars($logged_in_user_obj['profile_image_url_profile_size']) ?>" /></div>
|
||||
<div id="user-name"><?php print htmlspecialchars($logged_in_user_obj['name']) ?></div>
|
||||
|
|
|
@ -48,6 +48,16 @@ class NotificationStream
|
|||
$notification->whereAdd(sprintf('qvitternotification.from_profile_id IN (SELECT subscribed FROM subscription WHERE subscriber = %u)', $current_profile->id));
|
||||
}
|
||||
|
||||
// the user might have opted out from notifications from profiles they have muted
|
||||
$hide_notifications_from_muted_users = Profile_prefs::getConfigData($current_profile, 'qvitter', 'hide_notifications_from_muted_users');
|
||||
if($hide_notifications_from_muted_users == '1') {
|
||||
$muted_ids = QvitterMuted::getMutedIDs($current_profile->id,0,10000); // get all (hopefully not more than 10 000...)
|
||||
if($muted_ids !== false && count($muted_ids) > 0) {
|
||||
$ids_imploded = implode(',',$muted_ids);
|
||||
$notification->whereAdd('qvitternotification.from_profile_id NOT IN ('.$ids_imploded.')');
|
||||
}
|
||||
}
|
||||
|
||||
// the user might have opted out from certain notification types
|
||||
$disable_notify_replies_and_mentions = Profile_prefs::getConfigData($current_profile, 'qvitter', 'disable_notify_replies_and_mentions');
|
||||
$disable_notify_favs = Profile_prefs::getConfigData($current_profile, 'qvitter', 'disable_notify_favs');
|
||||
|
|
105
classes/QvitterMuted.php
Normal file
105
classes/QvitterMuted.php
Normal file
|
@ -0,0 +1,105 @@
|
|||
<?php
|
||||
|
||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
· ·
|
||||
· Get muted profiles for a profile ·
|
||||
· ·
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
· ·
|
||||
· ·
|
||||
· 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 QvitterMuted
|
||||
{
|
||||
|
||||
public static function getMutedProfiles($profile_id, $offset = 0, $limit = PROFILES_PER_PAGE)
|
||||
{
|
||||
|
||||
$ids = self::getMutedIDs($profile_id, $offset, $limit);
|
||||
|
||||
if(count($ids) === 0) {
|
||||
return false;
|
||||
} else {
|
||||
$profiles = array();
|
||||
foreach($ids as $id) {
|
||||
try {
|
||||
$profiles[] = Profile::getByID($id);
|
||||
} catch (Exception $e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
if(count($profiles) === 0) {
|
||||
return false;
|
||||
} else {
|
||||
return $profiles;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static function getMutedIDs($profile_id, $offset, $limit)
|
||||
{
|
||||
|
||||
if(!is_numeric($profile_id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$mutes = new Profile_prefs();
|
||||
$mutes->selectAdd('topic');
|
||||
$mutes->whereAdd("profile_id = ".$profile_id);
|
||||
$mutes->whereAdd("namespace = 'qvitter'");
|
||||
$mutes->whereAdd("data = '1'");
|
||||
$mutes->whereAdd("topic LIKE 'mute:%'");
|
||||
$mutes->orderBy('modified DESC');
|
||||
$mutes->limit($offset, $limit);
|
||||
|
||||
if (!$mutes->find()) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$topics = $mutes->fetchAll('topic');
|
||||
$ids = array();
|
||||
foreach($topics as $topic) {
|
||||
$topic_exploded = explode(':',$topic);
|
||||
if(is_numeric($topic_exploded[1])) {
|
||||
$ids[] = $topic_exploded[1];
|
||||
}
|
||||
}
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -491,6 +491,7 @@ button.icon.nav-search span {
|
|||
.dropdown-menu li.fullwidth:not(.dropdown-caret) {
|
||||
width:100%;
|
||||
text-align:left;
|
||||
margin-left: 0;
|
||||
}
|
||||
body.rtl .dropdown-menu li:not(.dropdown-caret) {
|
||||
text-align:right;
|
||||
|
@ -517,11 +518,32 @@ body.rtl .dropdown-menu li:not(.dropdown-caret) {
|
|||
width: 100%;
|
||||
box-sizing:border-box;
|
||||
}
|
||||
|
||||
|
||||
.dropdown-menu li:not(.dropdown-caret) a:hover {
|
||||
color: #FFFFFF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#top-menu-profile-link-fullname,
|
||||
#top-menu-profile-link-view-profile {
|
||||
width:100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-size:11px;
|
||||
color:#999;
|
||||
}
|
||||
#top-menu-profile-link-fullname {
|
||||
font-size:13px;
|
||||
font-weight:700;
|
||||
color:#292f33;
|
||||
margin-top:5px;
|
||||
}
|
||||
#top-menu-profile-link:hover div {
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
/* dropdown menu from ellipsis button */
|
||||
.action-ellipsis-container {
|
||||
position:relative;
|
||||
|
@ -549,6 +571,10 @@ body.rtl .dropdown-menu li:not(.dropdown-caret) {
|
|||
content:' ';
|
||||
}
|
||||
|
||||
.dropdown-menu .row-type-profile-prefs-toggle.tick-disabled::before {
|
||||
content:' ';
|
||||
}
|
||||
|
||||
/* these toggles are inverted, they appear the the user as disabled when enabled,
|
||||
since they are enabled by default....*/
|
||||
.dropdown-menu a#disable_notify_replies_and_mentions.disabled::before,
|
||||
|
@ -1703,6 +1729,34 @@ body.rtl #history-container.menu-container a .chev-right {
|
|||
display:block;
|
||||
}
|
||||
|
||||
.stream-item.user.user-muted > .queet > .user-menu-cog::after,
|
||||
.profile-card.user-muted .user-menu-cog::after,
|
||||
.stream-item.notice.user-muted > .queet .account-group .name::after,
|
||||
.stream-item.notification.user-muted > .queet .account-group .name::after {
|
||||
display:block;
|
||||
position: absolute;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
left:-20px;
|
||||
top:0;
|
||||
color:#e81c4f;
|
||||
content:'\f070';
|
||||
font-family: fontAwesome;
|
||||
}
|
||||
.hover-card .profile-card.user-muted .user-menu-cog::after {
|
||||
left:auto;
|
||||
right:-25px;
|
||||
}
|
||||
.stream-item.notice.user-muted > .queet .account-group .name::after,
|
||||
.stream-item.notification.user-muted > .queet .account-group .name::after {
|
||||
display: inline-block;
|
||||
height: auto;
|
||||
left: auto;
|
||||
margin: 0 5px;
|
||||
position: relative;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.queet-streams {
|
||||
bottom: 0;
|
||||
color: #999999;
|
||||
|
@ -2075,11 +2129,15 @@ body.rtl .queet.rtl .expanded-content {
|
|||
color:#999999;
|
||||
}
|
||||
|
||||
.stream-item:not(.expanded).profile-blocked-by-me {
|
||||
.stream-item:not(.expanded):not(.user).profile-blocked-by-me,
|
||||
.stream-item:not(.expanded):not(.user):not(.notification).user-muted,
|
||||
#feed-body.hide-notifications-from-muted-users .stream-item:not(.expanded).user-muted {
|
||||
height:15px;
|
||||
overflow:hidden;
|
||||
}
|
||||
.stream-item:not(.expanded).profile-blocked-by-me::before {
|
||||
.stream-item:not(.expanded):not(.user).profile-blocked-by-me::before,
|
||||
.stream-item:not(.expanded):not(.user):not(.notification).user-muted::before,
|
||||
#feed-body.hide-notifications-from-muted-users .stream-item:not(.expanded).user-muted::before {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left:0;
|
||||
|
@ -2093,12 +2151,16 @@ body.rtl .queet.rtl .expanded-content {
|
|||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.stream-item:not(.expanded).profile-blocked-by-me .queet {
|
||||
.stream-item:not(.expanded):not(.user).profile-blocked-by-me .queet,
|
||||
.stream-item:not(.expanded):not(.user):not(.notification).user-muted .queet,
|
||||
#feed-body.hide-notifications-from-muted-users .stream-item:not(.expanded).user-muted .queet {
|
||||
width:20px;
|
||||
position:absolute;
|
||||
right:0;
|
||||
}
|
||||
.stream-item:not(.expanded).profile-blocked-by-me .queet::before {
|
||||
.stream-item:not(.expanded):not(.user).profile-blocked-by-me .queet::before,
|
||||
.stream-item:not(.expanded):not(.user):not(.notification).user-muted .queet::before,
|
||||
#feed-body.hide-notifications-from-muted-users .stream-item:not(.expanded).user-muted .queet::before {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left:0;
|
||||
|
@ -2117,6 +2179,10 @@ body.rtl .queet.rtl .expanded-content {
|
|||
border-bottom:1px solid #ddd;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.stream-item:not(.expanded):not(.user):not(.notification).user-muted .queet::before,
|
||||
#feed-body.hide-notifications-from-muted-users .stream-item:not(.expanded).user-muted .queet::before {
|
||||
content: '\f070';
|
||||
}
|
||||
|
||||
#feed-body > .stream-item.activity {
|
||||
display:none;
|
||||
|
@ -3477,18 +3543,18 @@ span.inline-reply-caret .caret-inner {
|
|||
content:'@';
|
||||
}
|
||||
|
||||
#mini-edit-profile-button {
|
||||
#mini-logged-in-user-cog-wheel {
|
||||
width:30px;
|
||||
height:30px;
|
||||
position:absolute;
|
||||
z-index:102;
|
||||
z-index:201;
|
||||
right:5px;
|
||||
top:5px;
|
||||
}
|
||||
#mini-edit-profile-button:before {
|
||||
#mini-logged-in-user-cog-wheel:before {
|
||||
font-family: 'FontAwesome';
|
||||
font-size:17px;
|
||||
content:'\f044';
|
||||
content:'\f013';
|
||||
display:block;
|
||||
position:absolute;
|
||||
width:30px;
|
||||
|
@ -3496,10 +3562,10 @@ span.inline-reply-caret .caret-inner {
|
|||
line-height:30px;
|
||||
text-align:center;
|
||||
text-shadow:none;
|
||||
color:rgba(255,255,255,0.7);
|
||||
color:rgba(255,255,255,0.9);
|
||||
z-index:102;
|
||||
}
|
||||
#mini-edit-profile-button:hover:before {
|
||||
#mini-logged-in-user-cog-wheel:hover:before {
|
||||
color:rgba(255,255,255,1);
|
||||
}
|
||||
|
||||
|
@ -4709,14 +4775,16 @@ background:rgba(0,0,0,0.2);
|
|||
content: " ";
|
||||
clear: both;
|
||||
}
|
||||
.modal-container[id*="popup-reply-"] .modal-footer {
|
||||
.modal-container[id*="popup-reply-"] .modal-footer,
|
||||
#queet-thumb-popup .modal-footer {
|
||||
padding:0;
|
||||
}
|
||||
.modal-container[id*="popup-reply-"] .modal-footer {}
|
||||
|
||||
.modal-footer .queet,
|
||||
.modal-footer .stream-item {
|
||||
border:0 none;
|
||||
cursor:auto;
|
||||
border-radius: 0 0 5px 5px;
|
||||
}
|
||||
.modal-footer .queet:hover {
|
||||
background-color:#fff;
|
||||
|
@ -5568,11 +5636,14 @@ body.rtl #feed-header-inner h2 {
|
|||
z-index: 1;
|
||||
}
|
||||
|
||||
#feed,
|
||||
.profile-card {
|
||||
#feed {
|
||||
position:relative;
|
||||
z-index:10;
|
||||
}
|
||||
.profile-card {
|
||||
position:relative;
|
||||
z-index:11;
|
||||
}
|
||||
|
||||
#search-query-hint {
|
||||
display:none;
|
||||
|
|
|
@ -81,22 +81,31 @@ function getMenu(menuArray) {
|
|||
|
||||
// enabled?
|
||||
var prefEnabledOrDisabled = 'disabled';
|
||||
if(typeof window.qvitterProfilePrefs[this.topic] != 'undefined'
|
||||
&& window.qvitterProfilePrefs[this.topic] !== null
|
||||
&& window.qvitterProfilePrefs[this.topic] != ''
|
||||
&& window.qvitterProfilePrefs[this.topic] !== false
|
||||
&& window.qvitterProfilePrefs[this.topic] != 0
|
||||
&& window.qvitterProfilePrefs[this.topic] != '0') {
|
||||
if(isQvitterProfilePrefEnabled(this.topic)) {
|
||||
prefEnabledOrDisabled = 'enabled';
|
||||
}
|
||||
|
||||
// sometimes we want another label when the toggle is enabled
|
||||
var labelToUse = this.label;
|
||||
if(isQvitterProfilePrefEnabled(this.topic) && typeof this.enabledLabel != 'undefined') {
|
||||
labelToUse = this.enabledLabel;
|
||||
}
|
||||
|
||||
// the tick can be disabled
|
||||
var disableTickClass = '';
|
||||
if(typeof this.tickDisabled != 'undefined' && this.tickDisabled === true) {
|
||||
var disableTickClass = ' tick-disabled';
|
||||
}
|
||||
|
||||
// get row html
|
||||
menuHTML = menuHTML + buildMenuRowFullwidth(this.label, {
|
||||
menuHTML = menuHTML + buildMenuRowFullwidth(labelToUse, {
|
||||
id: this.topic,
|
||||
class: 'row-type-' + this.type + ' ' + prefEnabledOrDisabled,
|
||||
class: 'row-type-' + this.type + ' ' + prefEnabledOrDisabled + disableTickClass,
|
||||
'data-menu-row-type': this.type,
|
||||
'data-profile-prefs-topic': this.topic,
|
||||
'data-profile-prefs-namespace': this.namespace,
|
||||
'data-profile-prefs-label': replaceHtmlSpecialChars(this.label),
|
||||
'data-profile-prefs-enabled-label': replaceHtmlSpecialChars(this.enabledLabel),
|
||||
'data-profile-pref-state': prefEnabledOrDisabled,
|
||||
'data-profile-pref-callback': this.callback
|
||||
});
|
||||
|
@ -380,6 +389,11 @@ function buildProfileCard(data) {
|
|||
if(data.is_sandboxed === true) {
|
||||
is_sandboxed = ' sandboxed';
|
||||
}
|
||||
// muted?
|
||||
var is_muted = '';
|
||||
if(isUserMuted(data.id)) {
|
||||
is_muted = ' user-muted';
|
||||
}
|
||||
|
||||
var followButton = '';
|
||||
|
||||
|
@ -406,7 +420,7 @@ function buildProfileCard(data) {
|
|||
|
||||
// full card html
|
||||
data.profileCardHtml = '\
|
||||
<div class="profile-card' + is_me + logged_in + '">\
|
||||
<div class="profile-card' + is_me + logged_in + is_muted + '">\
|
||||
<div class="profile-header-inner' + is_silenced + is_sandboxed + '" style="' + coverPhotoHtml + '" data-user-id="' + data.id + '" data-screen-name="' + data.screen_name + '">\
|
||||
<div class="profile-header-inner-overlay"></div>\
|
||||
<a class="profile-picture" href="' + data.profile_image_url_original + '">\
|
||||
|
@ -495,6 +509,12 @@ function buildExternalProfileCard(data) {
|
|||
is_sandboxed = ' sandboxed';
|
||||
}
|
||||
|
||||
// muted?
|
||||
var is_muted = '';
|
||||
if(isUserMuted(data.local.id)) {
|
||||
is_muted = ' user-muted';
|
||||
}
|
||||
|
||||
// local id/screen_name
|
||||
var localUserId = data.local.id;
|
||||
var localUserScreenName = data.local.screen_name;
|
||||
|
@ -532,7 +552,7 @@ function buildExternalProfileCard(data) {
|
|||
data.screenNameWithServer = '@' + data.screen_name + '@' + serverUrl;
|
||||
|
||||
data.profileCardHtml = '\
|
||||
<div class="profile-card' + is_me + logged_in + '">\
|
||||
<div class="profile-card' + is_me + logged_in + is_muted + '">\
|
||||
<div class="profile-header-inner' + is_silenced + is_sandboxed + '" style="background-image:url(\'' + cover_photo + '\')" data-user-id="' + localUserId + '" data-screen-name="' + localUserScreenName + '">\
|
||||
<div class="profile-header-inner-overlay"></div>\
|
||||
<a class="profile-picture"><img src="' + data.profile_image_url_profile_size + '" /></a>\
|
||||
|
@ -813,6 +833,10 @@ function setNewCurrentStream(streamObject,setLocation,fallbackId,actionOnSuccess
|
|||
markAllNoticesFromBlockedUsersAsBlockedInJQueryObject(oldStreamState);
|
||||
}
|
||||
|
||||
// mark all notices and profile cards from muted users as muted
|
||||
markAllNoticesFromMutedUsersAsMutedInJQueryObject(oldStreamState);
|
||||
markAllProfileCardsFromMutedUsersAsMutedInDOM();
|
||||
|
||||
// hide dublicate repeats, only show the first/oldest instance of a notice
|
||||
oldStreamState = hideAllButOldestInstanceOfStreamItem(oldStreamState);
|
||||
|
||||
|
@ -1367,7 +1391,7 @@ function cleanUpAfterCollapseQueet(streamItem) {
|
|||
streamItem.find('.view-more-container-top').remove();
|
||||
streamItem.find('.view-more-container-bottom').remove();
|
||||
streamItem.find('.inline-reply-queetbox').remove();
|
||||
streamItem.find('.stream-item.conversation').remove();
|
||||
streamItem.children('.stream-item.conversation').remove();
|
||||
streamItem.find('.show-full-conversation').remove();
|
||||
streamItem.removeAttr('style');
|
||||
queet.removeAttr('style');
|
||||
|
@ -1734,7 +1758,11 @@ function addToFeed(feed, after, extraClasses) {
|
|||
var notificationTime = parseTwitterDate(obj.created_at);
|
||||
|
||||
if(obj.is_seen == '0') {
|
||||
extraClassesThisRun += ' not-seen'
|
||||
extraClassesThisRun += ' not-seen';
|
||||
}
|
||||
|
||||
if(isUserMuted(obj.from_profile.id)) {
|
||||
extraClassesThisRun += ' user-muted';
|
||||
}
|
||||
|
||||
// external
|
||||
|
@ -1743,10 +1771,9 @@ function addToFeed(feed, after, extraClasses) {
|
|||
ostatusHtml = '<a target="_blank" data-tooltip="' + window.sL.goToOriginalNotice + '" class="ostatus-link" href="' + obj.from_profile.statusnet_profile_url + '"></a>';
|
||||
}
|
||||
|
||||
|
||||
if(obj.ntype == 'like') {
|
||||
var noticeTime = parseTwitterDate(obj.notice.created_at);
|
||||
var notificationHtml = '<div data-quitter-id-in-stream="' + obj.id + '" id="stream-item-n-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' notification like">\
|
||||
var notificationHtml = '<div data-user-id="' + obj.from_profile.id + '" data-quitter-id-in-stream="' + obj.id + '" id="stream-item-n-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' notification like">\
|
||||
<div class="queet">\
|
||||
<div class="dogear"></div>\
|
||||
' + ostatusHtml + '\
|
||||
|
@ -1772,7 +1799,7 @@ function addToFeed(feed, after, extraClasses) {
|
|||
}
|
||||
else if(obj.ntype == 'repeat') {
|
||||
var noticeTime = parseTwitterDate(obj.notice.created_at);
|
||||
var notificationHtml = '<div data-quitter-id-in-stream="' + obj.id + '" id="stream-item-n-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' notification repeat">\
|
||||
var notificationHtml = '<div data-user-id="' + obj.from_profile.id + '" data-quitter-id-in-stream="' + obj.id + '" id="stream-item-n-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' notification repeat">\
|
||||
<div class="queet">\
|
||||
<div class="dogear"></div>\
|
||||
' + ostatusHtml + '\
|
||||
|
@ -1803,7 +1830,7 @@ function addToFeed(feed, after, extraClasses) {
|
|||
var notificationHtml = buildQueetHtml(obj.notice, obj.id, extraClassesThisRun + ' notification reply');
|
||||
}
|
||||
else if(obj.ntype == 'follow') {
|
||||
var notificationHtml = '<div data-quitter-id-in-stream="' + obj.id + '" id="stream-item-n-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' notification follow">\
|
||||
var notificationHtml = '<div data-user-id="' + obj.from_profile.id + '" data-quitter-id-in-stream="' + obj.id + '" id="stream-item-n-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' notification follow">\
|
||||
<div class="queet">\
|
||||
<div class="queet-content">\
|
||||
' + ostatusHtml + '\
|
||||
|
@ -2015,6 +2042,11 @@ function buildUserStreamItemHtml(obj) {
|
|||
if(window.loggedIn !== false) {
|
||||
loggedInClass = ' logged-in';
|
||||
}
|
||||
// muted?
|
||||
var mutedClass = '';
|
||||
if(isUserMuted(obj.id)) {
|
||||
mutedClass = ' user-muted';
|
||||
}
|
||||
|
||||
var followButton = '';
|
||||
if(typeof window.loggedIn.screen_name != 'undefined' // if logged in
|
||||
|
@ -2024,7 +2056,7 @@ function buildUserStreamItemHtml(obj) {
|
|||
}
|
||||
}
|
||||
|
||||
return '<div id="stream-item-' + obj.id + '" class="stream-item user' + silencedClass + sandboxedClass + '" data-user-id="' + obj.id + '">\
|
||||
return '<div id="stream-item-' + obj.id + '" class="stream-item user' + silencedClass + sandboxedClass + mutedClass + '" data-user-id="' + obj.id + '">\
|
||||
<div class="queet ' + rtlOrNot + '">\
|
||||
' + followButton + '\
|
||||
<div class="user-menu-cog' + silencedClass + sandboxedClass + loggedInClass + '" data-tooltip="' + window.sL.userOptions + '" data-user-id="' + obj.id + '" data-screen-name="' + obj.screen_name + '"></div>\
|
||||
|
@ -2069,6 +2101,11 @@ function buildQueetHtml(obj, idInStream, extraClasses, requeeted_by, isConversat
|
|||
});
|
||||
}
|
||||
|
||||
// muted? (if class is not already added)
|
||||
if(isUserMuted(obj.user.id) && extraClasses.indexOf(' user-muted') == -1) {
|
||||
extraClasses += ' user-muted';
|
||||
blockingTooltip = ' data-tooltip="' + window.sL.thisIsANoticeFromAMutedUser + '"';
|
||||
}
|
||||
// silenced?
|
||||
if(obj.user.is_silenced === true) {
|
||||
extraClasses += ' silenced';
|
||||
|
|
2
js/lib/bowser.min.js
vendored
2
js/lib/bowser.min.js
vendored
|
@ -3,4 +3,4 @@
|
|||
* https://github.com/ded/bowser
|
||||
* MIT License | (c) Dustin Diaz 2015
|
||||
*/
|
||||
!function(e,t){typeof module!="undefined"&&module.exports?module.exports=t():typeof define=="function"&&define.amd?define(t):this[e]=t()}("bowser",function(){function t(t){function n(e){var n=t.match(e);return n&&n.length>1&&n[1]||""}function r(e){var n=t.match(e);return n&&n.length>1&&n[2]||""}var i=n(/(ipod|iphone|ipad)/i).toLowerCase(),s=/like android/i.test(t),o=!s&&/android/i.test(t),u=/CrOS/.test(t),a=n(/edge\/(\d+(\.\d+)?)/i),f=n(/version\/(\d+(\.\d+)?)/i),l=/tablet/i.test(t),c=!l&&/[^-]mobi/i.test(t),h;/opera|opr/i.test(t)?h={name:"Opera",opera:e,version:f||n(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i)}:/yabrowser/i.test(t)?h={name:"Yandex Browser",yandexbrowser:e,version:f||n(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}:/windows phone/i.test(t)?(h={name:"Windows Phone",windowsphone:e},a?(h.msedge=e,h.version=a):(h.msie=e,h.version=n(/iemobile\/(\d+(\.\d+)?)/i))):/msie|trident/i.test(t)?h={name:"Internet Explorer",msie:e,version:n(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:u?h={name:"Chrome",chromeBook:e,chrome:e,version:n(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:/chrome.+? edge/i.test(t)?h={name:"Microsoft Edge",msedge:e,version:a}:/chrome|crios|crmo/i.test(t)?h={name:"Chrome",chrome:e,version:n(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:i?(h={name:i=="iphone"?"iPhone":i=="ipad"?"iPad":"iPod"},f&&(h.version=f)):/sailfish/i.test(t)?h={name:"Sailfish",sailfish:e,version:n(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(t)?h={name:"SeaMonkey",seamonkey:e,version:n(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel/i.test(t)?(h={name:"Firefox",firefox:e,version:n(/(?:firefox|iceweasel)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(t)&&(h.firefoxos=e)):/silk/i.test(t)?h={name:"Amazon Silk",silk:e,version:n(/silk\/(\d+(\.\d+)?)/i)}:o?h={name:"Android",version:f}:/phantom/i.test(t)?h={name:"PhantomJS",phantom:e,version:n(/phantomjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(t)||/rim\stablet/i.test(t)?h={name:"BlackBerry",blackberry:e,version:f||n(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:/(web|hpw)os/i.test(t)?(h={name:"WebOS",webos:e,version:f||n(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(t)&&(h.touchpad=e)):/bada/i.test(t)?h={name:"Bada",bada:e,version:n(/dolfin\/(\d+(\.\d+)?)/i)}:/tizen/i.test(t)?h={name:"Tizen",tizen:e,version:n(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||f}:/safari/i.test(t)?h={name:"Safari",safari:e,version:f}:h={name:n(/^(.*)\/(.*) /),version:r(/^(.*)\/(.*) /)},!h.msedge&&/(apple)?webkit/i.test(t)?(h.name=h.name||"Webkit",h.webkit=e,!h.version&&f&&(h.version=f)):!h.opera&&/gecko\//i.test(t)&&(h.name=h.name||"Gecko",h.gecko=e,h.version=h.version||n(/gecko\/(\d+(\.\d+)?)/i)),!h.msedge&&(o||h.silk)?h.android=e:i&&(h[i]=e,h.ios=e);var p="";h.windowsphone?p=n(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):i?(p=n(/os (\d+([_\s]\d+)*) like mac os x/i),p=p.replace(/[_\s]/g,".")):o?p=n(/android[ \/-](\d+(\.\d+)*)/i):h.webos?p=n(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):h.blackberry?p=n(/rim\stablet\sos\s(\d+(\.\d+)*)/i):h.bada?p=n(/bada\/(\d+(\.\d+)*)/i):h.tizen&&(p=n(/tizen[\/\s](\d+(\.\d+)*)/i)),p&&(h.osversion=p);var d=p.split(".")[0];if(l||i=="ipad"||o&&(d==3||d==4&&!c)||h.silk)h.tablet=e;else if(c||i=="iphone"||i=="ipod"||o||h.blackberry||h.webos||h.bada)h.mobile=e;return h.msedge||h.msie&&h.version>=10||h.yandexbrowser&&h.version>=15||h.chrome&&h.version>=20||h.firefox&&h.version>=20||h.safari&&h.version>=6||h.opera&&h.version>=10||h.ios&&h.osversion&&h.osversion.split(".")[0]>=6||h.blackberry&&h.version>=10.1?h.a=e:h.msie&&h.version<10||h.chrome&&h.version<20||h.firefox&&h.version<20||h.safari&&h.version<6||h.opera&&h.version<10||h.ios&&h.osversion&&h.osversion.split(".")[0]<6?h.c=e:h.x=e,h}var e=!0,n=t(typeof navigator!="undefined"?navigator.userAgent:"");return n.test=function(e){for(var t=0;t<e.length;++t){var r=e[t];if(typeof r=="string"&&r in n)return!0}return!1},n._detect=t,n})
|
||||
!function(e,t){typeof module!="undefined"&&module.exports?module.exports=t():typeof define=="function"&&define.amd?define(t):this[e]=t()}("bowser",function(){function t(t){function n(e){var n=t.match(e);return n&&n.length>1&&n[1]||""}function r(e){var n=t.match(e);return n&&n.length>1&&n[2]||""}var i=n(/(ipod|iphone|ipad)/i).toLowerCase(),s=/like android/i.test(t),o=!s&&/android/i.test(t),u=/CrOS/.test(t),a=n(/edge\/(\d+(\.\d+)?)/i),f=n(/version\/(\d+(\.\d+)?)/i),l=/tablet/i.test(t),c=!l&&/[^-]mobi/i.test(t),h;/opera|opr/i.test(t)?h={name:"Opera",opera:e,version:f||n(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i)}:/yabrowser/i.test(t)?h={name:"Yandex Browser",yandexbrowser:e,version:f||n(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}:/windows phone/i.test(t)?(h={name:"Windows Phone",windowsphone:e},a?(h.msedge=e,h.version=a):(h.msie=e,h.version=n(/iemobile\/(\d+(\.\d+)?)/i))):/msie|trident/i.test(t)?h={name:"Internet Explorer",msie:e,version:n(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:u?h={name:"Chrome",chromeBook:e,chrome:e,version:n(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:/chrome.+? edge/i.test(t)?h={name:"Microsoft Edge",msedge:e,version:a}:/chrome|crios|crmo/i.test(t)?h={name:"Chrome",chrome:e,version:n(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:i?(h={name:i=="iphone"?"iPhone":i=="ipad"?"iPad":"iPod"},f&&(h.version=f)):/sailfish/i.test(t)?h={name:"Sailfish",sailfish:e,version:n(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(t)?h={name:"SeaMonkey",seamonkey:e,version:n(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel/i.test(t)?(h={name:"Firefox",firefox:e,version:n(/(?:firefox|iceweasel)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(t)&&(h.firefoxos=e)):/silk/i.test(t)?h={name:"Amazon Silk",silk:e,version:n(/silk\/(\d+(\.\d+)?)/i)}:o?h={name:"Android",version:f}:/phantom/i.test(t)?h={name:"PhantomJS",phantom:e,version:n(/phantomjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(t)||/rim\stablet/i.test(t)?h={name:"BlackBerry",blackberry:e,version:f||n(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:/(web|hpw)os/i.test(t)?(h={name:"WebOS",webos:e,version:f||n(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(t)&&(h.touchpad=e)):/bada/i.test(t)?h={name:"Bada",bada:e,version:n(/dolfin\/(\d+(\.\d+)?)/i)}:/tizen/i.test(t)?h={name:"Tizen",tizen:e,version:n(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||f}:/safari/i.test(t)?h={name:"Safari",safari:e,version:f}:h={name:n(/^(.*)\/(.*) /),version:r(/^(.*)\/(.*) /)},!h.msedge&&/(apple)?webkit/i.test(t)?(h.name=h.name||"Webkit",h.webkit=e,!h.version&&f&&(h.version=f)):!h.opera&&/gecko\//i.test(t)&&(h.name=h.name||"Gecko",h.gecko=e,h.version=h.version||n(/gecko\/(\d+(\.\d+)?)/i)),!h.msedge&&(o||h.silk)?h.android=e:i&&(h[i]=e,h.ios=e);var p="";h.windowsphone?p=n(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):i?(p=n(/os (\d+([_\s]\d+)*) like mac os x/i),p=p.replace(/[_\s]/g,".")):o?p=n(/android[ \/-](\d+(\.\d+)*)/i):h.webos?p=n(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):h.blackberry?p=n(/rim\stablet\sos\s(\d+(\.\d+)*)/i):h.bada?p=n(/bada\/(\d+(\.\d+)*)/i):h.tizen&&(p=n(/tizen[\/\s](\d+(\.\d+)*)/i)),p&&(h.osversion=p);var d=p.split(".")[0];if(l||i=="ipad"||o&&(d==3||d==4&&!c)||h.silk)h.tablet=e;else if(c||i=="iphone"||i=="ipod"||o||h.blackberry||h.webos||h.bada)h.mobile=e;return h.msedge||h.msie&&h.version>=10||h.yandexbrowser&&h.version>=15||h.chrome&&h.version>=20||h.firefox&&h.version>=20||h.safari&&h.version>=6||h.opera&&h.version>=10||h.ios&&h.osversion&&h.osversion.split(".")[0]>=6||h.blackberry&&h.version>=10.1?h.a=e:h.msie&&h.version<10||h.chrome&&h.version<20||h.firefox&&h.version<20||h.safari&&h.version<6||h.opera&&h.version<10||h.ios&&h.osversion&&h.osversion.split(".")[0]<6?h.c=e:h.x=e,h}var e=!0,n=t(typeof navigator!="undefined"?navigator.userAgent:"");return n.test=function(e){for(var t=0;t<e.length;++t){var r=e[t];if(typeof r=="string"&&r in n)return!0}return!1},n._detect=t,n})
|
||||
|
|
|
@ -117,9 +117,15 @@ function removeOldestLocalStorageEntries(callback) {
|
|||
}
|
||||
});
|
||||
|
||||
console.log('removed 100 old localstorage items');
|
||||
console.log('removed ' + i + ' old localstorage items');
|
||||
|
||||
callback();
|
||||
if(i>0) {
|
||||
callback();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -290,9 +296,18 @@ function localStorageIsEnabled() {
|
|||
}
|
||||
catch(e) {
|
||||
if (e.name == 'QUOTA_EXCEEDED_ERR' || e.name == 'NS_ERROR_DOM_QUOTA_REACHED' || e.name == 'QuotaExceededError' || e.name == 'W3CException_DOM_QUOTA_EXCEEDED_ERR') {
|
||||
removeOldestLocalStorageEntries(function(){
|
||||
localStorageIsEnabled();
|
||||
|
||||
// if localstorage is empty but returns a full error, we assume it's disabled (in an ugly way)
|
||||
if(localStorage.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var successfulRemoval = removeOldestLocalStorageEntries(function(){
|
||||
return localStorageIsEnabled();
|
||||
});
|
||||
if(successfulRemoval === false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
|
@ -454,6 +469,58 @@ function markAllNoticesFromBlockedUsersAsBlockedInJQueryObject(obj) {
|
|||
|
||||
}
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Marks all notices from muted users in an jQuery object as muted
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function markAllNoticesFromMutedUsersAsMutedInJQueryObject(obj) {
|
||||
|
||||
$.each(obj.find('.stream-item'),function(){
|
||||
if(isUserMuted($(this).attr('data-user-id'))) {
|
||||
$(this).addClass('user-muted');
|
||||
$(this).children('.queet').attr('data-tooltip',window.sL.thisIsANoticeFromAMutedUser);
|
||||
}
|
||||
else {
|
||||
$(this).children('.queet').removeAttr('data-tooltip');
|
||||
$(this).removeClass('user-muted');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Marks all profile cards from muted users as muted in DOM
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function markAllProfileCardsFromMutedUsersAsMutedInDOM() {
|
||||
|
||||
$.each($('body').find('.profile-header-inner'),function(){
|
||||
if(isUserMuted($(this).attr('data-user-id'))) {
|
||||
$(this).parent('.profile-card').addClass('user-muted');
|
||||
}
|
||||
else {
|
||||
$(this).parent('.profile-card').removeClass('user-muted');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Function invoked after mute and unmute
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function hideOrShowNoticesAfterMuteOrUnmute() {
|
||||
markAllNoticesFromMutedUsersAsMutedInJQueryObject($('#feed-body'));
|
||||
markAllProfileCardsFromMutedUsersAsMutedInDOM();
|
||||
}
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Sandbox/unsandbox user and do necessary stuff
|
||||
|
@ -494,6 +561,39 @@ function silenceCreateOrDestroy(arg, callback) {
|
|||
});
|
||||
}
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Get the logged in user's menu array
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function loggedInUsersMenuArray() {
|
||||
return [
|
||||
{
|
||||
type: 'function',
|
||||
functionName: 'goToEditProfile',
|
||||
label: window.sL.editMyProfile
|
||||
},
|
||||
{
|
||||
type: 'link',
|
||||
href: window.siteInstanceURL + 'settings/profile',
|
||||
label: window.sL.settings
|
||||
},
|
||||
{
|
||||
type:'divider'
|
||||
},
|
||||
{
|
||||
type: 'link',
|
||||
href: window.siteInstanceURL + window.loggedIn.screen_name + '/mutes',
|
||||
label: window.sL.userMuted
|
||||
},
|
||||
{
|
||||
type: 'link',
|
||||
href: window.siteInstanceURL + window.loggedIn.screen_name + '/blocks',
|
||||
label: window.sL.userBlocked
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
|
@ -611,20 +711,36 @@ function isLocalURL(url) {
|
|||
· · · · · · · · · */
|
||||
|
||||
function maybeShowTheNewQueetsBar() {
|
||||
var new_queets_num = $('#feed-body').find('.stream-item.hidden:not(.always-hidden):not(.hidden-repeat)').length;
|
||||
if(new_queets_num > 0) {
|
||||
|
||||
var newQueetsNum = $('#feed-body').find('.stream-item.hidden:not(.always-hidden):not(.hidden-repeat)').length;
|
||||
|
||||
// subtract the number of hidden notices from muted users if this isn't the notifications stream,
|
||||
// or if this is the notifications stream but the user has opted out of seeing notifications from muted users
|
||||
var mutedHiddenNum = 0;
|
||||
if(window.currentStreamObject.name == 'notifications') {
|
||||
if($('#feed-body').hasClass('hide-notifications-from-muted-users')) {
|
||||
mutedHiddenNum = $('#feed-body').find('.stream-item.hidden.user-muted:not(.always-hidden):not(.hidden-repeat)').length;
|
||||
}
|
||||
}
|
||||
else {
|
||||
var mutedHiddenNum = $('#feed-body').find('.stream-item.hidden.user-muted:not(.always-hidden):not(.hidden-repeat)').length;
|
||||
}
|
||||
|
||||
newQueetsNum = newQueetsNum - mutedHiddenNum;
|
||||
|
||||
if(newQueetsNum > 0) {
|
||||
|
||||
$('#new-queets-bar').parent().removeClass('hidden');
|
||||
|
||||
// bar label
|
||||
if(new_queets_num == 1) { var q_txt = window.sL.newQueet; }
|
||||
if(newQueetsNum == 1) { var q_txt = window.sL.newQueet; }
|
||||
else { var q_txt = window.sL.newQueets; }
|
||||
if(window.currentStreamObject.name == 'notifications') {
|
||||
if(new_queets_num == 1) { var q_txt = window.sL.newNotification; }
|
||||
if(newQueetsNum == 1) { var q_txt = window.sL.newNotification; }
|
||||
else { var q_txt = window.sL.newNotifications; }
|
||||
}
|
||||
|
||||
$('#new-queets-bar').html(q_txt.replace('{new-notice-count}',new_queets_num));
|
||||
$('#new-queets-bar').html(q_txt.replace('{new-notice-count}',newQueetsNum));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1319,19 +1435,9 @@ function rememberStreamStateInLocalStorage() {
|
|||
|
||||
var feed = $('<div/>').append(firstTwentyVisibleHTML);
|
||||
|
||||
// we add these again (with updated blocking list) when the notices are fetched from the cache
|
||||
feed.children('.stream-item').removeClass('profile-blocked-by-me');
|
||||
feed.children('.stream-item').children('.queet').removeAttr('data-tooltip'); // can contain tooltip about blocked user
|
||||
// we add some of these things again when the notices are fetched from the cache
|
||||
cleanStreamItemsFromClassesAndConversationElements(feed);
|
||||
|
||||
feed.find('.temp-post').remove();
|
||||
feed.children('.stream-item').removeClass('not-seen');
|
||||
feed.children('.stream-item').removeClass('hidden-repeat'); // this means we need hide repeats when adding cached notices to feed later
|
||||
feed.children('.stream-item').removeClass('selected-by-keyboard');
|
||||
feed.find('.dropdown-menu').remove();
|
||||
feed.find('.stream-item').removeClass('expanded').removeClass('next-expanded').removeClass('hidden').removeClass('collapsing').addClass('visible');
|
||||
feed.children('.stream-item').each(function() {
|
||||
cleanUpAfterCollapseQueet($(this));
|
||||
});
|
||||
var feedHtml = feed.html();
|
||||
var profileCardHtml = $('#feed').siblings('.profile-card').outerHTML();
|
||||
var streamData = {
|
||||
|
@ -1343,6 +1449,30 @@ function rememberStreamStateInLocalStorage() {
|
|||
}
|
||||
}
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Clean stream items from classes and conversation elements,
|
||||
· to use e.g. for caching and including in popup footers
|
||||
·
|
||||
· @param streamItems: jQuery object with stream items as children
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function cleanStreamItemsFromClassesAndConversationElements(streamItems) {
|
||||
streamItems.children('.stream-item').removeClass('profile-blocked-by-me');
|
||||
streamItems.children('.stream-item').children('.queet').removeAttr('data-tooltip'); // can contain tooltip about blocked user
|
||||
|
||||
streamItems.find('.temp-post').remove();
|
||||
streamItems.children('.stream-item').removeClass('not-seen');
|
||||
streamItems.children('.stream-item').removeClass('hidden-repeat'); // this means we need hide repeats when adding cached notices to feed later
|
||||
streamItems.children('.stream-item').removeClass('selected-by-keyboard');
|
||||
streamItems.find('.dropdown-menu').remove();
|
||||
streamItems.find('.stream-item').removeClass('expanded').removeClass('next-expanded').removeClass('hidden').removeClass('collapsing').addClass('visible');
|
||||
streamItems.children('.stream-item').each(function() {
|
||||
cleanUpAfterCollapseQueet($(this));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
|
@ -1440,6 +1570,38 @@ function appendUserToMentionsSuggestionsArray(user) {
|
|||
}
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Is a profile pref in the qvitter namespace enabled?
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function isQvitterProfilePrefEnabled(topic) {
|
||||
if(typeof window.qvitterProfilePrefs != 'undefined' && typeof window.qvitterProfilePrefs[topic] != 'undefined'
|
||||
&& window.qvitterProfilePrefs[topic] !== null
|
||||
&& window.qvitterProfilePrefs[topic] != ''
|
||||
&& window.qvitterProfilePrefs[topic] !== false
|
||||
&& window.qvitterProfilePrefs[topic] != 0
|
||||
&& window.qvitterProfilePrefs[topic] != '0') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Is this user muted?
|
||||
·
|
||||
· · · · · · · · · */
|
||||
|
||||
function isUserMuted(userID) {
|
||||
if(isQvitterProfilePrefEnabled('mute:' + userID)) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ·
|
||||
|
@ -1508,6 +1670,12 @@ function iterateRecursiveReplaceHtmlSpecialChars(obj) {
|
|||
return obj;
|
||||
}
|
||||
function replaceHtmlSpecialChars(text) {
|
||||
|
||||
// don't do anything if the text is undefined
|
||||
if(typeof text == 'undefined') {
|
||||
return text;
|
||||
}
|
||||
|
||||
var map = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
|
|
173
js/qvitter.js
173
js/qvitter.js
|
@ -258,6 +258,11 @@ $('body').on('mouseover',function (e) {
|
|||
return true;
|
||||
}
|
||||
|
||||
// no hover card if the element has the no-hover-card class
|
||||
if(targetElement.hasClass('no-hover-card')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// no hovercard for anchor links
|
||||
if(hrefAttr.substring(0,1) == '#') {
|
||||
return true;
|
||||
|
@ -943,15 +948,16 @@ function proceedToSetLanguageAndLogin(data){
|
|||
$('#invite-link').html(window.sL.inviteAFriend);
|
||||
$('#classic-link').html(window.sL.classicInterface);
|
||||
$('#edit-profile-header-link').html(window.sL.editMyProfile);
|
||||
$('#mini-edit-profile-button').attr('data-tooltip',window.sL.editMyProfile);
|
||||
$('#mini-logged-in-user-cog-wheel').attr('data-tooltip',window.sL.profileSettings);
|
||||
$('#accessibility-toggle-link').html(window.sL.accessibilityToggleLink);
|
||||
$('#settingslink .nav-session').attr('data-tooltip',window.sL.tooltipTopMenu);
|
||||
$('#settingslink .nav-session').attr('data-tooltip',window.sL.profileAndSettings);
|
||||
$('#top-compose').attr('data-tooltip',window.sL.compose);
|
||||
$('button.upload-image').attr('data-tooltip',window.sL.tooltipAttachImage);
|
||||
$('button.shorten').attr('data-tooltip',window.sL.tooltipShortenUrls);
|
||||
$('.reload-stream').attr('data-tooltip',window.sL.tooltipReloadStream);
|
||||
$('#clear-history').html(window.sL.clearHistory);
|
||||
$('#user-screen-name, #user-avatar, #user-name').attr('data-tooltip', window.sL.viewMyProfilePage);
|
||||
$('#top-menu-profile-link-view-profile').html(window.sL.viewMyProfilePage);
|
||||
|
||||
// show site body now
|
||||
$('#user-container').css('display','block');
|
||||
|
@ -1207,21 +1213,7 @@ $('body').on('click','.user-menu-cog',function(e){
|
|||
|
||||
// settings etc if it's me
|
||||
if(userID == window.loggedIn.id) {
|
||||
menuArray.push({
|
||||
type: 'function',
|
||||
functionName: 'triggerEditProfileButtonClick',
|
||||
label: window.sL.editMyProfile
|
||||
});
|
||||
menuArray.push({
|
||||
type: 'link',
|
||||
href: window.siteInstanceURL + 'settings/profile',
|
||||
label: window.sL.settings
|
||||
});
|
||||
menuArray.push({
|
||||
type: 'link',
|
||||
href: window.siteInstanceURL + window.loggedIn.screen_name + '/blocks',
|
||||
label: window.sL.userBlocks
|
||||
});
|
||||
menuArray = loggedInUsersMenuArray();
|
||||
}
|
||||
// block etc if it not me
|
||||
else {
|
||||
|
@ -1246,6 +1238,17 @@ $('body').on('click','.user-menu-cog',function(e){
|
|||
});
|
||||
}
|
||||
|
||||
// mute profile pref
|
||||
menuArray.push({
|
||||
type: 'profile-prefs-toggle',
|
||||
namespace: 'qvitter',
|
||||
topic: 'mute:' + userID,
|
||||
label: window.sL.muteUser,
|
||||
enabledLabel: window.sL.unmuteUser,
|
||||
tickDisabled: true,
|
||||
callback: 'hideOrShowNoticesAfterMuteOrUnmute'
|
||||
});
|
||||
|
||||
// moderator actions
|
||||
menuArray = appendModeratorUserActionsToMenuArray(menuArray,userID,userScreenName,sandboxed,silenced);
|
||||
}
|
||||
|
@ -1364,6 +1367,17 @@ $('body').on('click','.sm-ellipsis',function(e){
|
|||
label: window.sL.blockUser.replace('{username}',streamItemUsername)
|
||||
});
|
||||
}
|
||||
|
||||
// mute profile pref
|
||||
menuArray.push({
|
||||
type: 'profile-prefs-toggle',
|
||||
namespace: 'qvitter',
|
||||
topic: 'mute:' + streamItemUserID,
|
||||
label: window.sL.muteUser,
|
||||
enabledLabel: window.sL.unmuteUser,
|
||||
tickDisabled: true,
|
||||
callback: 'hideOrShowNoticesAfterMuteOrUnmute'
|
||||
});
|
||||
}
|
||||
|
||||
// moderator actions
|
||||
|
@ -1402,7 +1416,7 @@ $('body').on('click','.row-type-function',function(e){
|
|||
thisFunctionRow.addClass('clicked');
|
||||
|
||||
var functionName = $(this).attr('data-function-name');
|
||||
if($(this).attr('data-function-arguments') == 'undefined') {
|
||||
if(typeof $(this).attr('data-function-arguments') == 'undefined' || $(this).attr('data-function-arguments') == 'undefined') {
|
||||
var functionArguments = false;
|
||||
}
|
||||
else {
|
||||
|
@ -1445,6 +1459,8 @@ $('body').on('click','.row-type-profile-prefs-toggle',function(e){
|
|||
|
||||
var prefNamespace = thisToggle.attr('data-profile-prefs-namespace');
|
||||
var prefTopic = thisToggle.attr('data-profile-prefs-topic');
|
||||
var prefLabel = thisToggle.attr('data-profile-prefs-label');
|
||||
var prefEnabledLabel = thisToggle.attr('data-profile-prefs-enabled-label');
|
||||
|
||||
// only prefs in the 'qvitter' namespace allowed
|
||||
if(prefNamespace != 'qvitter') {
|
||||
|
@ -1462,12 +1478,18 @@ $('body').on('click','.row-type-profile-prefs-toggle',function(e){
|
|||
thisToggle.removeClass('disabled');
|
||||
thisToggle.addClass('enabled');
|
||||
thisToggle.attr('data-profile-pref-state','enabled');
|
||||
if(prefEnabledLabel != 'undefined') {
|
||||
thisToggle.html(prefEnabledLabel);
|
||||
}
|
||||
window.qvitterProfilePrefs[prefTopic] = '1';
|
||||
}
|
||||
else if(thisToggle.attr('data-profile-pref-state') == 'enabled') {
|
||||
thisToggle.removeClass('enabled');
|
||||
thisToggle.addClass('disabled');
|
||||
thisToggle.attr('data-profile-pref-state','disabled');
|
||||
if(prefEnabledLabel != 'undefined') {
|
||||
thisToggle.html(prefLabel);
|
||||
}
|
||||
window.qvitterProfilePrefs[prefTopic] = '0';
|
||||
}
|
||||
|
||||
|
@ -1519,14 +1541,10 @@ function showOrHideEmbeddedContentInTimelineFromProfilePref() {
|
|||
var showHide = window.qvitterProfilePrefs['hide_embedded_in_timeline:' + window.currentStreamObject.path];
|
||||
if(parseInt(showHide,10) == 1) {
|
||||
$('#feed-body').addClass('embedded-content-hidden-by-user');
|
||||
}
|
||||
else {
|
||||
$('#feed-body').removeClass('embedded-content-hidden-by-user');
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$('#feed-body').removeClass('embedded-content-hidden-by-user');
|
||||
}
|
||||
$('#feed-body').removeClass('embedded-content-hidden-by-user');
|
||||
}
|
||||
|
||||
/* ·
|
||||
|
@ -1540,14 +1558,28 @@ function showOrHideQuotesInTimelineFromProfilePref() {
|
|||
var showHide = window.qvitterProfilePrefs['hide_quotes_in_timeline:' + window.currentStreamObject.path];
|
||||
if(parseInt(showHide,10) == 1) {
|
||||
$('#feed-body').addClass('quotes-hidden-by-user');
|
||||
}
|
||||
else {
|
||||
$('#feed-body').removeClass('quotes-hidden-by-user');
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$('#feed-body').removeClass('quotes-hidden-by-user');
|
||||
$('#feed-body').removeClass('quotes-hidden-by-user');
|
||||
}
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Show or hide notices from muted users in notifications?
|
||||
·
|
||||
· · · · · · · · · · · · · */
|
||||
|
||||
function showOrHideNoticesFromMutedUsersInNotifications() {
|
||||
if(typeof window.qvitterProfilePrefs['hide_notifications_from_muted_users'] != 'undefined') {
|
||||
var showHide = window.qvitterProfilePrefs['hide_notifications_from_muted_users'];
|
||||
if(parseInt(showHide,10) == 1) {
|
||||
$('#feed-body').addClass('hide-notifications-from-muted-users');
|
||||
return;
|
||||
}
|
||||
}
|
||||
$('#feed-body').removeClass('hide-notifications-from-muted-users')
|
||||
}
|
||||
|
||||
|
||||
|
@ -1724,8 +1756,8 @@ $('body').on('click','.member-button',function(event){
|
|||
· · · · · · · · · · · · · */
|
||||
|
||||
$('#user-header').on('click',function(e){
|
||||
// not if we're clicking the mini-edit-profile-button
|
||||
if($(e.target).is('#mini-edit-profile-button')) {
|
||||
// not if we're clicking the mini-logged-in-user-cog-wheel
|
||||
if($(e.target).is('#mini-logged-in-user-cog-wheel')) {
|
||||
return;
|
||||
}
|
||||
setNewCurrentStream(pathToStreamRouter(window.loggedIn.screen_name),true,false);
|
||||
|
@ -2137,15 +2169,13 @@ $('body').on('click','.stream-item .queet img.attachment-thumb',function (event)
|
|||
var thisAttachmentThumbSrc = $(this).attr('src');
|
||||
var parentStreamItem = $(this).closest('.stream-item');
|
||||
var $parentStreamItemClone = $('<div/>').append(parentStreamItem.outerHTML());
|
||||
|
||||
if(!parentStreamItem.hasClass('conversation')) {
|
||||
$parentStreamItemClone.find('.stream-item.conversation').remove();
|
||||
}
|
||||
|
||||
var $queetThumbsClone = $('<div/>').append($parentStreamItemClone.find('.queet-thumbs').outerHTML());
|
||||
|
||||
$parentStreamItemClone.find('.queet-thumbs, .expanded-content, .inline-reply-queetbox, .stream-item-footer').remove();
|
||||
var footerHTML = $parentStreamItemClone.find('.queet').outerHTML();
|
||||
// cleaned version of the stream item to show in the footer
|
||||
cleanStreamItemsFromClassesAndConversationElements($parentStreamItemClone);
|
||||
$parentStreamItemClone.find('.context,.stream-item-footer').remove();
|
||||
var parentStreamItemHTMLWithoutFooter = $parentStreamItemClone.outerHTML();
|
||||
|
||||
$thumbToDisplay = $queetThumbsClone.find('img.attachment-thumb[src="' + thisAttachmentThumbSrc + '"]');
|
||||
$thumbToDisplay.parent().addClass('display-this-thumb');
|
||||
|
||||
|
@ -2188,7 +2218,7 @@ $('body').on('click','.stream-item .queet img.attachment-thumb',function (event)
|
|||
$thisImgInQueetThumbsClone.parent('.thumb-container').children('iframe').attr('height',calculatedDimensions.displayImgHeight);
|
||||
|
||||
// open popup
|
||||
popUpAction('queet-thumb-popup', '', '' + $queetThumbsClone.outerHTML() + '', footerHTML, calculatedDimensions.popUpWidth);
|
||||
popUpAction('queet-thumb-popup', '', '' + $queetThumbsClone.outerHTML() + '', parentStreamItemHTMLWithoutFooter, calculatedDimensions.popUpWidth);
|
||||
disableOrEnableNavigationButtonsInImagePopup($('#queet-thumb-popup'));
|
||||
}
|
||||
}
|
||||
|
@ -2597,12 +2627,13 @@ $('body').on('click','.action-reply-container',function(){
|
|||
var this_stream_item_id = this_stream_item.attr('data-quitter-id');
|
||||
this_stream_item.addClass('replying-to');
|
||||
|
||||
// grabbing the queet and view it in the popup, stripped of footer, reply box and other sruff
|
||||
var $queetHtml = $(this_stream_item.outerHTML());
|
||||
$queetHtml.children('.stream-item.conversation').remove();
|
||||
$queetHtml.find('.context,.stream-item-footer,.inline-reply-queetbox,.expanded-content').remove();
|
||||
var queetHtmlWithoutFooter = $queetHtml.outerHTML();
|
||||
popUpAction('popup-reply-' + this_stream_item_id, window.sL.replyTo + ' ' + this_stream_item.children('.queet').find('.screen-name').html(),replyFormHtml(this_stream_item,this_stream_item_id),queetHtmlWithoutFooter);
|
||||
// grabbing the stream-item and view it in the popup, stripped of conversation footer, reply box and other sruff
|
||||
var streamItemHTML = $('<div/>').html(this_stream_item.outerHTML());
|
||||
cleanStreamItemsFromClassesAndConversationElements(streamItemHTML);
|
||||
streamItemHTML.find('.context,.stream-item-footer').remove();
|
||||
var streamItemHTMLWithoutFooter = streamItemHTML.outerHTML();
|
||||
|
||||
popUpAction('popup-reply-' + this_stream_item_id, window.sL.replyTo + ' ' + this_stream_item.children('.queet').find('.screen-name').html(),replyFormHtml(this_stream_item,this_stream_item_id),streamItemHTMLWithoutFooter);
|
||||
|
||||
$('#popup-reply-' + this_stream_item_id).find('.modal-body').find('.queet-box').trigger('click'); // expand
|
||||
|
||||
|
@ -4140,20 +4171,62 @@ function uploadAttachment(e, thisUploadButton) {
|
|||
|
||||
/* ·
|
||||
·
|
||||
· Small edit profile button on mini-card. Go-to user stream and hit edit button
|
||||
· Small edit profile button on hover cards goes to edit profile
|
||||
·
|
||||
· · · · · · · · · · · · · */
|
||||
|
||||
$('body').on('click','#mini-edit-profile-button, #edit-profile-header-link, .hover-card .edit-profile-button, .row-type-edit-profile-menu-link',function(){
|
||||
$('body').on('click','.hover-card .edit-profile-button',function(){
|
||||
goToEditProfile();
|
||||
});
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
· User menu when clicking the mini cog wheel in the logged in mini card
|
||||
·
|
||||
· · · · · · · · · · · · · */
|
||||
|
||||
$('body').on('click','#mini-logged-in-user-cog-wheel:not(.dropped)',function(){
|
||||
var menu = $(getMenu(loggedInUsersMenuArray())).appendTo(this);
|
||||
alignMenuToParent(menu,$(this));
|
||||
$(this).addClass('dropped');
|
||||
});
|
||||
// hide when clicking it again
|
||||
$('body').on('click','#mini-logged-in-user-cog-wheel.dropped',function(e){
|
||||
if($(e.target).is('#mini-logged-in-user-cog-wheel')) {
|
||||
$('#mini-logged-in-user-cog-wheel').children('.dropdown-menu').remove();
|
||||
$('#mini-logged-in-user-cog-wheel').removeClass('dropped');
|
||||
}
|
||||
});
|
||||
// hide the menu when clicking outside it
|
||||
$('body').on('click',function(e){
|
||||
if($('#mini-logged-in-user-cog-wheel').hasClass('dropped') && !$(e.target).closest('#mini-logged-in-user-cog-wheel').length>0) {
|
||||
$('#mini-logged-in-user-cog-wheel').children('.dropdown-menu').remove();
|
||||
$('#mini-logged-in-user-cog-wheel').removeClass('dropped');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/* ·
|
||||
·
|
||||
· Goes to edit profile
|
||||
·
|
||||
· · · · · · · · · · · · · */
|
||||
|
||||
function goToEditProfile(arg, callback) {
|
||||
if(window.currentStreamObject.name == 'my profile') {
|
||||
$('#page-container > .profile-card .edit-profile-button').trigger('click');
|
||||
if(typeof callback == 'function') {
|
||||
callback(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
setNewCurrentStream(pathToStreamRouter(window.loggedIn.screen_name), true, false, function(){
|
||||
$('#page-container > .profile-card .edit-profile-button').trigger('click');
|
||||
if(typeof callback == 'function') {
|
||||
callback(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
function triggerEditProfileButtonClick() {
|
||||
$('#user-header #mini-edit-profile-button').trigger('click');
|
||||
|
||||
}
|
||||
|
|
|
@ -583,6 +583,13 @@ function pathToStreamRouter(path) {
|
|||
label: window.sL.onlyShowNotificationsFromUsersIFollow,
|
||||
callback: 'reloadCurrentStreamAndClearCache'
|
||||
},
|
||||
{
|
||||
type: 'profile-prefs-toggle',
|
||||
namespace: 'qvitter',
|
||||
topic: 'hide_notifications_from_muted_users',
|
||||
label: window.sL.hideNotificationsFromMutedUsers,
|
||||
callback: 'showOrHideNoticesFromMutedUsersInNotifications'
|
||||
},
|
||||
{
|
||||
type: 'divider'
|
||||
},
|
||||
|
@ -617,7 +624,8 @@ function pathToStreamRouter(path) {
|
|||
];
|
||||
streamObject.callbacks = [
|
||||
'showOrHideEmbeddedContentInTimelineFromProfilePref',
|
||||
'showOrHideQuotesInTimelineFromProfilePref'
|
||||
'showOrHideQuotesInTimelineFromProfilePref',
|
||||
'showOrHideNoticesFromMutedUsersInNotifications'
|
||||
];
|
||||
}
|
||||
return streamObject;
|
||||
|
@ -692,8 +700,7 @@ function pathToStreamRouter(path) {
|
|||
if(pathSplit.length == 2 && /^[a-zA-Z0-9]+$/.test(pathSplit[0]) && pathSplit[1] == 'blocks') {
|
||||
streamObject.name = 'user blocks';
|
||||
streamObject.nickname = pathSplit[0];
|
||||
streamObject.parentPath = streamObject.nickname;
|
||||
streamObject.streamHeader = '@' + replaceHtmlSpecialChars(streamObject.nickname);
|
||||
streamObject.streamHeader = window.sL.userBlocked;
|
||||
streamObject.streamSubHeader = window.sL.userBlocks;
|
||||
streamObject.stream = 'qvitter/blocks.json?count=20&id=' + streamObject.nickname + '&withuserarray=1';
|
||||
streamObject.maxIdOrPage = 'page';
|
||||
|
@ -701,6 +708,19 @@ function pathToStreamRouter(path) {
|
|||
return streamObject;
|
||||
}
|
||||
|
||||
// {screen_name}/mutes
|
||||
if(pathSplit.length == 2 && /^[a-zA-Z0-9]+$/.test(pathSplit[0]) && pathSplit[1] == 'mutes') {
|
||||
streamObject.name = 'user mutes';
|
||||
streamObject.nickname = pathSplit[0];
|
||||
streamObject.streamHeader = window.sL.userMuted;
|
||||
streamObject.streamSubHeader = window.sL.userMutes;
|
||||
streamObject.streamDescription = window.sL.mutedStreamDescription;
|
||||
streamObject.stream = 'qvitter/mutes.json?count=20&withuserarray=1';
|
||||
streamObject.maxIdOrPage = 'page';
|
||||
streamObject.type = 'users';
|
||||
return streamObject;
|
||||
}
|
||||
|
||||
// {screen_name}/groups
|
||||
if(pathSplit.length == 2 && /^[a-zA-Z0-9]+$/.test(pathSplit[0]) && pathSplit[1] == 'groups') {
|
||||
streamObject.name = 'user group list';
|
||||
|
|
|
@ -118,7 +118,7 @@
|
|||
"cropAndSave": "قُص و احفظ.",
|
||||
"showTerms": "Read our Terms of Use",
|
||||
"ellipsisMore": "More",
|
||||
"blockUser": "Block {username}",
|
||||
"blockUser": "Block",
|
||||
"goToOriginalNotice": "Go to original notice",
|
||||
"goToTheUsersRemoteProfile": "Go to the user's remote profile",
|
||||
"clickToDrag":"Click to drag",
|
||||
|
@ -169,7 +169,7 @@
|
|||
"buttonUnblock":"Unblock",
|
||||
"failedBlockingUser":"Failed to block the user.",
|
||||
"failedUnblockingUser":"Failed to unblock the user.",
|
||||
"unblockUser": "Unblock {username}",
|
||||
"unblockUser": "Unblock",
|
||||
"tooltipBlocksYou":"You are blocked from following {username}.",
|
||||
"silenced":"Silenced",
|
||||
"silencedPlural":"Silenced profiles",
|
||||
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@
|
|||
"cropAndSave": "Crop and save",
|
||||
"showTerms": "Read our Terms of Use",
|
||||
"ellipsisMore": "More",
|
||||
"blockUser": "Block {username}",
|
||||
"blockUser": "Block",
|
||||
"goToOriginalNotice": "Go to the original quip",
|
||||
"goToTheUsersRemoteProfile": "Go to the user's remote profile",
|
||||
"clickToDrag":"Click to drag",
|
||||
|
@ -169,7 +169,7 @@
|
|||
"buttonUnblock":"Unblock",
|
||||
"failedBlockingUser":"Failed to block the user.",
|
||||
"failedUnblockingUser":"Failed to unblock the user.",
|
||||
"unblockUser": "Unblock {username}",
|
||||
"unblockUser": "Unblock",
|
||||
"tooltipBlocksYou":"You are blocked from following {username}.",
|
||||
"silenced":"Silenced",
|
||||
"silencedPlural":"Silenced profiles",
|
||||
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Malsilentigi {nickname}",
|
||||
"unSandboxThisUser":"Malsablokesti {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Malsukcesis sablokestigi/malsablokestigi la uzanton",
|
||||
"ERRORfailedSilencingUser":"Malsukcesis silentigi/malsilentigi la uzanton"
|
||||
"ERRORfailedSilencingUser":"Malsukcesis silentigi/malsilentigi la uzanton",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -187,5 +187,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Opphev forstumming for {nickname}",
|
||||
"unSandboxThisUser":"Opphev lekekasse for {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Feilet ved forsøk på å sette i lekekasse/oppheve lekekasse av bruker",
|
||||
"ERRORfailedSilencingUser":"Feilet ved forstumming/oppheving av forstumming av bruker"
|
||||
"ERRORfailedSilencingUser":"Feilet ved forstumming/oppheving av forstumming av bruker",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Ontdemp {nickname}",
|
||||
"unSandboxThisUser":"Beperking opheffen {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Beperking/beperking opheffen voor gebruiker gefaald.",
|
||||
"ERRORfailedSilencingUser":"Dempen/ontdempen gebruiker gefaald."
|
||||
"ERRORfailedSilencingUser":"Dempen/ontdempen gebruiker gefaald.",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Permitir {nickname}",
|
||||
"unSandboxThisUser":"Liberar {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Falha ao restringir/liberar o usuário",
|
||||
"ERRORfailedSilencingUser":"Falha ao silenciar/permitir o usuário"
|
||||
"ERRORfailedSilencingUser":"Falha ao silenciar/permitir o usuário",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -184,5 +184,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -164,7 +164,7 @@
|
|||
"continueRant":"Fortsätt harangen",
|
||||
"hideEmbeddedInTimeline":"Dölj inbäddat innehåll i detta flöde",
|
||||
"hideQuotesInTimeline":"Dölj citat i detta flöde",
|
||||
"userBlocks":"Konton du blockerar",
|
||||
"userBlocks":"Konton som du blockerar",
|
||||
"buttonBlocked":"Blockerad",
|
||||
"buttonUnblock":"Avblockera",
|
||||
"failedBlockingUser":"Misslyckades med att blockera användaren.",
|
||||
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Ta bort nedtystning av {nickname}",
|
||||
"unSandboxThisUser":"Ta {nickname} ur sandlådan",
|
||||
"ERRORfailedSandboxingUser":"Misslyckades med att sätta/ta ur användaren i sandlådan",
|
||||
"ERRORfailedSilencingUser":"Misslyckades med att tysta ner eller ta bort nedtystning"
|
||||
"ERRORfailedSilencingUser":"Misslyckades med att tysta ner eller ta bort nedtystning",
|
||||
"muteUser":"Ignorera",
|
||||
"unmuteUser":"Sluta ignorera",
|
||||
"hideNotificationsFromMutedUsers":"Dölj notiser från användare som du ignorerar",
|
||||
"thisIsANoticeFromAMutedUser":"Det här är en qvittring från en användare som du ignorerar. Klicka här för att visa kvittringen.",
|
||||
"userMutes":"Konton som du ignorerar",
|
||||
"userBlocked":"Blockerade konton",
|
||||
"userMuted":"Ignorerade konton",
|
||||
"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 "Dölj notiser från användare som du ignorerar" från kugghjulsmenyn på notissidan.",
|
||||
"profileAndSettings":"Profil och inställningar",
|
||||
"profileSettings":"Profilinställningar"
|
||||
}
|
||||
|
|
|
@ -186,5 +186,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -185,5 +185,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
|
@ -185,5 +185,15 @@
|
|||
"unSilenceThisUser":"Unsilence {nickname}",
|
||||
"unSandboxThisUser":"Unsandbox {nickname}",
|
||||
"ERRORfailedSandboxingUser":"Failed sandboxing/unsandboxing the user",
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user"
|
||||
"ERRORfailedSilencingUser":"Failed silencing/unsilencing the user",
|
||||
"muteUser":"Mute",
|
||||
"unmuteUser":"Unmute",
|
||||
"hideNotificationsFromMutedUsers":"Hide notifications from muted users",
|
||||
"thisIsANoticeFromAMutedUser":"You have muted the author of this quip. Click here to show it anyway.",
|
||||
"userMutes":"Accounts you're muting",
|
||||
"userBlocked":"Blocked accounts",
|
||||
"userMuted":"Muted accounts",
|
||||
"mutedStreamDescription":"You've hidden these accounts from your timeline. You will still recieve notifications from these accounts, unless you select "Hide notifications from muted users" from the cog wheel menu on the notifications page.",
|
||||
"profileAndSettings":"Profile and settings",
|
||||
"profileSettings":"Profile settings"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user