diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index e69de29..ec5a2d8 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -0,0 +1,26 @@
+ $i['type'] === 'news'));
+ $videoItems = array_values(array_filter($konten, fn($i) => $i['type'] === 'video'));
+
+ return view('frontend.home', compact('popup', 'heros','faqs', 'newsItems', 'videoItems'));
+ }
+}
diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php
index 92158cb..2502a0d 100644
--- a/app/Http/Controllers/NewsController.php
+++ b/app/Http/Controllers/NewsController.php
@@ -16,4 +16,15 @@ class NewsController extends Controller
{
return view('frontend.news_detail');
}
+
+ public function index_newsvideo()
+ {
+ return view('news.index_news');
+ }
+
+
+ public function create_newsvideo()
+ {
+ return view('news.create_news');
+ }
}
diff --git a/app/Http/Controllers/Persetujuan/AddendumController.php b/app/Http/Controllers/Persetujuan/AddendumController.php
new file mode 100644
index 0000000..2a5c48b
--- /dev/null
+++ b/app/Http/Controllers/Persetujuan/AddendumController.php
@@ -0,0 +1,19 @@
+ {
+ if (e.target.files.length) {
+ const src = URL.createObjectURL(e.target.files[0]);
+ imagePreview.src = src;
+ uploadedImgContainer.classList.remove("d-none");
+ }
+});
+removeButton.addEventListener("click", () => {
+ imagePreview.src = "";
+ uploadedImgContainer.classList.add("d-none");
+ fileInput.value = "";
+});
+// =============================== Upload Single Image js End here ================================================
+
+// ================================================ Upload Multiple image js Start here ================================================
+const fileInputMultiple = document.getElementById("upload-file-multiple");
+const uploadedImgsContainer = document.querySelector(
+ ".uploaded-imgs-container"
+);
+
+fileInputMultiple.addEventListener("change", (e) => {
+ const files = e.target.files;
+
+ Array.from(files).forEach((file) => {
+ const src = URL.createObjectURL(file);
+
+ const imgContainer = document.createElement("div");
+ imgContainer.classList.add(
+ "position-relative",
+ "h-120-px",
+ "w-120-px",
+ "border",
+ "input-form-light",
+ "radius-8",
+ "overflow-hidden",
+ "border-dashed",
+ "bg-neutral-50"
+ );
+
+ const removeButton = document.createElement("button");
+ removeButton.type = "button";
+ removeButton.classList.add(
+ "uploaded-img__remove",
+ "position-absolute",
+ "top-0",
+ "end-0",
+ "z-1",
+ "text-2xxl",
+ "line-height-1",
+ "me-8",
+ "mt-8",
+ "d-flex"
+ );
+ removeButton.innerHTML =
+ "";
+
+ const imagePreview = document.createElement("img");
+ imagePreview.classList.add("w-100", "h-100", "object-fit-cover");
+ imagePreview.src = src;
+
+ imgContainer.appendChild(removeButton);
+ imgContainer.appendChild(imagePreview);
+ uploadedImgsContainer.appendChild(imgContainer);
+
+ removeButton.addEventListener("click", () => {
+ URL.revokeObjectURL(src);
+ imgContainer.remove();
+ });
+ });
+
+ // Clear the file input so the same file(s) can be uploaded again if needed
+ fileInputMultiple.value = "";
+});
+// ================================================ Upload Multiple image js End here ================================================
+
+// ================================================ Upload image & show it\'s name js start ================================================
+document
+ .getElementById("file-upload-name")
+ .addEventListener("change", function (event) {
+ var fileInput = event.target;
+ var fileList = fileInput.files;
+ var ul = document.getElementById("uploaded-img-names");
+
+ // Add show-uploaded-img-name class to the ul element if not already added
+ ul.classList.add("show-uploaded-img-name");
+
+ // Append each uploaded file name as a list item with Font Awesome and Iconify icons
+ for (var i = 0; i < fileList.length; i++) {
+ var li = document.createElement("li");
+ li.classList.add(
+ "uploaded-image-name-list",
+ "text-primary-600",
+ "fw-semibold",
+ "d-flex",
+ "align-items-center",
+ "gap-2"
+ );
+
+ // Create the Link Iconify icon element
+ var iconifyIcon = document.createElement("iconify-icon");
+ iconifyIcon.setAttribute("icon", "ph:link-break-light");
+ iconifyIcon.classList.add("text-xl", "text-secondary-light");
+
+ // Create the Cross Iconify icon element
+ var crossIconifyIcon = document.createElement("iconify-icon");
+ crossIconifyIcon.setAttribute("icon", "radix-icons:cross-2");
+ crossIconifyIcon.classList.add(
+ "remove-image",
+ "text-xl",
+ "text-secondary-light",
+ "text-hover-danger-600"
+ );
+
+ // Add event listener to remove the image on click
+ crossIconifyIcon.addEventListener(
+ "click",
+ (function (liToRemove) {
+ return function () {
+ ul.removeChild(liToRemove); // Remove the corresponding list item
+ };
+ })(li)
+ ); // Pass the current list item as a parameter to the closure
+
+ // Append both icons to the list item
+ li.appendChild(iconifyIcon);
+
+ // Append the file name text to the list item
+ li.appendChild(document.createTextNode(" " + fileList[i].name));
+
+ li.appendChild(crossIconifyIcon);
+
+ // Append the list item to the unordered list
+ ul.appendChild(li);
+ }
+ });
+// ================================================ Upload image & show it\'s name js end ================================================
diff --git a/public/assets/js/backend/news/upload_image.js b/public/assets/js/backend/news/upload_image.js
new file mode 100644
index 0000000..2e64c58
--- /dev/null
+++ b/public/assets/js/backend/news/upload_image.js
@@ -0,0 +1,28 @@
+// Editor Js Start
+const quill = new Quill("#editor", {
+ modules: {
+ syntax: true,
+ toolbar: "#toolbar-container",
+ },
+ placeholder: "Compose an epic...",
+ theme: "snow",
+});
+// Editor Js End
+
+const fileInput = document.getElementById("upload-file");
+const imagePreview = document.getElementById("uploaded-img__preview");
+const uploadedImgContainer = document.querySelector(".uploaded-img");
+const removeButton = document.querySelector(".uploaded-img__remove");
+
+fileInput.addEventListener("change", (e) => {
+ if (e.target.files.length) {
+ const src = URL.createObjectURL(e.target.files[0]);
+ imagePreview.src = src;
+ uploadedImgContainer.classList.remove("d-none");
+ }
+});
+removeButton.addEventListener("click", () => {
+ imagePreview.src = "";
+ uploadedImgContainer.classList.add("d-none");
+ fileInput.value = "";
+});
diff --git a/public/assets/js/backend/pertek/script_arahan.js b/public/assets/js/backend/pertek/script_arahan.js
new file mode 100644
index 0000000..958cde9
--- /dev/null
+++ b/public/assets/js/backend/pertek/script_arahan.js
@@ -0,0 +1,134 @@
+// =============================== Wizard Step Js Start ================================
+$(document).ready(function () {
+ // click on next button
+ $(".form-wizard-next-btn").on("click", function () {
+ var parentFieldset = $(this).parents(".wizard-fieldset");
+ var currentActiveStep = $(this)
+ .parents(".form-wizard")
+ .find(".form-wizard-list .active");
+ var next = $(this);
+ var nextWizardStep = true;
+ parentFieldset.find(".wizard-required").each(function () {
+ var thisValue = $(this).val();
+
+ if (thisValue == "") {
+ $(this).siblings(".wizard-form-error").show();
+ nextWizardStep = false;
+ } else {
+ $(this).siblings(".wizard-form-error").hide();
+ }
+ });
+ if (nextWizardStep) {
+ next.parents(".wizard-fieldset").removeClass("show", "400");
+ currentActiveStep
+ .removeClass("active")
+ .addClass("activated")
+ .next()
+ .addClass("active", "400");
+ next.parents(".wizard-fieldset")
+ .next(".wizard-fieldset")
+ .addClass("show", "400");
+ $(document)
+ .find(".wizard-fieldset")
+ .each(function () {
+ if ($(this).hasClass("show")) {
+ var formAtrr = $(this).attr("data-tab-content");
+ $(document)
+ .find(".form-wizard-list .form-wizard-step-item")
+ .each(function () {
+ if ($(this).attr("data-attr") == formAtrr) {
+ $(this).addClass("active");
+ var innerWidth = $(this).innerWidth();
+ var position = $(this).position();
+ $(document)
+ .find(".form-wizard-step-move")
+ .css({
+ left: position.left,
+ width: innerWidth,
+ });
+ } else {
+ $(this).removeClass("active");
+ }
+ });
+ }
+ });
+ }
+ });
+ //click on previous button
+ $(".form-wizard-previous-btn").on("click", function () {
+ var counter = parseInt($(".wizard-counter").text());
+ var prev = $(this);
+ var currentActiveStep = $(this)
+ .parents(".form-wizard")
+ .find(".form-wizard-list .active");
+ prev.parents(".wizard-fieldset").removeClass("show", "400");
+ prev.parents(".wizard-fieldset")
+ .prev(".wizard-fieldset")
+ .addClass("show", "400");
+ currentActiveStep
+ .removeClass("active")
+ .prev()
+ .removeClass("activated")
+ .addClass("active", "400");
+ $(document)
+ .find(".wizard-fieldset")
+ .each(function () {
+ if ($(this).hasClass("show")) {
+ var formAtrr = $(this).attr("data-tab-content");
+ $(document)
+ .find(".form-wizard-list .form-wizard-step-item")
+ .each(function () {
+ if ($(this).attr("data-attr") == formAtrr) {
+ $(this).addClass("active");
+ var innerWidth = $(this).innerWidth();
+ var position = $(this).position();
+ $(document)
+ .find(".form-wizard-step-move")
+ .css({
+ left: position.left,
+ width: innerWidth,
+ });
+ } else {
+ $(this).removeClass("active");
+ }
+ });
+ }
+ });
+ });
+ //click on form submit button
+ $(document).on("click", ".form-wizard .form-wizard-submit", function () {
+ var parentFieldset = $(this).parents(".wizard-fieldset");
+ var currentActiveStep = $(this)
+ .parents(".form-wizard")
+ .find(".form-wizard-list .active");
+ parentFieldset.find(".wizard-required").each(function () {
+ var thisValue = $(this).val();
+ if (thisValue == "") {
+ $(this).siblings(".wizard-form-error").show();
+ } else {
+ $(this).siblings(".wizard-form-error").hide();
+ }
+ });
+ });
+ // focus on input field check empty or not
+ $(".form-control")
+ .on("focus", function () {
+ var tmpThis = $(this).val();
+ if (tmpThis == "") {
+ $(this).parent().addClass("focus-input");
+ } else if (tmpThis != "") {
+ $(this).parent().addClass("focus-input");
+ }
+ })
+ .on("blur", function () {
+ var tmpThis = $(this).val();
+ if (tmpThis == "") {
+ $(this).parent().removeClass("focus-input");
+ $(this).siblings(".wizard-form-error").show();
+ } else if (tmpThis != "") {
+ $(this).parent().addClass("focus-input");
+ $(this).siblings(".wizard-form-error").hide();
+ }
+ });
+});
+// =============================== Wizard Step Js End ================================
diff --git a/public/assets/js/pertek/script_dropdown.js b/public/assets/js/backend/pertek/script_dropdown.js
similarity index 100%
rename from public/assets/js/pertek/script_dropdown.js
rename to public/assets/js/backend/pertek/script_dropdown.js
diff --git a/public/assets/js/pertek/script_fileUpload.js b/public/assets/js/backend/pertek/script_fileUpload.js
similarity index 100%
rename from public/assets/js/pertek/script_fileUpload.js
rename to public/assets/js/backend/pertek/script_fileUpload.js
diff --git a/public/assets/js/pertek/script_pertanyaan.js b/public/assets/js/backend/pertek/script_pertanyaan.js
similarity index 100%
rename from public/assets/js/pertek/script_pertanyaan.js
rename to public/assets/js/backend/pertek/script_pertanyaan.js
diff --git a/public/assets/js/frontend/home/layanan.js b/public/assets/js/frontend/home/layanan.js
index 62ecdd1..b361b42 100644
--- a/public/assets/js/frontend/home/layanan.js
+++ b/public/assets/js/frontend/home/layanan.js
@@ -1,19 +1,188 @@
-document.getElementById("filter-button").addEventListener("click", function () {
- const filterSection = document.getElementById("filter-section");
- filterSection.classList.toggle("hidden");
+// Fetch Wilayah JSON
+fetch("/assets/json/home/wilayah.json")
+ .then((response) => response.json())
+ .then((data) => populateFilters(data))
+ .catch((error) => console.error("Gagal load wilayah.json:", error));
+
+function populateFilters(data) {
+ populateSelect("kabkota", data.kabkota);
+ populateSelect("kecamatan", data.kecamatan);
+ populateSelect("kelurahan", data.kelurahan);
+}
+
+function populateSelect(id, options) {
+ const select = document.getElementById(id);
+ if (!select) return;
+
+ select.innerHTML = options
+ .map(
+ (opt) => `
+
+ `
+ )
+ .join("");
+}
+
+// Fetch Layanan JSON
+document.addEventListener("DOMContentLoaded", function () {
+ fetch("/assets/json/home/layanan.json")
+ .then((response) => response.json())
+ .then((data) => {
+ initializeLayanan(data);
+ setupUIHandlers();
+ })
+ .catch((error) => console.error("Gagal load layanan.json:", error));
});
-document.getElementById("clear-filter").addEventListener("click", function () {
- // Reset province and city dropdowns
- document.getElementById("kabkota").value = "";
- document.getElementById("kecamatan").value = "";
- document.getElementById("kelurahan").value = "";
+function initializeLayanan(data) {
+ renderHeader(data.header);
+ renderTabs(data.tabs);
+ renderContents(data.contents);
+ changeTab("pertek");
+}
- // Reset search input
- const searchInput = document.querySelector('input[placeholder="Search"]');
- if (searchInput) searchInput.value = "";
-});
+// Data Header
+function renderHeader(header) {
+ const headerContainer = document.querySelector("#layanan-header");
+ if (!headerContainer) return;
+ headerContainer.innerHTML = `
+
${header.title}
+ ${header.subtitle}
+ `;
+}
+
+// Data Tabs
+function renderTabs(tabs) {
+ const tabsContainer = document.querySelector("#layanan-tabs");
+ if (!tabsContainer) return;
+
+ tabsContainer.innerHTML = tabs
+ .map(
+ (tab) => `
+
+ `
+ )
+ .join("");
+}
+
+// Data Contents
+function renderContents(contents) {
+ const contentsContainer = document.querySelector("#layanan-contents");
+ if (!contentsContainer) return;
+
+ contentsContainer.innerHTML = Object.entries(contents)
+ .map(([key, items]) => {
+ if (key === "audit") {
+ return `
+
+ ${renderAuditTable(items)}
+
+ `;
+ } else {
+ return `
+
+ ${items.map((item) => renderStandardItem(item)).join("")}
+
+ `;
+ }
+ })
+ .join("");
+}
+
+function renderStandardItem(item) {
+ return `
+
+
+
+
${item.periode}
+
+
+
+ `;
+}
+
+function renderAuditTable(items) {
+ return `
+
+
+
+
+ No |
+ Nama PT |
+ Judul |
+ Deskripsi |
+ Aksi |
+
+
+
+ ${items
+ .map(
+ (item) => `
+
+ ${item.no} |
+ ${item.company} |
+ ${item.title} |
+
+ ${item.description}
+ |
+
+
+ |
+
+ `
+ )
+ .join("")}
+
+
+
+ `;
+}
+
+function setupUIHandlers() {
+ // Toggle filter section
+ const filterButton = document.getElementById("filter-button");
+ if (filterButton) {
+ filterButton.addEventListener("click", function () {
+ const filterSection = document.getElementById("filter-section");
+ if (filterSection) filterSection.classList.toggle("hidden");
+ });
+ }
+
+ // Clear filter inputs
+ const clearButton = document.getElementById("clear-filter");
+ if (clearButton) {
+ clearButton.addEventListener("click", function () {
+ document.getElementById("kabkota").value = "";
+ document.getElementById("kecamatan").value = "";
+ document.getElementById("kelurahan").value = "";
+
+ const searchInput = document.querySelector(
+ 'input[placeholder="Search"]'
+ );
+ if (searchInput) searchInput.value = "";
+ });
+ }
+}
+
+// Tab switching function
function changeTab(tabName) {
const contentSections = document.querySelectorAll(".tab-content");
contentSections.forEach((section) => {
@@ -27,13 +196,13 @@ function changeTab(tabName) {
});
const selectedTab = document.getElementById("tab-" + tabName);
- selectedTab.classList.remove("bg-white", "border", "border-gray-300");
- selectedTab.classList.add("bg-blue-900", "text-white");
+ if (selectedTab) {
+ selectedTab.classList.remove("bg-white", "border", "border-gray-300");
+ selectedTab.classList.add("bg-blue-900", "text-white");
+ }
const selectedContent = document.getElementById("content-" + tabName);
- selectedContent.classList.remove("hidden");
+ if (selectedContent) {
+ selectedContent.classList.remove("hidden");
+ }
}
-
-document.addEventListener("DOMContentLoaded", function () {
- changeTab("pertek");
-});
diff --git a/public/assets/js/frontend/home/popup.js b/public/assets/js/frontend/home/popup.js
index d288fbf..fe41eb9 100644
--- a/public/assets/js/frontend/home/popup.js
+++ b/public/assets/js/frontend/home/popup.js
@@ -1,17 +1,14 @@
document.addEventListener("DOMContentLoaded", function () {
- // Show popup with slight delay after page load
setTimeout(function () {
document.getElementById("popupBanner").classList.remove("hidden");
}, 800);
- // Close popup when clicking the close button
document
.getElementById("closePopup")
.addEventListener("click", function () {
document.getElementById("popupBanner").classList.add("hidden");
});
- // Close popup when clicking outside the banner
document
.getElementById("popupBanner")
.addEventListener("click", function (e) {
@@ -20,7 +17,6 @@ document.addEventListener("DOMContentLoaded", function () {
}
});
- // Slider functionality
const slides = document.querySelectorAll(".banner-slide");
const dots = document.querySelectorAll(".dot-indicator");
let currentSlide = 0;
@@ -34,13 +30,11 @@ document.addEventListener("DOMContentLoaded", function () {
currentSlide = index;
}
- // Auto slide every 5 seconds
let slideInterval = setInterval(() => {
let nextSlide = (currentSlide + 1) % slides.length;
showSlide(nextSlide);
}, 5000);
- // Navigation buttons
document.getElementById("nextSlide").addEventListener("click", function () {
clearInterval(slideInterval);
let nextSlide = (currentSlide + 1) % slides.length;
diff --git a/public/assets/js/frontend/news/newsvideo.js b/public/assets/js/frontend/news/newsvideo.js
new file mode 100644
index 0000000..caf6af4
--- /dev/null
+++ b/public/assets/js/frontend/news/newsvideo.js
@@ -0,0 +1,212 @@
+document.addEventListener("DOMContentLoaded", function () {
+ const loadMoreBtn = document.getElementById("load-more-btn");
+ const newsContainer = document.getElementById("news-container");
+ const videoContainer = document.getElementById("video-container");
+ const newsContent = document.getElementById("news-content");
+ const videoContent = document.getElementById("videos-content");
+ const tabs = document.querySelectorAll(".tab-btn");
+ const tabIndicator = document.getElementById("tab-indicator");
+
+ let newsOffset = 0;
+ let videoOffset = 0;
+ const itemsPerLoad = 3;
+
+ setTabIndicatorPosition(tabs[0]);
+ tabs[0].classList.add("text-white", "font-medium");
+
+ tabs.forEach((tab) => {
+ tab.addEventListener("click", () => {
+ setTabIndicatorPosition(tab);
+
+ tabs.forEach((t) => {
+ t.classList.remove("text-white", "font-medium");
+ t.classList.add("text-gray-600");
+ });
+ tab.classList.add("text-white", "font-medium");
+ tab.classList.remove("text-gray-600");
+
+ const targetTab = tab.getAttribute("data-tab");
+ document.querySelectorAll(".tab-content").forEach((content) => {
+ content.classList.add("hidden");
+ });
+ document
+ .getElementById(`${targetTab}-content`)
+ .classList.remove("hidden");
+
+ // Update button visibility when switching tabs
+ updateLoadMoreButtonVisibility();
+ });
+ });
+
+ function setTabIndicatorPosition(activeTab) {
+ tabIndicator.style.width = `${activeTab.offsetWidth}px`;
+ tabIndicator.style.left = `${activeTab.offsetLeft}px`;
+ }
+
+ function updateLoadMoreButtonVisibility() {
+ if (newsContent.classList.contains("hidden") === false) {
+ if (newsOffset >= moreArticles.length) {
+ loadMoreBtn.classList.add("hidden");
+ } else {
+ loadMoreBtn.classList.remove("hidden");
+ }
+ } else {
+ if (videoOffset >= moreVideos.length) {
+ loadMoreBtn.classList.add("hidden");
+ } else {
+ loadMoreBtn.classList.remove("hidden");
+ }
+ }
+ }
+
+ const moreArticles = [
+ {
+ image: "https://developers.elementor.com/docs/assets/img/elementor-placeholder-image.png",
+ title: "Panduan Lengkap Perizinan AMDAL Terbaru",
+ description:
+ "Prosedur dan persyaratan terbaru untuk mendapatkan persetujuan AMDAL dalam proyek pembangunan skala besar di Indonesia...",
+ published_date: "10 April 2025",
+ slug: "panduan-perizinan-amdal-terbaru",
+ },
+ {
+ image: "https://developers.elementor.com/docs/assets/img/elementor-placeholder-image.png",
+ title: "Regulasi UKL-UPL: Apa yang Perlu Diketahui",
+ description:
+ "Panduan praktis tentang dokumen Upaya Pengelolaan Lingkungan dan Upaya Pemantauan Lingkungan untuk usaha skala menengah...",
+ published_date: "12 April 2025",
+ slug: "regulasi-ukl-upl-terbaru",
+ },
+ {
+ image: "https://developers.elementor.com/docs/assets/img/elementor-placeholder-image.png",
+ title: "Perubahan Kebijakan Perizinan Lingkungan 2025",
+ description:
+ "Analisis mendalam tentang perubahan kebijakan perizinan lingkungan dan dampaknya terhadap sektor industri di Indonesia...",
+ published_date: "15 April 2025",
+ slug: "perubahan-kebijakan-perizinan-lingkungan-2025",
+ },
+ ];
+ const moreVideos = [
+ {
+ src: "https://www.w3schools.com/html/movie.mp4",
+ title: "Tutorial Pengisian Formulir Izin Lingkungan",
+ description:
+ "Panduan langkah demi langkah cara mengisi formulir perizinan lingkungan dengan benar dan efisien...",
+ date: "8 April 2025",
+ },
+ {
+ src: "https://www.w3schools.com/html/movie.mp4",
+ title: "Proses Sidang Perizinan Lingkungan: Apa yang Harus Dipersiapkan",
+ description:
+ "Penjelasan detail tentang tahapan sidang perizinan lingkungan dan tips sukses menghadapinya...",
+ date: "11 April 2025",
+ },
+ {
+ src: "https://www.w3schools.com/html/movie.mp4",
+ title: "Studi Kasus: Penolakan Izin Lingkungan dan Solusinya",
+ description:
+ "Analisis kasus penolakan izin lingkungan dan strategi untuk mengatasi masalah perizinan yang umum terjadi...",
+ date: "14 April 2025",
+ },
+ ];
+
+ loadMoreBtn.addEventListener("click", function () {
+ const loadingText = loadMoreBtn.innerHTML;
+ loadMoreBtn.innerHTML = `
+
+ Loading...
+ `;
+
+ setTimeout(() => {
+ if (newsContent.classList.contains("hidden") === false) {
+ const remainingArticles = moreArticles.slice(
+ newsOffset,
+ newsOffset + itemsPerLoad
+ );
+ remainingArticles.forEach((article) => {
+ const articleElement = createArticleElement(article);
+ newsContainer.appendChild(articleElement);
+ });
+ newsOffset += remainingArticles.length;
+ } else {
+ const remainingVideos = moreVideos.slice(
+ videoOffset,
+ videoOffset + itemsPerLoad
+ );
+ remainingVideos.forEach((video) => {
+ const videoElement = createVideoElement(video);
+ videoContainer.appendChild(videoElement);
+ });
+ videoOffset += remainingVideos.length;
+ }
+
+ loadMoreBtn.innerHTML = loadingText;
+
+ updateLoadMoreButtonVisibility();
+ }, 1000);
+ });
+
+ updateLoadMoreButtonVisibility();
+
+ function createArticleElement(article) {
+ const div = document.createElement("div");
+ div.className =
+ "bg-white rounded-xl overflow-hidden shadow-lg transition-all duration-300 hover:shadow-2xl hover:-translate-y-2 group";
+ div.innerHTML = `
+
+

+
+ ${article.published_date}
+
+
+
+ `;
+ return div;
+ }
+
+ function createVideoElement(video) {
+ const div = document.createElement("div");
+ div.className =
+ "bg-white rounded-xl overflow-hidden shadow-lg transition-all duration-300 hover:shadow-2xl hover:-translate-y-2 group";
+ div.innerHTML = `
+
+
+
+
+
+ `;
+ return div;
+ }
+});
diff --git a/public/assets/json/home/faq.json b/public/assets/json/home/faq.json
new file mode 100644
index 0000000..fa0f5ee
--- /dev/null
+++ b/public/assets/json/home/faq.json
@@ -0,0 +1,14 @@
+[
+ {
+ "question": "Bagaimana mekanisme penapisan dengan hasil jenis dokumen SPPL?",
+ "answer": "Proses penapisan dilakukan untuk menentukan jenis dokumen yang sesuai berdasarkan kegiatan yang diajukan. Jika hasil penapisan menunjukkan bahwa jenis dokumen yang diperlukan adalah SPPL (Surat Pernyataan Pengelolaan Lingkungan), pengguna dapat mengikuti panduan penggunaan (manual guide) SPPL yang tersedia."
+ },
+ {
+ "question": "Bagaimana cara Validator Administrasi melakukan uji administrasi?",
+ "answer": "Validator Administrasi memeriksa kesesuaian berkas administrasi dengan cara mengklik menu AMDAL atau UKL-UPL, memilih menu sebelum rapat, dan mengakses tab Uji Admin. Validator menentukan kelengkapan administrasi dengan memberikan keterangan di kolom yang sesuai."
+ },
+ {
+ "question": "Apa yang harus dilakukan jika dokumen tidak lengkap?",
+ "answer": "Jika dokumen tidak lengkap, Validator Administrasi dapat mengembalikan berkas kepada pengguna dengan memberikan keterangan yang jelas mengenai kekurangan dokumen tersebut. Pengguna kemudian dapat memperbaiki dan mengunggah kembali dokumen yang diperlukan."
+ }
+]
diff --git a/public/assets/json/home/hero.json b/public/assets/json/home/hero.json
new file mode 100644
index 0000000..8129c8c
--- /dev/null
+++ b/public/assets/json/home/hero.json
@@ -0,0 +1,7 @@
+{
+ "background_image": "assets/images/home/bg-home.png",
+ "title_one": "for Smarter",
+ "title_two": "Environmental Documents",
+ "badge": "Digital Hub",
+ "subtitle": "Create. Track. Integrate. All your environmental documents in one place."
+}
diff --git a/public/assets/json/home/layanan.json b/public/assets/json/home/layanan.json
new file mode 100644
index 0000000..3b98103
--- /dev/null
+++ b/public/assets/json/home/layanan.json
@@ -0,0 +1,83 @@
+{
+ "header": {
+ "title": "Daftar Pengumuman & Informasi",
+ "subtitle": "Daftar Pengumuman dan Informasi terkait kegiatan yang mengajukan izin lingkungan"
+ },
+ "tabs": [
+ { "id": "pertek", "label": "PERTEK" },
+ { "id": "rintek", "label": "RINTEK" },
+ { "id": "amdal", "label": "AMDAL" },
+ { "id": "addendum", "label": "Addendum" },
+ { "id": "ukl-upl", "label": "UKL - UPL" },
+ { "id": "audit", "label": "AUDIT" }
+ ],
+ "contents": {
+ "pertek": [
+ {
+ "title": "Kegiatan Penggalian Kuarsa/Pasir Kuarsa, LUKITO HARTONO LAWY",
+ "description": "Dampak Potensials: Penurunan Kualitas Udara, Peningkatan Kebisingan, Peningkatan Air Larian, Peningkatan Timbulan Sampah, Terjadinya Gangguan Lalu Lintas, Terbukanya Kes",
+ "link": "#",
+ "periode": "27 Maret - 10 April 2025"
+ },
+ {
+ "title": "Pembangunan Waterfront Malalayang, TARCISIUS ASWIN JULIZAR, W",
+ "description": "Dampak Potensials: Pra Konstruksi 1. Persepsi Masyarakat Tahap Konstruksi 1. Peningkatan Kesempatan Kerja dan Berusaha 2. Peningkatan Sedimentasi 3. Perubahan Garis",
+ "link": "#",
+ "periode": "26 Maret - 9 April 2025"
+ }
+ ],
+ "rintek": [
+ {
+ "title": "Test Penggalian Kuarsa/Pasir Kuarsa, LUKITO HARTONO LAWY",
+ "description": "Dampak Potensials: Penurunan Kualitas Udara, Peningkatan Kebisingan, Peningkatan Air Larian, Peningkatan Timbulan Sampah, Terjadinya Gangguan Lalu Lintas, Terbukanya Kes",
+ "link": "#",
+ "periode": "27 Maret - 10 April 2025"
+ },
+ {
+ "title": "Pembangunan Waterfront Malalayang, TARCISIUS ASWIN JULIZAR, W",
+ "description": "Dampak Potensials: Pra Konstruksi 1. Persepsi Masyarakat Tahap Konstruksi 1. Peningkatan Kesempatan Kerja dan Berusaha 2. Peningkatan Sedimentasi 3. Perubahan Garis",
+ "link": "#",
+ "periode": "26 Maret - 9 April 2025"
+ }
+ ],
+ "amdal": [
+ {
+ "title": "Kegiatan Penggalian Kuarsa/Pasir Kuarsa, LUKITO HARTONO LAWY",
+ "description": "Dampak Potensials: Penurunan Kualitas Udara, Peningkatan Kebisingan, Peningkatan Air Larian, Peningkatan Timbulan Sampah, Terjadinya Gangguan Lalu Lintas, Terbukanya Kes",
+ "link": "#",
+ "periode": "27 Maret - 10 April 2025"
+ },
+ {
+ "title": "Pembangunan Waterfront Malalayang, TARCISIUS ASWIN JULIZAR, W",
+ "description": "Dampak Potensials: Pra Konstruksi 1. Persepsi Masyarakat Tahap Konstruksi 1. Peningkatan Kesempatan Kerja dan Berusaha 2. Peningkatan Sedimentasi 3. Perubahan Garis",
+ "link": "#",
+ "periode": "26 Maret - 9 April 2025"
+ }
+ ],
+ "addendum": [
+ {
+ "title": "Pembangunan Waterfront Malalayang, TARCISIUS ASWIN JULIZAR, W",
+ "description": "Dampak Potensials: Pra Konstruksi 1. Persepsi Masyarakat Tahap Konstruksi 1. Peningkatan Kesempatan Kerja dan Berusaha 2. Peningkatan Sedimentasi 3. Perubahan Garis",
+ "link": "#",
+ "periode": "26 Maret - 9 April 2025"
+ }
+ ],
+ "ukl-upl": [
+ {
+ "title": "Pembangunan Waterfront Malalayang, TARCISIUS ASWIN JULIZAR, W",
+ "description": "Dampak Potensials: Pra Konstruksi 1. Persepsi Masyarakat Tahap Konstruksi 1. Peningkatan Kesempatan Kerja dan Berusaha 2. Peningkatan Sedimentasi 3. Perubahan Garis",
+ "link": "#",
+ "periode": "26 Maret - 9 April 2025"
+ }
+ ],
+ "audit": [
+ {
+ "no": 1,
+ "company": "PT PETROKIMIA GRESIK",
+ "title": "PENGUMUMAN AUDIT LINGKUNGAN HIDUP WAJIB BERKALA INDUSTRI PETROKIMIA",
+ "description": "PT Petrokimia Gresik merupakan Kegiatan pada sektor Industri Petrokimia : Industri Pupuk dan Bahan Kimia (Amonia, Pupuk, Asam Sulfat, Asam Fosfat, dan Asam Klorida)...",
+ "link": "#"
+ }
+ ]
+ }
+}
diff --git a/public/assets/json/home/news.json b/public/assets/json/home/news.json
new file mode 100644
index 0000000..fba9daa
--- /dev/null
+++ b/public/assets/json/home/news.json
@@ -0,0 +1,162 @@
+[
+ {
+ "type": "news",
+ "date": "2024-12-11",
+ "title": "Pengenalan dan Uji Coba Aplikasi Perling untuk Mendukung Sistem Persetujuan Lingkungan",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Bogor, 11 Desember 2024 - Dalam upaya meningkatkan efisiensi sistem persetujuan lingkungan di Indonesia...",
+ "url": "/news/perling-uji-coba"
+ },
+ {
+ "type": "news",
+ "date": "2024-12-10",
+ "title": "Implementasi Sistem Monitoring Lingkungan Terbaru",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Jakarta, 10 Desember 2024 - Kementerian Lingkungan Hidup memperkenalkan sistem baru untuk monitoring kualitas lingkungan...",
+ "url": "/news/monitoring-lingkungan"
+ },
+ {
+ "type": "news",
+ "date": "2024-12-09",
+ "title": "Peresmian Pusat Data Lingkungan Hidup Nasional",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Jakarta, 9 Desember 2024 - Presiden meresmikan pusat data lingkungan hidup terbaru yang akan menjadi referensi nasional...",
+ "url": "/news/pusat-data-lingkungan"
+ },
+ {
+ "type": "news",
+ "date": "2024-12-07",
+ "title": "Workshop Pemanfaatan Aplikasi Perling untuk Pelaku Usaha",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Bandung, 7 Desember 2024 - KLHK mengadakan workshop untuk memperkenalkan fitur-fitur Perling kepada pelaku usaha...",
+ "url": "/news/workshop-perling"
+ },
+ {
+ "type": "news",
+ "date": "2024-12-05",
+ "title": "Kolaborasi Internasional dalam Pengelolaan Data Lingkungan",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Bali, 5 Desember 2024 - Indonesia menjalin kerja sama dengan beberapa negara ASEAN untuk pengelolaan data lingkungan...",
+ "url": "/news/kolaborasi-internasional"
+ },
+ {
+ "type": "news",
+ "date": "2024-12-03",
+ "title": "Inovasi Teknologi dalam Pengawasan Lingkungan",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Jakarta, 3 Desember 2024 - KLHK mengadopsi teknologi AI dan IoT untuk meningkatkan efektivitas pengawasan lingkungan...",
+ "url": "/news/inovasi-teknologi-lingkungan"
+ },
+ {
+ "type": "news",
+ "date": "2024-12-01",
+ "title": "Forum Diskusi Kebijakan Lingkungan Hidup 2025",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Surabaya, 1 Desember 2024 - Para pakar lingkungan berkumpul untuk membahas arah kebijakan lingkungan hidup tahun 2025...",
+ "url": "/news/forum-kebijakan-2025"
+ },
+ {
+ "type": "news",
+ "date": "2024-11-28",
+ "title": "Evaluasi Dampak Lingkungan Proyek Strategis Nasional",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Jakarta, 28 November 2024 - KLHK melakukan evaluasi menyeluruh terhadap dampak lingkungan dari proyek strategis nasional...",
+ "url": "/news/evaluasi-dampak-lingkungan"
+ },
+ {
+ "type": "news",
+ "date": "2024-11-25",
+ "title": "Penghargaan Perusahaan Ramah Lingkungan 2024",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Jakarta, 25 November 2024 - KLHK memberikan penghargaan kepada perusahaan-perusahaan yang konsisten menerapkan praktik ramah lingkungan...",
+ "url": "/news/penghargaan-ramah-lingkungan"
+ },
+ {
+ "type": "news",
+ "date": "2024-11-22",
+ "title": "Peluncuran Program Edukasi Lingkungan untuk Sekolah",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "description": "Yogyakarta, 22 November 2024 - KLHK bekerja sama dengan Kemendikbud meluncurkan program edukasi lingkungan untuk sekolah...",
+ "url": "/news/program-edukasi-lingkungan"
+ },
+ {
+ "type": "video",
+ "date": "2024-12-12",
+ "title": "Tutorial Lengkap Penggunaan Aplikasi Perling",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/perling-tutorial"
+ },
+ {
+ "type": "video",
+ "date": "2024-12-08",
+ "title": "Wawancara dengan Menteri LHK",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/wawancara-menteri"
+ },
+ {
+ "type": "video",
+ "date": "2024-12-06",
+ "title": "Webinar: Dampak Perubahan Iklim terhadap Keanekaragaman Hayati",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/webinar-perubahan-iklim"
+ },
+ {
+ "type": "video",
+ "date": "2024-12-04",
+ "title": "Dokumenter: Restorasi Hutan Mangrove Indonesia",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/dokumenter-mangrove"
+ },
+ {
+ "type": "video",
+ "date": "2024-12-01",
+ "title": "Diskusi Panel: Kebijakan Pengelolaan Limbah B3",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/diskusi-limbah-b3"
+ },
+ {
+ "type": "video",
+ "date": "2024-11-29",
+ "title": "Sosialisasi Peraturan Baru tentang Kualitas Udara",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/sosialisasi-kualitas-udara"
+ },
+ {
+ "type": "video",
+ "date": "2024-11-27",
+ "title": "Liputan Khusus: Inovasi Teknologi Ramah Lingkungan",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/inovasi-ramah-lingkungan"
+ },
+ {
+ "type": "video",
+ "date": "2024-11-24",
+ "title": "Workshop Virtual: Penggunaan Sistem Informasi Lingkungan",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/workshop-sistem-informasi"
+ },
+ {
+ "type": "video",
+ "date": "2024-11-21",
+ "title": "Dokumenter: Upaya Konservasi Spesies Langka Indonesia",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/konservasi-spesies"
+ },
+ {
+ "type": "video",
+ "date": "2024-11-19",
+ "title": "Panduan Praktis: Pengolahan Sampah Rumah Tangga",
+ "thumbnail": "https://s3.palapacloud.id/amdalnet/public/berita/_DEC2485.jpg",
+ "embedUrl": "https://www.youtube.com/embed/Mb93OtlApAQ?si=njiEfYKiv6SCQB_Z",
+ "url": "/videos/pengolahan-sampah"
+ }
+]
diff --git a/public/assets/json/home/popup.json b/public/assets/json/home/popup.json
new file mode 100644
index 0000000..55af4d2
--- /dev/null
+++ b/public/assets/json/home/popup.json
@@ -0,0 +1,11 @@
+[
+ {
+ "slide_image": "assets/images/home/slider.jpg"
+ },
+ {
+ "slide_image": "assets/images/home/banner.webp"
+ },
+ {
+ "slide_image": "assets/images/home/slider.jpg"
+ }
+]
diff --git a/public/assets/json/home/wilayah.json b/public/assets/json/home/wilayah.json
new file mode 100644
index 0000000..ab1553e
--- /dev/null
+++ b/public/assets/json/home/wilayah.json
@@ -0,0 +1,22 @@
+{
+ "kabkota": [
+ { "value": "", "label": "Semua Kabupaten/Kota" },
+ { "value": "kepseribu", "label": "ADM. KEP. SERIBU" },
+ { "value": "jakpus", "label": "KOTA ADM. JAKARTA PUSAT" },
+ { "value": "jakut", "label": "KOTA ADM. JAKARTA UTARA" },
+ { "value": "jakbar", "label": "KOTA ADM. JAKARTA BARAT" },
+ { "value": "jaksel", "label": "KOTA ADM. JAKARTA SELATAN" },
+ { "value": "jaktim", "label": "KOTA ADM. JAKARTA TIMUR" }
+ ],
+ "kecamatan": [
+ { "value": "", "label": "Semua Kecamatan" },
+ { "value": "kepseribuutara", "label": "KEPULAUAN SERIBU UTARA" },
+ { "value": "kepseribuselatan", "label": "KEPULAUAN SERIBU SELATAN" }
+ ],
+ "kelurahan": [
+ { "value": "", "label": "Semua Kelurahan" },
+ { "value": "pulau_panggung", "label": "PULAU PANGGANG" },
+ { "value": "pulau_kelapa", "label": "PULAU KELAPA" },
+ { "value": "pulau_harapan", "label": "PULAU HARAPAN" }
+ ]
+}
diff --git a/public/robots.txt b/public/robots.txt
index 917a2a8..eb05362 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -1,2 +1,2 @@
User-agent: *
-Disallow:/
+Disallow:
diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php
index 22e9dd4..d22927b 100644
--- a/resources/views/components/footer.blade.php
+++ b/resources/views/components/footer.blade.php
@@ -1,7 +1,7 @@
diff --git a/resources/views/components/frontend/home/faq.blade.php b/resources/views/components/frontend/home/faq.blade.php
index 4592bb7..0069248 100644
--- a/resources/views/components/frontend/home/faq.blade.php
+++ b/resources/views/components/frontend/home/faq.blade.php
@@ -1,84 +1,59 @@
@push('css')
-
+
@endpush
@push('script')
-
+
@endpush
-
+
+
+
+
Frequently Asked Questions
-
-
-
Frequently Asked Questions
-
-
-
-