diff --git a/.eslintrc b/.eslintrc index c1fa61c0..065d0b5b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -34,6 +34,7 @@ "BadResources": true, "LogString": true, "BlockedRequestMethods": true, + "GoogleDomains": true, "fileGuard": true, "files": true, diff --git a/THIRD_PARTY.txt b/THIRD_PARTY.txt index b473e5d1..6294fdc9 100644 --- a/THIRD_PARTY.txt +++ b/THIRD_PARTY.txt @@ -138,7 +138,7 @@ https://cdnjs.cloudflare.com/ajax/libs/ajax-bootstrap-select/1.4.5/js/ajax-boots https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/3.35.1/algoliasearch.min.js https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/4.20.0/algoliasearch.umd.min.js https://cdnjs.cloudflare.com/ajax/libs/alpinejs/2.8.2/alpine.js -https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.13.1/cdn.min.js +https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.13.2/cdn.min.js https://cdnjs.cloudflare.com/ajax/libs/angucomplete-alt/3.0.0/angucomplete-alt.min.js https://cdnjs.cloudflare.com/ajax/libs/angular-bootstrap-colorpicker/3.0.32/css/colorpicker.min.css https://cdnjs.cloudflare.com/ajax/libs/angular-bootstrap-colorpicker/3.0.32/js/bootstrap-colorpicker-module.min.js @@ -184,7 +184,7 @@ https://cdnjs.cloudflare.com/ajax/libs/asciinema-player/2.6.1/asciinema-player.m https://cdnjs.cloudflare.com/ajax/libs/asciinema-player/2.6.1/asciinema-player.min.js https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.1/autocomplete.min.js https://cdnjs.cloudflare.com/ajax/libs/axios/0.27.2/axios.min.js -https://cdnjs.cloudflare.com/ajax/libs/axios/1.5.1/axios.min.js +https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.0/axios.min.js https://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.10/backbone-min.js https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.5.0/backbone-min.js https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.11.1/baguetteBox.min.css @@ -1163,7 +1163,7 @@ https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.14.17/hls.min.js https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.4.12/hls.min.js https://cdnjs.cloudflare.com/ajax/libs/hogan.js/3.0.2/hogan.min.js https://cdnjs.cloudflare.com/ajax/libs/instantsearch.js/3.7.0/instantsearch.production.min.js -https://cdnjs.cloudflare.com/ajax/libs/instantsearch.js/4.58.0/instantsearch.production.min.js +https://cdnjs.cloudflare.com/ajax/libs/instantsearch.js/4.59.0/instantsearch.production.min.js https://cdnjs.cloudflare.com/ajax/libs/iScroll/5.2.0/iscroll.min.js https://cdnjs.cloudflare.com/ajax/libs/izimodal/1.6.1/js/iziModal.min.js https://cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/css/jasny-bootstrap.min.css @@ -1265,7 +1265,7 @@ https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/leaflet.css https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/leaflet.js https://cdnjs.cloudflare.com/ajax/libs/Leaflet.EasyButton/2.4.0/easy-button.min.js https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.5.3/leaflet.markercluster.js -https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.10.47/libphonenumber-js.min.js +https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.10.49/libphonenumber-js.min.js https://cdnjs.cloudflare.com/ajax/libs/libsodium-wrappers/0.5.4/sodium.min.js https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox.min.js https://cdnjs.cloudflare.com/ajax/libs/lightcase/2.5.0/css/lightcase.min.css @@ -1396,8 +1396,8 @@ https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.green https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.min.js -https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/addons/p5.sound.min.js -https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js +https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/addons/p5.sound.min.js +https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.min.js https://cdnjs.cloudflare.com/ajax/libs/page.js/1.11.6/page.js https://cdnjs.cloudflare.com/ajax/libs/paginationjs/2.6.0/pagination.css https://cdnjs.cloudflare.com/ajax/libs/paginationjs/2.6.0/pagination.min.js @@ -1493,7 +1493,7 @@ https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production https://cdnjs.cloudflare.com/ajax/libs/react-redux/7.2.8/react-redux.min.js https://cdnjs.cloudflare.com/ajax/libs/react-redux/8.1.3/react-redux.min.js https://cdnjs.cloudflare.com/ajax/libs/react-router/5.3.3/react-router.min.js -https://cdnjs.cloudflare.com/ajax/libs/react-router/6.16.0/react-router.production.min.js +https://cdnjs.cloudflare.com/ajax/libs/react-router/6.17.0/react-router.production.min.js https://cdnjs.cloudflare.com/ajax/libs/redux/4.2.1/redux.min.js https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.7.1/rickshaw.min.css https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.7.1/rickshaw.min.js @@ -1720,8 +1720,8 @@ https://cdnjs.cloudflare.com/ajax/libs/sticky-js/1.3.0/sticky.min.js https://cdnjs.cloudflare.com/ajax/libs/store.js/2.0.12/store.legacy.min.js https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/4.18.3/swagger-ui-bundle.min.js https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/4.18.3/swagger-ui.min.css -https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/5.9.0/swagger-ui-bundle.min.js -https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/5.9.0/swagger-ui.min.css +https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/5.9.1/swagger-ui-bundle.min.js +https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/5.9.1/swagger-ui.min.css https://cdnjs.cloudflare.com/ajax/libs/swfobject/2.2/swfobject.js https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.min.css https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.min.js @@ -1729,7 +1729,7 @@ https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/css/swiper.min.css https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/js/swiper.min.js https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/css/swiper.min.css https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/js/swiper.min.js -https://cdnjs.cloudflare.com/ajax/libs/tensorflow/4.11.0/tf.min.js +https://cdnjs.cloudflare.com/ajax/libs/tensorflow/4.12.0/tf.min.js https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.7/js/tether.min.js https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.10.5/icons/default/icons.min.js https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.10.5/jquery.tinymce.min.js @@ -1752,32 +1752,32 @@ https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.10.5/skins/ui/oxide/skin.shadow https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.10.5/themes/mobile/theme.min.js https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.10.5/themes/silver/theme.min.js https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.10.5/tinymce.min.js -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/icons/default/icons.min.js -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/models/dom/model.min.js -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/content/dark/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/content/default/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/content/document/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/content/tinymce-5/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/content/tinymce-5-dark/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/content/writer/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide/content.inline.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide-dark/content.inline.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide-dark/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide-dark/skin.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide-dark/skin.shadowdom.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide/skin.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/oxide/skin.shadowdom.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5/content.inline.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5-dark/content.inline.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5-dark/content.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5-dark/skin.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5-dark/skin.shadowdom.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5/skin.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/skins/ui/tinymce-5/skin.shadowdom.min.css -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/themes/silver/theme.min.js -https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.0/tinymce.min.js +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/icons/default/icons.min.js +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/models/dom/model.min.js +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/content/dark/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/content/default/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/content/document/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/content/tinymce-5/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/content/tinymce-5-dark/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/content/writer/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide/content.inline.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide-dark/content.inline.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide-dark/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide-dark/skin.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide-dark/skin.shadowdom.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide/skin.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/oxide/skin.shadowdom.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5/content.inline.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5-dark/content.inline.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5-dark/content.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5-dark/skin.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5/skin.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/skins/ui/tinymce-5/skin.shadowdom.min.css +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/themes/silver/theme.min.js +https://cdnjs.cloudflare.com/ajax/libs/tinymce/6.7.2/tinymce.min.js https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.css https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.js https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/js/jquery.tooltipster.min.js @@ -1828,11 +1828,11 @@ https://cdnjs.cloudflare.com/ajax/libs/video.js/6.13.0/video-js.min.css https://cdnjs.cloudflare.com/ajax/libs/video.js/6.13.0/video.min.js https://cdnjs.cloudflare.com/ajax/libs/video.js/7.21.1/video-js.min.css https://cdnjs.cloudflare.com/ajax/libs/video.js/7.21.1/video.min.js -https://cdnjs.cloudflare.com/ajax/libs/video.js/8.6.0/video-js.min.css -https://cdnjs.cloudflare.com/ajax/libs/video.js/8.6.0/video.min.js -https://cdnjs.cloudflare.com/ajax/libs/vue/3.3.4/vue.global.prod.js +https://cdnjs.cloudflare.com/ajax/libs/video.js/8.6.1/video-js.min.css +https://cdnjs.cloudflare.com/ajax/libs/video.js/8.6.1/video.min.js +https://cdnjs.cloudflare.com/ajax/libs/vue/3.3.7/vue.global.prod.js https://cdnjs.cloudflare.com/ajax/libs/vue-i18n/8.27.2/vue-i18n.min.js -https://cdnjs.cloudflare.com/ajax/libs/vue-i18n/9.5.0/vue-i18n.cjs.min.js +https://cdnjs.cloudflare.com/ajax/libs/vue-i18n/9.6.1/vue-i18n.cjs.min.js https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.6.5/vue-router.min.js https://cdnjs.cloudflare.com/ajax/libs/vue-router/4.2.5/vue-router.global.min.js https://cdnjs.cloudflare.com/ajax/libs/vuex/3.6.2/vuex.min.js @@ -1875,12 +1875,12 @@ https://cdn.jsdelivr.net/npm/p2p-media-loader-hlsjs@0.6.2/build/p2p-media-loader https://cdn.jsdelivr.net/npm/plyr@3.7.8/dist/plyr.css https://cdn.jsdelivr.net/npm/plyr@3.7.8/dist/plyr.min.js https://cdn.jsdelivr.net/npm/raven-js@3.27.2/dist/raven.min.js -https://cdn.jsdelivr.net/npm/react-intl@6.4.7/react-intl.iife.min.js +https://cdn.jsdelivr.net/npm/react-intl@6.5.1/react-intl.iife.min.js https://cdn.jsdelivr.net/npm/react-lifecycles-compat@3.0.4/react-lifecycles-compat.min.js https://cdn.jsdelivr.net/npm/search-insights@1.10.0/dist/search-insights.min.js -https://cdn.jsdelivr.net/npm/search-insights@2.8.3/dist/search-insights.min.js -https://cdn.jsdelivr.net/npm/swiper@10.3.1/swiper-bundle.min.css -https://cdn.jsdelivr.net/npm/swiper@10.3.1/swiper-bundle.min.js +https://cdn.jsdelivr.net/npm/search-insights@2.9.0/dist/search-insights.min.js +https://cdn.jsdelivr.net/npm/swiper@11.0.3/swiper-bundle.min.css +https://cdn.jsdelivr.net/npm/swiper@11.0.3/swiper-bundle.min.js https://cdn.jsdelivr.net/npm/swiper@6.8.4/swiper-bundle.min.css https://cdn.jsdelivr.net/npm/swiper@6.8.4/swiper-bundle.min.js https://cdn.jsdelivr.net/npm/swiper@7.4.1/swiper-bundle.min.css @@ -1890,7 +1890,7 @@ https://cdn.jsdelivr.net/npm/swiper@8.4.7/swiper-bundle.min.js https://cdn.jsdelivr.net/npm/swiper@9.4.1/swiper-bundle.min.css https://cdn.jsdelivr.net/npm/swiper@9.4.1/swiper-bundle.min.js https://cdn.jsdelivr.net/npm/urlize.js/urlize.js -https://cdn.jsdelivr.net/npm/vanilla-lazyload@17.8.4/dist/lazyload.min.js +https://cdn.jsdelivr.net/npm/vanilla-lazyload@17.8.5/dist/lazyload.min.js https://cdn.jsdelivr.net/npm/videojs-seek-buttons@1.6.0/dist/videojs-seek-buttons.css https://cdn.jsdelivr.net/npm/videojs-seek-buttons@1.6.0/dist/videojs-seek-buttons.min.js https://cdn.jsdelivr.net/npm/videojs-seek-buttons@2.2.1/dist/videojs-seek-buttons.css diff --git a/_locales/vi/messages.json b/_locales/vi/messages.json index af887ac6..cbf2268b 100644 --- a/_locales/vi/messages.json +++ b/_locales/vi/messages.json @@ -516,11 +516,11 @@ "description": "Missing permission" }, "permissionAllow": { - "message": "", + "message": "Cho phép", "description": "Allow" }, "permissionMoreInfo": { - "message": "", + "message": "Thêm thông tin", "description": "More info" } } diff --git a/core/constants.js b/core/constants.js index 80d91d65..c424af21 100644 --- a/core/constants.js +++ b/core/constants.js @@ -450,6 +450,258 @@ const LogString = { 'IFRAME': 'Possible iframe request:', }; +/** + * https://codeberg.org/nobody/LocalCDN/issues/1560 + */ +const GoogleDomains = { + 'google.com': true, + 'youtube.com': true, + 'ytimg.com': true, + 'withgoogle.com': true, + 'withyoutube.com': true, + 'google.ws': true, + 'google.vu': true, + 'google.vg': true, + 'google.tt': true, + 'google.to': true, + 'google.tn': true, + 'google.tm': true, + 'google.tl': true, + 'google.tk': true, + 'google.tg': true, + 'google.td': true, + 'google.st': true, + 'google.sr': true, + 'google.so': true, + 'google.sn': true, + 'google.sm': true, + 'google.sk': true, + 'google.si': true, + 'google.sh': true, + 'google.se': true, + 'google.sc': true, + 'google.rw': true, + 'google.ru': true, + 'google.rs': true, + 'google.ro': true, + 'google.pt': true, + 'google.ps': true, + 'google.pn': true, + 'google.pl': true, + 'google.nu': true, + 'google.nr': true, + 'google.no': true, + 'google.nl': true, + 'google.ne': true, + 'google.mw': true, + 'google.mv': true, + 'google.mu': true, + 'google.ms': true, + 'google.mn': true, + 'google.ml': true, + 'google.mk': true, + 'google.mg': true, + 'google.me': true, + 'google.md': true, + 'google.lv': true, + 'google.lu': true, + 'google.lt': true, + 'google.lk': true, + 'google.li': true, + 'google.la': true, + 'google.kz': true, + 'google.ki': true, + 'google.kg': true, + 'google.jo': true, + 'google.je': true, + 'google.it': true, + 'google.is': true, + 'google.iq': true, + 'google.io': true, + 'google.im': true, + 'google.ie': true, + 'google.hu': true, + 'google.ht': true, + 'google.hr': true, + 'google.hn': true, + 'google.gy': true, + 'google.gr': true, + 'google.gp': true, + 'google.gm': true, + 'google.gl': true, + 'google.gg': true, + 'google.gf': true, + 'google.ge': true, + 'google.ga': true, + 'google.fr': true, + 'google.fm': true, + 'google.fi': true, + 'google.es': true, + 'google.ee': true, + 'google.dz': true, + 'google.dm': true, + 'google.dk': true, + 'google.dj': true, + 'google.de': true, + 'google.cz': true, + 'google.cv': true, + 'google.com.vn': true, + 'google.com.vc': true, + 'google.com.uy': true, + 'google.com.ua': true, + 'google.com.tw': true, + 'google.com.tr': true, + 'google.com.tj': true, + 'google.com.sv': true, + 'google.com.sl': true, + 'google.com.sg': true, + 'google.com.sb': true, + 'google.com.sa': true, + 'google.com.qa': true, + 'google.com.py': true, + 'google.com.pr': true, + 'google.com.pk': true, + 'google.com.ph': true, + 'google.com.pg': true, + 'google.com.pe': true, + 'google.com.pa': true, + 'google.com.om': true, + 'google.com.np': true, + 'google.com.ni': true, + 'google.com.ng': true, + 'google.com.nf': true, + 'google.com.na': true, + 'google.com.my': true, + 'google.com.mx': true, + 'google.com.mt': true, + 'google.com.mm': true, + 'google.com.ly': true, + 'google.com.lc': true, + 'google.com.lb': true, + 'google.com.kw': true, + 'google.com.kh': true, + 'google.com.jm': true, + 'google.com.hk': true, + 'google.com.gt': true, + 'google.com.gi': true, + 'google.com.gh': true, + 'google.com.fj': true, + 'google.com.et': true, + 'google.com.eg': true, + 'google.com.ec': true, + 'google.com.do': true, + 'google.com.cy': true, + 'google.com.cu': true, + 'google.com.co': true, + 'google.com.bz': true, + 'google.com.br': true, + 'google.com.bo': true, + 'google.com.bn': true, + 'google.com.bh': true, + 'google.com.bd': true, + 'google.com.au': true, + 'google.com.ar': true, + 'google.com.ai': true, + 'google.com.ag': true, + 'google.com.af': true, + 'google.co.zw': true, + 'google.co.zm': true, + 'google.co.za': true, + 'google.co.vi': true, + 'google.co.ve': true, + 'google.co.uz': true, + 'google.co.uk': true, + 'google.co.ug': true, + 'google.co.tz': true, + 'google.co.th': true, + 'google.co.pn': true, + 'google.co.nz': true, + 'google.co.mz': true, + 'google.co.ma': true, + 'google.co.ls': true, + 'google.co.kr': true, + 'google.co.ke': true, + 'google.co.jp': true, + 'google.co.in': true, + 'google.co.il': true, + 'google.co.id': true, + 'google.co.cr': true, + 'google.co.ck': true, + 'google.co.bw': true, + 'google.co.ao': true, + 'google.cn': true, + 'google.cm': true, + 'google.cl': true, + 'google.ci': true, + 'google.ch': true, + 'google.cg': true, + 'google.cf': true, + 'google.cd': true, + 'google.cc': true, + 'google.cat': true, + 'google.ca': true, + 'google.by': true, + 'google.bt': true, + 'google.bs': true, + 'google.bj': true, + 'google.bi': true, + 'google.bg': true, + 'google.bf': true, + 'google.be': true, + 'google.ba': true, + 'google.az': true, + 'google.at': true, + 'google.as': true, + 'google.am': true, + 'google.al': true, + 'google.ae': true, + 'google.ad': true, + 'google.ac': true, + 'g.cn': true, + 'yt.be': true, + 'youtubegaming.com': true, + 'youtubeeducation.com': true, + 'youtube-nocookie.com': true, + 'youtu.be': true, + 'igoogle.com': true, + 'gooogle.com': true, + 'goolge.com': true, + 'googlr.com': true, + 'googlesyndication.com': true, + 'googlesource.com': true, + 'googlescholar.com': true, + 'googlepagecreator.com': true, + 'googlemembers.com': true, + 'googlemember.com': true, + 'googlemaps.com': true, + 'googlemail.com': true, + 'googleearth.com': true, + 'googlee.com': true, + 'googledrive.com': true, + 'googlecommerce.com': true, + 'googlecode.com': true, + 'googlebot.com': true, + 'googlearth.com': true, + 'googleapps.com': true, + 'googleapis.com': true, + 'googleanalytics.com': true, + 'googleadservices.com': true, + 'google.org': true, + 'google.net': true, + 'google-analytics.com': true, + 'googl.com': true, + 'googil.com': true, + 'googel.com': true, + 'goo.gl': true, + 'gogole.com': true, + 'gogle.com': true, + 'gmail.com': true, + 'ggoogle.com': true, + 'g.co': true, + 'android.com': true, + 'developer.android.com': true, +}; + // Supported charsets for TextDecoder() // https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder/TextDecoder const EncodingTypes = { diff --git a/core/interceptor.js b/core/interceptor.js index 83fec9f3..feb07d6e 100644 --- a/core/interceptor.js +++ b/core/interceptor.js @@ -32,7 +32,7 @@ var interceptor = {}; interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) { let validCandidate, targetDetails, targetDomain, isGoogleFont, isGoogleMaterialIcons, initiatorDomain, isListed, - iframe; + iframe, isGoogleDomain; iframe = ''; if (tab.url !== requestDetails.originUrl) { @@ -95,8 +95,9 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) { if (BrowserType.FIREFOX && isGoogleFont && !isGoogleMaterialIcons) { initiatorDomain = helpers.extractDomainFromUrl(tab.url, true); isListed = helpers.checkAllowlisted(initiatorDomain, interceptor.allowedDomainsGoogleFonts); + isGoogleDomain = helpers.isGoogleDomain(initiatorDomain); // Check if the website is allowed to load Google Fonts - if (interceptor.blockGoogleFonts === true && isListed === false) { + if (interceptor.blockGoogleFonts === true && isListed === false && isGoogleDomain === false) { console.log(`${LogString.PREFIX} Google fonts blocked ${requestDetails.url}`); log.append(tab.url, requestDetails.url, '-', true, iframe); interceptor._handleMissingCandidate(requestDetails.url, tabIdentifier); @@ -104,6 +105,11 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) { return { 'redirectUrl': chrome.runtime.getURL('resources/google-fonts-placeholder.css') }; + } else if (isGoogleDomain === true) { + console.log(`${LogString.PREFIX} Google fonts allowed, because Google Website ${initiatorDomain}`); + return { + 'cancel': false + }; } else if (interceptor.blockGoogleFonts === false || isListed === true) { return { 'cancel': false diff --git a/core/mappings.js b/core/mappings.js index cc361145..48cc8123 100644 --- a/core/mappings.js +++ b/core/mappings.js @@ -272,6 +272,7 @@ mappings.cdn = { 'bootstrap/{version}/bootstrap.js': resources.bootstrapJS, 'bootstrap/{version}/bootstrap.min.css': resources.bootstrapCSS, 'bootstrap/{version}/bootstrap.css': resources.bootstrapCSS, + 'bootswatch/{version}/flatly/': resources.bootswatchFlatly, 'bowser/{version}/': resources.bowserJS, 'bower-angular-translate/{version}/angular-translate.': resources.angularTranslate, 'bower-angular-translate-loader-partial/{version}/angular-translate-loader-partial.': resources.angularTranslateLoaderPartial, @@ -299,6 +300,7 @@ mappings.cdn = { 'corejs-typeahead/{version}/typeahead.bundle.': resources.corejsTypeahead, 'd3/{version}/d3.min.js': resources.d3JS, 'd3-legend/{version}/d3-legend.': resources.d3legend, + 'datatables/{version}/': resources.datatables, 'dayjs/{version}/dayjs.': resources.dayjs, 'dexie/{version}/dexie.': resources.dexie, 'docsearch.js/{version}/docsearch.min.js': resources.docsearchJS, @@ -601,6 +603,7 @@ mappings.cdn = { 'bootstrap@{version}/dist/css/bootstrap.': resources.bootstrapCSS, 'bootstrap-icons@{version}/font/bootstrap-icons.css': resources.bootstrapIcons, 'bootstrap-icons@{version}/font/bootstrap-icons.min.css': resources.bootstrapIcons, + 'bootstrap-select@{version}/dist/css/bootstrap-select.': resources.bootstrapSelectCSS, 'bootstrap-select@{version}/dist/js/bootstrap-select.': resources.bootstrapSelectJS, 'bootstrap-table@{version}/dist/bootstrap-table.min.js': resources.bootstrapTableJS, 'bootstrap-table@{version}/dist/bootstrap-table.js': resources.bootstrapTableJS, @@ -657,6 +660,9 @@ mappings.cdn = { 'jquery-ui-dist@{version}/jquery-ui.js': resources.jQueryUI, 'jquery-ui-dist@{version}/jquery-ui.min.js': resources.jQueryUI, 'jquery-validation@{version}/dist/jquery.validate.': resources.jqueryValidationPlugin, + 'js-cookie@{version}/dist/js.cookie.js': resources.jscookie, + 'js-cookie@{version}/dist/js.cookie.min.js': resources.jscookie, + 'js-cookie@{version}/src/js.cookie.': resources.jscookie, 'leaflet@{version}/dist/leaflet.js': resources.leafletJS, 'leaflet@{version}/dist/leaflet.css': resources.leafletCSS, 'leaflet-easybutton@{version}/src/easy-button.js': resources.leafletEasyButton, diff --git a/manifest.json b/manifest.json index b394bd0a..75bfb6ca 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "LocalCDN", - "version": "2.6.57", + "version": "2.6.58", "browser_specific_settings": { "gecko": { "id": "{b86e4813-687a-43e6-ab65-0bde4ab75758}", diff --git a/modules/internal/helpers.js b/modules/internal/helpers.js index 90eaa62b..5799b0fc 100644 --- a/modules/internal/helpers.js +++ b/modules/internal/helpers.js @@ -294,3 +294,7 @@ helpers.compareVersion = function (v1, v2) { } return v1.length === v2.length ? true : v1.length < v2.length ? false : true; }; + +helpers.isGoogleDomain = function (initiatorDomain) { + return GoogleDomains[initiatorDomain.replace('www.', '')] || false; +}; diff --git a/modules/internal/targets.js b/modules/internal/targets.js index 11cd6b7a..b895f65e 100644 --- a/modules/internal/targets.js +++ b/modules/internal/targets.js @@ -82,7 +82,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/algoliasearch/3.')) return '3.35.1'; if (type.startsWith('/algoliasearch/4.')) return '4.20.0'; if (type.startsWith('/alpinejs/2.')) return '2.8.2'; - if (type.startsWith('/alpinejs/3.')) return '3.13.1'; + if (type.startsWith('/alpinejs/3.')) return '3.13.2'; if (type.startsWith('/anchor-js/3.')) return '3.2.2'; if (type.startsWith('/anchor-js/4.')) return '4.3.1'; if (type.startsWith('/anchor-js/5.')) return '5.0.0'; @@ -136,7 +136,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/appboy-web-sdk/3.')) return '3.5.1'; if (type.startsWith('/asciinema-player/2.')) return '2.6.1'; if (type.startsWith('/axios/0.')) return '0.27.2'; - if (type.startsWith('/axios/1.')) return '1.5.1'; + if (type.startsWith('/axios/1.')) return '1.6.0'; if (type.startsWith('/backbone.js/0.')) return '0.9.10'; if (type.startsWith('/backbone.js/1.')) return '1.5.0'; if (type.startsWith('/baguettebox.js/1.')) return '1.11.1'; @@ -237,7 +237,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/instantsearch.css/7.')) return '7.4.5'; if (type.startsWith('/instantsearch.css/8.')) return '8.1.0'; if (type.startsWith('/instantsearch.js/3.')) return '3.7.0'; - if (type.startsWith('/instantsearch.js/4.')) return '4.58.0'; + if (type.startsWith('/instantsearch.js/4.')) return '4.59.0'; if (type.startsWith('/in-view/0.')) return '0.6.1'; if (type.startsWith('/iScroll/5.')) return '5.2.0'; if (type.startsWith('/izimodal/1.')) return '1.6.1'; @@ -313,7 +313,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/Leaflet.EasyButton/2.')) return '2.4.0'; if (type.startsWith('/leaflet.featuregroup.subgroup/1.')) return '1.0.2'; if (type.startsWith('/leaflet.markercluster/1.')) return '1.5.3'; - if (type.startsWith('/libphonenumber-js/1.')) return '1.10.47'; + if (type.startsWith('/libphonenumber-js/1.')) return '1.10.49'; if (type.startsWith('/libsodium-wrappers/0.')) return '0.5.4'; if (type.startsWith('/lightbox2/2.')) return '2.11.4'; if (type.startsWith('/lightcase/2.')) return '2.5.0'; @@ -369,7 +369,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/owl-carousel/2.')) return '2.3.4'; if (type.startsWith('/p2p-media-loader-core') || type.startsWith('/p2p-media-loader-hlsjs')) return '0.6.2'; if (type.startsWith('/p5.js/0.')) return '0.10.2'; - if (type.startsWith('/p5.js/1.')) return '1.7.0'; + if (type.startsWith('/p5.js/1.')) return '1.8.0'; if (type.startsWith('/page.js/1.')) return '1.11.6'; if (type.startsWith('/paginationjs/2.')) return '2.6.0'; if (type.startsWith('/plyr/3.')) return '3.7.8'; @@ -392,12 +392,12 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/react-dom/18.')) return '18.2.0'; if (type.startsWith('/react-intl/')) { // NOTE: Parameters swapped. (= anything greater than v5.0.0) - if (helpers.compareVersion(version, '5.0.0')) return '6.4.7'; // >= v5.0.0 + if (helpers.compareVersion(version, '5.0.0')) return '6.5.1'; // >= v5.0.0 } if (type.startsWith('/react-redux/7.')) return '7.2.8'; if (type.startsWith('/react-redux/8.')) return '8.1.3'; if (type.startsWith('/react-router/5.')) return '5.3.3'; - if (type.startsWith('/react-router/6.')) return '6.16.0'; + if (type.startsWith('/react-router/6.')) return '6.17.0'; if (type.startsWith('/react-side-effect/')) return '2.1.2'; if (type.startsWith('/react-lifecycles-compat/')) return '3.0.4'; if (type.startsWith('/redux/4.')) return '4.2.1'; @@ -406,7 +406,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/scriptaculous/1.')) return '1.9.0'; if (type.startsWith('/ScrollMagic/2.')) return '2.0.8'; if (type.startsWith('/search-insights/1.')) return '1.10.0'; - if (type.startsWith('/search-insights/2.')) return '2.8.3'; + if (type.startsWith('/search-insights/2.')) return '2.9.0'; if (type.startsWith('/select2/3.')) return '3.5.4'; if (type.startsWith('/select2/4.')) return '4.0.13'; if (type.startsWith('/semantic-ui/2.')) return '2.5.0'; @@ -434,7 +434,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/sticky-js/')) return '1.3.0'; if (type.startsWith('/store.js/2.')) return '2.0.12'; if (type.startsWith('/swagger-ui/4.')) return '4.18.3'; - if (type.startsWith('/swagger-ui/5.')) return '5.9.0'; + if (type.startsWith('/swagger-ui/5.')) return '5.9.1'; if (type.startsWith('/swfobject/2.')) return '2.2'; if (type.startsWith('/Swiper/3.')) return '3.4.2'; if (type.startsWith('/Swiper/4.')) return '4.5.1'; @@ -443,14 +443,14 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/Swiper/7.')) return '7.4.1'; if (type.startsWith('/Swiper/8.')) return '8.4.7'; if (type.startsWith('/Swiper/9.')) return '9.4.1'; - if (type.startsWith('/Swiper/10.') || type.startsWith('/Swiper/')) return '10.3.1'; + if (type.startsWith('/Swiper/10.') || type.startsWith('/Swiper/11.') || type.startsWith('/Swiper/')) return '11.0.3'; if (type.startsWith('/tensorflow/')) { // NOTE: Parameters swapped. (= anything greater than v2.0.0) - if (helpers.compareVersion(version, '2.0.0')) return '4.11.0'; // >= v2.0.0 + if (helpers.compareVersion(version, '2.0.0')) return '4.12.0'; // >= v2.0.0 } if (type.startsWith('/tether/1.')) return '1.4.7'; if (type.startsWith('/tinymce/5.')) return '5.10.5'; - if (type.startsWith('/tinymce/6.')) return '6.7.0'; + if (type.startsWith('/tinymce/6.')) return '6.7.2'; if (type.startsWith('/tooltipster/3.')) return '3.3.0'; if (type.startsWith('/tooltipster/4.')) return '4.2.8'; if (type.startsWith('/toastr.js/2.') || type.startsWith('/toastr.js/latest/')) return '2.1.4'; @@ -471,7 +471,7 @@ targets.setLastVersion = function (type, version) { if (type.startsWith('/underscore.js/1.')) return '1.13.6'; if (type.startsWith('/URI.js/1.')) return '1.19.11'; if (type.startsWith('/urlive/1.')) return '1.1.1'; - if (type.startsWith('/vanilla-lazyload')) return '17.8.4'; + if (type.startsWith('/vanilla-lazyload')) return '17.8.5'; if (type.startsWith('/vex-js/3.')) return '3.1.1'; if (type.startsWith('/vex-js/4.')) return '4.1.0'; if (type.startsWith('/videojs-seek-buttons/1.')) return '1.6.0'; @@ -482,13 +482,13 @@ targets.setLastVersion = function (type, version) { if (helpers.compareVersion('5.20.5', version)) return '5.20.5'; // <= 5.20.5 if (helpers.compareVersion('6.13.0', version)) return '6.13.0'; // > 5.20.5 to <= 6.13.0 if (helpers.compareVersion('7.21.1', version)) return '7.21.1'; // > 6.13.0 to <= 7.21.1 - return '8.6.0'; + return '8.6.1'; } if (type.startsWith('/vue/1.')) return '1.0.28'; if (type.startsWith('/vue/2.')) return '2.6.14'; - if (type.startsWith('/vue/3.')) return '3.3.4'; + if (type.startsWith('/vue/3.')) return '3.3.7'; if (type.startsWith('/vue-i18n/8.')) return '8.27.2'; - if (type.startsWith('/vue-i18n/9.')) return '9.5.0'; + if (type.startsWith('/vue-i18n/9.')) return '9.6.1'; if (type.startsWith('/vue-match-media/1.')) return '1.0.3'; if (type.startsWith('/vue-resource/1.')) return '1.5.3'; if (type.startsWith('/vue-router/3.')) return '3.6.5'; diff --git a/pages/options/options-other.js b/pages/options/options-other.js index f5414b5a..7f0ef3cd 100644 --- a/pages/options/options-other.js +++ b/pages/options/options-other.js @@ -34,7 +34,11 @@ optionsOther._renderIconSection = function (opt) { return; } - selectedIcon = opt.selectedIcon; + if (opt.selectedIcon === null || opt.selectedIcon === undefined) { + selectedIcon = 'Default'; + } else { + selectedIcon = opt.selectedIcon; + } if (selectedIcon === 'Default') { document.getElementById('icon-default').checked = true; diff --git a/pages/options/options.js b/pages/options/options.js index 0bdc530d..5eb95882 100644 --- a/pages/options/options.js +++ b/pages/options/options.js @@ -196,7 +196,7 @@ options._configureLinkPrefetching = function (value) { }; options._serializeAllowlistedDomains = function (allowlistedDomains) { - if (allowlistedDomains === undefined) { + if (allowlistedDomains === undefined || allowlistedDomains === null) { return ''; } diff --git a/pages/popup/popup.js b/pages/popup/popup.js index fea1d291..975b08a0 100644 --- a/pages/popup/popup.js +++ b/pages/popup/popup.js @@ -145,7 +145,7 @@ popup._renderDomainAllowlistPanel = function () { googleFontsToggleElement = document.getElementById('google-fonts-toggle-switch'); - if (popup._blockGoogleFonts === false) { + if (popup._blockGoogleFonts === false || helpers.isGoogleDomain(popup._domain) === true) { document.getElementById('div-google-fonts').hidden = true; } @@ -295,7 +295,9 @@ popup._determineStatusGoogleFonts = function () { }; chrome.runtime.sendMessage(message, function (response) { - popup._domainGoogleFonts = response.value; + if (response !== undefined) { + popup._domainGoogleFonts = response.value; + } resolve(); }); }); diff --git a/pages/updates/updates.html b/pages/updates/updates.html index 416f36e0..5ea66c4d 100644 --- a/pages/updates/updates.html +++ b/pages/updates/updates.html @@ -27,24 +27,34 @@

Updated

Improved

+

Mapping

+
@@ -83,6 +93,28 @@
+ Previous Versions
+

2023-10-12 (v2.6.57)

+

Updated

+ +

Improved

+

2023-09-23 (v2.6.56)

Updated