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:
commit
c73dc4b34a
47 changed files with 37368 additions and 40098 deletions
|
@ -5,10 +5,13 @@ Movim is a decentralized social network, written in PHP and HTML5 and based on t
|
|||
|
||||
Warning: BETA.
|
||||
|
||||
Current Movim version : 20150821.
|
||||
Current Movim version : 20150818.
|
||||
|
||||
**Changelog**
|
||||
|
||||
0.8.1b 2015-08-24
|
||||
- Revert to Movim 20150818 to fix a bug (instant disconnect after login)
|
||||
|
||||
0.8b 2015-08-23
|
||||
- Added language selection : ar, de, es, it, ja, nl, ru
|
||||
- Fix URL in manifest.json (was https://https://...)
|
||||
|
|
5
TODO
Normal file
5
TODO
Normal file
|
@ -0,0 +1,5 @@
|
|||
- proxy_read_timeout
|
||||
- proxy_send_timeout
|
||||
- check if path is not empty
|
||||
- whitelist
|
||||
- movim.service pid / syslog ?
|
|
@ -224,12 +224,7 @@ function cleanJid($jid)
|
|||
*/
|
||||
function explodeJid($jid)
|
||||
{
|
||||
$arr = explode('/', $jid);
|
||||
$jid = $arr[0];
|
||||
|
||||
if(isset($arr[1])) $resource = $arr[1];
|
||||
else $resource = null;
|
||||
|
||||
list($jid, $resource) = explode('/', $jid);
|
||||
list($username, $server) = explode('@', $jid);
|
||||
|
||||
return array(
|
||||
|
|
|
@ -259,9 +259,9 @@ class Contact extends Model {
|
|||
}
|
||||
|
||||
public function setVcard4($vcard) {
|
||||
if(isset($vcard->bday->date))
|
||||
if(isset($vcard->bday->date) && !empty((string)$vcard->bday->date))
|
||||
$this->date = (string)$vcard->bday->date;
|
||||
if(empty($this->date))
|
||||
else
|
||||
$this->date = null;
|
||||
|
||||
$this->name = (string)$vcard->nickname->text;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#chat_header.encrypted:after{
|
||||
content: "";
|
||||
display: inline-block;
|
||||
font-family: "Material Design Iconic Font";
|
||||
font-family: "Material Design Iconic Font";
|
||||
content: "\f041";
|
||||
font-size: 2.5rem;
|
||||
margin-left: 1rem;
|
||||
|
@ -19,7 +19,7 @@
|
|||
#chat_widget .chat_box ul {
|
||||
margin: 0 auto;
|
||||
max-width: 100rem;
|
||||
margin-left: calc(45% - 49rem);
|
||||
margin-left: calc(50% - 51rem);
|
||||
}
|
||||
|
||||
#chat_widget .chat_box form {
|
||||
|
|
|
@ -121,13 +121,6 @@ var Chat = {
|
|||
}
|
||||
}
|
||||
|
||||
MovimWebsocket.attach(function() {
|
||||
var jid = document.querySelector('#chat_widget').dataset.jid;
|
||||
if(jid) {
|
||||
Chat_ajaxGet(jid);
|
||||
}
|
||||
});
|
||||
|
||||
Upload.attach(function() {
|
||||
var textarea = document.querySelector('#chat_textarea');
|
||||
textarea.value = Upload.get + ' ' + textarea.value;
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
<div id="chat_widget" {if="$jid"}data-jid="{$jid}"{/if}>
|
||||
<div id="chat_widget">
|
||||
{$c->prepareEmpty()}
|
||||
{if="$jid"}
|
||||
<script type="text/javascript">
|
||||
MovimWebsocket.attach(function() {
|
||||
Chat_ajaxGet('{$jid}');
|
||||
});
|
||||
</script>
|
||||
{/if}
|
||||
</div>
|
||||
|
|
|
@ -15,8 +15,6 @@ class Chats extends WidgetBase
|
|||
$this->registerEvent('carbons', 'onMessage');
|
||||
$this->registerEvent('message', 'onMessage');
|
||||
$this->registerEvent('presence', 'onPresence', 'chat');
|
||||
$this->registerEvent('composing', 'onComposing');
|
||||
$this->registerEvent('paused', 'onPaused');
|
||||
}
|
||||
|
||||
function onMessage($packet)
|
||||
|
@ -58,29 +56,6 @@ 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
|
||||
*/
|
||||
|
@ -92,7 +67,7 @@ class Chats extends WidgetBase
|
|||
$messages = $md->getContact(echapJid($jid), 0, 1);
|
||||
|
||||
$g = new \Moxl\Xec\Action\MAM\Get;
|
||||
$g->setJid(echapJid($jid));
|
||||
$g->setJid($jid);
|
||||
|
||||
if(!empty($messages)) {
|
||||
$g->setStart(strtotime($messages[0]->published));
|
||||
|
@ -181,7 +156,7 @@ class Chats extends WidgetBase
|
|||
return $view->draw('_chats', true);
|
||||
}
|
||||
|
||||
function prepareChat($jid, $status = null)
|
||||
function prepareChat($jid)
|
||||
{
|
||||
if(!$this->validateJid($jid)) return;
|
||||
|
||||
|
@ -205,8 +180,6 @@ class Chats extends WidgetBase
|
|||
$view->assign('caps', null);
|
||||
}
|
||||
|
||||
$view->assign('status', $status);
|
||||
|
||||
$m = $md->getContact($jid, 0, 1);
|
||||
if(isset($m)) {
|
||||
$view->assign('message', $m[0]);
|
||||
|
|
|
@ -26,16 +26,12 @@
|
|||
</span>
|
||||
{/if}
|
||||
<span>{$contact->getTrueName()}</span>
|
||||
{if="isset($status)"}
|
||||
<p>{$status}</p>
|
||||
{else}
|
||||
{if="isset($message)"}
|
||||
<span class="info">{$message->published|strtotime|prepareDate}</span>
|
||||
{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="isset($message)"}
|
||||
<span class="info">{$message->published|strtotime|prepareDate}</span>
|
||||
{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}
|
||||
</li>
|
||||
|
|
|
@ -4,8 +4,6 @@ empty = Open a new conversation by clicking on the plus button bello
|
|||
add = Chat with a contact
|
||||
frequent = Frequent contacts
|
||||
more = Load more contacts
|
||||
composing = Composing...
|
||||
paused = Paused...
|
||||
|
||||
[message]
|
||||
encrypted = Encrypted message
|
||||
|
|
|
@ -20,6 +20,6 @@ subscriptions = Subscriptions
|
|||
servers = Groups servers
|
||||
search_server = Search for a new server
|
||||
help_info1 = "Groups are the perfect way to share posts about topics that you like with all the other Movim's users."
|
||||
help_info2 = Choose a server and a Group and subscribe to it using the %s button in the header. You can also create a new one using the %s button.
|
||||
help_info2 = 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.
|
||||
help_info3 = Done? You can now publish a new post in the Group by using the %s button.
|
||||
help_info4 = You will find a list of all your subscribed Groups in My Subscriptions and receive instantly all the new incoming posts in the %sNews%s page.
|
||||
|
|
|
@ -76,11 +76,11 @@ var Notification = {
|
|||
},
|
||||
toast : function(html) {
|
||||
target = document.getElementById('toast');
|
||||
|
||||
|
||||
if(target) {
|
||||
target.innerHTML = html;
|
||||
}
|
||||
|
||||
|
||||
setTimeout(function() {
|
||||
target = document.getElementById('toast');
|
||||
target.innerHTML = '';
|
||||
|
@ -91,11 +91,11 @@ var Notification = {
|
|||
if(Notification.inhibed == true) return;
|
||||
|
||||
target = document.getElementById('snackbar');
|
||||
|
||||
|
||||
if(target) {
|
||||
target.innerHTML = html;
|
||||
}
|
||||
|
||||
|
||||
setTimeout(function() {
|
||||
target = document.getElementById('snackbar');
|
||||
target.innerHTML = '';
|
||||
|
@ -105,7 +105,7 @@ var Notification = {
|
|||
desktop : function(title, body, picture) {
|
||||
if(Notification.inhibed == true
|
||||
|| Notification.focused) return;
|
||||
console.log(DesktopNotification);
|
||||
|
||||
var notification = new DesktopNotification(title, { icon: picture, body: body });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div id="roster" ng-controller="RosterController as rosterCtrl">
|
||||
<ul id="rosterlist" class="{if="isset($conf) && isset($conf.roster) && $conf.roster == 'show'"}offlineshown{/if} active all">
|
||||
<ul id="rosterlist" class="{if="isset($conf) && $conf.roster == 'show'"}offlineshown{/if} active all">
|
||||
<div ng-if="contacts == null" class="empty placeholder icon contacts">
|
||||
<h1>{$c->__('roster.no_contacts_title')}</h1>
|
||||
<h4>{$c->__('roster.no_contacts_text')}</h4>
|
||||
|
|
|
@ -51,6 +51,7 @@ $stdin_behaviour = function ($data) use (&$conn, $loop, &$buffer, &$connector, &
|
|||
$config = $cd->get();
|
||||
|
||||
$port = 5222;
|
||||
|
||||
$dns = \Moxl\Utils::resolveHost($msg->host);
|
||||
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'];
|
||||
|
@ -110,7 +111,6 @@ $xmpp_behaviour = function (React\Stream\Stream $stream) use (&$conn, $loop, &$s
|
|||
} elseif($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_context_set_option($conn->stream, 'ssl', 'allow_self_signed', true);
|
||||
$out = stream_socket_enable_crypto($conn->stream, 1, STREAM_CRYPTO_METHOD_TLS_CLIENT);
|
||||
|
||||
$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
|
@ -25,10 +25,10 @@
|
|||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Chats/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/ConfigData/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Config/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/ConfigData/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Contact/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Group/locales.ini
|
||||
|
@ -45,10 +45,10 @@
|
|||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Location/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/LoginAnonymous/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Login/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/LoginAnonymous/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Menu/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/NodeAffiliations/locales.ini
|
||||
|
@ -81,17 +81,17 @@
|
|||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Vcard4/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/VisioExt/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/Visio/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../app/widgets/VisioExt/locales.ini
|
||||
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
|
||||
#. extracted from ../locales/locales.ini
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-08-20 15:17+0200\n"
|
||||
"POT-Creation-Date: 2015-08-16 15:40+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -584,11 +584,11 @@ msgstr ""
|
|||
msgid "Encrypted message"
|
||||
msgstr ""
|
||||
|
||||
#: [message]composing [chats]composing
|
||||
#: [message]composing
|
||||
msgid "Composing..."
|
||||
msgstr ""
|
||||
|
||||
#: [message]paused [chats]paused
|
||||
#: [message]paused
|
||||
msgid "Paused..."
|
||||
msgstr ""
|
||||
|
||||
|
@ -666,26 +666,6 @@ msgstr ""
|
|||
msgid "Load more contacts"
|
||||
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
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
@ -722,6 +702,26 @@ msgstr ""
|
|||
msgid "Use desktop notifications"
|
||||
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
|
||||
msgid "General Informations"
|
||||
msgstr ""
|
||||
|
@ -957,7 +957,7 @@ msgstr ""
|
|||
#: [group]help_info2
|
||||
msgid ""
|
||||
"Choose a server and a Group and subscribe to it using the %s button in the "
|
||||
"header. You can also create a new one using the %s button."
|
||||
"header. You can alse create a new one using the %s button."
|
||||
msgstr ""
|
||||
|
||||
#: [group]help_info3
|
||||
|
@ -1181,10 +1181,6 @@ msgstr ""
|
|||
msgid "Update my position"
|
||||
msgstr ""
|
||||
|
||||
#: [login_anonymous]bad_username
|
||||
msgid "Bad nickname (between 4 and 40 characters)"
|
||||
msgstr ""
|
||||
|
||||
#: [error]username
|
||||
msgid "Wrong username"
|
||||
msgstr ""
|
||||
|
@ -1313,6 +1309,10 @@ msgstr ""
|
|||
msgid "Population"
|
||||
msgstr ""
|
||||
|
||||
#: [login_anonymous]bad_username
|
||||
msgid "Bad nickname (between 4 and 40 characters)"
|
||||
msgstr ""
|
||||
|
||||
#: [menu]empty_title
|
||||
msgid "No news yet..."
|
||||
msgstr ""
|
||||
|
@ -1784,6 +1784,18 @@ msgstr ""
|
|||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]call
|
||||
msgid "Call"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]hang_up
|
||||
msgid "Hang up"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]connection
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]hung_up
|
||||
msgid "Hung up"
|
||||
msgstr ""
|
||||
|
@ -1800,18 +1812,6 @@ msgstr ""
|
|||
msgid "Is calling you"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]call
|
||||
msgid "Call"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]hang_up
|
||||
msgid "Hang up"
|
||||
msgstr ""
|
||||
|
||||
#: [visio]connection
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: [global]no_js
|
||||
msgid "You don't have javascript enabled. Good luck with that."
|
||||
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
|
@ -431,7 +431,7 @@ function getMood() {
|
|||
'envious' => __('mood.envious'), // Feeling pain by the excellence or good fortune of another.
|
||||
'excited' => __('mood.excited'), // Having great enthusiasm.
|
||||
'flirtatious' => __('mood.flirtatious'), // In the mood for flirting.
|
||||
'frustrated' => __('mood.frustrated'), // Suffering from frustration; dissatisfied, agitated, or discontented because one is unable to perform an action or fulfill a desire.
|
||||
'frustated' => __('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.
|
||||
'grieving' => __('mood.grieving'), // Feeling very sad about something, especially something lost; mournful; sorrowful.
|
||||
'grumpy' => __('mood.grumpy'), // Unhappy and irritable.
|
||||
|
|
|
@ -339,7 +339,7 @@ header.big ~ .button.action {
|
|||
|
||||
@media screen and (min-width: 1025px) {
|
||||
main > section > div:first-child:nth-last-child(2) .button.action {
|
||||
right: calc(65% + 3rem);
|
||||
right: calc(70% + 3rem);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -180,7 +180,7 @@ body > nav li { /* Little hack for the navbar */
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1024px) and (max-width: 1680px) {
|
||||
@media screen and (min-width: 1024px) {
|
||||
body > nav:hover {
|
||||
width: 45rem;
|
||||
box-shadow: 0 2.5rem 5rem rgba(0,0,0,0.30), 0 2rem 1.5rem rgba(0,0,0,0.22);
|
||||
|
@ -200,18 +200,6 @@ body > nav li { /* Little hack for the navbar */
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1680px) {
|
||||
body > nav,
|
||||
body > nav:hover {
|
||||
width: 15%;
|
||||
}
|
||||
|
||||
body > nav + main,
|
||||
body > nav:hover + main {
|
||||
width: 85%;
|
||||
}
|
||||
}
|
||||
|
||||
body > nav.active:before,
|
||||
body > nav:hover:before {
|
||||
display: none;
|
||||
|
@ -246,7 +234,7 @@ main > header {
|
|||
main > header > div {
|
||||
padding-left: 9rem;
|
||||
position: relative;
|
||||
width: 35%;
|
||||
width: 30%;
|
||||
display: inline-block;
|
||||
/*overflow: hidden;*/
|
||||
box-sizing: border-box;
|
||||
|
@ -287,7 +275,7 @@ main > header > div > ul.active:not(.context_menu) li.thin span.icon {
|
|||
}
|
||||
|
||||
main > header > div:first-child:nth-last-child(2) ~ div {
|
||||
width: 65%;
|
||||
width: 70%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
|
@ -382,10 +370,10 @@ main > section > div > * {
|
|||
|
||||
/* Two blocks*/
|
||||
main > section > div:first-child:nth-last-child(2) {
|
||||
width: 35%;
|
||||
width: 30%;
|
||||
}
|
||||
main > section > div:first-child:nth-last-child(2) ~ div {
|
||||
width: 65%;
|
||||
width: 70%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
|
|
Loading…
Reference in a new issue