<!doctype html>
<html class="no-js" lang="id">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="author" content="PT Ruang Raya Indonesia" />
<meta
name="description"
content="Ada banyak banget penawaran dan keringanan untuk langganan paket Ruangguru. Kamu bisa pilih sampe cicilan 12 x dan bisa dapetin potongan tambahan hingga Rp300.000!"
/>
<meta name="generator" content="HubSpot" />
<title>Sekarang Ruangguru Bisa Dicicil 12x & Diskon Hingga Rp 300,000</title>
<link rel="shortcut icon" href="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/favicon60x60-3.png" />
<meta
property="og:description"
content="Ada banyak banget penawaran dan keringanan untuk langganan paket Ruangguru. Kamu bisa pilih sampe cicilan 12 x dan bisa dapetin potongan tambahan hingga Rp300.000!"
/>
<meta property="og:title" content="Sekarang Ruangguru Bisa Dicicil 12x & Diskon Hingga Rp 300,000" />
<meta
name="twitter:description"
content="Ada banyak banget penawaran dan keringanan untuk langganan paket Ruangguru. Kamu bisa pilih sampe cicilan 12 x dan bisa dapetin potongan tambahan hingga Rp300.000!"
/>
<meta name="twitter:title" content="Sekarang Ruangguru Bisa Dicicil 12x & Diskon Hingga Rp 300,000" />
<style>
a.cta_button {
-moz-box-sizing: content-box !important;
-webkit-box-sizing: content-box !important;
box-sizing: content-box !important;
vertical-align: middle;
}
.hs-breadcrumb-menu {
list-style-type: none;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}
.hs-breadcrumb-menu-item {
float: left;
padding: 10px 0px 10px 10px;
}
.hs-breadcrumb-menu-divider:before {
content: '›';
padding-left: 10px;
}
.hs-featured-image-link {
border: 0;
}
.hs-featured-image {
float: right;
margin: 0 0 20px 20px;
max-width: 50%;
}
@media (max-width: 568px) {
.hs-featured-image {
float: none;
margin: 0;
width: 100%;
max-width: 100%;
}
}
.hs-screen-reader-text {
clip: rect(1px, 1px, 1px, 1px);
height: 1px;
overflow: hidden;
position: absolute !important;
width: 1px;
}
</style>
<link
rel="stylesheet"
href="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/module_assets/39227318886/1661845607410/module_39227318886_header-homepage-ruangguru-2021.min.css"
/>
<link
rel="stylesheet"
href="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/template_assets/44980440489/1661483386153/A_Ruangguru_Projects/Project_Hofar/CSS_Javascript_Auto_Generate_Breadcrumb_-_V1.min.css"
/>
<link
rel="stylesheet"
href="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/module_assets/50471067289/1672811400720/module_50471067289_content_cicilan_ruangguru_2021.min.css"
/>
<link
rel="stylesheet"
href="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/module_assets/39981680119/1676448475961/module_39981680119_Footer-ruangguru-2021-v2.min.css"
/>
<!-- Added by GoogleAnalytics integration -->
<script>
var _hsp = (window._hsp = window._hsp || []);
_hsp.push([
'addPrivacyConsentListener',
function (consent) {
if (consent.allowed || (consent.categories && consent.categories.analytics)) {
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
(i[r] =
i[r] ||
function () {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-49650255-1', 'auto');
ga('send', 'pageview');
}
},
]);
</script>
<!-- /Added by GoogleAnalytics integration -->
<link rel="canonical" href="https://www.ruangguru.com/cicilan" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script>
(function (h, e, a, t, m, p) {
m = e.createElement(a);
m.async = !0;
m.src = t;
p = e.getElementsByTagName(a)[0];
p.parentNode.insertBefore(m, p);
})(window, document, 'script', 'https://u.heatmap.it/log.js');
</script>
<meta name="google-site-verification" content="VJAn1g6wmtTZPpTXh-B4xoSFEkUi5jcV74xQSr6jnOM" />
<script>
document.querySelector('meta[name="author"]').setAttribute('content', 'Ruangguru Tech Team');
</script>
<meta name="publisher" content="PT Ruang Raya Indonesia" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<!--
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-49650255-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-49650255-1');
</script>
-->
<!-- Google Tag Manager -->
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-PVNLZFT');
</script>
<!-- End Google Tag Manager -->
<meta property="og:image" content="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20New%20Icon/rg.png#keepProtocol" />
<meta name="twitter:image" content="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20New%20Icon/rg.png#keepProtocol" />
<meta property="og:url" content="https://www.ruangguru.com/cicilan" />
<meta name="twitter:card" content="summary" />
<meta http-equiv="content-language" content="id" />
<link rel="stylesheet" href="https://cdn-web-2.ruangguru.com/landing-page-web/public/assets/common/layout.min.css" />
<link
rel="stylesheet"
href="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/template_assets/32781682988/1666344401391/A_Ruangguru_Projects/1_SOP_Landing_Page/SOP_Style_Ruangguru.min.css"
/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.ruangguru.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Promo",
"item": "https://www.ruangguru.com/promo"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "home",
"item": "https://www.ruangguru.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "cicilan",
"item": "https://www.ruangguru.com/cicilan"
}
]
}
</script>
<script type="module" crossorigin src="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/cicilan/assets/index-Dqv5PPZA.js"></script>
</head>
<body class="hs-content-id-24249069667 hs-landing-page hs-page" style="">
<div class="header-container-wrapper">
<div class="header-container container-fluid">
<div class="row-fluid-wrapper row-depth-1 row-number-1">
<div class="row-fluid">
<div class="span12 widget-span widget-type-custom_widget" style="" data-widget-type="custom_widget" data-x="0" data-w="12">
<div
id="hs_cos_wrapper_module_161864779893999"
class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module"
style=""
data-hs-cos-general-type="widget"
data-hs-cos-type="module"
>
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> -->
<style></style>
<nav class="ruangguru-header">
<div class="page-center">
<div class="container-ruangguru-header">
<div class="navigation__left">
<div class="hamburger-icon">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/ic_hamburger_black.svg" alt="Dropdown Navigation Icon" />
</div>
<a href="https://www.ruangguru.com/">
<div class="logo-header">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/logo%20rg.svg" alt="Logo ruangguru" />
</div>
</a>
</div>
<div class="navigation__content">
<div class="navig-link navig-link-dropdown" id="produk" aria-expanded="false">
<a>Produk</a>
</div>
<div class="navig-dropdown-area closed" id="produk_item">
<!-- ruangbelajar -->
<a href="https://www.ruangguru.com/ruangbelajar">
<div class="item-product">
<div class="logo-product">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/rb.svg" alt="Logo ruangbelajar" loading="lazy" />
</div>
<p class="text-product">Belajar seru dengan video dan latihan soal, anti remed!</p>
</div>
</a>
<!-- BA -->
<a target="_blank" href="https://www.brainacademy.id">
<div class="item-product">
<div class="logo-product">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/03%20-%20Homepage%20Brainacademy%202022/Header%20to%20Live%20Teaching/logo_BA.svg"
alt="Logo Brain Academy"
loading="lazy"
/>
</div>
<p class="text-product">Bimbel Live Interaktif bersama STAR Master Teacher + Klinik PR</p>
</div>
</a>
<!-- roboguru -->
<a href="https://roboguru.ruangguru.com/">
<div class="item-product">
<div class="logo-product">
<img src="https://roboguru-forum-cdn.ruangguru.com/image/20b7b17a-62ba-43ee-bea8-b71c10f5fb0c.png?convert=webp" width="125" alt="Logo roboguru" loading="lazy" />
</div>
<p class="text-product">Foto dan upload soal susahmu dan dapatkan semua jawabannya di sini!</p>
</div>
</a>
<!-- roboguru plus -->
<a href="https://www.ruangguru.com/roboguruplus">
<div class="item-product">
<div class="logo-product">
<img src="https://roboguru-forum-cdn.ruangguru.com/image/ea267d76-9d20-45b0-9c2c-88e78c199f5d.png?convert=webp" width="155" alt="Logo ruanglesonline" loading="lazy" />
</div>
<p class="text-product">Konsultasikan soal tersulit kamu sebanyak-banyaknya dengan tutor online terbaik</p>
</div>
</a>
<!-- ruangles -->
<a href="https://www.ruangguru.com/privat">
<div class="item-product">
<div class="logo-product">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=112&name=logo-ruangguru-privat.png"
alt="Logo ruangles"
width="112"
loading="lazy"
srcset="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=56&name=logo-ruangguru-privat.png 56w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=112&name=logo-ruangguru-privat.png 112w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=168&name=logo-ruangguru-privat.png 168w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=224&name=logo-ruangguru-privat.png 224w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=280&name=logo-ruangguru-privat.png 280w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/LP%20Ruangguru%20Private/Logo%20Ruangguru%20Privat/logo-ruangguru-privat.png?convert=webp&width=336&name=logo-ruangguru-privat.png 336w"
sizes="(max-width: 112px) 100vw, 112px"
/>
</div>
<p class="text-product">Belajar privat dengan guru terbaik pilihan Ruangguru</p>
</div>
</a>
<!-- EA -->
<a target="_blank" href="https://www.english-academy.id/">
<div class="item-product">
<div class="logo-product" id="lp_ea">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/ENGLISH%20ACADEMY-LOGO2%201.png?convert=webp"
alt="Logo English Academy"
loading="lazy"
/>
<div class="ribbon-wrapper-new">
<div class="glow-new"> </div>
</div>
</div>
<p class="text-product">Kursus Bahasa Inggris dengan Pengajar internasional dan kurikulum berstandar internasional</p>
</div>
</a>
<!-- dafalulu -->
<a href="https://www.ruangguru.com/dafa-lulu">
<div class="item-product">
<div class="logo-product">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-dafa-lulu-new.png?convert=webp&height=44&name=logo-dafa-lulu-new.png"
height="44"
alt="Logo dafa lulu"
loading="lazy"
/>
</div>
<p class="text-product">Belajar bersama Dafa, Lulu, dan teman petualang untuk siswa SD kelas 1 - 6</p>
</div>
</a>
<!-- rg for kids -->
<a href="https://www.ruangguru.com/for-kids">
<div class="item-product">
<div class="logo-product">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=100&name=logo-ruangguru-forkids.png"
alt="Logo For Kids"
width="100"
loading="lazy"
srcset="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=50&name=logo-ruangguru-forkids.png 50w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=100&name=logo-ruangguru-forkids.png 100w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=150&name=logo-ruangguru-forkids.png 150w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=200&name=logo-ruangguru-forkids.png 200w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=250&name=logo-ruangguru-forkids.png 250w, https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/00%20-%20Homepage%20Ruangguru%202022/Produk/logo-ruangguru-forkids.png?convert=webp&width=300&name=logo-ruangguru-forkids.png 300w"
sizes="(max-width: 100px) 100vw, 100px"
/>
</div>
<p class="text-product">Kursus online untuk anak 4-7 tahun dengan program calistung, bahasa Inggris, dan sains</p>
</div>
</a>
<!-- ruanguji -->
<a href="https://www.ruangguru.com/ruanguji">
<div class="item-product">
<div class="logo-product">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/ruanguji.svg" alt="Logo ruanguji" loading="lazy" />
</div>
<p class="text-product">Ikut tryout online dan lihat hasilnya di sini!</p>
</div>
</a>
<!-- ruangkelas -->
<a href="https://www.ruangguru.com/ruangkelas">
<div class="item-product">
<div class="logo-product">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/ruangkelas.svg" alt="Logo ruangkelas" loading="lazy" />
</div>
<p class="text-product">Sistem Kelola Pembelajaran Jarak Jauh GRATIS!</p>
</div>
</a>
<!-- SA -->
<a target="_blank" href="https://skillacademy.com/">
<div class="item-product">
<div class="logo-product">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/skillacademy.svg" alt="Logo Skill Academy" loading="lazy" />
</div>
<p class="text-product">Kursus online untuk meningkatkan technical & soft skill kamu</p>
</div>
</a>
<!-- ruangkerja -->
<a target="_blank" href="https://ruangkerja.id/">
<div class="item-product">
<div class="logo-product">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/ruangkerja.svg" alt="Logo ruangkerja" loading="lazy" />
</div>
<p class="text-product">Aplikasi Pelatihan Online #1 untuk Perusahaan & Lembaga</p>
</div>
</a>
<!-- kalananti -->
<a target="_blank" href="https://www.kalananti.id/">
<div class="item-product">
<div class="logo-product">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/kalananti%202022/Kalananti%20by%20Ruangguru.png" alt="Logo kalananti" loading="lazy" height="40" />
</div>
<p class="text-product">Kursus coding dan robotic anak usia 5-15 tahun untuk mengasah logika dan kreativitas</p>
</div>
</a>
<!-- mathchamps -->
<a target="_blank" href="https://www.mathchamps.id">
<div class="item-product">
<div class="logo-product">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/723d8e19-b594-49cf-a098-07f5379d5d5f.png?convert=webp&h=70"
alt="Logo math champs"
loading="lazy"
width="104"
height="40"
/>
</div>
<p class="text-product">Kursus matematika dan logika untuk anak 5-14 tahun dengan kurikulum Singapura</p>
</div>
</a>
<!-- schoters logo -->
<a target="_blank" href="https://www.schoters.com">
<div class="item-product">
<div class="logo-product">
<img
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/3ecc92be-4ee0-475f-bd4c-d1f5e733f012.png?convert=webp&h=120"
alt="Logo Schoters"
loading="lazy"
height="40"
/>
</div>
<p class="text-product">Bimbingan kuliah & kerja di luar negeri #1 di Indonesia, dengan kelas bahasa terlengkap!</p>
</div>
</a>
</div>
<div class="navig-link" id="program">
<a href="https://www.ruangguru.com/program">Program</a>
</div>
<div class="navig-link">
<a href="https://www.ruangguru.com/promo">Promo</a>
</div>
<div class="navig-link">
<a href="https://www.ruangguru.com/event">Event</a>
</div>
<div class="navig-link">
<a href="https://www.ruangguru.com/beasiswa">Beasiswa</a>
</div>
<div class="navig-link">
<a href="https://www.ruangguru.com/testimoni">Testimoni</a>
</div>
<div class="navig-link navig-link-dropdown" id="services">
<a>Layanan</a>
</div>
<div class="navig-dropdown-area closed" id="services_item" aria-expanded="false">
<div class="item-services">
<a href="https://www.ruangguru.com/ruangbelajar/perpanjang-paket">Cara Perpanjang Paket</a>
</div>
<div class="item-services">
<a href="https://www.ruangguru.com/cara-bayar">Cara Bayar</a>
</div>
<div class="item-services">
<a href="https://www.ruangguru.com/cicilan">Cicilan</a>
</div>
</div>
<div class="navig-link">
<a href="https://www.ruangguru.com/blog/">Ruangbaca</a>
</div>
</div>
<div class="navigation__right">
<div class="button-langganan-cta">
<!--HubSpot Call-to-Action Code -->
<span class="hs-cta-wrapper" id="hs-cta-wrapper-98f09c6e-5ed3-4c65-b943-9a7ff510d8e8">
<span class="hs-cta-node hs-cta-98f09c6e-5ed3-4c65-b943-9a7ff510d8e8" id="hs-cta-98f09c6e-5ed3-4c65-b943-9a7ff510d8e8">
<a href="https://cta.ruangguru.com/98f09c6e-5ed3-4c65-b943-9a7ff510d8e8" target="_blank" rel="noopener">
<img
class="hs-cta-img"
id="hs-cta-img-98f09c6e-5ed3-4c65-b943-9a7ff510d8e8"
style="border-width: 0px"
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/cta/98f09c6e-5ed3-4c65-b943-9a7ff510d8e8.png"
alt="Langganan Sekarang"
/>
</a>
</span>
</span>
<!-- end HubSpot Call-to-Action Code -->
</div>
</div>
</div>
</div>
</nav>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"
></script>
<script></script>
</div>
</div>
<!--end widget-span -->
</div>
<!--end row-->
</div>
<!--end row-wrapper -->
</div>
<!--end header -->
</div>
<!--end header wrapper -->
<div class="body-container-wrapper">
<div class="body-container container-fluid">
<div class="row-fluid-wrapper row-depth-1 row-number-1">
<div class="row-fluid">
<div class="span12 widget-span widget-type-custom_widget" style="" data-widget-type="custom_widget" data-x="0" data-w="12">
<div
id="hs_cos_wrapper_module_162582017712849"
class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module"
style=""
data-hs-cos-general-type="widget"
data-hs-cos-type="module"
>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.css" />
<style>
:root {
--custom-orange: rgb(255, 130, 60);
}
.bg-custom-orange {
background-color: var(--custom-orange) !important;
}
.border-custom-orange {
border-color: var(--custom-orange) !important;
}
img.h-auto {
height: auto;
}
img.img-custom-clickable {
opacity: 1;
}
img.img-custom-clickable:hover {
opacity: 0.9;
cursor: pointer;
}
</style>
<div class="spacer-rg"></div>
<div class="promo">
<div class="promo__banner">
<!-- <img loading="lazy" width="1080" height="474"
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Promo/Homepage%20Promo%202021/Main%20Banner/main-mobile.png"
alt="Banner Promo" class="banner-mobile h-auto"> -->
<!-- <h1 class="font-title-banner">BAYAR RUANGGURU SEKARANG<br>BISA DICICIL HINGGA 12X</h1> -->
</div>
<div class="promo__container">
<div class="page-center-detail">
<nav aria-label="breadcrumb">
<ol id="breadcrumb" class="breadcrumb bg-transparent p-0"></ol>
</nav>
<div class="promo__heading">
<h1 class="font-bold font-base font-title">Ruangguru bisa DICICIL</h1>
</div>
<div class="promo__desc">
<p class="font-base font-thin">Raih kesempatan untuk dapat diskon hingga 80% dan tambahan potongan hingga Rp200.000.</p>
</div>
<div class="promo__menu" id="desktop_menu">
<div class="promo__menu--box" id="myBtnContainer">
<span class="filter">Filter: </span>
<div class="filter-item-wrap">
<div class="filter-item produk" nav-data="produk">
<label>
Layanan Ruangguru
<img class="checked-blue-produk" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/checked_icon.svg" />
<img class="uncheck-blue-produk" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/arrowdown_icon.svg" />
</label>
</div>
<div class="filter-value closed" value-data="produk">
<div class="filter-title-label">
<label>Layanan Ruangguru</label>
<div class="check_all_produk">Pilih Semua</div>
</div>
<div>
<input type="checkbox" class="checkbox_class_produk" value="ruangbelajar" />
ruangbelajar
</div>
<div>
<input type="checkbox" class="checkbox_class_produk" value="Brain_Academy_Offline" />
Brain Academy Offline
</div>
<div>
<input type="checkbox" class="checkbox_class_produk" value="Brain_Academy_Online" />
Brain Academy Online
</div>
<div>
<input type="checkbox" class="checkbox_class_produk" value="English_Academy" />
English Academy
</div>
</div>
</div>
<div class="filter-item-wrap">
<div class="filter-item cicilan" nav-data="cicilan">
<label>
Jumlah Cicilan
<img class="checked-blue-cicilan" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/checked_icon.svg" />
<img class="uncheck-blue-cicilan" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/arrowdown_icon.svg" />
</label>
</div>
<div class="filter-value closed" value-data="cicilan">
<div class="filter-title-label">
<label>Jumlah Cicilan</label>
<div class="check_all_cicilan">Pilih Semua</div>
</div>
<div>
<input type="checkbox" class="checkbox_class_cicilan" value="Cicilan_1x" />
Cicilan 1x
</div>
<div>
<input type="checkbox" class="checkbox_class_cicilan" value="Cicilan_2x" />
Cicilan 2x
</div>
<div>
<input type="checkbox" class="checkbox_class_cicilan" value="Cicilan_3x" />
Cicilan 3x
</div>
<div>
<input type="checkbox" class="checkbox_class_cicilan" value="Cicilan_6x" />
Cicilan 6x
</div>
<div>
<input type="checkbox" class="checkbox_class_cicilan" value="Cicilan_12x" />
Cicilan 12x
</div>
</div>
</div>
<div class="filter-item-wrap">
<div class="filter-item partner" nav-data="partner">
<label>
Metode Cicilan
<img class="checked-blue-partner" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/checked_icon.svg" />
<img class="uncheck-blue-partner" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/arrowdown_icon.svg" />
</label>
</div>
<div class="filter-value closed" value-data="partner">
<div class="filter-title-label">
<label>Metode Cicilan</label>
<div class="check_all_partner">Pilih Semua</div>
</div>
<div>
<input type="checkbox" class="checkbox_class_partner" value="Kredivo" />
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/kredivo.svg" />
Kredivo
</div>
<!-- <div><input type="checkbox" class="checkbox_class_partner" value="AkuLaku"><img
src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/akulaku.svg'> AkuLaku
</div>
<div><input type="checkbox" class="checkbox_class_partner" value="Cicil"><img
src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/cicil.svg'> Cicil</div>
<div><input type="checkbox" class="checkbox_class_partner" value="TunaiKu"><img
src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/tunaiku.svg'> TunaiKu
</div> -->
</div>
</div>
</div>
<hr class="separator" />
<div class="promo__menu--filter">
<select style="display: none" id="filter"></select>
<div class="filter-item-sort" data-tableid="data_promo" id="filter_desktop" disabled>
Urutkan
<img class="uncheck-blue-produk" src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/arrowdown_icon.svg" />
</div>
<div class="filter-item-sorts tutup" id="filter_desktop_content">
<div class="sorts_option2" value="az">Urutan A-Z</div>
<div class="sorts_option2" value="za">Urutan Z-A</div>
<div class="sorts_option2" value="terlama">Program Cicilan Terbaru</div>
<div class="sorts_option2" value="terbaru">Program Cicilan Terlama</div>
</div>
</div>
</div>
<div class="promo__menu" id="mobile_menu">
<div class="promo__menu--box" id="myBtnContainer">
<div class="filter-mobile" id="click_filter">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/filtering_ico.svg" id="filter-ico" />
<div id="filter-jumlah">0</div>
<span>Filter</span>
</div>
<div class="promo__menu--filter">
<div class="filter-item-sort" data-tableid="data_promo" id="sorting_click">
Urutkan
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/arrowdown_icon.svg" />
</div>
</div>
</div>
<div class="filter-box-mobile tutup" id="filters">
<div class="line-short" id="filters_close">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/line-short.svg" />
</div>
<div class="title-filter-mobile">
<span class="title-filter">Filter</span>
<span id="reset_filter">Reset</span>
</div>
<div class="filter-item-wrap-mob">
<div class="filter-item-mob produk" nav-data="produk">
<label>Layanan Ruangguru</label>
</div>
<div class="filter-value-mob closed" value-data="produk">
<div class="row-1">
<div class="checkbox_class_produk" value="ruangbelajar">ruangbelajar</div>
<div class="checkbox_class_produk" value="Brain_Academy_Offline">Brain Academy Offline</div>
</div>
<div class="row-2">
<div class="checkbox_class_produk" value="Brain_Academy_Online">Brain Academy Online</div>
<div class="checkbox_class_produk" value="English_Academy">English Academy</div>
</div>
</div>
<div class="filter-item-mob cicilan" nav-data="cicilan">
<label>Jumlah Cicilan</label>
</div>
<div class="filter-value-mob closed" value-data="cicilan">
<div class="row-1">
<div class="checkbox_class_cicilan" value="Cicilan_1x">1x</div>
<div class="checkbox_class_cicilan" value="Cicilan_2x">2x</div>
<div class="checkbox_class_cicilan" value="Cicilan_3x">3x</div>
<div class="checkbox_class_cicilan" value="Cicilan_6x">6x</div>
<div class="checkbox_class_cicilan" value="Cicilan_12x">12x</div>
</div>
</div>
<div class="filter-item-mob partner" nav-data="partner">
<label>Metode Cicilan</label>
</div>
<div class="filter-value-mob closed" value-data="partner">
<div class="row-1">
<div class="checkbox_class_partner" value="Kredivo">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/kredivo.svg" />
Kredivo
</div>
<div class="checkbox_class_partner" value="AkuLaku">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/akulaku.svg" />
AkuLaku
</div>
</div>
<div class="row-2">
<div class="checkbox_class_partner" value="Cicil">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/cicil.svg" />
Cicil
</div>
<div class="checkbox_class_partner" value="TunaiKu">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/tunaiku.svg" />
TunaiKu
</div>
</div>
</div>
</div>
<div class="btn-selesai-filter-wrap">
<button class="btn-selesai-filter" id="selesai_filters">Selesai</button>
</div>
</div>
<div class="filter-box-mobile tutup" id="sortings">
<div class="line-short" id="sortings_close">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/line-short.svg" />
</div>
<div class="title-filter-mobile">
<span class="title-filter">Urutkan</span>
<span class="sorts_option aktif" value="" id="reset_sorting">Reset</span>
</div>
<div class="filter-item-wrap-mob">
<div class="filter-item-sorts" id="filter">
<div class="sorts_option" value="az">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/die_btn.svg" class="nonaktif" />
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/active_btn.svg" class="aktif" />
Urutan A-Z
</div>
<div class="sorts_option" value="za">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/die_btn.svg" class="nonaktif" />
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/active_btn.svg" class="aktif" />
Urutan Z-A
</div>
<div class="sorts_option" value="terlama">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/die_btn.svg" class="nonaktif" />
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/active_btn.svg" class="aktif" />
Program Cicilan Terbaru
</div>
<div class="sorts_option" value="terbaru">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/die_btn.svg" class="nonaktif" />
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/active_btn.svg" class="aktif" />
Program Cicilan Terlama
</div>
</div>
</div>
<div class="btn-selesai-filter-wrap">
<button class="btn-selesai-filter" id="selesai_sortings">Selesai</button>
</div>
</div>
</div>
<div class="outer-filtered-wrap">
<div class="whitespace-start"> </div>
<div class="outer-filtered-wrap-inner">
<div class="filtered-wrap"></div>
<div class="hapus-semua-wrap">
<div class="btn-hapus-semua">Hapus Semua</div>
</div>
</div>
<div class="whitespace"> </div>
</div>
<hr class="separator" />
<!-- Portfolio Gallery Grid -->
<div class="promo__group" id="data_promo"></div>
<div id="pagination-area">
<div id="data-container"></div>
<div class="d-flex justify-content-center my-4">
<nav id="pagination" aria-label="Page navigation example"></nav>
</div>
</div>
<div class="no-data img-no-data d-none">
<p class="font-base font-desc">
<b>Yah promo yang kamu cari belum ada nih Squad!</b>
<br />
Tenang saja, masih banyak promo menarik lainnya untukmu, kok. Cek promo yang lain, yuk!
</p>
</div>
</div>
<!-- <div class="panduan-aktivasi">
<div class="page-center">
<div class="panduan__title">
<h2 class="font-subtitle">Panduan Aktivasi</h2>
</div>
<div class="panduan__content">
<div class="panduan-item-wrap">
<div class="panduan-item">
<div class="img-panduan">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/paduan1.png">
</div>
<div class="text-panduan">
<p class="font-desc">1. Login ke akun Ruangguru dan pilih tab “Pembelian”</p>
</div>
</div>
<div class="panduan-item">
<div class="img-panduan">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/paduan2.png">
</div>
<div class="text-panduan">
<p class="font-desc">2. Pilih paket yang ingin kamu beli.</p>
</div>
</div>
<div class="panduan-item">
<div class="img-panduan">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/paduan3.png">
</div>
<div class="text-panduan">
<p class="font-desc">3. Pilih paket yang kamu inginkan dan pilih “Cicilan 2 kali”.</p>
</div>
</div>
<div class="panduan-item">
<div class="img-panduan">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/paduan4.png">
</div>
<div class="text-panduan">
<p class="font-desc">4. Masukkan kode diskon JADIJUARA untuk mendapatkan diskon.</p>
</div>
</div>
<div class="panduan-item">
<div class="img-panduan">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/paduan5.png">
</div>
<div class="text-panduan">
<p class="font-desc">5. Pilih metode pembayaran yang kamu inginkan dan selesaikan pembayaran sesuai
dengan instruksi.</p>
</div>
</div>
<div class="panduan-item">
<div class="img-panduan">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/paduan6.png">
</div>
<div class="text-panduan">
<p class="font-desc">6. Selamat! Paket kamu akan langsung aktif setelah melakukan pembayaran. Jangan
lupa lakukan pembayaran
cicilan kedua maksimal 30 hari setelah melakukan pembayaran pertama</p>
</div>
</div>
</div>
</div>
</div>
</div> -->
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script async src="https://platform.twitter.com/widgets.js"></script>
<!-- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js"></script>
<!--for tooltip-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<script>
$('.panduan-item-wrap').slick({
infinite: false,
dots: true,
slidesToShow: 1,
slidesToScroll: 1,
autoplay: false,
speed: 400,
arrows: true,
responsive: [
{
breakpoint: 9999,
settings: 'unslick',
},
{
breakpoint: 767.5,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
},
},
{
breakpoint: 1024.5,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
},
},
],
});
</script>
<script>
//tooltip
//$('.btn-copy').tooltip({
// trigger: 'click',
// placement: 'top'
//});
function setTooltip(elem, message) {
$(elem).attr('title', message).tooltip('show');
}
function hideTooltip(elem) {
setTimeout(function () {
$(elem).removeAttr('title').tooltip('hide');
}, 2000);
}
//clipboard
var clipboard = new ClipboardJS('.btn-copy');
clipboard.on('success', function (e) {
// console.info('Action:', e.action);
// console.info('Text:', e.text);
// console.info('Trigger:', e.trigger);
setTooltip(e.trigger, 'Copied!');
hideTooltip(e.trigger);
e.clearSelection();
});
clipboard.on('error', function (e) {
// console.error('Action:', e.action);
// console.error('Trigger:', e.trigger);
setTooltip(e.trigger, 'Failed!');
hideTooltip(e.trigger);
});
//for wa
$(document).ready(function () {
// if page detail show or page with class detail length = 1
if ($('.detail').length) {
var wordingText = '';
//if wording-text not empty
if ($('#wording-text').length) {
wordingText = $('#wording-text').text();
//console.log("wordingText: " + wordingText);
}
var waUrl = window.location.href;
// var waLink = "https://api.whatsapp.com/send?phone=&text=Program%20Promo%20Ruangguru%0D%0A%0D%0ARaih%20kesempatan%20untuk%20dapat%20diskon%20hingga%2080%25%2E%20Klik%20link%20di%20bawah%20untuk%20klaim%20promo%0D%0A%0D%0A" + waUrl;
var waLink = 'https://api.whatsapp.com/send?phone=&text=' + wordingText + '%0D%0A%0D%0A' + waUrl;
document.getElementById('waQuote').href = waLink;
// for fb
var fbUrl = window.location.href;
// var fbLink = "https://www.facebook.com/share.php?u=example.com"e=Program%20Promo%20Ruangguru%0D%0A%0D%0ARaih%20kesempatan%20untuk%20dapat%20diskon%20hingga%2080%25%2E%20Klik%20link%20di%20bawah%20untuk%20klaim%20promo%0D%0A%0D%0A" + fbUrl;
var fbLink = 'https://www.facebook.com/share.php?u=' + fbUrl + '"e=' + wordingText;
document.getElementById('fbQuote').href = fbLink;
// for twitter
var twitterUrl = window.location.href;
// var twitterLink = "https://twitter.com/intent/tweet?text=Program%20Promo%20Ruangguru%0D%0A%0D%0ARaih%20kesempatan%20untuk%20dapat%20diskon%20hingga%2080%25%2E%20Klik%20link%20di%20bawah%20untuk%20klaim%20promo%0D%0A%0D%0A" + twitterUrl;
var twitterLink = 'https://twitter.com/intent/tweet?text=' + wordingText + '%0D%0A%0D%0A' + twitterUrl;
document.getElementById('twitterQuote').href = twitterLink;
}
var imgCustomClickable = $('.img-custom-clickable');
if (imgCustomClickable.length) {
imgCustomClickable.each(function (index, object) {
//console.log(index);
//console.log(object);
//console.log($(this).attr('data-img-promo-url'));
$(this).attr('title', 'Lihat detail');
$(this).on('click', function () {
window.open($(this).attr('data-img-promo-url'), '_self');
});
});
}
});
$('.how-to__step').slick({
infinite: false,
dots: false,
slidesToShow: 1,
slidesToScroll: 1,
autoplay: false,
speed: 400,
arrows: true,
responsive: [
{
breakpoint: 9999,
settings: 'unslick',
},
{
breakpoint: 767.5,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
},
},
{
breakpoint: 1024.5,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
},
},
],
});
</script>
<script>
/* global define, pageLinkClass */
(function (global, $) {
if (typeof $ === 'undefined') {
throwError('Pagination requires jQuery.');
}
var pluginName = 'pagination';
var pluginHookMethod = 'addHook';
var eventPrefix = '__pagination-';
// Conflict, use backup
if ($.fn.pagination) {
pluginName = 'pagination2';
}
$.fn[pluginName] = function (options) {
if (typeof options === 'undefined') {
return this;
}
var container = $(this);
var attributes = $.extend({}, $.fn[pluginName].defaults, options);
var pagination = {
initialize: function () {
var self = this;
// Cache attributes of current instance
if (!container.data('pagination')) {
container.data('pagination', {});
}
if (self.callHook('beforeInit') === false) return;
// Pagination has been initialized, destroy it
if (container.data('pagination').initialized) {
$('.paginationjs', container).remove();
}
// Whether to disable Pagination at the initialization
self.disabled = !!attributes.disabled;
// Model will be passed to the callback function
var model = (self.model = {
pageRange: attributes.pageRange,
pageSize: attributes.pageSize,
});
// dataSource`s type is unknown, parse it to find true data
self.parseDataSource(attributes.dataSource, function (dataSource) {
// Currently in asynchronous mode
self.isAsync = Helpers.isString(dataSource);
if (Helpers.isArray(dataSource)) {
model.totalNumber = attributes.totalNumber = dataSource.length;
}
// Currently in asynchronous mode and a totalNumberLocator is specified
self.isDynamicTotalNumber = self.isAsync && attributes.totalNumberLocator;
var el = self.render(true);
// Add extra className to the pagination element
if (attributes.className) {
el.addClass(attributes.className);
}
model.el = el;
// Append/prepend pagination element to the container
container[attributes.position === 'bottom' ? 'append' : 'prepend'](el);
// Bind events
self.observer();
// Pagination is currently initialized
container.data('pagination').initialized = true;
// Will be invoked after initialized
self.callHook('afterInit', el);
});
},
render: function (isBoot) {
var self = this;
var model = self.model;
var el = model.el || $('<div class="paginationjs"></div>');
var isForced = isBoot !== true;
self.callHook('beforeRender', isForced);
var currentPage = model.pageNumber || attributes.pageNumber;
var pageRange = attributes.pageRange || 0;
var totalPage = self.getTotalPage();
var rangeStart = currentPage - pageRange;
var rangeEnd = currentPage + pageRange;
if (rangeEnd > totalPage) {
rangeEnd = totalPage;
rangeStart = totalPage - pageRange * 2;
rangeStart = rangeStart < 1 ? 1 : rangeStart;
}
if (rangeStart <= 1) {
rangeStart = 1;
rangeEnd = Math.min(pageRange * 2 + 1, totalPage);
}
el.html(
self.generateHTML({
currentPage: currentPage,
pageRange: pageRange,
rangeStart: rangeStart,
rangeEnd: rangeEnd,
})
);
// There is only one page
if (attributes.hideWhenLessThanOnePage) {
el[totalPage <= 1 ? 'hide' : 'show']();
}
self.callHook('afterRender', isForced);
return el;
},
// Generate HTML of the pages
generatePageNumbersHTML: function (args) {
var self = this;
var currentPage = args.currentPage;
var totalPage = self.getTotalPage();
var rangeStart = args.rangeStart;
var rangeEnd = args.rangeEnd;
var html = '';
var i;
var pageLink = attributes.pageLink;
var pageLinkClass = attributes.pageLinkClass;
var ellipsisText = attributes.ellipsisText;
var classPrefix = attributes.classPrefix;
var activeClassName = attributes.activeClassName;
var customActiveClass = attributes.customActiveClass;
var customPageLinkActiveClass = attributes.customPageLinkActiveClass;
var customListClass = attributes.customListClass;
var disableClassName = attributes.disableClassName;
// Disable page range, display all the pages
if (attributes.pageRange === null) {
for (i = 1; i <= totalPage; i++) {
if (i === currentPage) {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
activeClassName +
' ' +
customListClass +
' ' +
customActiveClass +
'" data-num="' +
i +
'"><a class="page-link ' +
pageLinkClass +
' ' +
customPageLinkActiveClass +
'">' +
i +
'<\/a><\/li>';
} else {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
customListClass +
'" data-num="' +
i +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
i +
'<\/a><\/li>';
}
}
return html;
}
if (rangeStart <= 3) {
for (i = 1; i < rangeStart; i++) {
if (i === currentPage) {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
activeClassName +
' ' +
customListClass +
' ' +
customActiveClass +
'" data-num="' +
i +
'"><a class="page-link ' +
customPageLinkActiveClass +
'">' +
i +
'<\/a><\/li>';
} else {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
customListClass +
'" data-num="' +
i +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
i +
'<\/a><\/li>';
}
}
} else {
if (attributes.showFirstOnEllipsisShow) {
html +=
'<li class="' +
classPrefix +
'-page ' +
classPrefix +
'-first J-paginationjs-page page-item ' +
customListClass +
'" data-num="1"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">1<\/a><\/li>';
}
html +=
'<li class="' + classPrefix + '-ellipsis ' + disableClassName + ' ' + customListClass + '"><a class="page-link ' + pageLinkClass + '">' + ellipsisText + '<\/a><\/li>';
}
for (i = rangeStart; i <= rangeEnd; i++) {
if (i === currentPage) {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
activeClassName +
' ' +
customListClass +
' ' +
customActiveClass +
'" data-num="' +
i +
'"><a class="page-link ' +
customPageLinkActiveClass +
'">' +
i +
'<\/a><\/li>';
} else {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
customListClass +
'" data-num="' +
i +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
i +
'<\/a><\/li>';
}
}
if (rangeEnd >= totalPage - 2) {
for (i = rangeEnd + 1; i <= totalPage; i++) {
html +=
'<li class="' +
classPrefix +
'-page J-paginationjs-page page-item ' +
customListClass +
'" data-num="' +
i +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
i +
'<\/a><\/li>';
}
} else {
html +=
'<li class="' + classPrefix + '-ellipsis ' + disableClassName + ' ' + customListClass + '"><a class="page-link ' + pageLinkClass + '">' + ellipsisText + '<\/a><\/li>';
if (attributes.showLastOnEllipsisShow) {
html +=
'<li class="' +
classPrefix +
'-page ' +
classPrefix +
'-last J-paginationjs-page page-item ' +
customListClass +
'" data-num="' +
totalPage +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
totalPage +
'<\/a><\/li>';
}
}
return html;
},
// Generate HTML content from the template
generateHTML: function (args) {
var self = this;
var currentPage = args.currentPage;
var totalPage = self.getTotalPage();
var totalNumber = self.getTotalNumber();
var showPrevious = attributes.showPrevious;
var showNext = attributes.showNext;
var showPageNumbers = attributes.showPageNumbers;
var showNavigator = attributes.showNavigator;
var showGoInput = attributes.showGoInput;
var showGoButton = attributes.showGoButton;
var pageLink = attributes.pageLink;
var pageLinkClass = attributes.pageLinkClass;
var prevText = attributes.prevText;
var nextText = attributes.nextText;
var prevTextTitle = attributes.prevTextTitle;
var nextTextTitle = attributes.nextTextTitle;
var goButtonText = attributes.goButtonText;
var classPrefix = attributes.classPrefix;
var customListClass = attributes.customListClass;
var disableClassName = attributes.disableClassName;
var ulClassName = attributes.ulClassName;
var html = '';
var goInput = '<input type="text" class="J-paginationjs-go-pagenumber">';
var goButton = '<input type="button" class="J-paginationjs-go-button" value="' + goButtonText + '">';
var formattedString;
var formatNavigator = $.isFunction(attributes.formatNavigator) ? attributes.formatNavigator(currentPage, totalPage, totalNumber) : attributes.formatNavigator;
var formatGoInput = $.isFunction(attributes.formatGoInput) ? attributes.formatGoInput(goInput, currentPage, totalPage, totalNumber) : attributes.formatGoInput;
var formatGoButton = $.isFunction(attributes.formatGoButton) ? attributes.formatGoButton(goButton, currentPage, totalPage, totalNumber) : attributes.formatGoButton;
var autoHidePrevious = $.isFunction(attributes.autoHidePrevious) ? attributes.autoHidePrevious() : attributes.autoHidePrevious;
var autoHideNext = $.isFunction(attributes.autoHideNext) ? attributes.autoHideNext() : attributes.autoHideNext;
var header = $.isFunction(attributes.header) ? attributes.header(currentPage, totalPage, totalNumber) : attributes.header;
var footer = $.isFunction(attributes.footer) ? attributes.footer(currentPage, totalPage, totalNumber) : attributes.footer;
// Whether to display header
if (header) {
formattedString = self.replaceVariables(header, {
currentPage: currentPage,
totalPage: totalPage,
totalNumber: totalNumber,
});
html += formattedString;
}
if (showPrevious || showPageNumbers || showNext) {
html += '<div class="paginationjs-pages">';
if (ulClassName) {
html += '<ul class="pagination m-0 ' + ulClassName + '">';
} else {
html += '<ul class="pagination m-0">';
}
// Whether to display the Previous button
if (showPrevious) {
if (currentPage <= 1) {
if (!autoHidePrevious) {
html += '<li class="' + classPrefix + '-prev page-item ' + disableClassName + '"><a class="page-link ' + pageLinkClass + '">' + prevText + '<\/a><\/li>';
}
} else {
html +=
'<li class="' +
classPrefix +
'-prev J-paginationjs-previous page-item" data-num="' +
(currentPage - 1) +
'" title="' +
prevTextTitle +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
prevText +
'<\/a><\/li>';
}
}
// Whether to display the pages
if (showPageNumbers) {
html += self.generatePageNumbersHTML(args);
}
// Whether to display the Next button
if (showNext) {
if (currentPage >= totalPage) {
if (!autoHideNext) {
html += '<li class="' + classPrefix + '-next page-item ' + disableClassName + '"><a class="page-link ' + pageLinkClass + '">' + nextText + '<\/a><\/li>';
}
} else {
html +=
'<li class="' +
classPrefix +
'-next J-paginationjs-next page-item" data-num="' +
(currentPage + 1) +
'" title="' +
nextTextTitle +
'"><a href="' +
pageLink +
'" class="page-link ' +
pageLinkClass +
'">' +
nextText +
'<\/a><\/li>';
}
}
html += '<\/ul><\/div>';
}
// Whether to display the navigator
if (showNavigator) {
if (formatNavigator) {
formattedString = self.replaceVariables(formatNavigator, {
currentPage: currentPage,
totalPage: totalPage,
totalNumber: totalNumber,
});
html += '<div class="' + classPrefix + '-nav J-paginationjs-nav">' + formattedString + '<\/div>';
}
}
// Whether to display the Go input
if (showGoInput) {
if (formatGoInput) {
formattedString = self.replaceVariables(formatGoInput, {
currentPage: currentPage,
totalPage: totalPage,
totalNumber: totalNumber,
input: goInput,
});
html += '<div class="' + classPrefix + '-go-input">' + formattedString + '</div>';
}
}
// Whether to display the Go button
if (showGoButton) {
if (formatGoButton) {
formattedString = self.replaceVariables(formatGoButton, {
currentPage: currentPage,
totalPage: totalPage,
totalNumber: totalNumber,
button: goButton,
});
html += '<div class="' + classPrefix + '-go-button">' + formattedString + '</div>';
}
}
// Whether to display footer
if (footer) {
formattedString = self.replaceVariables(footer, {
currentPage: currentPage,
totalPage: totalPage,
totalNumber: totalNumber,
});
html += formattedString;
}
return html;
},
// Find totalNumber from the remote response
// Only available in asynchronous mode
findTotalNumberFromRemoteResponse: function (response) {
var self = this;
self.model.totalNumber = attributes.totalNumberLocator(response);
},
// Go to the specified page
go: function (number, callback) {
var self = this;
var model = self.model;
if (self.disabled) return;
var pageNumber = number;
pageNumber = parseInt(pageNumber);
// Page number is out of bounds
if (!pageNumber || pageNumber < 1) return;
var pageSize = attributes.pageSize;
var totalNumber = self.getTotalNumber();
var totalPage = self.getTotalPage();
// Page number is out of bounds
if (totalNumber > 0) {
if (pageNumber > totalPage) return;
}
// Pick data fragment in synchronous mode
if (!self.isAsync) {
render(self.getDataFragment(pageNumber));
return;
}
var postData = {};
var alias = attributes.alias || {};
postData[alias.pageSize ? alias.pageSize : 'pageSize'] = pageSize;
postData[alias.pageNumber ? alias.pageNumber : 'pageNumber'] = pageNumber;
var ajaxParams = $.isFunction(attributes.ajax) ? attributes.ajax() : attributes.ajax;
var formatAjaxParams = {
type: 'get',
cache: false,
data: {},
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
dataType: 'json',
async: true,
};
$.extend(true, formatAjaxParams, ajaxParams);
$.extend(formatAjaxParams.data, postData);
formatAjaxParams.url = attributes.dataSource;
formatAjaxParams.success = function (response) {
if (self.isDynamicTotalNumber) {
self.findTotalNumberFromRemoteResponse(response);
} else {
self.model.totalNumber = attributes.totalNumber;
}
var finalData = self.filterDataByLocator(response);
render(finalData);
};
formatAjaxParams.error = function (jqXHR, textStatus, errorThrown) {
attributes.formatAjaxError && attributes.formatAjaxError(jqXHR, textStatus, errorThrown);
self.enable();
};
self.disable();
$.ajax(formatAjaxParams);
function render(data) {
// Will be invoked before paging
if (self.callHook('beforePaging', pageNumber) === false) return false;
// Pagination direction
model.direction = typeof model.pageNumber === 'undefined' ? 0 : pageNumber > model.pageNumber ? 1 : -1;
model.pageNumber = pageNumber;
self.render();
if (self.disabled && self.isAsync) {
// enable pagination
self.enable();
}
// cache model data
container.data('pagination').model = model;
// format result data before callback invoked
if (attributes.formatResult) {
var cloneData = $.extend(true, [], data);
if (!Helpers.isArray((data = attributes.formatResult(cloneData)))) {
data = cloneData;
}
}
container.data('pagination').currentPageData = data;
// invoke callback
self.doCallback(data, callback);
self.callHook('afterPaging', pageNumber);
// pageNumber now is the first page
if (pageNumber === 1) {
self.callHook('afterIsFirstPage');
}
// pageNumber now is the last page
if (pageNumber === self.getTotalPage()) {
self.callHook('afterIsLastPage');
}
}
},
doCallback: function (data, customCallback) {
var self = this;
var model = self.model;
if ($.isFunction(customCallback)) {
customCallback(data, model);
} else if ($.isFunction(attributes.callback)) {
attributes.callback(data, model);
}
},
destroy: function () {
// Before destroy
if (this.callHook('beforeDestroy') === false) return;
this.model.el.remove();
container.off();
// Remove style element
$('#paginationjs-style').remove();
// After destroyed
this.callHook('afterDestroy');
},
previous: function (callback) {
this.go(this.model.pageNumber - 1, callback);
},
next: function (callback) {
this.go(this.model.pageNumber + 1, callback);
},
disable: function () {
var self = this;
var source = self.isAsync ? 'async' : 'sync';
// Before disabled
if (self.callHook('beforeDisable', source) === false) return;
self.disabled = true;
self.model.disabled = true;
// After disabled
self.callHook('afterDisable', source);
},
enable: function () {
var self = this;
var source = self.isAsync ? 'async' : 'sync';
// Before enabled
if (self.callHook('beforeEnable', source) === false) return;
self.disabled = false;
self.model.disabled = false;
// After enabled
self.callHook('afterEnable', source);
},
refresh: function (callback) {
this.go(this.model.pageNumber, callback);
},
show: function () {
var self = this;
if (self.model.el.is(':visible')) return;
self.model.el.show();
},
hide: function () {
var self = this;
if (!self.model.el.is(':visible')) return;
self.model.el.hide();
},
// Parse variables in the template
replaceVariables: function (template, variables) {
var formattedString;
for (var key in variables) {
var value = variables[key];
var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img');
formattedString = (formattedString || template).replace(regexp, value);
}
return formattedString;
},
// Get data fragment
getDataFragment: function (number) {
var pageSize = attributes.pageSize;
var dataSource = attributes.dataSource;
var totalNumber = this.getTotalNumber();
var start = pageSize * (number - 1) + 1;
var end = Math.min(number * pageSize, totalNumber);
return dataSource.slice(start - 1, end);
},
// Get total number
getTotalNumber: function () {
return this.model.totalNumber || attributes.totalNumber || 0;
},
// Get total page
getTotalPage: function () {
return Math.ceil(this.getTotalNumber() / attributes.pageSize);
},
// Get locator
getLocator: function (locator) {
var result;
if (typeof locator === 'string') {
result = locator;
} else if ($.isFunction(locator)) {
result = locator();
} else {
throwError('"locator" is incorrect. (String | Function)');
}
return result;
},
// Filter data by "locator"
filterDataByLocator: function (dataSource) {
var locator = this.getLocator(attributes.locator);
var filteredData;
// Datasource is an Object, use "locator" to locate the true data
if (Helpers.isObject(dataSource)) {
try {
$.each(locator.split('.'), function (index, item) {
filteredData = (filteredData ? filteredData : dataSource)[item];
});
} catch (e) {}
if (!filteredData) {
throwError('dataSource.' + locator + ' is undefined.');
} else if (!Helpers.isArray(filteredData)) {
throwError('dataSource.' + locator + ' must be an Array.');
}
}
return filteredData || dataSource;
},
// Parse dataSource
parseDataSource: function (dataSource, callback) {
var self = this;
if (Helpers.isObject(dataSource)) {
callback((attributes.dataSource = self.filterDataByLocator(dataSource)));
} else if (Helpers.isArray(dataSource)) {
callback((attributes.dataSource = dataSource));
} else if ($.isFunction(dataSource)) {
attributes.dataSource(function (data) {
if (!Helpers.isArray(data)) {
throwError('The parameter of "done" Function should be an Array.');
}
self.parseDataSource.call(self, data, callback);
});
} else if (typeof dataSource === 'string') {
if (/^https?|file:/.test(dataSource)) {
attributes.ajaxDataType = 'jsonp';
}
callback(dataSource);
} else {
throwError('Unexpected type of "dataSource".');
}
},
callHook: function (hook) {
var paginationData = container.data('pagination');
var result;
var args = Array.prototype.slice.apply(arguments);
args.shift();
if (attributes[hook] && $.isFunction(attributes[hook])) {
if (attributes[hook].apply(global, args) === false) {
result = false;
}
}
if (paginationData.hooks && paginationData.hooks[hook]) {
$.each(paginationData.hooks[hook], function (index, item) {
if (item.apply(global, args) === false) {
result = false;
}
});
}
return result !== false;
},
observer: function () {
var self = this;
var el = self.model.el;
// Go to specified page number
container.on(eventPrefix + 'go', function (event, pageNumber, done) {
pageNumber = parseInt($.trim(pageNumber));
if (!pageNumber) return;
if (!$.isNumeric(pageNumber)) {
throwError('"pageNumber" is incorrect. (Number)');
}
self.go(pageNumber, done);
});
// Page number button click
el.delegate('.J-paginationjs-page', 'click', function (event) {
var current = $(event.currentTarget);
var pageNumber = $.trim(current.attr('data-num'));
if (!pageNumber || current.hasClass(attributes.disableClassName) || current.hasClass(attributes.activeClassName)) return;
// Before page button clicked
if (self.callHook('beforePageOnClick', event, pageNumber) === false) return false;
self.go(pageNumber);
// After page button clicked
self.callHook('afterPageOnClick', event, pageNumber);
if (!attributes.pageLink) return false;
});
// Previous button click
el.delegate('.J-paginationjs-previous', 'click', function (event) {
var current = $(event.currentTarget);
var pageNumber = $.trim(current.attr('data-num'));
if (!pageNumber || current.hasClass(attributes.disableClassName)) return;
// Before previous clicked
if (self.callHook('beforePreviousOnClick', event, pageNumber) === false) return false;
self.go(pageNumber);
// After previous clicked
self.callHook('afterPreviousOnClick', event, pageNumber);
if (!attributes.pageLink) return false;
});
// Next button click
el.delegate('.J-paginationjs-next', 'click', function (event) {
var current = $(event.currentTarget);
var pageNumber = $.trim(current.attr('data-num'));
if (!pageNumber || current.hasClass(attributes.disableClassName)) return;
// Before next clicked
if (self.callHook('beforeNextOnClick', event, pageNumber) === false) return false;
self.go(pageNumber);
// After next clicked
self.callHook('afterNextOnClick', event, pageNumber);
if (!attributes.pageLink) return false;
});
// Go button click
el.delegate('.J-paginationjs-go-button', 'click', function (event) {
var pageNumber = $('.J-paginationjs-go-pagenumber', el).val();
// Before Go button clicked
if (self.callHook('beforeGoButtonOnClick', event, pageNumber) === false) return false;
container.trigger(eventPrefix + 'go', pageNumber);
// After Go button clicked
self.callHook('afterGoButtonOnClick', event, pageNumber);
});
// go input enter
el.delegate('.J-paginationjs-go-pagenumber', 'keyup', function (event) {
if (event.which === 13) {
var pageNumber = $(event.currentTarget).val();
// Before Go input enter
if (self.callHook('beforeGoInputOnEnter', event, pageNumber) === false) return false;
container.trigger(eventPrefix + 'go', pageNumber);
// Regains focus
$('.J-paginationjs-go-pagenumber', el).focus();
// After Go input enter
self.callHook('afterGoInputOnEnter', event, pageNumber);
}
});
// Previous page
container.on(eventPrefix + 'previous', function (event, done) {
self.previous(done);
});
// Next page
container.on(eventPrefix + 'next', function (event, done) {
self.next(done);
});
// Disable
container.on(eventPrefix + 'disable', function () {
self.disable();
});
// Enable
container.on(eventPrefix + 'enable', function () {
self.enable();
});
// Refresh
container.on(eventPrefix + 'refresh', function (event, done) {
self.refresh(done);
});
// Show
container.on(eventPrefix + 'show', function () {
self.show();
});
// Hide
container.on(eventPrefix + 'hide', function () {
self.hide();
});
// Destroy
container.on(eventPrefix + 'destroy', function () {
self.destroy();
});
// Whether to load the default page
var validTotalPage = Math.max(self.getTotalPage(), 1);
var defaultPageNumber = attributes.pageNumber;
// Default pageNumber should be 1 when totalNumber is dynamic
if (self.isDynamicTotalNumber) {
defaultPageNumber = 1;
}
if (attributes.triggerPagingOnInit) {
container.trigger(eventPrefix + 'go', Math.min(defaultPageNumber, validTotalPage));
}
},
};
// Pagination has been initialized
if (container.data('pagination') && container.data('pagination').initialized === true) {
// Handle events
if ($.isNumeric(options)) {
// eg: container.pagination(5)
container.trigger.call(this, eventPrefix + 'go', options, arguments[1]);
return this;
} else if (typeof options === 'string') {
var args = Array.prototype.slice.apply(arguments);
args[0] = eventPrefix + args[0];
switch (options) {
case 'previous':
case 'next':
case 'go':
case 'disable':
case 'enable':
case 'refresh':
case 'show':
case 'hide':
case 'destroy':
container.trigger.apply(this, args);
break;
// Get selected page number
case 'getSelectedPageNum':
if (container.data('pagination').model) {
return container.data('pagination').model.pageNumber;
} else {
return container.data('pagination').attributes.pageNumber;
}
// Get total page
case 'getTotalPage':
return Math.ceil(container.data('pagination').model.totalNumber / container.data('pagination').model.pageSize);
// Get data of selected page
case 'getSelectedPageData':
return container.data('pagination').currentPageData;
// Whether pagination has been disabled
case 'isDisabled':
return container.data('pagination').model.disabled === true;
default:
throwError('Unknown action: ' + options);
}
return this;
} else {
// Uninstall the old instance before initializing a new one
uninstallPlugin(container);
}
} else {
if (!Helpers.isObject(options)) throwError('Illegal options');
}
// Check parameters
parameterChecker(attributes);
pagination.initialize();
return this;
};
// Instance defaults
$.fn[pluginName].defaults = {
// Data source
// Array | String | Function | Object
//dataSource: '',
// String | Function
//locator: 'data',
// Find totalNumber from remote response, the totalNumber will be ignored when totalNumberLocator is specified
// Function
//totalNumberLocator: function() {},
// Total entries
totalNumber: 0,
// Default page
pageNumber: 1,
// entries of per page
pageSize: 10,
// Page range (pages on both sides of the current page)
pageRange: 2,
// Whether to display the 'Previous' button
showPrevious: true,
// Whether to display the 'Next' button
showNext: true,
// Whether to display the page buttons
showPageNumbers: true,
showNavigator: false,
// Whether to display the 'Go' input
showGoInput: false,
// Whether to display the 'Go' button
showGoButton: false,
// Page link
pageLink: '',
// Page link Class
pageLinkClass: '',
// Custom link Class
customLinkClass: '',
// 'Previous' text
prevText: '«',
// 'Next' text
nextText: '»',
// 'Previous' text title
prevTextTitle: 'Previous page',
// 'Next' text title
nextTextTitle: 'Next page',
// Ellipsis text
ellipsisText: '...',
// 'Go' button text
goButtonText: 'Go',
// Additional className for Pagination element
//className: '',
classPrefix: 'paginationjs',
// Default active class
activeClassName: 'active',
// Custom active class
customActiveClass: '',
// Custom page link active class
customPageLinkActiveClass: '',
// Default disable class
disableClassName: 'disabled',
//ulClassName: '',
// Whether to insert inline style
inlineStyle: true,
formatNavigator: '<%= currentPage %> / <%= totalPage %>',
formatGoInput: '<%= input %>',
formatGoButton: '<%= button %>',
// Pagination element's position in the container
position: 'bottom',
// Auto hide previous button when current page is the first page
autoHidePrevious: false,
// Auto hide next button when current page is the last page
autoHideNext: false,
//header: '',
//footer: '',
// Aliases for custom pagination parameters
//alias: {},
// Whether to trigger pagination at initialization
triggerPagingOnInit: true,
// Whether to hide pagination when less than one page
hideWhenLessThanOnePage: false,
showFirstOnEllipsisShow: true,
showLastOnEllipsisShow: true,
// Pagination callback
callback: function () {},
};
// Hook register
$.fn[pluginHookMethod] = function (hook, callback) {
if (arguments.length < 2) {
throwError('Missing argument.');
}
if (!$.isFunction(callback)) {
throwError('callback must be a function.');
}
var container = $(this);
var paginationData = container.data('pagination');
if (!paginationData) {
container.data('pagination', {});
paginationData = container.data('pagination');
}
!paginationData.hooks && (paginationData.hooks = {});
//paginationData.hooks[hook] = callback;
paginationData.hooks[hook] = paginationData.hooks[hook] || [];
paginationData.hooks[hook].push(callback);
};
// Static method
$[pluginName] = function (selector, options) {
if (arguments.length < 2) {
throwError('Requires two parameters.');
}
var container;
// 'selector' is a jQuery object
if (typeof selector !== 'string' && selector instanceof jQuery) {
container = selector;
} else {
container = $(selector);
}
if (!container.length) return;
container.pagination(options);
return container;
};
// ============================================================
// helpers
// ============================================================
var Helpers = {};
// Throw error
function throwError(content) {
throw new Error('Pagination: ' + content);
}
// Check parameters
function parameterChecker(args) {
if (!args.dataSource) {
throwError('"dataSource" is required.');
}
if (typeof args.dataSource === 'string') {
if (args.totalNumberLocator === undefined) {
if (args.totalNumber === undefined) {
throwError('"totalNumber" is required.');
} else if (!$.isNumeric(args.totalNumber)) {
throwError('"totalNumber" is incorrect. (Number)');
}
} else {
if (!$.isFunction(args.totalNumberLocator)) {
throwError('"totalNumberLocator" should be a Function.');
}
}
} else if (Helpers.isObject(args.dataSource)) {
if (typeof args.locator === 'undefined') {
throwError('"dataSource" is an Object, please specify "locator".');
} else if (typeof args.locator !== 'string' && !$.isFunction(args.locator)) {
throwError('' + args.locator + ' is incorrect. (String | Function)');
}
}
if (args.formatResult !== undefined && !$.isFunction(args.formatResult)) {
throwError('"formatResult" should be a Function.');
}
}
// uninstall plugin
function uninstallPlugin(target) {
var events = ['go', 'previous', 'next', 'disable', 'enable', 'refresh', 'show', 'hide', 'destroy'];
// off events of old instance
$.each(events, function (index, value) {
target.off(eventPrefix + value);
});
// reset pagination data
target.data('pagination', {});
// remove old
$('.paginationjs', target).remove();
}
// Object type detection
function getObjectType(object, tmp) {
return ((tmp = typeof object) === 'object' ? (object === null && 'null') || Object.prototype.toString.call(object).slice(8, -1) : tmp).toLowerCase();
}
$.each(['Object', 'Array', 'String'], function (index, name) {
Helpers['is' + name] = function (object) {
return getObjectType(object) === name.toLowerCase();
};
});
/*
* export via AMD or CommonJS
* */
if (typeof define === 'function' && define.amd) {
define(function () {
return $;
});
}
})(this, window.jQuery);
</script>
<script>
/* CICILAN FUNCTION */
//filtering dan sorting seluruh item cicilan
function sort_date(a, b) {
var amyDate = a.split('-');
var aNewDate = new Date(amyDate[1] + ',' + amyDate[0] + ',' + amyDate[2]).getTime();
var bmyDate = b.split('-');
var bNewDate = new Date(bmyDate[1] + ',' + bmyDate[0] + ',' + bmyDate[2]).getTime();
return aNewDate < bNewDate ? -1 : aNewDate > bNewDate ? 1 : 0;
}
function get_items(item_cicilan) {
var show_items = [];
for (var z = 0; z < item_cicilan.length; z++) {
var items = $('.promo__item[counter=' + z + ']')[0];
show_items.push(items);
}
return show_items;
}
function check_slick() {
var body_width = $('body').width() * 0.97;
// console.log("scrollwidth: " + $(".filtered-wrap").get(0).scrollWidth + " || width: " + body_width);
if ($('.filtered-wrap').get(0).scrollWidth > body_width) {
if ($('#sebelum').length == 0) {
$('.filtered-wrap').prepend(
"<img id='sebelum' src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/left_arrow.svg' onclick='$(\".filtered-wrap\").animate({scrollLeft: -900}, 300)'>"
);
$('.filtered-wrap').append(
"<img id='sesudah' src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/right_arrow.svg' onclick='$(\".filtered-wrap\").animate({scrollLeft: 900}, 300)'>"
);
}
$('.filtered-wrap').addClass('showing');
} else {
$('#sebelum').remove();
$('#sesudah').remove();
$('.filtered-wrap').removeClass('showing');
}
}
function geser(paramny) {
var max_scroll = 1716;
var jumlah_ulang = 1716 / $('body').width();
// console.log("jumlah_ulang raw: " + jumlah_ulang);
// console.log("jumlah_ulang : " + Math.ceil(jumlah_ulang));
var jumlah_ulang_fix = Math.ceil(jumlah_ulang);
var gesers = 0;
var page = $('.filtered-wrap').attr('page');
var scrollwidth = Math.ceil($('.filtered-wrap').get(0).scrollWidth / $('body').width());
// console.log("scrollwidth: " + scrollwidth);
if (paramny == 'sebelum') {
if (parseInt(page) > 1 && parseInt(page) <= scrollwidth) {
gesers = (parseInt(page) - 2) * $('body').width() * 0.9;
// console.log("sebelum gesers: " + gesers);
$('.filtered-wrap').attr('style', 'transform: translate3d(-' + gesers + 'px, 0px, 0px);');
var newpage = parseInt(page) - 1;
$('.filtered-wrap').attr('page', String(newpage));
}
if (parseInt(page) > scrollwidth) {
$('.filtered-wrap').attr('style', 'transform: translate3d(0px, 0px, 0px);');
var newpage = parseInt(page) - 1;
$('.filtered-wrap').attr('page', String(newpage));
}
if (page == '1') {
$('.filtered-wrap').attr('style', 'transform: translate3d(0px, 0px, 0px);');
$('.filtered-wrap').attr('page', '1');
}
// console.log("masuk sebelum!");
}
if (paramny == 'sesudah' && parseInt(page) < scrollwidth) {
if (parseInt(page) <= parseInt(jumlah_ulang)) {
gesers = parseInt(page) * $('body').width() * 0.9;
$('.filtered-wrap').attr('style', 'transform: translate3d(-' + gesers + 'px, 0px, 0px);');
var newpage = parseInt(page) + 1;
$('.filtered-wrap').attr('page', String(newpage));
}
// console.log("masuk setelah!");
}
}
function check_slick_mobile() {
var body_width = $('body').width() * 0.99;
// console.log("scrollwidth: " + $(".filtered-wrap").get(0).scrollWidth + " || width: " + body_width);
if ($('.filtered-wrap').get(0).scrollWidth > body_width) {
if ($('#sebelum').length == 0) {
$('.filtered-wrap').attr('page', '1');
$('.outer-filtered-wrap').prepend(
"<img id='sebelum' onclick='geser(\"sebelum\");' src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/left_arrow.svg'>"
);
$('.outer-filtered-wrap').append(
"<img id='sesudah' onclick='geser(\"sesudah\");' src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/right_arrow.svg'>"
);
}
$('.filtered-wrap').addClass('showing');
} else {
$('#sebelum').remove();
$('#sesudah').remove();
$('.filtered-wrap').removeClass('showing');
}
}
function check_kosong() {
var kosong = $('.promo__item.show.d-none').length;
if (kosong == $('.promo__item').length) {
$('.no-data.img-no-data').removeClass('d-none');
$('.paginationjs-pages').addClass('d-none');
} else {
$('.no-data.img-no-data').addClass('d-none');
$('.paginationjs-pages').removeClass('d-none');
}
}
$('#click_filter').click(function () {
$('#filters').removeClass('tutup');
$('#filters').addClass('buka');
if ($('#sortings').attr('class').includes('buka')) {
$('#sortings').removeClass('buka');
$('#sortings').addClass('tutup');
$('#sortings').css('animation', 'close_filter 1s linear 1');
}
$('#filters').css('animation', 'open_filter 1s linear 1');
});
$('#sorting_click').click(function () {
$('#sortings').removeClass('tutup');
$('#sortings').addClass('buka');
if ($('#filters').attr('class').includes('buka')) {
$('#filters').removeClass('buka');
$('#filters').addClass('tutup');
$('#filters').css('animation', 'close_filter 1s linear 1');
}
$('#sortings').css('animation', 'open_filter 1s linear 1');
});
$('#selesai_filters').on('click', function () {
$('#filters').css('animation', 'close_filter 1s linear 1');
$('#filters').removeClass('buka');
$('#filters').addClass('tutup');
});
$('#selesai_sortings').on('click', function () {
$('#sortings').css('animation', 'close_filter 1s linear 1');
$('#sortings').removeClass('buka');
$('#sortings').addClass('tutup');
});
document.getElementById('filters_close').addEventListener('touchstart', handleTouchStart, false);
document.getElementById('filters_close').addEventListener('touchmove', handleTouchMove, false);
document.getElementById('sortings_close').addEventListener('touchstart', handleTouchStart, false);
document.getElementById('sortings_close').addEventListener('touchmove', handleTouchMove2, false);
var xDown = null;
var yDown = null;
function getTouches(evt) {
return (
evt.touches || // browser API
evt.originalEvent.touches
); // jQuery
}
function handleTouchStart(evt) {
const firstTouch = getTouches(evt)[0];
xDown = firstTouch.clientX;
yDown = firstTouch.clientY;
}
function handleTouchMove(evt) {
if (!xDown || !yDown) {
return;
}
var xUp = evt.touches[0].clientX;
var yUp = evt.touches[0].clientY;
var xDiff = xDown - xUp;
var yDiff = yDown - yUp;
if (Math.abs(xDiff) > Math.abs(yDiff)) {
/*most significant*/
if (xDiff > 0) {
/* left swipe */
} else {
/* right swipe */
}
} else {
if (yDiff > 0) {
/* up swipe */
} else {
/* down swipe */
$('#filters').css('animation', 'close_filter 1s linear 1');
$('#filters').removeClass('buka');
$('#filters').addClass('tutup');
}
}
/* reset values */
xDown = null;
yDown = null;
}
function handleTouchMove2(evt) {
if (!xDown || !yDown) {
return;
}
var xUp = evt.touches[0].clientX;
var yUp = evt.touches[0].clientY;
var xDiff = xDown - xUp;
var yDiff = yDown - yUp;
if (Math.abs(xDiff) > Math.abs(yDiff)) {
/*most significant*/
if (xDiff > 0) {
/* left swipe */
} else {
/* right swipe */
}
} else {
if (yDiff > 0) {
/* up swipe */
} else {
$('#sortings').css('animation', 'close_filter 1s linear 1');
$('#sortings').removeClass('buka');
$('#sortings').addClass('tutup');
}
}
/* reset values */
xDown = null;
yDown = null;
}
$('.sorts_option').click(function () {
var kelas_list = $(this).attr('class');
if (kelas_list.includes('aktif')) {
} else {
$('.sorts_option').removeClass('aktif');
$(this).addClass('aktif');
}
load_cicilan_items_mobile();
});
$('.sorts_option2').click(function () {
var kelas_list = $(this).attr('class');
if (kelas_list.includes('aktif')) {
} else {
$('.sorts_option2').removeClass('aktif');
$('#filter_desktop').html($(this).html() + " <img src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/arrowdown_icon.svg'>");
$(this).addClass('aktif');
}
load_cicilan_items();
});
//in
$('#filter_desktop,#filter_desktop_content').mouseenter(function () {
$('#filter_desktop_content').removeClass('tutup');
$('#filter_desktop_content').addClass('buka');
});
$('#filter_desktop,#filter_desktop_content').mouseleave(function () {
$('#filter_desktop_content').removeClass('buka');
$('#filter_desktop_content').addClass('tutup');
});
/*=============================== */
(function () {
var supportTouch = $.support.touch,
scrollEvent = 'touchmove scroll',
touchStartEvent = supportTouch ? 'touchstart' : 'mousedown',
touchStopEvent = supportTouch ? 'touchend' : 'mouseup',
touchMoveEvent = supportTouch ? 'touchmove' : 'mousemove';
$.event.special.swipeupdown = {
setup: function () {
var thisObject = this;
var $this = $(thisObject);
$this.bind(touchStartEvent, function (event) {
var data = event.originalEvent.touches ? event.originalEvent.touches[0] : event,
start = {
time: new Date().getTime(),
coords: [data.pageX, data.pageY],
origin: $(event.target),
},
stop;
function moveHandler(event) {
if (!start) {
return;
}
var data = event.originalEvent.touches ? event.originalEvent.touches[0] : event;
stop = {
time: new Date().getTime(),
coords: [data.pageX, data.pageY],
};
// prevent scrolling
if (Math.abs(start.coords[1] - stop.coords[1]) > 10) {
event.preventDefault();
}
}
$this.bind(touchMoveEvent, moveHandler).one(touchStopEvent, function (event) {
$this.unbind(touchMoveEvent, moveHandler);
if (start && stop) {
if (stop.time - start.time < 1000 && Math.abs(start.coords[1] - stop.coords[1]) > 30 && Math.abs(start.coords[0] - stop.coords[0]) < 75) {
start.origin.trigger('swipeupdown').trigger(start.coords[1] > stop.coords[1] ? 'swipeup' : 'swipedown');
}
}
start = stop = undefined;
});
});
},
};
$.each(
{
swipedown: 'swipeupdown',
swipeup: 'swipeupdown',
},
function (event, sourceEvent) {
$.event.special[event] = {
setup: function () {
$(this).bind(sourceEvent, $.noop);
},
};
}
);
})();
function filterSelection(c) {
var x, i;
var filterValue = document.getElementById('filter').value;
var countShow = 0;
var noDataElement = document.getElementsByClassName('no-data');
var dataPromoElement = document.getElementById('data_promo');
var paginationArea = document.getElementById('pagination-area');
//console.log(filterValue);
x = document.getElementsByClassName('promo__item');
if (c === 'semua') {
c = '';
}
for (i = 0; i < x.length; i++) {
//console.log(x[i]);
promoRemoveClass(x[i], 'show');
if (x[i].className.indexOf(c) > -1) {
promoAddClass(x[i], 'show');
countShow++;
if (filterValue) {
//console.log(true);
if (x[i].getAttribute('data-type') !== filterValue) {
promoRemoveClass(x[i], 'show');
//promoAddClass(x[i], "show");
countShow--;
}
} else {
//console.log(true);
}
}
}
if (countShow === 0) {
// if no data show
// hide data_promo
dataPromoElement.classList.add('d-none');
paginationArea.classList.add('d-none');
// show no data
noDataElement[0].classList.add('d-block');
} else {
// show data_promo
dataPromoElement.classList.remove('d-none');
paginationArea.classList.remove('d-none');
// hide no data
noDataElement[0].classList.remove('d-block');
}
//console.log('data yang ditampilkan: ' + countShow);
// init pagination
initPagination();
}
// show filtered elements
function promoAddClass(element, name) {
var i, arr1, arr2;
arr1 = element.className.split(' ');
arr2 = name.split(' ');
for (i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) === -1) {
element.className += ' ' + arr2[i];
}
}
}
// hide elements that are not selected
function promoRemoveClass(element, name) {
var i, arr1, arr2;
arr1 = element.className.split(' ');
arr2 = name.split(' ');
for (i = 0; i < arr2.length; i++) {
while (arr1.indexOf(arr2[i]) > -1) {
arr1.splice(arr1.indexOf(arr2[i]), 1);
}
}
element.className = arr1.join(' ');
}
function resetFilterDropDown() {
document.getElementById('filter').selectedIndex = 0;
//document.getElementById('filter').value = null;
}
function initPagination() {
const container = $('#pagination');
var promo__item = document.querySelectorAll('.promo__item');
var promo__itemShow = document.querySelectorAll('.promo__item.show');
//console.log(promo__item);
var countPromo__item = 0;
if (promo__item.length) {
for (var idx = 0, max = promo__item.length; idx < max; idx++) {
promo__item[idx].style.display = 'none';
if (promo__item[idx].classList.contains('show')) {
countPromo__item++;
//console.log('promo__itemShow: ' + promo__itemShow[idx]);
}
}
//console.log(countPromo__item);
}
var sources = (function () {
var result = [];
for (var i = 0; i < countPromo__item; i++) {
result.push(i);
}
return result;
})();
//console.log(sources);
var options = {
dataSource: sources,
callback: function (response, pagination) {
//window.console && console.log(response, pagination);
if (promo__itemShow.length) {
for (var idx = 0, max = promo__itemShow.length; idx < max; idx++) {
promo__itemShow[idx].style.display = 'none';
}
}
$.each(response, function (item, index) {
promo__itemShow[index].style.display = 'block';
});
},
pageSize: 9,
prevText: 'Sebelumnya',
nextText: 'Selanjutnya',
prevTextTitle: 'Halaman sebelumnya',
nextTextTitle: 'Halaman selanjutnya',
classPrefix: ' paginationjs',
pageLinkClass: '',
customLinkClass: '',
customActiveClass: '',
customPageLinkActiveClass: 'bg-custom-orange border-custom-orange',
//ulClassName: 'pagination m-0',
};
container.addHook('beforeInit', function () {
// window.console && console.log('beforeInit...');
});
//$.pagination(container, options);
container.pagination(options);
container.addHook('beforePageOnClick', function () {
// window.console && console.log('beforePageOnClick...');
//return false
});
}
// if page show data_promo class
if (document.getElementById('data_promo')) {
filterSelection('semua');
}
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
// document ready
//console.log('javascript ready');
// if page show data_promo class
if (document.getElementById('data_promo')) {
var btnContainer = document.getElementById('myBtnContainer');
var btns = btnContainer.getElementsByClassName('btn');
var current = btnContainer.getElementsByClassName('active');
// add active class to the current button (highlight it)
if (btns.length) {
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener('click', function () {
// reset select option to default
resetFilterDropDown();
current[0].classList.remove('active');
filterSelection(this.getAttribute('data-value'));
this.classList.add('active');
});
}
}
document.getElementById('filter').addEventListener('change', function () {
if (btns.length) {
if (current[0].classList.contains('active')) {
filterSelection(current[0].getAttribute('data-value'));
}
}
});
}
}
};
</script>
<script>
function close_the_filter(checkbox_class, the_val, img_class, icon_class, which_check) {
$(checkbox_class + "[value='" + the_val + "']").prop('checked', false);
$(checkbox_class + ':checked').length > 0 ? ($(img_class).show(), $(icon_class).hide()) : ($(img_class).hide(), $(icon_class).show());
count_selected(which_check, checkbox_class);
load_cicilan_items();
}
//cek apakah terpilih semua atau tidak. mengatur tulisan button (pilih semua atau hapus semua)
function count_selected(which_check, checkbox_class) {
var check = $(checkbox_class + ':checked').length;
var semua = $(checkbox_class).length;
if (check == 0) {
$(which_check).html('Pilih Semua');
} else if (check < semua) {
$(which_check).html('Pilih Semua');
} else {
$(which_check).html('Hapus Semua');
}
}
function load_cicilan_items() {
var item_cicilan = [];
var count_item = $('.promo__item').length;
for (var x = 0; x < count_item; x++) {
var get_id = $('.promo__item[counter=' + x + ']').attr('counter');
var get_produk = $('.promo__item[counter=' + x + ']').attr('produk');
var get_cicilan = $('.promo__item[counter=' + x + ']').attr('cicilan');
var get_partner = $('.promo__item[counter=' + x + ']').attr('partner');
var get_kode = $('.promo__item[counter=' + x + ']').attr('kode');
var get_tgl_start = $('.promo__item[counter=' + x + ']').attr('tgl_start');
var obj = {
id: get_id,
produk: get_produk,
cicilan: get_cicilan,
partner: get_partner,
kode: get_kode,
tgl_start: get_tgl_start,
};
item_cicilan.push(obj);
$('.promo__item[counter=' + x + ']').attr('style', 'display: block !important;');
if (
$('.promo__item[counter=' + x + ']')
.attr('class')
.includes('none')
) {
$('.promo__item[counter=' + x + ']').removeClass('d-none');
$('.promo__item[counter=' + x + ']').addClass('d-block');
}
}
sorting_cicilan_items(item_cicilan);
//list produk yang ada
var produk_list = [];
$('.checkbox_class_produk').each(function () {
produk_list.push($(this).attr('value'));
});
//list cicilan yang ada
var cicilan_list = [];
$('.checkbox_class_cicilan').each(function () {
cicilan_list.push($(this).attr('value'));
});
//list partner yang ada
$('.checkbox_class_cicilan').each(function () {
cicilan_list.push($(this).attr('value'));
});
//menyimpan id/counter item cicilan yang masuk filtering
var produk_pilih = filter_cek_produk(); //array yang terpilih
var cicilan_pilih = filter_cek_cicilan();
var partner_pilih = filter_cek_partner();
//loop seluruh item cicilan
for (var y = 0; y < count_item; y++) {
var yes_produk = false;
var yes_cicilan = false;
var yes_partner = false;
//PRODUK
if (produk_pilih.length == 0) {
//belum dicentang produknya
yes_produk = true;
} else {
//sudah ada yang dicentang produknya
var prod_ini = item_cicilan[y]['produk'].split(' ');
for (var a = 0; a < prod_ini.length; a++) {
if (produk_pilih.includes(prod_ini[a])) {
yes_produk = true;
break;
}
}
}
if (!yes_produk) {
if ($(`[counter=${y}]`).attr('style').includes('block') || $(`[counter=${y}]`).attr('class').includes('d-block')) {
$(`[counter=${y}]`).removeClass('d-block');
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
} else {
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
}
continue;
}
//CICILAN
if (cicilan_pilih.length == 0) {
//belum dicentang cicilannya
yes_cicilan = true;
} else {
var cicilan_ini = item_cicilan[y]['cicilan'].split(' - ');
if (cicilan_ini.length == 2) {
var start_cicil = parseInt(cicilan_ini[0].replace('x', ''));
var end_cicil = parseInt(cicilan_ini[1].replace('x', ''));
for (var b = 0; b < cicilan_pilih.length; b++) {
var angka_cicil_pilih = parseInt(cicilan_pilih[b].replace('x', ''));
if (angka_cicil_pilih >= start_cicil && angka_cicil_pilih <= end_cicil) {
yes_cicilan = true;
}
}
} else {
for (var b = 0; b < cicilan_pilih.length; b++) {
if (cicilan_ini[0] == cicilan_pilih[b]) {
yes_cicilan = true;
}
}
}
}
if (!yes_cicilan) {
if ($(`[counter=${y}]`).attr('style').includes('block') || $(`[counter=${y}]`).attr('class').includes('d-block')) {
$(`[counter=${y}]`).removeClass('d-block');
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
} else {
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
}
continue;
}
//PARTNER
if (partner_pilih.length == 0) {
//belum dicentang partnernya
yes_partner = true;
} else {
var partner_ini = item_cicilan[y]['partner'];
for (var c = 0; c < partner_pilih.length; c++) {
if (partner_pilih[c] === partner_ini) {
yes_partner = true;
break;
}
}
}
if (!yes_partner) {
if ($(`[counter=${y}]`).attr('style').includes('block') || $(`[counter=${y}]`).attr('class').includes('d-block')) {
$(`[counter=${y}]`).removeClass('d-block');
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
} else {
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
}
continue;
}
}
//cicilan selection
initPagination();
check_kosong();
check_slick();
cek_all_hapus_semua();
}
function cek_all_hapus_semua() {
var checked_prod = $('.checkbox_class_produk:checked').length;
var checked_cicil = $('.checkbox_class_cicilan:checked').length;
var checked_partner = $('.checkbox_class_partner:checked').length;
var jumlah = checked_prod + checked_cicil + checked_partner;
if (jumlah == 0) {
$('.btn-hapus-semua').hide();
} else {
$('.btn-hapus-semua').show();
}
}
function sorting_cicilan_items(item_cicilan) {
var obj_cicilan = get_items(item_cicilan);
//var sort_pilih = $("#filter").val();
var sort_pilih = $('.sorts_option2.aktif').attr('value');
// $(".promo__group").html("");
var html_final = [];
if (sort_pilih == '') {
for (var d = 0; d < obj_cicilan.length; d++) {
html_final.push(obj_cicilan[d]);
}
} else {
var kodis = [];
var tgl_start = [];
for (var p = 0; p < item_cicilan.length; p++) {
kodis.push(item_cicilan[p]['kode']);
tgl_start.push(item_cicilan[p]['tgl_start']);
}
var id_sorted = [];
var kode_sorted = kodis.sort();
//get tanggal
var formated_tgl = [];
for (var m = 0; m < tgl_start.length; m++) {
var tanggal = tgl_start[m].split(' ');
var bulan = 0;
if (tanggal[1] == 'January') {
bulan = 1;
} else if (tanggal[1] == 'February') {
bulan = 2;
} else if (tanggal[1] == 'March') {
bulan = 3;
} else if (tanggal[1] == 'April') {
bulan = 4;
} else if (tanggal[1] == 'May') {
bulan = 5;
} else if (tanggal[1] == 'June') {
bulan = 6;
} else if (tanggal[1] == 'July') {
bulan = 7;
} else if (tanggal[1] == 'August') {
bulan = 8;
} else if (tanggal[1] == 'September') {
bulan = 9;
} else if (tanggal[1] == 'October') {
bulan = 10;
} else if (tanggal[1] == 'November') {
bulan = 11;
} else {
bulan = 12;
}
formated_tgl.push(tanggal[0] + '-' + bulan + '-' + tanggal[2]);
}
var tgl_sorted = formated_tgl.sort(sort_date);
var unformated_tgl = [];
for (var m = 0; m < tgl_sorted.length; m++) {
var tanggal = tgl_sorted[m].split('-');
var bulan = 0;
if (tanggal[1] == '1') {
bulan = 'January';
} else if (tanggal[1] == '2') {
bulan = 'February';
} else if (tanggal[1] == '3') {
bulan = 'March';
} else if (tanggal[1] == '4') {
bulan = 'April';
} else if (tanggal[1] == '5') {
bulan = 'May';
} else if (tanggal[1] == '6') {
bulan = 'June';
} else if (tanggal[1] == '7') {
bulan = 'July';
} else if (tanggal[1] == '8') {
bulan = 'August';
} else if (tanggal[1] == '9') {
bulan = 'September';
} else if (tanggal[1] == '10') {
bulan = 'October';
} else if (tanggal[1] == '11') {
bulan = 'November';
} else {
bulan = '';
}
unformated_tgl.push(tanggal[0] + ' ' + bulan + ' ' + tanggal[2]);
}
if (sort_pilih == 'az') {
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[kode=' + kode_sorted[q] + ']').attr('counter');
id_sorted.push(id_item);
}
} else if (sort_pilih == 'za') {
var balik_sorted = kode_sorted.reverse();
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[kode=' + balik_sorted[q] + ']').attr('counter');
id_sorted.push(id_item);
}
} else if (sort_pilih == 'terbaru') {
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[tgl_start="' + unformated_tgl[q] + '"]').attr('counter');
id_sorted.push(id_item);
}
} else {
var balik_sorted = unformated_tgl.reverse();
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[tgl_start="' + balik_sorted[q] + '"]').attr('counter');
id_sorted.push(id_item);
}
}
for (var d = 0; d < obj_cicilan.length; d++) {
html_final.push(obj_cicilan[id_sorted[d]]);
}
}
// add by ME
// console.log('maintenance');
// console.log(html_final);
// $(".promo__group").html(html_final);
}
function filter_cek_partner() {
partner_list = [];
if ($('.checkbox_class_partner:checked').length > 0) {
$('.checkbox_class_partner:checked').each(function () {
var partner = $(this).attr('value');
partner_list.push(partner);
});
}
return partner_list;
}
function filter_cek_cicilan() {
cicilan_list = [];
if ($('.checkbox_class_cicilan:checked').length > 0) {
$('.checkbox_class_cicilan:checked').each(function () {
var cicil = $(this).attr('value').replace('Cicilan_', '');
cicilan_list.push(cicil);
});
}
return cicilan_list;
}
function filter_cek_produk() {
var checked_produk = [];
if ($('.checkbox_class_produk:checked').length > 0) {
$('.checkbox_class_produk:checked').each(function () {
var produk_singkat = '';
if ($(this).attr('value') == 'ruangbelajar') {
produk_singkat = 'rb';
} else if ($(this).attr('value') == 'Brain_Academy_Offline') {
produk_singkat = 'ba';
} else if ($(this).attr('value') == 'Brain_Academy_Online') {
produk_singkat = 'bao';
} else {
//ea
produk_singkat = 'ea';
}
checked_produk.push(produk_singkat);
});
}
return checked_produk;
}
function close_the_filter_mobile() {
var parent = $(this).parent();
var chk_val = parent.attr('filtered-val');
$('[value=' + chk_val + ']').removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
check_slick_mobile();
}
function myFunction(x) {
if (x.matches) {
$('#desktop_menu').remove();
load_cicilan_items_mobile();
$('.checkbox_class_produk').click(function () {
var kelas_list = $(this).attr('class');
var produk_val = $(this).attr('value');
var checkbox_class = '.checkbox_class_produk';
var kelompok = 'produk';
var which_check = '.check_all_produk';
if (kelas_list.includes('active')) {
$(this).removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
$(".filtered-item[filtered-val='" + produk_val + "']").remove();
} else {
$(this).addClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
jumlah_selected = jumlah_selected + 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
var htmlnya = generate_html(which_check, kelompok, produk_val, checkbox_class);
$('.filtered-wrap').append(htmlnya);
}
load_cicilan_items_mobile();
});
$('.checkbox_class_cicilan').click(function () {
var kelas_list = $(this).attr('class');
var cicilan_val = $(this).attr('value');
var checkbox_class = '.checkbox_class_cicilan';
var kelompok = 'cicilan';
var which_check = '.check_all_cicilan';
if (kelas_list.includes('active')) {
$(this).removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
$(".filtered-item[filtered-val='" + cicilan_val + "']").remove();
} else {
$(this).addClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
jumlah_selected = jumlah_selected + 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
var htmlnya = generate_html(which_check, kelompok, cicilan_val, checkbox_class);
$('.filtered-wrap').append(htmlnya);
}
load_cicilan_items_mobile();
});
$('.checkbox_class_partner').click(function () {
var kelas_list = $(this).attr('class');
var partner_val = $(this).attr('value');
var checkbox_class = '.checkbox_class_partner';
var kelompok = 'partner';
var which_check = '.check_all_partner';
if (kelas_list.includes('active')) {
$(this).removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
} else {
$(this).addClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
jumlah_selected = jumlah_selected + 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
var htmlnya = generate_html(which_check, kelompok, partner_val, checkbox_class);
$('.filtered-wrap').append(htmlnya);
}
load_cicilan_items_mobile();
});
//generate keterangan selected filter (HTML)
function generate_html(which_check, kelompok, the_val, checkbox_class) {
var coded_val = the_val.split('_').join(' ');
checkbox_class = checkbox_class.trim();
// var htmlnya = "<div kelompok='" + kelompok + "' class='filtered-item' filtered-val='" + the_val +
// "' checkbox_class='" + checkbox_class + "' which_check='" + which_check + "'>" + coded_val +
// " <img src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/close_btn.svg' class='closebtn' onclick=\"close_the_filter('" +
// checkbox_class + "','" + the_val + "','" + which_check +
// "');$(this).parent().remove();\";></div>";
var htmlnya =
"<div kelompok='" +
kelompok +
"' class='filtered-item' filtered-val='" +
the_val +
"' checkbox_class='" +
checkbox_class +
"' which_check='" +
which_check +
"'>" +
coded_val +
" <img src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/close_btn.svg' class='closebtn' onclick=\"$('" +
checkbox_class +
'[value=' +
the_val +
"]').removeClass('active');close_the_filter_mobile();$(this).parent().remove();\";></div>";
return htmlnya;
}
function load_cicilan_items_mobile() {
var item_cicilan = [];
var count_item = $('.promo__item').length;
for (var x = 0; x < count_item; x++) {
var get_id = $('.promo__item[counter=' + x + ']').attr('counter');
var get_produk = $('.promo__item[counter=' + x + ']').attr('produk');
var get_cicilan = $('.promo__item[counter=' + x + ']').attr('cicilan');
var get_partner = $('.promo__item[counter=' + x + ']').attr('partner');
var get_kode = $('.promo__item[counter=' + x + ']').attr('kode');
var get_tgl_start = $('.promo__item[counter=' + x + ']').attr('tgl_start');
var obj = {
id: get_id,
produk: get_produk,
cicilan: get_cicilan,
partner: get_partner,
kode: get_kode,
tgl_start: get_tgl_start,
};
item_cicilan.push(obj);
$('.promo__item[counter=' + x + ']').attr('style', 'display: block !important;');
if (
$('.promo__item[counter=' + x + ']')
.attr('class')
.includes('none')
) {
$('.promo__item[counter=' + x + ']').removeClass('d-none');
$('.promo__item[counter=' + x + ']').addClass('d-block');
}
}
sorting_cicilan_items_mobile(item_cicilan);
//list produk yang ada
var produk_list = [];
$('.checkbox_class_produk').each(function () {
produk_list.push($(this).attr('value'));
});
//list cicilan yang ada
var cicilan_list = [];
$('.checkbox_class_cicilan').each(function () {
cicilan_list.push($(this).attr('value'));
});
//list partner yang ada
$('.checkbox_class_cicilan').each(function () {
cicilan_list.push($(this).attr('value'));
});
//menyimpan id/counter item cicilan yang masuk filtering
var produk_pilih = filter_cek_produk_mobile(); //array yang terpilih
var cicilan_pilih = filter_cek_cicilan_mobile();
var partner_pilih = filter_cek_partner_mobile();
//loop seluruh item cicilan
for (var y = 0; y < count_item; y++) {
var yes_produk = false;
var yes_cicilan = false;
var yes_partner = false;
//PRODUK
if (produk_pilih.length == 0) {
//belum dicentang produknya
yes_produk = true;
} else {
//sudah ada yang dicentang produknya
var prod_ini = item_cicilan[y]['produk'].split(' ');
for (var a = 0; a < prod_ini.length; a++) {
if (produk_pilih.includes(prod_ini[a])) {
yes_produk = true;
break;
}
}
}
if (!yes_produk) {
if ($(`[counter=${y}]`).attr('style').includes('block') || $(`[counter=${y}]`).attr('class').includes('d-block')) {
$(`[counter=${y}]`).removeClass('d-block');
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
} else {
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
}
continue;
}
//CICILAN
if (cicilan_pilih.length == 0) {
//belum dicentang cicilannya
yes_cicilan = true;
} else {
var cicilan_ini = item_cicilan[y]['cicilan'].split(' - ');
if (cicilan_ini.length == 2) {
var start_cicil = parseInt(cicilan_ini[0].replace('x', ''));
var end_cicil = parseInt(cicilan_ini[1].replace('x', ''));
for (var b = 0; b < cicilan_pilih.length; b++) {
var angka_cicil_pilih = parseInt(cicilan_pilih[b].replace('x', ''));
if (angka_cicil_pilih >= start_cicil && angka_cicil_pilih <= end_cicil) {
yes_cicilan = true;
}
}
} else {
for (var b = 0; b < cicilan_pilih.length; b++) {
if (cicilan_ini[0] == cicilan_pilih[b]) {
yes_cicilan = true;
}
}
}
}
if (!yes_cicilan) {
if ($(`[counter=${y}]`).attr('style').includes('block') || $(`[counter=${y}]`).attr('class').includes('d-block')) {
$(`[counter=${y}]`).removeClass('d-block');
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
} else {
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
}
continue;
}
//PARTNER
if (partner_pilih.length == 0) {
//belum dicentang partnernya
yes_partner = true;
} else {
var partner_ini = item_cicilan[y]['partner'];
for (var c = 0; c < partner_pilih.length; c++) {
if (partner_pilih[c] === partner_ini) {
yes_partner = true;
break;
}
}
}
if (!yes_partner) {
if ($(`[counter=${y}]`).attr('style').includes('block') || $(`[counter=${y}]`).attr('class').includes('d-block')) {
$(`[counter=${y}]`).removeClass('d-block');
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
} else {
$(`[counter=${y}]`).addClass('d-none');
$(`[counter=${y}]`).attr('style', 'display:none !important');
}
continue;
}
}
initPagination();
check_kosong();
check_slick_mobile();
}
function filter_cek_partner_mobile() {
partner_list = [];
if ($('.checkbox_class_partner.active').length > 0) {
$('.checkbox_class_partner.active').each(function () {
var partner = $(this).attr('value');
partner_list.push(partner);
});
}
return partner_list;
}
function filter_cek_cicilan_mobile() {
cicilan_list = [];
if ($('.checkbox_class_cicilan.active').length > 0) {
$('.checkbox_class_cicilan.active').each(function () {
var cicil = $(this).attr('value').replace('Cicilan_', '');
cicilan_list.push(cicil);
});
}
return cicilan_list;
}
function filter_cek_produk_mobile() {
var checked_produk = [];
if ($('.checkbox_class_produk.active').length > 0) {
$('.checkbox_class_produk.active').each(function () {
var produk_singkat = '';
if ($(this).attr('value') == 'ruangbelajar') {
produk_singkat = 'rb';
} else if ($(this).attr('value') == 'Brain_Academy_Offline') {
produk_singkat = 'ba';
} else if ($(this).attr('value') == 'Brain_Academy_Online') {
produk_singkat = 'bao';
} else {
//ea
produk_singkat = 'ea';
}
checked_produk.push(produk_singkat);
});
}
return checked_produk;
}
function reset_filtering() {
$('.checkbox_class_produk.active').each(function () {
var kelas_list = $(this).attr('class');
var produk_val = $(this).attr('value');
var checkbox_class = '.checkbox_class_produk';
var kelompok = 'produk';
var which_check = '.check_all_produk';
if (kelas_list.includes('active')) {
$(this).removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
$(".filtered-item[filtered-val='" + produk_val + "']").remove();
}
load_cicilan_items_mobile();
});
$('.checkbox_class_cicilan.active').each(function () {
var kelas_list = $(this).attr('class');
var cicilan_val = $(this).attr('value');
var checkbox_class = '.checkbox_class_cicilan';
var kelompok = 'cicilan';
var which_check = '.check_all_cicilan';
if (kelas_list.includes('active')) {
$(this).removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
$(".filtered-item[filtered-val='" + cicilan_val + "']").remove();
}
load_cicilan_items_mobile();
});
$('.checkbox_class_partner.active').each(function () {
var kelas_list = $(this).attr('class');
var partner_val = $(this).attr('value');
var checkbox_class = '.checkbox_class_partner';
var kelompok = 'partner';
var which_check = '.check_all_partner';
if (kelas_list.includes('active')) {
$(this).removeClass('active');
var jumlah_selected = parseInt($('#filter-jumlah').html());
if (jumlah_selected == 1) {
$('#filter-jumlah').html('0');
$('#filter-jumlah').hide();
$('#filter-ico').show();
} else {
jumlah_selected = jumlah_selected - 1;
$('#filter-jumlah').html(jumlah_selected);
$('#filter-jumlah').show();
$('#filter-ico').hide();
}
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
}
load_cicilan_items_mobile();
});
}
$('#reset_filter').click(function () {
reset_filtering();
});
function sorting_cicilan_items_mobile(item_cicilan) {
var obj_cicilan = get_items(item_cicilan);
var sort_pilih = $('.sorts_option.aktif').attr('value');
// $(".promo__group").html("");
var html_final = [];
if (sort_pilih == '') {
for (var d = 0; d < obj_cicilan.length; d++) {
html_final.push(obj_cicilan[d]);
}
} else {
var kodis = [];
var tgl_start = [];
for (var p = 0; p < item_cicilan.length; p++) {
kodis.push(item_cicilan[p]['kode']);
tgl_start.push(item_cicilan[p]['tgl_start']);
}
var id_sorted = [];
var kode_sorted = kodis.sort();
//get tanggal
var formated_tgl = [];
for (var m = 0; m < tgl_start.length; m++) {
var tanggal = tgl_start[m].split(' ');
var bulan = 0;
if (tanggal[1] == 'January') {
bulan = 1;
} else if (tanggal[1] == 'February') {
bulan = 2;
} else if (tanggal[1] == 'March') {
bulan = 3;
} else if (tanggal[1] == 'April') {
bulan = 4;
} else if (tanggal[1] == 'May') {
bulan = 5;
} else if (tanggal[1] == 'June') {
bulan = 6;
} else if (tanggal[1] == 'July') {
bulan = 7;
} else if (tanggal[1] == 'August') {
bulan = 8;
} else if (tanggal[1] == 'September') {
bulan = 9;
} else if (tanggal[1] == 'October') {
bulan = 10;
} else if (tanggal[1] == 'November') {
bulan = 11;
} else {
bulan = 12;
}
formated_tgl.push(tanggal[0] + '-' + bulan + '-' + tanggal[2]);
}
var tgl_sorted = formated_tgl.sort(sort_date);
var unformated_tgl = [];
for (var m = 0; m < tgl_sorted.length; m++) {
var tanggal = tgl_sorted[m].split('-');
var bulan = 0;
if (tanggal[1] == '1') {
bulan = 'January';
} else if (tanggal[1] == '2') {
bulan = 'February';
} else if (tanggal[1] == '3') {
bulan = 'March';
} else if (tanggal[1] == '4') {
bulan = 'April';
} else if (tanggal[1] == '5') {
bulan = 'May';
} else if (tanggal[1] == '6') {
bulan = 'June';
} else if (tanggal[1] == '7') {
bulan = 'July';
} else if (tanggal[1] == '8') {
bulan = 'August';
} else if (tanggal[1] == '9') {
bulan = 'September';
} else if (tanggal[1] == '10') {
bulan = 'October';
} else if (tanggal[1] == '11') {
bulan = 'November';
} else {
bulan = '';
}
unformated_tgl.push(tanggal[0] + ' ' + bulan + ' ' + tanggal[2]);
}
if (sort_pilih == 'az') {
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[kode=' + kode_sorted[q] + ']').attr('counter');
id_sorted.push(id_item);
}
} else if (sort_pilih == 'za') {
var balik_sorted = kode_sorted.reverse();
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[kode=' + balik_sorted[q] + ']').attr('counter');
id_sorted.push(id_item);
}
} else if (sort_pilih == 'terbaru') {
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[tgl_start="' + unformated_tgl[q] + '"]').attr('counter');
id_sorted.push(id_item);
}
} else {
var balik_sorted = unformated_tgl.reverse();
for (var q = 0; q < item_cicilan.length; q++) {
var id_item = $('[tgl_start="' + balik_sorted[q] + '"]').attr('counter');
id_sorted.push(id_item);
}
}
for (var d = 0; d < obj_cicilan.length; d++) {
html_final.push(obj_cicilan[id_sorted[d]]);
}
}
$('.promo__group').html(html_final);
}
} else {
$('#mobile_menu').remove();
load_cicilan_items();
//buka tutup dropdown
$('.filter-item').mouseenter(function () {
var navigasi = $(this).attr('nav-data');
var values = $("[value-data='" + navigasi + "']");
$('.filter-value.opened').addClass('closed');
$('.filter-value.opened.closed').removeClass('opened');
var val_class = values.attr('class');
if (val_class.indexOf('closed') >= 0) {
values.removeClass('closed');
values.addClass('opened');
}
});
$('.filter-item').mouseleave(function () {
var navigasi = $(this).attr('nav-data');
var values = $("[value-data='" + navigasi + "']");
values.removeClass('opened');
values.addClass('closed');
});
$('.filter-value').mouseout(function () {
var values = $(this).attr('value-data');
var navigasi = $("[nav-data='" + values + "']");
$(this).removeClass('opened');
$(this).addClass('closed');
});
//stay dan hide dropdown
$('.filter-value').mouseenter(function () {
var values = $(this).attr('value-data');
var navigasi = $("[nav-data='" + values + "']");
$(this).removeClass('opened');
$(this).addClass('closed');
});
//change icon centang biru
function check_all_checkbox(img_class, checkbox_class, icon_class) {
if ($(checkbox_class + ':checked').length > 0) {
$(img_class).show();
$(icon_class).hide();
} else {
$(img_class).hide();
$(icon_class).show();
}
}
//check dan uncheck semua filter (produk, cicilan, parther)
$('.checkbox_class_produk').change(function () {
var partner_val = $(this).val();
var img_class = '.checked-blue-produk';
var checkbox_class = '.checkbox_class_produk';
var icon_class = '.uncheck-blue-produk';
var kelompok = 'produk';
var which_check = '.check_all_produk';
var htmlnya = generate_html(which_check, kelompok, partner_val, img_class, checkbox_class, icon_class);
if ($(this).is(':checked')) {
$('.filtered-wrap').append(htmlnya);
check_all_checkbox('.checked-blue-produk', '.checkbox_class_produk', '.uncheck-blue-produk');
} else {
check_all_checkbox('.checked-blue-produk', '.checkbox_class_produk', '.uncheck-blue-produk');
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
}
count_selected(which_check, checkbox_class);
load_cicilan_items();
});
$('.checkbox_class_cicilan').change(function () {
var cicilan_val = $(this).val();
var img_class = '.checked-blue-cicilan';
var checkbox_class = '.checkbox_class_cicilan';
var icon_class = '.uncheck-blue-cicilan';
var kelompok = 'cicilan';
var which_check = '.check_all_cicilan';
var htmlnya = generate_html(which_check, kelompok, cicilan_val, img_class, checkbox_class, icon_class);
if ($(this).is(':checked')) {
$('.filtered-wrap').append(htmlnya);
check_all_checkbox('.checked-blue-cicilan', '.checkbox_class_cicilan', '.uncheck-blue-cicilan');
} else {
check_all_checkbox('.checked-blue-cicilan', '.checkbox_class_cicilan', '.uncheck-blue-cicilan');
$(".filtered-item[filtered-val='" + cicilan_val + "']").remove();
}
count_selected(which_check, checkbox_class);
load_cicilan_items();
});
$('.checkbox_class_partner').change(function () {
var partner_val = $(this).val();
var img_class = '.checked-blue-partner';
var checkbox_class = '.checkbox_class_partner';
var icon_class = '.uncheck-blue-partner';
var kelompok = 'partner';
var which_check = '.check_all_partner';
var htmlnya = generate_html(which_check, kelompok, partner_val, img_class, checkbox_class, icon_class);
if ($(this).is(':checked')) {
$('.filtered-wrap').append(htmlnya);
check_all_checkbox('.checked-blue-partner', '.checkbox_class_partner', '.uncheck-blue-partner');
} else {
check_all_checkbox('.checked-blue-partner', '.checkbox_class_partner', '.uncheck-blue-partner');
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
}
count_selected(which_check, checkbox_class);
load_cicilan_items();
});
//pilih semua dan hapus semua (produk, cicilan, partner)
$('.check_all_produk').click(function () {
var img_class = '.checked-blue-produk';
var checkbox_class = '.checkbox_class_produk';
var icon_class = '.uncheck-blue-produk';
var which_check = '.check_all_produk';
var kelompok = 'produk';
check_uncheck_checkbox(kelompok, which_check, img_class, checkbox_class, icon_class);
load_cicilan_items();
});
$('.check_all_cicilan').click(function () {
var img_class = '.checked-blue-cicilan';
var checkbox_class = '.checkbox_class_cicilan';
var icon_class = '.uncheck-blue-cicilan';
var which_check = '.check_all_cicilan';
var kelompok = 'cicilan';
check_uncheck_checkbox(kelompok, which_check, img_class, checkbox_class, icon_class);
load_cicilan_items();
});
$('.check_all_partner').click(function () {
var img_class = '.checked-blue-partner';
var checkbox_class = '.checkbox_class_partner';
var icon_class = '.uncheck-blue-partner';
var which_check = '.check_all_partner';
var kelompok = 'partner';
check_uncheck_checkbox(kelompok, which_check, img_class, checkbox_class, icon_class);
load_cicilan_items();
});
//untuk centang semua dan uncentang semua
function check_uncheck_checkbox(kelompok, which_check, img_class, checkbox_class, icon_class) {
//jika belum ada yang dicentang atau belum penuh centangannya
if ($(checkbox_class + ':checked').length == 0 || $(checkbox_class + ':checked').length < $(checkbox_class).length) {
$(checkbox_class).prop('checked', true);
check_all_checkbox(img_class, checkbox_class, icon_class);
$(which_check).html('Hapus Semua');
$(".filtered-item[kelompok='" + kelompok + "']").remove();
if (which_check == '.check_all_produk') {
//variabel untuk produk
var the_vals = ['ruangbelajar', 'Brain_Academy_Offline', 'Brain_Academy_Online', 'English_Academy'];
} else if (which_check == '.check_all_cicilan') {
//variabel untuk cicilan
var the_vals = ['Cicilan_1x', 'Cicilan_2x', 'Cicilan_3x', 'Cicilan_6x', 'Cicilan_12x'];
} else {
//variabel untuk partner
var the_vals = ['Kredivo'];
}
for (var x = 0; x < $(checkbox_class).length; x++) {
$('.filtered-wrap').append(generate_html(which_check, kelompok, the_vals[x], img_class, checkbox_class, icon_class));
}
} else {
//jika centangan sudah penuh
$(checkbox_class).prop('checked', false);
check_all_checkbox(img_class, checkbox_class, icon_class);
$(which_check).html('Pilih Semua');
$(".filtered-item[kelompok='" + kelompok + "']").remove();
}
}
$('#filter').change(function () {
load_cicilan_items();
});
//generate keterangan selected filter (HTML)
function generate_html(which_check, kelompok, the_val, img_class, checkbox_class, icon_class) {
var coded_val = the_val.split('_').join(' ');
checkbox_class = checkbox_class.trim();
var htmlnya =
"<div kelompok='" +
kelompok +
"' class='filtered-item' filtered-val='" +
the_val +
"' checkbox_class='" +
checkbox_class +
"' img_class='" +
img_class +
"' icon_class='" +
icon_class +
"' which_check='" +
which_check +
"'>" +
coded_val +
" <img src='https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/Cicilan%20Revamp%202021/close_btn.svg' class='closebtn' onclick=\"close_the_filter('" +
checkbox_class +
"','" +
the_val +
"','" +
img_class +
"','" +
icon_class +
"','" +
which_check +
'\');$(this).parent().remove();";></div>';
return htmlnya;
}
$('.btn-hapus-semua').click(function () {
$('.checkbox_class_produk:checked').each(function () {
$(this).prop('checked', false);
var partner_val = $(this).attr('value');
check_all_checkbox('.checked-blue-produk', '.checkbox_class_produk', '.uncheck-blue-produk');
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
var img_class = '.checked-blue-produk';
var checkbox_class = '.checkbox_class_produk';
var icon_class = '.uncheck-blue-produk';
var which_check = '.check_all_produk';
var kelompok = 'produk';
count_selected(which_check, checkbox_class);
});
$('.checkbox_class_cicilan:checked').each(function () {
$(this).prop('checked', false);
var partner_val = $(this).attr('value');
check_all_checkbox('.checked-blue-cicilan', '.checkbox_class_cicilan', '.uncheck-blue-cicilan');
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
var img_class = '.checked-blue-cicilan';
var checkbox_class = '.checkbox_class_cicilan';
var icon_class = '.uncheck-blue-cicilan';
var which_check = '.check_all_cicilan';
var kelompok = 'cicilan';
count_selected(which_check, checkbox_class);
});
$('.checkbox_class_partner:checked').each(function () {
$(this).prop('checked', false);
var partner_val = $(this).attr('value');
check_all_checkbox('.checked-blue-partner', '.checkbox_class_partner', '.uncheck-blue-partner');
$(".filtered-item[filtered-val='" + partner_val + "']").remove();
var img_class = '.checked-blue-partner';
var checkbox_class = '.checkbox_class_partner';
var icon_class = '.uncheck-blue-partner';
var which_check = '.check_all_partner';
var kelompok = 'partner';
count_selected(which_check, checkbox_class);
});
load_cicilan_items();
});
}
}
var x = window.matchMedia('(max-width: 875px)');
myFunction(x);
x.addListener(myFunction);
</script>
</div>
</div>
<!--end widget-span -->
</div>
<!--end row-->
</div>
<!--end row-wrapper -->
</div>
<!--end body -->
</div>
<!--end body wrapper -->
<style>.footer__year {
padding-top: 5rem;
}
.ic-new__img {
margin: auto 0;
display: flex;
}
.ic-new__img img {
width: fit-content;
}
.font-base-footer {
font-family: Inter, 'sans-serif';
font-weight: 400;
font-size: 14px !important;
font-style: normal;
letter-spacing: 0;
color: #0a2540;
margin-bottom: 0;
}
.font-bold {
font-weight: 700;
}
.font-white {
color: #fff !important;
}
.font-semi-bold {
font-weight: 600;
}
.center {
text-align: center;
}
.footer {
background: #0a2540 !important;
overflow: hidden;
font-family:
-apple-system,
BlinkMacSystemFont,
Segoe UI,
Roboto,
Helvetica Neue,
Arial,
Noto Sans,
sans-serif,
Apple Color Emoji,
Segoe UI Emoji,
Segoe UI Symbol,
Noto Color Emoji;
}
.contact__container {
display: grid;
grid-template-columns: 2fr 11fr;
gap: 0.625rem;
word-break: break-all;
}
.contact__container--text {
margin: auto 0;
}
.group-contact {
display: grid;
row-gap: 0.5rem;
}
.sec-follow__content--socmed {
display: inline-flex;
}
.sec-follow__content--socmed a {
padding-right: 0.25rem;
}
.ic-new {
display: inline-flex;
width: max-content;
gap: 0.25rem;
}
@media (min-width: 1025px) {
.sec-address__detail {
margin: 1rem 0 2rem;
padding-right: 2rem;
}
.sec-follow {
margin-top: -10rem;
}
.title {
font-size: 48px;
line-height: 64px;
}
.subtitle {
font-size: 32px;
line-height: 48px;
text-align: center;
}
.desc-hero {
font-size: 24px;
line-height: 36px;
margin-top: 20px;
}
.desc {
font-size: 16px;
line-height: 24px;
}
.footer {
padding: 5rem 0 1.5rem;
}
.footer__title {
font-size: 1rem;
margin-bottom: 1rem;
min-height: 1.25rem;
}
.footer__title--hq {
font-size: 1rem;
}
.footer__content--top {
display: grid;
grid-template-columns: 3fr 9fr;
}
.sec-menu {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
}
.sec-app__content {
display: grid;
gap: 0.75rem;
}
.footer__content--bottom {
display: grid;
grid-template-columns: 9.75fr 2.25fr;
}
}
@media (max-width: 1024px) {
.sec-address__detail {
margin: 1rem 0 2rem;
}
.sec-app {
margin-bottom: 2.625rem;
text-align: center;
}
.title {
font-size: 24px;
line-height: 36px;
}
.subtitle {
font-size: 20px;
line-height: 30px;
text-align: center;
}
.desc-hero {
font-size: 16px;
line-height: 24px;
margin-top: 1rem;
}
.desc {
font-size: 14px;
line-height: 27px;
}
.footer {
padding: 2rem 0;
}
.sec-app__content {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 0.5rem;
margin-top: 1rem;
}
.sec-menu {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
}
.sec-follow {
text-align: center;
}
.footer__title {
padding-bottom: 0.75rem;
}
}
ul.no-space {
padding: 0;
}
ul.no-space li {
margin-bottom: 0.25rem;
}
.contact__container--text a,
ul.no-space a {
text-decoration: none;
}
.contact__container--text a:hover,
ul.no-space a:hover {
color: #2eb5c0 !important;
}
div.sec-address__logo img,
div.ic-new__img img {
display: inline-block;
}
.sec-app__content img {
max-width: 100%;
}
</style>
<section class="footer " id="footer">
<div class="page-center">
<div class="footer__content">
<div class="footer__content--top">
<div class="sec-app">
<div class="sec-address">
<div class="sec-address__logo">
<a href="https://www.ruangguru.com/">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/OPTIMIZE/logo%20rg.svg" alt="Logo Ruangguru" loading="lazy" />
</a>
</div>
<div class="sec-address__detail">
<p class="font-base-footer font-white font-bold footer__title--hq">RUANGGURU HQ</p>
<p class="font-base-footer font-white footer-address">Gedung Sinarmas MSIG Tower Lt. 33. Jl. Jenderal Sudirman Kav. 21, Karet Kuningan, Setiabudi, Jakarta Selatan, Jakarta 12920</p>
</div>
</div>
<p class="font-base-footer font-white font-bold footer__title">Coba GRATIS Aplikasi Ruangguru</p>
<div class="sec-app__content">
<div class="sec-app__content--gplay">
<a target="_blank" rel="nofollow" href="https://play.google.com/store/apps/details?id=com.ruangguru.livestudents&hl=in">
<img
class="footer-socmed"
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/btn_googleplay%20(1).svg"
loading="lazy"
alt="Button Google Play Footer "
/>
</a>
</div>
<div class="sec-app__content--appstore">
<a target="_blank" rel="nofollow" href="https://apps.apple.com/id/app/ruangguru-solusi-belajar/id1099742206?l=id">
<img
class="footer-socmed"
src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/btn_appstore%20(1).svg"
loading="lazy"
alt="Button App Store Footer "
/>
</a>
</div>
<div class="sec-app__content--huawei">
<a target="_blank" rel="nofollow" href="https://appgallery.huawei.com/#/app/C102352375">
<picture>
<source type="image/webp" srcset="https://roboguru-forum-cdn.ruangguru.com/image/e5df282a-3b96-4af4-8b3c-a4634b511680.png?convert=webp " />
<source type="image/png" srcset="https://roboguru-forum-cdn.ruangguru.com/image/e5df282a-3b96-4af4-8b3c-a4634b511680.png " />
<img class="footer-socmed" src="https://roboguru-forum-cdn.ruangguru.com/image/e5df282a-3b96-4af4-8b3c-a4634b511680.png" alt="Button AppGallery Footer" loading="lazy" width="156" />
</picture>
</a>
</div>
</div>
</div>
<div class="sec-menu">
<div class="sec-menu__rg">
<p class="font-base-footer font-white font-bold footer__title">Produk Ruangguru</p>
<ul type="none" class="no-space">
<li>
<a class="font-base-footer font-white" href="https://roboguru.ruangguru.com" target="_blank">Roboguru</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/roboguruplus">Roboguru Plus</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/dafa-lulu">Dafa dan Lulu</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/for-kids">Ruangguru for Kids</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/bisnis">Ruangguru for Business</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/ruanguji">Ruanguji</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/blog/">Ruangbaca</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/ruangkelas">Ruangkelas</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/ruangbelajar">Ruangbelajar</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://pengajar.ruangguru.com/">Ruangpengajar</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/privat">Ruangguru Privat</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangpeduli.org/" target="_blank">Ruangpeduli</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/airis">Airis</a>
</li>
</ul>
</div>
<div class="sec-menu__lainnya">
<p class="font-base-footer font-white font-bold footer__title">Produk Lainnya</p>
<ul type="none" class="no-space">
<li>
<a class="font-base-footer font-white" href="https://www.brainacademy.id/" target="_blank">Brain Academy</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.english-academy.id/" target="_blank">English Academy</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://skillacademy.com/" target="_blank">Skill Academy</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangkerja.id/" target="_blank">Ruangkerja</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.schoters.com/id/" target="_blank">Schoters</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.kalananti.id/" target="_blank">Kalananti</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/mathchamps/" target="_blank">Math Champs</a>
</li>
</ul>
</div>
<div class="sec-menu__bantuan">
<p class="font-base-footer font-white font-bold footer__title">Bantuan & Panduan</p>
<ul type="none" class="no-space">
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/company-credentials">Company Credentials</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/beasiswa">Beasiswa Ruangguru</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/cicilan">Cicilan Ruangguru</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/promo">Promo Ruangguru</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://ticketing.ruangguru.com/help?request_type_id=459" target="_blank">Vulnerability Report</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/bantuan#layanan">Layanan Pengaduan</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/terms-conditions">Syarat & Ketentuan</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/privacy-policy">Kebijakan Privasi</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/about-us">Tentang Kami</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/contact-us">Kontak Kami</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/press">Press Kit</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://www.ruangguru.com/bantuan">Bantuan</a>
</li>
<li>
<a class="font-base-footer font-white" href="https://career.ruangguru.com/">Karier</a>
</li>
</ul>
</div>
<div class="sec-menu__contact">
<p class="font-base-footer font-white font-bold footer__title">Hubungi Kami</p>
<div class="group-contact">
<div class="contact__container">
<div class="contact__container--img">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-mail.svg" loading="lazy" alt="Logo Email Footer" />
</div>
<div class="contact__container--text">
<a class="font-base-footer font-white" href="mailto:info@ruangguru.com">info@ruangguru.com</a>
</div>
</div>
<div class="contact__container">
<div class="contact__container--img">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-phone.svg" loading="lazy" alt="Logo Phone Footer" />
</div>
<div class="contact__container--text">
<a class="font-base-footer font-white" href="tel:02130930000">02130930000</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer__content--bottom">
<div></div>
<div class="sec-follow">
<p class="font-base-footer font-white font-bold footer__title">Ikuti Kami</p>
<div class="sec-follow__content">
<div class="sec-follow__content--socmed">
<a target="_blank" href="https://www.instagram.com/ruangguru/">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-ig.svg?convert=webp" loading="lazy" alt="Logo Instagram Footer" />
</a>
<a target="_blank" href="https://www.facebook.com/ruanggurucom/">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-fb.svg?convert=webp" loading="lazy" alt="Logo Facebook Footer" />
</a>
<a target="_blank" href="https://twitter.com/ruangguru/">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-twitter.svg?convert=webp" loading="lazy" alt="Logo Twitter Footer" />
</a>
<a target="_blank" href="https://www.youtube.com/ruangguru">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-youtube.svg?convert=webp" loading="lazy" alt="Logo Youtube Footer" />
</a>
<a target="_blank" href="https://www.linkedin.com/company/ruangguru-com">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/ic-linkedin.svg?convert=webp" loading="lazy" alt="Logo LinkedIn Footer" />
</a>
<a target="_blank" href="https://www.tiktok.com/@ruangguru">
<img src="https://cdn-web-2.ruangguru.com/landing-pages/assets/hs/1%20Homepage%20RG/Optimize%20V2/tiktok-ic-white-40.svg?convert=webp" loading="lazy" alt="Logo TikTok Footer" />
</a>
</div>
</div>
</div>
</div>
</div>
<div class="footer__year">
<p class="font-base-footer font-white font-bold center">
©
<span id="full-year"></span>
Ruangguru. All Rights Reserved PT. Ruang Raya Indonesia
</p>
</div>
</div>
</section>
<script src="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/module_assets/39227318886/1661845605588/module_39227318886_header-homepage-ruangguru-2021.min.js"></script>
<script src="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/template_assets/45749395482/1621933279844/A_Ruangguru_Projects/Revamp_Promo_Ruangguru/javascript_pagination_promo_ruangguru_2021.min.js"></script>
<script src="https://cdn-web-2.ruangguru.com/landing-page-web/public/staticpages/www.ruangguru.com/hs-fs/hub/2828691/hub_generated/template_assets/46653046962/1634005288041/A_Ruangguru_Projects/Project_Hofar/Javascript_Auto_Generate_Breadcrumb_-_V1_2.min.js"></script>
<!-- Start of HubSpot Analytics Code -->
<script type="text/javascript">
var _hsq = _hsq || [];
_hsq.push(['setContentType', 'landing-page']);
_hsq.push(['setCanonicalUrl', 'https://www.ruangguru.com/cicilan']);
_hsq.push(['setPageId', '24249069667']);
_hsq.push([
'setContentMetadata',
{
contentPageId: '24249069667',
legacyPageId: '24249069667',
contentFolderId: null,
contentGroupId: null,
abTestId: null,
languageVariantId: 24249069667,
languageCode: 'id',
},
]);
</script>
<script type="text/javascript">
var hsVars = {
render_id: '1f6bb253-fccd-4a87-875e-c69a3f769652',
ticks: 1684630343165,
page_id: 24249069667,
content_group_id: 0,
portal_id: 2828691,
app_hs_base_url: 'https://app.hubspot.com',
cp_hs_base_url: 'https://cp.hubspot.com',
language: 'id',
analytics_page_type: 'landing-page',
analytics_page_id: '24249069667',
category_id: 1,
folder_id: 0,
is_hubspot_user: false,
};
</script>
<script src="https://unpkg.com/@dotlottie/player-component@latest/dist/dotlottie-player.mjs" type="module"></script>
<!-- Load CSS for all versions -->
<script>
// CSS loading function available for all versions
function loadFloatingCSS() {
// Check if CSS is already loaded
if (document.getElementById('fb-component-css')) {
return;
}
// Create and append CSS style block to head
const style = document.createElement('style');
style.id = 'fb-component-css';
style.textContent = `
.bantuan-container {
position: relative;
}
.bantuan-element {
position: fixed;
z-index: 999;
display: flex;
align-items: flex-end;
justify-content: flex-end;
cursor: pointer;
transition: all 0.6s ease;
}
.bantuan-top {
bottom: 11rem;
right: 2rem;
}
.bantuan-bottom {
bottom: 2rem;
right: 2rem;
}
.bantuan-top-2 {
bottom: 15rem;
right: 2rem;
}
.bantuan-top-3 {
bottom: 19rem;
right: 2rem;
}
.bantuan-bottom-2 {
bottom: 5rem;
right: 2rem;
}
.bantuan-bottom-3 {
bottom: 8rem;
right: 2rem;
}
@media (min-width: 768px) {
.bantuan-element img {
width: auto;
transition: all 0.4s ease;
}
.bantuan-top img {
width: 140px;
}
.bantuan-bottom img {
width: 140px;
}
.bantuan-top-2 img,
.bantuan-top-3 img {
width: 140px;
}
.bantuan-bottom-2 img,
.bantuan-bottom-3 img {
width: 140px;
}
.bantuan-element.clicked {
bottom: 9rem;
right: 2.5rem;
}
.bantuan-element.clicked img {
width: auto;
height: 64px;
}
}
@media (max-width: 767px) {
.bantuan-top {
bottom: 8rem;
right: 1rem;
align-items: center;
}
.bantuan-bottom {
bottom: 2rem;
right: 1.25rem;
align-items: center;
}
.bantuan-top-2 {
bottom: 12rem;
right: 1rem;
align-items: center;
}
.bantuan-top-3 {
bottom: 16rem;
right: 1rem;
align-items: center;
}
.bantuan-bottom-2 {
bottom: 5rem;
right: 1.25rem;
align-items: center;
}
.bantuan-bottom-3 {
bottom: 8rem;
right: 1.25rem;
align-items: center;
}
.bantuan-element img {
width: auto;
}
.bantuan-top img,
.bantuan-top-2 img,
.bantuan-top-3 img {
width: 96px;
}
.bantuan-bottom img,
.bantuan-bottom-2 img,
.bantuan-bottom-3 img {
width: 96px;
}
}
.bantuan-element:hover {
transform: scale(1.05);
}
.bantuan-element img {
max-width: 100%;
height: auto;
}
`;
document.head.appendChild(style);
}
// Load CSS immediately
loadFloatingCSS();
</script>
<div id="bantuan-divs-container" style="position: relative" data-product="ruangguru" data-table=""></div>
<script>
class FloatingDivsComponent {
constructor(product = 'ruangguru', table = 'rg_promo_banner') {
this.container = document.getElementById('bantuan-divs-container');
this.floatingElements = [];
this.product = product;
this.table = table;
// Configuration
this.config = {
baseApiUrl: 'https://gw.ruangguru.com/api/v3/rdb/p_ddgy8hjx5dxsqx/rg_banner/views/',
apiKey: 'vLyK3dJrDBRmOwueX2OJXibMkgsUbBk0WS4ua2p1',
maxElements: 2,
zIndexBase: 100,
};
// Build dynamic API URL based on table parameter
this.config.apiUrl = this.buildApiUrl();
this.init();
}
buildApiUrl() {
const baseUrl = this.config.baseApiUrl;
const tableName = this.table || 'rg_promo_banner';
const queryParams =
'offset=0&limit=99999&sort=rankPosition&where=(type,eq,floating)~and(showIn,anyof,landingPage)~and(hide,is,false)~and(product,eq,' +
this.product +
')&nested%5Bcta%5D%5Bfields%5D=Id,name,ctaId,imageUrl,ctaLink,targetUrl';
return `${baseUrl}${tableName}?${queryParams}`;
}
async init() {
try {
await this.fetchFloatingElements();
this.renderFloatingElements();
} catch (error) {
console.error('Failed to initialize floating divs component:', error);
}
}
async fetchFloatingElements() {
try {
const options = {
method: 'GET',
headers: {
'xc-token': this.config.apiKey || 'vLyK3dJrDBRmOwueX2OJXibMkgsUbBk0WS4ua2p1',
},
};
const urlNoco = this.config.apiUrl;
const response = await fetch(urlNoco, options);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
this.floatingElements = this.processApiResponse(data);
} catch (error) {
console.error('Error fetching floating elements:', error);
throw error;
}
}
processApiResponse(data) {
if (!data || !data.list || !Array.isArray(data.list)) {
return [];
}
// Ensure we only get maximum 2 elements
const limitedElements = data.list.slice(0, this.config.maxElements);
return limitedElements;
}
renderFloatingElements() {
if (!this.container || this.floatingElements.length === 0) {
return;
}
// Additional safeguard: ensure we never render more than maxElements
const elementsToRender = this.floatingElements.slice(0, this.config.maxElements);
// Clean up existing elements and their event listeners
this.cleanupExistingElements();
// Clear existing content
this.container.innerHTML = '';
elementsToRender.forEach((element, index) => {
const floatingDiv = this.createFloatingDiv(element, index);
this.container.appendChild(floatingDiv);
});
}
cleanupExistingElements() {
// Clear existing elements (no need for event listener cleanup with CSS approach)
const existingElements = this.container.querySelectorAll('[data-floating-element]');
existingElements.forEach(element => {
element.remove();
});
}
createFloatingDiv(element, index) {
const div = document.createElement('div');
const cta = element.cta[0]; // Use the first CTA
// Add data attribute for cleanup tracking
div.setAttribute('data-floating-element', 'true');
// Apply CSS classes based on rankPosition
const positionClass = this.getPositionClass(element.rankPosition, index);
div.className = `bantuan-element ${positionClass}`;
div.style.zIndex = this.config.zIndexBase + index;
// Create the link and image
const link = document.createElement('a');
link.href = 'https://cta.ruangguru.com/' + cta.ctaId || '#';
link.target = '_blank';
// Add tracking attributes
link.setAttribute('data-tracking-event-type', 'landing_page__core__item_click');
link.setAttribute(
'data-tracking-context',
JSON.stringify({
product_name: this.product,
cta_action: 'redirection',
cta_action_detail: link.href,
item_type: 'floating',
item_name: element.name || 'Floating element',
item_category: 'payment',
item_position: index,
item_serial: null,
section_type: 'floating_item',
section_position: 'body',
section_name: 'floating_item',
})
);
const img = document.createElement('img');
img.src = element.imageUrl + '?h=200&convert=webp';
img.alt = element.name || 'Floating element';
img.loading = 'lazy';
// Add click tracking
link.addEventListener('click', () => {
this.trackClick(element, cta);
});
link.appendChild(img);
div.appendChild(link);
return div;
}
getPositionClass(rankPosition, index) {
// Define positioning classes based on rankPosition
if (rankPosition === 1) {
return 'bantuan-top'; // Top position
} else if (rankPosition === 2) {
return 'bantuan-bottom'; // Bottom position
} else {
// For additional elements, distribute them evenly
return `bantuan-${index % 2 === 0 ? 'top' : 'bottom'}-${Math.floor(index / 2) + 1}`;
}
}
trackClick(element, cta) {
// Implement click tracking logic here
console.log('Floating element clicked:', {
elementId: element.Id,
elementName: cta.name,
ctaId: cta.ctaId,
targetUrl: cta.targetUrl,
});
}
// Public method to manually refresh
async refresh() {
try {
await this.fetchFloatingElements();
this.renderFloatingElements();
} catch (error) {
console.error('Failed to refresh floating elements:', error);
throw error;
}
}
// Public method to get current floating elements
getFloatingElements() {
return [...this.floatingElements];
}
}
// Initialize the component when DOM is ready
document.addEventListener('DOMContentLoaded', () => {
// Get product and table parameters from data attributes
const container = document.getElementById('bantuan-divs-container');
const product = container.getAttribute('data-product') || 'ruangguru';
const table = container.getAttribute('data-table') || 'rg_promo_banner';
new FloatingDivsComponent(product, table);
});
// Export for use in other modules if needed
if (typeof module !== 'undefined' && module.exports) {
module.exports = FloatingDivsComponent;
}
</script>
<!-- Tracker -->
<script src="https://unpkg.com/analytics@0.8.1/dist/analytics.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/analytics-plugin-trackable/dist/analytics-plugin-trackable.min.js"></script>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N8DPXH6" height="0" width="0" style="display: none; visibility: hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<script type="text/javascript" defer>
/* Initialize analytics */
var Analytics = _analytics.init({
app: 'brainAcademyLandingPage',
debug: false,
plugins: [analyticsTrackable()],
});
Analytics.ready(function () {
Analytics.page();
});
</script>
<style>
li.breadcrumb-item + li.breadcrumb-item::before {
color: #6c757d;
/* content: ">"; */
content: '\25BA';
font-family: auto;
font-size: 0.78rem !important;
display: flex;
align-items: center;
}
li.breadcrumb-item + li.breadcrumb-item {
/*padding-left: .5rem;*/
padding-left: 0rem;
}
li.breadcrumb-item {
padding-right: 0.5rem;
}
li.breadcrumb-item + li.breadcrumb-item::before,
li.breadcrumb-item > a,
li.breadcrumb-item.active {
font-size: 11px;
background: transparent;
}
li.breadcrumb-item > a {
color: #2eb5c0;
}
li.breadcrumb-item.active:after {
content: '' !important;
}
ol.breadcrumb {
margin-top: revert;
}
@media (min-width: 768px) {
li.breadcrumb-item + li.breadcrumb-item::before,
li.breadcrumb-item > a,
li.breadcrumb-item.active {
font-size: 1rem;
}
li.breadcrumb-item + li.breadcrumb-item::before {
line-height: 28px;
}
}
@media (max-width: 768px) {
li.breadcrumb-item + li.breadcrumb-item::before {
line-height: 18px;
}
}
.cta__promo--lihat-detail a {
white-space: nowrap;
margin-right: 1rem;
}
/* @media (min-width: 1250px) and (max-width:1439px){
.promo__item{
max-width:363px;
}
.cta__promo--langganan .hs-cta-wrapper a{
width: auto !important;
}
} */
.cta__promo--langganan .hs-embed-wrapper {
min-width: 0px !important;
}
</style>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"
integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF"
crossorigin="anonymous"
></script>
<!-- Generated by the HubSpot Template Builder - template version 1.03 -->
</body>
</html>