1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/movim_ynh.git synced 2024-09-03 19:46:19 +02:00

Merge branch 'dev'

This commit is contained in:
src386 2015-08-23 01:15:20 +02:00
commit de34015100
50 changed files with 47338 additions and 44562 deletions

View file

@ -5,10 +5,21 @@ Movim is a decentralized social network, written in PHP and HTML5 and based on t
Warning: BETA. Warning: BETA.
Current Movim version : 20150820. Current Movim version : 20150821.
**Changelog** **Changelog**
0.8b 2015-08-23
- Added language selection : ar, de, es, it, ja, nl, ru
- Fix URL in manifest.json (was https://https://...)
- Public/Private policy changed. The SSO portal is not used anymore
But when a pod is marked as "private", only accounts with @yourdomain.com are able to connect.
This change was necessary for public content (blog)
- Add dedicated php-fpm pool for Movim
- Protect /log and /config properly
- Update to upstream Movim 20150821
- Fix #6 and #7
0.7b 2015-08-20 0.7b 2015-08-20
- Update to upstream Movim 20150820 to fix #5 - Update to upstream Movim 20150820 to fix #5

0
TODO
View file

View file

@ -10,7 +10,7 @@ location PATHTOCHANGE {
location ~ [^/]\.php(/|$) { location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass unix:/var/run/php5-fpm-movim.sock;
fastcgi_index index.php; fastcgi_index index.php;
include fastcgi_params; include fastcgi_params;
fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_USER $remote_user;
@ -31,11 +31,12 @@ location ~ ^PATHTOCHANGE/ws/ {
proxy_send_timeout 86400s; proxy_send_timeout 86400s;
proxy_redirect off; proxy_redirect off;
} }
# Include SSOWAT user panel.
include conf.d/yunohost_panel.conf.inc;
} }
location ~ ^PATHTOCHANGE/(log|\.ht) { location ~ /\.ht {
deny all; deny all;
} }
location ~ /(config|log)$ {
return 403;
}

15
conf/php-fpm.conf Normal file
View file

@ -0,0 +1,15 @@
[movim]
listen = /var/run/php5-fpm-movim.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0600
user = movim
group = movim
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /var/www/movim
php_admin_value[open_basedir] = none

View file

