diff --git a/admin/themes/default/fonts/FontAwesome.otf b/admin/themes/default/fonts/FontAwesome.otf index f7936cc1e7..401ec0f36e 100644 Binary files a/admin/themes/default/fonts/FontAwesome.otf and b/admin/themes/default/fonts/FontAwesome.otf differ diff --git a/admin/themes/default/fonts/fontawesome-webfont.eot b/admin/themes/default/fonts/fontawesome-webfont.eot index 33b2bb8005..e9f60ca953 100644 Binary files a/admin/themes/default/fonts/fontawesome-webfont.eot and b/admin/themes/default/fonts/fontawesome-webfont.eot differ diff --git a/admin/themes/default/fonts/fontawesome-webfont.svg b/admin/themes/default/fonts/fontawesome-webfont.svg index 1ee89d4368..855c845e53 100644 --- a/admin/themes/default/fonts/fontawesome-webfont.svg +++ b/admin/themes/default/fonts/fontawesome-webfont.svg @@ -1,565 +1,2671 @@ - - + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/themes/default/fonts/fontawesome-webfont.ttf b/admin/themes/default/fonts/fontawesome-webfont.ttf index ed9372f8ea..35acda2fa1 100644 Binary files a/admin/themes/default/fonts/fontawesome-webfont.ttf and b/admin/themes/default/fonts/fontawesome-webfont.ttf differ diff --git a/admin/themes/default/fonts/fontawesome-webfont.woff b/admin/themes/default/fonts/fontawesome-webfont.woff index 8b280b98fa..400014a4b0 100644 Binary files a/admin/themes/default/fonts/fontawesome-webfont.woff and b/admin/themes/default/fonts/fontawesome-webfont.woff differ diff --git a/admin/themes/default/fonts/fontawesome-webfont.woff2 b/admin/themes/default/fonts/fontawesome-webfont.woff2 index 3311d58514..4d13fc6040 100644 Binary files a/admin/themes/default/fonts/fontawesome-webfont.woff2 and b/admin/themes/default/fonts/fontawesome-webfont.woff2 differ diff --git a/admin/themes/default/sass/vendor/font-awesome/_bordered-pulled.scss b/admin/themes/default/sass/vendor/font-awesome/_bordered-pulled.scss index 9d3fdf3a0b..d4b85a02f2 100644 --- a/admin/themes/default/sass/vendor/font-awesome/_bordered-pulled.scss +++ b/admin/themes/default/sass/vendor/font-awesome/_bordered-pulled.scss @@ -7,6 +7,15 @@ border-radius: .1em; } +.#{$fa-css-prefix}-pull-left { float: left; } +.#{$fa-css-prefix}-pull-right { float: right; } + +.#{$fa-css-prefix} { + &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } + &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } diff --git a/admin/themes/default/sass/vendor/font-awesome/_core.scss b/admin/themes/default/sass/vendor/font-awesome/_core.scss index 5a2db9d561..7425ef85fc 100644 --- a/admin/themes/default/sass/vendor/font-awesome/_core.scss +++ b/admin/themes/default/sass/vendor/font-awesome/_core.scss @@ -3,11 +3,10 @@ .#{$fa-css-prefix} { display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox } diff --git a/admin/themes/default/sass/vendor/font-awesome/_icons.scss b/admin/themes/default/sass/vendor/font-awesome/_icons.scss index fbcfe81237..e63e702c4d 100644 --- a/admin/themes/default/sass/vendor/font-awesome/_icons.scss +++ b/admin/themes/default/sass/vendor/font-awesome/_icons.scss @@ -163,6 +163,7 @@ .#{$fa-css-prefix}-github:before { content: $fa-var-github; } .#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } .#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } +.#{$fa-css-prefix}-feed:before, .#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } .#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } .#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } @@ -437,7 +438,7 @@ .#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } .#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } .#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } -.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } +.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; } .#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } .#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } .#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } @@ -487,11 +488,14 @@ .#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } .#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } .#{$fa-css-prefix}-ra:before, +.#{$fa-css-prefix}-resistance:before, .#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } .#{$fa-css-prefix}-ge:before, .#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } .#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } .#{$fa-css-prefix}-git:before { content: $fa-var-git; } +.#{$fa-css-prefix}-y-combinator-square:before, +.#{$fa-css-prefix}-yc-square:before, .#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } .#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } .#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } @@ -502,7 +506,6 @@ .#{$fa-css-prefix}-send-o:before, .#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } .#{$fa-css-prefix}-history:before { content: $fa-var-history; } -.#{$fa-css-prefix}-genderless:before, .#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } .#{$fa-css-prefix}-header:before { content: $fa-var-header; } .#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } @@ -573,6 +576,7 @@ .#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } .#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } .#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } +.#{$fa-css-prefix}-intersex:before, .#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } .#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } .#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } @@ -582,6 +586,7 @@ .#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } .#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } .#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } +.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } .#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } .#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } .#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } @@ -594,3 +599,191 @@ .#{$fa-css-prefix}-train:before { content: $fa-var-train; } .#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } .#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } +.#{$fa-css-prefix}-yc:before, +.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } +.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } +.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } +.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } +.#{$fa-css-prefix}-battery-4:before, +.#{$fa-css-prefix}-battery:before, +.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } +.#{$fa-css-prefix}-battery-3:before, +.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } +.#{$fa-css-prefix}-battery-2:before, +.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } +.#{$fa-css-prefix}-battery-1:before, +.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } +.#{$fa-css-prefix}-battery-0:before, +.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } +.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } +.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } +.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } +.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } +.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } +.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } +.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } +.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } +.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } +.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } +.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } +.#{$fa-css-prefix}-hourglass-1:before, +.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } +.#{$fa-css-prefix}-hourglass-2:before, +.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } +.#{$fa-css-prefix}-hourglass-3:before, +.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } +.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } +.#{$fa-css-prefix}-hand-grab-o:before, +.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } +.#{$fa-css-prefix}-hand-stop-o:before, +.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } +.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } +.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } +.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } +.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } +.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } +.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } +.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } +.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } +.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } +.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } +.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } +.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } +.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } +.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } +.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } +.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } +.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } +.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } +.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } +.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } +.#{$fa-css-prefix}-tv:before, +.#{$fa-css-prefix}-television:before { content: $fa-var-television; } +.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } +.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } +.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } +.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } +.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } +.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } +.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } +.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } +.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } +.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } +.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } +.#{$fa-css-prefix}-map:before { content: $fa-var-map; } +.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } +.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } +.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } +.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } +.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } +.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } +.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } +.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } +.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } +.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } +.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } +.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } +.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } +.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } +.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } +.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } +.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } +.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } +.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } +.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } +.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } +.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } +.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } +.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } +.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } +.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } +.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; } +.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; } +.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; } +.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; } +.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; } +.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; } +.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; } +.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; } +.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; } +.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; } +.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; } +.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; } +.#{$fa-css-prefix}-asl-interpreting:before, +.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; } +.#{$fa-css-prefix}-deafness:before, +.#{$fa-css-prefix}-hard-of-hearing:before, +.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; } +.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; } +.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; } +.#{$fa-css-prefix}-signing:before, +.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; } +.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; } +.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; } +.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; } +.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; } +.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; } +.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; } +.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } +.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; } +.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; } +.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; } +.#{$fa-css-prefix}-google-plus-circle:before, +.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; } +.#{$fa-css-prefix}-fa:before, +.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; } +.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; } +.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; } +.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; } +.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; } +.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; } +.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; } +.#{$fa-css-prefix}-vcard:before, +.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; } +.#{$fa-css-prefix}-vcard-o:before, +.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; } +.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; } +.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; } +.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; } +.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; } +.#{$fa-css-prefix}-drivers-license:before, +.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; } +.#{$fa-css-prefix}-drivers-license-o:before, +.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; } +.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; } +.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; } +.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; } +.#{$fa-css-prefix}-thermometer-4:before, +.#{$fa-css-prefix}-thermometer:before, +.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; } +.#{$fa-css-prefix}-thermometer-3:before, +.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; } +.#{$fa-css-prefix}-thermometer-2:before, +.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; } +.#{$fa-css-prefix}-thermometer-1:before, +.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; } +.#{$fa-css-prefix}-thermometer-0:before, +.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; } +.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; } +.#{$fa-css-prefix}-bathtub:before, +.#{$fa-css-prefix}-s15:before, +.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; } +.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; } +.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; } +.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; } +.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; } +.#{$fa-css-prefix}-times-rectangle:before, +.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; } +.#{$fa-css-prefix}-times-rectangle-o:before, +.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; } +.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; } +.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; } +.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; } +.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; } +.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; } +.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; } +.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; } +.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; } +.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; } +.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; } +.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; } diff --git a/admin/themes/default/sass/vendor/font-awesome/_mixins.scss b/admin/themes/default/sass/vendor/font-awesome/_mixins.scss index 6b7f160931..c3bbd5745d 100644 --- a/admin/themes/default/sass/vendor/font-awesome/_mixins.scss +++ b/admin/themes/default/sass/vendor/font-awesome/_mixins.scss @@ -3,25 +3,58 @@ @mixin fa-icon() { display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox } @mixin fa-icon-rotate($degrees, $rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; -webkit-transform: rotate($degrees); -ms-transform: rotate($degrees); transform: rotate($degrees); } @mixin fa-icon-flip($horiz, $vert, $rotation) { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; -webkit-transform: scale($horiz, $vert); -ms-transform: scale($horiz, $vert); transform: scale($horiz, $vert); } + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +@mixin sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// +// Credit: HTML5 Boilerplate + +@mixin sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/admin/themes/default/sass/vendor/font-awesome/_screen-reader.scss b/admin/themes/default/sass/vendor/font-awesome/_screen-reader.scss new file mode 100644 index 0000000000..637426f0da --- /dev/null +++ b/admin/themes/default/sass/vendor/font-awesome/_screen-reader.scss @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { @include sr-only(); } +.sr-only-focusable { @include sr-only-focusable(); } diff --git a/admin/themes/default/sass/vendor/font-awesome/_variables.scss b/admin/themes/default/sass/vendor/font-awesome/_variables.scss index 7778fe14a2..07ff1c3f2d 100644 --- a/admin/themes/default/sass/vendor/font-awesome/_variables.scss +++ b/admin/themes/default/sass/vendor/font-awesome/_variables.scss @@ -2,22 +2,29 @@ // -------------------------- $fa-font-path: "../fonts" !default; -$img-path: "../img" !default; $fa-font-size-base: 14px !default; -//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts" !default; // for referencing Bootstrap CDN font files directly -$fa-css-prefix: fa !default; -$fa-version: "4.3.0" !default; +$fa-line-height-base: 1 !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-css-prefix: icon !default; +$fa-version: "4.7.0" !default; $fa-border-color: #eee !default; $fa-inverse: #fff !default; $fa-li-width: (30em / 14) !default; +$fa-var-500px: "\f26e"; +$fa-var-address-book: "\f2b9"; +$fa-var-address-book-o: "\f2ba"; +$fa-var-address-card: "\f2bb"; +$fa-var-address-card-o: "\f2bc"; $fa-var-adjust: "\f042"; $fa-var-adn: "\f170"; $fa-var-align-center: "\f037"; $fa-var-align-justify: "\f039"; $fa-var-align-left: "\f036"; $fa-var-align-right: "\f038"; +$fa-var-amazon: "\f270"; $fa-var-ambulance: "\f0f9"; +$fa-var-american-sign-language-interpreting: "\f2a3"; $fa-var-anchor: "\f13d"; $fa-var-android: "\f17b"; $fa-var-angellist: "\f209"; @@ -48,16 +55,34 @@ $fa-var-arrows: "\f047"; $fa-var-arrows-alt: "\f0b2"; $fa-var-arrows-h: "\f07e"; $fa-var-arrows-v: "\f07d"; +$fa-var-asl-interpreting: "\f2a3"; +$fa-var-assistive-listening-systems: "\f2a2"; $fa-var-asterisk: "\f069"; $fa-var-at: "\f1fa"; +$fa-var-audio-description: "\f29e"; $fa-var-automobile: "\f1b9"; $fa-var-backward: "\f04a"; +$fa-var-balance-scale: "\f24e"; $fa-var-ban: "\f05e"; +$fa-var-bandcamp: "\f2d5"; $fa-var-bank: "\f19c"; $fa-var-bar-chart: "\f080"; $fa-var-bar-chart-o: "\f080"; $fa-var-barcode: "\f02a"; $fa-var-bars: "\f0c9"; +$fa-var-bath: "\f2cd"; +$fa-var-bathtub: "\f2cd"; +$fa-var-battery: "\f240"; +$fa-var-battery-0: "\f244"; +$fa-var-battery-1: "\f243"; +$fa-var-battery-2: "\f242"; +$fa-var-battery-3: "\f241"; +$fa-var-battery-4: "\f240"; +$fa-var-battery-empty: "\f244"; +$fa-var-battery-full: "\f240"; +$fa-var-battery-half: "\f242"; +$fa-var-battery-quarter: "\f243"; +$fa-var-battery-three-quarters: "\f241"; $fa-var-bed: "\f236"; $fa-var-beer: "\f0fc"; $fa-var-behance: "\f1b4"; @@ -72,12 +97,17 @@ $fa-var-birthday-cake: "\f1fd"; $fa-var-bitbucket: "\f171"; $fa-var-bitbucket-square: "\f172"; $fa-var-bitcoin: "\f15a"; +$fa-var-black-tie: "\f27e"; +$fa-var-blind: "\f29d"; +$fa-var-bluetooth: "\f293"; +$fa-var-bluetooth-b: "\f294"; $fa-var-bold: "\f032"; $fa-var-bolt: "\f0e7"; $fa-var-bomb: "\f1e2"; $fa-var-book: "\f02d"; $fa-var-bookmark: "\f02e"; $fa-var-bookmark-o: "\f097"; +$fa-var-braille: "\f2a1"; $fa-var-briefcase: "\f0b1"; $fa-var-btc: "\f15a"; $fa-var-bug: "\f188"; @@ -90,7 +120,11 @@ $fa-var-buysellads: "\f20d"; $fa-var-cab: "\f1ba"; $fa-var-calculator: "\f1ec"; $fa-var-calendar: "\f073"; +$fa-var-calendar-check-o: "\f274"; +$fa-var-calendar-minus-o: "\f272"; $fa-var-calendar-o: "\f133"; +$fa-var-calendar-plus-o: "\f271"; +$fa-var-calendar-times-o: "\f273"; $fa-var-camera: "\f030"; $fa-var-camera-retro: "\f083"; $fa-var-car: "\f1b9"; @@ -106,7 +140,9 @@ $fa-var-cart-arrow-down: "\f218"; $fa-var-cart-plus: "\f217"; $fa-var-cc: "\f20a"; $fa-var-cc-amex: "\f1f3"; +$fa-var-cc-diners-club: "\f24c"; $fa-var-cc-discover: "\f1f2"; +$fa-var-cc-jcb: "\f24b"; $fa-var-cc-mastercard: "\f1f1"; $fa-var-cc-paypal: "\f1f4"; $fa-var-cc-stripe: "\f1f5"; @@ -128,12 +164,14 @@ $fa-var-chevron-left: "\f053"; $fa-var-chevron-right: "\f054"; $fa-var-chevron-up: "\f077"; $fa-var-child: "\f1ae"; +$fa-var-chrome: "\f268"; $fa-var-circle: "\f111"; $fa-var-circle-o: "\f10c"; $fa-var-circle-o-notch: "\f1ce"; $fa-var-circle-thin: "\f1db"; $fa-var-clipboard: "\f0ea"; $fa-var-clock-o: "\f017"; +$fa-var-clone: "\f24d"; $fa-var-close: "\f00d"; $fa-var-cloud: "\f0c2"; $fa-var-cloud-download: "\f0ed"; @@ -142,20 +180,26 @@ $fa-var-cny: "\f157"; $fa-var-code: "\f121"; $fa-var-code-fork: "\f126"; $fa-var-codepen: "\f1cb"; +$fa-var-codiepie: "\f284"; $fa-var-coffee: "\f0f4"; $fa-var-cog: "\f013"; $fa-var-cogs: "\f085"; $fa-var-columns: "\f0db"; $fa-var-comment: "\f075"; $fa-var-comment-o: "\f0e5"; +$fa-var-commenting: "\f27a"; +$fa-var-commenting-o: "\f27b"; $fa-var-comments: "\f086"; $fa-var-comments-o: "\f0e6"; $fa-var-compass: "\f14e"; $fa-var-compress: "\f066"; $fa-var-connectdevelop: "\f20e"; +$fa-var-contao: "\f26d"; $fa-var-copy: "\f0c5"; $fa-var-copyright: "\f1f9"; +$fa-var-creative-commons: "\f25e"; $fa-var-credit-card: "\f09d"; +$fa-var-credit-card-alt: "\f283"; $fa-var-crop: "\f125"; $fa-var-crosshairs: "\f05b"; $fa-var-css3: "\f13c"; @@ -166,6 +210,8 @@ $fa-var-cutlery: "\f0f5"; $fa-var-dashboard: "\f0e4"; $fa-var-dashcube: "\f210"; $fa-var-database: "\f1c0"; +$fa-var-deaf: "\f2a4"; +$fa-var-deafness: "\f2a4"; $fa-var-dedent: "\f03b"; $fa-var-delicious: "\f1a5"; $fa-var-desktop: "\f108"; @@ -176,17 +222,25 @@ $fa-var-dollar: "\f155"; $fa-var-dot-circle-o: "\f192"; $fa-var-download: "\f019"; $fa-var-dribbble: "\f17d"; +$fa-var-drivers-license: "\f2c2"; +$fa-var-drivers-license-o: "\f2c3"; $fa-var-dropbox: "\f16b"; $fa-var-drupal: "\f1a9"; +$fa-var-edge: "\f282"; $fa-var-edit: "\f044"; +$fa-var-eercast: "\f2da"; $fa-var-eject: "\f052"; $fa-var-ellipsis-h: "\f141"; $fa-var-ellipsis-v: "\f142"; $fa-var-empire: "\f1d1"; $fa-var-envelope: "\f0e0"; $fa-var-envelope-o: "\f003"; +$fa-var-envelope-open: "\f2b6"; +$fa-var-envelope-open-o: "\f2b7"; $fa-var-envelope-square: "\f199"; +$fa-var-envira: "\f299"; $fa-var-eraser: "\f12d"; +$fa-var-etsy: "\f2d7"; $fa-var-eur: "\f153"; $fa-var-euro: "\f153"; $fa-var-exchange: "\f0ec"; @@ -194,11 +248,13 @@ $fa-var-exclamation: "\f12a"; $fa-var-exclamation-circle: "\f06a"; $fa-var-exclamation-triangle: "\f071"; $fa-var-expand: "\f065"; +$fa-var-expeditedssl: "\f23e"; $fa-var-external-link: "\f08e"; $fa-var-external-link-square: "\f14c"; $fa-var-eye: "\f06e"; $fa-var-eye-slash: "\f070"; $fa-var-eyedropper: "\f1fb"; +$fa-var-fa: "\f2b4"; $fa-var-facebook: "\f09a"; $fa-var-facebook-f: "\f09a"; $fa-var-facebook-official: "\f230"; @@ -206,6 +262,7 @@ $fa-var-facebook-square: "\f082"; $fa-var-fast-backward: "\f049"; $fa-var-fast-forward: "\f050"; $fa-var-fax: "\f1ac"; +$fa-var-feed: "\f09e"; $fa-var-female: "\f182"; $fa-var-fighter-jet: "\f0fb"; $fa-var-file: "\f15b"; @@ -231,6 +288,8 @@ $fa-var-film: "\f008"; $fa-var-filter: "\f0b0"; $fa-var-fire: "\f06d"; $fa-var-fire-extinguisher: "\f134"; +$fa-var-firefox: "\f269"; +$fa-var-first-order: "\f2b0"; $fa-var-flag: "\f024"; $fa-var-flag-checkered: "\f11e"; $fa-var-flag-o: "\f11d"; @@ -243,9 +302,13 @@ $fa-var-folder-o: "\f114"; $fa-var-folder-open: "\f07c"; $fa-var-folder-open-o: "\f115"; $fa-var-font: "\f031"; +$fa-var-font-awesome: "\f2b4"; +$fa-var-fonticons: "\f280"; +$fa-var-fort-awesome: "\f286"; $fa-var-forumbee: "\f211"; $fa-var-forward: "\f04e"; $fa-var-foursquare: "\f180"; +$fa-var-free-code-camp: "\f2c5"; $fa-var-frown-o: "\f119"; $fa-var-futbol-o: "\f1e3"; $fa-var-gamepad: "\f11b"; @@ -254,29 +317,50 @@ $fa-var-gbp: "\f154"; $fa-var-ge: "\f1d1"; $fa-var-gear: "\f013"; $fa-var-gears: "\f085"; -$fa-var-genderless: "\f1db"; +$fa-var-genderless: "\f22d"; +$fa-var-get-pocket: "\f265"; +$fa-var-gg: "\f260"; +$fa-var-gg-circle: "\f261"; $fa-var-gift: "\f06b"; $fa-var-git: "\f1d3"; $fa-var-git-square: "\f1d2"; $fa-var-github: "\f09b"; $fa-var-github-alt: "\f113"; $fa-var-github-square: "\f092"; +$fa-var-gitlab: "\f296"; $fa-var-gittip: "\f184"; $fa-var-glass: "\f000"; +$fa-var-glide: "\f2a5"; +$fa-var-glide-g: "\f2a6"; $fa-var-globe: "\f0ac"; $fa-var-google: "\f1a0"; $fa-var-google-plus: "\f0d5"; +$fa-var-google-plus-circle: "\f2b3"; +$fa-var-google-plus-official: "\f2b3"; $fa-var-google-plus-square: "\f0d4"; $fa-var-google-wallet: "\f1ee"; $fa-var-graduation-cap: "\f19d"; $fa-var-gratipay: "\f184"; +$fa-var-grav: "\f2d6"; $fa-var-group: "\f0c0"; $fa-var-h-square: "\f0fd"; $fa-var-hacker-news: "\f1d4"; +$fa-var-hand-grab-o: "\f255"; +$fa-var-hand-lizard-o: "\f258"; $fa-var-hand-o-down: "\f0a7"; $fa-var-hand-o-left: "\f0a5"; $fa-var-hand-o-right: "\f0a4"; $fa-var-hand-o-up: "\f0a6"; +$fa-var-hand-paper-o: "\f256"; +$fa-var-hand-peace-o: "\f25b"; +$fa-var-hand-pointer-o: "\f25a"; +$fa-var-hand-rock-o: "\f255"; +$fa-var-hand-scissors-o: "\f257"; +$fa-var-hand-spock-o: "\f259"; +$fa-var-hand-stop-o: "\f256"; +$fa-var-handshake-o: "\f2b5"; +$fa-var-hard-of-hearing: "\f2a4"; +$fa-var-hashtag: "\f292"; $fa-var-hdd-o: "\f0a0"; $fa-var-header: "\f1dc"; $fa-var-headphones: "\f025"; @@ -287,16 +371,33 @@ $fa-var-history: "\f1da"; $fa-var-home: "\f015"; $fa-var-hospital-o: "\f0f8"; $fa-var-hotel: "\f236"; +$fa-var-hourglass: "\f254"; +$fa-var-hourglass-1: "\f251"; +$fa-var-hourglass-2: "\f252"; +$fa-var-hourglass-3: "\f253"; +$fa-var-hourglass-end: "\f253"; +$fa-var-hourglass-half: "\f252"; +$fa-var-hourglass-o: "\f250"; +$fa-var-hourglass-start: "\f251"; +$fa-var-houzz: "\f27c"; $fa-var-html5: "\f13b"; +$fa-var-i-cursor: "\f246"; +$fa-var-id-badge: "\f2c1"; +$fa-var-id-card: "\f2c2"; +$fa-var-id-card-o: "\f2c3"; $fa-var-ils: "\f20b"; $fa-var-image: "\f03e"; +$fa-var-imdb: "\f2d8"; $fa-var-inbox: "\f01c"; $fa-var-indent: "\f03c"; +$fa-var-industry: "\f275"; $fa-var-info: "\f129"; $fa-var-info-circle: "\f05a"; $fa-var-inr: "\f156"; $fa-var-instagram: "\f16d"; $fa-var-institution: "\f19c"; +$fa-var-internet-explorer: "\f26b"; +$fa-var-intersex: "\f224"; $fa-var-ioxhost: "\f208"; $fa-var-italic: "\f033"; $fa-var-joomla: "\f1aa"; @@ -324,6 +425,7 @@ $fa-var-line-chart: "\f201"; $fa-var-link: "\f0c1"; $fa-var-linkedin: "\f0e1"; $fa-var-linkedin-square: "\f08c"; +$fa-var-linode: "\f2b8"; $fa-var-linux: "\f17c"; $fa-var-list: "\f03a"; $fa-var-list-alt: "\f022"; @@ -335,13 +437,18 @@ $fa-var-long-arrow-down: "\f175"; $fa-var-long-arrow-left: "\f177"; $fa-var-long-arrow-right: "\f178"; $fa-var-long-arrow-up: "\f176"; +$fa-var-low-vision: "\f2a8"; $fa-var-magic: "\f0d0"; $fa-var-magnet: "\f076"; $fa-var-mail-forward: "\f064"; $fa-var-mail-reply: "\f112"; $fa-var-mail-reply-all: "\f122"; $fa-var-male: "\f183"; +$fa-var-map: "\f279"; $fa-var-map-marker: "\f041"; +$fa-var-map-o: "\f278"; +$fa-var-map-pin: "\f276"; +$fa-var-map-signs: "\f277"; $fa-var-mars: "\f222"; $fa-var-mars-double: "\f227"; $fa-var-mars-stroke: "\f229"; @@ -351,25 +458,37 @@ $fa-var-maxcdn: "\f136"; $fa-var-meanpath: "\f20c"; $fa-var-medium: "\f23a"; $fa-var-medkit: "\f0fa"; +$fa-var-meetup: "\f2e0"; $fa-var-meh-o: "\f11a"; $fa-var-mercury: "\f223"; +$fa-var-microchip: "\f2db"; $fa-var-microphone: "\f130"; $fa-var-microphone-slash: "\f131"; $fa-var-minus: "\f068"; $fa-var-minus-circle: "\f056"; $fa-var-minus-square: "\f146"; $fa-var-minus-square-o: "\f147"; +$fa-var-mixcloud: "\f289"; $fa-var-mobile: "\f10b"; $fa-var-mobile-phone: "\f10b"; +$fa-var-modx: "\f285"; $fa-var-money: "\f0d6"; $fa-var-moon-o: "\f186"; $fa-var-mortar-board: "\f19d"; $fa-var-motorcycle: "\f21c"; +$fa-var-mouse-pointer: "\f245"; $fa-var-music: "\f001"; $fa-var-navicon: "\f0c9"; $fa-var-neuter: "\f22c"; $fa-var-newspaper-o: "\f1ea"; +$fa-var-object-group: "\f247"; +$fa-var-object-ungroup: "\f248"; +$fa-var-odnoklassniki: "\f263"; +$fa-var-odnoklassniki-square: "\f264"; +$fa-var-opencart: "\f23d"; $fa-var-openid: "\f19b"; +$fa-var-opera: "\f26a"; +$fa-var-optin-monster: "\f23c"; $fa-var-outdent: "\f03b"; $fa-var-pagelines: "\f18c"; $fa-var-paint-brush: "\f1fc"; @@ -379,18 +498,22 @@ $fa-var-paperclip: "\f0c6"; $fa-var-paragraph: "\f1dd"; $fa-var-paste: "\f0ea"; $fa-var-pause: "\f04c"; +$fa-var-pause-circle: "\f28b"; +$fa-var-pause-circle-o: "\f28c"; $fa-var-paw: "\f1b0"; $fa-var-paypal: "\f1ed"; $fa-var-pencil: "\f040"; $fa-var-pencil-square: "\f14b"; $fa-var-pencil-square-o: "\f044"; +$fa-var-percent: "\f295"; $fa-var-phone: "\f095"; $fa-var-phone-square: "\f098"; $fa-var-photo: "\f03e"; $fa-var-picture-o: "\f03e"; $fa-var-pie-chart: "\f200"; -$fa-var-pied-piper: "\f1a7"; +$fa-var-pied-piper: "\f2ae"; $fa-var-pied-piper-alt: "\f1a8"; +$fa-var-pied-piper-pp: "\f1a7"; $fa-var-pinterest: "\f0d2"; $fa-var-pinterest-p: "\f231"; $fa-var-pinterest-square: "\f0d3"; @@ -403,28 +526,36 @@ $fa-var-plus: "\f067"; $fa-var-plus-circle: "\f055"; $fa-var-plus-square: "\f0fe"; $fa-var-plus-square-o: "\f196"; +$fa-var-podcast: "\f2ce"; $fa-var-power-off: "\f011"; $fa-var-print: "\f02f"; +$fa-var-product-hunt: "\f288"; $fa-var-puzzle-piece: "\f12e"; $fa-var-qq: "\f1d6"; $fa-var-qrcode: "\f029"; $fa-var-question: "\f128"; $fa-var-question-circle: "\f059"; +$fa-var-question-circle-o: "\f29c"; +$fa-var-quora: "\f2c4"; $fa-var-quote-left: "\f10d"; $fa-var-quote-right: "\f10e"; $fa-var-ra: "\f1d0"; $fa-var-random: "\f074"; +$fa-var-ravelry: "\f2d9"; $fa-var-rebel: "\f1d0"; $fa-var-recycle: "\f1b8"; $fa-var-reddit: "\f1a1"; +$fa-var-reddit-alien: "\f281"; $fa-var-reddit-square: "\f1a2"; $fa-var-refresh: "\f021"; +$fa-var-registered: "\f25d"; $fa-var-remove: "\f00d"; $fa-var-renren: "\f18b"; $fa-var-reorder: "\f0c9"; $fa-var-repeat: "\f01e"; $fa-var-reply: "\f112"; $fa-var-reply-all: "\f122"; +$fa-var-resistance: "\f1d0"; $fa-var-retweet: "\f079"; $fa-var-rmb: "\f157"; $fa-var-road: "\f018"; @@ -437,8 +568,11 @@ $fa-var-rss-square: "\f143"; $fa-var-rub: "\f158"; $fa-var-ruble: "\f158"; $fa-var-rupee: "\f156"; +$fa-var-s15: "\f2cd"; +$fa-var-safari: "\f267"; $fa-var-save: "\f0c7"; $fa-var-scissors: "\f0c4"; +$fa-var-scribd: "\f28a"; $fa-var-search: "\f002"; $fa-var-search-minus: "\f010"; $fa-var-search-plus: "\f00e"; @@ -456,10 +590,15 @@ $fa-var-sheqel: "\f20b"; $fa-var-shield: "\f132"; $fa-var-ship: "\f21a"; $fa-var-shirtsinbulk: "\f214"; +$fa-var-shopping-bag: "\f290"; +$fa-var-shopping-basket: "\f291"; $fa-var-shopping-cart: "\f07a"; +$fa-var-shower: "\f2cc"; $fa-var-sign-in: "\f090"; +$fa-var-sign-language: "\f2a7"; $fa-var-sign-out: "\f08b"; $fa-var-signal: "\f012"; +$fa-var-signing: "\f2a7"; $fa-var-simplybuilt: "\f215"; $fa-var-sitemap: "\f0e8"; $fa-var-skyatlas: "\f216"; @@ -468,6 +607,10 @@ $fa-var-slack: "\f198"; $fa-var-sliders: "\f1de"; $fa-var-slideshare: "\f1e7"; $fa-var-smile-o: "\f118"; +$fa-var-snapchat: "\f2ab"; +$fa-var-snapchat-ghost: "\f2ac"; +$fa-var-snapchat-square: "\f2ad"; +$fa-var-snowflake-o: "\f2dc"; $fa-var-soccer-ball-o: "\f1e3"; $fa-var-sort: "\f0dc"; $fa-var-sort-alpha-asc: "\f15d"; @@ -500,7 +643,11 @@ $fa-var-steam-square: "\f1b7"; $fa-var-step-backward: "\f048"; $fa-var-step-forward: "\f051"; $fa-var-stethoscope: "\f0f1"; +$fa-var-sticky-note: "\f249"; +$fa-var-sticky-note-o: "\f24a"; $fa-var-stop: "\f04d"; +$fa-var-stop-circle: "\f28d"; +$fa-var-stop-circle-o: "\f28e"; $fa-var-street-view: "\f21d"; $fa-var-strikethrough: "\f0cc"; $fa-var-stumbleupon: "\f1a4"; @@ -509,6 +656,7 @@ $fa-var-subscript: "\f12c"; $fa-var-subway: "\f239"; $fa-var-suitcase: "\f0f2"; $fa-var-sun-o: "\f185"; +$fa-var-superpowers: "\f2dd"; $fa-var-superscript: "\f12b"; $fa-var-support: "\f1cd"; $fa-var-table: "\f0ce"; @@ -518,6 +666,8 @@ $fa-var-tag: "\f02b"; $fa-var-tags: "\f02c"; $fa-var-tasks: "\f0ae"; $fa-var-taxi: "\f1ba"; +$fa-var-telegram: "\f2c6"; +$fa-var-television: "\f26c"; $fa-var-tencent-weibo: "\f1d5"; $fa-var-terminal: "\f120"; $fa-var-text-height: "\f034"; @@ -525,6 +675,18 @@ $fa-var-text-width: "\f035"; $fa-var-th: "\f00a"; $fa-var-th-large: "\f009"; $fa-var-th-list: "\f00b"; +$fa-var-themeisle: "\f2b2"; +$fa-var-thermometer: "\f2c7"; +$fa-var-thermometer-0: "\f2cb"; +$fa-var-thermometer-1: "\f2ca"; +$fa-var-thermometer-2: "\f2c9"; +$fa-var-thermometer-3: "\f2c8"; +$fa-var-thermometer-4: "\f2c7"; +$fa-var-thermometer-empty: "\f2cb"; +$fa-var-thermometer-full: "\f2c7"; +$fa-var-thermometer-half: "\f2c9"; +$fa-var-thermometer-quarter: "\f2ca"; +$fa-var-thermometer-three-quarters: "\f2c8"; $fa-var-thumb-tack: "\f08d"; $fa-var-thumbs-down: "\f165"; $fa-var-thumbs-o-down: "\f088"; @@ -534,6 +696,8 @@ $fa-var-ticket: "\f145"; $fa-var-times: "\f00d"; $fa-var-times-circle: "\f057"; $fa-var-times-circle-o: "\f05c"; +$fa-var-times-rectangle: "\f2d3"; +$fa-var-times-rectangle-o: "\f2d4"; $fa-var-tint: "\f043"; $fa-var-toggle-down: "\f150"; $fa-var-toggle-left: "\f191"; @@ -541,6 +705,7 @@ $fa-var-toggle-off: "\f204"; $fa-var-toggle-on: "\f205"; $fa-var-toggle-right: "\f152"; $fa-var-toggle-up: "\f151"; +$fa-var-trademark: "\f25c"; $fa-var-train: "\f238"; $fa-var-transgender: "\f224"; $fa-var-transgender-alt: "\f225"; @@ -548,6 +713,7 @@ $fa-var-trash: "\f1f8"; $fa-var-trash-o: "\f014"; $fa-var-tree: "\f1bb"; $fa-var-trello: "\f181"; +$fa-var-tripadvisor: "\f262"; $fa-var-trophy: "\f091"; $fa-var-truck: "\f0d1"; $fa-var-try: "\f195"; @@ -555,33 +721,45 @@ $fa-var-tty: "\f1e4"; $fa-var-tumblr: "\f173"; $fa-var-tumblr-square: "\f174"; $fa-var-turkish-lira: "\f195"; +$fa-var-tv: "\f26c"; $fa-var-twitch: "\f1e8"; $fa-var-twitter: "\f099"; $fa-var-twitter-square: "\f081"; $fa-var-umbrella: "\f0e9"; $fa-var-underline: "\f0cd"; $fa-var-undo: "\f0e2"; +$fa-var-universal-access: "\f29a"; $fa-var-university: "\f19c"; $fa-var-unlink: "\f127"; $fa-var-unlock: "\f09c"; $fa-var-unlock-alt: "\f13e"; $fa-var-unsorted: "\f0dc"; $fa-var-upload: "\f093"; +$fa-var-usb: "\f287"; $fa-var-usd: "\f155"; $fa-var-user: "\f007"; +$fa-var-user-circle: "\f2bd"; +$fa-var-user-circle-o: "\f2be"; $fa-var-user-md: "\f0f0"; +$fa-var-user-o: "\f2c0"; $fa-var-user-plus: "\f234"; $fa-var-user-secret: "\f21b"; $fa-var-user-times: "\f235"; $fa-var-users: "\f0c0"; +$fa-var-vcard: "\f2bb"; +$fa-var-vcard-o: "\f2bc"; $fa-var-venus: "\f221"; $fa-var-venus-double: "\f226"; $fa-var-venus-mars: "\f228"; $fa-var-viacoin: "\f237"; +$fa-var-viadeo: "\f2a9"; +$fa-var-viadeo-square: "\f2aa"; $fa-var-video-camera: "\f03d"; +$fa-var-vimeo: "\f27d"; $fa-var-vimeo-square: "\f194"; $fa-var-vine: "\f1ca"; $fa-var-vk: "\f189"; +$fa-var-volume-control-phone: "\f2a0"; $fa-var-volume-down: "\f027"; $fa-var-volume-off: "\f026"; $fa-var-volume-up: "\f028"; @@ -591,16 +769,32 @@ $fa-var-weibo: "\f18a"; $fa-var-weixin: "\f1d7"; $fa-var-whatsapp: "\f232"; $fa-var-wheelchair: "\f193"; +$fa-var-wheelchair-alt: "\f29b"; $fa-var-wifi: "\f1eb"; +$fa-var-wikipedia-w: "\f266"; +$fa-var-window-close: "\f2d3"; +$fa-var-window-close-o: "\f2d4"; +$fa-var-window-maximize: "\f2d0"; +$fa-var-window-minimize: "\f2d1"; +$fa-var-window-restore: "\f2d2"; $fa-var-windows: "\f17a"; $fa-var-won: "\f159"; $fa-var-wordpress: "\f19a"; +$fa-var-wpbeginner: "\f297"; +$fa-var-wpexplorer: "\f2de"; +$fa-var-wpforms: "\f298"; $fa-var-wrench: "\f0ad"; $fa-var-xing: "\f168"; $fa-var-xing-square: "\f169"; +$fa-var-y-combinator: "\f23b"; +$fa-var-y-combinator-square: "\f1d4"; $fa-var-yahoo: "\f19e"; +$fa-var-yc: "\f23b"; +$fa-var-yc-square: "\f1d4"; $fa-var-yelp: "\f1e9"; $fa-var-yen: "\f157"; +$fa-var-yoast: "\f2b1"; $fa-var-youtube: "\f167"; $fa-var-youtube-play: "\f16a"; $fa-var-youtube-square: "\f166"; + diff --git a/admin/themes/default/sass/vendor/font-awesome/font-awesome.scss b/admin/themes/default/sass/vendor/font-awesome/font-awesome.scss index 388ac6b0cd..f1c83aaa5d 100644 --- a/admin/themes/default/sass/vendor/font-awesome/font-awesome.scss +++ b/admin/themes/default/sass/vendor/font-awesome/font-awesome.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ @@ -15,3 +15,4 @@ @import "rotated-flipped"; @import "stacked"; @import "icons"; +@import "screen-reader"; diff --git a/classes/controller/FrontController.php b/classes/controller/FrontController.php index 6885395fc9..f44477c2d1 100644 --- a/classes/controller/FrontController.php +++ b/classes/controller/FrontController.php @@ -428,7 +428,13 @@ public function init() } } - $languages = Language::getLanguages(true, $this->context->shop->id); + if ($languages = Language::getLanguages(true, $this->context->shop->id)) { + $languages = array_column($languages, null, 'id_lang'); + } + if ($currencies = Currency::getCurrencies()) { + $currencies = array_column($currencies, null, 'id_currency'); + } + $meta_language = array(); foreach ($languages as $lang) { $meta_language[] = $lang['iso_code']; @@ -471,7 +477,7 @@ public function init() 'lang_id' => (int)$this->context->language->id, 'come_from' => Tools::getHttpHost(true, true).Tools::htmlentitiesUTF8(str_replace(array('\'', '\\'), '', urldecode($_SERVER['REQUEST_URI']))), 'cart_qties' => (int)$cart->nbProducts(), - 'currencies' => Currency::getCurrencies(), + 'currencies' => $currencies, 'languages' => $languages, 'meta_language' => implode(',', $meta_language), 'priceDisplay' => Product::getTaxCalculationMethod((int)$this->context->cookie->id_customer), @@ -1143,7 +1149,10 @@ public function setMedia() } $this->addCSS(_THEME_CSS_DIR_.'grid_prestashop.css', 'all'); // retro compat themes 1.5.0.1 + $this->addCSS(_THEME_CSS_DIR_.'bootstrap.min.css', 'all'); + $this->addCSS(_THEME_CSS_DIR_.'icons.css', 'all'); $this->addCSS(_THEME_CSS_DIR_.'global.css', 'all'); + $this->addJquery(); $this->addJqueryPlugin('easing'); $this->addJS(_PS_JS_DIR_.'tools.js'); diff --git a/controllers/front/AuthController.php b/controllers/front/AuthController.php index 91b583007a..c9a41f6c27 100644 --- a/controllers/front/AuthController.php +++ b/controllers/front/AuthController.php @@ -33,7 +33,6 @@ class AuthControllerCore extends FrontController /** * @var bool create_account */ - protected $create_account; protected $id_country; public $informations; public $confirmations; @@ -55,10 +54,6 @@ public function init() if (!Tools::getIsset('step') && $this->context->customer->isLogged() && !$this->ajax) { Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); } - - if (Tools::getValue('create_account')) { - $this->create_account = true; - } } /** @@ -141,10 +136,6 @@ public function initContent() )); } - if (Tools::getValue('create_account')) { - $this->context->smarty->assign('email_create', 1); - } - if (Tools::getValue('multi-shipping') == 1) { $this->context->smarty->assign('multi_shipping', true); } else { @@ -154,43 +145,8 @@ public function initContent() $this->context->smarty->assign('field_required', $this->context->customer->validateFieldsRequiredDatabase()); $this->assignAddressFormat(); - - // Call a hook to display more information on form - $this->context->smarty->assign(array( - 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), - 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop') - )); - // Just set $this->template value here in case it's used by Ajax $this->setTemplate(_PS_THEME_DIR_.'authentication.tpl'); - - if ($this->ajax) { - // Call a hook to display more information on form - $this->context->smarty->assign(array( - 'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'), - 'genders' => Gender::getGenders() - )); - - $return = array( - 'hasConfirmation' => !empty($this->confirmations), - 'confirmations' => $this->confirmations, - 'hasInformation' => !empty($this->informations), - 'informations' => $this->informations, - 'hasError' => !empty($this->errors), - 'errors' => $this->errors, - 'hasAjaxExtraData' => !empty($this->ajaxExtraData), - 'ajaxExtraData' => $this->ajaxExtraData, - 'token' => Tools::getToken(false) - ); - - // send page html only if no errors in the form and we have to open registration form - // It also prevents opening html in the response in case of an error for XSS protection - if (empty($this->errors)) { - $return['page'] = $this->context->smarty->fetch($this->template); - } - - $this->ajaxDie(json_encode($return)); - } } /** @@ -272,14 +228,7 @@ protected function assignAddressFormat() */ public function postProcess() { - if (Tools::isSubmit('SubmitCreate')) { - $this->processSubmitCreate(); - } - - if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) { - $this->processSubmitAccount(); - } - + // @todo if (Tools::isSubmit('submitTransformAccount')) { $this->processTransformAccount(); } @@ -378,374 +327,6 @@ protected function processCustomerNewsletter(&$customer) } } - /** - * Process submit on an account - */ - protected function processSubmitAccount() - { - Hook::exec('actionBeforeSubmitAccount'); - $this->create_account = true; - if (Tools::isSubmit('submitAccount')) { - $this->context->smarty->assign('email_create', 1); - } - // New Guest customer - if (!Tools::getValue('is_new_customer', 1) && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) { - $this->errors[] = Tools::displayError('You cannot create a guest account.'); - } - if (!Tools::getValue('is_new_customer', 1)) { - $_POST['passwd'] = md5(time()._COOKIE_KEY_); - } - if ($guest_email = Tools::getValue('guest_email')) { - $_POST['email'] = $guest_email; - } - // Checked the user address in case he changed his email address - if (Validate::isEmail($email = Tools::getValue('email')) && !empty($email)) { - if (Customer::customerExists($email)) { - $this->errors[] = Tools::displayError('An account using this email address has already been registered.', false); - } elseif (Tools::getValue('is_new_customer', 1) && Customer::customerExists($email, false, false)) { - $this->errors[] = Tools::displayError('You are already registered as a guest with this email address.').' '.Tools::displayError('').' to generate a password for your account.'; - } - } - - if (!count($this->errors)) { - // Preparing customer - $customer = new Customer(); - $lastnameAddress = Tools::getValue('lastname'); - $firstnameAddress = Tools::getValue('firstname'); - $phoneAddress = Tools::getValue('phone'); - $_POST['lastname'] = Tools::getValue('customer_lastname', $lastnameAddress); - $_POST['firstname'] = Tools::getValue('customer_firstname', $firstnameAddress); - $_POST['phone'] = Tools::getValue('customer_phone', $phoneAddress); - $addresses_types = []; - if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE')) { - $addresses_types[] = 'address'; - } - - if (!Configuration::get('PS_ORDER_PROCESS_TYPE') && Configuration::get('PS_GUEST_CHECKOUT_ENABLED') && Tools::getValue('invoice_address')) { - $addresses_types[] = 'address_invoice'; - } - - if (Configuration::get('PS_ONE_PHONE_AT_LEAST') && !Tools::getValue('phone')) { - $this->errors[] = Tools::displayError('Phone number is required.'); - } - - if (!Tools::getValue('is_new_customer', 1)) { - if (Validate::isEmail($email = Tools::getValue('email')) - && $idCustomer = Customer::customerExists(Tools::getValue('email'), true, false) - ) { - $customer = new Customer($idCustomer); - } - } - - $this->errors = array_unique(array_merge($this->errors, $customer->validateController())); - - // Check the requires fields which are settings in the BO - $this->errors = $this->errors + $customer->validateFieldsRequiredDatabase(); - - if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount')) { - if (!count($this->errors)) { - - $this->processCustomerNewsletter($customer); - - $customer->firstname = Tools::ucwords($customer->firstname); - if (Configuration::get('PS_CUSTOMER_BIRTHDATE')) { - $customer->birthday = (empty($_POST['years']) ? '' : (int)Tools::getValue('years').'-'.(int)Tools::getValue('months').'-'.(int)Tools::getValue('days')); - if (!Validate::isBirthDate($customer->birthday)) { - $this->errors[] = Tools::displayError('Invalid date of birth.'); - } - } - - // New Guest customer - $customer->is_guest = (Tools::isSubmit('is_new_customer') ? !Tools::getValue('is_new_customer', 1) : 0); - $customer->active = 1; - - if (!count($this->errors)) { - $customer->phone = Tools::getValue('phone'); - if ($customer->add()) { - if (!$customer->is_guest) { - if (!$this->sendConfirmationMail($customer)) { - $this->errors[] = Tools::displayError('The email cannot be sent.'); - } - } - - $this->context->updateCustomer($customer, 1); - - $this->context->cart->update(); - Hook::exec('actionCustomerAccountAdd', array( - '_POST' => $_POST, - 'newCustomer' => $customer - )); - if ($this->ajax) { - $return = array( - 'hasError' => !empty($this->errors), - 'errors' => $this->errors, - 'isSaved' => true, - 'id_customer' => (int)$this->context->cookie->id_customer, - 'id_address_delivery' => $this->context->cart->id_address_delivery, - 'id_address_invoice' => $this->context->cart->id_address_invoice, - 'token' => Tools::getToken(false) - ); - $this->ajaxDie(json_encode($return)); - } - - if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) { - Tools::redirect(html_entity_decode($back)); - } - - // redirection: if cart is not empty : redirection to the cart - if (count($this->context->cart->getProducts(true)) > 0) { - $multi = (int)Tools::getValue('multi-shipping'); - Tools::redirect('index.php?controller=order'.($multi ? '&multi-shipping='.$multi : '')); - } - // else : redirection to the account - else { - Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); - } - } else { - $this->errors[] = Tools::displayError('An error occurred while creating your account.'); - } - } - } - } else { - // if registration type is in one step, we save the address - - $_POST['lastname'] = $lastnameAddress; - $_POST['firstname'] = $firstnameAddress; - $post_back = $_POST; - // Preparing addresses - foreach ($addresses_types as $addresses_type) { - $$addresses_type = new Address(); - $$addresses_type->id_customer = 1; - - if ($addresses_type == 'address_invoice') { - foreach ($_POST as $key => &$post) { - if ($tmp = Tools::getValue($key.'_invoice')) { - $post = $tmp; - } - } - } - - $this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController())); - if ($addresses_type == 'address_invoice') { - $_POST = $post_back; - } - - if (!($country = new Country($$addresses_type->id_country)) || !Validate::isLoadedObject($country)) { - $this->errors[] = Tools::displayError('Country cannot be loaded with address->id_country'); - } - - if (!$country->active) { - $this->errors[] = Tools::displayError('This country is not active.'); - } - - $postcode = $$addresses_type->postcode; - /* Check zip code format */ - if ($country->zip_code_format && !$country->checkZipCode($postcode)) { - $this->errors[] = sprintf(Tools::displayError('The Zip/Postal code you\'ve entered is invalid. It must follow this format: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format)))); - } elseif (empty($postcode) && $country->need_zip_code) { - $this->errors[] = Tools::displayError('A Zip / Postal code is required.'); - } elseif ($postcode && !Validate::isPostCode($postcode)) { - $this->errors[] = Tools::displayError('The Zip / Postal code is invalid.'); - } - - if ($country->need_identification_number) { - if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE')) { - $$addresses_type->dni = null; - } elseif (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))) { - $this->errors[] = Tools::displayError('The identification number is incorrect or has already been used.'); - } - } elseif (!$country->need_identification_number) { - $$addresses_type->dni = null; - } - - if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) { - if (!($country = new Country($$addresses_type->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country)) { - $this->errors[] = Tools::displayError('Country is invalid'); - } - } - $contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0; - $id_state = isset($$addresses_type) && is_object($$addresses_type) ? (int)$$addresses_type->id_state: 0; - if ((Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state) { - $this->errors[] = Tools::displayError('This country requires you to choose a State.'); - } - } - } - if (!(Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == '') - && !@checkdate((int) Tools::getValue('months'), (int) Tools::getValue('days'), (int) Tools::getValue('years')) - ) { - $this->errors[] = Tools::displayError('Invalid date of birth'); - } - - if (!count($this->errors)) { - if (!Tools::getValue('is_new_customer', 1)) { - if ($idCustomer = Customer::customerExists(Tools::getValue('email'), true, false)) { - if ($idAddress = Customer::getCustomerIdAddress($idCustomer)) { - $address = new Address($idAddress); - } - } - } else { - if (Customer::customerExists(Tools::getValue('email'))) { - $this->errors[] = Tools::displayError('An account using this email address has already been registered. Please enter a valid password or request a new one. ', false); - } - } - - $this->processCustomerNewsletter($customer); - - if (Configuration::get('PS_CUSTOMER_BIRTHDATE')) { - $customer->birthday = (empty($_POST['years']) ? '' : (int)Tools::getValue('years').'-'.(int)Tools::getValue('months').'-'.(int)Tools::getValue('days')); - if (!Validate::isBirthDate($customer->birthday)) { - $this->errors[] = Tools::displayError('Invalid date of birth'); - } - } - - if (!count($this->errors)) { - $customer->active = 1; - // New Guest customer - if (Tools::isSubmit('is_new_customer')) { - $customer->is_guest = !Tools::getValue('is_new_customer', 1); - } else { - $customer->is_guest = 0; - } - $customer->phone = Tools::getValue('phone'); - if (!$customer->save()) { - $this->errors[] = Tools::displayError('An error occurred while creating your account.'); - } else { - $_POST['phone'] = $phoneAddress; - - foreach ($addresses_types as $addresses_type) { - $$addresses_type->id_customer = (int)$customer->id; - if ($addresses_type == 'address_invoice') { - foreach ($_POST as $key => &$post) { - if ($tmp = Tools::getValue($key.'_invoice')) { - $post = $tmp; - } - } - } - - $this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController())); - if ($addresses_type == 'address_invoice') { - $_POST = $post_back; - } - if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$$addresses_type->save()) { - $this->errors[] = Tools::displayError('An error occurred while creating your address.'); - } - } - if (!count($this->errors)) { - if (!$customer->is_guest) { - $this->context->customer = $customer; - $customer->cleanGroups(); - // we add the guest customer in the default customer group - $customer->addGroups(array((int)Configuration::get('PS_CUSTOMER_GROUP'))); - if (!$this->sendConfirmationMail($customer)) { - // webkul - we will not stop process on email delivery fails - //$this->errors[] = Tools::displayError('The email cannot be sent.'); - } - } else { - $customer->cleanGroups(); - // we add the guest customer in the guest customer group - $customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP'))); - } - - $this->context->cart->id_address_invoice = (int)Address::getFirstCustomerAddressId((int)$customer->id); - if (isset($address_invoice) && Validate::isLoadedObject($address_invoice)) { - $this->context->cart->id_address_invoice = (int)$address_invoice->id; - } - - if ($this->ajax && Configuration::get('PS_ORDER_PROCESS_TYPE')) { - $delivery_option = array((int)$this->context->cart->id_address_delivery => (int)$this->context->cart->id_carrier.','); - $this->context->cart->setDeliveryOption($delivery_option); - } - - $this->context->updateCustomer($customer, 1); - // If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated - $this->context->cart->update(); - - // Avoid articles without delivery address on the cart - $this->context->cart->autosetProductAddress(); - - Hook::exec('actionCustomerAccountAdd', array( - '_POST' => $_POST, - 'newCustomer' => $customer - )); - if ($this->ajax) { - $return = array( - 'hasError' => !empty($this->errors), - 'errors' => $this->errors, - 'isSaved' => true, - 'id_customer' => (int)$this->context->cookie->id_customer, - 'id_address_delivery' => $this->context->cart->id_address_delivery, - 'id_address_invoice' => $this->context->cart->id_address_invoice, - 'token' => Tools::getToken(false) - ); - $this->ajaxDie(json_encode($return)); - } - // if registration type is in two steps, we redirect to register address - if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount')) { - Tools::redirect('index.php?controller=address'); - } - - if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) { - Tools::redirect(html_entity_decode($back)); - } - - // redirection: if cart is not empty : redirection to the cart - if (count($this->context->cart->getProducts(true)) > 0) { - Tools::redirect('index.php?controller=order'.($multi = (int)Tools::getValue('multi-shipping') ? '&multi-shipping='.$multi : '')); - } - // else : redirection to the account - else { - Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); - } - } - } - } - } - } - - if (count($this->errors)) { - //for retro compatibility to display guest account creation form on authentication page - if (Tools::getValue('submitGuestAccount')) { - $_GET['display_guest_checkout'] = 1; - } - - if (!Tools::getValue('is_new_customer')) { - unset($_POST['passwd']); - } - if ($this->ajax) { - $return = array( - 'hasError' => !empty($this->errors), - 'errors' => $this->errors, - 'isSaved' => false, - 'id_customer' => 0 - ); - $this->ajaxDie(json_encode($return)); - } - $this->context->smarty->assign('account_error', $this->errors); - } - } - - /** - * Process submit on a creation - */ - protected function processSubmitCreate() - { - if (!Validate::isEmail($email = trim(Tools::getValue('email_create'))) || empty($email)) { - $this->errors[] = Tools::displayError('Invalid email address.'); - } elseif (Customer::customerExists($email)) { - $this->errors[] = Tools::displayError('An account using this email address has already been registered. Please choose another one or sign in.', false); - $_POST['email'] = trim(Tools::getValue('email_create')); - unset($_POST['email_create']); - } elseif ($id_customer = Customer::customerExists($email, true, false)) { - $this->informations[] = Tools::displayError('You are already registered as a guest with this email address.').' '.Tools::displayError('').' to generate a password for your account.'; - } elseif (Tools::getValue('back') && !Validate::isUrl(Tools::getValue('back'))) { - $this->errors[] = Tools::displayError('back url is invalid.'); - } else { - $this->create_account = true; - $this->context->smarty->assign('email_create', Tools::safeOutput($email)); - $_POST['email'] = $email; - } - } - /** * Process submit for account transformation */ diff --git a/controllers/front/CategoryController.php b/controllers/front/CategoryController.php index 582344f7d6..f4dc4bac5e 100644 --- a/controllers/front/CategoryController.php +++ b/controllers/front/CategoryController.php @@ -64,6 +64,9 @@ public function setMedia() $this->addJS(_THEME_JS_DIR_.'scenes.js'); $this->addJqueryPlugin(array('scrollTo', 'serialScroll')); } + $this->addCSS(_PS_JS_DIR_.'/owl-carousel/assets/owl.carousel.min.css'); + $this->addCSS(_PS_JS_DIR_.'/owl-carousel/assets/owl.theme.default.min.css'); + $this->addJS(_PS_JS_DIR_.'/owl-carousel/owl.carousel.min.js'); $this->addJS(_THEME_JS_DIR_.'category.js'); } @@ -238,6 +241,106 @@ public function initContent() $feat_img_dir = _PS_IMG_.'rf/'; $ratting_img = _MODULE_DIR_.'hotelreservationsystem/views/img/Slices/icons-sprite.png'; + $objHotel = new HotelBranchInformation($id_hotel, $this->context->language->id); + $invoiceAddressPatternRules['avoid'] = ['lastname', 'firstname']; + + $idHotelAddress = $objHotel->getHotelIdAddress(); + $objHotelAddress = new Address((int) $idHotelAddress); + $formattedHotelAddress = AddressFormat::generateAddress($objHotelAddress, $invoiceAddressPatternRules, ', ', ' '); + $objHotelImage = new HotelImage(); + $hotelImageLargeType = ImageType::getFormatedName('large'); + $hotelImageSmallType = ImageType::getFormatedName('small'); + + $hotelImages = array(); + if ($hotelImagesByHotel = $objHotelImage->getImagesByHotelId($id_hotel)) { + foreach ($hotelImagesByHotel as $hotelImage) { + $hotelImages[] = array( + 'id' => (int) $hotelImage['id'], + 'cover' => (bool) $hotelImage['cover'], + 'large_link' => $this->context->link->getMediaLink( + $objHotelImage->getImageLink((int) $hotelImage['id'], $hotelImageLargeType) + ), + 'small_link' => $this->context->link->getMediaLink( + $objHotelImage->getImageLink((int) $hotelImage['id'], $hotelImageSmallType) + ), + 'id_htl_image_category' => $hotelImage['id_htl_image_category'], + 'category_name' => $hotelImage['category_name'] + ); + } + } + $hotelCoverImage = null; + if ($hotelImages) { + foreach ($hotelImages as $hotelImage) { + if ($hotelImage['cover']) { + $hotelCoverImage = $hotelImage; + break; + } + } + + if ($hotelCoverImage === null) { + $hotelCoverImage = $hotelImages[0]; + } + } + + $hotelGalleryImages = array(); + if ($hotelCoverImage !== null && $hotelImages) { + foreach ($hotelImages as $hotelImage) { + if ((int) $hotelImage['id'] === (int) $hotelCoverImage['id']) { + continue; + } + $hotelGalleryImages[] = $hotelImage; + } + } + + $hotelGalleryImages = array_slice($hotelGalleryImages, 0, 2); + + // Organize all images by category for the full gallery + $hotelGalleryByIdCategory = array(); + if ($hotelImages) { + foreach ($hotelImages as $image) { + $categoryId = isset($image['id_htl_image_category']) && $image['id_htl_image_category'] ? $image['id_htl_image_category'] : 'uncategorized'; + $categoryName = isset($image['category_name']) && $image['category_name'] ? $image['category_name'] : 'Uncategorized'; + if (!isset($hotelGalleryByIdCategory[$categoryId])) { + $hotelGalleryByIdCategory[$categoryId] = array('id' => $categoryId, 'name' => $categoryName, 'images' => array()); + } + + $hotelGalleryByIdCategory[$categoryId]['images'][] = array( + 'id' => $image['id'], + 'large_link' => $this->context->link->getMediaLink($objHotelImage->getImageLink((int) $image['id'], $hotelImageLargeType)), + 'small_link' => $this->context->link->getMediaLink($objHotelImage->getImageLink((int) $image['id'], $hotelImageSmallType)), + 'cover' => $image['cover'] + ); + } + } + // Get all image categories for the hotel + $hotelImageCategories = HotelImageCategory::getImageCategories($this->context->language->id); + + // Google Map on category page + $displayHotelLocation = false; + if (($apiKey = Configuration::get('PS_API_KEY')) && Configuration::get('WK_GOOGLE_ACTIVE_MAP') && ($PS_MAP_ID = Configuration::get('PS_MAP_ID'))) { + $idCategory = Tools::getValue('id_category'); + $idHotel = HotelBranchInformation::getHotelIdByIdCategory($idCategory); + $objHotel = new HotelBranchInformation($idHotel, $this->context->language->id); + + if (floatval($objHotel->latitude) != 0 && floatval($objHotel->longitude) != 0) { + $displayHotelLocation = true; + Media::addJsDef(array( + 'hotel_location' => array( + 'latitude' => $objHotel->latitude, + 'longitude' => $objHotel->longitude, + 'map_input_text' => $objHotel->map_input_text, + ), + 'PS_MAP_ID' => $PS_MAP_ID, + 'hotel_name' => $objHotel->hotel_name, + 'PS_STORES_ICON' => $this->context->link->getMediaLink(_PS_IMG_.Configuration::get('PS_STORES_ICON')), + )); + + $this->addJS('https://maps.googleapis.com/maps/api/js?key='.$apiKey.'&libraries=places,marker&loading=async&callback=initMap&language='.$this->context->language->iso_code.'®ion='.$this->context->country->iso_code); + + $this->context->smarty->assign('hotel', $objHotel); + } + } + $this->context->smarty->assign(array( 'warning_num' => $warning_num, 'num_days' => $num_days, @@ -249,6 +352,15 @@ public function initContent() 'display_all_room_types' => $displayAllRoomsTypes, 'id_hotel' => $id_hotel, 'currency' => $currency, + 'objHotel' => $objHotel, + 'display_hotel_location' => $displayHotelLocation, + 'hotel_contact' => $objHotelAddress->phone, + 'hotel_address' => $formattedHotelAddress, + 'hotel_cover_image' => $hotelCoverImage, + 'hotel_gallery_images' => $hotelGalleryImages, + 'hotel_gallery_all_images' => $hotelImages, + 'hotel_gallery_by_category' => $hotelGalleryByIdCategory, + 'hotel_image_categories' => $hotelImageCategories, 'feat_img_dir' => $feat_img_dir, 'ratting_img' => $ratting_img, )); diff --git a/controllers/front/HistoryController.php b/controllers/front/HistoryController.php index 09ba285bb0..c0322cda5e 100644 --- a/controllers/front/HistoryController.php +++ b/controllers/front/HistoryController.php @@ -39,6 +39,7 @@ public function setMedia() )); $this->addJqueryPlugin(array('footable', 'footable-sort')); + $this->addJS(_THEME_JS_DIR_.'history.js'); } /** @@ -48,6 +49,8 @@ public function setMedia() public function initContent() { $this->show_breadcrump = true; + $selectedOrderState = (int)Tools::getValue('id_order_state', 0); + $historySearch = trim(Tools::getValue('history_search', '')); parent::initContent(); if ($orders = Order::getCustomerOrders($this->context->customer->id)) { @@ -57,9 +60,21 @@ public function initContent() $order['virtual'] = $myOrder->isVirtual(false); } } + + if ($selectedOrderState) { + $orders = array_values(array_filter($orders, function ($order) use ($selectedOrderState) { + return (int)$order['id_order_state'] === $selectedOrderState; + })); + } } + + $orderStates = OrderState::getOrderStates((int)$this->context->language->id); + $this->context->smarty->assign(array( 'orders' => $orders, + 'order_states' => $orderStates, + 'selected_order_state' => $selectedOrderState, + 'history_search' => $historySearch, 'overbooking_order_states' => OrderState::getOverBookingStates(), 'invoiceAllowed' => (int)Configuration::get('PS_INVOICE'), 'reorderingAllowed' => !(bool)Configuration::get('PS_DISALLOW_HISTORY_REORDERING'), diff --git a/controllers/front/MyAccountController.php b/controllers/front/MyAccountController.php index b1960f1df6..0dd4e87a9f 100644 --- a/controllers/front/MyAccountController.php +++ b/controllers/front/MyAccountController.php @@ -34,7 +34,7 @@ class MyAccountControllerCore extends FrontController public function setMedia() { parent::setMedia(); - $this->addCSS(_THEME_CSS_DIR_.'my-account.css'); + // $this->addCSS(_THEME_CSS_DIR_.'my-account.css'); } /** diff --git a/controllers/front/OrderDetailController.php b/controllers/front/OrderDetailController.php index 8f50f3991d..1f0ddcaab5 100644 --- a/controllers/front/OrderDetailController.php +++ b/controllers/front/OrderDetailController.php @@ -858,7 +858,7 @@ public function setMedia() if (Tools::getValue('ajax') != 'true') { parent::setMedia(); - $this->addCSS(_THEME_CSS_DIR_.'order-detail.css'); + // $this->addCSS(_THEME_CSS_DIR_.'order-detail.css'); $this->addJS(array( _THEME_JS_DIR_.'order-detail.js', diff --git a/controllers/front/ParentOrderController.php b/controllers/front/ParentOrderController.php index a519c33059..58b98ffdee 100644 --- a/controllers/front/ParentOrderController.php +++ b/controllers/front/ParentOrderController.php @@ -316,8 +316,9 @@ protected function _assignShoppingCart() { $summary = $this->context->cart->getSummaryDetails(); $cartProducts = $this->context->cart->getProducts(); + $feat_img_dir = _PS_IMG_.'rf/'; if (!empty($cartProducts)) { - + $this->context->smarty->assign('feat_img_dir', $feat_img_dir); if ($cartBookingInfo = HotelCartBookingData::getHotelCartBookingData()) { $this->context->smarty->assign('cart_htl_data', $cartBookingInfo); } diff --git a/controllers/front/ProductController.php b/controllers/front/ProductController.php index e9fb16151e..72eddb1dc6 100644 --- a/controllers/front/ProductController.php +++ b/controllers/front/ProductController.php @@ -442,6 +442,7 @@ public function initContent() 'hotel_latitude' => $hotel_branch_obj->latitude, 'hotel_longitude' => $hotel_branch_obj->longitude, 'hotel_map_input_text' => $hotel_branch_obj->map_input_text, + 'hotel_email' => $hotel_branch_obj->email, 'hotel_address1' => $addressInfo['address1'], 'hotel_phone' => $addressInfo['phone'], 'hotel_name' => $hotel_name, @@ -573,7 +574,8 @@ public function initContent() 'category-'.(isset($this->category) ? $this->category->getFieldByLang('link_rewrite') : ''), ), 'display_discount_price' => Configuration::get('PS_DISPLAY_DISCOUNT_PRICE'), - 'display_google_maps' => Configuration::get('WK_GOOGLE_ACTIVE_MAP'), + // Only show the map tab when Maps is enabled and required credentials are configured. + 'display_google_maps' => (bool) (Configuration::get('WK_GOOGLE_ACTIVE_MAP')&& Configuration::get('PS_API_KEY')&& Configuration::get('PS_MAP_ID')), ) ); } diff --git a/controllers/front/RegisterController.php b/controllers/front/RegisterController.php new file mode 100644 index 0000000000..8903c09a31 --- /dev/null +++ b/controllers/front/RegisterController.php @@ -0,0 +1,666 @@ +confirmations = array(); + $this->informations = array(); + $this->errors = array(); + $this->ajaxExtraData = array(); + + if (!Tools::getIsset('step') && $this->context->customer->isLogged() && !$this->ajax) { + Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); + } + } + + /** + * Set default medias for this controller + * @see FrontController::setMedia() + */ + public function setMedia() + { + parent::setMedia(); + if (!$this->useMobileTheme()) { + $this->addCSS(_THEME_CSS_DIR_.'authentication.css'); + } + + $this->addJqueryPlugin('typewatch'); + $this->addJS(array( + _THEME_JS_DIR_.'tools/statesManagement.js', + _THEME_JS_DIR_.'authentication.js', + _PS_JS_DIR_.'validate.js' + )); + } + + /** + * Run ajax process + * @see FrontController::displayAjax() + */ + public function displayAjax() + { + $this->display(); + } + + /** + * Assign template vars related to page content + * @see FrontController::initContent() + */ + public function initContent() + { + parent::initContent(); + + $this->context->smarty->assign('genders', Gender::getGenders()); + + $this->assignDate(); + + $this->assignCountries(); + + $newsletter = Configuration::get('PS_CUSTOMER_NWSL') || (Module::isInstalled('blocknewsletter') && Module::getInstanceByName('blocknewsletter')->active); + + $this->context->smarty->assign('birthday', (bool) Configuration::get('PS_CUSTOMER_BIRTHDATE')); + $this->context->smarty->assign('newsletter', $newsletter); + $this->context->smarty->assign('optin', (bool)Configuration::get('PS_CUSTOMER_OPTIN')); + + $back = Tools::getValue('back'); + $key = Tools::safeOutput(Tools::getValue('key')); + + if (!empty($key)) { + $back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key; + } + + // sanitize backurl for XSS protection + $back = filter_var($back, FILTER_SANITIZE_URL); + + if ($back == Tools::secureReferrer(Tools::getValue('back'))) { + $this->context->smarty->assign('back', html_entity_decode($back)); + } else { + $this->context->smarty->assign('back', Tools::safeOutput($back)); + } + + if (Tools::getValue('display_guest_checkout')) { + if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) { + $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true); + } else { + $countries = Country::getCountries($this->context->language->id, true); + } + + $this->context->smarty->assign(array( + 'inOrderProcess' => true, + 'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'), + 'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'), + 'sl_country' => (int)$this->id_country, + 'countries' => $countries + )); + } + + if (Tools::getValue('multi-shipping') == 1) { + $this->context->smarty->assign('multi_shipping', true); + } else { + $this->context->smarty->assign('multi_shipping', false); + } + + $this->context->smarty->assign('field_required', $this->context->customer->validateFieldsRequiredDatabase()); + + $this->assignAddressFormat(); + + // Call a hook to display more information on form + $this->context->smarty->assign(array( + 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), + 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop') + )); + + // Just set $this->template value here in case it's used by Ajax + $this->setTemplate(_PS_THEME_DIR_.'register.tpl'); + } + + /** + * Assign date var to smarty + */ + protected function assignDate() + { + $selectedYears = (int)(Tools::getValue('years', 0)); + $years = Tools::dateYears(); + $selectedMonths = (int)(Tools::getValue('months', 0)); + $months = Tools::dateMonths(); + $selectedDays = (int)(Tools::getValue('days', 0)); + $days = Tools::dateDays(); + + $this->context->smarty->assign(array( + 'one_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'), + 'onr_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'), //retro compat + 'years' => $years, + 'sl_year' => $selectedYears, + 'months' => $months, + 'sl_month' => $selectedMonths, + 'days' => $days, + 'sl_day' => $selectedDays + )); + } + + /** + * Assign countries var to smarty + */ + protected function assignCountries() + { + $this->id_country = (int)Tools::getCountry(); + if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) { + $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true); + } else { + $countries = Country::getCountries($this->context->language->id, true); + } + $this->context->smarty->assign(array( + 'countries' => $countries, + 'PS_REGISTRATION_PROCESS_TYPE' => Configuration::get('PS_REGISTRATION_PROCESS_TYPE'), + 'sl_country' => (int)$this->id_country, + )); + } + + /** + * Assign address var to smarty + */ + protected function assignAddressFormat() + { + $addressItems = array(); + $addressFormat = AddressFormat::getOrderedAddressFields((int)$this->id_country, false, true); + $requireFormFieldsList = AddressFormat::getFieldsRequired(); + + foreach ($addressFormat as $addressline) { + foreach (explode(' ', $addressline) as $addressItem) { + $addressItems[] = trim($addressItem); + } + } + + // Add missing require fields for a new user susbscription form + foreach ($requireFormFieldsList as $fieldName) { + if (!in_array($fieldName, $addressItems)) { + $addressItems[] = trim($fieldName); + } + } + + foreach (array('inv', 'dlv') as $addressType) { + $this->context->smarty->assign(array( + $addressType.'_adr_fields' => $addressFormat, + $addressType.'_all_fields' => $addressItems, + 'required_fields' => $requireFormFieldsList + )); + } + } + + /** + * Start forms process + * @see FrontController::postProcess() + */ + public function postProcess() + { + if (Tools::isSubmit('SubmitCreate')) { + $this->processSubmitCreate(); + } + + if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) { + $this->processSubmitAccount(); + } + } + + /** + * Process the newsletter settings and set the customer infos. + * + * @param Customer $customer Reference on the customer Object. + * + * @note At this point, the email has been validated. + */ + protected function processCustomerNewsletter(&$customer) + { + $blocknewsletter = Module::isInstalled('blocknewsletter') && $module_newsletter = Module::getInstanceByName('blocknewsletter'); + if ($blocknewsletter && $module_newsletter->active && !Tools::getValue('newsletter')) { + require_once _PS_MODULE_DIR_.'blocknewsletter/blocknewsletter.php'; + if (is_callable(array($module_newsletter, 'isNewsletterRegistered')) && $module_newsletter->isNewsletterRegistered(Tools::getValue('email')) == Blocknewsletter::GUEST_REGISTERED) { + /* Force newsletter registration as customer as already registred as guest */ + $_POST['newsletter'] = true; + } + } + + if (Tools::getValue('newsletter')) { + $customer->newsletter = true; + $customer->ip_registration_newsletter = pSQL(Tools::getRemoteAddr()); + $customer->newsletter_date_add = pSQL(date('Y-m-d H:i:s')); + /** @var Blocknewsletter $module_newsletter */ + if ($blocknewsletter && $module_newsletter->active) { + $module_newsletter->confirmSubscription(Tools::getValue('email')); + } + } + } + + /** + * Process submit on an account + */ + protected function processSubmitAccount() + { + Hook::exec('actionBeforeSubmitAccount'); + $this->create_account = true; + if (Tools::isSubmit('submitAccount')) { + $this->context->smarty->assign('email_create', 1); + } + // New Guest customer + if (!Tools::getValue('is_new_customer', 1) && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) { + $this->errors[] = Tools::displayError('You cannot create a guest account.'); + } + if (!Tools::getValue('is_new_customer', 1)) { + $_POST['passwd'] = md5(time()._COOKIE_KEY_); + } + if ($guest_email = Tools::getValue('guest_email')) { + $_POST['email'] = $guest_email; + } + // Checked the user address in case he changed his email address + if (Validate::isEmail($email = Tools::getValue('email')) && !empty($email)) { + if (Customer::customerExists($email)) { + $this->errors[] = Tools::displayError('An account using this email address has already been registered.', false); + } elseif (Tools::getValue('is_new_customer', 1) && Customer::customerExists($email, false, false)) { + $this->errors[] = Tools::displayError('You are already registered as a guest with this email address.').' '.Tools::displayError('').' to generate a password for your account.'; + } + } + + if (!count($this->errors)) { + // Preparing customer + $customer = new Customer(); + $lastnameAddress = Tools::getValue('lastname'); + $firstnameAddress = Tools::getValue('firstname'); + $phoneAddress = Tools::getValue('phone'); + $_POST['lastname'] = Tools::getValue('customer_lastname', $lastnameAddress); + $_POST['firstname'] = Tools::getValue('customer_firstname', $firstnameAddress); + $_POST['phone'] = Tools::getValue('customer_phone', $phoneAddress); + $addresses_types = []; + if (Configuration::get('PS_REGISTRATION_PROCESS_TYPE')) { + $addresses_types[] = 'address'; + } + + if (!Configuration::get('PS_ORDER_PROCESS_TYPE') && Configuration::get('PS_GUEST_CHECKOUT_ENABLED') && Tools::getValue('invoice_address')) { + $addresses_types[] = 'address_invoice'; + } + + if (Configuration::get('PS_ONE_PHONE_AT_LEAST') && !Tools::getValue('phone')) { + $this->errors[] = Tools::displayError('Phone number is required.'); + } + + if (!Tools::getValue('is_new_customer', 1)) { + if (Validate::isEmail($email = Tools::getValue('email')) + && $idCustomer = Customer::customerExists(Tools::getValue('email'), true, false) + ) { + $customer = new Customer($idCustomer); + } + } + + $this->errors = array_unique(array_merge($this->errors, $customer->validateController())); + + // Check the requires fields which are settings in the BO + $this->errors = $this->errors + $customer->validateFieldsRequiredDatabase(); + + if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount')) { + if (!count($this->errors)) { + + $this->processCustomerNewsletter($customer); + + $customer->firstname = Tools::ucwords($customer->firstname); + if (Configuration::get('PS_CUSTOMER_BIRTHDATE')) { + $customer->birthday = (empty($_POST['years']) ? '' : (int)Tools::getValue('years').'-'.(int)Tools::getValue('months').'-'.(int)Tools::getValue('days')); + if (!Validate::isBirthDate($customer->birthday)) { + $this->errors[] = Tools::displayError('Invalid date of birth.'); + } + } + + // New Guest customer + $customer->is_guest = (Tools::isSubmit('is_new_customer') ? !Tools::getValue('is_new_customer', 1) : 0); + $customer->active = 1; + + if (!count($this->errors)) { + $customer->phone = Tools::getValue('phone'); + if ($customer->add()) { + if (!$customer->is_guest) { + if (!$this->sendConfirmationMail($customer)) { + $this->errors[] = Tools::displayError('The email cannot be sent.'); + } + } + + $this->context->updateCustomer($customer, 1); + + $this->context->cart->update(); + Hook::exec('actionCustomerAccountAdd', array( + '_POST' => $_POST, + 'newCustomer' => $customer + )); + if ($this->ajax) { + $return = array( + 'hasError' => !empty($this->errors), + 'errors' => $this->errors, + 'isSaved' => true, + 'id_customer' => (int)$this->context->cookie->id_customer, + 'id_address_delivery' => $this->context->cart->id_address_delivery, + 'id_address_invoice' => $this->context->cart->id_address_invoice, + 'token' => Tools::getToken(false) + ); + $this->ajaxDie(json_encode($return)); + } + + if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) { + Tools::redirect(html_entity_decode($back)); + } + + // redirection: if cart is not empty : redirection to the cart + if (count($this->context->cart->getProducts(true)) > 0) { + $multi = (int)Tools::getValue('multi-shipping'); + Tools::redirect('index.php?controller=order'.($multi ? '&multi-shipping='.$multi : '')); + } + // else : redirection to the account + else { + Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); + } + } else { + $this->errors[] = Tools::displayError('An error occurred while creating your account.'); + } + } + } + } else { + // if registration type is in one step, we save the address + + $_POST['lastname'] = $lastnameAddress; + $_POST['firstname'] = $firstnameAddress; + $post_back = $_POST; + // Preparing addresses + foreach ($addresses_types as $addresses_type) { + $$addresses_type = new Address(); + $$addresses_type->id_customer = 1; + + if ($addresses_type == 'address_invoice') { + foreach ($_POST as $key => &$post) { + if ($tmp = Tools::getValue($key.'_invoice')) { + $post = $tmp; + } + } + } + + $this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController())); + if ($addresses_type == 'address_invoice') { + $_POST = $post_back; + } + + if (!($country = new Country($$addresses_type->id_country)) || !Validate::isLoadedObject($country)) { + $this->errors[] = Tools::displayError('Country cannot be loaded with address->id_country'); + } + + if (!$country->active) { + $this->errors[] = Tools::displayError('This country is not active.'); + } + + $postcode = $$addresses_type->postcode; + /* Check zip code format */ + if ($country->zip_code_format && !$country->checkZipCode($postcode)) { + $this->errors[] = sprintf(Tools::displayError('The Zip/Postal code you\'ve entered is invalid. It must follow this format: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format)))); + } elseif (empty($postcode) && $country->need_zip_code) { + $this->errors[] = Tools::displayError('A Zip / Postal code is required.'); + } elseif ($postcode && !Validate::isPostCode($postcode)) { + $this->errors[] = Tools::displayError('The Zip / Postal code is invalid.'); + } + + if ($country->need_identification_number) { + if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE')) { + $$addresses_type->dni = null; + } elseif (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))) { + $this->errors[] = Tools::displayError('The identification number is incorrect or has already been used.'); + } + } elseif (!$country->need_identification_number) { + $$addresses_type->dni = null; + } + + if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) { + if (!($country = new Country($$addresses_type->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country)) { + $this->errors[] = Tools::displayError('Country is invalid'); + } + } + $contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0; + $id_state = isset($$addresses_type) && is_object($$addresses_type) ? (int)$$addresses_type->id_state: 0; + if ((Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state) { + $this->errors[] = Tools::displayError('This country requires you to choose a State.'); + } + } + } + if (!(Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == '') + && !@checkdate((int) Tools::getValue('months'), (int) Tools::getValue('days'), (int) Tools::getValue('years')) + ) { + $this->errors[] = Tools::displayError('Invalid date of birth'); + } + + if (!count($this->errors)) { + if (!Tools::getValue('is_new_customer', 1)) { + if ($idCustomer = Customer::customerExists(Tools::getValue('email'), true, false)) { + if ($idAddress = Customer::getCustomerIdAddress($idCustomer)) { + $address = new Address($idAddress); + } + } + } else { + if (Customer::customerExists(Tools::getValue('email'))) { + $this->errors[] = Tools::displayError('An account using this email address has already been registered. Please enter a valid password or request a new one. ', false); + } + } + + $this->processCustomerNewsletter($customer); + + if (Configuration::get('PS_CUSTOMER_BIRTHDATE')) { + $customer->birthday = (empty($_POST['years']) ? '' : (int)Tools::getValue('years').'-'.(int)Tools::getValue('months').'-'.(int)Tools::getValue('days')); + if (!Validate::isBirthDate($customer->birthday)) { + $this->errors[] = Tools::displayError('Invalid date of birth'); + } + } + + if (!count($this->errors)) { + $customer->active = 1; + // New Guest customer + if (Tools::isSubmit('is_new_customer')) { + $customer->is_guest = !Tools::getValue('is_new_customer', 1); + } else { + $customer->is_guest = 0; + } + $customer->phone = Tools::getValue('phone'); + if (!$customer->save()) { + $this->errors[] = Tools::displayError('An error occurred while creating your account.'); + } else { + $_POST['phone'] = $phoneAddress; + + foreach ($addresses_types as $addresses_type) { + $$addresses_type->id_customer = (int)$customer->id; + if ($addresses_type == 'address_invoice') { + foreach ($_POST as $key => &$post) { + if ($tmp = Tools::getValue($key.'_invoice')) { + $post = $tmp; + } + } + } + + $this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController())); + if ($addresses_type == 'address_invoice') { + $_POST = $post_back; + } + if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$$addresses_type->save()) { + $this->errors[] = Tools::displayError('An error occurred while creating your address.'); + } + } + if (!count($this->errors)) { + if (!$customer->is_guest) { + $this->context->customer = $customer; + $customer->cleanGroups(); + // we add the guest customer in the default customer group + $customer->addGroups(array((int)Configuration::get('PS_CUSTOMER_GROUP'))); + if (!$this->sendConfirmationMail($customer)) { + // webkul - we will not stop process on email delivery fails + //$this->errors[] = Tools::displayError('The email cannot be sent.'); + } + } else { + $customer->cleanGroups(); + // we add the guest customer in the guest customer group + $customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP'))); + } + + $this->context->cart->id_address_invoice = (int)Address::getFirstCustomerAddressId((int)$customer->id); + if (isset($address_invoice) && Validate::isLoadedObject($address_invoice)) { + $this->context->cart->id_address_invoice = (int)$address_invoice->id; + } + + if ($this->ajax && Configuration::get('PS_ORDER_PROCESS_TYPE')) { + $delivery_option = array((int)$this->context->cart->id_address_delivery => (int)$this->context->cart->id_carrier.','); + $this->context->cart->setDeliveryOption($delivery_option); + } + + $this->context->updateCustomer($customer, 1); + // If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated + $this->context->cart->update(); + + // Avoid articles without delivery address on the cart + $this->context->cart->autosetProductAddress(); + + Hook::exec('actionCustomerAccountAdd', array( + '_POST' => $_POST, + 'newCustomer' => $customer + )); + if ($this->ajax) { + $return = array( + 'hasError' => !empty($this->errors), + 'errors' => $this->errors, + 'isSaved' => true, + 'id_customer' => (int)$this->context->cookie->id_customer, + 'id_address_delivery' => $this->context->cart->id_address_delivery, + 'id_address_invoice' => $this->context->cart->id_address_invoice, + 'token' => Tools::getToken(false) + ); + $this->ajaxDie(json_encode($return)); + } + // if registration type is in two steps, we redirect to register address + if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount')) { + Tools::redirect('index.php?controller=address'); + } + + if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back)) { + Tools::redirect(html_entity_decode($back)); + } + + // redirection: if cart is not empty : redirection to the cart + if (count($this->context->cart->getProducts(true)) > 0) { + Tools::redirect('index.php?controller=order'.($multi = (int)Tools::getValue('multi-shipping') ? '&multi-shipping='.$multi : '')); + } + // else : redirection to the account + else { + Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account')); + } + } + } + } + } + } + + if (count($this->errors)) { + //for retro compatibility to display guest account creation form on authentication page + if (Tools::getValue('submitGuestAccount')) { + $_GET['display_guest_checkout'] = 1; + } + + if (!Tools::getValue('is_new_customer')) { + unset($_POST['passwd']); + } + if ($this->ajax) { + $return = array( + 'hasError' => !empty($this->errors), + 'errors' => $this->errors, + 'isSaved' => false, + 'id_customer' => 0 + ); + $this->ajaxDie(json_encode($return)); + } + $this->context->smarty->assign('account_error', $this->errors); + } + } + + /** + * Process submit on a creation + */ + protected function processSubmitCreate() + { + if (!Validate::isEmail($email = trim(Tools::getValue('email_create'))) || empty($email)) { + $this->errors[] = Tools::displayError('Invalid email address.'); + } elseif (Customer::customerExists($email)) { + $this->errors[] = Tools::displayError('An account using this email address has already been registered. Please choose another one or sign in.', false); + $_POST['email'] = trim(Tools::getValue('email_create')); + unset($_POST['email_create']); + } elseif ($id_customer = Customer::customerExists($email, true, false)) { + $this->informations[] = Tools::displayError('You are already registered as a guest with this email address.').' '.Tools::displayError('').' to generate a password for your account.'; + } elseif (Tools::getValue('back') && !Validate::isUrl(Tools::getValue('back'))) { + $this->errors[] = Tools::displayError('back url is invalid.'); + } else { + $this->create_account = true; + $this->context->smarty->assign('email_create', Tools::safeOutput($email)); + $_POST['email'] = $email; + } + } + + /** + * sendConfirmationMail + * @param Customer $customer + * @return bool + */ + protected function sendConfirmationMail(Customer $customer) + { + if (!Configuration::get('PS_CUSTOMER_CREATION_EMAIL')) { + return true; + } + + return Mail::Send( + $this->context->language->id, + 'account', + Mail::l('Welcome!'), + array( + '{firstname}' => $customer->firstname, + '{lastname}' => $customer->lastname, + '{email}' => $customer->email, + ), + $customer->email, + $customer->firstname.' '.$customer->lastname + ); + } +} diff --git a/img/logo.jpg b/img/logo.jpg index 422601c85c..5a1e0f646a 100644 Binary files a/img/logo.jpg and b/img/logo.jpg differ diff --git a/img/rf/1.jpg b/img/rf/1.jpg index 9d820ba439..b138bc1211 100644 Binary files a/img/rf/1.jpg and b/img/rf/1.jpg differ diff --git a/img/rf/2.jpg b/img/rf/2.jpg index ed46f7fff3..5045ea07f6 100644 Binary files a/img/rf/2.jpg and b/img/rf/2.jpg differ diff --git a/img/rf/3.jpg b/img/rf/3.jpg index d5f91bdbfc..1255a611a7 100644 Binary files a/img/rf/3.jpg and b/img/rf/3.jpg differ diff --git a/img/rf/4.jpg b/img/rf/4.jpg index 05c7251eb9..328a6eb4e1 100644 Binary files a/img/rf/4.jpg and b/img/rf/4.jpg differ diff --git a/img/rf/5.jpg b/img/rf/5.jpg index 33236f769c..4bafc2798b 100644 Binary files a/img/rf/5.jpg and b/img/rf/5.jpg differ diff --git a/img/rf/6.jpg b/img/rf/6.jpg index 6f057b5a98..c8189167ce 100644 Binary files a/img/rf/6.jpg and b/img/rf/6.jpg differ diff --git a/img/rf/7.jpg b/img/rf/7.jpg index bd7203ed16..801de40f67 100644 Binary files a/img/rf/7.jpg and b/img/rf/7.jpg differ diff --git a/install/data/theme.sql b/install/data/theme.sql index 9ce4b813b1..b2322d0b9b 100644 --- a/install/data/theme.sql +++ b/install/data/theme.sql @@ -52,12 +52,6 @@ UPDATE `PREFIX_configuration` SET value = 'CAT3,CAT8,CAT5,LNK1' WHERE name = 'MO UPDATE `PREFIX_configuration` SET value = '0' WHERE name = 'MOD_BLOCKTOPMENU_SEARCH'; UPDATE `PREFIX_configuration` SET value = 'https://www.facebook.com/qloapps' WHERE name = 'BLOCKSOCIAL_FACEBOOK'; UPDATE `PREFIX_configuration` SET value = 'https://twitter.com/qloapps' WHERE name = 'BLOCKSOCIAL_TWITTER'; -UPDATE `PREFIX_configuration` SET value = 'My Company' WHERE name = 'BLOCKCONTACTINFOS_COMPANY'; -UPDATE `PREFIX_configuration` SET value = '42 Puffin street\n12345 Puffinville\nFrance' WHERE name = 'BLOCKCONTACTINFOS_ADDRESS'; -UPDATE `PREFIX_configuration` SET value = '0123-456-789' WHERE name = 'BLOCKCONTACTINFOS_PHONE'; -UPDATE `PREFIX_configuration` SET value = 'sales@yourcompany.com' WHERE name = 'BLOCKCONTACTINFOS_EMAIL'; -UPDATE `PREFIX_configuration` SET value = '0123-456-789' WHERE name = 'BLOCKCONTACT_TELNUMBER'; -UPDATE `PREFIX_configuration` SET value = 'sales@yourcompany.com' WHERE name = 'BLOCKCONTACT_EMAIL'; UPDATE `PREFIX_configuration` SET value = '1' WHERE name = 'SUPPLIER_DISPLAY_TEXT'; UPDATE `PREFIX_configuration` SET value = '5' WHERE name = 'SUPPLIER_DISPLAY_TEXT_NB'; UPDATE `PREFIX_configuration` SET value = '1' WHERE name = 'SUPPLIER_DISPLAY_FORM'; @@ -73,15 +67,27 @@ DELETE FROM `PREFIX_hook_module` WHERE id_hook = (SELECT id_hook FROM `PREFIX_ho /* displayHome */ SET @id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayHome'); UPDATE `PREFIX_hook_module` SET position = 1 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'themeconfigurator') +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'wkhotelroom') AND id_hook = @id_hook; UPDATE `PREFIX_hook_module` SET position = 2 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockfacebook') +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'wkhotelfeaturesblock') AND id_hook = @id_hook; UPDATE `PREFIX_hook_module` SET position = 3 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcmsinfo') +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'hotelreservationsystem') +AND id_hook = @id_hook; + +UPDATE `PREFIX_hook_module` SET position = 4 +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'qlohotelofferings') +AND id_hook = @id_hook; + +UPDATE `PREFIX_hook_module` SET position = 5 +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'wktestimonialblock') +AND id_hook = @id_hook; + +UPDATE `PREFIX_hook_module` SET position = 6 +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'wkabouthotelblock') AND id_hook = @id_hook; /* displayNav */ @@ -98,10 +104,6 @@ UPDATE `PREFIX_hook_module` SET position = 3 WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocklanguages') AND id_hook = @id_hook; -UPDATE `PREFIX_hook_module` SET position = 4 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcontact') -AND id_hook = @id_hook; - /* displayTop */ SET @id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayTop'); @@ -150,21 +152,34 @@ AND id_hook = @id_hook; /* displayFooter */ SET @id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayFooter'); UPDATE `PREFIX_hook_module` SET position = 1 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocknewsletter') +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'hotelreservationsystem') AND id_hook = @id_hook; UPDATE `PREFIX_hook_module` SET position = 2 +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'wkabouthotelblock') +AND id_hook = @id_hook; + +UPDATE `PREFIX_hook_module` SET position = 3 +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocknavigationmenu') +AND id_hook = @id_hook; + +UPDATE `PREFIX_hook_module` SET position = 4 WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocksocial') AND id_hook = @id_hook; UPDATE `PREFIX_hook_module` SET position = 5 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockmyaccountfooter') +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocknewsletter') AND id_hook = @id_hook; UPDATE `PREFIX_hook_module` SET position = 6 -WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcontactinfos') +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'wkfooternotificationblock') AND id_hook = @id_hook; +UPDATE `PREFIX_hook_module` SET position = 9 +WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsdata') +AND id_hook = @id_hook; + + /* displayProductButtons */ SET @id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayProductButtons'); UPDATE `PREFIX_hook_module` SET position = 1 diff --git a/install/data/xml/meta.xml b/install/data/xml/meta.xml index 4c9a0b2259..106b923e5b 100644 --- a/install/data/xml/meta.xml +++ b/install/data/xml/meta.xml @@ -152,5 +152,9 @@ our-properties 1 + + register + 1 + diff --git a/install/models/install.php b/install/models/install.php index 4f48210c1f..eb455168d3 100644 --- a/install/models/install.php +++ b/install/models/install.php @@ -671,12 +671,9 @@ public function getModulesList() 'blockcurrencies', 'blocklanguages', 'qlohotelreview', - 'wkfooterlangcurrencyblock', - 'wkfooterpaymentinfoblockcontainer', 'wkfooteraboutblock', 'wkfooterpaymentblock', 'wkfooternotificationblock', - 'blocknavigationmenu', 'dashguestcycle', 'dashoccupancy', 'dashactivity', @@ -709,6 +706,8 @@ public function getModulesList() 'qlostatsserviceproducts', 'blockcart', 'blockuserinfo', + 'blocknavigationmenu', + 'qlohotelofferings', 'qlochannelmanagerconnector', ); } diff --git a/js/admin/orders.js b/js/admin/orders.js index 0145dfa9fa..9da9e84f89 100644 --- a/js/admin/orders.js +++ b/js/admin/orders.js @@ -515,7 +515,7 @@ function initProductEvents() var roomBlockIndex = parseInt($(this).closest('.occupancy_info_block').attr('occ_block_index')); - var childAgeSelect = '

