templates/blog/article/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% set title = '' %}
  3. {% set description = '' %}
  4. {% for blog in blogs %}
  5.     {% set title = blog.title %}
  6.     {% set description = blog.description %}
  7. {% endfor %}
  8. {% block title %}{{ title }}{% endblock %}
  9. {% block meta_date_desc %}
  10.     <script type="application/ld+json">
  11.         {
  12.             "@context" : "https://schema.org",
  13.             "@type" : "WebSite",
  14.             "name" : "WorkDispo",
  15.             "url" : "https://www.workdispo.com/",
  16.         {% if blogs and blogs[0].getCreatedAt() is not empty %}
  17.                       "datePublished": "{{ blogs[0].getCreatedAt()|date('c') }}",
  18.                     {% endif %}
  19.                     {% if blogs and blogs[0].getUpdatedAt() is not empty %}
  20.                       "dateModified": "{{ blogs[0].getUpdatedAt()|date('c') }}"
  21.                     {% endif %}
  22.         }
  23.     </script>
  24. {% endblock %}
  25. {% block meta %}
  26.     <meta name="description" content="{{ description }}">
  27.     <meta name="keywords" content="{{ blogs[0].keywords }}">
  28.     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=3">
  29.     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  30.     <script type="text/javascript">(window.NREUM || (NREUM = {})).init = {ajax: {deny_list: ["bam.nr-data.net"]}};
  31.         (window.NREUM || (NREUM = {})).loader_config = {
  32.             licenseKey: "NRJS-8c6c895b97ea60d5ee0",
  33.             applicationID: "1333848373"
  34.         };
  35.         window.NREUM || (NREUM = {}), __nr_require = function (t, e, n) {
  36.             function r(n) {
  37.                 if (!e[n]) {
  38.                     var i = e[n] = {exports: {}};
  39.                     t[n][0].call(i.exports, function (e) {
  40.                         var i = t[n][1][e];
  41.                         return r(i || e)
  42.                     }, i, i.exports)
  43.                 }
  44.                 return e[n].exports
  45.             }
  46.             if ("function" == typeof __nr_require) return __nr_require;
  47.             for (var i = 0; i < n.length; i++) r(n[i]);
  48.             return r
  49.         }({
  50.             1: [function (t, e, n) {
  51.                 function r() {
  52.                 }
  53.                 function i(t, e, n, r) {
  54.                     return function () {
  55.                         return s.recordSupportability("API/" + e + "/called"), o(t + e, [u.now()].concat(c(arguments)), n ? null : this, r), n ? void 0 : this
  56.                     }
  57.                 }
  58.                 var o = t("handle"), a = t(9), c = t(10), f = t("ee").get("tracer"), u = t("loader"), s = t(4),
  59.                     d = NREUM;
  60.                 "undefined" == typeof window.newrelic && (newrelic = d);
  61.                 var p = ["setPageViewName", "setCustomAttribute", "setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease"],
  62.                     l = "api-", v = l + "ixn-";
  63.                 a(p, function (t, e) {
  64.                     d[e] = i(l, e, !0, "api")
  65.                 }), d.addPageAction = i(l, "addPageAction", !0), d.setCurrentRouteName = i(l, "routeName", !0), e.exports = newrelic, d.interaction = function () {
  66.                     return (new r).get()
  67.                 };
  68.                 var m = r.prototype = {
  69.                     createTracer: function (t, e) {
  70.                         var n = {}, r = this, i = "function" == typeof e;
  71.                         return o(v + "tracer", [u.now(), t, n], r), function () {
  72.                             if (f.emit((i ? "" : "no-") + "fn-start", [u.now(), r, i], n), i) try {
  73.                                 return e.apply(this, arguments)
  74.                             } catch (t) {
  75.                                 throw f.emit("fn-err", [arguments, this, t], n), t
  76.                             } finally {
  77.                                 f.emit("fn-end", [u.now()], n)
  78.                             }
  79.                         }
  80.                     }
  81.                 };
  82.                 a("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","), function (t, e) {
  83.                     m[e] = i(v, e)
  84.                 }), newrelic.noticeError = function (t, e) {
  85.                     "string" == typeof t && (t = new Error(t)), s.recordSupportability("API/noticeError/called"), o("err", [t, u.now(), !1, e])
  86.                 }
  87.             }, {}], 2: [function (t, e, n) {
  88.                 function r(t) {
  89.                     if (NREUM.init) {
  90.                         for (var e = NREUM.init, n = t.split("."), r = 0; r < n.length - 1; r++) if (e = e[n[r]], "object" != typeof e) return;
  91.                         return e = e[n[n.length - 1]]
  92.                     }
  93.                 }
  94.                 e.exports = {getConfiguration: r}
  95.             }, {}], 3: [function (t, e, n) {
  96.                 var r = !1;
  97.                 try {
  98.                     var i = Object.defineProperty({}, "passive", {
  99.                         get: function () {
  100.                             r = !0
  101.                         }
  102.                     });
  103.                     window.addEventListener("testPassive", null, i), window.removeEventListener("testPassive", null, i)
  104.                 } catch (o) {
  105.                 }
  106.                 e.exports = function (t) {
  107.                     return r ? {passive: !0, capture: !!t} : !!t
  108.                 }
  109.             }, {}], 4: [function (t, e, n) {
  110.                 function r(t, e) {
  111.                     var n = [a, t, {name: t}, e];
  112.                     return o("storeMetric", n, null, "api"), n
  113.                 }
  114.                 function i(t, e) {
  115.                     var n = [c, t, {name: t}, e];
  116.                     return o("storeEventMetrics", n, null, "api"), n
  117.                 }
  118.                 var o = t("handle"), a = "sm", c = "cm";
  119.                 e.exports = {
  120.                     constants: {SUPPORTABILITY_METRIC: a, CUSTOM_METRIC: c},
  121.                     recordSupportability: r,
  122.                     recordCustom: i
  123.                 }
  124.             }, {}], 5: [function (t, e, n) {
  125.                 function r() {
  126.                     return c.exists && performance.now ? Math.round(performance.now()) : (o = Math.max((new Date).getTime(), o)) - a
  127.                 }
  128.                 function i() {
  129.                     return o
  130.                 }
  131.                 var o = (new Date).getTime(), a = o, c = t(11);
  132.                 e.exports = r, e.exports.offset = a, e.exports.getLastTimestamp = i
  133.             }, {}], 6: [function (t, e, n) {
  134.                 function r(t, e) {
  135.                     var n = t.getEntries();
  136.                     n.forEach(function (t) {
  137.                         "first-paint" === t.name ? l("timing", ["fp", Math.floor(t.startTime)]) : "first-contentful-paint" === t.name && l("timing", ["fcp", Math.floor(t.startTime)])
  138.                     })
  139.                 }
  140.                 function i(t, e) {
  141.                     var n = t.getEntries();
  142.                     if (n.length > 0) {
  143.                         var r = n[n.length - 1];
  144.                         if (u && u < r.startTime) return;
  145.                         var i = [r], o = a({});
  146.                         o && i.push(o), l("lcp", i)
  147.                     }
  148.                 }
  149.                 function o(t) {
  150.                     t.getEntries().forEach(function (t) {
  151.                         t.hadRecentInput || l("cls", [t])
  152.                     })
  153.                 }
  154.                 function a(t) {
  155.                     var e = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
  156.                     if (e) return e.type && (t["net-type"] = e.type), e.effectiveType && (t["net-etype"] = e.effectiveType), e.rtt && (t["net-rtt"] = e.rtt), e.downlink && (t["net-dlink"] = e.downlink), t
  157.                 }
  158.                 function c(t) {
  159.                     if (t instanceof y && !w) {
  160.                         var e = Math.round(t.timeStamp), n = {type: t.type};
  161.                         a(n), e <= v.now() ? n.fid = v.now() - e : e > v.offset && e <= Date.now() ? (e -= v.offset, n.fid = v.now() - e) : e = v.now(), w = !0, l("timing", ["fi", e, n])
  162.                     }
  163.                 }
  164.                 function f(t) {
  165.                     "hidden" === t && (u = v.now(), l("pageHide", [u]))
  166.                 }
  167.                 if (!("init" in NREUM && "page_view_timing" in NREUM.init && "enabled" in NREUM.init.page_view_timing && NREUM.init.page_view_timing.enabled === !1)) {
  168.                     var u, s, d, p, l = t("handle"), v = t("loader"), m = t(8), g = t(3), y = NREUM.o.EV;
  169.                     if ("PerformanceObserver" in window && "function" == typeof window.PerformanceObserver) {
  170.                         s = new PerformanceObserver(r);
  171.                         try {
  172.                             s.observe({entryTypes: ["paint"]})
  173.                         } catch (h) {
  174.                         }
  175.                         d = new PerformanceObserver(i);
  176.                         try {
  177.                             d.observe({entryTypes: ["largest-contentful-paint"]})
  178.                         } catch (h) {
  179.                         }
  180.                         p = new PerformanceObserver(o);
  181.                         try {
  182.                             p.observe({type: "layout-shift", buffered: !0})
  183.                         } catch (h) {
  184.                         }
  185.                     }
  186.                     if ("addEventListener" in document) {
  187.                         var w = !1, b = ["click", "keydown", "mousedown", "pointerdown", "touchstart"];
  188.                         b.forEach(function (t) {
  189.                             document.addEventListener(t, c, g(!1))
  190.                         })
  191.                     }
  192.                     m(f)
  193.                 }
  194.             }, {}], 7: [function (t, e, n) {
  195.                 function r(t, e) {
  196.                     if (!i) return !1;
  197.                     if (t !== i) return !1;
  198.                     if (!e) return !0;
  199.                     if (!o) return !1;
  200.                     for (var n = o.split("."), r = e.split("."), a = 0; a < r.length; a++) if (r[a] !== n[a]) return !1;
  201.                     return !0
  202.                 }
  203.                 var i = null, o = null, a = /Version\/(\S+)\s+Safari/;
  204.                 if (navigator.userAgent) {
  205.                     var c = navigator.userAgent, f = c.match(a);
  206.                     f && c.indexOf("Chrome") === -1 && c.indexOf("Chromium") === -1 && (i = "Safari", o = f[1])
  207.                 }
  208.                 e.exports = {agent: i, version: o, match: r}
  209.             }, {}], 8: [function (t, e, n) {
  210.                 function r(t) {
  211.                     function e() {
  212.                         t(c && document[c] ? document[c] : document[o] ? "hidden" : "visible")
  213.                     }
  214.                     "addEventListener" in document && a && document.addEventListener(a, e, i(!1))
  215.                 }
  216.                 var i = t(3);
  217.                 e.exports = r;
  218.                 var o, a, c;
  219.                 "undefined" != typeof document.hidden ? (o = "hidden", a = "visibilitychange", c = "visibilityState") : "undefined" != typeof document.msHidden ? (o = "msHidden", a = "msvisibilitychange") : "undefined" != typeof document.webkitHidden && (o = "webkitHidden", a = "webkitvisibilitychange", c = "webkitVisibilityState")
  220.             }, {}], 9: [function (t, e, n) {
  221.                 function r(t, e) {
  222.                     var n = [], r = "", o = 0;
  223.                     for (r in t) i.call(t, r) && (n[o] = e(r, t[r]), o += 1);
  224.                     return n
  225.                 }
  226.                 var i = Object.prototype.hasOwnProperty;
  227.                 e.exports = r
  228.             }, {}], 10: [function (t, e, n) {
  229.                 function r(t, e, n) {
  230.                     e || (e = 0), "undefined" == typeof n && (n = t ? t.length : 0);
  231.                     for (var r = -1, i = n - e || 0, o = Array(i < 0 ? 0 : i); ++r < i;) o[r] = t[e + r];
  232.                     return o
  233.                 }
  234.                 e.exports = r
  235.             }, {}], 11: [function (t, e, n) {
  236.                 e.exports = {exists: "undefined" != typeof window.performance && window.performance.timing && "undefined" != typeof window.performance.timing.navigationStart}
  237.             }, {}], ee: [function (t, e, n) {
  238.                 function r() {
  239.                 }
  240.                 function i(t) {
  241.                     function e(t) {
  242.                         return t && t instanceof r ? t : t ? u(t, f, a) : a()
  243.                     }
  244.                     function n(n, r, i, o, a) {
  245.                         if (a !== !1 && (a = !0), !l.aborted || o) {
  246.                             t && a && t(n, r, i);
  247.                             for (var c = e(i), f = m(n), u = f.length, s = 0; s < u; s++) f[s].apply(c, r);
  248.                             var p = d[w[n]];
  249.                             return p && p.push([b, n, r, c]), c
  250.                         }
  251.                     }
  252.                     function o(t, e) {
  253.                         h[t] = m(t).concat(e)
  254.                     }
  255.                     function v(t, e) {
  256.                         var n = h[t];
  257.                         if (n) for (var r = 0; r < n.length; r++) n[r] === e && n.splice(r, 1)
  258.                     }
  259.                     function m(t) {
  260.                         return h[t] || []
  261.                     }
  262.                     function g(t) {
  263.                         return p[t] = p[t] || i(n)
  264.                     }
  265.                     function y(t, e) {
  266.                         l.aborted || s(t, function (t, n) {
  267.                             e = e || "feature", w[n] = e, e in d || (d[e] = [])
  268.                         })
  269.                     }
  270.                     var h = {}, w = {}, b = {
  271.                         on: o,
  272.                         addEventListener: o,
  273.                         removeEventListener: v,
  274.                         emit: n,
  275.                         get: g,
  276.                         listeners: m,
  277.                         context: e,
  278.                         buffer: y,
  279.                         abort: c,
  280.                         aborted: !1
  281.                     };
  282.                     return b
  283.                 }
  284.                 function o(t) {
  285.                     return u(t, f, a)
  286.                 }
  287.                 function a() {
  288.                     return new r
  289.                 }
  290.                 function c() {
  291.                     (d.api || d.feature) && (l.aborted = !0, d = l.backlog = {})
  292.                 }
  293.                 var f = "nr@context", u = t("gos"), s = t(9), d = {}, p = {}, l = e.exports = i();
  294.                 e.exports.getOrSetContext = o, l.backlog = d
  295.             }, {}], gos: [function (t, e, n) {
  296.                 function r(t, e, n) {
  297.                     if (i.call(t, e)) return t[e];
  298.                     var r = n();
  299.                     if (Object.defineProperty && Object.keys) try {
  300.                         return Object.defineProperty(t, e, {value: r, writable: !0, enumerable: !1}), r
  301.                     } catch (o) {
  302.                     }
  303.                     return t[e] = r, r
  304.                 }
  305.                 var i = Object.prototype.hasOwnProperty;
  306.                 e.exports = r
  307.             }, {}], handle: [function (t, e, n) {
  308.                 function r(t, e, n, r) {
  309.                     i.buffer([t], r), i.emit(t, e, n)
  310.                 }
  311.                 var i = t("ee").get("handle");
  312.                 e.exports = r, r.ee = i
  313.             }, {}], id: [function (t, e, n) {
  314.                 function r(t) {
  315.                     var e = typeof t;
  316.                     return !t || "object" !== e && "function" !== e ? -1 : t === window ? 0 : a(t, o, function () {
  317.                         return i++
  318.                     })
  319.                 }
  320.                 var i = 1, o = "nr@id", a = t("gos");
  321.                 e.exports = r
  322.             }, {}], loader: [function (t, e, n) {
  323.                 function r() {
  324.                     if (!M++) {
  325.                         var t = T.info = NREUM.info, e = m.getElementsByTagName("script")[0];
  326.                         if (setTimeout(u.abort, 3e4), !(t && t.licenseKey && t.applicationID && e)) return u.abort();
  327.                         f(x, function (e, n) {
  328.                             t[e] || (t[e] = n)
  329.                         });
  330.                         var n = a();
  331.                         c("mark", ["onload", n + T.offset], null, "api"), c("timing", ["load", n]);
  332.                         var r = m.createElement("script");
  333.                         0 === t.agent.indexOf("http://") || 0 === t.agent.indexOf("https://") ? r.src = t.agent : r.src = l + "://" + t.agent, e.parentNode.insertBefore(r, e)
  334.                     }
  335.                 }
  336.                 function i() {
  337.                     "complete" === m.readyState && o()
  338.                 }
  339.                 function o() {
  340.                     c("mark", ["domContent", a() + T.offset], null, "api")
  341.                 }
  342.                 var a = t(5), c = t("handle"), f = t(9), u = t("ee"), s = t(7), d = t(2), p = t(3),
  343.                     l = d.getConfiguration("ssl") === !1 ? "http" : "https", v = window, m = v.document,
  344.                     g = "addEventListener", y = "attachEvent", h = v.XMLHttpRequest, w = h && h.prototype, b = !1;
  345.                 NREUM.o = {
  346.                     ST: setTimeout,
  347.                     SI: v.setImmediate,
  348.                     CT: clearTimeout,
  349.                     XHR: h,
  350.                     REQ: v.Request,
  351.                     EV: v.Event,
  352.                     PR: v.Promise,
  353.                     MO: v.MutationObserver
  354.                 };
  355.                 var E = "" + location, x = {
  356.                     beacon: "bam.nr-data.net",
  357.                     errorBeacon: "bam.nr-data.net",
  358.                     agent: "js-agent.newrelic.com/nr-1216.min.js"
  359.                 }, O = h && w && w[g] && !/CriOS/.test(navigator.userAgent), T = e.exports = {
  360.                     offset: a.getLastTimestamp(),
  361.                     now: a,
  362.                     origin: E,
  363.                     features: {},
  364.                     xhrWrappable: O,
  365.                     userAgent: s,
  366.                     disabled: b
  367.                 };
  368.                 if (!b) {
  369.                     t(1), t(6), m[g] ? (m[g]("DOMContentLoaded", o, p(!1)), v[g]("load", r, p(!1))) : (m[y]("onreadystatechange", i), v[y]("onload", r)), c("mark", ["firstbyte", a.getLastTimestamp()], null, "api");
  370.                     var M = 0
  371.                 }
  372.             }, {}], "wrap-function": [function (t, e, n) {
  373.                 function r(t, e) {
  374.                     function n(e, n, r, f, u) {
  375.                         function nrWrapper() {
  376.                             var o, a, s, p;
  377.                             try {
  378.                                 a = this, o = d(arguments), s = "function" == typeof r ? r(o, a) : r || {}
  379.                             } catch (l) {
  380.                                 i([l, "", [o, a, f], s], t)
  381.                             }
  382.                             c(n + "start", [o, a, f], s, u);
  383.                             try {
  384.                                 return p = e.apply(a, o)
  385.                             } catch (v) {
  386.                                 throw c(n + "err", [o, a, v], s, u), v
  387.                             } finally {
  388.                                 c(n + "end", [o, a, p], s, u)
  389.                             }
  390.                         }
  391.                         return a(e) ? e : (n || (n = ""), nrWrapper[p] = e, o(e, nrWrapper, t), nrWrapper)
  392.                     }
  393.                     function r(t, e, r, i, o) {
  394.                         r || (r = "");
  395.                         var c, f, u, s = "-" === r.charAt(0);
  396.                         for (u = 0; u < e.length; u++) f = e[u], c = t[f], a(c) || (t[f] = n(c, s ? f + r : r, i, f, o))
  397.                     }
  398.                     function c(n, r, o, a) {
  399.                         if (!v || e) {
  400.                             var c = v;
  401.                             v = !0;
  402.                             try {
  403.                                 t.emit(n, r, o, e, a)
  404.                             } catch (f) {
  405.                                 i([f, n, r, o], t)
  406.                             }
  407.                             v = c
  408.                         }
  409.                     }
  410.                     return t || (t = s), n.inPlace = r, n.flag = p, n
  411.                 }
  412.                 function i(t, e) {
  413.                     e || (e = s);
  414.                     try {
  415.                         e.emit("internal-error", t)
  416.                     } catch (n) {
  417.                     }
  418.                 }
  419.                 function o(t, e, n) {
  420.                     if (Object.defineProperty && Object.keys) try {
  421.                         var r = Object.keys(t);
  422.                         return r.forEach(function (n) {
  423.                             Object.defineProperty(e, n, {
  424.                                 get: function () {
  425.                                     return t[n]
  426.                                 }, set: function (e) {
  427.                                     return t[n] = e, e
  428.                                 }
  429.                             })
  430.                         }), e
  431.                     } catch (o) {
  432.                         i([o], n)
  433.                     }
  434.                     for (var a in t) l.call(t, a) && (e[a] = t[a]);
  435.                     return e
  436.                 }
  437.                 function a(t) {
  438.                     return !(t && t instanceof Function && t.apply && !t[p])
  439.                 }
  440.                 function c(t, e) {
  441.                     var n = e(t);
  442.                     return n[p] = t, o(t, n, s), n
  443.                 }
  444.                 function f(t, e, n) {
  445.                     var r = t[e];
  446.                     t[e] = c(r, n)
  447.                 }
  448.                 function u() {
  449.                     for (var t = arguments.length, e = new Array(t), n = 0; n < t; ++n) e[n] = arguments[n];
  450.                     return e
  451.                 }
  452.                 var s = t("ee"), d = t(10), p = "nr@original", l = Object.prototype.hasOwnProperty, v = !1;
  453.                 e.exports = r, e.exports.wrapFunction = c, e.exports.wrapInPlace = f, e.exports.argsToArray = u
  454.             }, {}]
  455.         }, {}, ["loader"]);</script>
  456.     <meta property="og:image"
  457.           content="{{ blogs and blogs[0].blogimage ? asset('uploads/img/' ~ blogs[0].blogimage.path) : absolute_url(asset('images/logo_freelance_new.png')) }}">
  458.     <meta property="og:image:secure_url"
  459.           content="{{ blogs and blogs[0].blogimage ? asset('uploads/img/' ~ blogs[0].blogimage.path) : absolute_url(asset('images/logo_freelance_new.png')) }}">
  460.     <meta property="og:title"
  461.           content="Freelance: missions {{ 'now'|date('Y') }} sur toute la France | WorkDispo"/>
  462.     <meta property="og:type" content="WorkDispo"/>
  463.     <meta property="og:url" content="{{ app.request.getBaseURL() }}"/>
  464.     <meta name="Content-Language" content="fr">
  465.     <meta name="author" content="www.workdispo.com">
  466.     <meta name="revisit-after" content="revisit-after">
  467.     <meta name="pragma" content="no-cache">
  468.     <meta name="classification" content="WorkDispo: des missions sans commission">
  469.     <meta property="og:site_name" data-js-id="meta-og_site_name" content="WorkDispo">
  470.     <meta http-equiv="Cache-Control" content="max-age=31536000">
  471. {% endblock %}
  472. {% block stylesheets %}
  473.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"
  474.           integrity="sha384-jLKHWMFR2JTbi9pi0bwyzQFsL53L3Y9fz2A3bQ7NVK/Ee5TV04R5tT7/3Xi4XlGZ" crossorigin="anonymous">
  475.     <style>
  476.         .blog-post-content h1 {
  477.             color: black;
  478.         }
  479.         .mobile-device {
  480.             display: none;
  481.         }
  482.         .large-device {
  483.             display: block;
  484.         }
  485.         .ez-toc-link {
  486.             position: relative;
  487.             padding-left: 24px; /* Adjust based on the width of the icon */
  488.             text-decoration: none; /* Remove underline */
  489.             color: blue; /* Default color */
  490.         }
  491.         .ez-toc-link .icon {
  492.             position: absolute;
  493.             left: 0;
  494.             top: 50%;
  495.             transform: translateY(-50%);
  496.             display: none; /* Hide icon by default */
  497.             fill: #2a41e8;
  498.         }
  499.         .ez-toc-link.active .icon,
  500.         .ez-toc-link.visited .icon {
  501.             display: block; /* Show icon when active or visited */
  502.         }
  503.         .ez-toc-link.active {
  504.             color: blue; /* Color when active */
  505.         }
  506.         .ez-toc-link.active a {
  507.             color: #2a41e8;
  508.         }
  509.         .ez-toc-link.visited {
  510.             color: gray; /* Color when visited */
  511.         }
  512.         .sidebar-sticky {
  513.             overflow-y: hidden;
  514.         }
  515.         .toc-title {
  516.             color: #000000;
  517.             font-size: 1.8rem;
  518.             font-weight: 700;
  519.             text-align: center;
  520.             margin-bottom: 1.5rem;
  521.         }
  522.         .ez-toc-container-direction {
  523.             display: flex;
  524.             flex-direction: column;
  525.             height: 100%;
  526.         }
  527.         .toc-content {
  528.             overflow: hidden; /* Cache la scrollbar horizontale */
  529.         }
  530.         .ez-toc-list {
  531.             max-height: 200px; /* Définissez la hauteur maximale de la liste défilante selon votre besoin */
  532.             overflow-y: auto; /* Permet le défilement vertical */
  533.             padding-right: 15px; /* Pour compenser la disparition de la scrollbar */
  534.             scrollbar-width: none; /* Cacher la scrollbar pour Firefox */
  535.         }
  536.         #sidebar-container::-webkit-scrollbar {
  537.             /*display: none; !* Cacher la scrollbar pour les navigateurs Webkit *!*/
  538.         }
  539.         .sidebar-sticky {
  540.             border: 3px solid #f1f1f1;
  541.             border-radius: 10px;
  542.             padding: 20px 0 10px 0;
  543.             margin-bottom: 8px;
  544.             position: sticky;
  545.             top: 14%;
  546.         }
  547.         #sidebar-container {
  548.             max-height: 230px !important;
  549.         }
  550.         .toc-container {
  551.             overflow-y: scroll;
  552.         }
  553.         .ez-toc-list::-webkit-scrollbar {
  554.             display: none;
  555.         }
  556.         .ez-toc-list li {
  557.             list-style: none;
  558.             position: relative;
  559.             padding-left: 25px;
  560.             margin-bottom: 10px;
  561.         }
  562.         .ez-toc-page-1 a.ez-toc-link {
  563.             color: gray;
  564.             text-decoration: none; /* Enlève la décoration du texte (soulignement) */
  565.             font-size: medium;
  566.         }
  567.         .ez-toc-page-1 a.ez-toc-link.active {
  568.             color: #2a41e8;
  569.         }
  570.         div.clicked-link a {
  571.             color: grey;
  572.             opacity: 0.8;
  573.         }
  574.         /*.ez-toc-list li:before {*/
  575.         /*    content: "\f00c"; !* Code Unicode pour l'icône de coche de Font Awesome *!*/
  576.         /*    font-family: "Font Awesome 5 Free"; !* Police de Font Awesome *!*/
  577.         /*    font-weight: 900; !* Pour la version solide de l'icône *!*/
  578.         /*    color: green; !* Couleur de l'icône, vous pouvez la changer selon vos besoins *!*/
  579.         /*    position: absolute;*/
  580.         /*    left: 0;*/
  581.         /*    top: 0;*/
  582.         /*}*/
  583.         .widget-content {
  584.             position: relative;
  585.         }
  586.         .breadcrumb-container {
  587.             font-size: 11px;
  588.             color: white;
  589.             position: absolute;
  590.             top: 0px; /* Ajustez la valeur selon votre besoin */
  591.             left: 10px; /* Ajustez la valeur selon votre besoin */
  592.             z-index: 100; /* Assurez-vous que cette valeur est plus élevée que celle de l'image */
  593.         }
  594.         .breadcrumb {
  595.             /*background-color: white;*/
  596.             padding: 10px 16px;
  597.             list-style: none;
  598.             display: flex;
  599.             align-items: center;
  600.             border-radius: 5px; /* Ajoutez des bordures arrondies si nécessaire */
  601.         }
  602.         .breadcrumb-item a {
  603.             color: white; /* Couleur du texte du lien */
  604.             text-decoration: none; /* Supprime le soulignement du lien */
  605.             cursor: pointer; /* Assure que le curseur devient une main */
  606.         }
  607.         .breadcrumb-item a:hover {
  608.             text-decoration: none; /* Soulignement au survol */
  609.         }
  610.         .breadcrumb-item.active {
  611.             color: white; /* Couleur du texte pour l'élément actif */
  612.             font-size: 12px;
  613.             text-decoration: underline;
  614.             text-decoration-color: blue; /* Couleur du soulignement */
  615.             text-decoration-thickness: 2px; /* Épaisseur du soulignement */
  616.             text-underline-offset: 4px; /* Espace entre le texte et le soulignement */
  617.         }
  618.         .breadcrumb-item.active a {
  619.             text-decoration: none; /* Supprime le soulignement pour l'élément actif */
  620.             cursor: default; /* Coursur de texte pour l'élément actif */
  621.         }
  622.         .blog-post-content ol {
  623.             margin: 0 0 0 20px !important;
  624.         }
  625.         .blog-post-content h2 {
  626.             font-weight: bold;
  627.             scroll-margin-top: 80px; /* Pour que le scroll auto s'arrête juste au début du h2 */
  628.         }
  629.         .blog-post-content h3 {
  630.             color: black !important;
  631.             font-size: 20px !important;
  632.             font-weight: bold;
  633.             display: inline-block; /* Assure que l'élément h3 ne prend que la largeur nécessaire */
  634.             text-decoration: underline; /* Soulignement du texte */
  635.             text-decoration-color: #2a41e8; /* Couleur du soulignement */
  636.             text-underline-position: under;
  637.         }
  638.         .closeButtonContainer {
  639.             display: flex;
  640.             justify-content: flex-end;
  641.         }
  642.         .scroll-block {
  643.             position: fixed;
  644.             bottom: 0; /* Initially hidden below the screen */
  645.             left: 5%;
  646.             width: 90%;
  647.             background-color: #333;
  648.             color: #fff;
  649.             padding: 12px 20px 41px 20px;
  650.             transition: bottom 0.3s ease; /* Smooth transition for hiding */
  651.             transform: translateY(100%); /* Le bloc est déplacé vers le bas de l'écran */
  652.             display: none;
  653.         }
  654.         .visible {
  655.             transform: translateY(0);
  656.         }
  657.         .hidden {
  658.             transform: translateY(100%);
  659.         }
  660.         .hidden_btn {
  661.             transform: translateY(100%) !important;
  662.         }
  663.         @media only screen and (max-width: 500px) {
  664.             #wrapper {
  665.                 width: -webkit-fill-available;
  666.             }
  667.             .sidebar-sticky {
  668.                 position: static !important;
  669.                 margin-bottom: 1rem;
  670.             }
  671.             .ez-toc-list li {
  672.                 list-style-type: none !important; /* Remove bullets from the list */
  673.                 padding-left: 9px !important; /* Remove padding from the list */
  674.             }
  675.             .mobile-device {
  676.                 display: block;
  677.             }
  678.             .large-device {
  679.                 display: none;
  680.             }
  681.             .scroll-block {
  682.                 display: block;
  683.                 border-radius: 20px;
  684.                 background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(https://www.abcportage.fr/wp-content/themes/abcportage/assets/build/img/img_cta_right_small.jpg);
  685.                 background-size: cover;
  686.                 color: white;
  687.                 z-index: 200 !important;
  688.                 flex-direction: column;
  689.                 margin-bottom: -12px;
  690.             }
  691.         }
  692.         .btn-mission-spec {
  693.             border-radius: 50px !important;
  694.             padding: 12px 24px !important;
  695.             font-size: 20px !important;
  696.             font-weight: 500 !important;
  697.             background-clip: padding-box;
  698.             background-color: rgb(33 99 139) !important;
  699.         }
  700.         .btn-mission-spec-flottant {
  701.             border-radius: 50px !important;
  702.             padding: 10px 24px !important;
  703.             font-size: 20px !important;
  704.             font-weight: 500 !important;
  705.             background-clip: padding-box;
  706.             background-color: #2a41e8 !important;
  707.         }
  708.         #breadcrumbs {
  709.             transform: translateY(-190%);
  710.             right: 1.2% !important;
  711.         }
  712.         #breadcrumbs ul {
  713.             display: flex;
  714.         }
  715.         .btn-mission-spec:hover {
  716.             background-color: #2a41e8 !important; /* Utilisation de RGBA avec une opacité de 1 (complètement opaque) */
  717.         }
  718.         .spec-breadcrumbs {
  719.             bottom: -5rem !important;
  720.             top: auto !important;
  721.         }
  722.         .end-list-crumbs::before {
  723.             display: none !important;
  724.         }
  725.         .blog-post-content ul {
  726.             list-style-type: none; /* Supprimer les puces par défaut */
  727.         }
  728.         .blog-post-content ul li::before {
  729.             content: "\2022"; /* Code Unicode pour un point (•) */
  730.             color: #2a41e8; /* Couleur bleue pour les puces */
  731.             display: inline-block;
  732.             width: 1em; /* Espacement entre la puce et le texte */
  733.             margin-left: -1em; /* Pour aligner la puce avec le texte */
  734.         }
  735.         .blog-post-content ol {
  736.             list-style-type: decimal; /* Style de numéro par défaut pour les listes ordonnées */
  737.         }
  738.         /* Styles pour les listes ordonnées */
  739.         .blog-post-content ol {
  740.             list-style-type: none; /* Supprimer les numéros par défaut */
  741.             margin: 0; /* Supprimer les marges */
  742.             padding: 0; /* Supprimer les paddings */
  743.         }
  744.         .blog-post-content ol::marker {
  745.             color: #2a41e8; /* Couleur bleue pour les numéros */
  746.         }
  747.         .blog-post-content ol > li {
  748.             counter-increment: my-counter;
  749.         }
  750.         .blog-post-content ol > li::before {
  751.             content: counter(my-counter) "."; /* Utiliser le compteur pour les listes ordonnées avec un point */
  752.             color: #2a41e8; /* Couleur bleue pour les numéros */
  753.             font-weight: bold; /* Pour rendre les numéros en gras */
  754.             margin-right: 0.5em; /* Espacement entre le numéro et le texte */
  755.         }
  756.         .blog-post-content ol > li > *:first-child {
  757.             display: contents; /* Appliquer display: contents; à la première balise enfant de chaque li */
  758.         }
  759.         .blog-post-content h2,
  760.         .blog-post-content h3 {
  761.             color: #2a41e8;
  762.         }
  763.         .widget-content.active:before, .widget-content:hover:before {
  764.             opacity: 0.8 !important;
  765.         }
  766.         @media (max-width: 980px) {
  767.             .spec {
  768.                 flex-basis: 100% !important;
  769.                 max-width: 100% !important;
  770.             }
  771.             .spec:last-child {
  772.                 margin-top: 16px !important; /* Ajoute une marge supérieure de 16px uniquement au dernier élément spécifique */
  773.             }
  774.             .spec-breadcrumbs {
  775.                 bottom: auto !important;
  776.                 top: 50% !important;
  777.             }
  778.             .article-right-flottant {
  779.                 max-width: 100% !important;
  780.                 margin: 0 !important;
  781.                 padding: 1rem 2rem !important;
  782.             }
  783.             .blog-post.single-post.spec {
  784.                 margin: 3rem 0rem !important;
  785.             }
  786.             #breadcrumbs {
  787.                 transform: translateY(-20%) translateX(-26px);
  788.             }
  789.             .blog-post.single-post .blog-post-thumbnail {
  790.                 width: 100%;
  791.                 height: 250px;
  792.             }
  793.         }
  794.         @media screen and (max-width: 500px) {
  795.             .container {
  796.                 padding: 0;
  797.                 overflow-x: hidden;
  798.             }
  799.             .blog-post-content h1 {
  800.                 font-size: 46px !important;
  801.             }
  802.             .blog-post-content {
  803.                 padding: 32px;
  804.             }
  805.             .blog-post-content ul {
  806.                 padding-inline-start: 20px;
  807.             }
  808.             .blog-post, .single-page-header .header-image {
  809.                 box-shadow: none !important;
  810.             }
  811.             #breadcrumbs {
  812.                 font-size: 12px !important;
  813.             }
  814.             .blog-post.single-post.spec {
  815.                 margin: 0 !important;
  816.             }
  817.             .blog-post-content {
  818.                 padding: 20px 2rem !important;
  819.             }
  820.         }
  821.     </style>
  822. {% endblock %}
  823. {% block body %}
  824.     <div class="container">
  825.         <div class="row">
  826.             <div class="col-md-12 margin-bottom-16 margin-top-16" style="padding: 0 32px;">
  827.                 <div class="widget-content active text-center" style="border-radius: 20px; position: relative;">
  828.                     <img src="{{ asset('uploads/img/6287a440d1176.jpg') }}" alt="" class="widget-image">
  829.                     <div class="overlay"></div>
  830.                     {% for blog in blogs %}
  831.                         <nav aria-label="breadcrumb" class="breadcrumb-container">
  832.                             <ol class="breadcrumb">
  833.                                 <li class="breadcrumb-item"><a href="{{ path('blog') }}">Blog</a></li>
  834.                                 &nbsp;>&nbsp;
  835.                                 <li class="breadcrumb-item active" aria-current="page">{{ blog.breadcrumb }}</li>
  836.                             </ol>
  837.                         </nav>
  838.                     {% endfor %}
  839.                     <div class="widget-text">
  840.                         <p style="font-size: 30px; line-height: 45px; color: white; font-weight: 600;">Offres d'emploi
  841.                             et missions freelance sans commission en France</p>
  842.                         <a href="{{ not is_granted('ROLE_ADMIN') and is_granted('ROLE_FREELANCE') and app.user.uniqueProfile.id == null ? '#complete-cv-dialog' : path('offre_search') }}">
  843.                             <span class="btn-mission-spec">Voir les offres</span>
  844.                         </a>
  845.                     </div>
  846.                 </div>
  847.             </div>
  848.             {#             <div class="col-md-12"> #}
  849.             {#                 {% for blog in blogs %} #}
  850.             {#                     <nav id="breadcrumbs" class="dark spec-breadcrumbs" #}
  851.             {#                          style="top: 0;right: 16px;bottom: -5rem;"> #}
  852.             {#                         <ul> #}
  853.             {#                             <li><a href="{{ path('blog') }}">Blog</a></li> #}
  854.             {#                             <li>{{ blog.breadcrumb }}</li> #}
  855.             {#                         </ul> #}
  856.             {#                     </nav> #}
  857.             {#                 {% endfor %} #}
  858.             {#             </div> #}
  859.         </div>
  860.         <div class="row d-flex flex-wrap margin-bottom-16">
  861.             <div class="blog-post single-post spec"
  862.                  style="border-radius: 20px; flex: 2; margin: 0 1rem; -webkit-box-flex: 2;max-width: calc(66.666% - 2rem);">
  863.                 <!-- Blog Post Content -->
  864.                 <div class="blog-post-content">
  865.                     {% for blog in blogs %}
  866.                         <h1 class="margin-bottom-10" style="line-height: 1.2;font-size: 50px">{{ blog.bigtitle }}</h1>
  867.                         <div class="blog-post-info-list margin-bottom-20">
  868.                             <span class="meta-date blog-post-info "
  869.                                   style="width: fit-content;font-size: 12px;padding: 1px 5px;"><svg
  870.                                     style="margin-right: 5px;vertical-align: sub;opacity: 0.3" width="13"
  871.                                     height="13"
  872.                                     xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path
  873.                                         d="M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H64C28.7 64 0 92.7 0 128v16 48V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H344V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H152V24zM48 192H400V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z"/></svg> <span> {% set trans_month_hash = {
  874.                                         "January": "Janvier",
  875.                                         "February": "Février",
  876.                                         "March": "Mars",
  877.                                         "April": "Avril",
  878.                                         "May": "Mai",
  879.                                         "June": "Juin",
  880.                                         "July": "Juillet",
  881.                                         "August": "Août",
  882.                                         "September": "Septembre",
  883.                                         "October": "Octobre",
  884.                                         "November": "Novembre",
  885.                                         "December": "Décembre"
  886.                                     } %}{% if blog.getUpdatedAt() is empty or blog.getUpdatedAt()==blog.getCreatedAt() %}Publiée le {{ blog.getCreatedAt()|date("d") }} {{ trans_month_hash[blog.getCreatedAt()|date("F")] }} {{ blog.getCreatedAt()|date("Y") }}{% else %}Mis à jour le {{ blog.getUpdatedAt()|date("d") }} {{ trans_month_hash[blog.getUpdatedAt()|date("F")] }} {{ blog.getUpdatedAt()|date("Y") }}{% endif %}</span></span>
  887.                             <span class="meta-views blog-post-info "
  888.                                   style="width: fit-content;font-size: 12px;padding: 1px 5px;"><svg
  889.                                     style="margin-right: 5px;vertical-align: sub;opacity: 0.3" width="13"
  890.                                     height="13"
  891.                                     xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path
  892.                                         d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/></svg><span>{{ blog.view }} vues</span></span>
  893.                             <span class="meta-rtime blog-post-info "
  894.                                   style="width: fit-content;font-size: 12px;padding: 1px 5px;"><svg
  895.                                     style="margin-right: 5px;vertical-align: sub;opacity: 0.3" width="13"
  896.                                     height="13"
  897.                                     xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path
  898.                                         d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg><span>{{ blog.rtTime }}min</span></span>
  899.                         </div>
  900.                         <div class="sidebar-sticky mobile-device" style="height: 260px;">
  901.                             <div id="sidebar-container" class="sidebar-content toc-wrapper">
  902.                                 <div class="toc-title-container">
  903.                                     <p class="toc-title">
  904.                                         Sommaire
  905.                                     </p>
  906.                                 </div>
  907.                                 <div id="toc-container" class="toc-content">
  908.                                     <div id="ez-toc-container"
  909.                                          class="ez-toc-v2_0_37 counter-flat ez-toc-counter ez-toc-grey ez-toc-container-direction">
  910.                                         <div class="ez-toc-title-container">
  911.                                                      <span class="ez-toc-title-toggle"><a
  912.                                                              class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle"
  913.                                                              style="display: none;"><span
  914.                                                                  style="display: flex;align-items: center;width: 35px;height: 30px;justify-content: center;"><svg
  915.                                                                      style="fill: #999;color:#999"
  916.                                                                      xmlns="http://www.w3.org/2000/svg"
  917.                                                                      class="list-377408" width="20px" height="20px"
  918.                                                                      viewBox="0 0 24 24"
  919.                                                                      fill="none"><path
  920.                                                                          d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z"
  921.                                                                          fill="currentColor"></path></svg><svg
  922.                                                                      style="fill: #999;color:#999"
  923.                                                                      class="arrow-unsorted-368013"
  924.                                                                      xmlns="http://www.w3.org/2000/svg" width="10px"
  925.                                                                      height="10px"
  926.                                                                      viewBox="0 0 24 24" version="1.2"
  927.                                                                      baseProfile="tiny"><path
  928.                                                                          d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"></path></svg></span></a></span>
  929.                                         </div>
  930.                                         <nav>
  931.                                             {% set h2_titles = blogs[0].content|extract_h2 %}
  932.                                             <ul class="ez-toc-list ez-toc-list-level-1"
  933.                                                 style="margin-bottom: 0 !important;    padding-left: 0 !important;">
  934.                                                 {% for title in h2_titles %}
  935.                                                      {% set anchor = title|slugify|lower %}
  936.                                                     <li class="ez-toc-page-1">
  937.                                                         <a onclick="applyStyle(this)" class="ez-toc-link"
  938.                                                            href="#{{ anchor }}"
  939.                                                            title="{{ title }}">
  940.                                                             <svg class="icon" style="fill: #2a41e8 ;margin-right: 5px"
  941.                                                                  width="16" height="16"
  942.                                                                  xmlns="http://www.w3.org/2000/svg"
  943.                                                                  viewBox="0 0 448 512">
  944.                                                                 <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
  945.                                                                 <path
  946.                                                                     d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/>
  947.                                                             </svg> {% if title|length > 30 %}
  948.                                                                 {{ title|slice(0, 30) }}...
  949.                                                             {% else %}
  950.                                                                 {{ title }}
  951.                                                             {% endif %}</a>
  952.                                                     </li>
  953.                                                 {% endfor %}
  954.                                             </ul>
  955.                                         </nav>
  956.                                     </div>
  957.                                 </div>
  958.                                 <div class="toc-footer">
  959.                                     <div class="social-section">
  960.                                         <a href="https://www.linkedin.com/sharing/share-offsite/?url=https://reassurez-moi.fr/guide/banque"
  961.                                            target="_blank">
  962.                                             <i class="fa-brands fa-linkedin-in" aria-hidden="true"></i>
  963.                                         </a>
  964.                                         <a href="https://twitter.com/share?url=https://reassurez-moi.fr/guide/banque"
  965.                                            target="_blank">
  966.                                             <i class="fa-brands fa-twitter" aria-hidden="true"></i>
  967.                                         </a>
  968.                                     </div>
  969.                                 </div>
  970.                             </div>
  971.                             <div id="fix-sidebar-content" class="mt-2"></div>
  972.                             <div id="sidebar-advertblock-container" class="mt-2"></div>
  973.                         </div>
  974.                         <!-- Blog Post Thumbnail -->
  975.                         <div class="blog-post-thumbnail">
  976.                             <div class="blog-post-thumbnail-inner">
  977.                                 <img
  978.                                     src="{{ asset( blog.blogimage ? 'uploads/img/'~blog.blogimage.path : 'images/blog-04.jpg') }}"
  979.                                     alt="{{ blog.blogimage ? blog.blogimage.name : '' }}">
  980.                             </div>
  981.                         </div>
  982.                         {% set blog_content_with_anchors = blog.content|add_h2_anchors %}
  983.                         <!-- Blog Post Content -->
  984.                         {{ blog_content_with_anchors | replace({'<li><p>': '<li>', '</p></li>': '</li>'})
  985.                         | replace({'https://www.freelance-dispo.fr': 'https://www.workdispo.com'})
  986.                         | raw }}
  987.                         <!-- Share Buttons -->
  988.                         {% include 'common/social_share.html.twig' %}
  989.                         <div class="task-tags d-flex col-md-12" style="gap: 2px;flex-wrap: wrap">
  990.                             {% if blog.getSousThematique() is not empty %}
  991.                                 {% for sous_thematique in blog.getSousThematique() %}
  992.                                     <a style="background-color: rgba(42, 65, 232, .07)"
  993.                                        href="{{ path('blog_show',{sousThematique:sous_thematique.getSlug()}) }}">
  994.                                         <span
  995.                                             style="color: #2a41e8 !important;font-size: 16px;">{{ sous_thematique.getName() }}</span>
  996.                                     </a>
  997.                                 {% endfor %}
  998.                             {% else %}
  999.                                 {% for thematique in blog.getThematique() %}
  1000.                                     <a style="background-color: rgba(42, 65, 232, .07)"
  1001.                                        href="{{ path('blog_show',{thematique:thematique.getSlug()}) }}">
  1002.                                         <span
  1003.                                             style="color: #2a41e8 !important;font-size: 16px;"> {{ thematique.getName() }}</span>
  1004.                                     </a>
  1005.                                 {% endfor %}
  1006.                             {% endif %}
  1007.                         </div>
  1008.                     {% endfor %}
  1009.                 </div>
  1010.             </div>
  1011.             <div class="article-right-flottant"
  1012.                  style="border-radius: 20px; flex: 1; margin: 0; -webkit-box-flex: 1;max-width: calc(33.333% - 2rem);padding:  0;position: relative;">
  1013.                 <div class="margin-bottom-4">
  1014.                     <script src="https://platform.linkedin.com/in.js"
  1015.                             type="text/javascript"> lang: fr_FR</script>
  1016.                     <script type="IN/FollowCompany" data-id="35595945"
  1017.                             data-counter="right"></script>
  1018.                 </div>
  1019.                 <div class="sidebar-sticky large-device" style="height: 260px;">
  1020.                     <div id="sidebar-container" class="sidebar-content toc-wrapper">
  1021.                         <div class="toc-title-container">
  1022.                             <p class="toc-title">
  1023.                                 Sommaire
  1024.                             </p>
  1025.                         </div>
  1026.                         <div id="toc-container" class="toc-content">
  1027.                             <div id="ez-toc-container"
  1028.                                  class="ez-toc-v2_0_37 counter-flat ez-toc-counter ez-toc-grey ez-toc-container-direction">
  1029.                                 <div class="ez-toc-title-container">
  1030.                                                      <span class="ez-toc-title-toggle"><a
  1031.                                                              class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle"
  1032.                                                              style="display: none;"><span
  1033.                                                                  style="display: flex;align-items: center;width: 35px;height: 30px;justify-content: center;"><svg
  1034.                                                                      style="fill: #999;color:#999"
  1035.                                                                      xmlns="http://www.w3.org/2000/svg"
  1036.                                                                      class="list-377408" width="20px" height="20px"
  1037.                                                                      viewBox="0 0 24 24"
  1038.                                                                      fill="none"><path
  1039.                                                                          d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z"
  1040.                                                                          fill="currentColor"></path></svg><svg
  1041.                                                                      style="fill: #999;color:#999"
  1042.                                                                      class="arrow-unsorted-368013"
  1043.                                                                      xmlns="http://www.w3.org/2000/svg" width="10px"
  1044.                                                                      height="10px"
  1045.                                                                      viewBox="0 0 24 24" version="1.2"
  1046.                                                                      baseProfile="tiny"><path
  1047.                                                                          d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"></path></svg></span></a></span>
  1048.                                 </div>
  1049.                                 <nav>
  1050.                                     {% set h2_titles = blogs[0].content|extract_h2 %}
  1051.                                     
  1052.                                     <ul class="ez-toc-list ez-toc-list-level-1"
  1053.                                         style="margin-bottom: 0 !important;    padding-left: 0 !important;">
  1054.                                         {% for title in h2_titles %}
  1055.                                              {% set anchor = title|slugify|lower %}
  1056.                                             
  1057.                                             <li class="ez-toc-page-1">
  1058.                                                 <a onclick="applyStyle(this)" class="ez-toc-link" href="#{{ anchor }}"
  1059.                                                    title="{{ title }}">
  1060.                                                     <svg class="icon" style="fill: #2a41e8 ;margin-right: 5px"
  1061.                                                          width="16" height="16"
  1062.                                                          xmlns="http://www.w3.org/2000/svg"
  1063.                                                          viewBox="0 0 448 512">
  1064.                                                         <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
  1065.                                                         <path
  1066.                                                             d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/>
  1067.                                                     </svg> {% if title|length > 30 %}
  1068.                                                         {{ title|slice(0, 30) }}...
  1069.                                                     {% else %}
  1070.                                                         {{ title }}
  1071.                                                     {% endif %}</a>
  1072.                                             </li>
  1073.                                         {% endfor %}
  1074.                                     </ul>
  1075.                                 </nav>
  1076.                             </div>
  1077.                         </div>
  1078.                         <div class="toc-footer">
  1079.                             <div class="social-section">
  1080.                                 <a href="https://www.linkedin.com/sharing/share-offsite/?url=https://reassurez-moi.fr/guide/banque"
  1081.                                    target="_blank">
  1082.                                     <i class="fa-brands fa-linkedin-in" aria-hidden="true"></i>
  1083.                                 </a>
  1084.                                 <a href="https://twitter.com/share?url=https://reassurez-moi.fr/guide/banque"
  1085.                                    target="_blank">
  1086.                                     <i class="fa-brands fa-twitter" aria-hidden="true"></i>
  1087.                                 </a>
  1088.                             </div>
  1089.                         </div>
  1090.                     </div>
  1091.                     <div id="fix-sidebar-content" class="mt-2"></div>
  1092.                     <div id="sidebar-advertblock-container" class="mt-2"></div>
  1093.                 </div>
  1094.                 <div class="blog-post single-post sticky-bottom"
  1095.                      style="margin-bottom: 0;display: none; flex-direction: column; padding: 12px; border-radius: 20px; position: sticky; top: 53%; background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(https://www.abcportage.fr/wp-content/themes/abcportage/assets/build/img/img_cta_right_small.jpg); background-size: cover; color: white;">
  1096.                     {# <div class="blog-post single-post" style=";display: flex;flex-direction: column;padding: 12px;border-radius: 20px;position: sticky;top: 50%;background-image: url('{{ absolute_url(asset('images/anthony-riera-kylWNDQFd5A-unsplash.jpg')) }}');background-size:cover;color:white;"> #}
  1097.                     <h3 style="text-align: center;margin: 1rem;color:white;font-size:23px;">Missions et emplois
  1098.                         disponibles</h3>
  1099.                     <div class="d-flex align-items-center" style="padding-left: 24px;margin: 5px 0;">
  1100.                         <svg style="fill: #2a41e8 ;margin-right: 5px" width="16" height="16"
  1101.                              xmlns="http://www.w3.org/2000/svg"
  1102.                              viewBox="0 0 448 512">
  1103.                             <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
  1104.                             <path
  1105.                                 d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/>
  1106.                         </svg>
  1107.                         </span>
  1108.                         <span>Emplois et missions freelance</span>
  1109.                     </div>
  1110.                     <div class="d-flex align-items-center" style="padding-left: 24px;margin: 5px 0;">
  1111.                         <svg style="fill: #2a41e8 ;margin-right: 5px" width="16" height="16"
  1112.                              xmlns="http://www.w3.org/2000/svg"
  1113.                              viewBox="0 0 448 512">
  1114.                             <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
  1115.                             <path
  1116.                                 d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/>
  1117.                         </svg>
  1118.                         </span>
  1119.                         <span>Emplois et missions avec du télétravail</span>
  1120.                     </div>
  1121.                     <div class="d-flex align-items-center" style="padding-left: 24px;margin: 5px 0;">
  1122.                         <svg style="fill: #2a41e8 ;margin-right: 5px" width="16" height="16"
  1123.                              xmlns="http://www.w3.org/2000/svg"
  1124.                              viewBox="0 0 448 512">
  1125.                             <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
  1126.                             <path
  1127.                                 d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/>
  1128.                         </svg>
  1129.                         </span>
  1130.                         <span>Des offres sur toute la France</span>
  1131.                     </div>
  1132.                     <span style="margin: 1rem auto"><a
  1133.                             href="{{ not is_granted('ROLE_ADMIN') and is_granted('ROLE_FREELANCE') and app.user.uniqueProfile.id == null ? '#complete-cv-dialog' : path('offre_search') }}"><span
  1134.                                 class="btn-mission-spec-flottant"
  1135.                                 style="color: #FFFFFF">Voir les offres</span></a></span>
  1136.                 </div>
  1137.             </div>
  1138.         </div>
  1139.         <!-- Scroll detection block -->
  1140.         <div id="scrollBlock" class="scroll-block hidden"
  1141.             {# style="padding: 12px;display: flex;flex-direction: column;margin-bottom: -12px;" #}
  1142.         >
  1143.             <div style="text-align:center;">
  1144.                 <div class="closeButtonContainer">
  1145.                     <button onclick="closeScrollBlock()" id="closeButton">&times;</button>
  1146.                 </div>
  1147.                 <p style="color:white;font-size:20px;font-weight:700;margin-bottom: 32px;">Missions freelance
  1148.                     disponibles</p>
  1149.                 <span style="margin: 2rem auto">
  1150.                     <a
  1151.                         href="{{ not is_granted('ROLE_ADMIN') and is_granted('ROLE_FREELANCE')
  1152.                         and app.user.uniqueProfile.id == null ? '#complete-cv-dialog' : path('mission_search_default') }}"
  1153.                     >
  1154.                         <span class="btn-mission-spec-flottant" style="color: #FFFFFF">Voir les missions</span>
  1155.                     </a>
  1156.                 </span>
  1157.             </div>
  1158.         </div>
  1159.     </div>
  1160. {% endblock %}
  1161. {% block javascripts %}
  1162.     <script>
  1163.         document.addEventListener("DOMContentLoaded", function () {
  1164.             // JavaScript to handle scroll event
  1165.             window.addEventListener('scroll', function () {
  1166.                 // Get the scroll position
  1167.                 var scrollPosition = window.scrollY;
  1168.                 // Define the threshold to show the block
  1169.                 var threshold = 300; // Adjust as needed
  1170.                 // Get the scroll block element
  1171.                 var scrollBlock = document.getElementById('scrollBlock');
  1172.                 // Show or hide the block based on scroll position
  1173.                 if (scrollPosition > threshold) {
  1174.                     scrollBlock.classList.remove('hidden');
  1175.                     scrollBlock.classList.add('visible');
  1176.                 } else {
  1177.                     scrollBlock.classList.remove('visible');
  1178.                     scrollBlock.classList.add('hidden');
  1179.                 }
  1180.             });
  1181.         });
  1182.         // Fonction pour fermer le bloc de détection du défilement
  1183.         function closeScrollBlock() {
  1184.             console.log("Fermeture du bloc de détection du défilement");
  1185.             var scrollBlock = document.getElementById('scrollBlock');
  1186.             scrollBlock.classList.remove('visible');
  1187.             scrollBlock.classList.add('hidden_btn');
  1188.         }
  1189.         document.addEventListener('scroll', function () {
  1190.             const container = document.querySelector('.article-right-flottant');
  1191.             const stickyBottom = document.querySelector('.sticky-bottom');
  1192.             const containerRect = container.getBoundingClientRect();
  1193.             const windowHeight = window.innerHeight;
  1194.             const contentHeight = containerRect.height;
  1195.             // Assuming scrollPosition is the current vertical scroll position
  1196.             const scrollPosition = window.scrollY;
  1197.             // Fixed threshold of 250 pixels
  1198.             const fixedThreshold = 5;
  1199.             // Calculate how close we are to the bottom of the content
  1200.             const distanceToBottom = contentHeight - (scrollPosition + windowHeight);
  1201.             console.log(Math.abs(distanceToBottom))
  1202.             if (distanceToBottom < 0) {
  1203.                 if (Math.abs(distanceToBottom) >= 357 || window.scrollY <= 199) {
  1204.                     stickyBottom.style.display = 'none';
  1205.                 } else {
  1206.                     stickyBottom.style.display = 'flex';
  1207.                 }
  1208.             } else {
  1209.                 // Check if we are within 250 pixels from the bottom
  1210.                 if (distanceToBottom <= fixedThreshold || window.scrollY <= 199) {
  1211.                     stickyBottom.style.display = 'none';
  1212.                 } else {
  1213.                     stickyBottom.style.display = 'flex';
  1214.                 }
  1215.             }
  1216.         });
  1217.         function applyStyle(element) {
  1218.             // Supprimer la classe 'active' de tous les liens
  1219.             const links = document.querySelectorAll('.large-device .ez-toc-link');
  1220.             links.forEach(link => link.classList.remove('active'));
  1221.             if (window.innerWidth <= 500) {
  1222.                 const links_mobile = document.querySelectorAll('.mobile-device .ez-toc-link');
  1223.                 links_mobile.forEach(link => link.classList.remove('active'));
  1224.             }
  1225.             // Ajouter la classe 'active' au lien cliqué
  1226.             element.classList.add('active');
  1227.             // Appliquez le style à l'élément <a> lorsque le lien est cliqué
  1228.             // element.style.color = 'grey';
  1229.             // element.style.opacity = '0.8';
  1230.             element.classList.add('clicked-link');
  1231.         }
  1232.         // Sélectionnez tous les liens de votre sommaire
  1233.         const links = document.querySelectorAll('.large-device .ez-toc-list a');
  1234.         const sections = Array.from(links).map(link => {
  1235.             const sectionId = link.getAttribute('href').substring(1);
  1236.             return document.getElementById(sectionId);
  1237.         });
  1238.         let currentActiveSection = null;
  1239.         let isScrollingToLink = false;
  1240.         function scrollToElement(element, container) {
  1241.             if (!isElementInViewport(element, container) && !isScrollingToLink) {
  1242.                 isScrollingToLink = true;
  1243.                 document.body.style.overflow = 'hidden';
  1244.                 element.scrollIntoView({ behavior: 'smooth', block: 'start' });
  1245.                 setTimeout(() => {
  1246.                     document.body.style.overflow = '';
  1247.                     isScrollingToLink = false;
  1248.                 }, 100);
  1249.             }
  1250.         }
  1251.         function isElementInViewport(element, container) {
  1252.             var elementRect = element.getBoundingClientRect();
  1253.             var containerRect = container.getBoundingClientRect();
  1254.             return (
  1255.                 elementRect.top >= containerRect.top &&
  1256.                 elementRect.left >= containerRect.left &&
  1257.                 elementRect.bottom <= containerRect.bottom &&
  1258.                 elementRect.right <= containerRect.right
  1259.             );
  1260.         }
  1261.         function updateActiveLink() {
  1262.             if (isScrollingToLink) return;
  1263.             const scrollPosition = window.scrollY || window.pageYOffset;
  1264.             let newActiveSection = null;
  1265.             sections.some(section => {
  1266.                 const sectionTop = section.offsetTop;
  1267.                 const sectionHeight = section.offsetHeight;
  1268.                 if (scrollPosition >= sectionTop && scrollPosition < sectionTop + sectionHeight) {
  1269.                     newActiveSection = section;
  1270.                     return true;
  1271.                 }
  1272.             });
  1273.             if (newActiveSection && newActiveSection !== currentActiveSection) {
  1274.                 currentActiveSection = newActiveSection;
  1275.                 links.forEach(link => {
  1276.                     const sectionId = link.getAttribute('href').substring(1);
  1277.                     const section = document.getElementById(sectionId);
  1278.                     const sommaire = document.querySelector('.large-device .ez-toc-list');
  1279.                     if (section === currentActiveSection) {
  1280.                         link.classList.add('active');
  1281.                         scrollToElement(link, sommaire);
  1282.                     } else {
  1283.                         link.classList.remove('active');
  1284.                     }
  1285.                 });
  1286.             }
  1287.         }
  1288.         window.addEventListener('scroll', updateActiveLink);
  1289.         document.addEventListener('DOMContentLoaded', () => {
  1290.             const links = document.querySelectorAll('.large-device .ez-toc-link');
  1291.             if (links.length > 0) {
  1292.                 links[0].classList.add('active');
  1293.             }
  1294.             if (window.innerWidth <= 500) {
  1295.                 const links_mobile = document.querySelectorAll('.mobile-device .ez-toc-link');
  1296.                 if (links_mobile.length > 0) {
  1297.                     links_mobile[0].classList.add('active');
  1298.                 }
  1299.             }
  1300.         });
  1301.         // window.addEventListener('scroll', () => {
  1302.         //     const stickyBottom = document.querySelector('.sticky-bottom');
  1303.         //     // console.log(window.scrollY); // ou window.pageYOffset
  1304.         //
  1305.         // });
  1306.     </script>
  1307. {% endblock %}