@osovitny/anatoly 3.19.17 → 3.19.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3732,6 +3732,26 @@ class ScriptService {
|
|
|
3732
3732
|
Created:
|
|
3733
3733
|
2 May 2023
|
|
3734
3734
|
|
|
3735
|
+
Details
|
|
3736
|
+
https://getbootstrap.com/docs/5.3/layout/breakpoints
|
|
3737
|
+
|
|
3738
|
+
$grid-breakpoints: (
|
|
3739
|
+
xs: 0,
|
|
3740
|
+
|
|
3741
|
+
// Small devices (landscape phones, 576px and up)
|
|
3742
|
+
sm: 576px,
|
|
3743
|
+
|
|
3744
|
+
// Medium devices (tablets, 768px and up)
|
|
3745
|
+
md: 768px,
|
|
3746
|
+
|
|
3747
|
+
// Large devices (desktops, 992px and up)
|
|
3748
|
+
lg: 992px,
|
|
3749
|
+
|
|
3750
|
+
// X-Large devices (large desktops, 1200px and up)
|
|
3751
|
+
xl: 1200px,
|
|
3752
|
+
xxl: 1400px
|
|
3753
|
+
);
|
|
3754
|
+
|
|
3735
3755
|
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
3736
3756
|
</file>
|
|
3737
3757
|
*/
|
|
@@ -3742,67 +3762,43 @@ class Browser {
|
|
|
3742
3762
|
static isIframe() {
|
|
3743
3763
|
return window !== window.parent && !window.opener;
|
|
3744
3764
|
}
|
|
3745
|
-
/*
|
|
3746
|
-
https://getbootstrap.com/docs/5.3/layout/breakpoints
|
|
3747
|
-
|
|
3748
|
-
$grid-breakpoints: (
|
|
3749
|
-
xs: 0,
|
|
3750
|
-
|
|
3751
|
-
// Small devices (landscape phones, 576px and up)
|
|
3752
|
-
sm: 576px,
|
|
3753
|
-
|
|
3754
|
-
// Medium devices (tablets, 768px and up)
|
|
3755
|
-
md: 768px,
|
|
3756
|
-
|
|
3757
|
-
// Large devices (desktops, 992px and up)
|
|
3758
|
-
lg: 992px,
|
|
3759
|
-
|
|
3760
|
-
// X-Large devices (large desktops, 1200px and up)
|
|
3761
|
-
xl: 1200px,
|
|
3762
|
-
xxl: 1400px
|
|
3763
|
-
);
|
|
3764
|
-
*/
|
|
3765
3765
|
static isMobile() {
|
|
3766
|
-
const userAgent = navigator.userAgent || navigator.vendor;
|
|
3766
|
+
const userAgent = navigator.userAgent || navigator.vendor || window.opera;
|
|
3767
|
+
// Touch capability detection
|
|
3768
|
+
const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
|
|
3769
|
+
// Basic screen width check
|
|
3770
|
+
const isMobileScreen = window.innerWidth < 768;
|
|
3771
|
+
// Mobile detection regex
|
|
3767
3772
|
const mobileRegex = new RegExp("(android|bb\\d+|meego).+mobile|" +
|
|
3768
3773
|
"avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|" +
|
|
3769
3774
|
"iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|" +
|
|
3770
3775
|
"mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|" +
|
|
3771
3776
|
"p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|" +
|
|
3772
3777
|
"up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|" +
|
|
3773
|
-
"
|
|
3774
|
-
"ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|" +
|
|
3775
|
-
"attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|" +
|
|
3776
|
-
"br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|" +
|
|
3777
|
-
"craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|" +
|
|
3778
|
-
"el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|" +
|
|
3779
|
-
"g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|" +
|
|
3780
|
-
"hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|" +
|
|
3781
|
-
"i230|iac( |-\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|" +
|
|
3782
|
-
"keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|" +
|
|
3783
|
-
"libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|" +
|
|
3784
|
-
"mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|" +
|
|
3785
|
-
"ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|" +
|
|
3786
|
-
"pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|" +
|
|
3787
|
-
"pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|" +
|
|
3788
|
-
"s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|" +
|
|
3789
|
-
"sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|" +
|
|
3790
|
-
"sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|" +
|
|
3791
|
-
"ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|" +
|
|
3792
|
-
"vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|" +
|
|
3793
|
-
"wmlb|wonu|x700|yas-|your|zeto|zte-", "i");
|
|
3778
|
+
"nokia|samsung|htc|motorola|sonyericsson|iemobile", "i");
|
|
3794
3779
|
const isMobileUserAgent = mobileRegex.test(userAgent);
|
|
3795
|
-
|
|
3796
|
-
return
|
|
3780
|
+
// Combine checks
|
|
3781
|
+
return (hasTouch && isMobileScreen) || isMobileUserAgent;
|
|
3797
3782
|
}
|
|
3798
3783
|
static isTablet() {
|
|
3799
3784
|
const userAgent = navigator.userAgent || navigator.vendor;
|
|
3800
|
-
const tabletRegex = new RegExp("ipad|
|
|
3801
|
-
"
|
|
3785
|
+
const tabletRegex = new RegExp("ipad|" +
|
|
3786
|
+
"android(?!.*mobile)|" +
|
|
3787
|
+
"tablet|kindle|playbook|silk|" +
|
|
3788
|
+
"nexus 7|nexus 10|" +
|
|
3789
|
+
"fire|sm-t|tab|gt-p|sch-i|xoom|tf101|" +
|
|
3790
|
+
"kftt|kfot|kfjw|kfsowi|a500|rim\\w", "i");
|
|
3802
3791
|
const isTabletUserAgent = tabletRegex.test(userAgent);
|
|
3803
3792
|
const isTabletScreen = window.innerWidth >= 768 && window.innerWidth < 992;
|
|
3804
3793
|
return isTabletUserAgent || isTabletScreen;
|
|
3805
3794
|
}
|
|
3795
|
+
static isDesktopMacOS() {
|
|
3796
|
+
const userAgent = navigator.userAgent || navigator.vendor;
|
|
3797
|
+
const isMac = /macintosh|mac os x/i.test(userAgent);
|
|
3798
|
+
const isIPad = /ipad/i.test(userAgent);
|
|
3799
|
+
// iPads may spoof macOS user agent, so exclude them
|
|
3800
|
+
return isMac && !isIPad;
|
|
3801
|
+
}
|
|
3806
3802
|
static isMobileOrTablet() {
|
|
3807
3803
|
return this.isMobile() || this.isTablet();
|
|
3808
3804
|
}
|