'; + var childAgeSelect = '

'; childAgeSelect += ''; occupancy_block += ''; - occupancy_block += '

'; + occupancy_block += '
'; occupancy_block += ''; occupancy_block += '(' + below_txt + ' ' + max_child_age + ' ' + years_txt + ')'; occupancy_block += '
'; diff --git a/js/owl-carousel/LICENSE b/js/owl-carousel/LICENSE index 699398ca4a..052211da5a 100644 --- a/js/owl-carousel/LICENSE +++ b/js/owl-carousel/LICENSE @@ -1,5 +1,5 @@ Copyright (c) 2014 Owl -Modified work Copyright 2016 David Deutsch +Modified work Copyright 2016-2018 David Deutsch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/js/owl-carousel/README.md b/js/owl-carousel/README.md index ecd5cef1e8..e912df2d58 100644 --- a/js/owl-carousel/README.md +++ b/js/owl-carousel/README.md @@ -1,30 +1,74 @@ -# OwlCarousel2 is currently being transferred to a new owner +# Owl Carousel 2 -Stay tuned while the new owner sorts through some stuff. (Oh, hi, I'm [David](https://github.com/daviddeutsch)!) +Touch enabled [jQuery](https://jquery.com/) plugin that lets you create a beautiful, responsive carousel slider. **To get started, check out https://owlcarousel2.github.io/OwlCarousel2/.** -## Owl Carousel 2 Beta +**Notice:** The old Owl Carousel site (owlgraphic [dot] com) is no longer in use. Please delete all references to this in bookmarks and your own products' documentation as it's being used for malicious purposes. -Touch enabled [jQuery](http://jquery.com/) plugin that lets you create a beautiful, responsive carousel slider. **To get started, check out http://owlcarousel2.github.io/OwlCarousel2/.** +## Quick start -Please consider that the project is still in beta. The current status of the milestones can be found [here](https://github.com/owlcarousel2/OwlCarousel2/milestones). If you want to use the [latest development](https://github.com/owlcarousel2/OwlCarousel2/archive/develop.zip) see [building](#building). +### Install -## Quick start +This package can be installed with: + +- [npm](https://www.npmjs.com/package/owl.carousel): `npm install --save owl.carousel` or `yarn add owl.carousel jquery` +- [bower](http://bower.io/search/?q=owl.carousel): `bower install --save owl.carousel` + +Or download the [latest release](https://github.com/OwlCarousel2/OwlCarousel2/releases). + +### Load + +#### Webpack + +Add jQuery via the "webpack.ProvidePlugin" to your webpack configuration: + + const webpack = require('webpack'); + + //... + plugins: [ + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + 'window.jQuery': 'jquery' + }), + ], + //... + +Load the required stylesheet and JS: + +```js +import 'owl.carousel/dist/assets/owl.carousel.css'; +import 'owl.carousel'; +``` + +#### Static HTML -Download the [latest release](http://owlcarousel2.github.io/OwlCarousel2/download/owl.carousel.2.1.0.zip) and put the required stylesheet at the [top](https://developer.yahoo.com/performance/rules.html#css_top) of your markup: +Put the required stylesheet at the [top](https://developer.yahoo.com/performance/rules.html#css_top) of your markup: ```html - + ``` + +```html + +``` + **NOTE:** If you want to use the default navigation styles, you will also need to include `owl.theme.default.css`. Put the script at the [bottom](https://developer.yahoo.com/performance/rules.html#js_bottom) of your markup right after jQuery: ```html - - + + ``` +```html + + +``` + +### Usage + Wrap your items (`div`, `a`, `img`, `span`, `li` etc.) with a container element (`div`, `ul` etc.). Only the class `owl-carousel` is mandatory to apply proper styles: ```html @@ -41,7 +85,7 @@ Wrap your items (`div`, `a`, `img`, `span`, `li` etc.) with a container element **NOTE:** The `owl-theme` class is optional, but without it, you will need to style navigation features on your own. -Call the [plugin](http://learn.jquery.com/plugins/) function and your carousel is ready. +Call the [plugin](https://learn.jquery.com/plugins/) function and your carousel is ready. ```javascript $(document).ready(function(){ @@ -51,7 +95,7 @@ $(document).ready(function(){ ## Documentation -The documentation, included in this repo in the root directory, is built with [Assemble](http://assemble.io/) and publicly available at http://owlcarousel2.github.io/OwlCarousel2/. The documentation may also be run locally. +The documentation, included in this repo in the root directory, is built with [Assemble](http://assemble.io/) and publicly available at https://owlcarousel2.github.io/OwlCarousel2/. The documentation may also be run locally. ## Building @@ -68,6 +112,11 @@ To define which plugins are build into the distribution just edit `/_config.json Please read [CONTRIBUTING.md](CONTRIBUTING.md). +## Roadmap + +Please make sure to check out our [Roadmap Discussion](https://github.com/OwlCarousel2/OwlCarousel2/issues/1756). + + ## License The code and the documentation are released under the [MIT License](LICENSE). diff --git a/js/owl-carousel/assets/owl.carousel.css b/js/owl-carousel/assets/owl.carousel.css index f2050f43de..40237bc65f 100644 --- a/js/owl-carousel/assets/owl.carousel.css +++ b/js/owl-carousel/assets/owl.carousel.css @@ -1,7 +1,7 @@ /** - * Owl Carousel v2.1.0 - * Copyright 2013-2016 David Deutsch - * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE */ /* * Owl Carousel - Core @@ -15,7 +15,10 @@ z-index: 1; } .owl-carousel .owl-stage { position: relative; - -ms-touch-action: pan-Y; } + -ms-touch-action: pan-Y; + touch-action: manipulation; + -moz-backface-visibility: hidden; + /* fix firefox animation glitch */ } .owl-carousel .owl-stage:after { content: "."; display: block; @@ -28,6 +31,14 @@ overflow: hidden; /* fix for flashing background */ -webkit-transform: translate3d(0px, 0px, 0px); } + .owl-carousel .owl-wrapper, + .owl-carousel .owl-item { + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); } .owl-carousel .owl-item { position: relative; min-height: 1px; @@ -37,8 +48,7 @@ -webkit-touch-callout: none; } .owl-carousel .owl-item img { display: block; - width: 100%; - -webkit-transform-style: preserve-3d; } + width: 100%; } .owl-carousel .owl-nav.disabled, .owl-carousel .owl-dots.disabled { display: none; } @@ -46,12 +56,19 @@ .owl-carousel .owl-nav .owl-next, .owl-carousel .owl-dot { cursor: pointer; - cursor: hand; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } + .owl-carousel .owl-nav button.owl-prev, + .owl-carousel .owl-nav button.owl-next, + .owl-carousel button.owl-dot { + background: none; + color: inherit; + border: none; + padding: 0 !important; + font: inherit; } .owl-carousel.owl-loaded { display: block; } .owl-carousel.owl-loading { @@ -60,8 +77,10 @@ .owl-carousel.owl-hidden { opacity: 0; } .owl-carousel.owl-refresh .owl-item { - display: none; } + visibility: hidden; } .owl-carousel.owl-drag .owl-item { + -ms-touch-action: pan-y; + touch-action: pan-y; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; @@ -82,10 +101,8 @@ * Owl Carousel - Animate Plugin */ .owl-carousel .animated { - -webkit-animation-duration: 1000ms; - animation-duration: 1000ms; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; } + animation-duration: 1000ms; + animation-fill-mode: both; } .owl-carousel .owl-animated-in { z-index: 0; } @@ -94,14 +111,7 @@ z-index: 1; } .owl-carousel .fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; } - -@-webkit-keyframes fadeOut { - 0% { - opacity: 1; } - 100% { - opacity: 0; } } + animation-name: fadeOut; } @keyframes fadeOut { 0% { @@ -118,13 +128,18 @@ /* * Owl Carousel - Lazy Load Plugin */ -.owl-carousel .owl-item .owl-lazy { - opacity: 0; - transition: opacity 400ms ease; } - -.owl-carousel .owl-item img.owl-lazy { - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } +.owl-carousel .owl-item { + /** + This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong + calculation of the height of the owl-item that breaks page layouts + */ } + .owl-carousel .owl-item .owl-lazy { + opacity: 0; + transition: opacity 400ms ease; } + .owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) { + max-height: 0; } + .owl-carousel .owl-item img.owl-lazy { + transform-style: preserve-3d; } /* * Owl Carousel - Video Plugin @@ -146,13 +161,11 @@ cursor: pointer; z-index: 1; -webkit-backface-visibility: hidden; - transition: -webkit-transform 100ms ease; transition: transform 100ms ease; } .owl-carousel .owl-video-play-icon:hover { - -webkit-transform: scale(1.3, 1.3); - -ms-transform: scale(1.3, 1.3); - transform: scale(1.3, 1.3); } + -ms-transform: scale(1.3, 1.3); + transform: scale(1.3, 1.3); } .owl-carousel .owl-video-playing .owl-video-tn, .owl-carousel .owl-video-playing .owl-video-play-icon { diff --git a/js/owl-carousel/assets/owl.carousel.min.css b/js/owl-carousel/assets/owl.carousel.min.css index 29a2c7a78b..a71df11c01 100644 --- a/js/owl-carousel/assets/owl.carousel.min.css +++ b/js/owl-carousel/assets/owl.carousel.min.css @@ -1,6 +1,6 @@ /** - * Owl Carousel v2.1.0 - * Copyright 2013-2016 David Deutsch - * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE */ -.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%;-webkit-transform-style:preserve-3d}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loaded{display:block}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{display:none}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.no-js .owl-carousel{display:block}.owl-carousel .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:-webkit-transform .1s ease;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-webkit-transform:scale(1.3,1.3);-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} \ No newline at end of file +.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} \ No newline at end of file diff --git a/js/owl-carousel/assets/owl.theme.default.css b/js/owl-carousel/assets/owl.theme.default.css new file mode 100644 index 0000000000..e2020fb101 --- /dev/null +++ b/js/owl-carousel/assets/owl.theme.default.css @@ -0,0 +1,50 @@ +/** + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE + */ +/* + * Default theme - Owl Carousel CSS File + */ +.owl-theme .owl-nav { + margin-top: 10px; + text-align: center; + -webkit-tap-highlight-color: transparent; } + .owl-theme .owl-nav [class*='owl-'] { + color: #FFF; + font-size: 14px; + margin: 5px; + padding: 4px 7px; + background: #D6D6D6; + display: inline-block; + cursor: pointer; + border-radius: 3px; } + .owl-theme .owl-nav [class*='owl-']:hover { + background: #869791; + color: #FFF; + text-decoration: none; } + .owl-theme .owl-nav .disabled { + opacity: 0.5; + cursor: default; } + +.owl-theme .owl-nav.disabled + .owl-dots { + margin-top: 10px; } + +.owl-theme .owl-dots { + text-align: center; + -webkit-tap-highlight-color: transparent; } + .owl-theme .owl-dots .owl-dot { + display: inline-block; + zoom: 1; + *display: inline; } + .owl-theme .owl-dots .owl-dot span { + width: 10px; + height: 10px; + margin: 5px 7px; + background: #D6D6D6; + display: block; + -webkit-backface-visibility: visible; + transition: opacity 200ms ease; + border-radius: 30px; } + .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { + background: #869791; } diff --git a/js/owl-carousel/assets/owl.theme.default.min.css b/js/owl-carousel/assets/owl.theme.default.min.css index d5bca3021d..487088d2e3 100644 --- a/js/owl-carousel/assets/owl.theme.default.min.css +++ b/js/owl-carousel/assets/owl.theme.default.min.css @@ -1,5 +1,6 @@ /** - * Owl Carousel v2.1.0 - * Copyright 2013-2016 David Deutsch - * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE */ +.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} \ No newline at end of file diff --git a/js/owl-carousel/assets/owl.theme.green.css b/js/owl-carousel/assets/owl.theme.green.css new file mode 100644 index 0000000000..5235fbe3bc --- /dev/null +++ b/js/owl-carousel/assets/owl.theme.green.css @@ -0,0 +1,50 @@ +/** + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE + */ +/* + * Green theme - Owl Carousel CSS File + */ +.owl-theme .owl-nav { + margin-top: 10px; + text-align: center; + -webkit-tap-highlight-color: transparent; } + .owl-theme .owl-nav [class*='owl-'] { + color: #FFF; + font-size: 14px; + margin: 5px; + padding: 4px 7px; + background: #D6D6D6; + display: inline-block; + cursor: pointer; + border-radius: 3px; } + .owl-theme .owl-nav [class*='owl-']:hover { + background: #4DC7A0; + color: #FFF; + text-decoration: none; } + .owl-theme .owl-nav .disabled { + opacity: 0.5; + cursor: default; } + +.owl-theme .owl-nav.disabled + .owl-dots { + margin-top: 10px; } + +.owl-theme .owl-dots { + text-align: center; + -webkit-tap-highlight-color: transparent; } + .owl-theme .owl-dots .owl-dot { + display: inline-block; + zoom: 1; + *display: inline; } + .owl-theme .owl-dots .owl-dot span { + width: 10px; + height: 10px; + margin: 5px 7px; + background: #D6D6D6; + display: block; + -webkit-backface-visibility: visible; + transition: opacity 200ms ease; + border-radius: 30px; } + .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { + background: #4DC7A0; } diff --git a/js/owl-carousel/assets/owl.theme.green.min.css b/js/owl-carousel/assets/owl.theme.green.min.css index d5bca3021d..187bea0879 100644 --- a/js/owl-carousel/assets/owl.theme.green.min.css +++ b/js/owl-carousel/assets/owl.theme.green.min.css @@ -1,5 +1,6 @@ /** - * Owl Carousel v2.1.0 - * Copyright 2013-2016 David Deutsch - * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE */ +.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0} \ No newline at end of file diff --git a/js/owl-carousel/index.php b/js/owl-carousel/index.php deleted file mode 100644 index ecafa50cf2..0000000000 --- a/js/owl-carousel/index.php +++ /dev/null @@ -1,32 +0,0 @@ - 0) { + // Switch to only using appended clones clones.push(this.normalize(clones.length / 2, true)); append = append + items[clones[clones.length - 1]][0].outerHTML; clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true)); prepend = items[clones[clones.length - 1]][0].outerHTML + prepend; + repeat -= 1; } this._clones = clones; @@ -433,48 +438,63 @@ this.$stage.children('.active').removeClass('active'); this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active'); + this.$stage.children('.center').removeClass('center'); if (this.settings.center) { - this.$stage.children('.center').removeClass('center'); this.$stage.children().eq(this.current()).addClass('center'); } } } ]; /** - * Initializes the carousel. - * @protected + * Create the stage DOM element */ - Owl.prototype.initialize = function() { - this.enter('initializing'); - this.trigger('initialize'); - - this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl); - - if (this.settings.autoWidth && !this.is('pre-loading')) { - var imgs, nestedSelector, width; - imgs = this.$element.find('img'); - nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; - width = this.$element.children(nestedSelector).width(); + Owl.prototype.initializeStage = function() { + this.$stage = this.$element.find('.' + this.settings.stageClass); - if (imgs.length && width <= 0) { - this.preloadAutoWidthImages(imgs); - } + // if the stage is already in the DOM, grab it and skip stage initialization + if (this.$stage.length) { + return; } this.$element.addClass(this.options.loadingClass); // create stage - this.$stage = $('<' + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>') - .wrap('
'); + this.$stage = $('<' + this.settings.stageElement + '>', { + "class": this.settings.stageClass + }).wrap( $( '
', { + "class": this.settings.stageOuterClass + })); // append stage this.$element.append(this.$stage.parent()); + }; + + /** + * Create item DOM elements + */ + Owl.prototype.initializeItems = function() { + var $items = this.$element.find('.owl-item'); + + // if the items are already in the DOM, grab them and skip item initialization + if ($items.length) { + this._items = $items.get().map(function(item) { + return $(item); + }); + + this._mergers = this._items.map(function() { + return 1; + }); + + this.refresh(); + + return; + } // append content this.replace(this.$element.children().not(this.$stage.parent())); // check visibility - if (this.$element.is(':visible')) { + if (this.isVisible()) { // update view this.refresh(); } else { @@ -485,6 +505,31 @@ this.$element .removeClass(this.options.loadingClass) .addClass(this.options.loadedClass); + }; + + /** + * Initializes the carousel. + * @protected + */ + Owl.prototype.initialize = function() { + this.enter('initializing'); + this.trigger('initialize'); + + this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl); + + if (this.settings.autoWidth && !this.is('pre-loading')) { + var imgs, nestedSelector, width; + imgs = this.$element.find('img'); + nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; + width = this.$element.children(nestedSelector).width(); + + if (imgs.length && width <= 0) { + this.preloadAutoWidthImages(imgs); + } + } + + this.initializeStage(); + this.initializeItems(); // register event handlers this.registerEventHandlers(); @@ -493,6 +538,17 @@ this.trigger('initialized'); }; + /** + * @returns {Boolean} visibility of $element + * if you know the carousel will always be visible you can set `checkVisibility` to `false` to + * prevent the expensive browser layout forced reflow the $element.is(':visible') does + */ + Owl.prototype.isVisible = function() { + return this.settings.checkVisibility + ? this.$element.is(':visible') + : true; + }; + /** * Setups the current settings. * @todo Remove responsive classes. Why should adaptive designs be brought into IE8? @@ -515,6 +571,9 @@ }); settings = $.extend({}, this.options, overwrites[match]); + if (typeof settings.stagePadding === 'function') { + settings.stagePadding = settings.stagePadding(); + } delete settings.responsive; // responsive class @@ -525,13 +584,11 @@ } } - if (this.settings === null || this._breakpoint !== match) { - this.trigger('change', { property: { name: 'settings', value: settings } }); - this._breakpoint = match; - this.settings = settings; - this.invalidate('settings'); - this.trigger('changed', { property: { name: 'settings', value: this.settings } }); - } + this.trigger('change', { property: { name: 'settings', value: settings } }); + this._breakpoint = match; + this.settings = settings; + this.invalidate('settings'); + this.trigger('changed', { property: { name: 'settings', value: this.settings } }); }; /** @@ -647,7 +704,7 @@ return false; } - if (!this.$element.is(':visible')) { + if (!this.isVisible()) { return false; } @@ -853,7 +910,7 @@ } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) { position = index + 1; } else if (this.op(coordinate, '<', value) - && this.op(coordinate, '>', coordinates[index + 1] || value - width)) { + && this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) { position = direction === 'left' ? index + 1 : index; } return position === -1; @@ -891,7 +948,9 @@ if ($.support.transform3d && $.support.transition) { this.$stage.css({ transform: 'translate3d(' + coordinate + 'px,0px,0px)', - transition: (this.speed() / 1000) + 's' + transition: (this.speed() / 1000) + 's' + ( + this.settings.slideTransition ? ' ' + this.settings.slideTransition : '' + ) }); } else if (animate) { this.$stage.animate({ @@ -1022,17 +1081,25 @@ Owl.prototype.maximum = function(relative) { var settings = this.settings, maximum = this._coordinates.length, - boundary = Math.abs(this._coordinates[maximum - 1]) - this._width, - i = -1, j; + iterator, + reciprocalItemsWidth, + elementWidth; if (settings.loop) { maximum = this._clones.length / 2 + this._items.length - 1; } else if (settings.autoWidth || settings.merge) { - // binary search - while (maximum - i > 1) { - Math.abs(this._coordinates[j = maximum + i >> 1]) < boundary - ? i = j : maximum = j; + iterator = this._items.length; + if (iterator) { + reciprocalItemsWidth = this._items[--iterator].width(); + elementWidth = this.$element.width(); + while (iterator--) { + reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin; + if (reciprocalItemsWidth > elementWidth) { + break; + } + } } + maximum = iterator + 1; } else if (settings.center) { maximum = this._items.length - 1; } else { @@ -1207,7 +1274,7 @@ this.speed(this.duration(current, position, speed)); this.current(position); - if (this.$element.is(':visible')) { + if (this.isVisible()) { this.update(); } }; @@ -1267,7 +1334,7 @@ } else if (document.documentElement && document.documentElement.clientWidth) { width = document.documentElement.clientWidth; } else { - throw 'Can not detect viewport width.'; + console.warn('Can not detect viewport width.'); } return width; }; @@ -1295,7 +1362,7 @@ item = this.prepare(item); this.$stage.append(item); this._items.push(item); - this._mergers.push(item.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); + this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); }, this)); this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0); @@ -1324,11 +1391,11 @@ this._items.length === 0 && this.$stage.append(content); this._items.length !== 0 && this._items[position - 1].after(content); this._items.push(content); - this._mergers.push(content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); + this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); } else { this._items[position].before(content); this._items.splice(position, 0, content); - this._mergers.splice(position, 0, content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); + this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); } this._items[current] && this.reset(this._items[current].index()); @@ -1404,7 +1471,7 @@ this.$stage.unwrap(); this.$stage.children().contents().unwrap(); this.$stage.children().unwrap(); - + this.$stage.remove(); this.$element .removeClass(this.options.refreshClass) .removeClass(this.options.loadingClass) @@ -1689,7 +1756,7 @@ /** * AutoRefresh Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Artus Kolanowski * @author David Deutsch * @license The MIT License (MIT) @@ -1760,7 +1827,7 @@ return; } - this._visible = this._core.$element.is(':visible'); + this._visible = this._core.isVisible(); this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval); }; @@ -1768,7 +1835,7 @@ * Refreshes the element. */ AutoRefresh.prototype.refresh = function() { - if (this._core.$element.is(':visible') === this._visible) { + if (this._core.isVisible() === this._visible) { return; } @@ -1801,7 +1868,7 @@ /** * Lazy Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Bartosz Wojciechowski * @author David Deutsch * @license The MIT License (MIT) @@ -1851,6 +1918,15 @@ position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i, clones = this._core.clones().length, load = $.proxy(function(i, v) { this.load(v) }, this); + //TODO: Need documentation for this new option + if (settings.lazyLoadEager > 0) { + n += settings.lazyLoadEager; + // If the carousel is looping also preload images that are to the "left" + if (settings.loop) { + position -= settings.lazyLoadEager; + n++; + } + } while (i++ < n) { this.load(clones / 2 + this._core.relative(position)); @@ -1873,7 +1949,8 @@ * @public */ Lazy.Defaults = { - lazyLoad: false + lazyLoad: false, + lazyLoadEager: 0 }; /** @@ -1891,7 +1968,7 @@ $elements.each($.proxy(function(index, element) { var $element = $(element), image, - url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src'); + url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset'); this._core.trigger('load', { element: $element, url: url }, 'lazy'); @@ -1900,11 +1977,15 @@ $element.css('opacity', 1); this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); }, this)).attr('src', url); + } else if ($element.is('source')) { + $element.one('load.owl.lazy', $.proxy(function() { + this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); + }, this)).attr('srcset', url); } else { image = new Image(); image.onload = $.proxy(function() { $element.css({ - 'background-image': 'url(' + url + ')', + 'background-image': 'url("' + url + '")', 'opacity': '1' }); this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); @@ -1937,7 +2018,7 @@ /** * AutoHeight Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Bartosz Wojciechowski * @author David Deutsch * @license The MIT License (MIT) @@ -1957,6 +2038,8 @@ */ this._core = carousel; + this._previousHeight = null; + /** * All event handlers. * @protected @@ -1969,7 +2052,7 @@ } }, this), 'changed.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){ + if (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){ this.update(); } }, this), @@ -1986,6 +2069,32 @@ // register event handlers this._core.$element.on(this._handlers); + this._intervalId = null; + var refThis = this; + + // These changes have been taken from a PR by gavrochelegnou proposed in #1575 + // and have been made compatible with the latest jQuery version + $(window).on('load', function() { + if (refThis._core.settings.autoHeight) { + refThis.update(); + } + }); + + // Autoresize the height of the carousel when window is resized + // When carousel has images, the height is dependent on the width + // and should also change on resize + $(window).resize(function() { + if (refThis._core.settings.autoHeight) { + if (refThis._intervalId != null) { + clearTimeout(refThis._intervalId); + } + + refThis._intervalId = setTimeout(function() { + refThis.update(); + }, 250); + } + }); + }; /** @@ -2003,6 +2112,7 @@ AutoHeight.prototype.update = function() { var start = this._core._current, end = start + this._core.settings.items, + lazyLoadEnabled = this._core.settings.lazyLoad, visible = this._core.$stage.children().toArray().slice(start, end), heights = [], maxheight = 0; @@ -2013,6 +2123,12 @@ maxheight = Math.max.apply(null, heights); + if (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) { + maxheight = this._previousHeight; + } + + this._previousHeight = maxheight; + this._core.$stage.parent() .height(maxheight) .addClass(this._core.settings.autoHeightClass); @@ -2025,7 +2141,7 @@ this._core.$element.off(handler, this._handlers[handler]); } for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); + typeof this[property] !== 'function' && (this[property] = null); } }; @@ -2035,7 +2151,7 @@ /** * Video Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Bartosz Wojciechowski * @author David Deutsch * @license The MIT License (MIT) @@ -2163,10 +2279,10 @@ https://vimeo.com/groups/:group/videos/:id https://app.vzaar.com/videos/:id - Visual example: http://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F + Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F */ - id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); + id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); if (id[3].indexOf('youtu') > -1) { type = 'youtube'; @@ -2205,7 +2321,7 @@ var tnLink, icon, path, - dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '', + dimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '', customTn = target.find('img'), srcType = 'src', lazyClass = '', @@ -2214,16 +2330,25 @@ icon = '
'; if (settings.lazyLoad) { - tnLink = '
'; + tnLink = $('
',{ + "class": 'owl-video-tn ' + lazyClass, + "srcType": path + }); } else { - tnLink = '
'; + tnLink = $( '
', { + "class": "owl-video-tn", + "style": 'opacity:1;background-image:url(' + path + ')' + }); } target.after(tnLink); target.after(icon); }; // wrap video content into owl-video-wrapper div - target.wrap('
'); + target.wrap( $( '
', { + "class": "owl-video-wrapper", + "style": dimensions + })); if (this._core.settings.lazyLoad) { srcType = 'data-src'; @@ -2289,7 +2414,8 @@ video = this._videos[item.attr('data-video')], width = video.width || '100%', height = video.height || this._core.$stage.height(), - html; + html, + iframe; if (this._playing) { return; @@ -2302,20 +2428,18 @@ this._core.reset(item.index()); + html = $( '' ); + html.attr( 'height', height ); + html.attr( 'width', width ); if (video.type === 'youtube') { - html = ''; + html.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id ); } else if (video.type === 'vimeo') { - html = ''; + html.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' ); } else if (video.type === 'vzaar') { - html = ''; + html.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' ); } - $('
' + html + '
').insertAfter(item.find('.owl-video')); + iframe = $(html).wrap( '
' ).insertAfter(item.find('.owl-video')); this._playing = item.addClass('owl-video-playing'); }; @@ -2355,7 +2479,7 @@ /** * Animate Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Bartosz Wojciechowski * @author David Deutsch * @license The MIT License (MIT) @@ -2477,10 +2601,11 @@ /** * Autoplay Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Bartosz Wojciechowski * @author Artus Kolanowski * @author David Deutsch + * @author Tom De Caluwé * @license The MIT License (MIT) */ ;(function($, window, document, undefined) { @@ -2499,16 +2624,31 @@ this._core = carousel; /** - * The autoplay timeout. - * @type {Timeout} + * The autoplay timeout id. + * @type {Number} + */ + this._call = null; + + /** + * Depending on the state of the plugin, this variable contains either + * the start time of the timer or the current timer value if it's + * paused. Since we start in a paused state we initialize the timer + * value. + * @type {Number} + */ + this._time = 0; + + /** + * Stores the timeout currently used. + * @type {Number} */ - this._timeout = null; + this._timeout = 0; /** * Indicates whenever the autoplay is paused. * @type {Boolean} */ - this._paused = false; + this._paused = true; /** * All event handlers. @@ -2523,11 +2663,10 @@ } else { this.stop(); } - } else if (e.namespace && e.property.name === 'position') { - //console.log('play?', e); - if (this._core.settings.autoplay) { - this._setAutoPlayInterval(); - } + } else if (e.namespace && e.property.name === 'position' && this._paused) { + // Reset the timer. This code is triggered when the position + // of the carousel was changed through user interaction. + this._time = 0; } }, this), 'initialized.owl.carousel': $.proxy(function(e) { @@ -2586,48 +2725,63 @@ }; /** - * Starts the autoplay. - * @public - * @param {Number} [timeout] - The interval before the next animation starts. + * Transition to the next slide and set a timeout for the next transition. + * @private * @param {Number} [speed] - The animation speed for the animations. */ - Autoplay.prototype.play = function(timeout, speed) { - this._paused = false; + Autoplay.prototype._next = function(speed) { + this._call = window.setTimeout( + $.proxy(this._next, this, speed), + this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read() + ); - if (this._core.is('rotating')) { + if (this._core.is('interacting') || document.hidden) { return; } + this._core.next(speed || this._core.settings.autoplaySpeed); + } - this._core.enter('rotating'); - - this._setAutoPlayInterval(); + /** + * Reads the current timer value when the timer is playing. + * @public + */ + Autoplay.prototype.read = function() { + return new Date().getTime() - this._time; }; /** - * Gets a new timeout - * @private + * Starts the autoplay. + * @public * @param {Number} [timeout] - The interval before the next animation starts. * @param {Number} [speed] - The animation speed for the animations. - * @return {Timeout} */ - Autoplay.prototype._getNextTimeout = function(timeout, speed) { - if ( this._timeout ) { - window.clearTimeout(this._timeout); + Autoplay.prototype.play = function(timeout, speed) { + var elapsed; + + if (!this._core.is('rotating')) { + this._core.enter('rotating'); } - return window.setTimeout($.proxy(function() { - if (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) { - return; - } - this._core.next(speed || this._core.settings.autoplaySpeed); - }, this), timeout || this._core.settings.autoplayTimeout); - }; - /** - * Sets autoplay in motion. - * @private - */ - Autoplay.prototype._setAutoPlayInterval = function() { - this._timeout = this._getNextTimeout(); + timeout = timeout || this._core.settings.autoplayTimeout; + + // Calculate the elapsed time since the last transition. If the carousel + // wasn't playing this calculation will yield zero. + elapsed = Math.min(this._time % (this._timeout || timeout), timeout); + + if (this._paused) { + // Start the clock. + this._time = this.read(); + this._paused = false; + } else { + // Clear the active timeout to allow replacement. + window.clearTimeout(this._call); + } + + // Adjust the origin of the timer to match the new timeout value. + this._time += this.read() % timeout - elapsed; + + this._timeout = timeout; + this._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed); }; /** @@ -2635,24 +2789,28 @@ * @public */ Autoplay.prototype.stop = function() { - if (!this._core.is('rotating')) { - return; - } + if (this._core.is('rotating')) { + // Reset the clock. + this._time = 0; + this._paused = true; - window.clearTimeout(this._timeout); - this._core.leave('rotating'); + window.clearTimeout(this._call); + this._core.leave('rotating'); + } }; /** - * Stops the autoplay. + * Pauses the autoplay. * @public */ Autoplay.prototype.pause = function() { - if (!this._core.is('rotating')) { - return; - } + if (this._core.is('rotating') && !this._paused) { + // Pause the clock. + this._time = this.read(); + this._paused = true; - this._paused = true; + window.clearTimeout(this._call); + } }; /** @@ -2677,7 +2835,7 @@ /** * Navigation Plugin - * @version 2.1.0 + * @version 2.3.4 * @author Artus Kolanowski * @author David Deutsch * @license The MIT License (MIT) @@ -2804,12 +2962,18 @@ */ Navigation.Defaults = { nav: false, - navText: [ 'prev', 'next' ], + navText: [ + '', + '' + ], navSpeed: false, - navElement: 'div', + navElement: 'button type="button" role="presentation"', navContainer: false, navContainerClass: 'owl-nav', - navClass: [ 'owl-prev', 'owl-next' ], + navClass: [ + 'owl-prev', + 'owl-next' + ], slideBy: 1, dotClass: 'owl-dot', dotsClass: 'owl-dots', @@ -2849,7 +3013,7 @@ // create DOM structure for absolute navigation if (!settings.dotsData) { - this._templates = [ $('
') + this._templates = [ $(' - {/if} -

- -{/if} + {else} +

+ - {l s='We allow the following currency to be sent via bank wire:' mod='bankwire'} {$currencies.0.name} + +

+ {/if} + +

- {l s='Bank wire account information will be displayed on the next page.' mod='bankwire'}

+

- {l s='Please confirm your order by clicking "I confirm my order".' mod='bankwire'}

+
+ +
+ + {l s=' Other payment methods' mod='bankwire'} + + {if !$restrict_order} + + {/if} +
+ + {/if} +
+ diff --git a/modules/bankwire/views/templates/hook/payment.tpl b/modules/bankwire/views/templates/hook/payment.tpl index 64bbabf8c7..b893f09bd8 100644 --- a/modules/bankwire/views/templates/hook/payment.tpl +++ b/modules/bankwire/views/templates/hook/payment.tpl @@ -22,12 +22,12 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} - + + + {l s='Pay by bank wire' mod='bankwire'} + + + {l s='Pay by bank wire' mod='bankwire'} + {l s='(order processing will be longer)' mod='bankwire'} + + diff --git a/modules/bankwire/views/templates/hook/payment_return.tpl b/modules/bankwire/views/templates/hook/payment_return.tpl index 7e0cd7579f..b71a52e849 100644 --- a/modules/bankwire/views/templates/hook/payment_return.tpl +++ b/modules/bankwire/views/templates/hook/payment_return.tpl @@ -25,11 +25,11 @@ {if $status == 'ok'}

{l s='Your' mod='bankwire'} {if $cart_room_bookings|count > 1}{l s='bookings have' mod='bankwire'}{else}{l s='booking has' mod='bankwire'}{/if} {l s='been created successfully!' mod='bankwire'}



-

{l s='Please send us a bank wire with:' mod='bankwire'}

+ {l s='Please send us a bank wire with:' mod='bankwire'}
- {l s='Amount' mod='bankwire'} {$total_to_pay} -

- {l s='Name of account owner:' mod='bankwire'} {if $bankwireOwner}{$bankwireOwner}{else}___________{/if} -

- {l s='Include these details:' mod='bankwire'} {if $bankwireDetails}{$bankwireDetails}{else}___________{/if} -

- {l s='Bank address:' mod='bankwire'} {if $bankwireAddress}{$bankwireAddress}{else}___________{/if} +
- {l s='Name of account owner:' mod='bankwire'} {if $bankwireOwner}{$bankwireOwner}{else}___________{/if} +
- {l s='Include these details:' mod='bankwire'} {if $bankwireDetails}{$bankwireDetails}{else}___________{/if} +
- {l s='Bank address:' mod='bankwire'} {if $bankwireAddress}{$bankwireAddress}{else}___________{/if}
{if !isset($reference)}

{l s='Do not forget to insert your order number #%d in the subject of your bank wire.' sprintf=$id_order mod='bankwire'}

diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index ca2ad2695c..fa40d64dfc 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -33,59 +33,98 @@ $(document).ready(function() { e.preventDefault(); ajaxCart.expand(); }); + function openCartDrawer() { + var $drawer = $('.cart-sidebar'); + if (!$drawer.length) return; + $drawer.addClass('open').attr('aria-hidden', 'false'); + $('#cartOverlay').attr('aria-hidden', 'false').fadeIn(150); + $('body').addClass('cart-drawer-open'); + $('#header .shopping_cart > a[aria-controls]').attr('aria-expanded', 'true'); + } + + function closeCartDrawer() { + var $drawer = $('.cart-sidebar'); + if (!$drawer.length) return; + $drawer.removeClass('open').attr('aria-hidden', 'true'); + $('#cartOverlay').attr('aria-hidden', 'true').fadeOut(150); + $('body').removeClass('cart-drawer-open'); + $('#header .shopping_cart > a[aria-controls]').attr('aria-expanded', 'false'); + } + + $(document).on('click', '#header .shopping_cart > a', function(e) { + // Drawer replaces the legacy "hover dropdown" behavior. + if ($('.cart-sidebar').length) { + e.preventDefault(); + e.stopPropagation(); + openCartDrawer(); + } + }); + + $(document).on('click', '.cart-close, #cartOverlay', function(e) { + e.preventDefault(); + closeCartDrawer(); + }); + + $(document).on('keydown', function(e) { + if (e.key === 'Escape') closeCartDrawer(); + }); var current_timestamp = parseInt(new Date().getTime() / 1000); if (typeof $('.ajax_cart_quantity').html() == 'undefined' || (typeof generated_date != 'undefined' && generated_date != null && (parseInt(generated_date) + 30) < current_timestamp)) ajaxCart.refresh(); - /* roll over cart */ - var cart_block = new HoverWatcher('#header .cart_block'); - var shopping_cart = new HoverWatcher('#header .shopping_cart'); - var is_touch_enabled = false; + // Legacy hover dropdown (kept for themes that do not use the drawer). + if (!$('.cart-sidebar').length) { + /* roll over cart */ + var cart_block = new HoverWatcher('#header .cart_block'); + var shopping_cart = new HoverWatcher('#header .shopping_cart'); + var is_touch_enabled = false; - if ('ontouchstart' in document.documentElement) - is_touch_enabled = true; + if ('ontouchstart' in document.documentElement) + is_touch_enabled = true; - $(document).on('click', '#header .shopping_cart > a:first', function(e) { - e.preventDefault(); - e.stopPropagation(); - - // Simulate hover when browser says device is touch based - if (is_touch_enabled) { - if ($(this).next('.cart_block:visible').length && !cart_block.isHoveringOver()) - $("#header .cart_block").stop(true, true).slideUp(450); - else if (ajaxCart.nb_total_products > 0 || parseInt($('.ajax_cart_quantity').html()) > 0) - $("#header .cart_block").stop(true, true).slideDown(450); - return; - } else - window.location.href = $(this).attr('href'); - }); + $(document).on('click', '#header .shopping_cart > a:first', function(e) { + e.preventDefault(); + e.stopPropagation(); - $("#header .shopping_cart a:first").hover( - function() { - if (!is_touch_enabled) { - if (ajaxCart.nb_total_products > 0 || parseInt($('.ajax_cart_quantity').html()) > 0) + // Simulate hover when browser says device is touch based + if (is_touch_enabled) { + if ($(this).next('.cart_block:visible').length && !cart_block.isHoveringOver()) + $("#header .cart_block").stop(true, true).slideUp(450); + else if (ajaxCart.nb_total_products > 0 || parseInt($('.ajax_cart_quantity').html()) > 0) $("#header .cart_block").stop(true, true).slideDown(450); + return; + } else + window.location.href = $(this).attr('href'); + }); + + $("#header .shopping_cart a:first").hover( + function() { + if (!is_touch_enabled) { + if (ajaxCart.nb_total_products > 0 || parseInt($('.ajax_cart_quantity').html()) > 0) { + $("#header .cart_block").stop(true, true).slideDown(450); + } + } + }, + function() { + setTimeout(function() { + if (!shopping_cart.isHoveringOver() && !cart_block.isHoveringOver()) + $("#header .cart_block").stop(true, true).slideUp(450); + }, 200); } - }, - function() { - setTimeout(function() { - if (!shopping_cart.isHoveringOver() && !cart_block.isHoveringOver()) - $("#header .cart_block").stop(true, true).slideUp(450); - }, 200); - } - ); + ); - $("#header .cart_block").hover( - function() {}, - function() { - setTimeout(function() { - if (!shopping_cart.isHoveringOver()) - $("#header .cart_block").stop(true, true).slideUp(450); - }, 200); - } - ); + $("#header .cart_block").hover( + function() {}, + function() { + setTimeout(function() { + if (!shopping_cart.isHoveringOver()) + $("#header .cart_block").stop(true, true).slideUp(450); + }, 200); + } + ); + } $(document).on('click', '.delete_voucher', function(e) { e.preventDefault(); @@ -174,7 +213,7 @@ var ajaxCart = { var id_product = $(this).attr('id_product'); // this condition is added by webkul to delete a single room form current cart. if ($('#booking_dates_container_' + id_product).find('.rooms_remove_container .remove_rooms_from_cart_link').length == 1) { - $(this).closest(".rooms_remove_container").parents("div.cart_prod_cont").siblings(".remove_link").find("a.ajax_cart_block_remove_link").click(); + $(this).closest('dt').find('a.ajax_cart_block_remove_link').first().trigger('click'); } else { var date_from = $(this).attr('date_from'); @@ -736,7 +775,14 @@ var ajaxCart = { // If the cart is now empty, show the 'no product in the cart' message and close detail if ($('.cart_block:first dl.products dt').length == 0) { $('.ajax_cart_quantity').html('0'); - $("#header .cart_block").stop(true, true).slideUp(200); + if ($('.cart-sidebar').length) { + $('.cart-sidebar').removeClass('open').attr('aria-hidden', 'true'); + $('#cartOverlay').attr('aria-hidden', 'true').fadeOut(150); + $('body').removeClass('cart-drawer-open'); + $('#header .shopping_cart > a[aria-controls]').attr('aria-expanded', 'false'); + } else { + $("#header .cart_block").stop(true, true).slideUp(200); + } $('.cart_block_no_products:hidden').slideDown(450); $('.cart_block dl.products').remove(); } @@ -867,29 +913,36 @@ var ajaxCart = { if ($('dt[data-id="cart_block_product_' + productDomId + '"]').length == 0) { var productAttributeId = (product.hasAttributes ? parseInt(product.attributes) : 0); - var content = '
'; + var content = '
'; var name = $.trim($('').html(product.name).text()); name = (name.length > 30 ? name.substring(0, 27) + '...' : name); - content += '' + product.name + ''; + content += '
'; + content += '' + product.name + ''; + + content += '
'; + content += '
'; + content += '' + name + ''; - content += '
'; - content += '
'; - content += '' + name + ''; + if (typeof(product.is_gift) == 'undefined' || product.is_gift == 0) { + content += ''; + } content += '
'; + if ((parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) && (typeof(hotel_wise_data) != 'undefined' && typeof(hotel_wise_data.hotel_name) != 'undefined') ) { - content += '
' + hotel_wise_data.hotel_name + '
'; + content += '
' + hotel_wise_data.hotel_name + '
'; } - if (product.hasAttributes) - content += ''; + if (product.hasAttributes) { + content += '
' + product.attributes + '
'; + } - if (typeof(freeProductTranslation) != 'undefined') { - content += '
'; - content += 'Price:'; - content += ' '; + if (typeof(freeProductTranslation) != 'undefined') { + content += '
'; + content += '' + price_txt + ':'; + content += ' '; if (product.booking_product) { content += formatCurrency(parseFloat(product.bookingData.total_room_type_amount), currency_format, currency_sign, currency_blank); @@ -904,39 +957,28 @@ var ajaxCart = { content += ''; content += '
'; } - content += '
'; if (product.booking_product || product.allow_multiple_quantity) { - content += '' + total_qty_txt + ':'; - } - content += ''; - content += ''; - if (product.booking_product) { - content += product.bookingData.total_num_rooms; - } else if (product.allow_multiple_quantity) { - if (typeof(hotel_wise_data) != 'undefined' && hotel_wise_data.total_qty) { - content += hotel_wise_data.total_qty; - } else { - content += product.cart_quantity; + content += '
'; + content += '' + total_qty_txt + ':'; + content += ''; + if (product.booking_product) { + content += product.bookingData.total_num_rooms; + } else if (product.allow_multiple_quantity) { + if (typeof(hotel_wise_data) != 'undefined' && hotel_wise_data.total_qty) { + content += hotel_wise_data.total_qty; + } else { + content += product.cart_quantity; + } } + content += ''; + content += '
'; } - content += '
'; - content += '
'; - content += '
'; - content += '
'; - - - if (typeof(product.is_gift) == 'undefined' || product.is_gift == 0) - content += ' '; - else - content += ''; - - - content += '
'; + content += '
'; // .qlo-cart-item__main + content += '
'; // .qlo-cart-item__row // data for rooms only if (product.booking_product) { content += '
'; - content += '
'; - content += ''; + content += '
'; content += ''; content += ''; content += ''; @@ -954,8 +996,8 @@ var ajaxCart = { content += ''; content += ''; content += ''; - content += ''; content += ''; }); @@ -963,16 +1005,15 @@ var ajaxCart = { content += ''; content += '
' + duration_txt + '' + moment(new Date(date_diff_v.data_form)).format(dateFormatToUse) + ' - ' + moment(new Date(date_diff_v.data_to)).format(dateFormatToUse) + '' + date_diff_v.num_rm + '' + formatCurrency(parseFloat(date_diff_v.amount) + parseFloat(date_diff_v.demand_price), currency_format, currency_sign, currency_blank) + ''; - content += ''; + content += ''; + content += ''; content += '
'; content += '
'; - content += '
'; } else if (product.hasOptions) { content += '
'; content += ''; content += ''; content += ''; + content += ''; if (product.allow_multiple_quantity) { - content += ''; + content += ''; } - content += ''; content += ''; content += ''; content += ''; @@ -995,7 +1036,7 @@ var ajaxCart = { content += ''; } content += ''; - content += ''; + content += ''; content += ''; }); } @@ -1006,7 +1047,7 @@ var ajaxCart = { content += ''; if (product.hasAttributes) - content += '
'; + content += '
'; if (product.hasCustomizedDatas) content += ajaxCart.displayNewCustomizedDatas(product); if (product.hasAttributes) content += '
'; @@ -1020,7 +1061,7 @@ var ajaxCart = { var booking_dates_content = ''; // $("#booking_dates_container_"+product.id).empty(); - $("#booking_dates_container_" + product.id).find("table.table tbody tr.rooms_remove_container").remove(); + $("#booking_dates_container_" + product.id).find("table.cart-booking-table tbody tr.rooms_remove_container").remove(); var product_price_float = product.price_float; if (product.bookingData.date_diff !== 'undefined') { @@ -1032,14 +1073,14 @@ var ajaxCart = { booking_dates_content += ''; booking_dates_content += ''; booking_dates_content += ''; - booking_dates_content += ''; booking_dates_content += ''; }); } - $("#booking_dates_container_" + product.id).find("table.table tbody").append(booking_dates_content); + $("#booking_dates_container_" + product.id).find("table.cart-booking-table tbody").append(booking_dates_content); } else if (product.hasOptions) { $('dt[data-id="cart_block_product_' + productDomId + '"] .cart_prod_cont tr.product_option_row').remove(); var product_options_content = ''; @@ -1062,7 +1103,7 @@ var ajaxCart = { product_options_content += ''; } product_options_content += ''; - product_options_content += ''; + product_options_content += ''; product_options_content += ''; }); } @@ -1117,7 +1158,7 @@ var ajaxCart = { } } } - $('.cart_block dl.products .unvisible').slideDown(450).removeClass('unvisible'); + $('.cart_block dl.products .d-none').slideDown(450).removeClass('d-none'); var removeLinks = $('dt[data-id="cart_block_product_' + productDomId + '"]').find('a.ajax_cart_block_remove_link'); if (product.hasCustomizedDatas && removeLinks.length) @@ -1134,7 +1175,7 @@ var ajaxCart = { if (!hasAlreadyCustomizations) { if (!product.hasAttributes) - content += '
'; + content += '
'; if ($('ul[data-id="customization_' + productId + '_' + productAttributeId + '"]').val() == undefined) content += '
    '; } @@ -1229,16 +1270,14 @@ var ajaxCart = { } $('#layer_cart_product_quantity').text(product_quantity_text); - $('.layer_cart_img').html('' + product.name + ''); + $('.layer_cart_img').html('' + product.name + ''); var n = parseInt($(window).scrollTop()+50) + 'px'; $('.layer_cart_overlay').css('width', '100%'); $('.layer_cart_overlay').css('height', '100%'); $('.layer_cart_overlay').show(); - $('#layer_cart').css({ - 'top': n - }).fadeIn('fast'); + $('#layer_cart').modal('show'); crossselling_serialScroll(); }, @@ -1284,14 +1323,14 @@ var ajaxCart = { hasDeliveryAddress = false; if (parseFloat(jsonData.shipping_cost_float) > 0) - $('.ajax_cart_shipping_cost').text(jsonData.shipping_cost).parent().find('.unvisible').show(); + $('.ajax_cart_shipping_cost').text(jsonData.shipping_cost).parent().find('.d-none').show(); else if ((hasDeliveryAddress || typeof(orderProcess) !== 'undefined' && orderProcess == 'order-opc') && typeof(freeShippingTranslation) != 'undefined') $('.ajax_cart_shipping_cost').html(freeShippingTranslation); else if (!hasDeliveryAddress) $('.ajax_cart_shipping_cost').html(toBeDetermined); if (hasDeliveryAddress) - $('.ajax_cart_shipping_cost').parent().find('.unvisible').show(); + $('.ajax_cart_shipping_cost').parent().find('.d-none').show(); $('.ajax_cart_tax_cost').text(jsonData.tax_cost); $('.cart_block_wrapping_cost').text(jsonData.wrapping_cost); @@ -1389,7 +1428,6 @@ function crossselling_serialScroll() { } function resetRoomtypeServices(refresh = true) { - $('.room_demands_container').find('input.id_room_type_demand:checked').prop('checked', false).uniform(); $('#additional_products').empty(); $('#additional_products div') $('.remove_roomtype_product').text(select_txt).removeClass('btn-danger remove_roomtype_product').addClass('btn-success add_roomtype_product'); @@ -1469,7 +1507,7 @@ function getBookingOccupancyDetails(bookingform, booking_product) }); if ($(element).find('.num_children').val()) { if (child_ages.length != $(element).find('.num_children').val()) { - $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open') + $(bookingform).find('.booking_occupancy_wrapper').css({'display': 'block'}); occupancy = false; } } @@ -1479,12 +1517,12 @@ function getBookingOccupancyDetails(bookingform, booking_product) 'child_ages': child_ages }); } else { - $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open') + $(bookingform).find('.booking_occupancy_wrapper').css({'display': 'block'}); occupancy = false; } }); } else { - $(bookingform).find('.booking_occupancy_wrapper').parent().addClass('open') + $(bookingform).find('.booking_occupancy_wrapper').css({'display': 'block'}); occupancy = false; } } else { diff --git a/modules/blockcart/blockcart.css b/modules/blockcart/blockcart.css deleted file mode 100644 index 62651c4c9a..0000000000 --- a/modules/blockcart/blockcart.css +++ /dev/null @@ -1,545 +0,0 @@ -/** -* NOTICE OF LICENSE -* -* This source file is subject to the Open Software License version 3.0 -* that is bundled with this package in the file LICENSE.md -* It is also available through the world-wide-web at this URL: -* https://opensource.org/license/osl-3-0-php -* If you did not receive a copy of the license and are unable to -* obtain it through the world-wide-web, please send an email -* to support@qloapps.com so we can send you a copy immediately. -* -* DISCLAIMER -* -* Do not edit or add to this file if you wish to upgrade this module to a newer -* versions in the future. If you wish to customize this module for your needs -* please refer to https://store.webkul.com/customisation-guidelines for more information. -* -* @author Webkul IN -* @copyright Since 2010 Webkul -* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 -*/ - -#header .shopping_cart > a:first-child:after { - content: "\f0d7"; - font-family: "FontAwesome"; - font-size: 12px; - padding: 0 2px; - position: relative; - top: -1px; - color: #fff; } -#header .shopping_cart > a:first-child:hover::after { - content: "\f0d8"; - top: -2px; } - .shopping_cart > a:first-child { - display: block; - font-weight: bold; - font-size: 20px; - color: #777; - text-shadow: 1px 1px rgba(0, 0, 0, 0.2); - overflow: hidden; } - @media (min-width: 768px) and (max-width: 991px) { - .shopping_cart > a:first-child span.ajax_cart_product_txt, .shopping_cart > a:first-child span.ajax_cart_product_txt_s { - display: none !important; } } - .shopping_cart > a:first-child b { - color: #ffffff; - font-weight: 700; - font-family: "PT Serif,serif"; - font-size: 15px; - /*font: 600 18px/22px "Open Sans", sans-serif;*/ - padding-right: 5px; } - .shopping_cart > a:first-child:before { - content: "\f07a"; - font-family: "FontAwesome"; - color: #fff; - z-index: 100; } - .shopping_cart .ajax_cart_total { - display: none !important; } - .shopping_cart .block_cart_expand:after, .shopping_cart .block_cart_collapse:after { - content: "\f0d7"; - font-family: "PT Serif,serif"; - display: inline-block; - float: right; - font-size: 18px; - color: #686666; - padding: 6px 0 0 0; } - .shopping_cart .block_cart_collapse:after { - content: "\f0d8"; - padding: 4px 0px 2px 0px; } - -.cart_block .cart_block_list .remove_link { - position: absolute; - right: 10px; - top: 19px; } -.cart_block .cart_block_list .remove_link a, -.cart_block .cart_block_list .ajax_cart_block_remove_link { - color: #777; - display: block; - width: 100%; - height: 100%; } - .cart_block .cart_block_list .remove_link a:before, - .cart_block .cart_block_list .ajax_cart_block_remove_link:before { - display: inline-block; - content: "\f057"; - font-family: "FontAwesome"; - font-size: 18px; - line-height: 18px; } - .cart_block .cart_block_list .remove_link a:hover, - .cart_block .cart_block_list .ajax_cart_block_remove_link:hover { - color: #515151; } -.cart_block .cart-images { - float: left; - margin-right: 20px; } -.cart_block .cart-info { - overflow: hidden; - position: relative; - padding-right: 20px; } - .cart_block .cart-info .product-name { - padding-bottom: 5px; - margin-top: -4px; } - .cart_block .cart-info .product-name a { - font-size: 13px; - line-height: 18px; - display: inline-block; } - .cart_block .cart-info .hotel-name { - padding-bottom: 4px; - margin-top: -8px; } - .cart_block .cart-info .quantity-formated { - display: inline-block; - color: #9c9b9b; - text-transform: uppercase; - font-size: 10px; - padding-right: 5px; } - .cart_block .cart-info .quantity-formated .quantity { - font-size: 15px; } -.cart_block dt { - font-weight: normal; - overflow: hidden; - padding: 20px 10px 16px 20px; - position: relative; } -.cart_block dd { - position: relative; } - .cart_block dd .cart_block_customizations { - border-top: 1px dashed #333; } - .cart_block dd .cart_block_customizations li { - padding: 10px 20px; } - .cart_block dd .cart_block_customizations li .deleteCustomizableProduct { - position: absolute; - right: 10px; } -.cart_block .cart_block_no_products { - margin: 0; - padding: 10px 20px; } -.cart_block .cart-prices { - border-top: 1px solid #d6d4d4; - font-weight: bold; - padding: 10px 20px 22px 20px; } - .cart_block .cart-prices .cart-prices-line { - overflow: hidden; - border-bottom: 1px solid #515151; - padding: 7px 0; } - .cart_block .cart-prices .cart-prices-line.last-line { - border: none; } -.cart_block .cart-buttons { - overflow: hidden; - padding: 20px 20px 10px 20px; - margin: 0; - background: #f6f6f6; } - .cart_block .cart-buttons a { - width: 100%; - float: left; - text-align: center; - margin-bottom: 10px; - margin-right: 10px; } - .cart_block .cart-buttons a#button_order_cart { - margin-right: 0; - border: none; } - .cart_block .cart-buttons a#button_order_cart span { - padding: 7px 0; - font-size: 1.1em; - border: solid 1px #009ad0; - background: #009ad0 linear-gradient(to bottom, #009ad0 0%, #007ab7 100%) repeat-x scroll 0 0 } - .cart_block .cart-buttons a#button_order_cart:hover span { - border: solid 1px #009ad0; - background : #009ad0 linear-gradient(to bottom, #009ad0 0%, #007ab7 100%) repeat-x scroll 0 0; - color: #fff; } - -/******************************************************************* - Cart Block(Header) Styles -********************************************************************/ -#header .cart_block { - position: absolute; - top: 41px; - right: 0; - z-index: 100; - display: none; - height: auto; - background: #484848; - color: #fff; - width: 355px; } - /*@media (max-width: 480px) { - #header .cart_block { - width: 100%; } }*/ -@media (max-width: 440px) { - #header .cart_block { - width: 300px; } } - @media (max-width: 355px) { - #header .cart_block { - width: 270px; } } - /* @media (max-width: 1200px) { - #header .cart_block { - width: 100%; } }*/ - #header .cart_block a { - color: #fff; } - #header .cart_block .cart_block_list .remove_link a, - #header .cart_block .cart_block_list .ajax_cart_block_remove_link { - color: #fff; - outline: none; - text-decoration: none; } - #header .cart_block .cart_block_list .remove_link a:hover, - #header .cart_block .cart_block_list .ajax_cart_block_remove_link:hover { - color: #9c9b9b; } - #header .cart_block .price { - color: #fff; } - #header .cart_block dt { - background: url(../../../img/cart-shadow.png) repeat-x; } - #header .cart_block dt.first_item { - background: none; } - #header .cart_block .product-atributes { - padding-bottom: 10px; - font-size: 11px; } - #header .cart_block .product-atributes a { - color: #9c9b9b; } - #header .cart_block .product-atributes a:hover { - color: #fff; } - #header .cart_block .cart-prices { - border: none; - background: url(../../../img/cart-shadow.png) repeat-x #3d3d3d; } - #header .cart_block .cart-buttons { - background: url(../../../img/cart-shadow.png) repeat-x #333; } -#header .block_content { - margin-bottom: 0; } - -.cart_block #cart_block_summary, -.cart_block .title_block span, -#header .cart_block h4, -#header .cart_block .title_block, -#header .cart_block h4 { - display: none; } - -.cart_block .cart_block_shipping_cost, -.cart_block .cart_block_tax_cost, -.cart_block .cart_block_total, -.cart_block .cart_block_wrapping_cost, -.cart_block .cart_block_convenience_fee { - float: right; } - -.cart_block table.vouchers { - clear: both; - width: 80%; - margin: 0 auto; - margin-bottom: 10px; } - .cart_block table.vouchers tr td { - padding: 2px; } - .cart_block table.vouchers tr td.quantity { - margin-right: 5px; - min-width: 18px; } - .cart_block table.vouchers tr td.delete { - padding-left: 0; - padding-right: 0; - text-align: right; - width: 15px; } - -/***************************************************************************** - Layer Cart Css -*****************************************************************************/ -.layer_cart_overlay { - background-color: #000; - display: none; - height: 100%; - left: 0; - position: fixed; - top: 0; - width: 100%; - z-index: 98; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20); - opacity: 0.2; } - -* html .layer_cart_overlay { - position: absolute; - left: 0; - margin-left: -160px; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20); - opacity: 0.2; } - -#layer_cart { - background-color: #fff; - position: absolute; - display: none; - z-index: 300; - width: 84%; - margin-right: 8%; - margin-left: 8%; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; } - #layer_cart .layer_cart_product { - padding: 30px 30px 30px 30px; - overflow: hidden; - position: static; } - #layer_cart .layer_cart_product h2 { - font: 400 23px/29px Arial, Helvetica, sans-serif; - color: #46a74e; - margin-bottom: 22px; } - @media (max-width: 767px) { - #layer_cart .layer_cart_product h2 { - font-size: 18px; - padding-right: 0; - line-height: normal; } } - #layer_cart .layer_cart_product h2 i { - font-size: 30px; - line-height: 30px; - float: left; - padding-right: 8px; } - @media (max-width: 767px) { - #layer_cart .layer_cart_product h2 i { - font-size: 22px; - line-height: 22px; } } - #layer_cart .layer_cart_product .product-image-container { - max-width: 178px; - border: 1px solid #d6d4d4; - padding: 5px; - float: left; - margin-right: 30px; } - @media (max-width: 480px) { - #layer_cart .layer_cart_product .product-image-container { - float: none; - margin-right: 0; - margin-bottom: 10px; } } - #layer_cart .layer_cart_product .layer_cart_product_info { - padding: 38px 0 0 0; } - #layer_cart .layer_cart_product .layer_cart_product_info #layer_cart_product_title { - display: block; - padding-bottom: 8px; } - #layer_cart .layer_cart_product .layer_cart_product_info > div { - padding-bottom: 7px; } - #layer_cart .layer_cart_product .layer_cart_product_info > div strong { - padding-right: 3px; } - #layer_cart .layer_cart_cart { - background: #fafafa; - border-left: 1px solid #d6d4d4; - padding: 21px 30px 170px 30px; - -moz-border-radius: 0px 4px 4px 0px; - -webkit-border-radius: 0px; - border-radius: 0px 4px 4px 0px; - position: relative; } - @media (min-width: 1200px) { - #layer_cart .layer_cart_cart { - min-height: 318px; } } - @media (min-width: 992px) and (max-width: 1199px) { - #layer_cart .layer_cart_cart { - min-height: 360px; } } - @media (max-width: 991px) { - #layer_cart .layer_cart_cart { - -moz-border-radius: 0px 0 4px 4px; - -webkit-border-radius: 0px; - border-radius: 0px 0 4px 4px; - border-left: none; - border-top: 1px solid #d6d4d4; } } - #layer_cart .layer_cart_cart h2 { - font: 400 23px/29px Arial, Helvetica, sans-serif; - color: #333; - border-bottom: 1px solid #d6d4d4; - padding-bottom: 13px; - margin-bottom: 17px; } - @media (max-width: 767px) { - #layer_cart .layer_cart_cart h2 { - font-size: 18px; } } - #layer_cart .layer_cart_cart .layer_cart_row { - padding: 0 0 7px 0; } - #layer_cart .layer_cart_cart .button-container { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - padding: 0px 30px 20px 30px; } - #layer_cart .layer_cart_cart .button-container .btn { - margin-bottom: 10px; } - #layer_cart .layer_cart_cart .button-container a.button.button-medium { - border-color: #51e4ff #338fdd #2f85ce #51e4ff; - border-style: solid; - border-width: 1px; - font-weight: 600; - padding: 0; - text-shadow: unset; } - #layer_cart .layer_cart_cart .button-container span.exclusive-medium { - margin-right: 5px; } - #layer_cart .layer_cart_cart .button-container span.exclusive-medium i { - padding-right: 5px; - color: #777777; } - #layer_cart .cross { - position: absolute; - right: 7px; - top: 8px; - width: 25px; - height: 25px; - cursor: pointer; - color: #333; - z-index: 2; } - #layer_cart .cross:before { - content: "\f057"; - display: block; - font-family: "FontAwesome"; - font-size: 25px; - line-height: 25px; } - #layer_cart .cross:hover { - color: #515151; } - #layer_cart .continue { - cursor: pointer; } - #layer_cart p { - padding: 0px; } - -/************************************************************************ - Layer Cart Caroucel -*************************************************************************/ -#layer_cart .crossseling .crossseling-content { - border-top: 1px solid #d6d4d4; - padding: 26px 30px 40px 30px; - position: relative; } -#layer_cart .crossseling h2 { - font: 400 23px/26px Arial, Helvetica, sans-serif; - color: #333; - margin-bottom: 25px; } -#layer_cart .crossseling #blockcart_list { - max-width: 773px; - width: 84%; - margin: 0 auto; - overflow: hidden; } - #layer_cart .crossseling #blockcart_list ul { - display: block; } - #layer_cart .crossseling #blockcart_list ul li { - float: left; - width: 178px; - margin: 0 0px 0 0; } - #layer_cart .crossseling #blockcart_list ul li .product-image-container { - border: 1px solid #d6d4d4; - text-align: center; - padding: 5px; - margin-bottom: 15px; } - #layer_cart .crossseling #blockcart_list ul li .product-image-container img { - width: 100%; } - #layer_cart .crossseling #blockcart_list ul li .product-name { - padding-bottom: 5px; } - #layer_cart .crossseling #blockcart_list ul li .product-name a { - font-size: 15px; - line-height: 20px; } - #layer_cart .crossseling #blockcart_list a.bx-prev, - #layer_cart .crossseling #blockcart_list a.bx-next { - display: block; - font-family: "FontAwesome"; - font-size: 20px; - line-height: 20px; - width: 20px; - height: 20px; - color: #333; - text-indent: -5000px; - position: absolute; - top: 45%; - margin-top: -20px; } - #layer_cart .crossseling #blockcart_list a.bx-prev:after, - #layer_cart .crossseling #blockcart_list a.bx-next:after { - display: block; - text-indent: 0; } - #layer_cart .crossseling #blockcart_list a.bx-prev:hover, - #layer_cart .crossseling #blockcart_list a.bx-next:hover { - color: #c0c0c0; } - #layer_cart .crossseling #blockcart_list a.bx-prev.disabled, - #layer_cart .crossseling #blockcart_list a.bx-next.disabled { - display: none; } - #layer_cart .crossseling #blockcart_list a.bx-prev { - left: 5%; } - #layer_cart .crossseling #blockcart_list a.bx-prev:after { - content: "\f137"; } - #layer_cart .crossseling #blockcart_list a.bx-next { - right: 5%; } - #layer_cart .crossseling #blockcart_list a.bx-next:after { - content: "\f138"; } - #layer_cart .crossseling #blockcart_list .bx-controls { - overflow: hidden; } - -/*# sourceMappingURL=blockcart.css.map */ - - -.ajax_remove_product_option, .remove_rooms_from_cart_link { - color: #777; - display: block; - width: 100%; - height: 100%; } - .ajax_remove_product_option:before, .remove_rooms_from_cart_link:before { - display: inline-block; - content: "\f057"; - font-family: "FontAwesome"; - font-size: 18px; - line-height: 18px; } - .ajax_remove_product_option:hover, .remove_rooms_from_cart_link:hover { - color: #515151; } - -.badge_style { - left: 13px; - position: absolute; - top: -8px; - z-index: 200; -} - -.product_info_label -{ - font-size: 14px; - font-weight: 400; - color: #EDEDED; -} - -#header .cart_block .product_info_data -{ - font-size: 14px; - font-weight: 400; - color: #AEAEAE; -} - -#header .cart_block .product-name -{ - font-size: 16px; - font-weight: 700; - color: #EDEDED; -} - -.cart-info-sec -{ - padding-bottom: 1px; -} - -.cart_block .cart_prod_cont .table td, .cart_prod_cont .table th -{ - border-top: none; - padding: 9px 0px; -} - -.cart_block .cart_prod_cont .table -{ - margin-bottom: 0px; -} - -.cart_block .table-responsive -{ - overflow-x:auto; -} - -@media (max-width: 768px) { - .cart_block .table-responsive > .table - { - background-color: transparent; - } - - .cart_block .table-responsive - { - border: none; - } -} diff --git a/modules/blockcart/blockcart.php b/modules/blockcart/blockcart.php index 71a0be7ca4..4b2f4a2e89 100644 --- a/modules/blockcart/blockcart.php +++ b/modules/blockcart/blockcart.php @@ -490,7 +490,6 @@ public function hookHeader() return; } - $this->context->controller->addCSS(($this->_path).'blockcart.css', 'all'); if ((int) (Configuration::get('PS_BLOCK_CART_AJAX'))) { $this->context->controller->addJS(($this->_path).'ajax-cart.js'); $this->context->controller->addJqueryPlugin(array('scrollTo', 'serialScroll', 'bxslider')); @@ -549,11 +548,6 @@ public function hookDisplayNav($params) return $this->hookTop($params); } - public function hookDisplayTopSubSecondaryBlock($params) - { - return $this->hookTop($params); - } - public function renderForm() { $fields_form = array( diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index af73ec530a..32f6af68a2 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -28,14 +28,17 @@ {if isset($blockcart_top) && $blockcart_top}
    {/if} + {assign var="text_class" value='text-black'} + {if $page_name == "index"} + {assign var="text_class" value='text-white'} + {/if} {block name='blockcart_shopping_cart'} -
    - - - {$total_products_in_cart} - - - +
    + {block name='blockcart_shopping_cart_content'} {if !$PS_CATALOG_MODE} -
    -
    - -
' + variant_txt + '' + variant_txt + '' + qty_txt + '.' + qty_txt + '.' + price_txt + ' 
' + data_v.quantity + '' + formatCurrency(parseFloat(data_v.total_price_tax_excl), currency_format, currency_sign, currency_blank) + ' 
' + moment(new Date(date_diff_v1.data_form)).format(dateFormatToUse) + ' - ' + moment(new Date(date_diff_v1.data_to)).format(dateFormatToUse) + '' + date_diff_v1.num_rm + '' + formatCurrency(parseFloat(date_diff_v1.amount) + parseFloat(date_diff_v1.demand_price), currency_format, currency_sign, currency_blank) + ''; - booking_dates_content += ''; + booking_dates_content += ''; + booking_dates_content += ''; booking_dates_content += '
' + data_v.quantity + '' + formatCurrency(parseFloat(data_v.total_price_tax_excl), currency_format, currency_sign, currency_blank) + ' 
- {foreach from=$discounts item=discount} - {if $discount.value_real > 0} - - - - - - - {/if} - {/foreach} -
1x - {$discount.name|truncate:18:'...'|escape:'html':'UTF-8'} - - -{if $priceDisplay == 1}{convertPrice price=$discount.value_tax_exc}{else}{convertPrice price=$discount.value_real}{/if} - - {if strlen($discount.code)} - - - - {/if} -
- {/if} - {/block} - {block name='blockcart_shopping_cart_prices'} -
- - {block name='blockcart_shopping_cart_total_tax'} - {if $show_tax && $use_tax} -
- {$tax_cost} - {l s='Tax' mod='blockcart'} -
- {/if} - {/block} - {block name='blockcart_shopping_cart_total_convenience_fee'} - {if isset($total_convenience_fee)} -
- {convertPrice price=$total_convenience_fee} - {l s='Convenience Fees' mod='blockcart'} -
- {/if} - {/block} - {block name='blockcart_shopping_cart_total'} -
- {$total} - {l s='Total' mod='blockcart'} -
- {if $use_taxes && $display_tax_label == 1 && $show_tax} -

- {if $priceDisplay == 0} - {l s='Prices are tax included' mod='blockcart'} - {elseif $priceDisplay == 1} - {l s='Prices are tax excluded' mod='blockcart'} + + {include file="./cartrow.tpl" hotel_wise_data=false} + {/if} -

+ {/if} - {/block} -
- {/block} - {block name='blockcart_shopping_cart_checkout_action'} -

- - - {l s='Check out' mod='blockcart'} - - -

+ + {/foreach} + + + + {else} + +

+ {l s='No products' mod='blockcart'} +

+ + {/if} {/block} +
+
-
+ + +
{/if} {/block}
@@ -189,209 +148,221 @@ {counter name=active_overlay assign=active_overlay} {block name='blockcart_layer_cart'} {if !$PS_CATALOG_MODE && $active_overlay == 1} -
-
- {block name='blockcart_layer_cart_left'} -
- - {block name='blockcart_layer_cart_left_heading'} -

- {l s='Room successfully added to your cart' mod='blockcart'} -

-

- {l s='Product successfully added to your cart' mod='blockcart'} -

- {/block} - {block name='blockcart_layer_cart_product_image'} -
-
- {/block} - {block name='blockcart_layer_cart_product_info'} -
- - -
- {l s='Time Duration' mod='blockcart'}  -  - -
-
- {l s='Hotel Name' mod='blockcart'}  -  - -
-
- {l s='Unit Price' mod='blockcart'}  -  - -
-
- {if isset($occupancy_required_for_booking) && $occupancy_required_for_booking}{l s='Room occupancy' mod='blockcart'}{else}{l s='Rooms quantity added' mod='blockcart'}{/if}  -  - {l s='Quantity' mod='blockcart'}  -  - -
-
- {l s='Room type cost' mod='blockcart'}  -  - {l s='Total' mod='blockcart'}  -  - -
+ +
-
-
+
{/if} {/block} {block name='blockcart_js_vars'} diff --git a/modules/blockcart/cartrow.tpl b/modules/blockcart/cartrow.tpl index e909aaacf4..d6fc33bc57 100644 --- a/modules/blockcart/cartrow.tpl +++ b/modules/blockcart/cartrow.tpl @@ -1,100 +1,112 @@ {assign var='productId' value=$product.id_product} {assign var='productAttributeId' value=$product.id_product_attribute} -
- {$product.name|escape:'html':'UTF-8'} -
- {block name='blockcart_shopping_cart_product_name'} -
+
+ + {$product.name|escape:'html':'UTF-8'} + +
+
+ {block name='blockcart_shopping_cart_product_name'} + + {$product.name|truncate:30:'...':true|escape:'html':'UTF-8'} + + {/block} + {if !isset($customizedDatas.$productId.$productAttributeId) && (!isset($product.is_gift) || !$product.is_gift)} + + + + {/if}
- {/block} - {block name='blockcart_shopping_cart_hotel_name'} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} -
- {$hotel_wise_data.hotel_name|escape:'html':'UTF-8'} + + {block name='blockcart_shopping_cart_hotel_name'} + {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} +
+ {$hotel_wise_data.hotel_name|escape:'html':'UTF-8'} +
+ {/if} + {/block} + + {if isset($product.attributes_small)} +
+ {$product.attributes_small}
{/if} - {/block} - {if isset($product.attributes_small)} - - {/if} - {block name='blockcart_shopping_cart_product_total_price'} -
- {l s='Price' mod='blockcart'}: - - {if !isset($product.is_gift) || !$product.is_gift} - {if $product.booking_product} - {displayWtPrice p="`$product.bookingData.total_room_type_amount`"} - {else if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} - {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$hotel_wise_data.total_price_tax_excl`"}{else}{displayWtPrice p="`$hotel_wise_data.total_price_tax_incl`"}{/if} + + {block name='blockcart_shopping_cart_product_total_price'} +
+ {l s='Price' mod='blockcart'}: + + {if !isset($product.is_gift) || !$product.is_gift} + {if $product.booking_product} + {displayWtPrice p="`$product.bookingData.total_room_type_amount`"} + {else if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$hotel_wise_data.total_price_tax_excl`"}{else}{displayWtPrice p="`$hotel_wise_data.total_price_tax_incl`"}{/if} + {else} + {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$product.total_price_tax_excl`"}{else}{displayWtPrice p="`$product.total_price_tax_incl`"}{/if} + {/if} + + {block name='displayProductPriceBlock'} + {hook h="displayProductPriceBlock" product=$product type="price" from="blockcart"} + {/block} + {else} - {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$product.total_price_tax_excl`"}{else}{displayWtPrice p="`$product.total_price_tax_incl`"}{/if} + {l s='Free!' mod='blockcart'} {/if} -
- {block name='displayProductPriceBlock'} - {hook h="displayProductPriceBlock" product=$product type="price" from="blockcart"} - {/block} -
- {else} - {l s='Free!' mod='blockcart'} - {/if} -
-
- {/block} +
+
+ {/block} - {block name='blockcart_shopping_cart_product_quantity'} -
- {if $product.allow_multiple_quantity || $product.booking_product}{l s='Total Qty.' mod='blockcart'}:{/if} - - {if $product.booking_product} - {$product.bookingData['total_num_rooms']} - {elseif $product.allow_multiple_quantity} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} - {$hotel_wise_data.total_qty} - {elseif $product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE} - {$product.cart_quantity} - {/if} - {/if} - -
- {/block} + {block name='blockcart_shopping_cart_product_quantity'} + {if $product.allow_multiple_quantity || $product.booking_product} +
+ {l s='Total Qty.' mod='blockcart'}: + + + {if $product.booking_product} + {$product.bookingData['total_num_rooms']} + {elseif $product.allow_multiple_quantity} + {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {$hotel_wise_data.total_qty} + {elseif $product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE} + {$product.cart_quantity} + {/if} + {/if} + + +
+ {/if} + {/block} +
- - {if !isset($customizedDatas.$productId.$productAttributeId) && (!isset($product.is_gift) || !$product.is_gift)} -   - {/if} - -
{if $product.booking_product} {block name='blockcart_shopping_cart_dates'}
-
- - - - - - - +
{l s='Duration' mod='blockcart'}{l s='Qty.' mod='blockcart'}{l s='Price' mod='blockcart'} 
+ + + + + + + + {foreach from=$product.bookingData['date_diff'] key=data_k1 item=data_v} + + {assign var="is_full_date" value=($show_full_date && ($data_v['data_form']|date_format:'%D' == $data_v['data_to']|date_format:'%D'))} + + + + - {foreach from=$product.bookingData['date_diff'] key=data_k1 item=data_v} - - {assign var="is_full_date" value=($show_full_date && ($data_v['data_form']|date_format:'%D' == $data_v['data_to']|date_format:'%D'))} - - - - - - {/foreach} - -
{l s='Duration' mod='blockcart'}{l s='Qty.' mod='blockcart'}{l s='Price' mod='blockcart'} 
+ {dateFormat date=$data_v['data_form'] full=$is_full_date} - {dateFormat date=$data_v['data_to'] full=$is_full_date} + {$data_v['num_rm']}{convertPrice price=($data_v['amount'] + $data_v['demand_price'])} + + + +
- {dateFormat date=$data_v['data_form'] full=$is_full_date} - {dateFormat date=$data_v['data_to'] full=$is_full_date} - {$data_v['num_rm']}{convertPrice price=($data_v['amount'] + $data_v['demand_price'])}
-
+ {/foreach} + +
{/block} {else if $product.hasOptions} @@ -122,7 +134,11 @@ {$data_v['quantity']} {/if} {convertPrice price=($data_v['total_price_tax_excl'])} -   + + + + + {/foreach} @@ -155,4 +171,4 @@ {if !isset($product.attributes_small)}{/if} {/if} -{if isset($product.attributes_small)}{/if} \ No newline at end of file +{if isset($product.attributes_small)}{/if} diff --git a/modules/blockcurrencies/blockcurrencies.php b/modules/blockcurrencies/blockcurrencies.php index 542d3996b5..6378d22dff 100644 --- a/modules/blockcurrencies/blockcurrencies.php +++ b/modules/blockcurrencies/blockcurrencies.php @@ -59,7 +59,6 @@ public function install() public function hookActionFrontControllerSetMedia() { - $this->context->controller->addCSS($this->getPathUri().'views/css/hook/blockcurrencies.css'); $this->context->controller->addJS($this->getPathUri().'views/js/hook/blockcurrencies.js'); } diff --git a/modules/blockcurrencies/views/css/hook/blockcurrencies.css b/modules/blockcurrencies/views/css/hook/blockcurrencies.css deleted file mode 100644 index 817dea2a6a..0000000000 --- a/modules/blockcurrencies/views/css/hook/blockcurrencies.css +++ /dev/null @@ -1,56 +0,0 @@ -/** -* NOTICE OF LICENSE -* -* This source file is subject to the Open Software License version 3.0 -* that is bundled with this package in the file LICENSE.md -* It is also available through the world-wide-web at this URL: -* https://opensource.org/license/osl-3-0-php -* If you did not receive a copy of the license and are unable to -* obtain it through the world-wide-web, please send an email -* to support@qloapps.com so we can send you a copy immediately. -* -* DISCLAIMER -* -* Do not edit or add to this file if you wish to upgrade this module to a newer -* versions in the future. If you wish to customize this module for your needs -* please refer to https://store.webkul.com/customisation-guidelines for more information. -* -* @author Webkul IN -* @copyright Since 2010 Webkul -* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 -*/ - -.currencies-block-wrap button.dropdown-toggle { - padding: 0; - background-color: transparent; - color: #fff; -} - -.currencies-block-wrap .caret { - border-top-color: white; -} - -.currencies-block-wrap .dropdown-menu { - max-height: 300px; - overflow-y: auto; -} - -/* popup - start */ -.fancybox-blockcurrencies .fancybox-inner { - border-radius: 4px; -} - -.fancybox-blockcurrencies .list-group { - margin-bottom: 0; -} - -.fancybox-blockcurrencies .list-group-item { - border: none; - min-width: 160px; - font-size: 14px; -} - -.fancybox-blockcurrencies .list-group-item.active { - background-color: #379BF0; -} -/* popup - end */ diff --git a/modules/blockcurrencies/views/css/hook/index.php b/modules/blockcurrencies/views/css/hook/index.php deleted file mode 100644 index 4bb2facc17..0000000000 --- a/modules/blockcurrencies/views/css/hook/index.php +++ /dev/null @@ -1,32 +0,0 @@ - 1} -