From 75ebf7c5bd48e64d58aef9892ce6b6fbf69e5f1a Mon Sep 17 00:00:00 2001
From: Norwin <noerw@users.noreply.github.com>
Date: Tue, 17 Nov 2020 05:33:19 +0000
Subject: [PATCH] fix media query edge case (#13546)

* fix media query edge case

was failing for 768px width before

* code review

* define responsive breakpoints as less variables

* add missing variables.less

* rename variables, drop screen constraints

* fix less import

* Apply suggestions from code review

Co-authored-by: silverwind <me@silverwind.io>

* code review

altough it doesnt matter, LESS lazy evals variables

Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
---
 web_src/less/_admin.less                 |  8 +++----
 web_src/less/_base.less                  | 14 +++++------
 web_src/less/_dashboard.less             |  4 ++--
 web_src/less/_form.less                  | 18 +++++++-------
 web_src/less/_home.less                  |  6 ++---
 web_src/less/_repository.less            | 30 ++++++++++++------------
 web_src/less/_review.less                | 10 ++++----
 web_src/less/_user.less                  | 10 ++++----
 web_src/less/features/heatmap.less       |  4 ++--
 web_src/less/index.less                  |  1 +
 web_src/less/themes/theme-arc-green.less |  4 +++-
 web_src/less/variables.less              | 14 +++++++++++
 12 files changed, 72 insertions(+), 51 deletions(-)
 create mode 100644 web_src/less/variables.less

diff --git a/web_src/less/_admin.less b/web_src/less/_admin.less
index d1bcfb6e25..0487a5b2ad 100644
--- a/web_src/less/_admin.less
+++ b/web_src/less/_admin.less
@@ -88,16 +88,16 @@
 
   #notice-table {
     .notice-description {
-      @media only screen and (max-width: 767px) {
+      @media @mediaSm {
         max-width: 80vw;
       }
-      @media only screen and (max-width: 991px) and (min-width: 768px) {
+      @media @mediaMd {
         max-width: 360px;
       }
-      @media only screen and (min-width: 992px) and (max-width: 1199.98px) {
+      @media @mediaLg {
         max-width: 510px;
       }
-      @media only screen and (min-width: 1200px) {
+      @media @mediaXl {
         max-width: 640px;
       }
     }
diff --git a/web_src/less/_base.less b/web_src/less/_base.less
index 293c460fd9..b313e21637 100644
--- a/web_src/less/_base.less
+++ b/web_src/less/_base.less
@@ -334,7 +334,7 @@ a:hover,
     margin-right: 0 !important;
   }
 
-  @media only screen and (max-width: 767px) {
+  @media @mediaSm {
     #navbar:not(.shown) > *:not(:first-child) {
       display: none;
     }
@@ -774,7 +774,7 @@ a:hover,
   }
 
   &.pagination.menu {
-    @media only screen and (max-width: 767px) {
+    @media @mediaSm {
       .item:not(.active):not(.navigation),
       .item.navigation span.navigation_label {
         display: none;
@@ -900,7 +900,7 @@ footer {
 }
 
 // Conditional display
-@media only screen and (min-width: 768px) {
+@media @mediaMdAndUp {
   .mobile-only,
   .ui.button.mobile-only {
     display: none;
@@ -913,7 +913,7 @@ footer {
   }
 }
 
-@media only screen and (max-width: 767px) {
+@media @mediaSm {
   .not-mobile {
     display: none;
   }
@@ -941,7 +941,7 @@ footer {
   clip: auto;
 }
 
-@media only screen and (max-width: 991px) and (min-width: 768px) {
+@media @mediaMd {
   .ui.container {
     width: 95%;
   }
@@ -956,7 +956,7 @@ footer {
   border-width: 1px !important;
 }
 
-@media only screen and (max-width: 1200px) {
+@media @mediaLgAndDown {
   .ui.menu.new-menu {
     overflow-x: auto !important;
     justify-content: left !important;
@@ -1398,7 +1398,7 @@ table th[data-sortt-desc] {
 }
 
 .dropdown:not(.selection) > .menu.review-box > * {
-  @media only screen and (max-height: 700px) {
+  @media (max-height: 700px) {
     .CodeMirror,
     .CodeMirror-scroll {
       min-height: 100px;
diff --git a/web_src/less/_dashboard.less b/web_src/less/_dashboard.less
index d798f2bed5..b73aa83d7d 100644
--- a/web_src/less/_dashboard.less
+++ b/web_src/less/_dashboard.less
@@ -33,7 +33,7 @@
           left: 90%;
           width: 15%;
 
-          @media only screen and (max-width: 768px) {
+          @media @mediaSm {
             top: 10px;
             left: auto;
             width: auto;
@@ -55,7 +55,7 @@
         left: auto !important;
       }
 
-      @media only screen and (max-width: 768px) {
+      @media @mediaSm {
         width: 100%;
       }
     }
diff --git a/web_src/less/_form.less b/web_src/less/_form.less
index 1f9a02b263..03f5c83bca 100644
--- a/web_src/less/_form.less
+++ b/web_src/less/_form.less
@@ -142,7 +142,7 @@ textarea:focus,
       text-align: center;
     }
 
-    @media only screen and (min-width: 768px) {
+    @media @mediaMdAndUp {
       width: 800px !important;
 
       .header {
@@ -169,7 +169,7 @@ textarea:focus,
       }
     }
 
-    @media only screen and (max-width: 767px) {
+    @media @mediaSm {
       .optional .title {
         margin-left: 15px;
       }
@@ -211,7 +211,7 @@ textarea:focus,
   }
 }
 
-@media only screen and (min-width: 768px) {
+@media @mediaMdAndUp {
   .g-recaptcha,
   .h-captcha {
     margin: 0 auto !important;
@@ -220,7 +220,7 @@ textarea:focus,
   }
 }
 
-@media screen and (max-height: 575px) {
+@media (max-height: 575px) {
   #rc-imageselect,
   .g-recaptcha,
   .h-captcha {
@@ -252,7 +252,7 @@ textarea:focus,
 
     .inline.field > label,
     input {
-      @media only screen and (max-width: 768px) {
+      @media @mediaSm {
         width: 100% !important;
       }
     }
@@ -290,7 +290,7 @@ textarea:focus,
         width: 50% !important;
       }
 
-      @media only screen and (max-width: 768px) {
+      @media @mediaSm {
         label,
         input,
         .selection.dropdown {
@@ -308,7 +308,7 @@ textarea:focus,
 
   &.new.repo {
     .ui.form {
-      @media only screen and (min-width: 768px) {
+      @media @mediaMdAndUp {
         #auto-init {
           margin-left: @create-page-form-input-padding+15px;
         }
@@ -317,7 +317,7 @@ textarea:focus,
       .selection.dropdown:not(.owner) {
         width: 50% !important;
 
-        @media only screen and (max-width: 768px) {
+        @media @mediaSm {
           width: 100% !important;
         }
       }
@@ -346,7 +346,7 @@ textarea:focus,
 }
 
 .new.org .ui.form {
-  @media only screen and (max-width: 768px) {
+  @media @mediaSm {
     .field button,
     .field a {
       margin-bottom: 1em;
diff --git a/web_src/less/_home.less b/web_src/less/_home.less
index 707c873279..fb31bedfa9 100644
--- a/web_src/less/_home.less
+++ b/web_src/less/_home.less
@@ -4,7 +4,7 @@
   }
 
   .hero {
-    @media only screen and (max-width: 767px) {
+    @media @mediaSm {
       h1 {
         font-size: 3.5em;
       }
@@ -14,7 +14,7 @@
       }
     }
 
-    @media only screen and (min-width: 768px) {
+    @media @mediaMdAndUp {
       h1 {
         font-size: 5.5em;
       }
@@ -52,7 +52,7 @@
 footer {
   .ui.container .left,
   .ui.container .right {
-    @media only screen and (max-width: 880px) {
+    @media (max-width: 880px) {
       display: block;
       text-align: center;
       float: none;
diff --git a/web_src/less/_repository.less b/web_src/less/_repository.less
index 3058ec0cce..8b131e50bf 100644
--- a/web_src/less/_repository.less
+++ b/web_src/less/_repository.less
@@ -122,7 +122,7 @@
         text-overflow: ellipsis;
       }
 
-      @media (max-width: 1200px) {
+      @media @mediaLgAndDown {
         .title {
           max-width: 150px;
         }
@@ -216,7 +216,7 @@
   #clone-panel {
     width: 350px;
 
-    @media only screen and (max-width: 768px) {
+    @media @mediaSm {
       width: 100%;
     }
 
@@ -279,7 +279,7 @@
       }
 
       .ui.tiny.blue.buttons {
-        @media only screen and (max-width: 768px) {
+        @media @mediaSm {
           width: 100%;
         }
       }
@@ -629,7 +629,7 @@
             width: 100%;
           }
 
-          @media only screen and (max-width: 768px) {
+          @media @mediaSm {
             flex-direction: column;
 
             h1 {
@@ -1025,7 +1025,7 @@
               }
             }
 
-            @media only screen and (max-width: 767px) {
+            @media @mediaSm {
               .form .button {
                 width: 100%;
 
@@ -1578,7 +1578,7 @@
     background: #ffffff;
     line-height: 30px;
 
-    @media only screen and (max-width: 992px) {
+    @media @mediaMdAndDown {
       flex-direction: column;
       align-items: flex-start;
     }
@@ -2019,13 +2019,13 @@
 
       button,
       input {
-        @media only screen and (max-width: 438px) {
+        @media (max-width: 438px) {
           width: 100%;
         }
       }
 
       button {
-        @media only screen and (max-width: 768px) {
+        @media @mediaSm {
           margin-bottom: 1em;
         }
       }
@@ -2110,7 +2110,7 @@
       }
     }
 
-    @media only screen and (max-width: 767px) {
+    @media @mediaSm {
       .dividing.header .stackable.grid .button {
         margin-top: 2px;
         margin-bottom: 2px;
@@ -3002,7 +3002,7 @@ tbody.commit-list {
   vertical-align: middle;
 }
 
-@media only screen and (max-width: 767.98px) {
+@media @mediaSm {
   tr.commit-list {
     width: 100%;
   }
@@ -3012,7 +3012,7 @@ tbody.commit-list {
   }
 }
 
-@media only screen and (min-width: 768px) and (max-width: 991.98px) {
+@media @mediaMd {
   tr.commit-list {
     width: 723px;
   }
@@ -3021,7 +3021,7 @@ tbody.commit-list {
   }
 }
 
-@media only screen and (min-width: 992px) and (max-width: 1199.98px) {
+@media @mediaLg {
   tr.commit-list {
     width: 933px;
   }
@@ -3030,7 +3030,7 @@ tbody.commit-list {
   }
 }
 
-@media only screen and (min-width: 1200px) {
+@media @mediaXl {
   tr.commit-list {
     width: 1127px;
   }
@@ -3076,7 +3076,7 @@ tbody.commit-list {
   }
 }
 
-@media only screen and (max-width: 767px) {
+@media @mediaSm {
   .ui.stackable.menu {
     &.mobile--margin-between-items > .item {
       margin-top: 5px;
@@ -3336,7 +3336,7 @@ td.blob-excerpt {
 .repository .ui.menu.new-menu {
   background: none !important;
 
-  @media only screen and (max-width: 1200px) {
+  @media @mediaLgAndDown {
     &::after {
       background: none !important;
     }
diff --git a/web_src/less/_review.less b/web_src/less/_review.less
index 23b8a3178f..79b97d6b94 100644
--- a/web_src/less/_review.less
+++ b/web_src/less/_review.less
@@ -1,3 +1,5 @@
+@import "variables.less";
+
 .ui.button.add-code-comment {
   padding: 2px;
   position: absolute;
@@ -146,7 +148,7 @@ a.blob-excerpt:hover {
   margin-left: .5rem;
 }
 
-@media only screen and (max-width: 768px) {
+@media @mediaSm {
   #review-box > .menu {
     > .ui.segment {
       width: 94vw;
@@ -161,19 +163,19 @@ a.blob-excerpt:hover {
   }
 }
 
-@media only screen and (min-width: 768px) and (max-width: 992px) {
+@media @mediaMd {
   #review-box .CodeMirror-scroll {
     max-width: 700px;
   }
 }
 
-@media only screen and (min-width: 992px) and (max-width: 1200px) {
+@media @mediaLg {
   #review-box .CodeMirror-scroll {
     max-width: 800px;
   }
 }
 
-@media only screen and (min-width: 1200px) {
+@media @mediaXl {
   #review-box .CodeMirror-scroll {
     max-width: 900px;
   }
diff --git a/web_src/less/_user.less b/web_src/less/_user.less
index 9fa319deb6..47095dd2af 100644
--- a/web_src/less/_user.less
+++ b/web_src/less/_user.less
@@ -1,3 +1,5 @@
+@import "variables.less";
+
 .user {
   &:not(.icon) {
     padding-top: 15px;
@@ -51,18 +53,18 @@
         img {
           width: 100%;
         }
-        @media only screen and (max-width: 768px) {
+        @media @mediaSm {
           height: 250px;
           overflow: hidden;
 
           img {
-            max-height: 768px;
-            max-width: 768px;
+            max-height: 767px;
+            max-width: 767px;
           }
         }
       }
 
-      @media only screen and (max-width: 768px) {
+      @media @mediaSm {
         width: 100%;
       }
     }
diff --git a/web_src/less/features/heatmap.less b/web_src/less/features/heatmap.less
index 3c11e0593e..5383847387 100644
--- a/web_src/less/features/heatmap.less
+++ b/web_src/less/features/heatmap.less
@@ -7,7 +7,7 @@
     padding: 0 !important;
   }
 
-  @media (max-width: 1200px) {
+  @media @mediaLgAndDown {
     & {
       display: none;
     }
@@ -30,7 +30,7 @@
   left: 25px;
 }
 
-@media (max-width: 1200px) {
+@media @mediaLgAndDown {
   .heatmap-container .total-contributions {
     left: 21px;
   }
diff --git a/web_src/less/index.less b/web_src/less/index.less
index 15b9062e1c..1b0701ae81 100644
--- a/web_src/less/index.less
+++ b/web_src/less/index.less
@@ -1,5 +1,6 @@
 @import "~font-awesome/css/font-awesome.css";
 
+@import "./variables.less";
 @import "./features/gitgraph.less";
 @import "./features/animations.less";
 @import "./features/heatmap.less";
diff --git a/web_src/less/themes/theme-arc-green.less b/web_src/less/themes/theme-arc-green.less
index a4412145a9..ad3d491942 100644
--- a/web_src/less/themes/theme-arc-green.less
+++ b/web_src/less/themes/theme-arc-green.less
@@ -1,3 +1,5 @@
+@import "../variables.less";
+
 :root {
   --color-primary: #87ab63;
   --color-primary-dark-1: #93b373;
@@ -1222,7 +1224,7 @@ td.blob-hunk {
   background: #2a2e3a;
   border-color: transparent !important;
 
-  @media only screen and (max-width: 1200px) {
+  @media @mediaLgAndDown {
     &::after {
       background: linear-gradient(to right, transparent 0%, #2a2e3a 100%);
     }
diff --git a/web_src/less/variables.less b/web_src/less/variables.less
new file mode 100644
index 0000000000..23f6ac6de9
--- /dev/null
+++ b/web_src/less/variables.less
@@ -0,0 +1,14 @@
+// here a standard set of media queries is defined, that is compatible with the
+// responsive grid used in fomantic css. As there only is a precompiled build
+// of fomantic checked in (since 946bbbe), we can't use their less variables
+// here, but these breakpoints shouldn't change in the foreseeable future.
+
+@mediaMdAndUp:   ~"(min-width: 768px)";
+@mediaMdAndDown: ~"(max-width: 991px)";
+@mediaLgAndUp:   ~"(min-width: 992px)";
+@mediaLgAndDown: ~"(max-width: 1200px)";
+
+@mediaSm: ~"(max-width: 767px)";
+@mediaMd: @mediaMdAndUp and @mediaMdAndDown;
+@mediaLg: @mediaLgAndUp and @mediaLgAndDown;
+@mediaXl: ~"(min-width: 1201px)";