{"id":41,"date":"2025-02-20T15:07:26","date_gmt":"2025-02-20T07:07:26","guid":{"rendered":"https:\/\/web.edcity.hk\/?page_id=41"},"modified":"2026-02-25T16:08:24","modified_gmt":"2026-02-25T08:08:24","slug":"projects","status":"publish","type":"page","link":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/","title":{"rendered":"Projects"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"41\" class=\"elementor elementor-41\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f7c20cd e-con-full elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"f7c20cd\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ba71afb elementor-widget elementor-widget-html\" data-id=\"ba71afb\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/js\/bootstrap.bundle.min.js\"><\/script>\r\n\r\n<style>\r\n  :root {\r\n    --bs-body-font-size: 18px;\r\n  }\r\n\r\n  a {\r\n    text-decoration: none;\r\n  }\r\n<\/style>\r\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c1bdb2 elementor-widget elementor-widget-html\" data-id=\"9c1bdb2\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  body {\r\n    min-width: 375px;\r\n    padding: 0 !important;\r\n  }\r\n\r\n  #post-list-container {\r\n    grid-template-columns: repeat(3, 1fr);\r\n  }\r\n\r\n  #post-list-container>#loading-image {\r\n    position: absolute;\r\n    left: 50%;\r\n    bottom: -20px;\r\n    transform: translateX(-50%);\r\n\r\n    border: 4px solid #f3f3f3;\r\n    border-radius: 50%;\r\n    border-top: 4px solid #3498db;\r\n    width: 2em;\r\n    height: 2em;\r\n    -webkit-animation: spin 2s linear infinite;\r\n    \/* Safari *\/\r\n    animation: spin 2s linear infinite;\r\n  }\r\n\r\n  article.post-container {\r\n    box-shadow: 0px 4px 4px 0px #00000040;\r\n  }\r\n\r\n  article.post-container > div > div.overflow-hidden {\r\n    border-radius: 12px 12px 0 0;\r\n  }\r\n\r\n  article.post-container a>h3,\r\n  article.post-container div.grantee-name {\r\n    display: -webkit-box;\r\n    -webkit-line-clamp: 2;\r\n    line-clamp: 2;\r\n    -webkit-box-orient: vertical;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    overflow-wrap: anywhere;\r\n\r\n    height: 3em;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  article.post-container a>h3:hover {\r\n    color: #305AB4 !important;\r\n  }\r\n\r\n  article.post-container a.image {\r\n    overflow: hidden;\r\n  }\r\n\r\n  article.post-container a.image>img {\r\n    aspect-ratio: 16 \/ 9;\r\n    object-fit: cover;\r\n    transition: 0.6s ease;\r\n    border-radius: 12px 12px 0 0;\r\n  }\r\n\r\n  article.post-container a.image>img:hover {\r\n    transform: scale(1.2);\r\n  }\r\n\r\n  \/* Safari *\/\r\n  @-webkit-keyframes spin {\r\n    0% {\r\n      -webkit-transform: rotate(0deg);\r\n    }\r\n\r\n    100% {\r\n      -webkit-transform: rotate(360deg);\r\n    }\r\n  }\r\n\r\n  @keyframes spin {\r\n    0% {\r\n      transform: rotate(0deg);\r\n    }\r\n\r\n    100% {\r\n      transform: rotate(360deg);\r\n    }\r\n  }\r\n\r\n  @media (max-width: 1024px) {\r\n    #post-list-container {\r\n      grid-template-columns: repeat(2, 1fr);\r\n    }\r\n\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    #post-list-container {\r\n      grid-template-columns: repeat(1, 1fr);\r\n    }\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7484817 e-con-full e-flex e-con e-parent\" data-id=\"7484817\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-db638c5 elementor-widget__width-inherit elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"db638c5\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1920\" height=\"520\" src=\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg\" class=\"attachment-full size-full wp-image-4356\" alt=\"\" srcset=\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg 1920w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/Projects-1920x520-2-300x81.jpg 300w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/Projects-1920x520-2-1024x277.jpg 1024w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/Projects-1920x520-2-150x41.jpg 150w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/Projects-1920x520-2-768x208.jpg 768w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/Projects-1920x520-2-1536x416.jpg 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-328b8ee elementor-widget__width-inherit elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-image\" data-id=\"328b8ee\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"390\" height=\"440\" src=\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/mobile-Projects-390x440-1.jpg\" class=\"attachment-large size-large wp-image-4360\" alt=\"\" srcset=\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/mobile-Projects-390x440-1.jpg 390w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/mobile-Projects-390x440-1-266x300.jpg 266w, https:\/\/web.edcity.hk\/wp-content\/uploads\/2025\/04\/mobile-Projects-390x440-1-133x150.jpg 133w\" sizes=\"(max-width: 390px) 100vw, 390px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-380e996 e-flex e-con-boxed e-con e-parent\" data-id=\"380e996\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eaef595 elementor-widget elementor-widget-heading\" data-id=\"eaef595\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Projects<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-840709e elementor-widget elementor-widget-heading\" data-id=\"840709e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Projects Filter<\/h3>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5cc92ae e-con-full e-flex e-con e-child\" data-id=\"5cc92ae\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-91f8fdb elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"91f8fdb\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t<div id='primary-filters-container' class='d-flex flex-wrap gap-3 h-100'><div class='dropdown'>\n      <button type='button' class='btn dropdown-toggle fs-5 fs-lg-2 pe-5 w-100 h-100' style='background: none;' data-bs-toggle='dropdown' aria-expanded='false' data-bs-auto-close='outside'>\n        Learning Category\n      <\/button>\n      <div class='dropdown-menu text-nowrap p-3 fs-5'>\n        <div class='form-check'>\n      <input class='form-check-input select-all' type='checkbox' id='select-all-subject_card_display' checked>\n      <label class='form-check-label user-select-none' for='select-all-subject_card_display'>All<\/label>\n    <\/div>\n        <div class='form-check'>\n        <input class='form-check-input option-subject_card_display' type='checkbox' value='lang' id='filter-subject_card_display-lang' checked>\n        <label class='form-check-label user-select-none' for='filter-subject_card_display-lang'>Language Education<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-subject_card_display' type='checkbox' value='steam' id='filter-subject_card_display-steam' checked>\n        <label class='form-check-label user-select-none' for='filter-subject_card_display-steam'>STEAM<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-subject_card_display' type='checkbox' value='humanities' id='filter-subject_card_display-humanities' checked>\n        <label class='form-check-label user-select-none' for='filter-subject_card_display-humanities'>Humanities Education<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-subject_card_display' type='checkbox' value='elearning' id='filter-subject_card_display-elearning' checked>\n        <label class='form-check-label user-select-none' for='filter-subject_card_display-elearning'>e-Learning Platform \/ Cross-disciplinary Learning<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-subject_card_display' type='checkbox' value='teacher_training' id='filter-subject_card_display-teacher_training' checked>\n        <label class='form-check-label user-select-none' for='filter-subject_card_display-teacher_training'>Teachers' Training \/ e-Learning Design and Analytics<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-subject_card_display' type='checkbox' value='sen' id='filter-subject_card_display-sen' checked>\n        <label class='form-check-label user-select-none' for='filter-subject_card_display-sen'>Special Educational Needs<\/label>\n      <\/div>\n      <\/div>\n    <\/div>\n<div class='dropdown'>\n      <button type='button' class='btn dropdown-toggle fs-5 fs-lg-2 pe-5 w-100 h-100' style='background: none;' data-bs-toggle='dropdown' aria-expanded='false' data-bs-auto-close='outside'>\n        Target Users\n      <\/button>\n      <div class='dropdown-menu text-nowrap p-3 fs-5'>\n        <div class='form-check'>\n      <input class='form-check-input select-all' type='checkbox' id='select-all-beneficiary' checked>\n      <label class='form-check-label user-select-none' for='select-all-beneficiary'>All<\/label>\n    <\/div>\n        <div class='form-check'>\n        <input class='form-check-input option-beneficiary' type='checkbox' value='primary' id='filter-beneficiary-primary' checked>\n        <label class='form-check-label user-select-none' for='filter-beneficiary-primary'>Primary Schools<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-beneficiary' type='checkbox' value='secondary' id='filter-beneficiary-secondary' checked>\n        <label class='form-check-label user-select-none' for='filter-beneficiary-secondary'>Secondary Schools<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-beneficiary' type='checkbox' value='special' id='filter-beneficiary-special' checked>\n        <label class='form-check-label user-select-none' for='filter-beneficiary-special'>Special Schools<\/label>\n      <\/div>\n      <\/div>\n    <\/div>\n<div class='dropdown'>\n      <button type='button' class='btn dropdown-toggle fs-5 fs-lg-2 pe-5 w-100 h-100' style='background: none;' data-bs-toggle='dropdown' aria-expanded='false' data-bs-auto-close='outside'>\n        Launching Status\n      <\/button>\n      <div class='dropdown-menu text-nowrap p-3 fs-5'>\n        <div class='form-check'>\n      <input class='form-check-input select-all' type='checkbox' id='select-all-available' checked>\n      <label class='form-check-label user-select-none' for='select-all-available'>All<\/label>\n    <\/div>\n        <div class='form-check'>\n        <input class='form-check-input option-available' type='checkbox' value='yes' id='filter-available-yes' checked>\n        <label class='form-check-label user-select-none' for='filter-available-yes'>Launched<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-available' type='checkbox' value='no' id='filter-available-no' checked>\n        <label class='form-check-label user-select-none' for='filter-available-no'>Launching Soon<\/label>\n      <\/div>\n      <\/div>\n    <\/div>\n<div class='dropdown'>\n      <button type='button' class='btn dropdown-toggle fs-5 fs-lg-2 pe-5 w-100 h-100' style='background: none;' data-bs-toggle='dropdown' aria-expanded='false' data-bs-auto-close='outside'>\n        Available for Free Trial\n      <\/button>\n      <div class='dropdown-menu text-nowrap p-3 fs-5'>\n        <div class='form-check'>\n      <input class='form-check-input select-all' type='checkbox' id='select-all-offer_free_trial' checked>\n      <label class='form-check-label user-select-none' for='select-all-offer_free_trial'>All<\/label>\n    <\/div>\n        <div class='form-check'>\n        <input class='form-check-input option-offer_free_trial' type='checkbox' value='yes' id='filter-offer_free_trial-yes' checked>\n        <label class='form-check-label user-select-none' for='filter-offer_free_trial-yes'>Yes<\/label>\n      <\/div><div class='form-check'>\n        <input class='form-check-input option-offer_free_trial' type='checkbox' value='no' id='filter-offer_free_trial-no' checked>\n        <label class='form-check-label user-select-none' for='filter-offer_free_trial-no'>No<\/label>\n      <\/div>\n      <\/div>\n    <\/div><\/div><script>var originalParams = \"{\\\"subject_card_display\\\":[\\\"lang\\\",\\\"steam\\\",\\\"humanities\\\",\\\"elearning\\\",\\\"teacher_training\\\",\\\"sen\\\"],\\\"beneficiary\\\":[\\\"primary\\\",\\\"secondary\\\",\\\"special\\\"],\\\"available\\\":[\\\"yes\\\",\\\"no\\\"],\\\"offer_free_trial\\\":[\\\"yes\\\",\\\"no\\\"]}\"<\/script>\n  <style>\n    #primary-filters-container { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }\n    .dropdown>button.btn { min-width: 160px; border: 2px solid #305AB4; color: #305AB4; }\n    button.dropdown-toggle::after {\n      border: none;\n      background-image: url('https:\/\/www.edcity.hk\/home\/wp-content\/uploads\/2025\/01\/ereap-dropdown-icon.png');\n      background-size: contain;\n      background-repeat: no-repeat;\n      width: 1em; height: 1em; margin-left: auto; position: absolute; right: 0.6em; top: 50%; transform: translateY(-50%);\n    }\n    .dropdown-menu { min-width: 100%; }\n    .dropdown-menu>div.form-check>* { cursor: pointer; }\n    .dropdown-menu>div.form-check>input.form-check-input { margin-top: 0.4em; }\n    @media (min-width: 767px) and (max-width: 991px) {\n      .dropdown>button.btn { min-width: 140px; }\n      button.dropdown-toggle::after { right: 0.5em; }\n    }\n  <\/style>\t\t<div class=\"elementor-shortcode\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97e85b6 elementor-align-justify elementor-widget__width-initial elementor-widget elementor-widget-button\" data-id=\"97e85b6\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\" id=\"filters-confirm\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">OK<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b223d2 elementor-align-justify elementor-widget__width-initial elementor-widget elementor-widget-button\" data-id=\"3b223d2\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\" id=\"filters-reset\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Reset Filters<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7b8380 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"c7b8380\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fbe249c elementor-widget elementor-widget-html\" data-id=\"fbe249c\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"post-list-container\" class=\"d-grid gap-4 gap-xl-5\">\r\n  <div id=\"loading-image\" style=\"display:none\"><\/div>\r\n<\/div>\r\n\r\n<script>\r\n  const dict = {\r\n    en: {\r\n      'no-post-message': 'No Event to Display.',\r\n      'view-more': 'View More',\r\n      'launched': 'Launched',\r\n      'launching-soon': 'Launching Soon',\r\n      'free-trial': 'Available for Free Trial Now'\r\n    },\r\n    'zh-hant': {\r\n      'no-post-message': '\u627e\u4e0d\u5230\u7522\u54c1\uff01',\r\n      'view-more': '\u67e5\u770b\u66f4\u591a',\r\n      'launched': '\u5df2\u7d93\u63a8\u51fa',\r\n      'launching-soon': '\u7a0d\u5f8c\u63a8\u51fa',\r\n      'free-trial': '\u73fe\u63a5\u53d7\u514d\u8cbb\u8a66\u7528'\r\n    },\r\n    'zh-hans': {\r\n      'no-post-message': '\u627e\u4e0d\u5230\u7522\u54c1\uff01',\r\n      'view-more': '\u67e5\u770b\u66f4\u591a',\r\n      'launched': '\u5df2\u7ecf\u63a8\u51fa',\r\n      'launching-soon': '\u7a0d\u540e\u63a8\u51fa',\r\n      'free-trial': '\u73b0\u63a5\u53d7\u514d\u8d39\u8bd5\u7528'\r\n    }\r\n  }\r\n\r\n  const tags = [\r\n    { key: 'beneficiary', color: '#59A0DE', icon: 'fa-solid fa-user-group' },\r\n    { key: 'subject_card_display', color: '#85B9E7', icon: 'fa-solid fa-book-open' }\r\n  ]\r\n\r\n  $(async function () {\r\n    const lang = ['zh-hant', 'en', 'zh-hans'][topbar2013.lang]\r\n    const attrs = ['subject_card_display', 'beneficiary', 'available', 'offer_free_trial']\r\n    let params = {}\r\n    let data = []\r\n\r\n    \/\/ Fetch once\r\n    $('#loading-image').show()\r\n    const res = await fetch(`\/wp-json\/elafp\/project\/list?lang=${lang}`)\r\n    const { data: apiData } = await res.json()\r\n    $('#loading-image').hide()\r\n    data = apiData.sort((a, b) => (b.displayAtHome - a.displayAtHome) || (a.rank - b.rank) || (parseInt(a.productCode) - parseInt(b.productCode)))\r\n\r\n    \/\/ Uncheck all checkboxes on init\r\n    $('div.dropdown-menu input[type=\"checkbox\"]').prop('checked', false)\r\n    attrs.forEach(attr => params[attr] = [])\r\n\r\n    function filterPost(obj) {\r\n      \/\/ Show all posts if all filters are empty\r\n      return attrs.every(attr => !params[attr] || params[attr].length === 0) ||\r\n        attrs.every(attr => !params[attr] || params[attr].length === 0 || params[attr].some(el => obj[attr]?.includes(el)))\r\n    }\r\n\r\n    function getDotLabel(post) {\r\n      const { available, comingSoon, offer_free_trial: freeTrial } = post\r\n      const isComingSoon = comingSoon || (available && available.includes('no'))\r\n      const isLaunched = available && available.includes('yes')\r\n      const hasFreeTrial = freeTrial && freeTrial.includes('yes')\r\n\r\n      if (isComingSoon && hasFreeTrial) {\r\n        return `<span style=\"color:#BF5218;\">\u25cf ${dict[lang]['launching-soon']}<\/span><span style=\"color:#000;\"> | <\/span><span style=\"color:#198754;\">${dict[lang]['free-trial']}<\/span>`\r\n      }\r\n      if (isComingSoon) {\r\n        return `<span style=\"color:#BF5218;\">\u25cf ${dict[lang]['launching-soon']}<\/span>`\r\n      }\r\n      if (isLaunched && hasFreeTrial) {\r\n        return `<span style=\"color:#198754;\">\u25cf ${dict[lang]['launched']}<\/span><span style=\"color:#000;\"> | <\/span><span style=\"color:#198754;\">${dict[lang]['free-trial']}<\/span>`\r\n      }\r\n      if (isLaunched) {\r\n        return `<span style=\"color:#198754;\">\u25cf ${dict[lang]['launched']}<\/span>`\r\n      }\r\n      return ''\r\n    }\r\n\r\n    function drawPosts() {\r\n      $('article.post-container, #no-post-message').remove()\r\n      const filtered = data.filter(filterPost)\r\n      if (!filtered.length) {\r\n        $('#post-list-container > #loading-image').before(`<p id=\"no-post-message\">${dict[lang]['no-post-message']}<\/p>`)\r\n        return\r\n      }\r\n      filtered.forEach(post => {\r\n        let { img, link, title, granteeName, subjectLabel, beneficiaryLabel, productCode } = post\r\n        if (title.startsWith(\"Protected: \")) {\r\n          title = title.replace(\/^Protected:\\s*\/, \"\")\r\n        }\r\n        const target = '_' + new URL(link).hostname === window.location.hostname ? 'self' : 'blank'\r\n        let tagHtml = tags.map(tag => {\r\n          const label = tag.key === 'subject_card_display' ? subjectLabel : beneficiaryLabel\r\n          return label ? `<div class=\"d-inline-flex rounded-3 px-3 py-2 fs-6\" style=\"background-color: ${tag.color};\"><i class=\"${tag.icon} me-2 text-white\"><\/i>${label.join(' | ')}<\/div>` : ''\r\n        }).join('')\r\n        let dotLabel = getDotLabel(post)\r\n        const postHTML = `<article class=\"post-container d-flex flex-column justify-content-between rounded-4 bg-white\">\r\n          <div>\r\n            <div class=\"overflow-hidden\">\r\n              <a class=\"image rounded-top-4 w-100\" href=\"${link}\" target=\"${target}\">\r\n                <img decoding=\"async\" src=\"${img}\" alt=\"${title}\" title=\"${title}\" class=\"w-100\" \/>\r\n              <\/a>\r\n            <\/div>\r\n            <div class=\"d-flex flex-column gap-2 p-4\">\r\n              <a href=\"${link}\" target=\"${target}\">\r\n                <h3 class=\"fs-5 fw-bold text-black\">[${productCode.substring(0, 4)}\/${productCode.substring(4)}] ${title}<\/h3>\r\n              <\/a>\r\n              <div class=\"grantee-name\"><span>${granteeName}<\/span><\/div>\r\n              <div class=\"tags d-flex flex-column gap-2\">${tagHtml}<\/div>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"d-flex flex-column row-gap-2 px-4 pb-4\">\r\n            <div>\r\n              <a href=\"${link}\" target=\"${target}\" class=\"view-more d-flex align-items-center text-primary fw-bold\">\r\n                <span>${dict[lang]['view-more']}<\/span>\r\n                <i class=\"fas fa-arrow-right ms-2\"><\/i>\r\n              <\/a>\r\n            <\/div>\r\n            <div>\r\n              ${dotLabel}\r\n            <\/div>\r\n          <\/div>\r\n        <\/article>`\r\n        $('#post-list-container>#loading-image').before(postHTML)\r\n      })\r\n    }\r\n\r\n    \/\/ Filter UI handlers\r\n    $('div.dropdown-menu input.form-check-input.select-all').click(function () {\r\n      const k = $(this).attr('id').replace('select-all-', '')\r\n      $(`.option-${k}`).prop('checked', $(this).prop('checked'))\r\n      params[k] = $(this).prop('checked')\r\n        ? $(`input[id*=\"filter-${k}\"]`).map((_, el) => el.id.replace('filter-', '').split('-')[1]).get()\r\n        : []\r\n    })\r\n\r\n    $('div.dropdown-menu input.form-check-input[type=\"checkbox\"]:not(.select-all)').click(function () {\r\n      const [k, v] = $(this).attr('id').replace('filter-', '').split('-')\r\n      params[k] = params[k] || []\r\n      if ($(this).prop('checked')) {\r\n        params[k].push(v)\r\n      } else {\r\n        params[k] = params[k].filter(val => val !== v)\r\n        $(`#select-all-${k}`).prop('checked', false)\r\n      }\r\n      if (params[k].length === $(`input[id*=\"filter-${k}\"]`).length) {\r\n        $(`#select-all-${k}`).prop('checked', true)\r\n      }\r\n    })\r\n\r\n    $('#filters-confirm').click(drawPosts)\r\n    $('#filters-reset').click(() => {\r\n      $('div.dropdown-menu input[type=\"checkbox\"]').prop('checked', false)\r\n      attrs.forEach(attr => params[attr] = [])\r\n      drawPosts()\r\n    })\r\n\r\n    \/\/ Initial render\r\n    drawPosts()\r\n  });\r\n<\/script>\r\n\r\n<style>\r\n  div.dropdown-menu input.form-check-input+label {\r\n    color: black;\r\n  }\r\n\r\n  div.dropdown-menu input.form-check-input:checked+label {\r\n    color: #305AB4;\r\n  }\r\n\r\n  div.tags i {\r\n    line-height: 1.5;\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d22312 elementor-align-justify elementor-widget__width-initial elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-button\" data-id=\"7d22312\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\" id=\"load-more\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">View More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\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>Projects Projects Filter OK Reset Filters View More<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":35,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-41","page","type-page","status-publish","hentry"],"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>QEF eLAFP - Projects - EdCity<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"QEF eLAFP - Projects - EdCity\" \/>\n<meta property=\"og:description\" content=\"Projects Projects Filter OK Reset Filters View More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/\" \/>\n<meta property=\"og:site_name\" content=\"EdCity\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-25T08:08:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/\",\"url\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/\",\"name\":\"QEF eLAFP - Projects - EdCity\",\"isPartOf\":{\"@id\":\"https:\/\/web.edcity.hk\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg\",\"datePublished\":\"2025-02-20T07:07:26+00:00\",\"dateModified\":\"2026-02-25T08:08:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#primaryimage\",\"url\":\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg\",\"contentUrl\":\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/web.edcity.hk\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"eLAFP\",\"item\":\"https:\/\/web.edcity.hk\/en\/elafp\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/web.edcity.hk\/en\/#website\",\"url\":\"https:\/\/web.edcity.hk\/en\/\",\"name\":\"\u9999\u6e2f\u6559\u80b2\u57ce\",\"description\":\"EdCity\",\"publisher\":{\"@id\":\"https:\/\/web.edcity.hk\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/web.edcity.hk\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/web.edcity.hk\/en\/#organization\",\"name\":\"EdCity\",\"url\":\"https:\/\/web.edcity.hk\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/web.edcity.hk\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/02\/hkedcity_logo.svg\",\"contentUrl\":\"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/02\/hkedcity_logo.svg\",\"width\":252,\"height\":94,\"caption\":\"EdCity\"},\"image\":{\"@id\":\"https:\/\/web.edcity.hk\/en\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"QEF eLAFP - Projects - EdCity","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/","og_locale":"en_US","og_type":"article","og_title":"QEF eLAFP - Projects - EdCity","og_description":"Projects Projects Filter OK Reset Filters View More","og_url":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/","og_site_name":"EdCity","article_modified_time":"2026-02-25T08:08:24+00:00","og_image":[{"url":"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/","url":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/","name":"QEF eLAFP - Projects - EdCity","isPartOf":{"@id":"https:\/\/web.edcity.hk\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#primaryimage"},"image":{"@id":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#primaryimage"},"thumbnailUrl":"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg","datePublished":"2025-02-20T07:07:26+00:00","dateModified":"2026-02-25T08:08:24+00:00","breadcrumb":{"@id":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/web.edcity.hk\/en\/elafp\/projects\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#primaryimage","url":"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg","contentUrl":"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/04\/Projects-1920x520-2.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/web.edcity.hk\/en\/elafp\/projects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/web.edcity.hk\/en\/"},{"@type":"ListItem","position":2,"name":"eLAFP","item":"https:\/\/web.edcity.hk\/en\/elafp\/"},{"@type":"ListItem","position":3,"name":"Projects"}]},{"@type":"WebSite","@id":"https:\/\/web.edcity.hk\/en\/#website","url":"https:\/\/web.edcity.hk\/en\/","name":"\u9999\u6e2f\u6559\u80b2\u57ce","description":"EdCity","publisher":{"@id":"https:\/\/web.edcity.hk\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/web.edcity.hk\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/web.edcity.hk\/en\/#organization","name":"EdCity","url":"https:\/\/web.edcity.hk\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/web.edcity.hk\/en\/#\/schema\/logo\/image\/","url":"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/02\/hkedcity_logo.svg","contentUrl":"https:\/\/campaignprodstor.blob.core.windows.net\/uploads\/2025\/02\/hkedcity_logo.svg","width":252,"height":94,"caption":"EdCity"},"image":{"@id":"https:\/\/web.edcity.hk\/en\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/pages\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":391,"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/pages\/41\/revisions"}],"predecessor-version":[{"id":15943,"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/pages\/41\/revisions\/15943"}],"up":[{"embeddable":true,"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/pages\/35"}],"wp:attachment":[{"href":"https:\/\/web.edcity.hk\/en\/wp-json\/wp\/v2\/media?parent=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}