elements\n if window.ResizeObserver\n @_modalResizeObserver = new ResizeObserver (entries) =>\n # We wrap it in requestAnimationFrame to avoid this error - ResizeObserver loop limit exceeded\n window.requestAnimationFrame =>\n if !Array.isArray(entries) || !entries.length\n return\n @_position()\n\n @_modalResizeObserver.observe @_node.get(0).querySelector('div')\n\n $(document).on \"page:before-unload.#{@id}\", => @destroy()\n @_node.on \"me:close.#{@id}\", => @destroy()\n @_node.on \"click.#{@id}\", '[data-modal=close], [type=reset]', (e) =>\n e.preventDefault()\n @destroy()\n @_position()\n\n # Closing timer\n if options['closing-timer']\n @_closing_timer = setTimeout =>\n @destroy()\n , options['closing-timer'] * 1000\n\n show: -> @_node.addClass 'modal-show'\n\n destroy: ->\n if @_modalResizeObserver\n @_modalResizeObserver.unobserve @_node.get(0).querySelector('div')\n\n $([window, document]).off \".#{@id}\"\n clearTimeout(@_closing_timer) if @_closing_timer?\n @_node.trigger \"me:modal:destroyed\"\n @_node.remove()\n\n # Static\n\n @init: ->\n # Remote modals\n $(document).on 'ajax:success', '[data-modal=\"true\"]', (e) =>\n [data, status, xhr] = e.detail\n\n mt = $(e.target).data 'modal-style'\n timer = $(e.target).data 'modal-closing-timer'\n options = { content: xhr.responseText }\n options = $.extend(options, {style: mt}) if mt\n options = $.extend(options, {'closing-timer': parseInt(timer)}) if timer\n if data != \"\"\n (new @ 'content', options).show()\n $.me.actionCallbackXhr xhr\n\n # Inline modals\n @_createFromInlineContent()\n $(document).on 'turbo:load', => @_createFromInlineContent()\n\n $(document).on 'confirm', (e) ->\n element = $(e.target)\n return true unless element.attr('data-confirm')\n $.me.confirm (element.data('title') || I18n.t('js.common.title_confirmation')), element.data('confirm'), ->\n element.removeAttr('data-confirm')\n element.get(0).click()\n false\n\n $(document).on 'click', '[data-alert]', (e) ->\n element = $(e.currentTarget)\n $.me.alert (element.data('title') || I18n.t('js.common.title_alert')), element.data('alert')\n\n # Private\n @_createFromInlineContent: ->\n $('[data-modal=\"inline\"]').each (i, v) =>\n c = $(v).detach()\n mt = c.data 'modal-style'\n timer = c.data 'modal-closing-timer'\n options = { content: c.first().html() }\n options = $.extend(options, {style: mt}) if mt\n options = $.extend(options, {'closing-timer': parseInt(timer)}) if timer\n (new @ 'content', options).show()\n\n _create: (content, style='') ->\n $ \"\"\"\n
\n
\n \n #{content}\n
\n
\n
\n \"\"\"\n .appendTo('body').trigger 'me:domChanged'\n\n _content: (title, body, footer) ->\n \"\"\"\n
\n #{title}
\n #{body}\n #{footer}\n \n \"\"\"\n\n _alert: (title, message, callback) ->\n footer = \"\"\"
\"\"\"\n node = @_create @_content(title, message, footer)\n node.find('[data-modal=\"close\"]').one 'click', (e) => callback() if callback\n node\n\n _confirm: (title, message, callback) ->\n footer = \"\"\"\n \n \"\"\"\n node = @_create @_content(title, message, footer)\n node.find('[data-modal=\"confirm\"]').one 'click', (e) =>\n e.preventDefault()\n @destroy()\n callback()\n node\n\n _position: ->\n console.log('old absolute positioning')\n# pad = 20\n# @_m ||= @_node.children(':first')\n# @_ms ||= @_m.find('[data-modal=\"scrollbox\"]')\n# @_ms.outerHeight('')\n# @_mfh ||= @_m.outerHeight() - @_ms.outerHeight()\n# wh = $(window).outerHeight()\n#\n# if wh - pad * 2 < @_mfh + @_ms.prop('scrollHeight')\n# @_m.css {top: pad, 'margin-top': 0}\n# @_ms.outerHeight(wh - @_mfh - pad * 2, true)\n# @_node.addClass 'modal--with-scroll'\n# else\n# @_node.removeClass 'modal--with-scroll'\n# @_m.css { top:'50%', 'margin-top': -@_m.outerHeight()/2 }\n#\n# # @_m.css { left: -@_m.outerWidth()/2 }\n#\n# @_node\n\n _resetPositionCache: ->\n @_ms = @_mfh = null\n\n _removeStyles: ->\n @_node.removeClass 'small normal large nopad'\n @_node\n\n # Helpers\n\n alert: (title, message, onCloseCallback) ->\n (new @Modal 'alert', {title: title, message: message, callback: onCloseCallback}).show()\n\n confirm: (title, message, onConfirmCallback) ->\n (new @Modal 'confirm', {title: title, message: message, callback: onConfirmCallback}).show()\n\n}\n\n$ -> $.me.init 'Modal'\n","#\n# Meeting Engine :: External JS\n#\n$.extend true, $.me, {\n seoOpenMap: null\n seoRoute:\n from_adress:\n lat: null\n lng: null\n\n clubs_map_markers: ->\n opts = $('div[data-me-gmap]').data 'me-gmap'\n\n $.me.seoOpenMap = $('div[data-me-gmap]').openMap(\n center:\n lat: opts.center.lat\n lng: opts.center.lng).show().markers(opts.markers)\n\n actionBarObserver: ->\n container = $('#club-site')\n header = $('.club-site-header')\n headerHeight = header.outerHeight()\n headerTop = header.offset().top\n links = header.find('a[data-me-scroll-link]')\n\n $(window).scroll ->\n if $(document).scrollTop() >= headerTop and !container.hasClass('fixed')\n container.addClass 'fixed'\n else if $(document).scrollTop() < headerTop && container.hasClass('fixed')\n container.removeClass 'fixed'\n return\n\n $('.club-site-header').on 'click', 'a[data-me=scroll-link]', (e) ->\n e.preventDefault();\n sectionId = this.href.split(\"#\")[1]\n sectionTop = $('#'+sectionId).offset().top\n topTotal = sectionTop-headerHeight\n\n $('html,body').animate {scrollTop : topTotal}, 'slow'\n}\n\n# Page loaded\n$(document).on 'turbo:load', ->\n #console.log \"Turbo load\"\n I18n.locale = document.documentElement.lang\n\n # Send Browser Fingerprint\n # $.me.fingerprint.init()\n\n # Remove cookie disclaimer\n $(document).on 'click', '#cookie-disclaimer button', (e) ->\n e.preventDefault()\n expires = new Date()\n expires.setTime expires.getTime() + (365 * 86400 * 1000)\n document.cookie = \"cookie-disclaimer=1;expires=#{expires.toUTCString()};path=/\";\n $('#cookie-disclaimer').remove()\n\n $('[data-password] > button').on 'click', (e) ->\n input = $(e.currentTarget).prev()\n input.attr 'type', (if input.attr('type') is 'text' then 'password' else 'text')\n\n $('[data-accordeon]').on 'click', (e) -> $(e.currentTarget).parent().toggleClass('is-close')\n\n # Hack to open registration\n urlParams = new URLSearchParams(window.location.search)\n if urlParams.has 'register'\n console.log \"register\"\n setTimeout ->\n $('[data-register-form] button').click()\n , 100\n\n # Execute controller.action for loaded page\n $.me.actionCallback $('body').data('me-controller'), $('body').data('me-action')\n\n if window.dataLayer\n window.dataLayer.push\n event: 'pageView',\n pagePath: document.location.pathname + document.location.search\n\n # Switch Header\n switchHeader = ->\n html = document.documentElement\n target = document.querySelector(\"[data-target-switch-header]\")\n trigger = document.querySelector(\"[data-trigger-switch-header]\")\n if not trigger\n return\n\n offset = trigger.offsetHeight + target.offsetHeight * 2\n\n update = (entries) ->\n entry = entries[0]\n if not entry.isIntersecting\n html.setAttribute \"data-switch-header\", \"has-background\"\n else\n html.removeAttribute \"data-switch-header\"\n\n observer = new IntersectionObserver update,\n rootMargin: \"-#{offset}px 0px 0px 0px\"\n\n observer.observe trigger\n\n switchHeader()\n","$.extend true, $.me,\n account:\n init: ->\n $('input[name=\"registration[user_type_id]\"]').change (e) ->\n $('[data-user-type]').attr 'data-user-type', $(e.currentTarget).val()\n\n\n $('[data-city-by-zip=zip-code]').selectCityByZip()\n\n $('[data-password] > button').click (e) ->\n e.preventDefault()\n input = $(e.currentTarget).prev()\n input.attr 'type', (if input.attr('type') is 'text' then 'password' else 'text')\n\n\n users:\n new_act: ->\n #$.me.account.init()\n\n $(document).on 'me:domChanged', (e) ->\n $.me.account.init() if $(e.target).find('[data-me=signup-form]').exists()\n $('#disclaimer-button').click (e) ->\n e.preventDefault()\n day = $('#days').val()\n month = $('#months').val()\n year = $('#years').val()\n birth_date = new Date(year, month, day)\n\n birth_date.setFullYear(birth_date.getFullYear() + 18)\n\n if year && birth_date <= new Date()\n $('#disclaimer-button').attr(\"data-modal\", \"close\")\n\n else if year == \"\"\n $('#disclaimer-error-message').removeClass('display-none')\n else\n location.href = 'https://www.google.fr'\n\n create_act: ->\n $.me.account.init()\n\n step = parseInt $('form[data-me=\"signup-form\"]').data('step')\n max_step = parseInt $('form[data-me=\"signup-form\"]').data('max-step')\n\n if step == max_step\n redirect = $('form[data-me=\"signup-form\"]').data('redirect')\n location.href = redirect\n\n $('[data-username-suggestion]').click (e) ->\n e.preventDefault()\n $('#registration_username').val($(e.target).data('username-suggestion')).trigger('change')\n\n# External :: End of account_users\n","import Swiper, { Navigation, Pagination } from 'swiper'\n\n$.extend true, $.me,\n external:\n club_evenings:\n index_act: ->\n $.me.external.clubs.initSearch()\n $.me.external.clubs.renderClusteredMap @clubEveningPopupRenderer\n Swiper.use([Navigation, Pagination]);\n new Swiper('.js-slider-classic', {\n pagination: {\n el: \".js-slider-classic-pagination\",\n clickable: true,\n },\n slidesPerView: 1,\n centeredSlides: false,\n spaceBetween: 15,\n })\n\n show_act: ->\n $.me.external.clubs.renderClusteredMap @clubEveningPopupRenderer\n\n new Swiper('#club-evenings-slider', {\n pagination: {\n el: \"#clubs-slider-pagination\",\n clickable: true\n },\n slidesPerView: 1,\n spaceBetween: 15,\n breakpoints: {\n 990: {\n slidesPerGroup: 3,\n slidesPerView: 3,\n },\n }\n })\n\n #Todo: i18n\n clubEveningPopupRenderer: (marker) ->\n \"\"\"\n \n \"\"\"\n","import { LeafletConfig } from 'config.js'\nimport Swiper, { Navigation, Pagination } from 'swiper'\nimport Toast from 'libs/toast'\n\n$.extend true, $.me,\n external:\n clubs:\n index_act: ->\n @initSearch()\n @renderClusteredMap @clubPopupRenderer\n Swiper.use([Navigation, Pagination]);\n new Swiper('.js-slider-classic', {\n pagination: {\n el: \".js-slider-classic-pagination\",\n clickable: true,\n },\n slidesPerView: 1,\n centeredSlides: false,\n spaceBetween: 15,\n })\n\n show_act: ->\n @renderClusteredMap @clubPopupRenderer\n Swiper.use([Navigation, Pagination]);\n new Swiper('#photo-slider', {\n pagination: {\n el: \"#photo-slider-pagination\",\n clickable: true\n },\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\"\n },\n slidesPerView: 1,\n centeredSlides: false,\n spaceBetween: 15\n })\n new Swiper('.js-slider-classic', {\n pagination: {\n el: \".js-slider-classic-pagination\",\n clickable: true,\n },\n slidesPerView: 1,\n centeredSlides: false,\n spaceBetween: 15,\n });\n new Swiper('#club-evenings-slider', {\n pagination: {\n el: \"#clubs-slider-pagination\"\n clickable: true\n },\n slidesPerView: 1,\n spaceBetween: 15,\n breakpoints: {\n 990: {\n slidesPerGroup: 3,\n slidesPerView: 3,\n },\n }\n })\n\n renderClusteredMap: (popupRenderer) ->\n mapNode = document.getElementById('map')\n return unless mapNode\n\n markersList = JSON.parse(mapNode.dataset.markers)\n\n map = L.map mapNode, { scrollWheelZoom: false }\n L.tileLayer('https://maps.nouslib.com/osm/{z}/{x}/{y}.png').addTo(map)\n\n icon = L.icon({\n iconUrl: LeafletConfig.markerIconUrl,\n iconSize: [54, 72],\n iconAnchor: [27, 72]\n });\n\n markers = L.markerClusterGroup({ showCoverageOnHover: false, iconCreateFunction: (cluster) ->\n L.divIcon({ html: '
' + cluster.getChildCount() + '', className: 'map-cluster map-cluster--small' })\n })\n\n for m in markersList\n marker = L.marker(new L.LatLng(m.lat, m.lng), { title: m.name, icon: icon })\n marker.bindPopup(popupRenderer(m))\n markers.addLayer(marker)\n map.addLayer(markers)\n map.fitBounds(markers.getBounds(), { paddingTopLeft: [30, 50], paddingBottomRight: [30, 50] })\n\n #Todo: i18n\n clubPopupRenderer: (marker) ->\n \"\"\"\n \n \"\"\"\n\n initSearch: () ->\n $.me.address_autocomplete()\n\n $('[data-filters]').toggleClass 'active', $('#search_params_modal').find('input:checked').length > 0\n\n $('[data-modal-trigger]').click (e) ->\n e.preventDefault()\n n = $(e.currentTarget.dataset.modalTrigger)\n $('[data-filters]').toggleClass 'active', n.find('input:checked').length > 0\n n.toggleClass('hidden')\n\n $('[data-reset-filters]').click (e) ->\n $(e.currentTarget.dataset.resetFilters).find('input:checked').prop('checked', false)\n\n $('[data-localize]').click (e) ->\n return unless e.target.checked\n navigator.geolocation.getCurrentPosition (p) ->\n (new google.maps.Geocoder).geocode { location: { lat: p.coords.latitude, lng: p.coords.longitude} }, (results, status) ->\n unless status is 'OK'\n e.target.checked = false\n return\n place = results[0]\n $('[data-field=\"location\"]').val place.formatted_address\n $('[data-field=\"lat\"]').val place.geometry.location.lat()\n $('[data-field=\"lng\"]').val place.geometry.location.lng()\n , ->\n new Toast(I18n.t('js.gps.disabled'), { type: 'alert' }).show()\n e.target.checked = false\n","import Swiper, { Autoplay, Navigation, Pagination, EffectFade } from 'swiper';\n$.extend true, $.me,\n pages:\n home_act: ->\n Swiper.use([Autoplay, Pagination, EffectFade]);\n\n new Swiper('.js-slider-classic', {\n pagination: {\n el: \".js-slider-classic-pagination\",\n clickable: true,\n },\n slidesPerView: 1,\n centeredSlides: false,\n spaceBetween: 15,\n });\n\n intersectionHandler = (entries, observer) ->\n for entry in entries\n threshold = parseFloat(entry.target.getAttribute('data-threshold'))\n if entry.intersectionRatio > threshold\n entry.target.classList.remove('animation--start')\n observer.unobserve(entry.target)\n\n observer = new IntersectionObserver(intersectionHandler, { threshold: Array.from({length: 11}, (x, i) -> i * 0.1 ) })\n\n elmtsToAnim = document.querySelectorAll('[data-controller=\"animate-on-entering-viewport\"]')\n elmtsToAnim.forEach((elmt) ->\n elmt.classList.add('animation--start')\n observer.observe(elmt)\n )\n\n $('#cookies_policy').click (e) ->\n e.preventDefault()\n $(e.target).closest('div.cookies').remove()\n document.cookie = 'cookies_policy=on'\n\n # TODO : Clean this shit ...\n $(document).on 'me:domChanged', (e) ->\n $('#disclaimer-button').click (e) ->\n e.preventDefault()\n day = $('#days').val()\n month = $('#months').val()\n year = $('#years').val()\n birth_date = new Date(year, month, day)\n\n birth_date.setFullYear(birth_date.getFullYear() + 18)\n\n if year && birth_date <= new Date()\n $('#disclaimer-button').attr(\"data-modal\", \"close\")\n\n else if year == \"\"\n $('#disclaimer-error-message').removeClass('display-none')\n else\n location.href = 'https://www.google.fr'\n\n prelaunch_act: ->\n\n Swiper.use([Autoplay, Pagination, EffectFade]);\n\n new Swiper('.js-slider-classic', {\n pagination: {\n el: \".js-slider-classic-pagination\",\n clickable: true\n },\n slidesPerView: 1,\n centeredSlides: false,\n spaceBetween: 15\n })\n\n intersectionHandler = (entries, observer) ->\n for entry in entries\n threshold = parseFloat(entry.target.getAttribute('data-threshold'))\n if entry.intersectionRatio > threshold\n entry.target.classList.remove('animation--start')\n observer.unobserve(entry.target)\n\n observer = new IntersectionObserver(intersectionHandler, { threshold: Array.from({length: 11}, (x, i) -> i * 0.1 ) })\n\n elmtsToAnim = document.querySelectorAll('[data-controller=\"animate-on-entering-viewport\"]')\n elmtsToAnim.forEach((elmt) ->\n elmt.classList.add('animation--start')\n observer.observe(elmt)\n )\n\n $('#cookies_policy').click (e) ->\n e.preventDefault()\n $(e.target).closest('div.cookies').remove()\n document.cookie = 'cookies_policy=on'\n\n # TODO : Clean this shit ...\n $(document).on 'me:domChanged', (e) ->\n $('#disclaimer-button').click (e) ->\n e.preventDefault()\n day = $('#days').val()\n month = $('#months').val()\n year = $('#years').val()\n birth_date = new Date(year, month, day)\n\n birth_date.setFullYear(birth_date.getFullYear() + 18)\n\n if year && birth_date <= new Date()\n $('#disclaimer-button').attr(\"data-modal\", \"close\")\n\n else if year == \"\"\n $('#disclaimer-error-message').removeClass('display-none')\n else\n location.href = 'https://www.google.fr'\n",";(function(window){var hadGlobal='Modernizr' in window;var oldGlobal=window.Modernizr;/*! modernizr 3.13.0 (Custom Build) | MIT *\n * https://modernizr.com/download/?-audio-canvas-canvastext-filereader-geolocation-getusermedia-history-input-inputtypes-localstorage-postmessage-sessionstorage-touchevents-video-websockets-websqldatabase-addtest-domprefixes-prefixed-shiv-testallprops-testprop !*/\n!function(e,t,n,a){function o(e,t){return typeof e===t}function r(e){var t=_.className,n=Modernizr._config.classPrefix||\"\";if(P&&(t=t.baseVal),Modernizr._config.enableJSClass){var a=new RegExp(\"(^|\\\\s)\"+n+\"no-js(\\\\s|$)\");t=t.replace(a,\"$1\"+n+\"js$2\")}Modernizr._config.enableClasses&&(e.length>0&&(t+=\" \"+n+e.join(\" \"+n)),P?_.className.baseVal=t:_.className=t)}function i(e,t){if(\"object\"==typeof e)for(var n in e)E(e,n)&&i(n,e[n]);else{e=e.toLowerCase();var a=e.split(\".\"),o=Modernizr[a[0]];if(2===a.length&&(o=o[a[1]]),void 0!==o)return Modernizr;t=\"function\"==typeof t?t():t,1===a.length?Modernizr[a[0]]=t:(!Modernizr[a[0]]||Modernizr[a[0]]instanceof Boolean||(Modernizr[a[0]]=new Boolean(Modernizr[a[0]])),Modernizr[a[0]][a[1]]=t),r([(t&&!1!==t?\"\":\"no-\")+a.join(\"-\")]),Modernizr._trigger(e,t)}return Modernizr}function s(e,t){return!!~(\"\"+e).indexOf(t)}function c(){return\"function\"!=typeof n.createElement?n.createElement(arguments[0]):P?n.createElementNS.call(n,\"http://www.w3.org/2000/svg\",arguments[0]):n.createElement.apply(n,arguments)}function l(){var e=n.body;return e||(e=c(P?\"svg\":\"body\"),e.fake=!0),e}function d(e,t,a,o){var r,i,s,d,u=\"modernizr\",f=c(\"div\"),p=l();if(parseInt(a,10))for(;a--;)s=c(\"div\"),s.id=o?o[a]:u+(a+1),f.appendChild(s);return r=c(\"style\"),r.type=\"text/css\",r.id=\"s\"+u,(p.fake?p:f).appendChild(r),p.appendChild(f),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(n.createTextNode(e)),f.id=u,p.fake&&(p.style.background=\"\",p.style.overflow=\"hidden\",d=_.style.overflow,_.style.overflow=\"hidden\",_.appendChild(p)),i=t(f,e),p.fake&&p.parentNode?(p.parentNode.removeChild(p),_.style.overflow=d,_.offsetHeight):f.parentNode.removeChild(f),!!i}function u(e){return e.replace(/([A-Z])/g,function(e,t){return\"-\"+t.toLowerCase()}).replace(/^ms-/,\"-ms-\")}function f(e,n,a){var o;if(\"getComputedStyle\"in t){o=getComputedStyle.call(t,e,n);var r=t.console;if(null!==o)a&&(o=o.getPropertyValue(a));else if(r){var i=r.error?\"error\":\"log\";r[i].call(r,\"getComputedStyle returning null, its possible modernizr test results are inaccurate\")}}else o=!n&&e.currentStyle&&e.currentStyle[a];return o}function p(e,n){var o=e.length;if(\"CSS\"in t&&\"supports\"in t.CSS){for(;o--;)if(t.CSS.supports(u(e[o]),n))return!0;return!1}if(\"CSSSupportsRule\"in t){for(var r=[];o--;)r.push(\"(\"+u(e[o])+\":\"+n+\")\");return r=r.join(\" or \"),d(\"@supports (\"+r+\") { #modernizr { position: absolute; } }\",function(e){return\"absolute\"===f(e,null,\"position\")})}return a}function m(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,\"\")}function v(e,t,n,r){function i(){d&&(delete N.style,delete N.modElem)}if(r=!o(r,\"undefined\")&&r,!o(n,\"undefined\")){var l=p(e,n);if(!o(l,\"undefined\"))return l}for(var d,u,f,v,h,g=[\"modernizr\",\"tspan\",\"samp\"];!N.style&&g.length;)d=!0,N.modElem=c(g.shift()),N.style=N.modElem.style;for(f=e.length,u=0;u
\"+t+\"\",a.insertBefore(n.lastChild,a.firstChild)}function a(){var e=y.elements;return\"string\"==typeof e?e.split(\" \"):e}function o(e,t){var n=y.elements;\"string\"!=typeof n&&(n=n.join(\" \")),\"string\"!=typeof e&&(e=e.join(\" \")),y.elements=n+\" \"+e,l(t)}function r(e){var t=g[e[v]];return t||(t={},h++,e[v]=h,g[h]=t),t}function i(e,n,a){if(n||(n=t),u)return n.createElement(e);a||(a=r(n));var o;return o=a.cache[e]?a.cache[e].cloneNode():m.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),!o.canHaveChildren||p.test(e)||o.tagUrn?o:a.frag.appendChild(o)}function s(e,n){if(e||(e=t),u)return e.createDocumentFragment();n=n||r(e);for(var o=n.frag.cloneNode(),i=0,s=a(),c=s.length;i\",d=\"hidden\"in e,u=1==e.childNodes.length||function(){t.createElement(\"a\");var e=t.createDocumentFragment();return void 0===e.cloneNode||void 0===e.createDocumentFragment||void 0===e.createElement}()}catch(e){d=!0,u=!0}}();var y={elements:f.elements||\"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video\",version:\"3.7.3\",shivCSS:!1!==f.shivCSS,supportsUnknownElements:u,shivMethods:!1!==f.shivMethods,type:\"default\",shivDocument:l,createElement:i,createDocumentFragment:s,addElements:o};e.html5=y,l(t),\"object\"==typeof module&&module.exports&&(module.exports=y)}(void 0!==t?t:this,n),function(){var e=c(\"audio\");Modernizr.addTest(\"audio\",function(){var t=!1;try{t=!!e.canPlayType,t&&(t=new Boolean(t))}catch(e){}return t});try{e.canPlayType&&(Modernizr.addTest(\"audio.ogg\",e.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,\"\")),Modernizr.addTest(\"audio.mp3\",e.canPlayType('audio/mpeg; codecs=\"mp3\"').replace(/^no$/,\"\")),Modernizr.addTest(\"audio.opus\",e.canPlayType('audio/ogg; codecs=\"opus\"')||e.canPlayType('audio/webm; codecs=\"opus\"').replace(/^no$/,\"\")),Modernizr.addTest(\"audio.wav\",e.canPlayType('audio/wav; codecs=\"1\"').replace(/^no$/,\"\")),Modernizr.addTest(\"audio.m4a\",(e.canPlayType(\"audio/x-m4a;\")||e.canPlayType(\"audio/aac;\")).replace(/^no$/,\"\")))}catch(e){}}(),Modernizr.addTest(\"canvas\",function(){var e=c(\"canvas\");return!(!e.getContext||!e.getContext(\"2d\"))}),Modernizr.addTest(\"canvastext\",function(){return!1!==Modernizr.canvas&&\"function\"==typeof c(\"canvas\").getContext(\"2d\").fillText}),Modernizr.addTest(\"geolocation\",\"geolocation\"in navigator),Modernizr.addTest(\"history\",function(){var e=navigator.userAgent;return!!e&&((-1===e.indexOf(\"Android 2.\")&&-1===e.indexOf(\"Android 4.0\")||-1===e.indexOf(\"Mobile Safari\")||-1!==e.indexOf(\"Chrome\")||-1!==e.indexOf(\"Windows Phone\")||\"file:\"===location.protocol)&&(t.history&&\"pushState\"in t.history))});var M=c(\"input\"),j=\"autocomplete autofocus list placeholder max min multiple pattern required step\".split(\" \"),L={};Modernizr.input=function(e){for(var n=0,a=e.length;n