new public&external notice stream, etc

This commit is contained in:
Hannes Mannerheim 2014-01-28 19:42:47 +01:00
parent 107e21482e
commit 24519675d8
12 changed files with 1607 additions and 485 deletions

View File

@ -9,7 +9,9 @@
* actions/apiaccountupdatelinkcolor.php New api action
* actions/apiaccountupdatelinkcolor.php New api action
* actions/apichecknickname.php New api action
* actions/apiaccountregister.php New api action
* actions/apiaccountregister.php New api action
* actions/apitimelinepublicandexternal.php New api action
* lib/publicandexternalnoticestream.php
* lib/apiaction.php

View File

@ -0,0 +1,330 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Show the public timeline
*
* PHP version 5
*
* LICENCE: This program 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 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category API
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com>
* @author mac65 <mac65@mac65.com>
* @author Mike Cochrane <mikec@mikenz.geek.nz>
* @author Robin Millette <robin@millette.info>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
if (!defined('STATUSNET')) {
exit(1);
}
require_once INSTALLDIR . '/lib/apiprivateauth.php';
/**
* Returns the most recent notices (default 20) posted by everybody
*
* @category API
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com>
* @author mac65 <mac65@mac65.com>
* @author Mike Cochrane <mikec@mikenz.geek.nz>
* @author Robin Millette <robin@millette.info>
* @author Zach Copley <zach@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
/* External API usage documentation. Please update when you change how this method works. */
/*! @page publictimeline statuses/public_timeline
@section Description
Returns the 20 most recent notices from users throughout the system who have
uploaded their own avatars. Depending on configuration, it may or may not
not include notices from automatic posting services.
@par URL patterns
@li /api/statuses/public_timeline.:format
@par Formats (:format)
xml, json, rss, atom
@par HTTP Method(s)
GET
@par Requires Authentication
No
@param since_id (Optional) Returns only statuses with an ID greater
than (that is, more recent than) the specified ID.
@param max_id (Optional) Returns only statuses with an ID less than
(that is, older than) or equal to the specified ID.
@param count (Optional) Specifies the number of statuses to retrieve.
@param page (Optional) Specifies the page of results to retrieve.
@sa @ref apiroot
@subsection usagenotes Usage notes
@li The URL pattern is relative to the @ref apiroot.
@li The XML response uses <a href="http://georss.org/Main_Page">GeoRSS</a>
to encode the latitude and longitude (see example response below <georss:point>).
@subsection exampleusage Example usage
@verbatim
curl http://identi.ca/api/statuses/friends_timeline/evan.xml?count=1&page=2
@endverbatim
@subsection exampleresponse Example response
@verbatim
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
<text>@skwashd oh, commbank reenabled me super quick both times. but disconcerting when you don't expect it though</text>
<truncated>false</truncated>
<created_at>Sat Apr 17 00:49:12 +0000 2010</created_at>
<in_reply_to_status_id>28838393</in_reply_to_status_id>
<source>xmpp</source>
<id>28838456</id>
<in_reply_to_user_id>39303</in_reply_to_user_id>
<in_reply_to_screen_name>skwashd</in_reply_to_screen_name>
<geo></geo>
<favorited>false</favorited>
<user>
<id>44517</id>
<name>joshua may</name>
<screen_name>notjosh</screen_name>
<location></location>
<description></description>
<profile_image_url>http://avatar.identi.ca/44517-48-20090321004106.jpeg</profile_image_url>
<url></url>
<protected>false</protected>
<followers_count>17</followers_count>
<profile_background_color></profile_background_color>
<profile_text_color></profile_text_color>
<profile_link_color></profile_link_color>
<profile_sidebar_fill_color></profile_sidebar_fill_color>
<profile_sidebar_border_color></profile_sidebar_border_color>
<friends_count>20</friends_count>
<created_at>Sat Mar 21 00:40:25 +0000 2009</created_at>
<favourites_count>0</favourites_count>
<utc_offset>0</utc_offset>
<time_zone>UTC</time_zone>
<profile_background_image_url></profile_background_image_url>
<profile_background_tile>false</profile_background_tile>
<statuses_count>100</statuses_count>
<following>false</following>
<notifications>false</notifications>
</user>
</status>
[....]
</statuses>
@endverbatim
*/
class ApiTimelinePublicAndExternalAction extends ApiPrivateAuthAction
{
var $notices = null;
/**
* Take arguments for running
*
* @param array $args $_REQUEST args
*
* @return boolean success flag
*
*/
function prepare($args)
{
parent::prepare($args);
$this->notices = $this->getNotices();
return true;
}
/**
* Handle the request
*
* Just show the notices
*
* @param array $args $_REQUEST data (unused)
*
* @return void
*/
function handle($args)
{
parent::handle($args);
$this->showTimeline();
}
/**
* Show the timeline of notices
*
* @return void
*/
function showTimeline()
{
$sitename = common_config('site', 'name');
$sitelogo = (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png');
// TRANS: Title for site timeline. %s is the StatusNet sitename.
$title = sprintf(_("%s public and external timeline"), $sitename);
$taguribase = TagURI::base();
$id = "tag:$taguribase:PublicAndExternalTimeline";
$link = common_local_url('public');
$self = $this->getSelfUri();
// TRANS: Subtitle for site timeline. %s is the StatusNet sitename.
$subtitle = sprintf(_("%s updates from the whole known network!"), $sitename);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
$this->showRssTimeline(
$this->notices,
$title,
$link,
$subtitle,
null,
$sitelogo,
$self
);
break;
case 'atom':
header('Content-Type: application/atom+xml; charset=utf-8');
$atom = new AtomNoticeFeed($this->auth_user);
$atom->setId($id);
$atom->setTitle($title);
$atom->setSubtitle($subtitle);
$atom->setLogo($sitelogo);
$atom->setUpdated('now');
$atom->addLink(common_local_url('public'));
$atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
$this->raw($atom->getString());
break;
case 'json':
$this->showJsonTimeline($this->notices);
break;
case 'as':
header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE);
$doc = new ActivityStreamJSONDocument($this->auth_user);
$doc->setTitle($title);
$doc->addLink($link, 'alternate', 'text/html');
$doc->addItemsFromNotices($this->notices);
$this->raw($doc->asString());
break;
default:
// TRANS: Client error displayed when coming across a non-supported API method.
$this->clientError(_('API method not found.'), $code = 404);
break;
}
}
/**
* Get notices
*
* @return array notices
*/
function getNotices()
{
$notices = array();
$profile = ($this->auth_user) ? $this->auth_user->getProfile() : null;
$stream = new PublicAndExternalNoticeStream($profile);
$notice = $stream->getNotices(($this->page - 1) * $this->count,
$this->count,
$this->since_id,
$this->max_id);
$notices = $notice->fetchAll();
NoticeList::prefill($notices);
return $notices;
}
/**
* 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 notice in the stream
*/
function lastModified()
{
if (!empty($this->notices) && (count($this->notices) > 0)) {
return strtotime($this->notices[0]->created);
}
return null;
}
/**
* An entity tag for this stream
*
* Returns an Etag based on the action name, language, and
* timestamps of the first and last notice in the timeline
*
* @return string etag
*/
function etag()
{
if (!empty($this->notices) && (count($this->notices) > 0)) {
$last = count($this->notices) - 1;
return '"' . implode(
':',
array($this->arg('action'),
common_user_cache_hash($this->auth_user),
common_language(),
strtotime($this->notices[0]->created),
strtotime($this->notices[$last]->created))
)
. '"';
}
return null;
}
}

View File

