{"id":7387,"date":"2025-08-03T13:31:28","date_gmt":"2025-08-03T10:31:28","guid":{"rendered":"https:\/\/wise-junior.com\/?page_id=7387"},"modified":"2025-08-06T19:00:37","modified_gmt":"2025-08-06T16:00:37","slug":"cources-section","status":"publish","type":"page","link":"https:\/\/wise-junior.com\/ar\/cources-section\/","title":{"rendered":"Cources section"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7387\" class=\"elementor elementor-7387\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6aae442 e-flex e-con-boxed e-con e-parent\" data-id=\"6aae442\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5d11fd7 elementor-widget elementor-widget-html\" data-id=\"5d11fd7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"en\">\r\n<head>\r\n  <meta charset=\"utf-8\" \/>\r\n  <title>Python Courses (embedded)<\/title>\r\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\r\n  <style>\r\n    body {\r\n      font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\r\n      margin: 0;\r\n      padding: 0;\r\n      background: #f9f9f9;\r\n    }\r\n    main {\r\n      max-width: 1200px;\r\n      margin: 0 auto;\r\n      padding: 1rem;\r\n    }\r\n    #course-list-container {\r\n      min-height: 200px;\r\n      margin-top: 1rem;\r\n    }\r\n    .pagination {\r\n      margin-top: 1rem;\r\n      display: flex;\r\n      gap: 0.5rem;\r\n      align-items: center;\r\n      flex-wrap: wrap;\r\n    }\r\n    .pagination button {\r\n      padding: 0.4rem 0.8rem;\r\n      border: 1px solid #888;\r\n      background: white;\r\n      cursor: pointer;\r\n      border-radius: 4px;\r\n    }\r\n    .pagination button[disabled] {\r\n      opacity: 0.5;\r\n      cursor: not-allowed;\r\n    }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n  <main>\r\n    <div id=\"course-list-container\" aria-live=\"polite\">Loading courses...<\/div>\r\n\r\n    <div class=\"pagination\" aria-label=\"Course pagination\">\r\n      <button id=\"prev-page\" disabled aria-label=\"Previous page\">&larr; Previous<\/button>\r\n      <span>Page <span id=\"current-page\">1<\/span><\/span>\r\n      <button id=\"next-page\" aria-label=\"Next page\">Next &rarr;<\/button>\r\n    <\/div>\r\n  <\/main>\r\n\r\n  <script>\r\n    let currentPage = 1;\r\n    const perPage = 12;\r\n    let inFlight = false;\r\n    const container = document.getElementById('course-list-container');\r\n    const prevBtn = document.getElementById('prev-page');\r\n    const nextBtn = document.getElementById('next-page');\r\n    const currentPageEl = document.getElementById('current-page');\r\n\r\n    function buildUrl(page) {\r\n      const params = new URLSearchParams({\r\n        action: 'tutor_course_filter_ajax',\r\n        column_per_row: '3',\r\n        course_filter: 'true',\r\n        course_per_page: perPage.toString(),\r\n        current_page: page.toString(),\r\n        keyword: '',\r\n        loop_content_only: 'false',\r\n        show_pagination: 'false'\r\n      });\r\n      return `https:\/\/wise-junior.com\/en\/course-category\/python\/?${params.toString()}`;\r\n    }\r\n\r\n    function cleanInjected(node) {\r\n      const unwantedSelectors = [\r\n        'header',\r\n        'footer',\r\n        '[class*=\"footer\"]',\r\n        '[id*=\"footer\"]',\r\n        '[class*=\"header\"]',\r\n        '.site-header',\r\n        '.site-footer',\r\n        '.site-info',\r\n        '.tutor-global-footer',\r\n        '.tutor-course-footer',\r\n        '.tutor-pagination',\r\n        '.clear-all-filters' \/\/ Remove \"Clear All Filters\"\r\n      ];\r\n      node.querySelectorAll(unwantedSelectors.join(',')).forEach(el => el.remove());\r\n    }\r\n\r\n    function setLinksToOpenInNewTab() {\r\n      const courseLinks = container.querySelectorAll('a');\r\n      courseLinks.forEach(link => {\r\n        link.setAttribute('target', '_blank');\r\n        link.setAttribute('rel', 'noopener noreferrer');\r\n      });\r\n    }\r\n\r\n    function removeClearAllFiltersButton() {\r\n      const btn = container.querySelector('a[action-tutor-clear-filter]');\r\n      if (btn) btn.remove();\r\n    }\r\n\r\n    async function loadCourses(page) {\r\n      if (inFlight) return;\r\n      inFlight = true;\r\n      try {\r\n        const url = buildUrl(page);\r\n        const resp = await fetch(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' }, credentials: 'omit' });\r\n        if (!resp.ok) throw new Error('HTTP ' + resp.status);\r\n\r\n        const html = await resp.text();\r\n        const parser = new DOMParser();\r\n        const doc = parser.parseFromString(html, 'text\/html');\r\n        const courseList = doc.querySelector('.tutor-course-wrapper, .tutor-course-loop, .tutor-course-grid') || doc.body;\r\n\r\n        container.innerHTML = '';\r\n        Array.from(courseList.childNodes).forEach(node => container.appendChild(node.cloneNode(true)));\r\n\r\n        cleanInjected(container);\r\n        setLinksToOpenInNewTab();\r\n        removeClearAllFiltersButton();  \/\/ Remove the Clear All Filters button here\r\n\r\n        currentPage = page;\r\n        currentPageEl.textContent = currentPage;\r\n        prevBtn.disabled = currentPage <= 1;\r\n      } catch (e) {\r\n        console.error('Load error', e);\r\n        container.textContent = 'Failed to load course content.';\r\n      } finally {\r\n        inFlight = false;\r\n      }\r\n    }\r\n\r\n    prevBtn.addEventListener('click', () => {\r\n      if (currentPage > 1) loadCourses(currentPage - 1);\r\n    });\r\n    nextBtn.addEventListener('click', () => {\r\n      loadCourses(currentPage + 1);\r\n    });\r\n\r\n    \/\/ Remove unwanted items & Clear All Filters button after any DOM changes inside container\r\n    const observer = new MutationObserver(() => {\r\n      cleanInjected(container);\r\n      removeClearAllFiltersButton();  \/\/ Also remove button on mutations\r\n    });\r\n    observer.observe(container, { childList: true, subtree: true });\r\n\r\n    \/\/ Handle Clear Filters click to redirect without reload\r\n    container.addEventListener('click', function(e) {\r\n      const target = e.target.closest('#clear-filters, [data-clear-filters]');\r\n      if (target) {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n\r\n        \/\/ Optional: clear input fields visually\r\n        container.querySelectorAll('input[type=\"search\"], input[type=\"text\"], select').forEach(el => {\r\n          if (el.tagName === 'SELECT') el.selectedIndex = 0;\r\n          else el.value = '';\r\n        });\r\n\r\n        \/\/ Redirect to section without reloading full page\r\n        window.location.href = \"https:\/\/wise-junior.com\/en\/cources-section\/#\";\r\n      }\r\n    });\r\n\r\n    \/\/ Initial load\r\n    loadCourses(1);\r\n  <\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Python Courses (embedded) Loading courses&#8230; &larr; Previous Page 1 Next &rarr;<\/p>","protected":false},"author":24,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"class_list":["post-7387","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/pages\/7387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/comments?post=7387"}],"version-history":[{"count":83,"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/pages\/7387\/revisions"}],"predecessor-version":[{"id":7911,"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/pages\/7387\/revisions\/7911"}],"wp:attachment":[{"href":"https:\/\/wise-junior.com\/ar\/wp-json\/wp\/v2\/media?parent=7387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}