A few fixes + draft Interweave and Takenmake. Only 1 1/2 variant to go now :)
[vchess.git] / client / src / App.vue
index d8e395f..def4526 100644 (file)
@@ -24,8 +24,7 @@
               router-link(to="/problems")
                 | {{ st.tr["Problems"] }}
             #rightMenu
-              .clickable(onClick="window.doClick('modalUser')")
-                | {{ st.user.id > 0 ? (st.user.name || "@nonymous") : "Login" }}
+              .clickable(onClick="window.doClick('modalUser')") {{ userName }}
               #divSettings.clickable(onClick="window.doClick('modalSettings')")
                 span {{ st.tr["Settings"] }}
                 img(src="/images/icons/settings.svg")
     .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2
       footer
         router-link.menuitem(to="/about") {{ st.tr["About"] }}
+        router-link.menuitem#newsMenu(to="/news") {{ st.tr["News"] }}
+        a.menuitem(href="https://discord.gg/a9ZFKBe")
+          span Discord
+          img(src="/images/icons/discord.svg")
         a.menuitem(href="https://github.com/yagu0/vchess")
           span {{ st.tr["Code"] }}
           img(src="/images/icons/github.svg")
-        router-link.menuitem(to="/news") {{ st.tr["News"] }}
         p.clickable(onClick="window.doClick('modalContact')")
           | {{ st.tr["Contact"] }}
 </template>
@@ -47,6 +49,7 @@ import ContactForm from "@/components/ContactForm.vue";
 import Settings from "@/components/Settings.vue";
 import UpsertUser from "@/components/UpsertUser.vue";
 import { store } from "@/store.js";
+import { ajax } from "@/utils/ajax.js";
 export default {
   components: {
     ContactForm,
@@ -54,9 +57,28 @@ export default {
     UpsertUser
   },
   data: function() {
-    return {
-      st: store.state
-    };
+    return { st: store.state };
+  },
+  mounted: function() {
+    ajax(
+      "/newsts",
+      "GET",
+      {
+        success: (res) => {
+          if (this.st.user.newsRead < res.timestamp)
+            document.getElementById("newsMenu").classList.add("somenews");
+        }
+      }
+    );
+  },
+  computed: {
+    userName: function() {
+      return (
+        this.st.user.id > 0
+          ? (this.st.user.name || "@nonymous")
+          : "Login"
+      );
+    }
   },
   methods: {
     hideDrawer: function(e) {
@@ -135,10 +157,11 @@ table
   padding: 0 10px 0 0
   height: 100%
   & > span
+    padding-right: 5px
     vertical-align: middle
   & > img
     padding: 0
-    height: 24px
+    height: 1.2em
     vertical-align: middle
 
 @media screen and (max-width: 767px)
@@ -247,7 +270,7 @@ footer
       color: #2c3e50
       text-decoration: none
     & > img
-      height: 1.3em
+      height: 1.2em
       display: inline-block
       margin-left: 5px
   & > p
@@ -258,6 +281,19 @@ footer
   footer
     border: none
 
+@media screen and (max-width: 420px)
+  .container
+    min-height: calc(100vh - 55px)
+  footer
+    height: 55px
+    display: block
+    padding: 5px 0
+
+.menuitem.somenews
+  color: red
+  &:link, &:visited, &:hover
+    color: red
+
 // Styles for diagrams and board (partial).
 // TODO: where to put that ?
 
@@ -268,38 +304,57 @@ footer
   background-color: #6f8f57
 
 div.board
+  user-select: none
   float: left
   height: 0
   display: inline-block
   position: relative
 
+div.board5
+  width: 20%
+  padding-bottom: 20%
+
 div.board8
   width: 12.5%
   padding-bottom: 12.5%
 
+div.board9
+  width: 11.1%
+  padding-bottom: 11.1%
+
 div.board10
   width: 10%
   padding-bottom: 10%
 
 div.board11
   width: 9.09%
-  padding-bottom: 9.1%
+  padding-bottom: 9.09%
+
+div.board12
+  width: 8.33%
+  padding-bottom: 8.33%
 
 img.piece
   width: 100%
 
-img.piece, img.mark-square
+img.piece, img.mark-square, img.circle-square
   max-width: 100%
   height: auto
   display: block
 
 img.mark-square
-  opacity: 0.6
+  opacity: .7
   width: 76%
   position: absolute
   top: 12%
   left: 12%
-  opacity: .7
+
+img.circle-square
+  opacity: 0.7
+  width: 100%
+  position: absolute
+  top: 0
+  left: 0
 
 .in-shadow
   filter: brightness(50%)