@ -219,13 +219,16 @@ class ApiAction extends Action
$avatar = $profile->getOriginalAvatar();
$twitter_user['profile_image_url_original'] = ($avatar) ? $avatar->displayUrl() :
Avatar::defaultImage(AVATAR_PROFILE_SIZE);
$twitter_user['profile_image_url_https'] = $twitter_user['profile_image_url'];
$twitter_user['groups_count'] = $profile->getGroups(0, null)->N;
$twitter_user['linkcolor'] = $user->linkcolor;
$twitter_user['backgroundcolor'] = $user->backgroundcolor;
$twitter_user['linkcolor'] = '';
if(isset($user->linkcolor)) $twitter_user['linkcolor'] = $user->linkcolor;
$twitter_user['backgroundcolor'] = '';
if(isset($user->backgroundcolor)) $twitter_user['backgroundcolor'] = $user->backgroundcolor;
$twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null;
$twitter_user['protected'] = (!empty($user) && $user->private_stream) ? true : false;
$twitter_user['protected'] = (!empty($user) && isset($user->private_stream)) ? true : false;
$twitter_user['followers_count'] = $profile->subscriberCount();
@ -239,7 +242,7 @@ class ApiAction extends Action
$timezone = 'UTC';
if (!empty($user) && $user->timezone) {
if (!empty($user) && isset($user->timezone)) {
$timezone = $user->timezone;
}
@ -362,6 +365,15 @@ class ApiAction extends Action
$twitter_status['repeated'] = false;
}
$notice_groups = $notice->getGroups();
$group_addressees = false;
foreach($notice_groups as $g) {
$group_addressees .= '!'.$g->nickname.' ';
}
$group_addressees = trim($group_addressees);
if($group_addressees == '') $group_addressees = false;
$twitter_status['statusnet_in_groups'] = $group_addressees;
// Enclosures
$attachments = $notice->attachments();
@ -371,9 +383,11 @@ class ApiAction extends Action
foreach ($attachments as $attachment) {
$enclosure_o=$attachment->getEnclosure();
$thumb = File_thumbnail::staticGet('file_id', $attachment->id);
if ($enclosure_o) {
$enclosure = array();
$enclosure['url'] = $enclosure_o->url;
$enclosure['thumb_url'] = $thumb->url;
$enclosure['mimetype'] = $enclosure_o->mimetype;
$enclosure['size'] = $enclosure_o->size;
$twitter_status['attachments'][] = $enclosure;

View File

@ -0,0 +1,110 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
* Public stream
*
* PHP version 5
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Stream
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
if (!defined('STATUSNET')) {
// This check helps protect against security problems;
// your code file can't be executed directly from the web.
exit(1);
}
/**
* Public stream
*
* @category Stream
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
class PublicAndExternalNoticeStream extends ScopingNoticeStream
{
function __construct($profile=null)
{
parent::__construct(new CachingNoticeStream(new RawPublicAndExternalNoticeStream(),
'publicAndExternal'),
$profile);
}
}
/**
* Raw public stream
*
* @category Stream
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
class RawPublicAndExternalNoticeStream extends NoticeStream
{
function getNoticeIds($offset, $limit, $since_id, $max_id)
{
$notice = new Notice();
$notice->selectAdd(); // clears it
$notice->selectAdd('id');
$notice->orderBy('created DESC, id DESC');
if (!is_null($offset)) {
$notice->limit($offset, $limit);
}
// if (common_config('public', 'localonly')) {
// $notice->whereAdd('is_local = ' . Notice::LOCAL_PUBLIC);
// } else {
// -1 == blacklisted, -2 == gateway (i.e. Twitter)
$notice->whereAdd('is_local !='. Notice::LOCAL_NONPUBLIC);
$notice->whereAdd('is_local !='. Notice::GATEWAY);
// }
Notice::addWhereSinceId($notice, $since_id);
Notice::addWhereMaxId($notice, $max_id);
$ids = array();
if ($notice->find()) {
while ($notice->fetch()) {
$ids[] = $notice->id;
}
}
$notice->free();
$notice = NULL;
return $ids;
}
}

18
api-changes-1.1.1/lib/router.php Normal file → Executable file
View File

@ -357,6 +357,11 @@ class Router
array('action' => 'ApiTimelinePublic',
'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/statuses/public_and_external_timeline.:format',
array('action' => 'ApiTimelinePublicAndExternal',
'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/statuses/friends_timeline/:id.:format',
array('action' => 'ApiTimelineFriends',
'id' => Nickname::INPUT_FMT,
@ -392,6 +397,15 @@ class Router
$m->connect('api/statuses/mentions.:format',
array('action' => 'ApiTimelineMentions',
'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/statuses/mentions_timeline/:id.:format',
array('action' => 'ApiTimelineMentions',
'id' => Nickname::INPUT_FMT,
'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/statuses/mentions_timeline.:format',
array('action' => 'ApiTimelineMentions',
'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/statuses/replies/:id.:format',
array('action' => 'ApiTimelineMentions',
@ -820,6 +834,10 @@ class Router
'api/statusnet/media/upload',
array('action' => 'ApiMediaUpload')
);
$m->connect(
'api/statuses/update_with_media.json',
array('action' => 'ApiMediaUpload')
);
// search
$m->connect('api/search.atom', array('action' => 'ApiSearchAtom'));

View File

@ -32,6 +32,14 @@
· ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
html {
overflow-y: scroll;
}
a:active {
outline: none;
}
body {
background-size:100% auto;
background-attachment:fixed;
@ -62,12 +70,13 @@ ul.queet-actions li .icon,
.close-right,
button.icon.nav-search,
.member-button .join-text i,
.external-member-button .join-text i,
.external-follow-button .follow-text i,
.follow-button .follow-text i,
#birds-top,
#logo,
.topbar .global-nav {
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
}
@ -948,26 +957,11 @@ button#submit-login:hover {
top: 9px;
width: 12px;
}
.menu-container a .close-right {
background-repeat: no-repeat;
display: none;
height: 9px;
width: 13px;
background-position: -20px -510px;
margin-left:5px;
margin-top:4px;
}
.menu-container a:hover {
background-color:#fff;
}
.menu-container a:hover .chev-right {
background-position: 0 -160px;
}
.menu-container a:hover .close-right {
display:inline-block;
}
.menu-container a .close-right:hover {
background-position: -40px -510px;
}
.menu-container a.current {
background-color:#fff;
@ -980,6 +974,12 @@ button#submit-login:hover {
.menu-container a.current .chev-right {
background-position: 0 -160px;
}
#history-container a:hover .chev-right {
background-position:-20px -508px;
}
#history-container a:hover .chev-right:hover {
background-position:-40px -508px;
}
#history-container {
display:none;
}
@ -1046,7 +1046,7 @@ button#submit-login:hover {
border-bottom-right-radius: 6px;
float: right;
}
#feed-header {
font-family: "Helvetica Neue",Arial,sans-serif;
font-size: 14px;
@ -1124,20 +1124,40 @@ button#submit-login:hover {
text-decoration: underline;
}
#new-queets-bar-container {
height:40px;
overflow:hidden;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
border-right-width: 1px;
border-left-width: 1px;
border-right-color: rgba(0, 0, 0, 0.1);
border-left-color: rgba(0, 0, 0, 0.1);
border-right-style: solid;
border-left-style: solid;
margin-top:-1px;
}
#new-queets-bar-container.hidden {
height:0;
margin-top:0;
}
#new-queets-bar {
background-color: #F5F5F5;
border-top: 1px solid #DDDDDD;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.05) inset;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.6);
z-index: 2;
background-color: #F5F5F5;
border-bottom: 1px solid #DDDDDD;
border-top: 1px solid #DDDDDD;
cursor: pointer;
display: block;
font-size: 13px;
font-weight: normal;
padding: 10px 1px;
position: relative;
text-align: center;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.6);
top: -1px;
z-index: 2;
text-align: center;
height:18px;
}
#new-queets-bar:hover {
background-color: #eee;
@ -1165,10 +1185,11 @@ button#submit-login:hover {
list-style-image: none;
list-style-position: outside;
list-style-type: none;
-webkit-transition: all 0.1s ease;
-moz-transition: all 0.1s ease;
-o-transition: all 0.1s ease;
transition: all 0.1s ease;
-webkit-transition: opacity 0.1s ease, height 0s linear, margin 0.1s ease;
-moz-transition: opacity 0.1s ease, height 0s linear, margin 0.1s ease;
-o-transition: opacity 0.1s ease, height 0s linear, margin 0.1s ease;
transition: opacity 0.1s ease, height 0s linear, margin 0.1s ease;
height:auto;
}
.stream-item.hidden {
display:none;
@ -1177,7 +1198,14 @@ button#submit-login:hover {
background-color:#F6F6F6;
border:0 none;
opacity:0.5;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
.stream-item.conversation > .queet {
background-color:#F6F6F6;
}
.stream-item.conversation.visible {
opacity:1;
}
@ -1219,6 +1247,16 @@ button#submit-login:hover {
.stream-item.expanded .queet {
border-bottom:1px solid #ddd;
}
.stream-item.expanded.collapsing > .queet {
background-color:#fff;
border-top: 1px solid #DDDDDD;
margin-top:-1px;
-webkit-transition: margin-top 5s linear;
-moz-transition: margin-top 5s linear;
-o-transition: margin-top 5s linear;
transition: margin-top 5s linear;
}
.stream-item.expanded .queet:hover {
background-color:#fff;
}
@ -1228,6 +1266,7 @@ button#submit-login:hover {
.stream-item.expanded div:last-child {
border-radius:0 0 6px 6px;
}
body.rtl .queet.rtl .expanded-content {
direction:rtl;
}
@ -1265,6 +1304,113 @@ body.rtl .queet:not(.rtl) .stream-item-header {
width: 470px;
}
.queet .attachments {
bottom: 0;
height: 100px;
margin-right: -35px;
overflow: hidden;
position: absolute;
right: 0;
width: 35px;
z-index:100;
}
body.rtl .queet .attachments {
right:auto;
left:0;
margin-left:-35px;
}
.queet .attachments:hover {
width: 200px;
-moz-transform:rotate(0deg);
-webkit-transform:rotate(0deg);
-o-transform:rotate(0deg);
-ms-transform:rotate(0deg);
-webkit-transition: width 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
-moz-transition: width 0.2s ease-in-out, -moz-transform 0.2s ease-in-out;
-ms-transition: width 0.2s ease-in-out, -ms-transform 0.2s ease-in-out;
-o-transition: width 0.2s ease-in-out, -o-transform 0.2s ease-in-out;
transition: width 0.2s ease-in-out, transform 0.2s ease-in-out;
}
body.rtl .queet .attachments:hover {
}
.queet .attachments img {
border:1px solid rgba(255,255,255,0,5);
margin-bottom:20px;
margin-right:15px;
max-height:47px;
position:absolute;
right:0;
bottom:0;
z-index:0;
behavior:url(-ms-transform.htc);
-moz-transform:rotate(25deg);
-webkit-transform:rotate(25deg);
-o-transform:rotate(25deg);
-ms-transform:rotate(25deg);
box-shadow:1px 1px 5px rgba(255,255,255,0.5);
-webkit-transition: -webkit-transform 0.2s ease-in-out, max-height 0.2s ease-in-out;
-moz-transition: -moz-transform 0.2s ease-in-out, max-height 0.2s ease-in-out;
-ms-transition: -ms-transform 0.2s ease-in-out, max-height 0.2s ease-in-out;
-o-transition: -o-transform 0.2s ease-in-out, max-height 0.2s ease-in-out;
transition: transform 0.2s ease-in-out, max-height 0.2s ease-in-out;
}
body.rtl .queet .attachments img {
margin-right:0;
margin-left:15px;
right:auto;
left:0;
-moz-transform:rotate(-25deg);
-webkit-transform:rotate(-25deg);
-o-transform:rotate(-25deg);
-ms-transform:rotate(-25deg);
}
.queet .attachments a:nth-child(2) img {
-moz-transform:rotate(35deg);
-webkit-transform:rotate(35deg);
-o-transform:rotate(35deg);
-ms-transform:rotate(35deg);
}
body.rtl .queet .attachments a:nth-child(2) img {
-moz-transform:rotate(-35deg);
-webkit-transform:rotate(-35deg);
-o-transform:rotate(-35deg);
-ms-transform:rotate(-35deg);
}
.queet .attachments a:nth-child(3) img {
-moz-transform:rotate(45deg);
-webkit-transform:rotate(45deg);
-o-transform:rotate(45deg);
-ms-transform:rotate(45deg);
}
body.rtl.queet .attachments a:nth-child(3) img {
-moz-transform:rotate(-45deg);
-webkit-transform:rotate(-45deg);
-o-transform:rotate(-45deg);
-ms-transform:rotate(-45deg);
}
.queet .attachments:hover img {
-moz-transform:rotate(0deg);
-webkit-transform:rotate(0deg);
-o-transform:rotate(0deg);
-ms-transform:rotate(0deg);
max-height:67px;
box-shadow:1px 1px 5px rgba(0,0,0,0.5);
}
body.rtl .queet .attachments:hover img {
-moz-transform:rotate(-0deg);
-webkit-transform:rotate(-0deg);
-o-transform:rotate(-0deg);
-ms-transform:rotate(-0deg);
max-height:67px;
box-shadow:1px 1px 5px rgba(0,0,0,0.5);
}
.stream-item.activity .created-at a {
display:none;
}
@ -1326,7 +1472,7 @@ body.rtl .view-more-container-bottom { direction:rtl; }
width: 48px;
height: 48px;
margin-top: 3px;
margin-left: -58px;
left:12px;
border-top-width: 0px;
border-right-width: 0px;
border-bottom-width: 0px;
@ -1343,7 +1489,7 @@ body.rtl .view-more-container-bottom { direction:rtl; }
border-top-right-radius: 5px;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
float: left;
position:absolute;
border-image-outset: 0 0 0 0;
border-image-repeat: stretch stretch;
border-image-slice: 100% 100% 100% 100%;
@ -1354,6 +1500,9 @@ body.rtl .view-more-container-bottom { direction:rtl; }
list-style-position: outside;
list-style-type: none;
}
.modal-container .stream-item-header .avatar {
left:0;
}
.stream-item-header .name {
font-family: "Helvetica Neue",Arial,sans-serif;
font-size: 14px;
@ -1375,13 +1524,13 @@ body.rtl .view-more-container-bottom { direction:rtl; }
font-style:normal;
}
.stream-item-header .created-at {
font-family: "Helvetica Neue",Arial,sans-serif;
font-size: 12px;
color: #BBBBBB;
line-height: 18px;
margin-top: 1px;
position: relative;
float: right;
font-family: "Helvetica Neue",Arial,sans-serif;
font-size: 12px;
line-height: 18px;
margin-top: 1px;
position: absolute;
right: 12px;
}
.stream-item-header .created-at a {
font-family:"Helvetica Neue",Arial,sans-serif;
@ -1499,9 +1648,7 @@ ul.queet-actions {
bottom: 0;
font-family: "Helvetica Neue",Arial,sans-serif;
font-size: 12px;
color: #333333;
line-height: 18px;
background-color: #FFFFFF;
right: 1px;
margin-top: 0px;
margin-right: 0px;
@ -1512,7 +1659,7 @@ ul.queet-actions {
padding-bottom: 0px;
padding-left: 5px;
position: absolute;
display: none;
display: block;
list-style-image: none;
list-style-position: outside;
list-style-type: none;
@ -1522,11 +1669,23 @@ ul.queet-actions {
left:1px;
padding: 0 5px 0 0;
direction: rtl;
}
.stream-item:hover > .queet ul.queet-actions {
display: block;
}
}
ul.queet-actions li .icon {
background-color:#ddd;
}
ul.queet-actions a {
color:#ddd;
}
.queet:hover ul.queet-actions a {
color:#999;
}
.queet:hover ul.queet-actions li .icon {
background-color:#999;
}
.stream-item.expanded > .queet ul.queet-actions {
display: block;
}
@ -1586,21 +1745,26 @@ ul.queet-actions li .icon.sm-fav {
background-position: -39px -190px;
width: 12px;
}
.stream-item.conversation ul.queet-actions li .icon.sm-reply,
.stream-item:not(.expanded):hover ul.queet-actions li .icon.sm-reply,
.stream-item.expanded > .stream-item.expanded .queet ul.queet-actions li .icon.sm-reply {
background-position: 0 -220px;
}
.stream-item.conversation ul.queet-actions li .icon.sm-rt,
.stream-item:not(.expanded):hover ul.queet-actions li .icon.sm-rt,
.stream-item.expanded > .stream-item.expanded .queet ul.queet-actions li .icon.sm-rt {
background-position: -20px -220px;
}
.stream-item.conversation ul.queet-actions li .icon.sm-trash,
.stream-item:not(.expanded):hover ul.queet-actions li .icon.sm-trash,
.stream-item.expanded > .stream-item.expanded .queet ul.queet-actions li .icon.sm-trash {
background-position: -160px -220px;
}
.stream-item.conversation ul.queet-actions li .icon.sm-fav,
.stream-item:not(.expanded):hover ul.queet-actions li .icon.sm-fav,
.stream-item.expanded > .stream-item.expanded .queet ul.queet-actions li .icon.sm-fav {
background-position: -40px -220px;
background-position: -39px -220px;
}
@ -1610,9 +1774,8 @@ ul.queet-actions li .icon.sm-fav {
margin-right:58px;
}
.queet.rtl .account-group > .avatar {
float:right;
margin-left:0;
margin-right:-58px;
left:auto;
right:12px;
}
.queet.rtl .stream-item-header {
direction: rtl;
@ -1627,7 +1790,8 @@ ul.queet-actions li .icon.sm-fav {
text-align:right;
}
.queet.rtl .created-at {
float:left;
left: 12px;
right: auto;
}
.queet.rtl .queet-text {
text-align:right;
@ -1643,7 +1807,7 @@ ul.queet-actions li .icon.sm-fav {
float:left;
}
.queet.rtl .inline-reply-queetbox {
padding:15px 70px 15px 12px;
padding:10px 70px 10px 12px;
}
.queet-box-template a{
unicode-bidi:bidi-override;
@ -1660,7 +1824,6 @@ ul.queet-actions li .icon.sm-fav {
}
.stream-item-footer .with-icn {
font-size:12px;
color:#999;
}
.stream-item-footer .with-icn .badge-requeeted {
font-family: "Helvetica Neue",Arial,sans-serif;
@ -1703,11 +1866,7 @@ ul.queet-actions li .icon.sm-fav {
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 6px 6px 6px 6px;
margin:8px 0;
overflow:hidden;
-webkit-transition: all 0.1s ease;
-moz-transition: all 0.1s ease;
-o-transition: all 0.1s ease;
transition: all 0.1s ease;
overflow:hidden;
}
.stream-item.expanded > .queet .stream-item-expand {
}
@ -1867,9 +2026,9 @@ ul.stats .avatar-row .avatar {
}
.inline-reply-queetbox {
padding: 15px 12px 15px 70px;
padding: 10px 12px 10px 70px;
position: relative;
background: none repeat scroll 0 0 #F6F6F6;
background: none repeat scroll 0 0 #fff;
border-top:1px solid #DDDDDD;
}
@ -1877,16 +2036,73 @@ ul.stats .avatar-row .avatar {
width: 420px;
}
.reply-avatar {
width: 32px;
height: 32px;
top: 10px;
left: 27px;
border-top-width: 0px;
border-right-width: 0px;
border-bottom-width: 0px;
border-left-width: 0px;
border-top-color: #FF00AE;
border-right-color: #FF00AE;
border-bottom-color: #FF00AE;
border-left-color: #FF00AE;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
position: absolute;
text-shadow: #FFFFFF 0px 1px 0px:
cursor:auto;
}
.queet.rtl .reply-avatar {
left:auto;
right:27px;
}
span.inline-reply-caret {
border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #DDDDDD;
border-width: 0 10px 8px;
left: 34px;
top: -8px;
border-style: solid;
font-size: 0;
position: absolute;
}
.queet.rtl span.inline-reply-caret {
left:auto;
right:34px;
}
.modal-container span.inline-reply-caret {
display:none;
}
span.inline-reply-caret .caret-inner {
border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #FFFFFF;
border-width: 0 9px 7px;
left: -9px;
top: 2px;
border-style: solid;
font-size: 0;
position: absolute;
}
.queet-box-template {
font-family: "Helvetica Neue",Arial,sans-serif;
font-size: 13px;
color: #AAAAAA;
line-height: 20px;
line-height: 14px;
vertical-align: top;
text-overflow: ellipsis;
background-color: #FFFFFF;
width: 420px;
height: 19px;
height: 14px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
@ -2553,6 +2769,7 @@ div.clearfix {
}
.member-button,
.external-member-button,
.external-follow-button,
.follow-button {
font-family: "Helvetica Neue",Arial,sans-serif;
@ -2578,16 +2795,19 @@ div.clearfix {
background-repeat: repeat-x;
padding: 0;
}
.external-member-button.disabled,
.member-button.disabled,
.external-follow-button.disabled,
.follow-button.disabled {
color:#ccc;
}
.external-member-button.disabled i,
.member-button.disabled i,
.external-follow-button.disabled i,
.follow-button.disabled i {
opacity:0.2;
}
.external-member-button:not(.disabled):not(.member):hover,
.member-button:not(.disabled):not(.member):hover,
.external-follow-button:not(.disabled):not(.following):hover,
.follow-button:not(.disabled):not(.following):hover {
@ -2601,6 +2821,7 @@ div.clearfix {
border-color: #BBBBBB;
text-decoration: none;
}
.external-member-button:not(.disabled):not(.member):active,
.member-button:not(.disabled):not(.member):active,
.external-follow-button:not(.disabled):not(.following):active,
.follow-button:not(.disabled):not(.following):active {
@ -2609,6 +2830,7 @@ div.clearfix {
border-color: #BBBBBB;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.5);
}
.external-member-button .button-text,
.member-button .button-text,
.external-follow-button .button-text,
.follow-button .button-text {
@ -2618,6 +2840,7 @@ div.clearfix {
padding: 5px 7px;
text-align: center;
}
.external-member-button .join-text,
.member-button .join-text,
.external-follow-button .follow-text,
.follow-button .follow-text {
@ -2625,6 +2848,7 @@ div.clearfix {
text-align:right;
min-width: 0;
}
.external-member-button .join-text i,
.member-button .join-text i,
.external-follow-button .follow-text i,
.follow-button .follow-text i {
@ -2665,6 +2889,7 @@ div.clearfix {
background-repeat: repeat-x;
border-color: #a93730 #a93730 #952f2a;
}
.external-member-button .join-text,
.member-button .join-text,
.external-follow-button .follow-text,
.follow-button .follow-text {
@ -2988,9 +3213,11 @@ body.rtl .modal-footer button {
height: 20px;
}
#popup-external-join .modal-body,
#popup-external-follow .modal-body {
padding:20px;
}
#popup-external-join input,
#popup-external-follow input {
background-color: #FFFFFF;
border-color: #CCCCCC;
@ -3011,6 +3238,7 @@ body.rtl .modal-footer button {
transition: background 0.2s cubic-bezier(0, 0, 1, 1) 0s;
width:80%;
}
#popup-external-join input:focus,
#popup-external-follow input:focus {
border: 1px solid #56B4EF;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05) inset, 0 0 8px rgba(82, 168, 236, 0.6);
@ -3533,6 +3761,9 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
@media (max-width: 866px) {
#new-queets-bar-container {
height:77px;
}
.language-dropdown {
width:170px;
@ -3583,7 +3814,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
}
#search-query {
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
background-position: -100px -804px;
border: 0 none;
@ -3642,7 +3873,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
#top-compose {
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
background-position: -55px -800px;
cursor: pointer;
@ -3823,7 +4054,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
display:none;
}
.nav-session {
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
background-position: 0 -800px;
height: 49px;
@ -3865,11 +4096,14 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
-moz-box-shadow: inset 0 55px 55px 0 rgba(255,255,255,0.7);
-webkit-box-shadow: inset 0 55px 55px 0 rgba(255,255,255,0.7);
box-shadow: inset 0 55px 55px 0 rgba(255,255,255,0.7);
margin: 0 0 0 -1%;
width: 102%;
}
.menu-container a.my-timeline {
display:block;
}
.menu-container a.favorites {
.menu-container a.favorites,
.menu-container a.public-and-external-timeline {
display:none;
}
.menu-container a,
@ -3883,7 +4117,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
padding:0;
margin:0;
border-radius:0 0 0 0 !important;
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
background-position: center -1003px;
}
@ -3917,7 +4151,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
margin-left: -35px;
width: 70px;
height: 55px;
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
background-color:#ccc;
}
@ -4047,7 +4281,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
.stream-item.expanded:hover > .queet ul.queet-actions {
display: block;
}
.stream-item.expanded:not(.collapsing) > .queet ul.queet-actions {
.stream-item.expanded > .queet ul.queet-actions {
display: block;
position:relative;
width:100%;
@ -4056,14 +4290,14 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
height:45px;
margin-top:20px;
}
.stream-item.collapsing > .queet ul.queet-actions {
/* .stream-item.collapsing > .queet ul.queet-actions {
display:none !important;
}
} */
ul.queet-actions li .icon.sm-fav,
ul.queet-actions li .icon.sm-rt,
ul.queet-actions li .icon.sm-trash,
ul.queet-actions li .icon.sm-reply {
background-image: url("../img/sprite-2x.png");
background-image: url("../img/sprite-2x-v3.png");
background-size: 500px 1329px;
width:35px;
height:35px;
@ -4113,11 +4347,15 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
.client-and-actions .permalink-link {
display:none;
}
.stream-item:not(.expanded) > .queet .queet-actions {
display:none;
}
.stream-item-expand {
display: none;
}
.stream-item.expanded:not(.collapsing) > .queet .stream-item-expand {
.stream-item.expanded > .queet .stream-item-expand {
display: block;
height: 23px;
line-height: 23px;
@ -4157,11 +4395,14 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
}
.stream-item,
.stream-item.expanded {
-webkit-transition: none;
-moz-transition: none;
-o-transition: none;
transition: none;
.stream-item.expanded,
.stream-item > .queet {
-webkit-transition: none !important;
-moz-transition: none !important;
-o-transition: none !important;
transition: none !important;
}
}

View File

@ -61,7 +61,7 @@ if($usehistorypushstate) {
<title><?php print $sitetitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<link rel="stylesheet" type="text/css" href="<?php print $qvitterpath; ?>css/7.css" />
<link rel="stylesheet" type="text/css" href="<?php print $qvitterpath; ?>css/14.css" />
<link rel="stylesheet" type="text/css" href="<?php print $qvitterpath; ?>css/jquery.minicolors.css" />
<link rel="shortcut icon" type="image/x-icon" href="<?php print $qvitterpath; ?>favicon.ico?v=2">
<?php
@ -126,7 +126,6 @@ if($usehistorypushstate) {
.permalink-link:hover,
.stream-item.expanded > .queet .stream-item-expand,
.stream-item-footer .with-icn .requeet-text a b:hover,
ul.queet-actions li .with-icn,
.queet-text span.attachment.more,
.stream-item-header .created-at a:hover,
.stream-item-header a.account-group:hover .name,
@ -137,8 +136,7 @@ if($usehistorypushstate) {
#user-header:hover #user-name,
.cm-mention, .cm-tag, .cm-group, .cm-url, .cm-email {
color:#0084B4;/*COLOREND*/
}
ul.queet-actions li .icon,
}
.topbar .global-nav,
.menu-container {
background-color:#0084B4;/*BACKGROUNDCOLOREND*/
@ -278,6 +276,7 @@ if($usehistorypushstate) {
<a class="stream-selection my-timeline" data-stream-header="@statuses/user_timeline.json" data-stream-name="statuses/user_timeline.json"><i class="chev-right"></i></a>
<a class="stream-selection favorites" data-stream-header="" data-stream-name="favorites.json"><i class="chev-right"></i></a>
<a href="<?php print $instanceurl ?>" class="stream-selection public-timeline" data-stream-header="" data-stream-name="statuses/public_timeline.json"><i class="chev-right"></i></a>
<a href="<?php print $instanceurl ?>main/all" class="stream-selection public-and-external-timeline" data-stream-header="" data-stream-name="statuses/public_and_external_timeline.json?since_id=1"><i class="chev-right"></i></a>
</div>
<div class="menu-container" id="history-container"></div>
</div>
@ -287,7 +286,7 @@ if($usehistorypushstate) {
<h2></h2>
</div>
</div>
<div class="stream-item hidden"><div id="new-queets-bar"></div></div>
<div id="new-queets-bar-container" class="hidden"><div id="new-queets-bar"></div></div>
<div id="feed-body"></div>
</div>
@ -298,10 +297,10 @@ if($usehistorypushstate) {
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/jquery-ui-1.10.3.min.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/jquery.minicolors.min.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/dom-functions-7.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/misc-functions-7.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/dom-functions-12.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/misc-functions-11.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/ajax-functions-4.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/lan-7.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/qvitter-7.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/lan-12.js"></script>
<script type="text/javascript" src="<?php print $qvitterpath; ?>js/qvitter-11.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -186,7 +186,11 @@ function profileCardFromFirstObject(data,screen_name) {
// change design
changeDesign(first.user);
// remove any old profile card
$('#feed').siblings('.profile-card').remove();
// insert profile card into dom
$('#feed').before('<div class="profile-card"><div class="profile-header-inner" style="background-image:url(' + first.user.profile_image_url_original + ')"><div class="profile-header-inner-overlay"></div><a class="profile-picture" href="' + first.user.profile_image_url_original + '"><img src="' + first.user.profile_image_url_profile_size + '" /></a><div class="profile-card-inner"><h1 class="fullname">' + first.user.name + '<span></span></h1><h2 class="username"><span class="screen-name">@' + first.user.screen_name + '</span><span class="follow-status"></span></h2><div class="bio-container"><p>' + first.user.description + '</p></div><p class="location-and-url"><span class="location">' + first.user.location + '</span><span class="divider"> · </span><span class="url"><a href="' + first.user.url + '">' + first.user.url.replace('http://','').replace('https://','') + '</a></span></p></div></div><div class="profile-banner-footer"><ul class="stats"><li><a class="tweet-stats"><strong>' + first.user.statuses_count + '</strong>' + window.sL.notices + '</a></li><li><a class="following-stats"><strong>' + first.user.friends_count + '</strong>' + window.sL.following + '</a></li><li><a class="follower-stats"><strong>' + first.user.followers_count + '</strong>' + window.sL.followers + '</a></li><li><a class="groups-stats"><strong>' + first.user.groups_count + '</strong>' + window.sL.groups + '</a></li></ul>' + followButton + '<div class="clearfix"></div></div></div>');
}
@ -219,7 +223,9 @@ function profileCardFromFirstObject(data,screen_name) {
// change design
changeDesign(data);
// remove any old profile card and show profile card
$('#feed').siblings('.profile-card').remove();
$('#feed').before('<div class="profile-card"><div class="profile-header-inner" style="background-image:url(' + data.profile_image_url_original + ')"><div class="profile-header-inner-overlay"></div><a class="profile-picture" href="' + data.profile_image_url_original + '"><img src="' + data.profile_image_url_profile_size + '" /></a><div class="profile-card-inner"><h1 class="fullname">' + data.name + '<span></span></h1><h2 class="username"><span class="screen-name">@' + data.screen_name + '</span><span class="follow-status"></span></h2><div class="bio-container"><p>' + data.description + '</p></div><p class="location-and-url"><span class="location">' + data.location + '</span><span class="divider"> · </span><span class="url"><a href="' + data.url + '">' + data.url.replace('http://','').replace('https://','') + '</a></span></p></div></div><div class="profile-banner-footer"><ul class="stats"><li><a class="tweet-stats"><strong>' + data.statuses_count + '</strong>' + window.sL.notices + '</a></li><li><a class="following-stats"><strong>' + data.friends_count + '</strong>' + window.sL.following + '</a></li><li><a class="follower-stats"><strong>' + data.followers_count + '</strong>' + window.sL.followers + '</a></li><li><a class="groups-stats"><strong>' + data.groups_count + '</strong>' + window.sL.groups + '</a></li></ul>' + followButton + '<div class="clearfix"></div></div></div>');
}});
}
@ -259,8 +265,14 @@ function groupProfileCard(groupAlias) {
if(typeof window.loginUsername != 'undefined') {
var memberButton = '<div class="user-actions"><button data-group-id="' + data.id + '" type="button" class="member-button ' + memberClass + '"><span class="button-text join-text"><i class="join"></i>' + window.sL.joinGroup + '</span><span class="button-text ismember-text">' + window.sL.isMemberOfGroup + '</span><span class="button-text leave-text">' + window.sL.leaveGroup + '</span></button></div>';
}
// follow from external instance if logged out
if(typeof window.loginUsername == 'undefined') {
var memberButton = '<div class="user-actions"><button type="button" class="external-member-button"><span class="button-text join-text"><i class="join"></i>' + window.sL.joinExternalGroup + '</span></button></div>';
}
// add card to DOM
$('#feed').siblings('.profile-card').remove(); // remove any old profile card
$('#feed').before('<div class="profile-card"><div class="profile-header-inner" style="background-image:url(' + data.original_logo + ')"><div class="profile-header-inner-overlay"></div><a class="profile-picture" href="' + data.original_logo + '"><img src="' + data.homepage_logo + '" /></a><div class="profile-card-inner"><h1 class="fullname">' + data.fullname + '<span></span></h1><h2 class="username"><span class="screen-name">!' + data.nickname + '</span></span></h2><div class="bio-container"><p>' + data.description + '</p></div><p class="location-and-url"></span><span class="url"><a href="' + data.homepage + '">' + data.homepage.replace('http://','').replace('https://','') + '</a></span></p></div></div><div class="profile-banner-footer"><ul class="stats"><li><a class="member-stats"><strong>' + data.member_count + '</strong>' + window.sL.memberCount + '</a></li><li><a class="admin-stats"><strong>' + data.admin_count + '</strong>' + window.sL.adminCount + '</a></li></ul>' + memberButton + '<div class="clearfix"></div></div></div>');
}});
}
@ -277,11 +289,19 @@ function groupProfileCard(groupAlias) {
· · · · · · · · · */
function setNewCurrentStream(stream,actionOnSuccess,setLocation) {
// don't do anything if this stream is already the current
if(window.currentStream == stream) {
// scroll to top if we are downscrolled
// refresh if we are at top
return;
}
// remember state of old stream (including profile card)
window.oldStreams[window.currentStream] = $('#feed').siblings('.profile-card').outerHTML() + $('#feed').outerHTML();
// set location bar from stream
if(setLocation && window.useHistoryPushState) {
@ -320,7 +340,8 @@ function setNewCurrentStream(stream,actionOnSuccess,setLocation) {
else if(stream == 'statuses/friends_timeline.json'
|| stream == 'statuses/mentions.json'
|| stream == 'favorites.json'
|| stream == 'statuses/public_timeline.json') {
|| stream == 'statuses/public_timeline.json'
|| stream == 'statuses/public_and_external_timeline.json?since_id=1') {
var defaultStreamName = stream;
var streamHeader = $('.stream-selection[data-stream-name="' + stream + '"]').attr('data-stream-header');
}
@ -375,18 +396,33 @@ function setNewCurrentStream(stream,actionOnSuccess,setLocation) {
var h2FeedHeader = streamHeader;
}
// fade out
$('#feed,.profile-card').animate({opacity:'0'},150,function(){
// when fade out finishes, remove any profile cards
// if we have a saved copy of this stream, show it immediately (but it is replaced when stream finishes to load later)
if(typeof window.oldStreams[window.currentStream] != "undefined") {
$('.profile-card').remove();
$('#feed-header-inner h2').html(h2FeedHeader);
});
$('#feed').remove();
$('#user-container').after(window.oldStreams[window.currentStream]);
$('.profile-card').css('display','none');
$('#feed').css('display','none');
$('.profile-card').fadeIn(300);
$('#feed').fadeIn(300);
}
// otherwise we fade out and wait for stream to load
else {
// fade out
$('#feed,.profile-card').animate({opacity:'0'},150,function(){
// when fade out finishes, remove any profile cards and set new header
$('.profile-card').remove();
$('#feed-header-inner h2').html(h2FeedHeader);
});
}
// add this stream to history menu if it doesn't exist there (but not if this is me or if we're not logged in)
if($('.stream-selection[data-stream-header="' + streamHeader + '"]').length==0
&& streamHeader != '@' + window.loginUsername
&& typeof window.loginUsername != 'undefined') {
$('#history-container').append('<a class="stream-selection" data-stream-header="' + streamHeader + '" href="' + $('.stream-selection.public-timeline').attr('href') + convertStreamToPath(defaultStreamName) + '">' + streamHeader + '<i class="close-right"></i><i class="chev-right"></i></a>');
$('#history-container').append('<a class="stream-selection" data-stream-header="' + streamHeader + '" href="' + $('.stream-selection.public-timeline').attr('href') + convertStreamToPath(defaultStreamName) + '">' + streamHeader + '<i class="chev-right"></i></a>');
updateHistoryLocalStorage();
}
@ -424,6 +460,7 @@ function setNewCurrentStream(stream,actionOnSuccess,setLocation) {
remove_spinner();
$('#feed-body').html(''); // empty feed only now so the scrollers don't flicker on and off
$('#new-queets-bar').parent().addClass('hidden'); document.title = window.siteTitle; // hide new queets bar if it's visible there
$('#feed-body').removeAttr('data-search-page-number'); // reset
addToFeed(user_data, false,'visible'); // add stream items to feed element
$('#feed').animate({opacity:'1'},150); // fade in
$('body').removeClass('loading-older');$('body').removeClass('loading-newer');
@ -535,6 +572,9 @@ function convertStreamToPath(stream) {
else if(stream == 'statuses/public_timeline.json') {
return '';
}
else if(stream == 'statuses/public_and_external_timeline.json?since_id=1') {
return 'main/all';
}
else if(stream.substring(0,26) == 'statusnet/groups/timeline/') {
var groupName = stream.substring(stream.lastIndexOf('/')+1,stream.indexOf('.json'));
return 'group/' + groupName;
@ -586,8 +626,13 @@ function getStreamFromUrl() {
// default/fallback
var streamToSet = 'statuses/public_timeline.json';
// main/all, i.e. full network
if (loc == '/main/all') {
streamToSet = 'statuses/public_and_external_timeline.json?since_id=1';
}
// {domain}/{screen_name} or {domain}/{screen_name}/
if ((/^[a-zA-Z0-9]+$/.test(loc.substring(0, loc.length - 1).replace('/','')))) {
else if ((/^[a-zA-Z0-9]+$/.test(loc.substring(0, loc.length - 1).replace('/','')))) {
var userToStream = loc.replace('/','').replace('/','');
if(userToStream.length>0) {
streamToSet = 'statuses/user_timeline.json?screen_name=' + userToStream;
@ -738,27 +783,60 @@ function expand_queet(q,doScrolling) {
if(q.hasClass('conversation')) {
q.removeClass('expanded');
q.removeClass('collapsing');
q.find('.expanded-content').remove();
q.find('.view-more-container-top').remove();
q.find('.view-more-container-bottom').remove();
q.find('.stream-item.conversation').remove();
q.find('.inline-reply-queetbox').remove();
q.find('.expanded-content').remove();
}
else {
rememberMyScrollPos(q.children('.queet'),qid,0);
var collapseTime = 200 + q.find('.stream-item.conversation:not(.hidden-conversation)').length*50;
q.find('.expanded-content').slideUp(collapseTime,function(){$(this).remove();});
q.find('.view-more-container-top').slideUp(collapseTime,function(){$(this).remove();});
q.find('.view-more-container-bottom').slideUp(collapseTime,function(){$(this).remove();});
q.find('.stream-item.conversation').slideUp(collapseTime,function(){$(this).remove();});
q.find('.inline-reply-queetbox').slideUp(collapseTime,function(){$(this).remove();});
if(doScrolling) {
backToMyScrollPos(q,qid,'animate');
}
setTimeout(function(){
rememberMyScrollPos(q.children('.queet'),qid,0);
// give stream item a height
q.css('height',q.height() + 'px');
q.children('div').not('.queet').children('a').css('opacity','0.5');
q.children('div').not('.queet').children().children().css('opacity','0.5');
var collapseTime = 150 + q.find('.stream-item.conversation:not(.hidden-conversation)').length*50;
// set transition time (needs to be delayed, otherwise webkit animates the height-setting above)
setTimeout(function() {
q.children('.queet').css('-moz-transition-duration',Math.round( collapseTime / 1000 * 10) / 10 + 's');
q.children('.queet').css('-o-transition-duration',Math.round( collapseTime / 1000 * 10) / 10 + 's');
q.children('.queet').css('-webkit-transition-duration',Math.round( collapseTime * 1000 * 10) / 10 + 's');
q.children('.queet').css('transition-duration',Math.round( collapseTime / 1000 * 10) / 10 + 's');
q.css('-moz-transition-duration',Math.round( collapseTime / 1000 * 10) / 10 + 's');
q.css('-o-transition-duration',Math.round( collapseTime / 1000 * 10) / 10 + 's');
q.css('-webkit-transition-duration',Math.round( collapseTime * 1000 * 10) / 10 + 's');
q.css('transition-duration',Math.round( collapseTime / 1000 * 10) / 10 + 's');
// set new heights and margins to animate to
q.css('height',(q.children('.queet').find('.queet-content').outerHeight() - q.children('.queet').find('.expanded-content').outerHeight() - 10) + 'px');
q.children('.queet').css('margin-top', '-' + (q.children('.queet').offset().top - q.offset().top) + 'px');
}, 50);
setTimeout(function() {
q.css('height','auto');
q.children('.queet').css('margin-top','0');
q.removeClass('expanded');
q.removeClass('collapsing');
},collapseTime+500);
q.removeClass('collapsing');
q.find('.expanded-content').remove();
q.find('.view-more-container-top').remove();
q.find('.view-more-container-bottom').remove();
q.find('.inline-reply-queetbox').remove();
q.find('.stream-item.conversation').remove();
q.removeAttr('style');
q.children('.queet').removeAttr('style');
}, collapseTime+500);
if(doScrolling) {
backToMyScrollPos(q,qid,collapseTime);
}
}
}
}
@ -794,16 +872,22 @@ function expand_queet(q,doScrolling) {
// show expanded content
q.find('.stream-item-footer').after('<div class="expanded-content"><div class="queet-stats-container"></div><div class="client-and-actions"><span class="metadata">' + metadata + '</span></div></div>');
// maybe show images
// maybe show images or videos
$.each(q.children('.queet').find('.queet-text').find('a'), function() {
var attachment_title = $(this).attr('title');
if(typeof attachment_title != 'undefined') {
// images
if(attachment_title.substr(attachment_title.length - 5) == '.jpeg' ||
attachment_title.substr(attachment_title.length - 4) == '.png' ||
attachment_title.substr(attachment_title.length - 4) == '.gif' ||
attachment_title.substr(attachment_title.length - 4) == '.jpg') {
q.children('.queet').find('.expanded-content').prepend('<div class="media"><a href="' + attachment_title + '" target="_blank"><img src="' + attachment_title + '" /></a></div>');
}
// videos
else if(attachment_title.indexOf('youtube.com/watch?v=') > -1) {
var youtubeId = attachment_title.replace('http://www.youtube.com/watch?v=','').replace('https://www.youtube.com/watch?v=','').substr(0,11);
q.children('.queet').find('.expanded-content').prepend('<div class="media"><iframe width="420" height="315" src="//www.youtube.com/embed/' + youtubeId + '" frameborder="0" allowfullscreen></iframe></div>');
}
}
});
@ -883,7 +967,7 @@ function replyFormHtml(q,qid) {
}
});
return '<div class="inline-reply-queetbox"><div class="queet-box-template" id="queet-box-template-' + qid + '" data-start-text="' + user_screen_name_text + reply_to_screen_name_text + more_reply_tos_text + '">' + window.sL.replyTo + ' ' + user_screen_name_html + reply_to_screen_name_html + more_reply_tos + '&nbsp;<br></div></div>';
return '<div class="inline-reply-queetbox"><span class="inline-reply-caret"><span class="caret-inner"></span></span><img class="reply-avatar" src="' + $('#user-avatar').attr('src') + '" /><div class="queet-box-template" id="queet-box-template-' + qid + '" data-start-text="' + user_screen_name_text + reply_to_screen_name_text + more_reply_tos_text + '">' + window.sL.replyTo + ' ' + user_screen_name_html + reply_to_screen_name_html + more_reply_tos + '&nbsp;<br></div></div>';
}
@ -1166,7 +1250,8 @@ function findInReplyToStatusAndShow(qid,reply,only_first,onlyINreplyto) {
var reply_found_reply_to = $('#stream-item-' + qid).find('.stream-item[data-quitter-id="' + reply_found.attr('data-in-reply-to-status-id') + '"]');
if(reply_found.length>0) {
reply_found.removeClass('hidden-conversation');
reply_found.animate({opacity:'1'},500);
//reply_found.animate({opacity:'1'},500);
reply_found.css('opacity','1');
if(only_first && reply_found_reply_to.length>0) {
reply_found.before('<div class="view-more-container-top" data-trace-from="' + reply + '"><a>' + window.sL.viewMoreInConvBefore + '</a></div>');
findReplyToStatusAndShow(qid,qid,true);
@ -1188,11 +1273,15 @@ function findReplyToStatusAndShow(qid,this_id,only_first) {
var reply_founds_reply = $('#stream-item-' + qid).find('.stream-item[data-in-reply-to-status-id="' + reply_found.attr('data-quitter-id') + '"]');
if(reply_found.length>0) {
reply_found.removeClass('hidden-conversation');
reply_found.animate({opacity:'1'},100,function(){
if(!only_first) {
findReplyToStatusAndShow(qid,$(this).attr('data-quitter-id'),false);
}
});
// reply_found.animate({opacity:'1'},0,function(){
// if(!only_first) {
// findReplyToStatusAndShow(qid,$(this).attr('data-quitter-id'),false);
// }
// });
reply_found.css('opacity','1');
if(!only_first) {
findReplyToStatusAndShow(qid,$(this).attr('data-quitter-id'),false);
}
if(only_first && reply_founds_reply.length>0) {
reply_found.last().after('<div class="view-more-container-bottom" data-replies-after="' + qid + '"><a>' + window.sL.viewMoreInConvAfter + '</a></div>');
}
@ -1223,7 +1312,7 @@ function checkForHiddenConversationQueets(qid) {
· · · · · · · · · · · · · */
function addToFeed(feed, after, extraClasses) {
$.each(feed.reverse(), function (key,obj) {
var extraClassesThisRun = extraClasses;
@ -1280,10 +1369,14 @@ function addToFeed(feed, after, extraClasses) {
}
var memberButton = '';
if(typeof window.loginUsername != 'undefined') {
console.log(obj);
var memberButton = '<div class="user-actions"><button data-group-id="' + obj.id + '" type="button" class="member-button ' + memberClass + '"><span class="button-text join-text"><i class="join"></i>' + window.sL.joinGroup + '</span><span class="button-text ismember-text">' + window.sL.isMemberOfGroup + '</span><span class="button-text leave-text">' + window.sL.leaveGroup + '</span></button></div>';
}
var groupHtml = '<div id="stream-item-' + obj.id + '" class="stream-item user"><div class="queet">' + memberButton + '<div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.url + '"><img class="avatar" src="' + obj.stream_logo + '" /><strong class="name" data-group-id="' + obj.id + '">' + obj.fullname + '</strong> <span class="screen-name">!' + obj.nickname + '</span></a></div><div class="queet-text">' + obj.description + '</div></div></div></div>';
var groupAvatar = obj.stream_logo;
if(obj.homepage_logo != null) {
groupAvatar = obj.homepage_logo;
}
var groupHtml = '<div id="stream-item-' + obj.id + '" class="stream-item user"><div class="queet">' + memberButton + '<div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.url + '"><img class="avatar" src="' + groupAvatar + '" /><strong class="name" data-group-id="' + obj.id + '">' + obj.fullname + '</strong> <span class="screen-name">!' + obj.nickname + '</span></a></div><div class="queet-text">' + obj.description + '</div></div></div></div>';
if(after) {
$('#' + after).after(groupHtml);
@ -1364,8 +1457,23 @@ function addToFeed(feed, after, extraClasses) {
in_groups_html = '<span class="in-groups">' + obj.retweeted_status.statusnet_in_groups + '</span>';
}
// image attachment thumbnails
var attachment_html = '';
if(typeof obj.retweeted_status.attachments != "undefined") {
$.each(obj.retweeted_status.attachments, function(){
if(this.thumb_url != null) {
attachment_html = attachment_html + '<a href="' + this.url + '"><img src="' + this.thumb_url + '"/></a>';
}
});
}
if(attachment_html.length>0) {
attachment_html = '<div class="attachments">' + attachment_html + '</div>';
}
var queetTime = parseTwitterDate(obj.retweeted_status.created_at);
var queetHtml = '<div id="stream-item-' + obj.retweeted_status.id + '" class="stream-item ' + extraClassesThisRun + ' ' + requeetedClass + ' ' + favoritedClass + '" data-source="' + escape(obj.retweeted_status.source) + '" data-quitter-id="' + obj.retweeted_status.id + '" data-conversation-id="' + obj.retweeted_status.statusnet_conversation_id + '" data-quitter-id-in-stream="' + obj.id + '" data-in-reply-to-screen-name="' + in_reply_to_screen_name + '" data-in-reply-to-status-id="' + obj.retweeted_status.in_reply_to_status_id + '"><div class="queet" id="q-' + obj.retweeted_status.id + '"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.retweeted_status.user.statusnet_profile_url + '"><img class="avatar" src="' + obj.retweeted_status.user.profile_image_url_profile_size + '" /><strong class="name" data-user-id="' + obj.retweeted_status.user.id + '">' + obj.retweeted_status.user.name + '</strong> <span class="screen-name">@' + obj.retweeted_status.user.screen_name + '</span></a><i class="addressees">' + reply_to_html + in_groups_html + '</i><small class="created-at" data-created-at="' + obj.retweeted_status.created_at + '"><a href="' + obj.retweeted_status.uri + '">' + queetTime + '</a></small></div><div class="queet-text">' + $.trim(obj.retweeted_status.statusnet_html) + '</div><div class="stream-item-footer">' + queetActions + '<div class="context" id="requeet-' + obj.id + '"><span class="with-icn"><i class="badge-requeeted"></i><span class="requeet-text"> ' + window.sL.requeetedBy + '<a href="' + obj.user.statusnet_profile_url + '"> <b>' + obj.user.name + '</b></a></span></span></div><span class="stream-item-expand">' + window.sL.expand + '</span></div></div></div></div>';
var queetHtml = '<div id="stream-item-' + obj.retweeted_status.id + '" class="stream-item ' + extraClassesThisRun + ' ' + requeetedClass + ' ' + favoritedClass + '" data-source="' + escape(obj.retweeted_status.source) + '" data-quitter-id="' + obj.retweeted_status.id + '" data-conversation-id="' + obj.retweeted_status.statusnet_conversation_id + '" data-quitter-id-in-stream="' + obj.id + '" data-in-reply-to-screen-name="' + in_reply_to_screen_name + '" data-in-reply-to-status-id="' + obj.retweeted_status.in_reply_to_status_id + '"><div class="queet" id="q-' + obj.retweeted_status.id + '">' + attachment_html + '<span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.retweeted_status.user.statusnet_profile_url + '"><img class="avatar" src="' + obj.retweeted_status.user.profile_image_url_profile_size + '" /><strong class="name" data-user-id="' + obj.retweeted_status.user.id + '">' + obj.retweeted_status.user.name + '</strong> <span class="screen-name">@' + obj.retweeted_status.user.screen_name + '</span></a><i class="addressees">' + reply_to_html + in_groups_html + '</i><small class="created-at" data-created-at="' + obj.retweeted_status.created_at + '"><a href="' + obj.retweeted_status.uri + '">' + queetTime + '</a></small></div><div class="queet-text">' + $.trim(obj.retweeted_status.statusnet_html) + '</div><div class="stream-item-footer">' + queetActions + '<div class="context" id="requeet-' + obj.id + '"><span class="with-icn"><i class="badge-requeeted"></i><span class="requeet-text"> ' + window.sL.requeetedBy + '<a href="' + obj.user.statusnet_profile_url + '"> <b>' + obj.user.name + '</b></a></span></span></div><span class="stream-item-expand">' + window.sL.expand + '</span></div></div></div></div>';
// detect rtl
queetHtml = detectRTL(queetHtml);
@ -1472,8 +1580,21 @@ function addToFeed(feed, after, extraClasses) {
in_groups_html = '<span class="in-groups">' + obj.statusnet_in_groups + '</span>';
}
// image attachment thumbnails
var attachment_html = '';
if(typeof obj.attachments != "undefined") {
$.each(obj.attachments, function(){
if(this.thumb_url != null) {
attachment_html = attachment_html + '<a href="' + this.url + '"><img src="' + this.thumb_url + '"/></a>';
}
});
}
if(attachment_html.length>0) {
attachment_html = '<div class="attachments">' + attachment_html + '</div>';
}
var queetTime = parseTwitterDate(obj.created_at);
var queetHtml = '<div id="stream-item-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' ' + requeetedClass + ' ' + favoritedClass + '" data-source="' + escape(obj.source) + '" data-quitter-id="' + obj.id + '" data-conversation-id="' + obj.statusnet_conversation_id + '" data-quitter-id-in-stream="' + obj.id + '" data-in-reply-to-screen-name="' + in_reply_to_screen_name + '" data-in-reply-to-status-id="' + obj.in_reply_to_status_id + '"><div class="queet" id="q-' + obj.id + '"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.user.statusnet_profile_url + '"><img class="avatar" src="' + obj.user.profile_image_url_profile_size + '" /><strong class="name" data-user-id="' + obj.user.id + '">' + obj.user.name + '</strong> <span class="screen-name">@' + obj.user.screen_name + '</span></a><i class="addressees">' + reply_to_html + in_groups_html + '</i><small class="created-at" data-created-at="' + obj.created_at + '"><a href="' + obj.uri + '">' + queetTime + '</a></small></div><div class="queet-text">' + $.trim(obj.statusnet_html) + '</div><div class="stream-item-footer">' + queetActions + '<span class="stream-item-expand">' + window.sL.expand + '</span></div></div></div></div>';
var queetHtml = '<div id="stream-item-' + obj.id + '" class="stream-item ' + extraClassesThisRun + ' ' + requeetedClass + ' ' + favoritedClass + '" data-source="' + escape(obj.source) + '" data-quitter-id="' + obj.id + '" data-conversation-id="' + obj.statusnet_conversation_id + '" data-quitter-id-in-stream="' + obj.id + '" data-in-reply-to-screen-name="' + in_reply_to_screen_name + '" data-in-reply-to-status-id="' + obj.in_reply_to_status_id + '"><div class="queet" id="q-' + obj.id + '">' + attachment_html + '<span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group" href="' + obj.user.statusnet_profile_url + '"><img class="avatar" src="' + obj.user.profile_image_url_profile_size + '" /><strong class="name" data-user-id="' + obj.user.id + '">' + obj.user.name + '</strong> <span class="screen-name">@' + obj.user.screen_name + '</span></a><i class="addressees">' + reply_to_html + in_groups_html + '</i><small class="created-at" data-created-at="' + obj.created_at + '"><a href="' + obj.uri + '">' + queetTime + '</a></small></div><div class="queet-text">' + $.trim(obj.statusnet_html) + '</div><div class="stream-item-footer">' + queetActions + '<span class="stream-item-expand">' + window.sL.expand + '</span></div></div></div></div>';
// detect rtl
queetHtml = detectRTL(queetHtml);

View File

@ -49,7 +49,7 @@ window.l.es.notices = 'Queets';
window.l.es.followers = 'Seguidores';
window.l.es.following = 'Siguiendo';
window.l.es.groups = 'Grupos';
window.l.es.compose = 'Publicar un nuevo Queet...';
window.l.es.compose = 'Crear un nuevo Queet...';
window.l.es.queetVerb = 'Quittear';
window.l.es.queetsNounPlural = 'Queets';
window.l.es.logout = 'Cerrar sesión';
@ -61,9 +61,9 @@ window.l.es.details = 'Detalles';
window.l.es.expandFullConversation = 'Ver la conversación entera';
window.l.es.replyVerb = 'Responder';
window.l.es.requeetVerb = 'Requittear';
window.l.es.favoriteVerb = 'Favorito';
window.l.es.favoriteVerb = 'Favorecer';
window.l.es.requeetedVerb = 'Requitteado';
window.l.es.favoritedVerb = 'Favorito';
window.l.es.favoritedVerb = 'Marcado como favorito';
window.l.es.replyTo = 'Responder a';
window.l.es.requeetedBy = 'Requitteado por';
window.l.es.favoriteNoun = 'Favorito';
@ -111,17 +111,19 @@ window.l.es.viewMoreInConvAfter = 'Ver más en la conversación →';
window.l.es.mentions = 'Menciones';
window.l.es.timeline = 'Línea temporal';
window.l.es.publicTimeline = 'Línea temporal pública';
window.l.es.publicAndExtTimeline = 'Toda la red conocida';
window.l.es.searchVerb = 'Buscar';
window.l.es.deleteVerb = 'Eliminar';
window.l.es.cancelVerb = 'Cancelar';
window.l.es.deleteConfirmation = '¿Estás seguro de que quieres eliminar este queet?';
window.l.es.userExternalFollow = 'Seguir';
window.l.es.userExternalFollowHelp = 'Identificador de su cuenta (por ejemplo user@quitter.se).';
window.l.es.userExternalFollowHelp = 'Identificador de su cuenta (p.e. user@rainbowdash.net).';
window.l.es.userFollow = 'Seguir';
window.l.es.userFollowing = 'Siguiendo';
window.l.es.userUnfollow = 'Dejar de seguir';
window.l.es.joinGroup = 'Unirse al grupo';
window.l.es.isMemberOfGroup = 'Abandonar grupo';
window.l.es.joinExternalGroup = 'Unirse al grupo';
window.l.es.isMemberOfGroup = 'Miembro';
window.l.es.leaveGroup = 'Abandonar grupo';
window.l.es.memberCount = 'Miembros';
window.l.es.adminCount = 'Administradores';
@ -135,7 +137,7 @@ window.l.es.signUpFullName = 'Nombre completo';
window.l.es.signUpEmail = 'Correo electrónico';
window.l.es.signUpButtonText = 'Regístrate en Quitter';
window.l.es.welcomeHeading = 'Bienvenido a Quitter.';
window.l.es.welcomeText = 'Somos una <span id="federated-tooltip"><div id="what-is-federation">« Federación » significa que usted no debe tener una cuenta de Quitter para seguir su usuarios, estar seguido por o communicar con ellos. ¡Puede registrar con cualquier servidor StatusNet o <a href="http://www.gnu.org/software/social/">GNU Social</a>, o cualquier servicio utilizando el protocolo <a href="http://www.w3.org/community/ostatus/wiki/Main_Page">OStatus</a>! También no debe registrarse en cualquier servicio para postear; puede simplemente instalar el software GNU Social en su servidor propio. (:</div>federación</span> de microblogueros que, como usted, están motivados por la ética y solidaridad, y quieren abandonar los servicios centralizados capitalistas. Estamos aquí desde 2010 y los servicios siempre van a ser sin ánimo de lucro.';
window.l.es.welcomeText = 'Somos una <span id="federated-tooltip"><div id="what-is-federation">« Federación » significa que no debes tener una cuenta de Quitter para seguir su usuarios, estar seguido por o communicar con ellos. ¡Puedes registrar con cualquier servidor StatusNet o <a href="http://www.gnu.org/software/social/">GNU Social</a>, o cualquier servicio utilizando el protocolo <a href="http://www.w3.org/community/ostatus/wiki/Main_Page">OStatus</a>! También no debes registrarse en cualquier servicio para participar - simplemente instala el software GNU Social en tu propio servidor. (:</div>federación</span> de microblogueros que, como tú, estan motivados por ética y solidaridad y quieren abandonar los servicios centralizados capitalistas. Estamos aquí desde 2010 y siempre vamos a ser no-profit.';
window.l.es.registerNickname = 'Nombre de usuario';
window.l.es.registerHomepage = 'Sitio web';
window.l.es.registerBio = 'Biografía';
@ -220,6 +222,7 @@ window.l.fr.viewMoreInConvAfter = 'Voir davantage dans la conversation →';
window.l.fr.mentions = 'Mentions';
window.l.fr.timeline = 'Queets';
window.l.fr.publicTimeline = 'Tous les queets';
window.l.fr.publicAndExtTimeline = 'L\'ensemble de la Fédération';
window.l.fr.searchVerb = 'Rechercher';
window.l.fr.deleteVerb = 'Supprimer';
window.l.fr.cancelVerb = 'Annuler';
@ -230,6 +233,7 @@ window.l.fr.userFollow = 'Suivre';
window.l.fr.userFollowing = 'Abonné';
window.l.fr.userUnfollow = 'Se désabonner';
window.l.fr.joinGroup = 'Rejoindre ce groupe';
window.l.fr.joinExternalGroup = 'Rejoindre ce groupe';
window.l.fr.isMemberOfGroup = 'Quitter le groupe';
window.l.fr.leaveGroup = 'Quitter le groupe';
window.l.fr.memberCount = 'Membres';
@ -322,22 +326,24 @@ window.l.de.shortDateFormatHours = '{hours}h';
window.l.de.shortDateFormatDate = '{day}{month}';
window.l.de.shortDateFormatDateAndY = '{day}{month} {year}';
window.l.de.now = 'jetzt';
window.l.de.posting = 'Entsendung';
window.l.de.posting = 'wird gesendet';
window.l.de.viewMoreInConvBefore = '← Mehr im Gespräch anzeigen';
window.l.de.viewMoreInConvAfter = 'Mehr im Gespräch anzeigen →';
window.l.de.mentions = 'Erwähnungen';
window.l.de.timeline = 'Timeline';
window.l.de.publicTimeline = 'Öffentliche Timeline';
window.l.de.publicAndExtTimeline = 'Gesamtes bekanntes Netzwerk';
window.l.de.searchVerb = 'Suche';
window.l.de.deleteVerb = 'Löschen';
window.l.de.cancelVerb = 'Abbrechen';
window.l.de.deleteConfirmation = 'Bist Du sicher, dass Du diesen Queet löschen möchtest?';
window.l.de.userExternalFollow = 'Folgen';
window.l.de.userExternalFollowHelp = 'Deine Konto-ID (z.B. user@quitter.se).';
window.l.de.userExternalFollowHelp = 'Deine Konto-ID (z.B. user@rainbowdash.net).';
window.l.de.userFollow = 'Folgen';
window.l.de.userFollowing = 'Folge ich';
window.l.de.userUnfollow = 'Entfolgen';
window.l.de.joinGroup = 'Der Gruppe beitreten';
window.l.de.joinExternalGroup = 'Der Gruppe beitreten';
window.l.de.isMemberOfGroup = 'Gruppe verlassen';
window.l.de.leaveGroup = 'Gruppe verlassen';
window.l.de.memberCount = 'Mitglieder';
@ -386,7 +392,7 @@ window.l.en.notices = 'Queets';
window.l.en.followers = 'Followers';
window.l.en.following = 'Following';
window.l.en.groups = 'Groups';
window.l.en.compose = 'Compose new Queet...';
window.l.en.compose = 'Compose a new Queet...';
window.l.en.queetVerb = 'Queet';
window.l.en.queetsNounPlural = 'Queets';
window.l.en.logout = 'Sign out';
@ -448,16 +454,18 @@ window.l.en.viewMoreInConvAfter = 'View more in conversation →';
window.l.en.mentions = 'Mentions';
window.l.en.timeline = 'Timeline';
window.l.en.publicTimeline = 'Public Timeline';
window.l.en.publicAndExtTimeline = 'The whole known network';
window.l.en.searchVerb = 'Search';
window.l.en.deleteVerb = 'Delete';
window.l.en.cancelVerb = 'Cancel';
window.l.en.deleteConfirmation = 'Are you sure you want to delete this queet?';
window.l.en.userExternalFollow = 'Remote follow';
window.l.en.userExternalFollowHelp = 'Your account ID (e.g. user@quitter.se).';
window.l.en.userExternalFollowHelp = 'Your account ID (e.g. user@rainbowdash.net).';
window.l.en.userFollow = 'Follow';
window.l.en.userFollowing = 'Following';
window.l.en.userUnfollow = 'Unfollow';
window.l.en.joinGroup = 'Join';
window.l.en.joinExternalGroup = 'Join remotely';
window.l.en.isMemberOfGroup = 'Member';
window.l.en.leaveGroup = 'Leave';
window.l.en.memberCount = 'Members';
@ -565,16 +573,18 @@ window.l.sv.viewMoreInConvAfter = 'Visa mer i konversationen →';
window.l.sv.mentions = 'Omnämnanden';
window.l.sv.timeline = 'Qvitter';
window.l.sv.publicTimeline = 'Hela sajtens flöde';
window.l.sv.publicAndExtTimeline = 'Hela det kända nätverket';
window.l.sv.searchVerb = 'Sök';
window.l.sv.deleteVerb = 'Ta bort';
window.l.sv.cancelVerb = 'Avbryt';
window.l.sv.deleteConfirmation = 'Är du säker på att du vill radera denna queet?';
window.l.sv.userExternalFollow = 'Följ externt';
window.l.sv.userExternalFollowHelp = 'Ditt konto-ID (ex. user@quitter.se).';
window.l.sv.userExternalFollowHelp = 'Ditt konto-ID (ex. user@rainbowdash.net).';
window.l.sv.userFollow = 'Följ';
window.l.sv.userFollowing = 'Följer';
window.l.sv.userUnfollow = 'Avfölj';
window.l.sv.joinGroup = 'Gå med';
window.l.sv.joinExternalGroup = 'Gå med';
window.l.sv.isMemberOfGroup = 'Medlem';
window.l.sv.leaveGroup = 'Gå ur';
window.l.sv.memberCount = 'Medlemmar';
@ -674,16 +684,18 @@ window.l.fa.viewMoreInConvAfter = 'نمایش بیشتر در گفتگوه
window.l.fa.mentions = 'رونوشت‌ها';
window.l.fa.timeline = 'توييت';
window.l.fa.publicTimeline = 'خط‌زمانی عمومی';
window.l.fa.publicAndExtTimeline = 'کل شبکه';
window.l.fa.searchVerb = 'جستجو';
window.l.fa.deleteVerb = 'حذف';
window.l.fa.cancelVerb = 'انصراف';
window.l.fa.deleteConfirmation = 'آیا مطمئن هستید که می‌خواهید این توییت را پاک کنید؟';
window.l.fa.userExternalFollow = 'دنبال کنید';
window.l.fa.userExternalFollowHelp = 'شناسه حساب شما (بعنوان مثال user@quitter.se)';
window.l.fa.userExternalFollowHelp = 'شناسه حساب شما (بعنوان مثال user@rainbowdash.net)';
window.l.fa.userFollow = 'دنبال کنید';
window.l.fa.userFollowing = 'دنبال می‌کنید';
window.l.fa.userUnfollow = 'دنبال نكن';
window.l.fa.joinGroup = 'پیوستن به گروه';
window.l.fa.joinExternalGroup = 'پیوستن به گروه';
window.l.fa.isMemberOfGroup = 'عضو گروه';
window.l.fa.leaveGroup = 'ترک گروه';
window.l.fa.memberCount = 'اعضا';
@ -782,16 +794,18 @@ window.l.ar.viewMoreInConvAfter = 'عرض المزيد في المحادثة
window.l.ar.mentions = 'الإشارات';
window.l.ar.timeline = 'تغريدات';
window.l.ar.publicTimeline = 'المسار الزمني العام';
window.l.ar.publicAndExtTimeline = 'کل شبكة كاملة';
window.l.ar.searchVerb = 'بحث';
window.l.ar.deleteVerb = 'حذف';
window.l.ar.cancelVerb = 'إلغاء';
window.l.ar.deleteConfirmation = 'هل أنت متأكد أنك تريد حذف هذه التغريدة؟';
window.l.ar.userExternalFollow = 'تابِع';
window.l.ar.userExternalFollowHelp = 'رقم حسابك (على سبيل المثال user@quitter.se)';
window.l.ar.userExternalFollowHelp = 'رقم حسابك (على سبيل المثال user@rainbowdash.net)';
window.l.ar.userFollow = 'تابِع';
window.l.ar.userFollowing = 'مُتابَع';
window.l.ar.userUnfollow = 'إلغاء المتابعة';
window.l.ar.joinGroup = 'الانضمام إلى المجموعة';
window.l.ar.joinExternalGroup = 'الانضمام إلى المجموعة';
window.l.ar.isMemberOfGroup = 'مغادرة المجموعة';
window.l.ar.leaveGroup = 'مغادرة المجموعة';
window.l.ar.memberCount = 'الأعضاء';
@ -890,16 +904,18 @@ window.l.eo.viewMoreInConvAfter = 'Vidi pli de la konversacio →';
window.l.eo.mentions = 'Mencioj';
window.l.eo.timeline = 'Kronologio';
window.l.eo.publicTimeline = 'Publika kronologio';
window.l.eo.publicAndExtTimeline = 'Kronologio de la federaĵon';
window.l.eo.searchVerb = 'Serĉi';
window.l.eo.deleteVerb = 'Forigi';
window.l.eo.cancelVerb = 'Rezigni';
window.l.eo.deleteConfirmation = 'Ĉu vi certas, ke vi volas forigi tiun avizon?';
window.l.eo.userExternalFollow = 'Sekvi';
window.l.eo.userExternalFollowHelp = 'Via konto ID (? I user@quitter.se)';
window.l.eo.userExternalFollowHelp = 'Via konto ID (? I user@rainbowdash.net)';
window.l.eo.userFollow = 'Sekvi';
window.l.eo.userFollowing = 'Sekvanta';
window.l.eo.userUnfollow = 'Malsekvi';
window.l.eo.joinGroup = 'Membriĝi grupon';
window.l.eo.joinExternalGroup = 'Membriĝi grupon';
window.l.eo.isMemberOfGroup = 'membro de grupo';
window.l.eo.leaveGroup = 'Rezigni grupon';
window.l.eo.memberCount = 'Membroj';
@ -935,119 +951,121 @@ window.l.eo.otherServers = '';
// italian
window.l.it = new Object();
window.l.it.languageName = 'Italiano';
window.l.it.loginUsername = 'Nome dell\' utente o indirizzo email';
window.l.it.loginPassword = 'Password';
window.l.it.loginSignIn = 'Iniziare la sessione';
window.l.it.loginRememberMe = 'Ricordami';
window.l.it.loginForgotPassword = 'Hai dimenticato la password?';
window.l.it.notices = 'Queets';
window.l.it.followers = 'Follower';
window.l.it.following = 'Following';
window.l.it.groups = 'Gruppi';
window.l.it.compose = 'Compore un nuovo Queet...';
window.l.it.queetVerb = 'Quittare';
window.l.it.queetsNounPlural = 'Queet';
window.l.it.logout = 'Disconnettersi';
window.l.it.languageSelected = 'Lingua';
window.l.it.viewMyProfilePage = 'Accesso al mio profilo';
window.l.it.expand = 'Apri';
window.l.it.collapse = 'Riduci';
window.l.it.details = 'Detagli';
window.l.it.expandFullConversation = 'Vedera la conversazione completa';
window.l.it.replyVerb = 'Rispondere';
window.l.it.requeetVerb = 'Requittare';
window.l.it.favoriteVerb = 'Favorire';
window.l.it.requeetedVerb = 'Requittato';
window.l.it.favoritedVerb = 'Favorito';
window.l.it.replyTo = 'Rispondere a';
window.l.it.requeetedBy = 'Requittato per';
window.l.it.favoriteNoun = 'Favorito';
window.l.it.favoritesNoun = 'Favoriti';
window.l.it.requeetNoun = 'Requeet';
window.l.it.requeetsNoun = 'Requeet';
window.l.it.newQueet = 'nuovo Queet';
window.l.it.newQueets = 'nuovi Queet';
window.l.it.longmonthsJanuary = "gennaio";
window.l.it.longmonthsFebruary = "febbraio";
window.l.it.longmonthsMars = "marzo";
window.l.it.longmonthsApril = "aprile";
window.l.it.longmonthsMay = "maggio";
window.l.it.longmonthsJune = "giugno";
window.l.it.longmonthsJuly = "luglio";
window.l.it.longmonthsAugust = "agosto";
window.l.it.longmonthsSeptember = "settembre";
window.l.it.longmonthsOctober = "ottobre";
window.l.it.longmonthsNovember = "novembre";
window.l.it.longmonthsDecember = "dicembre";
window.l.it.shortmonthsJanuary = "gen";
window.l.it.shortmonthsFebruary = "feb";
window.l.it.shortmonthsMars = "mar";
window.l.it.shortmonthsApril = "apr";
window.l.it.shortmonthsMay = "mag";
window.l.it.shortmonthsJune = "giu";
window.l.it.shortmonthsJuly = "lug";
window.l.it.shortmonthsAugust = "ago";
window.l.it.shortmonthsSeptember = "set";
window.l.it.shortmonthsOctober = "ott";
window.l.it.shortmonthsNovember = "nov";
window.l.it.shortmonthsDecember = "dic";
window.l.it.time12am = '{time} AM';
window.l.it.time12pm = '{time} PM';
window.l.it.longDateFormat = '{time24} - {day} {month} {year}';
window.l.it.shortDateFormatSeconds = '{seconds}s';
window.l.it.shortDateFormatMinutes = '{minutes}min';
window.l.it.shortDateFormatHours = '{hours}h';
window.l.it.shortDateFormatDate = '{day} {month}';
window.l.it.languageName = 'Italiano';
window.l.it.loginUsername = 'Nome Utente o indirizzo email';
window.l.it.loginPassword = 'Password';
window.l.it.loginSignIn = 'Accedi';
window.l.it.loginRememberMe = 'Ricordami';
window.l.it.loginForgotPassword = 'Hai dimenticato la password?';
window.l.it.notices = 'Queets';
window.l.it.followers = 'Follower';
window.l.it.following = 'Following';
window.l.it.groups = 'Gruppi';
window.l.it.compose = 'Scrivi un nuovo Queet...';
window.l.it.queetVerb = 'Quittare';
window.l.it.queetsNounPlural = 'Queet';
window.l.it.logout = 'Disconnettersi';
window.l.it.languageSelected = 'Lingua:';
window.l.it.viewMyProfilePage = 'Guarda il mio profilo';
window.l.it.expand = 'Espandi';
window.l.it.collapse = 'Riduci';
window.l.it.details = 'Dettagli';
window.l.it.expandFullConversation = 'Espandi completamente la conversazione';
window.l.it.replyVerb = 'Rispondere';
window.l.it.requeetVerb = 'Requittare';
window.l.it.favoriteVerb = 'Favorire';
window.l.it.requeetedVerb = 'Requittato';
window.l.it.favoritedVerb = 'Favorito';
window.l.it.replyTo = 'Rispondere a';
window.l.it.requeetedBy = 'Requittato per';
window.l.it.favoriteNoun = 'Favorito';
window.l.it.favoritesNoun = 'Favoriti';
window.l.it.requeetNoun = 'Requeet';
window.l.it.requeetsNoun = 'Requeet';
window.l.it.newQueet = 'nuovo Queet';
window.l.it.newQueets = 'nuovi Queet';
window.l.it.longmonthsJanuary = 'Gennaio';
window.l.it.longmonthsFebruary = 'Febbraio';
window.l.it.longmonthsMars = 'Marzo';
window.l.it.longmonthsApril = 'Aprile';
window.l.it.longmonthsMay = 'Maggio';
window.l.it.longmonthsJune = 'Giugno';
window.l.it.longmonthsJuly = 'Luglio';
window.l.it.longmonthsAugust = 'Agosto';
window.l.it.longmonthsSeptember = 'Settembre';
window.l.it.longmonthsOctober = 'Ottobre';
window.l.it.longmonthsNovember = 'Novembre';
window.l.it.longmonthsDecember = 'Dicembre';
window.l.it.shortmonthsJanuary = 'gen';
window.l.it.shortmonthsFebruary = 'feb';
window.l.it.shortmonthsMars = 'mar';
window.l.it.shortmonthsApril = 'apr';
window.l.it.shortmonthsMay = 'mag';
window.l.it.shortmonthsJune = 'giu';
window.l.it.shortmonthsJuly = 'lug';
window.l.it.shortmonthsAugust = 'ago';
window.l.it.shortmonthsSeptember = 'set';
window.l.it.shortmonthsOctober = 'ott';
window.l.it.shortmonthsNovember = 'nov';
window.l.it.shortmonthsDecember = 'dic';
window.l.it.time12am = '{time} AM';
window.l.it.time12pm = '{time} PM';
window.l.it.longDateFormat = '{time24} - {day} {month} {year}';
window.l.it.shortDateFormatSeconds = '{seconds}s';
window.l.it.shortDateFormatMinutes = '{minutes}min';
window.l.it.shortDateFormatHours = '{hours}h';
window.l.it.shortDateFormatDate = '{day} {month}';
window.l.it.shortDateFormatDateAndY = '{day} {month} {year}';
window.l.it.now = 'adesso';
window.l.it.posting = 'inviato';
window.l.it.viewMoreInConvBefore = '← Conversazioni precedenti';
window.l.it.viewMoreInConvAfter = 'Conversazioni successive →';
window.l.it.mentions = 'Menzioni';
window.l.it.timeline = 'Timeline';
window.l.it.publicTimeline = 'Timeline publica';
window.l.it.searchVerb = 'Cercare';
window.l.it.deleteVerb = 'Eliminare';
window.l.it.cancelVerb = 'Cancellare';
window.l.it.deleteConfirmation = 'Sei sicuro di volere cancellare questo queet?';
window.l.it.userExternalFollow = 'Seguire';
window.l.it.userExternalFollowHelp = 'Il tuo ID conto (ad esempio user@quitter.se)';
window.l.it.userFollow = 'Seguire';
window.l.it.userFollowing = 'Seguendo';
window.l.it.userUnfollow = 'Smettere di seguire';
window.l.it.joinGroup = 'Aderire al gruppe';
window.l.it.isMemberOfGroup = 'Membro del gruppo';
window.l.it.leaveGroup = 'Lasciare il gruppo';
window.l.it.memberCount = 'Membri';
window.l.it.adminCount = 'Amministratori';
window.l.it.settings = 'Configurazione';
window.l.it.saveChanges = 'Salvaguardare';
window.l.it.linkColor = 'Colore dei link';
window.l.it.backgroundColor = 'Colore di sfone';
window.l.it.newToQuitter = 'Sei un novizio su Quitter?';
window.l.it.signUp = 'Registrati';
window.l.it.signUpFullName = 'Nome e cognome';
window.l.it.signUpEmail = 'Indirizzo di posta elettronica';
window.l.it.signUpButtonText = 'Registrati su Quitter';
window.l.it.welcomeHeading = 'Benvenuto Quitter.';
window.l.it.welcomeText = 'Siamo una <span id="federated-tooltip"><div id="what-is-federation">"Federazione" \
significa che non è necessario avere un acconto Quitter per essere in grado di seguire, \
essere seguito da, o interagire con gli altri utenti Quitter. Potete registrarvi su \
qualsiasi server StatusNet, <a href="http://www.gnu.org/software/social/">GNU Social</a>, \
o qualsiasi altro servizio basato sul protocollo \
<a href="http://www.w3.org/community/ostatus/wiki/Main_Page">OStatus</a>! Non avete \
nemmeno bisogno di far parte di un servizio - provate a installare il meraviglioso \
software GNU Social sul proprio server! :)</div>federazione</span> di microbloggers \
che hanno a cuore l\'etica, la solidarietà, e che vogliono uscire dai servizi \
centralizzati capitalisti. Esistiamo dal 2010 e saremmo sempre non-profit.';
window.l.it.registerNickname = 'Nome dell\' utente';
window.l.it.registerHomepage = 'Sito web';
window.l.it.registerBio = 'Biografia';
window.l.it.registerLocation = 'Posizione';
window.l.it.registerRepeatPassword = 'Ripetere la password';
window.l.it.moreSettings = 'Altre configurazioni';
window.l.it.otherServers = '';
window.l.it.now = 'adesso';
window.l.it.posting = 'inviato';
window.l.it.viewMoreInConvBefore = '← Conversazioni precedenti';
window.l.it.viewMoreInConvAfter = 'Conversazioni successive →';
window.l.it.mentions = 'Menzioni';
window.l.it.timeline = 'Timeline';
window.l.it.publicTimeline = 'Timeline publica';
window.l.it.publicAndExtTimeline = 'Timeline della federazione';
window.l.it.searchVerb = 'Cercare';
window.l.it.deleteVerb = 'Eliminare';
window.l.it.cancelVerb = 'Annullare';
window.l.it.deleteConfirmation = 'Sei sicuro di volere cancellare questo queet?';
window.l.it.userExternalFollow = 'Seguire Remoto';
window.l.it.userExternalFollowHelp = 'L\'ID del tuo account (ad esempio user@rainbowdash.net)';
window.l.it.userFollow = 'Seguire';
window.l.it.userFollowing = 'Seguendo';
window.l.it.userUnfollow = 'Smettere di seguire';
window.l.it.joinGroup = 'Unisciti';
window.l.it.joinExternalGroup = 'Unisciti';
window.l.it.isMemberOfGroup = 'Membro del gruppo';
window.l.it.leaveGroup = 'Lasciare il gruppo';
window.l.it.memberCount = 'Membri';
window.l.it.adminCount = 'Amministratori';
window.l.it.settings = 'Opzioni';
window.l.it.saveChanges = 'Salva modifiche';
window.l.it.linkColor = 'Colore dei link';
window.l.it.backgroundColor = 'Colore dello sfondo';
window.l.it.newToQuitter = 'Sei nuovo su Quitter?';
window.l.it.signUp = 'Registrati';
window.l.it.signUpFullName = 'Nome e cognome';
window.l.it.signUpEmail = 'Indirizzo di posta elettronica';
window.l.it.signUpButtonText = 'Registrati su Quitter';
window.l.it.welcomeHeading = 'Benvenuto su Quitter.';
window.l.it.welcomeText = 'Siamo una <span id="federated-tooltip"><div id="what-is-federation">"Federazione" \
significa che non è necessario avere un account su Quitter per essere in grado di seguire, \
essere seguito, o interagire con gli altri utenti Quitter. Potete registrarvi su \
qualsiasi server StatusNet, <a href="http://www.gnu.org/software/social/">GNU Social</a>, \
o qualsiasi altro servizio basato sul protocollo \
<a href="http://www.w3.org/community/ostatus/wiki/Main_Page">OStatus</a>! Non avete \
nemmeno bisogno di far parte di un servizio - provate a installare il meraviglioso \
software GNU Social sul vostro server! :-)</div>federazione</span> di microbloggers \
che hanno a cuore l\'etica, la solidarietà, e che vogliono uscire dai servizi \
centralizzati capitalisti. Esistiamo dal 2010 e saremo sempre non-profit.';
window.l.it.registerNickname = 'Nickname';
window.l.it.registerHomepage = 'Sito web';
window.l.it.registerBio = 'Biografia';
window.l.it.registerLocation = 'Posizione';
window.l.it.registerRepeatPassword = 'Ripetere la password';
window.l.it.moreSettings = 'Altre opzioni';
window.l.it.otherServers = 'In alternativa puoi creare un account su un altro server della rete GNU Social. <a href="http://federation.skilledtests.com/select_your_server.html">Confronto</a>';
// set language, from local storage, else browser language, else english (english also if no localstorage availible)
@ -1108,4 +1126,6 @@ $('.stream-selection[data-stream-name="favorites.json"]').prepend(window.sL.favo
$('.stream-selection[data-stream-name="favorites.json"]').attr('data-stream-header',window.sL.favoritesNoun);
$('.stream-selection[data-stream-name="statuses/public_timeline.json"]').prepend(window.sL.publicTimeline);
$('.stream-selection[data-stream-name="statuses/public_timeline.json"]').attr('data-stream-header',window.sL.publicTimeline);
$('.stream-selection[data-stream-name="statuses/public_and_external_timeline.json?since_id=1"]').prepend(window.sL.publicAndExtTimeline);
$('.stream-selection[data-stream-name="statuses/public_and_external_timeline.json?since_id=1"]').attr('data-stream-header',window.sL.publicAndExtTimeline);
$('#search-query').attr('placeholder',window.sL.searchVerb);

View File

@ -416,7 +416,7 @@ function loadHistoryFromLocalStorage() {
$('#history-container').html('');
var historyContainer = $.parseJSON(localStorage[localStorageName]);
$.each(historyContainer, function(key,obj) {
$('#history-container').append('<a class="stream-selection" data-stream-header="' + obj.dataStreamHeader + '" href="' + obj.dataStreamHref + '">' + obj.dataStreamHeader + '<i class="close-right"></i><i class="chev-right"></i></a>');
$('#history-container').append('<a class="stream-selection" data-stream-header="' + obj.dataStreamHeader + '" href="' + obj.dataStreamHref + '">' + obj.dataStreamHeader + '</i><i class="chev-right"></i></a>');
});
}
updateHistoryLocalStorage();
@ -518,13 +518,16 @@ function rememberMyScrollPos(obj,id,offset) {
function backToMyScrollPos(obj,id,animate,callback) {
var pos = obj.offset().top-window.scrollpositions[id];
if(animate) {
if(animate == 'animate' || animate === true) {
animate = 1000;
}
if(typeof callback !== 'undefined'){
$('html, body').animate({ scrollTop: pos}, 1000, 'easeOutExpo',function(){
$('html, body').animate({ scrollTop: pos}, animate, 'linear',function(){
callback();
});
}
else {
$('html, body').animate({ scrollTop: pos }, 1000, 'easeOutExpo');
$('html, body').animate({ scrollTop: pos }, animate, 'linear');
}
}
else {

View File

@ -33,7 +33,9 @@
· ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
// object to keep old states of streams in, to speed up stream change
window.oldStreams = new Object();
/* ·
·
@ -94,8 +96,7 @@ $('#what-is-federation').on('mouseleave',function(){
$('.front-signup input, .front-signup button').removeAttr('disabled'); // clear this onload
$('#signup-btn-step1').click(function(){
display_spinner();
$('.front-signup input, .front-signup button').addClass('disabled');
$('.front-signup input, .front-signup button').attr('disabled','disabled');
@ -255,16 +256,13 @@ $(window).load(function() {
if(userInLocalStorage) {
$('input#username').val(localStorage.autologinUsername);
$('input#password').val(localStorage.autologinPassword);
// if this is a special url for user, notice etc, grab that stream
var streamToSet = getStreamFromUrl();
// if we're in client mode, i.e. not webapp mode, always go to friends timeline if logged in
if(window.useHistoryPushState === false) {
streamToSet = 'statuses/friends_timeline.json';
}
doLogin(streamToSet);
doLogin("get stream from url");
}
else {
display_spinner();
@ -286,11 +284,11 @@ $(window).load(function() {
$('#submit-login').click(function () {
// if this is a special url for user, notice etc, grab that stream
var streamToSet = getStreamFromUrl();
// if this is a special url for user, notice etc, grab that stream (UGLY SORRRRRY)
var streamToSet = "get stream from url";
// if this is the public feed, we redirect to friends_timline (I think that's intuitive)
if(streamToSet == 'statuses/public_timeline.json') {
if(getStreamFromUrl() == 'statuses/public_timeline.json') {
streamToSet = 'statuses/friends_timeline.json';
}
@ -311,6 +309,11 @@ function doLogin(streamToSet) {
window.loginUsername = user.screen_name;
window.loginPassword = $('input#password').val();
// maybe get stream from url (UGLY SORRRRRY)
if(streamToSet == "get stream from url") {
streamToSet = getStreamFromUrl(); // called now becuase we want window.loginUsername to be set first...
}
// set colors if the api supports it
if(typeof user.linkcolor != 'undefined' &&
typeof user.backgroundcolor != 'undefined') {
@ -573,7 +576,7 @@ $('#settingslink').click(function(){
/* ·
·
· When clicking a follow button
· When clicking a external follow button
·
· · · · · · · · · · · · · */
@ -585,6 +588,21 @@ $('body').on('click','.external-follow-button',function(event){
$('#popup-external-follow form').submit();
});
});
/* ·
·
· When clicking a external join button
·
· · · · · · · · · · · · · */
$('body').on('click','.external-member-button',function(event){
popUpAction('popup-external-join', window.sL.joinExternalGroup + ' ' + $('.profile-card-inner .screen-name').html(),'<form method="post" action="' + window.siteInstanceURL.replace('https://','http://') + 'main/ostatus"><input type="hidden" id="group" name="group" value="' + $('.profile-card-inner .screen-name').html().substring(1) + '"><input type="text" id="profile" name="profile" placeholder="' + window.sL.userExternalFollowHelp + '" /></form>','<div class="right"><button class="close">' + window.sL.cancelVerb + '</button><button class="primary">' + window.sL.userExternalFollow + '</button></div>');
$('#popup-external-join form input#profile').focus();
$('#popup-external-join button.primary').click(function(){
$('#popup-external-join form').submit();
});
});
@ -760,7 +778,7 @@ $(document).on('click','a', function(e) {
}
// ugly fix: if this is the x remove users from history, prevent link but don't set a new currentstream
if($(e.target).is('i.close-right')) {
if($(e.target).is('i.chev-right')) {
e.preventDefault();
return;
}
@ -774,6 +792,11 @@ $(document).on('click','a', function(e) {
e.preventDefault();
setNewCurrentStream('statuses/public_timeline.json',function(){},true);
}
// whole network feed
else if($(this).attr('href').replace('http://','').replace('https://','').replace(window.siteRootDomain,'') == '/main/all') {
e.preventDefault();
setNewCurrentStream('statuses/public_and_external_timeline.json?since_id=1',function(){},true);
}
// logged in users streams
else if ($(this).attr('href').replace('http://','').replace('https://','').replace(window.siteRootDomain + '/' + window.loginUsername,'') == '/all') {
e.preventDefault();
@ -811,7 +834,7 @@ $(document).on('click','a', function(e) {
// tags
else if ($(this).attr('href').indexOf(window.siteRootDomain + '/tag/')>-1) {
e.preventDefault();
setNewCurrentStream('statusnet/tags/timeline/' + $(this).text().toLowerCase() + '.json',function(){},true);
setNewCurrentStream('statusnet/tags/timeline/' + $(this).text().toLowerCase().replace('#','') + '.json',function(){},true);
}
// groups
else if (/^[0-9]+$/.test($(this).attr('href').replace('http://','').replace('https://','').replace(window.siteRootDomain + '/group/','').replace('/id',''))) {
@ -965,7 +988,7 @@ $(document).on('click','a', function(e) {
·
· · · · · · · · · · · · · */
$('body').on('click','.close-right',function(event){
$('body').on('click','#history-container .chev-right',function(event){
$(this).parent('.stream-selection').remove();
updateHistoryLocalStorage();
});
@ -976,7 +999,7 @@ $('body').on('click','.close-right',function(event){
· When sorting the history menu
·
· · · · · · · · · · · · · */
$('#history-container').on("sortupdate", function() {
updateHistoryLocalStorage();
});
@ -1119,7 +1142,7 @@ function checkForNewQueets() {
·
· · · · · · · · · · · · · */
$('#feed').on('click','#new-queets-bar',function(){
$('body').on('click','#new-queets-bar',function(){
document.title = window.siteTitle;
$('.stream-item.hidden').css('opacity','0')
$('.stream-item.hidden').animate({opacity:'1'}, 200);
@ -1136,7 +1159,7 @@ $('#feed').on('click','#new-queets-bar',function(){
·
· · · · · · · · · · · · · */
$('#feed-body').on('click','.queet',function (event) {
$('body').on('click','.queet',function (event) {
if(!$(event.target).is('a')
&& !$(event.target).is('.CodeMirror-scroll')
&& !$(event.target).is('.cm-mention')
@ -1196,7 +1219,7 @@ $(document).keyup(function(e){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.action-del-container',function(){
$('body').on('click','.action-del-container',function(){
var this_stream_item = $(this).parent().parent().parent().parent().parent();
var this_qid = this_stream_item.attr('data-quitter-id');
var $queetHtml = $('<div>').append(this_stream_item.html());
@ -1233,7 +1256,7 @@ $('#feed').on('click','.action-del-container',function(){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.action-rt-container',function(){
$('body').on('click','.action-rt-container',function(){
var this_stream_item = $(this).parent().parent().parent().parent().parent();
var this_action = $(this);
@ -1289,7 +1312,7 @@ $('#feed').on('click','.action-rt-container',function(){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.action-fav-container',function(){
$('body').on('click','.action-fav-container',function(){
var this_stream_item = $(this).parent().parent().parent().parent().parent();
var this_action = $(this);
@ -1344,7 +1367,7 @@ $('#feed').on('click','.action-fav-container',function(){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.action-reply-container',function(){
$('body').on('click','.action-reply-container',function(){
var this_stream_item = $(this).closest('.stream-item');
var this_stream_item_id = this_stream_item.attr('data-quitter-id');
@ -1401,7 +1424,7 @@ $(document).keyup(function(e){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.queet-box-template',function(){
$('body').on('click','.queet-box-template',function(){
// expand inline queet box
expandInlineQueetBox($(this));
});
@ -1430,19 +1453,30 @@ $('body').on('click', '.queet-toolbar button',function () {
var queetBoxID = $(this).parent().parent().parent().find('.queet-box-template').attr('id');
var queetText = window['codemirror-' + queetBoxID].getValue();
var queetHtml = '<div id="' + tempPostId + '" class="stream-item conversation temp-post" style="opacity:1"><div class="queet"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group"><img class="avatar" src="' + $('#user-avatar').attr('src') + '" /><strong class="name">' + $('#user-name').html() + '</strong> <span class="screen-name">@' + $('#user-screen-name').html() + '</span></a><small class="created-at">posting</small></div><div class="queet-text">' + queetText + '</div><div class="stream-item-footer"><span class="stream-item-expand">&nbsp;</span></div></div></div></div>';
queetHtml = detectRTL(queetHtml);
// get reply to id and add temp queet
if($('.modal-container').find('.queet-toolbar button').length>0) { // from popup
var in_reply_to_status_id = $('.modal-container').attr('id').substring(12); // removes "popup-reply-" from popups id
$('.modal-container').remove();
var queetHtml = '<div id="' + tempPostId + '" class="stream-item temp-post" style="opacity:1"><div class="queet"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group"><img class="avatar" src="' + $('#user-avatar').attr('src') + '" /><strong class="name">' + $('#user-name').html() + '</strong> <span class="screen-name">@' + $('#user-screen-name').html() + '</span></a><small class="created-at">posting</small></div><div class="queet-text">' + queetText + '</div><div class="stream-item-footer"><span class="stream-item-expand">&nbsp;</span></div></div></div></div>';
queetHtml = detectRTL(queetHtml);
$('#feed-body').prepend(queetHtml);
queetHtml = detectRTL(queetHtml);
// try to find an expanded queet to add the temp queet to
if($('.stream-item.expanded[data-quitter-id="' + in_reply_to_status_id + '"]').length > 0) {
$('.stream-item.expanded[data-quitter-id="' + in_reply_to_status_id + '"]').append(queetHtml);
}
else if($('.stream-item.conversation[data-quitter-id="' + in_reply_to_status_id + '"]').not('.hidden-conversation').length > 0) {
$('.stream-item.conversation[data-quitter-id="' + in_reply_to_status_id + '"]').not('.hidden-conversation').parent().append(queetHtml);
}
// if we cant find a proper place, just add it to top and remove conversation class
else {
$('#feed-body').prepend(queetHtml.replace('class="stream-item conversation','class="stream-item'));
}
}
else { // from inline reply
var in_reply_to_status_id = $(this).parent().parent().parent().parent().parent().attr('data-quitter-id');
var queetHtml = '<div id="' + tempPostId + '" class="stream-item conversation temp-post" style="opacity:1"><div class="queet"><span class="dogear"></span><div class="queet-content"><div class="stream-item-header"><a class="account-group"><img class="avatar" src="' + $('#user-avatar').attr('src') + '" /><strong class="name">' + $('#user-name').html() + '</strong> <span class="screen-name">@' + $('#user-screen-name').html() + '</span></a><small class="created-at">posting</small></div><div class="queet-text">' + queetText + '</div><div class="stream-item-footer"><span class="stream-item-expand">&nbsp;</span></div></div></div></div>';
queetHtml = detectRTL(queetHtml);
$(this).parent().parent().parent().parent().parent().append(queetHtml);
}
@ -1657,7 +1691,7 @@ codemirrorQueetBox.on("blur", function(){
// shortenUrlsInBox($('#queet-box'),$('#queet-counter'),$('#queet-toolbar button'));
// }
// });
// $('#feed').on('keyup','.queet-box-template',function(e){
// $('body').on('keyup','.queet-box-template',function(e){
// if(e.keyCode == 32) {
// shortenUrlsInBox($(this),$(this).find('.queet-counter'),$(this).find('.queet-toolbar button'));
// }
@ -1670,11 +1704,11 @@ codemirrorQueetBox.on("blur", function(){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.view-more-container-bottom', function(){
$('body').on('click','.view-more-container-bottom', function(){
findReplyToStatusAndShow($(this).parent('.stream-item').attr('data-quitter-id'),$(this).attr('data-replies-after'));
$(this).remove();
});
$('#feed').on('click','.view-more-container-top', function(){
$('body').on('click','.view-more-container-top', function(){
var this_qid = $(this).closest('.stream-item:not(.conversation)').attr('data-quitter-id');
var queet = $(this).siblings('.queet');
@ -1700,7 +1734,7 @@ $('#feed').on('click','.view-more-container-top', function(){
·
· · · · · · · · · · · · · */
$('#feed').on('click','.show-full-conversation',function(){
$('body').on('click','.show-full-conversation',function(){
var this_q = $(this).closest('.queet');
var this_qid = $(this).closest('.stream-item:not(.conversation)').attr('data-quitter-id');
@ -1718,4 +1752,5 @@ $('#feed').on('click','.show-full-conversation',function(){
$(this).remove();
backToMyScrollPos(this_q,this_qid,false);
});
});