[{"command":"settings","settings":{"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"ajax":[],"user":{"uid":0,"permissionsHash":"de459173823136dfde276178a426fb5760cd4d7a6728d5441bd8f09d2c50ccbd"}},"merge":true},{"command":"add_css","data":[{"rel":"stylesheet","media":"all","href":"\/sites\/michaelpage.fr\/files\/css\/css_6YnqW0_WmnpK6U2_BMZ9jajib_R08agdMCeuC8GqOss.css?delta=0\u0026language=fr\u0026theme=mp_theme\u0026include=eJzLLYgvyUjNTdVPrSjQTc7JL03RTcsvytVNLi4GAJMICmc"}]},{"command":"add_js","selector":"body","data":[{"src":"\/core\/assets\/vendor\/jquery\/jquery.min.js?v=3.7.1"},{"src":"\/sites\/michaelpage.fr\/files\/languages\/fr_I-CET2jeTUfkGoUmakRMQOXLI0mbi8cEfvba05prUhE.js?tidfxf"},{"src":"\/core\/misc\/drupalSettingsLoader.js?v=10.6.11"},{"src":"\/core\/misc\/drupal.js?v=10.6.11"},{"src":"\/core\/misc\/drupal.init.js?v=10.6.11"},{"src":"\/modules\/custom\/mp_experience_cloud\/js\/mp-exp-cloud-form.js?v=10.0.14"}]},{"command":"openDialog","selector":"#drupal-modal","settings":null,"data":"\n\n\u003C!-- Subtitle for popup --\u003E\n\u003Cdiv class=\u0022popup-subtitle\u0022\u003E\n  \u003Cp\u003EVous recherchez rapidement un int\u00e9rimaire qualifi\u00e9, un renfort ponctuel ou un profil sp\u00e9cifique pour r\u00e9pondre \u00e0 un pic d\u2019activit\u00e9, un remplacement ou un projet temporaire ?\r\n\r\nNotre \u00e9quipe de recruteurs sp\u00e9cialis\u00e9s est \u00e0 votre \u00e9coute pour vous proposer des solutions sur mesure, adapt\u00e9es \u00e0 votre secteur et \u00e0 vos exigences.\r\n\r\nRemplissez d\u00e8s maintenant notre formulaire de mise en relation et notre \u00e9quipe vous recontactera dans les plus brefs d\u00e9lais.\u0022\u003C\/p\u003E\n\u003C\/div\u003E\n\n\u003C!-- Thank you message --\u003E\n\u003Cdiv id=\u0022ty-msg-wrapper\u0022\u003E\n  \u003Ch4 id=\u0022ty-msg\u0022\u003EThank you for submitting the form\u003Ch4\u003E\n\u003C\/div\u003E\n\n\u003C!-- Skeleton Loader --\u003E\n\u003Cdiv class=\u0022skeletal-loader\u0022 id=\u0022loader\u0022\u003E\n  \u003Cdiv class=\u0022xc-desktop-skeleton loader-view\u0022\u003EDesktop skeleton\u003C\/div\u003E\n  \u003Cdiv class=\u0022xc-popup-skeleton loader-view\u0022\u003ETablet skeleton\u003C\/div\u003E\n  \u003Cdiv class=\u0022xc-sidebar-skeleton loader-view\u0022\u003EMobile skeleton\u003C\/div\u003E\n\u003C\/div\u003E\n\n\u003C!-- Constants --\u003E\n\u003Cscript\u003E\n  let targetIntentCaptchaClassName = \u0027\u0027;\n  let targetIntentCaptcha = \u0027\u0027;\n  let captchaWidget;\n  let isObjectFound = false;\n  let componentCreated = false;\n  let reCaptchaVersion = \u0027V3\u0027;\n  let xcCaptchaKey = \u00226LcQXGIsAAAAAHdghLxUZm9pB1MwAVC8yrhJ0xHi\u0022;\n  let v2CaptchaKey = \u00226LceXGIsAAAAALLCvg7Cgbk3hc8zoq8lQoLzu\\u002DHw\u0022;\n  let submissionBehavior = \u0022redirect\u0022;\n  let successMessage = \u0022\u0022;\n  let onSubmissionUrl = \u0022https\\u003A\\\/\\\/www.michaelpage.fr\\\/recrutement\\\/confiez\\u002Dnous\\u002Dvotre\\u002Dmission\\u002Dmerci\u0022;\n  let autoResponderUrl = \u0022\u0022;\n  let onCandidateUrl = \u0022https\\u003A\\\/\\\/www.michaelpage.fr\\\/job\\u002Dsearch\u0022;\n  let tyDiv = document.getElementById(\u0027ty-msg-wrapper\u0027);\n  let tyMsg = document.getElementById(\u0027ty-msg\u0027);\n\n  let myCallbackFunction = function(){\n    if (tyMsg) tyMsg.innerHTML = successMessage;\n    document.getElementById(\u0027lightning-out\u0027).innerHTML = \u0027\u0027;\n    if (tyDiv) {\n      tyDiv.style.display = \u0027flex\u0027;\n      const y = tyDiv.getBoundingClientRect().top + window.pageYOffset - 120;\n      window.scrollTo({ top: y, behavior: \u0027smooth\u0027 });\n    }\n  }\n\n  var paramsInUrl = new URLSearchParams(window.location.search);\n  \/\/ added for UTM tracking.\n  var utmSource = paramsInUrl.get(\u0027utm_source\u0027);\n  var utmMedium = paramsInUrl.get(\u0027utm_medium\u0027);\n  var utmCampaign = paramsInUrl.get(\u0027utm_campaign\u0027);\n  var contactId = getContactId();\n  var source_url = location.origin + location.pathname;\n  var advice_node = false;\n  var popupView = false;\n\n  const jobFormParams = {\n    formId : \u0022a9e1da54\\u002D8adc\\u002D4c53\\u002D9ec5\\u002Deb80d505ee22\u0022,\n    formType : \u0022Contact\\u0020Form\u0022,\n    variant : \u0022\u0022,\n    campaignId : \u0022CA\\u002DCO\\u00200003095\u0022,\n    onSubmissionUrl : onSubmissionUrl,\n    autoResponderUrl : autoResponderUrl,\n    onCandidateUrl : onCandidateUrl,\n    language : \u0022fr\\u002DFR\u0022,\n    brand : \u0022MP\u0022,\n    country : \u0022FR\u0022,\n    multiCountry : \u0022false\u0022,\n    contactId : contactId,\n    utmSource : utmSource,\n    utmMedium : utmMedium,\n    utmCampaign : utmCampaign,\n    sourceUrl : source_url,\n    submissionBehavior : submissionBehavior,\n    onSuccessCallback : myCallbackFunction,\n    v3Success: true\n  }\n\n  function getContactId() {\n    let cid = paramsInUrl.get(\u0027cid\u0027);\n    if (!cid) {\n      cid = getCookie(\u0027contactId\u0027);\n    }\n    return cid || null;\n  }\n\n  function getCookie(name) {\n    return Object.fromEntries(\n      document.cookie.split(\u0022; \u0022).map(c =\u003E c.split(\u0022=\u0022))\n    )[name] || null;\n  }\n\u003C\/script\u003E\n\n\u003C!-- Lightning Out Container (Initially Hidden) --\u003E\n\u003Cdiv style=\u0022display:none;\u0022 id=\u0022lightning-out\u0022\u003E\n  \u003Cp id=\u0022temp-text\u0022\u003EThis text is added to make the div non-empty for escaping empty div filters.\u003C\/p\u003E\n\u003C\/div\u003E\n\n\u003C!-- Main Logic --\u003E\n\u003Cscript\u003E\n  function tryLout() {\n    const localeLanguage = new Intl.Locale(jobFormParams.language);\n    const localeLanguageCode = localeLanguage.language;\n    if (jobFormParams.country !== \u0027CN\u0027) {\n      \/\/ Add google captcha for all sites except China.\n      const V3script = document.createElement(\u0027script\u0027);\n      V3script.src = `https:\/\/www.google.com\/recaptcha\/api.js?hl=${localeLanguageCode}\u0026render=${xcCaptchaKey}`;\n      V3script.async = true;\n      V3script.defer = true;\n      document.head.appendChild(V3script);\n    }\n\n    $Lightning.use(\u0027c:CAP_XC_globalJobFormOutApp\u0027, function () {\n      $Lightning.createComponent(\n        \u0027c:CAP_XC_globalJobFormAura\u0027,\n        { jobFormParams: jobFormParams },\n        \u0027lightning-out\u0027,\n        function (cmp) {\n          componentCreated = true;\n          document.getElementById(\u0027temp-text\u0027).remove();\n          document.getElementById(\u0027lightning-out\u0027).style.display = \u0027block\u0027;\n          const loader = document.getElementById(\u0027loader\u0027);\n          if (loader) loader.remove();\n          if(popupView == true){\n            setTimeout(function() {\n              document.dispatchEvent(new CustomEvent(\u0027xc_focus_into_form\u0027));\n            }, 100);\n          }\n        }\n      );\n    }, \u0027https:\/\/pagegroup.my.site.com\/globalform\u0027);\n  }\n\n  function insertIntoShadowDOM(retries = 3, delay = 1000) {\n    const allHosts = document.querySelectorAll(\u0027*\u0027);\n    const recapContainers = []; \/\/ Store all matching containers\n\n    for (const host of allHosts) {\n      if (host.shadowRoot) {\n        const allElems = host.shadowRoot.querySelectorAll(\u0027*\u0027);\n        for (const elem of allElems) {\n          if (elem.shadowRoot) {\n            const deepFound = elem.shadowRoot.querySelector(targetIntentCaptcha);\n            if (deepFound \u0026\u0026 deepFound.className === targetIntentCaptchaClassName) {\n              recapContainers.push(deepFound);\n            }\n          }\n        }\n      }\n    }\n  \tif (recapContainers.length \u003E 0) {\n      recapContainers.forEach((container, index) =\u003E {\n        const uniqueId = \u0027captcha-\u0027 + index;\n        container.innerHTML = `\u003Cdiv id=\u0022${uniqueId}\u0022 class=\u0022g-recaptcha\u0022\n          data-sitekey=\u0022${v2CaptchaKey}\u0022\n          data-callback=\u0022onCaptchaSuccess\u0022\n          data-expired-callback=\u0022onCaptchaExpired\u0022\u003E\n        \u003C\/div\u003E`;\n        captchaWidget = window.grecaptcha.render(container.querySelector(`#${uniqueId}`), {\n          sitekey: v2CaptchaKey\n        });\n\t\t  });\n      document.getElementById(\u0027lightning-out\u0027).style.display = \u0027block\u0027;\n      const loader = document.getElementById(\u0027loader\u0027);\n\t\t  if (loader) loader.remove();\n\t  }\n    else if (retries \u003E 0) {\n      setTimeout(() =\u003E insertIntoShadowDOM(retries - 1, delay), delay);\n\t  }\n    else {\n      const CaptchaErrorEvent = new CustomEvent(\u0027CaptchaErrorEvent\u0027,{detail:{message:\u0027CaptchaError\u0027}});\n\t\t  document.dispatchEvent(CaptchaErrorEvent );\n    }\n  }\n\n  function onCaptchaSuccess(token) {\n    reCaptchaVersion=\u0027V2\u0027;\n    const V2token = token;\n    if(V2token == \u0027\u0027){\n      grecaptcha.reset();\n    }\n    else{\n      const event = new CustomEvent(\u0027V2captchaToken\u0027, {\n        detail: { V2captchaToken: V2token }\n      });\n      document.dispatchEvent(event);\n    }\n  }\n\n  function onCaptchaExpired() {\n    window.parent.postMessage({ captchaExpired: true }, \u0027*\u0027);\n  }\n\n  document.addEventListener(\u0027submitEvent\u0027, function (e) {\n    const submittedIntentType = e.detail.submitIntentSelected;\n    if (e.detail.action === \u0027submitClicked\u0027) {\n      targetIntentCaptchaClassName = e.detail.captchaDivClass;\n      targetIntentCaptcha =\u0027.\u0027+targetIntentCaptchaClassName;\n      if(reCaptchaVersion == \u0027V3\u0027){\n        grecaptcha.ready(() =\u003E {\n          grecaptcha.execute(xcCaptchaKey, { action: \u0027submit\u0027 }).then((submitToken) =\u003E {\n            document.dispatchEvent(new CustomEvent(\u0027captchaV3TokenOnSubmit\u0027, { detail: { V3token: submitToken, submittedIntent:submittedIntentType } }));\n          })\n          .catch((error) =\u003E {\n            document.dispatchEvent(new CustomEvent(\u0027CaptchaErrorEvent\u0027,{detail:{eMessage:\u0027CaptchaError\u0027}}));\n          });\n        });\n      }\n      else {\n        const V2token = grecaptcha.getResponse(captchaWidget);\n        const V2Submitevent = new CustomEvent(\u0027V2CaptchaTokenOnSubmit\u0027,{detail:{V2captchaToken:V2token , submittedIntent:submittedIntentType}});\n        document.dispatchEvent(V2Submitevent );\n      }\n    }\n  });\n\n  window.addEventListener(\u0027error\u0027,function(e){\n    if(e.message.toLowerCase().includes(\u0022recaptcha\u0022) ||e.filename.toLowerCase().includes(\u0022recaptcha\u0022)){\n      const CaptchaErrorEvent = new CustomEvent(\u0027CaptchaErrorEvent\u0027,{detail:{message:\u0027CaptchaError\u0027}});\n        document.dispatchEvent(CaptchaErrorEvent);\n    }\n  });\n\n  document.addEventListener(\u0027V3ResultOnSubmit\u0027, function (e) {\n    if (!e.detail) {\n      jobFormParams.v3Success = false;\n      insertIntoShadowDOM(targetIntentCaptcha);\n    }\n  });\n\n  document.addEventListener(\u0027intentchange\u0027, function (e) {\n    if (advice_node) {\n      Drupal.changeRelatedArticlesPosition(true);\n    }\n  });\n\n  document.addEventListener(\u0027loutanalyticsevent\u0027, function (e) {\n    if (window.dataLayer) {\n      window.dataLayer.push(e.detail);\n    }\n  });\n\u003C\/script\u003E\n\n\u003C!-- Load Lightning Out Script --\u003E\n\u003Cscript\u003E\n  if (document.querySelector(\u0027script[src=\u0022https:\/\/pagegroup.my.site.com\/globalform\/lightning\/lightning.out.js\u0022]\u0027)) {\n    tryLout();\n  }\n\u003C\/script\u003E\n\n\u003Cscript\u003E\n  document.addEventListener(\u0027DOMContentLoaded\u0027, function() {\n    var contactId = getContactId();\n    var formId = \u0022a9e1da54\\u002D8adc\\u002D4c53\\u002D9ec5\\u002Deb80d505ee22\u0022;\n    var formType = \u0022Contact\\u0020Form\u0022;\n    var variant = \u0022\u0022;\n    var campaignId = \u0022CA\\u002DCO\\u00200003095\u0022;\n    var language = \u0022fr\\u002DFR\u0022;\n    var brand = \u0022MP\u0022;\n    var country = \u0022FR\u0022;\n    var multiCountry = \u0022false\u0022;\n\n    if (document.body.classList.contains(\u0027page-node-type-advice\u0027)) {\n      advice_node = true;\n    }\n  });\n\n  document.addEventListener(\u0027xc_focus_dialog_close\u0027, function (e) {\n    var $dialog = $(\u0027.ui-dialog:visible\u0027).last();\n    \/\/ Find the close button inside the dialog\n    var $close = $dialog.find(\u0027.ui-dialog-titlebar-close\u0027);\n\n    if ($close.length) {\n      $close.focus();\n    }\n  });\n\n  document.addEventListener(\u0027focusin\u0027, function (e) {\n    const el = e.target;\n    if (!el.classList || !el.classList.contains(\u0027ui-dialog-titlebar-close\u0027)) return;\n    \/\/ Remove any previous handler (store it on the element)\n    if (el._xcKeydown) {\n      el.removeEventListener(\u0027keydown\u0027, el._xcKeydown);\n      el._xcKeydown = null;\n    }\n    \/\/ Bind the Tab handler\n    el._xcKeydown = function (ev) {\n      if (ev.key === \u0027Tab\u0027) {\n        ev.preventDefault();\n        document.dispatchEvent(new CustomEvent(\u0027xc_focus_into_form\u0027));\n      }\n    };\n    el.addEventListener(\u0027keydown\u0027, el._xcKeydown);\n  });\n\u003C\/script\u003E\n","dialogOptions":{"dialogClass":"xcform-modal","width":"800","height":"500","modal":true,"title":"Besoin de recruter en int\u00e9rim ? \u00c9changeons-ensemble !","classes":{"ui-dialog":"xcform-modal"}}}]