diff --git a/__tests__/list.test.scss b/__tests__/list.test.scss index 85d920d..82e570f 100644 --- a/__tests__/list.test.scss +++ b/__tests__/list.test.scss @@ -21,6 +21,22 @@ $dupList: (ab cd efgh efgh efgh ijk); } } +@include test-module("Remove at list using list [fn]") { + @include test("simple") { + @include assert-equal( + list.remove-list($simpleList, ("cd" "efgh")), + (ab ijk) + ); + } + + @include test("duplicate") { + @include assert-equal( + list.remove-list($dupList, ("cd" "efgh")), + (ab ijk) + ); + } +} + @include test-module("Convert to str [fn]") { @include test("simple") { @include assert-equal( diff --git a/__tests__/native_menu.test.scss b/__tests__/native_menu.test.scss index 5a766a8..38d96d4 100644 --- a/__tests__/native_menu.test.scss +++ b/__tests__/native_menu.test.scss @@ -1,8 +1,11 @@ @use "true" as *; @use "example" as *; @use "../src/utils/native_menu"; +@use "../src/utils/os" as OS; + +@include test-module("Native Menu Option - ESR [mix]") { + @include OS.ESR-MODE; -@include test-module("Native Menu Option [mix]") { @include test("simple") { @include assert { @include output { @@ -117,3 +120,121 @@ } } } + +@include test-module("Native Menu Option - Standard [mix]") { + @include OS.STANDARD-MODE; + + @include test("simple") { + @include assert { + @include output { + @include native_menu.NativeToolkitMenu { + @include example; + } + @include native_menu.NativeMenuPopup { + @include example; + } + } + @include expect { + @supports -moz-bool-pref("widget.macos.native-context-menus") or -moz-bool-pref("widget.gtk.native-context-menus") { + @include example; + } + menupopup:is(#historyMenuPopup, #bookmarksMenuPopup), + menupopup:not([placespopup="true"]) { + @include example; + } + } + } + } + @include test("native menu - with windows media") { + @include assert { + @include output { + @include native_menu.NativeMenu(true) { + @include example; + } + @include native_menu.NonNativeMenu(true) { + @include example; + } + @include native_menu.WinNativeMenu(true) { + @include example; + } + @include native_menu.WinNonNativeMenu(true) { + @include example; + } + } + @include expect { + @media not (-moz-windows-non-native-menus) { + @media (-moz-platform: windows) { + @include example; + } + } + @supports not -moz-bool-pref("userChrome.theme.non_native_menu") { + @media (-moz-gtk-csd-available) { + @include example; + } + } + @media (-moz-windows-non-native-menus) { + @media (-moz-platform: windows) { + @include example; + } + } + @supports -moz-bool-pref("userChrome.theme.non_native_menu") { + @media (-moz-gtk-csd-available) { + @include example; + } + } + @media not (-moz-windows-non-native-menus) { + @media (-moz-platform: windows) { + @include example; + } + } + @media (-moz-windows-non-native-menus) { + @media (-moz-platform: windows) { + @include example; + } + } + } + } + } + @include test("native menu - without windows media") { + @include assert { + @include output { + @include native_menu.NativeMenu { + @include example; + } + @include native_menu.NonNativeMenu { + @include example; + } + @include native_menu.WinNativeMenu { + @include example; + } + @include native_menu.WinNonNativeMenu { + @include example; + } + } + @include expect { + @media not (-moz-windows-non-native-menus) { + @include example; + } + @supports not -moz-bool-pref("userChrome.theme.non_native_menu") { + @media (-moz-gtk-csd-available) { + @include example; + } + } + @media (-moz-windows-non-native-menus) { + @include example; + } + @supports -moz-bool-pref("userChrome.theme.non_native_menu") { + @media (-moz-gtk-csd-available) { + @include example; + } + } + @media not (-moz-windows-non-native-menus) { + @include example; + } + @media (-moz-windows-non-native-menus) { + @include example; + } + } + } + } +} diff --git a/__tests__/os.test.scss b/__tests__/os.test.scss index 8e66f06..e42d95b 100644 --- a/__tests__/os.test.scss +++ b/__tests__/os.test.scss @@ -2,8 +2,9 @@ @use "example" as *; @use "../src/utils/os" as *; -// TODO: Need more tests.. -@include test-module("Create OS related media [mix]") { +@include test-module("Create OS related media - ESR [mix]") { + @include ESR-MODE; + @include test("win7") { @include assert { @include output { @@ -145,3 +146,145 @@ } } } + +@include test-module("Create OS related media - Standard [mix]") { + @include STANDARD-MODE; + + @include test("win7") { + @include assert { + @include output { + @include OS($win7) { + @include example; + } + } + @include expect { + // IGNORE + } + } + } + + @include test("win8") { + @include assert { + @include output { + @include OS($win8) { + @include example; + } + } + @include expect { + // IGNORE + } + } + } + + @include test("win10") { + @include assert { + @include output { + @include OS($win10) { + @include example; + } + } + @include expect { + // AS Windows + @media (-moz-platform: windows) { + @include example; + } + } + } + } + + @include test("linux") { + @include assert { + @include output { + @include OS($linux) { + @include example; + } + } + @include expect { + @media (-moz-gtk-csd-available) { + @include example; + } + } + } + } + + @include test("mac") { + @include assert { + @include output { + @include OS($mac) { + @include example; + } + } + @include expect { + @supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") { + @include example; + } + } + } + } + + @include test("bigsur") { + @include assert { + @include output { + @include OS($bigsur) { + @include example; + } + } + @include expect { + @media (-moz-mac-big-sur-theme: 0) { + @include example; + } + } + } + } + + @include test("win") { + @include assert { + @include output { + @include OS($win) { + @include example; + } + } + @include expect { + @media (-moz-platform: windows) { + @include example; + } + } + } + } + + @include test("all os - win7, win8, win10, mac, bigsur, linux") { + @include assert { + @include output { + @include OS($win7, $win8, $win10, $mac, $bigsur, $linux) { + @include example; + } + } + @include expect { + @media (-moz-platform: windows), (-moz-mac-big-sur-theme: 0), (-moz-gtk-csd-available) { + @include example; + } + @supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") { + @include example; + } + } + } + } + + @include test("all os - win, mac, bigsur, linux") { + @include assert { + @include output { + @include OS($win, $mac, $bigsur, $linux) { + @include example; + } + } + @include expect { + @media (-moz-platform: windows), (-moz-mac-big-sur-theme: 0), (-moz-gtk-csd-available) { + @include example; + } + @supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") { + @include example; + } + } + } + } +} diff --git a/src/leptonChrome.scss b/src/leptonChrome.scss index ea1aca0..41e9938 100644 --- a/src/leptonChrome.scss +++ b/src/leptonChrome.scss @@ -16,6 +16,7 @@ @namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; @namespace html "http://www.w3.org/1999/xhtml"; +@include ESR-MODE; /** Default Theme - Contrast **************************************************/ @include Option("userChrome.theme.built_in_contrast") { @import "theme/built_in"; diff --git a/src/leptonContent.scss b/src/leptonContent.scss index 0ef3035..7eaa1a7 100644 --- a/src/leptonContent.scss +++ b/src/leptonContent.scss @@ -11,6 +11,7 @@ @namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); @namespace html url("http://www.w3.org/1999/xhtml"); +@include ESR-MODE; /** Compatibility *************************************************************/ @import "contents/compatibility"; diff --git a/src/utils/_list.scss b/src/utils/_list.scss index 933f923..6a6f4ee 100644 --- a/src/utils/_list.scss +++ b/src/utils/_list.scss @@ -4,17 +4,25 @@ @function remove($list, $value, $recursive: false) { $result: (); - @for $i from 1 through length($list) { - @if type-of(nth($list, $i)) == list and $recursive { - $result: append($result, remove(nth($list, $i), $value, $recursive)); - } @else if nth($list, $i) != $value { - $result: append($result, nth($list, $i)); + @each $item in $list { + @if type-of($item) == list and $recursive { + $result: append($result, remove($item, $value, $recursive)); + } @else if $item != $value { + $result: append($result, $item); } } @return $result; } +@function remove-list($list, $removeList, $recursive: false) { + @each $removeItem in $removeList { + $list: remove($list, $removeItem, $recursive); + } + + @return $list; +} + @function to-string($list, $glue: '', $is-nested: false) { $result: null; diff --git a/src/utils/_os.scss b/src/utils/_os.scss index 7c2ca6c..45edcb5 100644 --- a/src/utils/_os.scss +++ b/src/utils/_os.scss @@ -31,13 +31,14 @@ $_win-media: ( $_win-media: map.set($_win-media, $_win-key, $result-template); } +$_moz-platform-windows: list.nth($_win-template, 2); @function _win-only-result() { $result-template: (); @each $_win-value in map.values($_win-media) { $result-template: list.append($result-template, list.nth($_win-value, 1)); } - @return list.append($result-template, list.nth($_win-template, 2)) + @return list.append($result-template, $_moz-platform-windows) } $_win-media: map.merge( @@ -54,7 +55,24 @@ $_os-media: map.merge( ); //== Mixin ===================================================================== +$osESR: false !default; + +@mixin ESR-MODE() { + $osESR: true !global; +} + +@mixin STANDARD-MODE() { + $osESR: false !global; +} + @mixin OS($osNames...) { + $_os-media: $_os-media; // as local + @if not $osESR { + $osNames: list-utils.remove-list($osNames, ($win7 $win8)); + $_os-media: map.set($_os-media, $win10, $_moz-platform-windows); + $_os-media: map.set($_os-media, $win, $_moz-platform-windows); + } + $osMedias: (); @each $osName in $osNames { $osMedia: map.get($_os-media, $osName);