changeset 44:580670430fa2

blog/item: expand/reduce improvments: - only expand_box is now clickable, not the whole article anymore, avoiding unwanted click - when in .clicked state, message is "Click to reduce" instead of "expand" - in .clicked state, expand_box is only visible on :hover - in .clicked state, and expand_box is available at top and bottom
author Goffi <goffi@goffi.org>
date Thu, 13 Jul 2017 19:23:02 +0200
parents f8798d691acf
children 9d75eeb2e933
files default/blog/item.html default/static/blog.css
diffstat 2 files changed, 92 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/default/blog/item.html	Thu Jul 13 08:41:07 2017 +0200
+++ b/default/blog/item.html	Thu Jul 13 19:23:02 2017 +0200
@@ -5,11 +5,20 @@
     {% set other_lang = " other_lang" %}
 {% endif %}
 
-<article id="{{ item.id }}" class="init box{{other_lang}}" onclick="clicked_mh_fix(this)">
+<article id="{{item.id}}" class="init box{{other_lang}}">
+
+    {# following message is displayed if item lang is different from page locale #}
     {% if other_lang is defined %}
         <div class="info"><p>{% trans language=locale.language_name %}This message is not in {{language}}, click to display anyway{% endtrans %}</p></div>
     {% endif %}
 
+    {# we put a reduce button at the top #}
+    <div class="expand_box box_top" onclick="clicked_mh_fix('{{item.id}}')">
+        <p>
+            <span class='hide'>{% trans %}Click to reduce…{% endtrans %}</span>
+        </p>
+    </div>
+
     <header>
         {% block header %}
         <div class="title">{% block blog_title %}{{ item.title_xhtml or item.title or '' }}{% endblock %}</div>
@@ -29,9 +38,11 @@
         {% endblock content %}
     </div>
 
-    <div class="expand_box">
+    {# and the bottom button to expand/reduce the article #}
+    <div class="expand_box box_bottom" onclick="clicked_mh_fix('{{item.id}}')">
         <p>
-            {% trans %}Click to to expand…{% endtrans %}
+            <span class='show'>{% trans %}Click to expand…{% endtrans %}</span>
+            <span class='hide'>{% trans %}Click to reduce…{% endtrans %}</span>
         </p>
     </div>
 
--- a/default/static/blog.css	Thu Jul 13 08:41:07 2017 +0200
+++ b/default/static/blog.css	Thu Jul 13 19:23:02 2017 +0200
@@ -1,4 +1,4 @@
-/**** articles ****/
+/*** articles ***/
 
 article.box {
     position: relative;
@@ -16,7 +16,7 @@
     border-bottom-left-radius: 0;
 }
 
-/* header */
+/** header **/
 
 header .metadata {
     text-align: right;
@@ -31,7 +31,7 @@
 }
 
 
-/* content */
+/** content **/
 
 article div.content {
     text-align: justify;
@@ -48,15 +48,28 @@
     margin: 0;
 }
 
+/** reduce/expand buttons **/
+
 .expand_box {
-    display: none;
+    cursor: pointer;
+}
+
+.box_top {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+}
+
+.box_bottom {
     position: absolute;
     bottom: 0;
     left: 0;
     width: 100%;
 }
 
-.expand_box::before {
+.expand_box.box_bottom::before {
+    /* we do a gradient to show that text can be expanded */
     background-image: linear-gradient(to bottom,rgba(0,0,0,0),#ffffff);
     display: block;
     content: "";
@@ -76,10 +89,23 @@
     border-bottom-color: gray;
 }
 
-.main_article .expand_box {
-    display: initial;
+article .expand_box .hide {
+    /* when not clicked, we only display .show */
+    display: none;
 }
 
+article .expand_box.box_top {
+    /* top expand box only show a reduce button
+     * so it should be displayed only when article is .clicked */
+    display: none;
+}
+
+/** other language **/
+
+/* we hide everything just to display a message informing that
+ * the item is in an other language, and asking to click
+ * to display it */
+
 article.other_lang>div.info {
     display: none;
 }
@@ -92,6 +118,14 @@
     display: initial;
 }
 
+article.other_lang.init>div.expand_box.box_top {
+    /* as we need to have the message clickable, we cheat and use
+     * expand box on the whole surface but fully transparent */
+    display: initial;
+    height: 100%;
+    opacity: 0;
+}
+
 article.other_lang.init>div.info>p {
     margin: 0;
     padding: 0.2em;
@@ -105,7 +139,7 @@
     padding: 0;
 }
 
-/**** comments ****/
+/*** comments ***/
 
 button.comments_btn {
     border: none;
@@ -163,7 +197,12 @@
     max-width: 100%;
 }
 
-/**** media queries ****/
+.comments_panel article .expand_box {
+    /* no expand box in comments */
+    display: none;
+}
+
+/*** media queries ***/
 
 @media (min-width: 500px) {
     article.box {
@@ -184,12 +223,40 @@
 
 }
 
-/**** clicked ****/
+/*** clicked ***/
 
 .main_article article.clicked {
     border-bottom-style: solid;
 }
 
-.clicked .expand_box {
+.main_article article.clicked .expand_box.box_top {
+    display: initial;
+}
+
+.main_article article.clicked .expand_box {
+    opacity: 0;
+    transition: opacity 0.5s;
+}
+
+.main_article article.clicked .expand_box p {
+    background-color: transparent;
+    border: none;
+}
+
+.main_article article.clicked .expand_box:hover {
+    opacity: 1;
+    color: grey;
+}
+
+.main_article article.clicked .expand_box::before {
+    background-image: none;
     display: none;
 }
+
+.main_article article.clicked .expand_box .hide {
+    display: inline;
+}
+
+.main_article article.clicked .expand_box .show {
+    display: none;
+}