@ -8,7 +8,7 @@
"maintainer": { "maintainer": {
"name": "src386", "name": "src386",
"email": "soyouz@src386.org", "email": "soyouz@src386.org",
"url": "http://https://github.com/src386" "url": "http://github.com/src386"
}, },
"multi_instance": "false", "multi_instance": "false",
"arguments": { "arguments": {
@ -56,7 +56,7 @@
"en": "Pod language", "en": "Pod language",
"fr": "Langue du pod" "fr": "Langue du pod"
}, },
"choices" : ["en", "fr"], "choices" : ["ar", "de", "en", "es", "fr", "it", "ja", "nl", "ru"],
"default" : "en" "default" : "en"
}, },
{ {

View file

@ -12,13 +12,13 @@ port=$7
# Check domain/path availability # Check domain/path availability
sudo yunohost app checkurl $domain$path -a movim sudo yunohost app checkurl $domain$path -a movim
if [[ ! $? -eq 0 ]]; then if [[ ! $? -eq 0 ]]; then
exit 1 exit 1
fi fi
# Check port availability # Check port availability
sudo yunohost app checkport $port sudo yunohost app checkport $port
if [[ ! $? -eq 0 ]]; then if [[ ! $? -eq 0 ]]; then
exit 1 exit 1
fi fi
# Check user availability # Check user availability
@ -30,15 +30,17 @@ fi
# Check password not empty # Check password not empty
if [[ -z "$password" ]]; then if [[ -z "$password" ]]; then
printf "Error empty admin password, aborting" printf "Error empty admin password, aborting"
exit 1 exit 1
fi fi
# Save parameters
sudo yunohost app setting movim admin -v $admin sudo yunohost app setting movim admin -v $admin
sudo yunohost app setting movim public_site -v $public_site sudo yunohost app setting movim public_site -v $public_site
sudo yunohost app setting movim port -v $port sudo yunohost app setting movim port -v $port
sudo yunohost app setting movim path -v $path
# Generate random password # Generate random password
db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p') db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[[:alnum:]]')
# Use 'movim' as database name and user # Use 'movim' as database name and user
db_user=movim db_user=movim
@ -54,18 +56,18 @@ sudo apt-get install php5-gd php5-curl php5-imagick php5-cli -y
final_path=/var/www/movim final_path=/var/www/movim
sudo mkdir -p $final_path sudo mkdir -p $final_path
sudo cp -a ../sources/* $final_path sudo cp -a ../sources/* $final_path
sudo cp $final_path/config/db.example.inc.php $final_path/config/db.inc.php
# Create movim system user and set permissions # Create movim system user and set permissions
sudo useradd -d /var/www/movim -s /bin/sh movim sudo useradd -d /var/www/movim -s /bin/sh movim
sudo chown -R movim:www-data $final_path sudo chown -R movim:www-data $final_path
sudo chmod -R 770 $final_path sudo chmod -R 750 $final_path
# Install PHP dependencies # Install PHP dependencies
sudo su -c "curl -sS https://getcomposer.org/installer | php -- --install-dir=$final_path" movim sudo su -c "curl -sS https://getcomposer.org/installer | php -- --install-dir=$final_path" movim
sudo su -c "cd $final_path && php composer.phar install" movim sudo su -c "cd $final_path && php composer.phar install" movim
# Movim configuration # Movim configuration
sudo cp $final_path/config/db.example.inc.php $final_path/config/db.inc.php
sudo sed -i "s@'username' => 'username'@'username' => '$db_user'@g" $final_path/config/db.inc.php sudo sed -i "s@'username' => 'username'@'username' => '$db_user'@g" $final_path/config/db.inc.php
sudo sed -i "s@'password' => 'password'@'password' => '$db_pwd'@g" $final_path/config/db.inc.php sudo sed -i "s@'password' => 'password'@'password' => '$db_pwd'@g" $final_path/config/db.inc.php
sudo sed -i "s@/ws/@$path/ws/@g" $final_path/app/assets/js/movim_websocket.js sudo sed -i "s@/ws/@$path/ws/@g" $final_path/app/assets/js/movim_websocket.js
@ -76,6 +78,10 @@ sudo su -c "cd $final_path && php mud.php config environment:production" movim
sudo su -c "cd $final_path && php mud.php config timezone:`cat /etc/timezone`" movim sudo su -c "cd $final_path && php mud.php config timezone:`cat /etc/timezone`" movim
sudo su -c "cd $final_path && php mud.php config username:$admin" movim sudo su -c "cd $final_path && php mud.php config username:$admin" movim
sudo su -c "cd $final_path && php mud.php config password:`echo -n $password | sha1sum | awk '{print $1}'`" movim sudo su -c "cd $final_path && php mud.php config password:`echo -n $password | sha1sum | awk '{print $1}'`" movim
if [ $public_site = "No" ];
then
sudo su -c "cd $final_path && php mud.php config xmppwhitelist:$domain" movim
fi
sudo yunohost app addaccess movim -u $admin sudo yunohost app addaccess movim -u $admin
# Copy init script or systemd service # Copy init script or systemd service
@ -95,22 +101,20 @@ else
sudo /etc/init.d/movim start sudo /etc/init.d/movim start
fi fi
# php-fpm configuration
sudo cp ../conf/php-fpm.conf /etc/php5/fpm/pool.d/movim.conf
# Nginx configuration # Nginx configuration
sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf
sed -i "s@YHPORT@$port@g" ../conf/nginx.conf sed -i "s@YHPORT@$port@g" ../conf/nginx.conf
sed -i "s@//ws/@/ws/@g" ../conf/nginx.conf # Avoid duplicate /
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/movim.conf sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/movim.conf
# SSOwat Configuration # SSOwat Configuration
sudo yunohost app setting movim skipped_uris -v "/" sudo yunohost app setting movim skipped_uris -v "/"
if [ $public_site = "No" ];
then
sudo yunohost app setting movim protected_uris -v "/"
else
sudo yunohost app setting movim protected_uris -v "/?q=admin"
fi
sudo yunohost app ssowatconf sudo yunohost app ssowatconf
# Start Movim # Start Movim
sudo service nginx reload
sudo service php5-fpm restart sudo service php5-fpm restart
sudo service nginx reload

View file

@ -4,20 +4,20 @@
path=$(sudo yunohost app setting movim path) path=$(sudo yunohost app setting movim path)
domain=$(sudo yunohost app setting movim domain) domain=$(sudo yunohost app setting movim domain)
port=$(sudo yunohost app setting movim port) port=$(sudo yunohost app setting movim port)
public_site=$(sudo yunohost app setting movim public_site)
# Install Movim files # Install Movim files
final_path=/var/www/movim final_path=/var/www/movim
sudo cp -a ../sources/* $final_path sudo cp -a ../sources/* $final_path
#sudo chown -R www-data: $final_path
# Create movim user if not exists and set permissions # Create movim user if not exists and set permissions
if grep -q movim /etc/passwd; then if grep -q movim /etc/passwd; then
sudo chown -R movim:www-data $final_path sudo chown -R movim:www-data $final_path
sudo chmod -R 770 $final_path sudo chmod -R 750 $final_path
else else
sudo useradd -s /bin/sh -d $final_path movim sudo useradd -s /bin/sh -d $final_path movim
sudo chown -R movim:www-data $final_path sudo chown -R movim:www-data $final_path
sudo chmod -R 770 $final_path sudo chmod -R 750 $final_path
fi fi
# Update PHP dependencies # Update PHP dependencies
@ -27,6 +27,15 @@ sudo su -c "cd $final_path && php composer.phar install" movim
# Movim configuration # Movim configuration
sudo sed -i "s@/ws/@$path/ws/@g" $final_path/app/assets/js/movim_websocket.js sudo sed -i "s@/ws/@$path/ws/@g" $final_path/app/assets/js/movim_websocket.js
# Update xmppwhitelist if private
if [ $public_site = "No" ];
then
sudo su -c "cd $final_path && php mud.php config xmppwhitelist:$domain" movim
fi
# Delete obsolete SSO conf
sudo yunohost app setting movim protected_uris -d
# Update init scripts # Update init scripts
sudo sed -i "s@YHURL@$domain$path@g" ../conf/movim.{service,init} sudo sed -i "s@YHURL@$domain$path@g" ../conf/movim.{service,init}
sudo sed -i "s@YHDIR@$final_path@g" ../conf/movim.{service,init} sudo sed -i "s@YHDIR@$final_path@g" ../conf/movim.{service,init}
@ -47,6 +56,18 @@ else
sudo /etc/init.d/movim start sudo /etc/init.d/movim start
fi fi
# Update php-fpm configuration
sudo cp ../conf/php-fpm.conf /etc/php5/fpm/pool.d/movim.conf
# Nginx configuration
sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf
sed -i "s@YHPORT@$port@g" ../conf/nginx.conf
sed -i "s@//ws/@/ws/@g" ../conf/nginx.conf # Avoid duplicate /
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/movim.conf
# Reload # Reload
sudo yunohost app ssowatconf sudo yunohost app ssowatconf
sudo service movim restart sudo service movim restart
sudo service php5-fpm restart
sudo service nginx reload

View file

@ -224,7 +224,12 @@ function cleanJid($jid)
*/ */
function explodeJid($jid) function explodeJid($jid)
{ {
list($jid, $resource) = explode('/', $jid); $arr = explode('/', $jid);
$jid = $arr[0];
if(isset($arr[1])) $resource = $arr[1];
else $resource = null;
list($username, $server) = explode('@', $jid); list($username, $server) = explode('@', $jid);
return array( return array(

View file

@ -261,7 +261,7 @@ class Contact extends Model {
public function setVcard4($vcard) { public function setVcard4($vcard) {
if(isset($vcard->bday->date)) if(isset($vcard->bday->date))
$this->date = (string)$vcard->bday->date; $this->date = (string)$vcard->bday->date;
if($empty($this->date)) if(empty($this->date))
$this->date = null; $this->date = null;
$this->name = (string)$vcard->nickname->text; $this->name = (string)$vcard->nickname->text;

View file

@ -1,7 +1,7 @@
#chat_header.encrypted:after{ #chat_header.encrypted:after{
content: ""; content: "";
display: inline-block; display: inline-block;
font-family: "Material Design Iconic Font"; font-family: "Material Design Iconic Font";
content: "\f041"; content: "\f041";
font-size: 2.5rem; font-size: 2.5rem;
margin-left: 1rem; margin-left: 1rem;
@ -19,7 +19,7 @@
#chat_widget .chat_box ul { #chat_widget .chat_box ul {
margin: 0 auto; margin: 0 auto;
max-width: 100rem; max-width: 100rem;
margin-left: calc(50% - 51rem); margin-left: calc(45% - 49rem);
} }
#chat_widget .chat_box form { #chat_widget .chat_box form {

View file

@ -121,6 +121,13 @@ var Chat = {
} }
} }
MovimWebsocket.attach(function() {
var jid = document.querySelector('#chat_widget').dataset.jid;
if(jid) {
Chat_ajaxGet(jid);
}
});
Upload.attach(function() { Upload.attach(function() {
var textarea = document.querySelector('#chat_textarea'); var textarea = document.querySelector('#chat_textarea');
textarea.value = Upload.get + ' ' + textarea.value; textarea.value = Upload.get + ' ' + textarea.value;

View file

@ -1,10 +1,3 @@
<div id="chat_widget"> <div id="chat_widget" {if="$jid"}data-jid="{$jid}"{/if}>
{$c->prepareEmpty()} {$c->prepareEmpty()}
{if="$jid"}
<script type="text/javascript">
MovimWebsocket.attach(function() {
Chat_ajaxGet('{$jid}');
});
</script>
{/if}
</div> </div>

View file

@ -15,6 +15,8 @@ class Chats extends WidgetBase
$this->registerEvent('carbons', 'onMessage'); $this->registerEvent('carbons', 'onMessage');
$this->registerEvent('message', 'onMessage'); $this->registerEvent('message', 'onMessage');
$this->registerEvent('presence', 'onPresence', 'chat'); $this->registerEvent('presence', 'onPresence', 'chat');
$this->registerEvent('composing', 'onComposing');
$this->registerEvent('paused', 'onPaused');
} }
function onMessage($packet) function onMessage($packet)
@ -56,6 +58,29 @@ class Chats extends WidgetBase
} }
} }
function onComposing($array)
{
$this->setState($array, $this->__('chats.composing'));
}
function onPaused($array)
{
$this->setState($array, $this->__('chats.paused'));
}
private function setState($array, $message)
{
list($from, $to) = $array;
if($from == $this->user->getLogin()) {
$jid = $to;
} else {
$jid = $from;
}
RPC::call('movim_replace', $jid.'_chat_item', $this->prepareChat($jid, $message));
RPC::call('Chats.refresh');
}
/** /**
* @brief Get history * @brief Get history
*/ */
@ -67,7 +92,7 @@ class Chats extends WidgetBase
$messages = $md->getContact(echapJid($jid), 0, 1); $messages = $md->getContact(echapJid($jid), 0, 1);
$g = new \Moxl\Xec\Action\MAM\Get; $g = new \Moxl\Xec\Action\MAM\Get;
$g->setJid($jid); $g->setJid(echapJid($jid));
if(!empty($messages)) { if(!empty($messages)) {
$g->setStart(strtotime($messages[0]->published)); $g->setStart(strtotime($messages[0]->published));
@ -156,7 +181,7 @@ class Chats extends WidgetBase
return $view->draw('_chats', true); return $view->draw('_chats', true);
} }
function prepareChat($jid) function prepareChat($jid, $status = null)
{ {
if(!$this->validateJid($jid)) return; if(!$this->validateJid($jid)) return;
@ -180,6 +205,8 @@ class Chats extends WidgetBase
$view->assign('caps', null); $view->assign('caps', null);
} }
$view->assign('status', $status);
$m = $md->getContact($jid, 0, 1); $m = $md->getContact($jid, 0, 1);
if(isset($m)) { if(isset($m)) {
$view->assign('message', $m[0]); $view->assign('message', $m[0]);

View file

@ -26,12 +26,16 @@
</span> </span>
{/if} {/if}
<span>{$contact->getTrueName()}</span> <span>{$contact->getTrueName()}</span>
{if="isset($message)"} {if="isset($status)"}
<span class="info">{$message->published|strtotime|prepareDate}</span> <p>{$status}</p>
{if="preg_match('#^\?OTR#', $message->body)"} {else}
<p><i class="zmdi zmdi-lock"></i> {$c->__('message.encrypted')}</p> {if="isset($message)"}
{else} <span class="info">{$message->published|strtotime|prepareDate}</span>
<p>{$message->body|prepareString|strip_tags}</p> {if="preg_match('#^\?OTR#', $message->body)"}
<p><i class="zmdi zmdi-lock"></i> {$c->__('message.encrypted')}</p>
{else}
<p>{$message->body|prepareString|strip_tags}</p>
{/if}
{/if} {/if}
{/if} {/if}
</li> </li>

View file

@ -4,6 +4,8 @@ empty = Open a new conversation by clicking on the plus button bello
add = Chat with a contact add = Chat with a contact
frequent = Frequent contacts frequent = Frequent contacts
more = Load more contacts more = Load more contacts
composing = Composing...
paused = Paused...
[message] [message]
encrypted = Encrypted message encrypted = Encrypted message

View file

@ -1,5 +1,5 @@
<div id="roster" ng-controller="RosterController as rosterCtrl"> <div id="roster" ng-controller="RosterController as rosterCtrl">
<ul id="rosterlist" class="{if="isset($conf) && $conf.roster == 'show'"}offlineshown{/if} active all"> <ul id="rosterlist" class="{if="isset($conf) && isset($conf.roster) && $conf.roster == 'show'"}offlineshown{/if} active all">
<div ng-if="contacts == null" class="empty placeholder icon contacts"> <div ng-if="contacts == null" class="empty placeholder icon contacts">
<h1>{$c->__('roster.no_contacts_title')}</h1> <h1>{$c->__('roster.no_contacts_title')}</h1>
<h4>{$c->__('roster.no_contacts_text')}</h4> <h4>{$c->__('roster.no_contacts_text')}</h4>

View file

@ -51,7 +51,6 @@ $stdin_behaviour = function ($data) use (&$conn, $loop, &$buffer, &$connector, &
$config = $cd->get(); $config = $cd->get();
$port = 5222; $port = 5222;
$dns = \Moxl\Utils::resolveHost($msg->host); $dns = \Moxl\Utils::resolveHost($msg->host);
if(isset($dns[0]['target']) && $dns[0]['target'] != null) $msg->host = $dns[0]['target']; if(isset($dns[0]['target']) && $dns[0]['target'] != null) $msg->host = $dns[0]['target'];
if(isset($dns[0]['port']) && $dns[0]['port'] != null) $port = $dns[0]['port']; if(isset($dns[0]['port']) && $dns[0]['port'] != null) $port = $dns[0]['port'];
@ -111,6 +110,7 @@ $xmpp_behaviour = function (React\Stream\Stream $stream) use (&$conn, $loop, &$s
} elseif($message == "<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>" } elseif($message == "<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>"
|| $message == '<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>') { || $message == '<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>') {
stream_set_blocking($conn->stream, 1); stream_set_blocking($conn->stream, 1);
stream_context_set_option($conn->stream, 'ssl', 'allow_self_signed', true);
$out = stream_socket_enable_crypto($conn->stream, 1, STREAM_CRYPTO_METHOD_TLS_CLIENT); $out = stream_socket_enable_crypto($conn->stream, 1, STREAM_CRYPTO_METHOD_TLS_CLIENT);
$restart = true; $restart = true;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -25,10 +25,10 @@
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Chats/locales.ini #. extracted from ../app/widgets/Chats/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Config/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/ConfigData/locales.ini #. extracted from ../app/widgets/ConfigData/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Config/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Contact/locales.ini #. extracted from ../app/widgets/Contact/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Group/locales.ini #. extracted from ../app/widgets/Group/locales.ini
@ -45,10 +45,10 @@
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Location/locales.ini #. extracted from ../app/widgets/Location/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Login/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/LoginAnonymous/locales.ini #. extracted from ../app/widgets/LoginAnonymous/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Login/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Menu/locales.ini #. extracted from ../app/widgets/Menu/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/NodeAffiliations/locales.ini #. extracted from ../app/widgets/NodeAffiliations/locales.ini
@ -81,17 +81,17 @@
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Vcard4/locales.ini #. extracted from ../app/widgets/Vcard4/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Visio/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/VisioExt/locales.ini #. extracted from ../app/widgets/VisioExt/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-# #. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/Visio/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../locales/locales.ini #. extracted from ../locales/locales.ini
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-16 15:40+0200\n" "POT-Creation-Date: 2015-08-20 15:17+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -584,11 +584,11 @@ msgstr ""
msgid "Encrypted message" msgid "Encrypted message"
msgstr "" msgstr ""
#: [message]composing #: [message]composing [chats]composing
msgid "Composing..." msgid "Composing..."
msgstr "" msgstr ""
#: [message]paused #: [message]paused [chats]paused
msgid "Paused..." msgid "Paused..."
msgstr "" msgstr ""
@ -666,6 +666,26 @@ msgstr ""
msgid "Load more contacts" msgid "Load more contacts"
msgstr "" msgstr ""
#: [title]data
msgid "Data"
msgstr ""
#: [title]cache
msgid "Cache"
msgstr ""
#: [title]contacts [menu]contacts [page]contacts
msgid "Contacts"
msgstr ""
#: [title]posts [page]posts
msgid "Posts"
msgstr ""
#: [title]messages
msgid "Messages"
msgstr ""
#: [config]general #: [config]general
msgid "General" msgid "General"
msgstr "" msgstr ""
@ -702,26 +722,6 @@ msgstr ""
msgid "Use desktop notifications" msgid "Use desktop notifications"
msgstr "" msgstr ""
#: [title]data
msgid "Data"
msgstr ""
#: [title]cache
msgid "Cache"
msgstr ""
#: [title]contacts [menu]contacts [page]contacts
msgid "Contacts"
msgstr ""
#: [title]posts [page]posts
msgid "Posts"
msgstr ""
#: [title]messages
msgid "Messages"
msgstr ""
#: [general]legend [general]general_title #: [general]legend [general]general_title
msgid "General Informations" msgid "General Informations"
msgstr "" msgstr ""
@ -957,7 +957,7 @@ msgstr ""
#: [group]help_info2 #: [group]help_info2
msgid "" msgid ""
"Choose a server and a Group and subscribe to it using the %s button in the " "Choose a server and a Group and subscribe to it using the %s button in the "
"header. You can alse create a new one using the %s button." "header. You can also create a new one using the %s button."
msgstr "" msgstr ""
#: [group]help_info3 #: [group]help_info3
@ -1181,6 +1181,10 @@ msgstr ""
msgid "Update my position" msgid "Update my position"
msgstr "" msgstr ""
#: [login_anonymous]bad_username
msgid "Bad nickname (between 4 and 40 characters)"
msgstr ""
#: [error]username #: [error]username
msgid "Wrong username" msgid "Wrong username"
msgstr "" msgstr ""
@ -1309,10 +1313,6 @@ msgstr ""
msgid "Population" msgid "Population"
msgstr "" msgstr ""
#: [login_anonymous]bad_username
msgid "Bad nickname (between 4 and 40 characters)"
msgstr ""
#: [menu]empty_title #: [menu]empty_title
msgid "No news yet..." msgid "No news yet..."
msgstr "" msgstr ""
@ -1784,18 +1784,6 @@ msgstr ""
msgid "Reset" msgid "Reset"
msgstr "" msgstr ""
#: [visio]call
msgid "Call"
msgstr ""
#: [visio]hang_up
msgid "Hang up"
msgstr ""
#: [visio]connection
msgid "Connection"
msgstr ""
#: [visio]hung_up #: [visio]hung_up
msgid "Hung up" msgid "Hung up"
msgstr "" msgstr ""
@ -1812,6 +1800,18 @@ msgstr ""
msgid "Is calling you" msgid "Is calling you"
msgstr "" msgstr ""
#: [visio]call
msgid "Call"
msgstr ""
#: [visio]hang_up
msgid "Hang up"
msgstr ""
#: [visio]connection
msgid "Connection"
msgstr ""
#: [global]no_js #: [global]no_js
msgid "You don't have javascript enabled. Good luck with that." msgid "You don't have javascript enabled. Good luck with that."
msgstr "" msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -431,7 +431,7 @@ function getMood() {
'envious' => __('mood.envious'), // Feeling pain by the excellence or good fortune of another. 'envious' => __('mood.envious'), // Feeling pain by the excellence or good fortune of another.
'excited' => __('mood.excited'), // Having great enthusiasm. 'excited' => __('mood.excited'), // Having great enthusiasm.
'flirtatious' => __('mood.flirtatious'), // In the mood for flirting. 'flirtatious' => __('mood.flirtatious'), // In the mood for flirting.
'frustated' => __('mood.frustrated'), // Suffering from frustration; dissatisfied, agitated, or discontented because one is unable to perform an action or fulfill a desire. 'frustrated' => __('mood.frustrated'), // Suffering from frustration; dissatisfied, agitated, or discontented because one is unable to perform an action or fulfill a desire.
'grateful' => __('mood.grateful'), // Feeling appreciation or thanks. 'grateful' => __('mood.grateful'), // Feeling appreciation or thanks.
'grieving' => __('mood.grieving'), // Feeling very sad about something, especially something lost; mournful; sorrowful. 'grieving' => __('mood.grieving'), // Feeling very sad about something, especially something lost; mournful; sorrowful.
'grumpy' => __('mood.grumpy'), // Unhappy and irritable. 'grumpy' => __('mood.grumpy'), // Unhappy and irritable.

View file

@ -339,7 +339,7 @@ header.big ~ .button.action {
@media screen and (min-width: 1025px) { @media screen and (min-width: 1025px) {
main > section > div:first-child:nth-last-child(2) .button.action { main > section > div:first-child:nth-last-child(2) .button.action {
right: calc(70% + 3rem); right: calc(65% + 3rem);
} }
} }

View file

@ -180,7 +180,7 @@ body > nav li { /* Little hack for the navbar */
} }
} }
@media screen and (min-width: 1024px) { @media screen and (min-width: 1024px) and (max-width: 1680px) {
body > nav:hover { body > nav:hover {
width: 45rem; width: 45rem;
box-shadow: 0 2.5rem 5rem rgba(0,0,0,0.30), 0 2rem 1.5rem rgba(0,0,0,0.22); box-shadow: 0 2.5rem 5rem rgba(0,0,0,0.30), 0 2rem 1.5rem rgba(0,0,0,0.22);
@ -203,14 +203,12 @@ body > nav li { /* Little hack for the navbar */
@media screen and (min-width: 1680px) { @media screen and (min-width: 1680px) {
body > nav, body > nav,
body > nav:hover { body > nav:hover {
width: 32rem; width: 15%;
box-shadow: none;
} }
body > nav + main, body > nav + main,
body > nav:hover + main { body > nav:hover + main {
opacity: 1; width: 85%;
width: calc(100% - 32rem);
} }
} }
@ -248,7 +246,7 @@ main > header {
main > header > div { main > header > div {
padding-left: 9rem; padding-left: 9rem;
position: relative; position: relative;
width: 30%; width: 35%;
display: inline-block; display: inline-block;
/*overflow: hidden;*/ /*overflow: hidden;*/
box-sizing: border-box; box-sizing: border-box;
@ -289,7 +287,7 @@ main > header > div > ul.active:not(.context_menu) li.thin span.icon {
} }
main > header > div:first-child:nth-last-child(2) ~ div { main > header > div:first-child:nth-last-child(2) ~ div {
width: 70%; width: 65%;
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
@ -384,10 +382,10 @@ main > section > div > * {
/* Two blocks*/ /* Two blocks*/
main > section > div:first-child:nth-last-child(2) { main > section > div:first-child:nth-last-child(2) {
width: 30%; width: 35%;
} }
main > section > div:first-child:nth-last-child(2) ~ div { main > section > div:first-child:nth-last-child(2) ~ div {
width: 70%; width: 65%;
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;