From 08d55f366b6807f0dff9ad5fe484bb512a265fc3 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 22 Oct 2022 18:35:53 +0200 Subject: [PATCH] =?UTF-8?q?La=20Bureautique=20est=20ma=C3=AEtresse=20de=20?= =?UTF-8?q?l'univers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/img/avatars/128/mouse.png | Bin 0 -> 7084 bytes assets/img/avatars/32/asterix.png | Bin 0 -> 4710 bytes assets/img/avatars/32/mouse.png | Bin 0 -> 1665 bytes config.php | 15 +++- geoloc.php | 35 --------- lib/Conversation.class.php | 91 +++++++++++++++++++++++ lib/Fred.class.php | 63 +++++++++++++--- lib/Gchange.class.php | 9 ++- lib/GchangeUser.class.php | 60 +++++++++++++++ lib/Message.class.php | 71 ++++++++++++++++++ lib/Messenger.class.php | 106 ++++++++++++++++++++++++++ login.php | 18 ++++- map.php | 38 +++++++--- messenger.php | 122 ++++++++++++++++++++++++++++++ themes/spationaute/deco.css | 151 +++++++++++++++++++++++++++++++++++++- themes/spationaute/layout.css | 132 +++++++++++++++++++++++++++++++++ 16 files changed, 841 insertions(+), 70 deletions(-) create mode 100644 assets/img/avatars/128/mouse.png create mode 100644 assets/img/avatars/32/asterix.png create mode 100644 assets/img/avatars/32/mouse.png delete mode 100644 geoloc.php create mode 100644 lib/Conversation.class.php create mode 100644 lib/GchangeUser.class.php create mode 100644 lib/Message.class.php create mode 100644 lib/Messenger.class.php create mode 100644 messenger.php diff --git a/assets/img/avatars/128/mouse.png b/assets/img/avatars/128/mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..9b759675213e8ce097a0a421cee6250e11bbf982 GIT binary patch literal 7084 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 WZw7Kz3*Q|80000 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 literal 0 HcmV?d00001 diff --git a/assets/img/avatars/32/mouse.png b/assets/img/avatars/32/mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..3177e4d710fc807c223bfed19b6e5aba4cd3a81e GIT binary patch literal 1665 zcmV-{27dX8P)CE@B1Eyh&Zg!kB>%%)9L&sJUslDu&}T?UtiyEH8)@589TPW z01F2$8fc-3HXc2&Hqzwa;NbeCq@?bmq9UoPs*>vJYT3GV>!aA%*jxVo{=X_FY7pj8 zVBx?;11&Vs#sjY&4d^F9JG`}P*RDr5Zrl)WQCwX7ATThn(@yqcJ{b(yzI5=w3r{!4 z;jf97{rmSDKub%De7bI(ygqA|Ed1bo*|%?>w6(RF+UCuhY2s&Z(?O0J7_e~QqJb8g zXj8)rPrMyIK0a$xQ&aC!xN_x+yfA5!ygX&H>|DEAwy(~Y#Q1p0T(U$g(Q)I(-Bsd| zfPjD>Riu?*Opcn>EF8Ey))W{mG||R`I-Yntbb*{ID=Ra}oa|+iI&+5H{Gr+t9Vfn* z_}Exkym+yUA3t8=;^HJdJ^k-3Teir_lP66uCPxhnSU7O)T4>{e7oNI6PdS2uf;!Ki zKW~z;6DP`%uZnt*+N+Ms?CGz{h!G=X&z?PA=hYryz@{h%u3ZalJiy_Jw?kL#?fUw9 zlbjYGCp9~_dkC$^%Vp-YX)-q@MJ`;pFrc{=VCT)5BeN0`jE1F$HXdN`#M==X8v0Xt zdAUh`v0;NOdvCsnkU4Lz%t%a>j*gB&n_B^AMpBYwz59+w4{bcCx_sT4;CpEVM4YcxBt~A=@@X}ZICf?RNyl~X0QMXT@K5YQ3?2wR<|7~ssT4&Fm zHDf&R!n5~Q{I+)0wRGvy`O|R#Nx1?^brMq|U?ss0_cr96y zrcO1%xIZjfX!hHHe&%R|y2t5xd3k@@=U(Se($dl-Cnra0YHH-giP4_-n=v_RV8Ghf z0$OMe)W8Xixz?E;6BF}?C2;-vb&gT)2Ihogr;8jjMw%;*m|#qf8W^x}EIwL&-6iY| zR9OwUr=k7u;ln+CO6HdX=itGEvS#&ai5NZF1Y>g4z}Puxpw;Ic!qz~UMwab+jIQX; z0|yQmA)aiEK51!bsYm?k)vG3~@6^D6Bnw1scV@Udvbf{QT~-x@&7|quV z&pT{1?Blt)xpL^xA@fsnsUR31J$lsCz<`AVcc={v*WlXxk^PKFNJ#jd^F2zBQ+{GS zOr)u)$uk9vBO@cFu&_{~qod7T0FHgnA5;Tw!{;@azYpEtbMC z^Yc9oFeXP03|KhI{ba}uxJ{qaXka=t3a3w>-i^_M1q)=;rcKh>*(qbkj+N%-W)r&4 zo2RA*1}q$Q*C%Sg-GnbspmAMqE)RIBix)3)E$8XXPi_4I6DCaHR%~iu!0H;fr`*6N zZot-vo}&K0ZQQug{NZ5B-L`F;SQlA>F*)nv3Rb70cF1o*9}R@NoIzb9!@~a2bG^sT z*E^_z0SgE2(`ewWDE-G%`E`lBr2lUG{rvRGogxJV1rPbdNiZfy4Gh?*|NcR}^)woI zHpJ!H8R~Slxtz`py}@>bx`LaA4;!{auW+RVV{+8MfQ18hApL& [ 'title' => 'SpaceĞ1', - 'description' => 'Les extraterrestres viennent terraformer ta planète' + 'description' => 'Les extraterrestres viennent terraformer ta planète', + 'default_avatar' => 'assets/img/avatars/32/et-in-flying-saucer.png' ], 'magie' => [ 'title' => 'Ğ1Quest', - 'description' => 'Ğarry Potier à l\'école des sourciers.' + 'description' => 'Ğarry Potier à l\'école des sourciers.', + 'default_avatar' => 'assets/img/avatars/32/wizard.png' ] ]; +$radiuses = [5, 10, 20, 50, 100]; + define('DEFAULT_GAME', 'spationaute'); if (!isset($_SESSION['gameId'])) { diff --git a/geoloc.php b/geoloc.php deleted file mode 100644 index c5b8ac5..0000000 --- a/geoloc.php +++ /dev/null @@ -1,35 +0,0 @@ - - - - Geoloc - - - - - - -

-

- - - - \ No newline at end of file diff --git a/lib/Conversation.class.php b/lib/Conversation.class.php new file mode 100644 index 0000000..6217e90 --- /dev/null +++ b/lib/Conversation.class.php @@ -0,0 +1,91 @@ +getDate() < $msg2->getDate()) ? false : true; +} + +class Conversation { + + private $messages = []; + + private $firstMessage; + + private $lastMessage; + + private $convTitle; + + private $penpalPubkey; + + + + public function __construct () { + + } + + public function addMessage ($msg) { + + $this->messages[] = $msg; + + if (!isset($this->lastMessage, $this->firstMessage)) { + + $this->lastMessage = $msg; + $this->firstMessage = $msg; + + } else { + + if ($msg->getDate() > $this->lastMessage->getDate()) { + + $this->lastMessage = $msg; + } + + if ($msg->getDate() < $this->firstMessage->getDate()) { + + $this->firstMessage = $msg; + } + } + } + + public function sortMessages () { + + uasort($this->messages, 'compareMsgDate'); + + } + + public function getConvTitle () { + + if (!isset($this->convTitle)) { + + $this->convTitle = $this->getFirstMessage()->getTitle(); + } + + return $this->convTitle; + } + + public function getPenpalPubkey () { + + if (!isset($this->penpalPubkey)) { + + $this->penpalPubkey = $this->getFirstMessage()->getPenpalPubkey(); + } + + return $this->penpalPubkey; + } + + public function getMessages () { + + return $this->messages; + } + + public function getFirstMessage () { + + return $this->firstMessage; + } + + public function getLastMessage () { + + return $this->lastMessage; + } +} \ No newline at end of file diff --git a/lib/Fred.class.php b/lib/Fred.class.php index 4f8baae..8f2103c 100644 --- a/lib/Fred.class.php +++ b/lib/Fred.class.php @@ -40,28 +40,71 @@ class Fred { return $ipnsKey; } - public function donneMoiSesPutainDeMessagesGchange ($prenomNom, $nomDuChienSuivieDeLaDateDeNaissanceDeJohnnyHallyday, $gchangeId) { + public function donneMoiSesPutainDeMessagesGchange ($prenomNom, $nomDuChienSuivieDeLaDateDeNaissanceDeJohnnyHallyday, $gchangeName) { $salt = $prenomNom; $pepper = $nomDuChienSuivieDeLaDateDeNaissanceDeJohnnyHallyday; - $query = 'salt='. $salt .'&pepper='. $pepper . '&messaging=' . $gchangeId; + $query = 'salt='. $salt .'&pepper='. $pepper . '&messaging=' . $gchangeName; $url = $this->gatewayProtocol . '://'. $this->gatewayDomain .':' . $this->gatewayPort . '/?' . $query; - echo '
'; var_dump(htmlspecialchars($url)); echo '
'; + // echo '
'; var_dump(htmlspecialchars($url)); echo '
'; $page1 = file_get_contents($url) or die('

On a fait du sale.

'); - echo '
'; var_dump(htmlspecialchars($page1)); echo '
'; + // echo '
'; var_dump(htmlspecialchars($page1)); echo '
'; preg_match("`url='([^']+)'`isU", $page1, $matches); - $url = $matches[0]; + $url = $matches[1]; - echo '
'; var_dump($url); echo '
'; + // echo '
'; var_dump($url); echo '
'; + + $page2 = ''; + + while (empty($page2)) { + + sleep($this->gatewayDelay); + $page2 = @file_get_contents($url); + } + + // echo '
'; var_dump(htmlspecialchars($page2)); echo '
'; + + $json = $page2; + + return json_decode($json); + + } + public function donneMoiSaPutaindeG1Pub ($prenomNom, $nomDuChienSuivieDeLaDateDeNaissanceDeJohnnyHallyday) { + + + $salt = $prenomNom; + $pepper = $nomDuChienSuivieDeLaDateDeNaissanceDeJohnnyHallyday; + + $query = 'salt='. $salt .'&pepper='. $pepper . '&g1pub=on'; + + $url = $this->gatewayProtocol . '://'. $this->gatewayDomain .':' . $this->gatewayPort . '/?' . $query; + + // echo '
'; var_dump(htmlspecialchars($url)); echo '
'; + + $page1 = file_get_contents($url) + or die('

On a fait du sale.

'); + + // die('
' . htmlspecialchars($page1) . '
'); + + preg_match("`url='([^']+)'`isU", $page1, $matches); + + // die( + // '
' . htmlspecialchars($page1) . '
' . + // '
' . print_r($matches, true) . '
' + // ); + + $url = $matches[1]; + + // die('
' . var_dump($url, true) . '
'); $page2 = ''; @@ -71,14 +114,12 @@ class Fred { $page2 = @file_get_contents($url); } - - echo '
'; var_dump($page2); echo '
'; - die(); + preg_match("`url='.*/user/([^']+)/'`isU", $page2, $matches); - $json = $page2; + $gchangeId = $matches[1]; - return $page1; + return $gchangeId; } } \ No newline at end of file diff --git a/lib/Gchange.class.php b/lib/Gchange.class.php index fd5187d..a5281a9 100644 --- a/lib/Gchange.class.php +++ b/lib/Gchange.class.php @@ -1,6 +1,7 @@ _id . '.json'; + $placesCacheFile = $user->getUserGchangeId() . '.json'; $json = $this->getJsonFromCache($placesCacheDir, $placesCacheFile, $this->cacheLongevity['placesNearby']); if (empty($json)) { - $json = $this->getNearbyPlacesJson($user->_source->geoPoint->lat, $user->_source->geoPoint->lon, RADIUS); + $json = $this->getNearbyPlacesJson($user->getLat(), $user->getLon(), $radius); $this->cacheJson($placesCacheDir, $placesCacheFile, $json); @@ -142,7 +143,7 @@ class Gchange { } public function getNearbyPlaces ($lat, $lon, $maxDistance, $minDistance = NULL) { - + $json = $this->getNearbyPlacesJson($lat, $lon, $maxDistance, $minDistance); $result = json_decode($json); diff --git a/lib/GchangeUser.class.php b/lib/GchangeUser.class.php new file mode 100644 index 0000000..06abf47 --- /dev/null +++ b/lib/GchangeUser.class.php @@ -0,0 +1,60 @@ +userGchangeId = $gchangeObject->_id; + + $this->userName = $gchangeObject->_source->title; + + if (isset($gchangeObject->_source->geoPoint->lat, $gchangeObject->_source->geoPoint->lon)) { + + $this->lat = $gchangeObject->_source->geoPoint->lat; + $this->lon = $gchangeObject->_source->geoPoint->lon; + } + + if (isset($gchangeObject->_source->avatar->_content) and + !empty($gchangeObject->_source->avatar->_content)) { + + + $this->avatarImgSrc = 'data:'. $gchangeObject->_source->avatar->_content_type .';base64,' . $gchangeObject->_source->avatar->_content; + } + } + + public function getUserGchangeId () { + + return $this->userGchangeId; + } + + public function getUserName () { + + return $this->userName; + } + + public function getLat () { + + return $this->lat; + } + + public function getLon () { + + return $this->lon; + } + + public function getAvatarImgSrc () { + + return $this->avatarImgSrc; + } +} \ No newline at end of file diff --git a/lib/Message.class.php b/lib/Message.class.php new file mode 100644 index 0000000..cf59560 --- /dev/null +++ b/lib/Message.class.php @@ -0,0 +1,71 @@ +direction = $direction; + + $this->title = $jaklisObject->title; + + $this->date = $jaklisObject->date; + + $contents = preg_replace("`(?[^\n]*`", '', $jaklisObject->content); + $contents = preg_replace("`(\n\s?){2,}`", '', $contents); + $contents = preg_replace("`^(\n\s?)+`", '', $contents); + $this->contents = $contents; + + $this->gchangeId = $jaklisObject->id; + + $this->penpalPubkey = $jaklisObject->pubkey; + } + + public function getDirection () { + + return $this->direction; + } + + public function getMessage () { + + return $this->msg; + } + + public function getTitle () { + + return $this->title; + } + + public function getDate () { + + return $this->date; + } + + public function getPenpalPubkey () { + + return $this->penpalPubkey; + } + + public function getGchangeId() { + + return $this->gchangeId; + } + + public function getContents() { + + return $this->contents; + } +} \ No newline at end of file diff --git a/lib/Messenger.class.php b/lib/Messenger.class.php new file mode 100644 index 0000000..6ea18eb --- /dev/null +++ b/lib/Messenger.class.php @@ -0,0 +1,106 @@ +gchange = $gchange; + } + + public function addMessages ($msgIn, $msgOut) { + + foreach ($msgIn as $m) { + + if (!isset($this->conversations[$m->pubkey])) { + + $this->conversations[$m->pubkey] = new Conversation(); + } + + $msg = new Message($m, 'in'); + + $this->conversations[$msg->getPenpalPubkey()]->addMessage($msg); + + $this->feedUserBase($msg->getPenpalPubkey()); + } + + foreach ($msgOut as $m) { + + if (!isset($this->conversations[$m->pubkey])) { + + $this->conversations[$m->pubkey] = new Conversation(); + } + + $msg = new Message($m, 'out'); + + $this->conversations[$m->pubkey]->addMessage($msg); + + $this->feedUserBase($msg->getPenpalPubkey()); + } + + foreach ($this->conversations as $conv) { + + $conv->sortMessages(); + + $this->checkIfIsLatestMessage($conv->getLastMessage()); + } + } + + public function checkIfIsLatestMessage ($msg) { + + if (!isset($this->latestMessage)) { + + $this->latestMessage = $msg; + + } else { + + if ($msg->getDate() > $this->getLatestMessage()->getDate()) { + + $this->latestMessage = $msg; + } + + } + } + + public function getLatestMessage () { + + return $this->latestMessage; + } + + public function feedUserBase ($penpalPubkey) { + + if (!isset($users[$penpalPubkey])) { + + $this->users[$penpalPubkey] = $this->gchange->getUser($penpalPubkey); + } + } + public function getConversation ($penpalGchangeId) { + + return $this->conversations[$penpalGchangeId]; + } + + public function getConversations () { + + return $this->conversations; + } + + public function getUser ($pubkey) { + + return $this->users[$pubkey]; + } + + public function getLastConversation () { + + return array_reverse($this->conversations)[0]; + } +} \ No newline at end of file diff --git a/login.php b/login.php index c7d186b..13316a5 100644 --- a/login.php +++ b/login.php @@ -1,17 +1,25 @@ donneMoiSaPutaindeG1Pub($_POST['salt'], $_POST['pepper']); + + $_SESSION['player_pubkey'] = $playerG1Id; $gchange = new Gchange(); $user = $gchange->getUser($_SESSION['player_pubkey']); $_SESSION['player_lat'] = $user->_source->geoPoint->lat; $_SESSION['player_lon'] = $user->_source->geoPoint->lon; + $_SESSION['radius'] = DEFAULT_RADIUS; + + $_SESSION['salt'] = $_POST['salt']; + $_SESSION['pepper'] = $_POST['pepper']; header('Location:map.php'); @@ -22,7 +30,9 @@ if (isset($_POST['player'])) { include_once('header.php'); echo ' -
+ '; + + /*

+ */ + echo '

' . print_r($player, true) . '
'); + +$origLat = $player->getLat(); +$origLon = $player->getLon(); $origLoc = new Location(); $origLoc->setPosition($origLat, $origLon); @@ -33,6 +40,20 @@ echo ' '. $origLat . ' , ' . $origLon .' + +
'; - if (isset($player->_source->avatar->_content) and !empty($player->_source->avatar->_content)) { - - $src = 'data:'. $player->_source->avatar->_content_type .';base64,' . $player->_source->avatar->_content; - - } else { - - $src = 'assets/img/avatars/32/et-in-flying-saucer.png.png'; - } + $avatarSrc = $player->getAvatarImgSrc(); + $src = !empty($avatarSrc) ? $avatarSrc : $games[$_SESSION['gameId']]['default_avatar']; echo ' '. $player->_source->title .' diff --git a/messenger.php b/messenger.php new file mode 100644 index 0000000..ffcb8c0 --- /dev/null +++ b/messenger.php @@ -0,0 +1,122 @@ +donneMoiSesPutainDeMessagesGchange($_SESSION['salt'], $_SESSION['pepper'], 'coucou'); + + +// echo '
'; var_dump($msgIn); echo '
'; +// echo '
'; var_dump($msgOut); echo '
'; + +$messenger->addMessages($msgIn, $msgOut); + +// echo '
'; var_dump($messenger->getConversations()); echo '
'; + +/* +if (!isset($_GET['penpal'])) { + + header('Location: messenger.php?paypal=' . $messenger->getLatestMessage()->getPenpalPubkey()); +} +*/ +$bodyIds = 'messenger-page'; + +include_once('header.php'); + +echo ' + +
    +'; +foreach ($messenger->getConversations() as $conv) { + + // echo '
    '; var_dump($conv->getLastMessage()); echo '
    '; + + $lastMsg = $conv->getLastMessage(); + + echo ' +
  • + '; + + $penpal = $messenger->getUser($conv->getPenpalPubkey()); + + echo ' +
    + + + + '. $penpal->getUserName() . ' + + + + +

    + '; + if ($lastMsg->getDirection() == 'out') { + echo 'Moi : '; + } + + echo $lastMsg->getContents() .' + +

    +
    + +
  • + '; + +} +echo ' +
+ + +
+'; + +if (isset($_GET['penpal'])) { + + $displayedConv = $messenger->getConversation($_GET['penpal']); + + echo ' +

+ '. $messenger->getUser($displayedConv->getPenpalPubkey())->getUserName() . ' +

+ +
    '; + + foreach ($displayedConv->getMessages() as $msg) { + + echo ' +
  • + +

    + '. nl2br($msg->getContents()) . ' +

    + +

    + '. date('d-m-Y à h:m', $msg->getDate()) . ' +

    +
  • + '; + + } + echo ' +
'; +} + +echo ' +
'; + +include_once('footer.php'); \ No newline at end of file diff --git a/themes/spationaute/deco.css b/themes/spationaute/deco.css index 0c8564d..7a97e72 100644 --- a/themes/spationaute/deco.css +++ b/themes/spationaute/deco.css @@ -52,6 +52,27 @@ body#sonar { #map { + border-style: solid; + border-color: hsl(132.2, 59.8%, 74.2%); +} + + +#map[data-radius="100"] { + + background: + linear-gradient( 0deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 90deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 45deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + linear-gradient(135deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + repeating-radial-gradient(transparent 0, transparent 5%, hsl(132.2, 59.8%, 74.2%) 5%, hsl(132.2, 59.8%, 74.2%) 5.4%), + /*radial-gradient(circle at center, hsl(132.2, 59.8%, 37.1%) 0%, hsl(132.2, 59.8%, 74.2%) 50%, hsl(132.2, 59.8%, 37.1%) 100%), */ + hsla(132.2, 59.8%, 37.1%, 0.8); + +} + + +#map[data-radius="50"] { + background: linear-gradient( 0deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), linear-gradient( 90deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), @@ -61,11 +82,52 @@ body#sonar { /*radial-gradient(circle at center, hsl(132.2, 59.8%, 37.1%) 0%, hsl(132.2, 59.8%, 74.2%) 50%, hsl(132.2, 59.8%, 37.1%) 100%), */ hsla(132.2, 59.8%, 37.1%, 0.8); - border-style: solid; - border-color: hsl(132.2, 59.8%, 74.2%); +} + + +#map[data-radius="20"] { + + background: + linear-gradient( 0deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 90deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 45deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + linear-gradient(135deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + repeating-radial-gradient(transparent 0, transparent 12.5%, hsl(132.2, 59.8%, 74.2%) 12.5%, hsl(132.2, 59.8%, 74.2%) 12.9%), + /*radial-gradient(circle at center, hsl(132.2, 59.8%, 37.1%) 0%, hsl(132.2, 59.8%, 74.2%) 50%, hsl(132.2, 59.8%, 37.1%) 100%), */ + hsla(132.2, 59.8%, 37.1%, 0.8); } + +#map[data-radius="10"] { + + background: + linear-gradient( 0deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 90deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 45deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + linear-gradient(135deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + repeating-radial-gradient(transparent 0, transparent 25%, hsl(132.2, 59.8%, 74.2%) 25%, hsl(132.2, 59.8%, 74.2%) 25.4%), + /*radial-gradient(circle at center, hsl(132.2, 59.8%, 37.1%) 0%, hsl(132.2, 59.8%, 74.2%) 50%, hsl(132.2, 59.8%, 37.1%) 100%), */ + hsla(132.2, 59.8%, 37.1%, 0.8); + +} + + +#map[data-radius="5"] { + + background: + linear-gradient( 0deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 90deg, transparent 49.85%, hsl(132.2, 59.8%, 74.2%) 49.85%, hsl(132.2, 59.8%, 74.2%) 50.15%, transparent 50.15%), + linear-gradient( 45deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + linear-gradient(135deg, transparent 49.90%, hsl(132.2, 59.8%, 74.2%) 49.90%, hsl(132.2, 59.8%, 74.2%) 50.10%, transparent 50.10%), + repeating-radial-gradient(transparent 0, transparent 50%, hsl(132.2, 59.8%, 74.2%) 100%, hsl(132.2, 59.8%, 74.2%) 100%), + /*radial-gradient(circle at center, hsl(132.2, 59.8%, 37.1%) 0%, hsl(132.2, 59.8%, 74.2%) 50%, hsl(132.2, 59.8%, 37.1%) 100%), */ + hsla(132.2, 59.8%, 37.1%, 0.8); + +} + + + #map-deco { background: @@ -103,6 +165,11 @@ body#sonar { } } +#map .place img { + + border-radius: 50%; +} + #map .place, #map .player { @@ -110,6 +177,17 @@ body#sonar { cursor: pointer; } +#mapview #zoom { + + background-color: black; +} + +#mapview #zoom a, +#mapview #zoom a:visited { + + color: white; + text-decoration: none; +} @@ -190,3 +268,72 @@ body#sonar { color: inherit; text-decoration: none; } + + + + + +#messenger-page { + + background-color: black; + color: white; +} + + + +#messenger-page .penpal { + + background: hsl(0, 100%, 50%); + color: white; + font-weight: bold; +} + +#messenger-page #msgList .message { + + color: white; +} + +#messenger-page #msgList .message.in { + + background-color: hsl(132.2, 59.8%, 12.1%); +} + +#messenger-page #msgList .message.out { + + background-color: hsl(132.2, 59.8%, 12.1%); +} + + +#messenger-page #msgList .message .date { + + color: hsl(132.2, 59.8%, 75.2%); +} + + +#messenger-page #conversations-list .conversation time { + + font-weight: normal; + color: hsl(0, 27.8%, 82.1%); +} + +#messenger-page #conversations-list .conversation cite { + + font-style: normal; + font-weight: bold; +} + +#messenger-page #conversations-list .conversation .contents-preview { + + height: 1rem; + overflow: hidden; +} + +#messenger-page #conversations-list .conversation { + + background-color: hsl(0, 27.8%, 12.1%); +} + +#messenger-page #conversations-list .conversation:hover { + + background-color: hsl(0, 27.8%, 24.2%); +} \ No newline at end of file diff --git a/themes/spationaute/layout.css b/themes/spationaute/layout.css index b1b8952..6dc0e1d 100644 --- a/themes/spationaute/layout.css +++ b/themes/spationaute/layout.css @@ -64,6 +64,19 @@ main { } +#mapview { + + position: relative; +} + +#mapview #zoom { + + position: absolute; + bottom: 0; + right: 0; + + padding: 0.5rem 1rem; +} #map .place, #map .player { @@ -144,3 +157,122 @@ main { background: var(--panel-place-name-bg-color); } + + +#messenger-page main { + + display: flex; +} + +#messenger-page #conversations-list { + + width: 33.333vw; +} + +#messenger-page #conversation { + + width: 66.666vw; +} + +#messenger-page #msgList { + + overflow: hidden; +} + +#messenger-page ul#msgList { + + list-style: none; + margin: 0; + padding: 0; +} + +#messenger-page ul#msgList li { + + margin: 0; + padding: 0; + margin-bottom: 2rem; + width: 50%; +} + +#messenger-page .penpal { + + padding: 1rem 1rem; + margin-top: 0; +} + +#messenger-page #msgList .message.in { + + float: left; + margin-left: 2%; +} + +#messenger-page #msgList .message.out { + + float: right; + margin-right: 2%; +} + +#messenger-page #msgList .message > * { + + margin-left: 1rem; + margin-right: 1rem; +} + +#messenger-page #msgList .message .date { + + text-align: right; +} + + +#messenger-page ul#conversations-list { + + list-style: none; + margin: 0; + padding: 0; +} + +#messenger-page ul#conversations-list li { + + margin: 0; + padding: 0.5rem 1rem; +} + +#messenger-page #conversations-list .conversation { + + position: relative; +} + +#messenger-page #conversations-list .conversation .conv-link, +#messenger-page #conversations-list .conversation .conv-link a { + + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +#messenger-page #conversations-list .conversation .avatar { + + float: left; +} + +#messenger-page #conversations-list .conversation .conv-link a span { + + display: none; +} + + +#messenger-page #conversations-list .conversation blockquote { + + margin: 0; +} + + +#messenger-page #conversations-list .conversation blockquote time { + + position: absolute; + top: 0; + right: 0; +} +