PageSourceSearch

https://gumpla.jp/wp-content/themes/gush/assets/js/common.js?28135439

js gumpla.jp collected 2026-10-03 22:14:02 UTC 52,730 bytes, 1,681 lines download raw bytes

1function AjaxEmoji() {
2  var commentElements = document.querySelectorAll(".js-comment");
3  var replacements = [
4    {
5      pattern: /\(smile\)/g,
6      replacement: '<span class="comment_txt_emoji smile"></span>',
7    },
8    {
9      pattern: /\(scream\)/g,
10      replacement: '<span class="comment_txt_emoji scream"></span>',
11    },
12    {
13      pattern: /\(eyebrow\)/g,
14      replacement: '<span class="comment_txt_emoji eyebrow"></span>',
15    },
16    {
17      pattern: /\(cry\)/g,
18      replacement: '<span class="comment_txt_emoji cry"></span>',
19    },
20    {
21      pattern: /\(angry\)/g,
22      replacement: '<span class="comment_txt_emoji angry"></span>',
23    },
24    {
25      pattern: /\(happy\)/g,
26      replacement: '<span class="comment_txt_emoji happy"></span>',
27    },
28    {
29      pattern: /\(drool\)/g,
30      replacement: '<span class="comment_txt_emoji drool"></span>',
31    },
32    {
33      pattern: /\(laugh\)/g,
34      replacement: '<span class="comment_txt_emoji laugh"></span>',
35    },
36    {
37      pattern: /\(surprised\)/g,
38      replacement: '<span class="comment_txt_emoji surprised"></span>',
39    },
40    {
41      pattern: /\(silly\)/g,
42      replacement: '<span class="comment_txt_emoji silly"></span>',
43    },
44    {
45      pattern: /\(kissing\)/g,
46      replacement: '<span class="comment_txt_emoji kissing"></span>',
47    },
48    {
49      pattern: /\(pleading\)/g,
50      replacement: '<span class="comment_txt_emoji pleading"></span>',
51    },
52    {
53      pattern: /\(troubled\)/g,
54      replacement: '<span class="comment_txt_emoji troubled"></span>',
55    },
56    {
57      pattern: /\(haro1\)/g,
58      replacement: '<span class="comment_txt_emoji haro1"></span>',
59    },
60    {
61      pattern: /\(haro2\)/g,
62      replacement: '<span class="comment_txt_emoji haro2"></span>',
63    },
64    {
65      pattern: /\(haro3\)/g,
66      replacement: '<span class="comment_txt_emoji haro3"></span>',
67    },
68    {
69      pattern: /\(haro4\)/g,
70      replacement: '<span class="comment_txt_emoji haro4"></span>',
71    },
72    {
73      pattern: /\(haro5\)/g,
74      replacement: '<span class="comment_txt_emoji haro5"></span>',
75    },
76    {
77      pattern: /\(haro6\)/g,
78      replacement: '<span class="comment_txt_emoji haro6"></span>',
79    },
80    {
81      pattern: /\(haro7\)/g,
82      replacement: '<span class="comment_txt_emoji haro7"></span>',
83    },
84    {
85      pattern: /\(momocupl1\)/g,
86      replacement: '<span class="comment_txt_emoji momocupl1"></span>',
87    },
88    {
89      pattern: /\(momocupl2\)/g,
90      replacement: '<span class="comment_txt_emoji momocupl2"></span>',
91    },
92    {
93      pattern: /\(momocupl3\)/g,
94      replacement: '<span class="comment_txt_emoji momocupl3"></span>',
95    },
96    {
97      pattern: /\(putt_yl\)/g,
98      replacement: '<span class="comment_txt_emoji putt_yl"></span>',
99    },
100    {
101      pattern: /\(putt_rd\)/g,
102      replacement: '<span class="comment_txt_emoji putt_rd"></span>',
103    },
104    {
105      pattern: /\(putt_bl\)/g,
106      replacement: '<span class="comment_txt_emoji putt_bl"></span>',
107    },
108    {
109      pattern: /\(olpha1\)/g,
110      replacement: '<span class="comment_txt_emoji olpha1"></span>',
111    },
112    {
113      pattern: /\(olpha2\)/g,
114      replacement: '<span class="comment_txt_emoji olpha2"></span>',
115    },
116    {
117      pattern: /\(olpha3\)/g,
118      replacement: '<span class="comment_txt_emoji olpha3"></span>',
119    },
120    {
121      pattern: /\(olpha4\)/g,
122      replacement: '<span class="comment_txt_emoji olpha4"></span>',
123    },
124    {
125      pattern: /\(olpha5\)/g,
126      replacement: '<span class="comment_txt_emoji olpha5"></span>',
127    },
128
129    {
130      pattern: /\(gandam-hand1\)/g,
131      replacement: '<span class="comment_txt_emoji2 gandam-hand1"></span>',
132    },
133    {
134      pattern: /\(gandam-hand2\)/g,
135      replacement: '<span class="comment_txt_emoji2 gandam-hand2"></span>',
136    },
137    {
138      pattern: /\(iori_sei\)/g,
139      replacement: '<span class="comment_txt_emoji2 iori_sei"></span>',
140    },
141    {
142      pattern: /\(renpou_emb\)/g,
143      replacement: '<span class="comment_txt_emoji2 renpou_emb"></span>',
144    },
145    {
146      pattern: /\(zion_emb\)/g,
147      replacement: '<span class="comment_txt_emoji2 zion_emb"></span>',
148    },
149    {
150      pattern: /\(gandam1\)/g,
151      replacement: '<span class="comment_txt_emoji2 gandam1"></span>',
152    },
153    {
154      pattern: /\(gandam2\)/g,
155      replacement: '<span class="comment_txt_emoji2 gandam2"></span>',
156    },
157    {
158      pattern: /\(astray_rd\)/g,
159      replacement: '<span class="comment_txt_emoji2 astray_rd"></span>',
160    },
161    {
162      pattern: /\(astray_bl\)/g,
163      replacement: '<span class="comment_txt_emoji2 astray_bl"></span>',
164    },
165    {
166      pattern: /\(astray_yl\)/g,
167      replacement: '<span class="comment_txt_emoji2 astray_yl"></span>',
168    },
169    {
170      pattern: /\(gm\)/g,
171      replacement: '<span class="comment_txt_emoji2 gm"></span>',
172    },
173    {
174      pattern: /\(zaku2\)/g,
175      replacement: '<span class="comment_txt_emoji2 zaku2"></span>',
176    },
177    {
178      pattern: /\(sha-zaku\)/g,
179      replacement: '<span class="comment_txt_emoji2 sha-zaku"></span>',
180    },
181    {
182      pattern: /\(aggu\)/g,
183      replacement: '<span class="comment_txt_emoji2 aggu"></span>',
184    },
185    {
186      pattern: /\(strike\)/g,
187      replacement: '<span class="comment_txt_emoji2 strike"></span>',
188    },
189
190    {
191      pattern: /\(zaku-kao1\)/g,
192      replacement: '<span class="comment_txt_emoji2 zaku-kao1"></span>',
193    },
194    {
195      pattern: /\(zaku-kao2\)/g,
196      replacement: '<span class="comment_txt_emoji2 zaku-kao2"></span>',
197    },
198    {
199      pattern: /\(zaku-kao3\)/g,
200      replacement: '<span class="comment_txt_emoji2 zaku-kao3"></span>',
201    },
202    {
203      pattern: /\(zaku-kao4\)/g,
204      replacement: '<span class="comment_txt_emoji2 zaku-kao4"></span>',
205    },
206    {
207      pattern: /\(zaku-kao5\)/g,
208      replacement: '<span class="comment_txt_emoji2 zaku-kao5"></span>',
209    },
210    {
211      pattern: /\(zaku-kao6\)/g,
212      replacement: '<span class="comment_txt_emoji2 zaku-kao6"></span>',
213    },
214    {
215      pattern: /\(zaku-kao7\)/g,
216      replacement: '<span class="comment_txt_emoji2 zaku-kao7"></span>',
217    },
218    {
219      pattern: /\(zaku-kao8\)/g,
220      replacement: '<span class="comment_txt_emoji2 zaku-kao8"></span>',
221    },
222    {
223      pattern: /\(zaku-kao9\)/g,
224      replacement: '<span class="comment_txt_emoji2 zaku-kao9"></span>',
225    },
226    {
227      pattern: /\(zaku-kao10\)/g,
228      replacement: '<span class="comment_txt_emoji2 zaku-kao10"></span>',
229    },
230    {
231      pattern: /\(gandam-kao1\)/g,
232      replacement: '<span class="comment_txt_emoji2 gundam-kao1"></span>',
233    },
234    {
235      pattern: /\(gandam-kao2\)/g,
236      replacement: '<span class="comment_txt_emoji2 gundam-kao2"></span>',
237    },
238    {
239      pattern: /\(gandam-kao3\)/g,
240      replacement: '<span class="comment_txt_emoji2 gundam-kao3"></span>',
241    },
242    {
243      pattern: /\(gandam-kao4\)/g,
244      replacement: '<span class="comment_txt_emoji2 gundam-kao4"></span>',
245    },
246    {
247      pattern: /\(gandam-kao5\)/g,
248      replacement: '<span class="comment_txt_emoji2 gundam-kao5"></span>',
249    },
250    {
251      pattern: /\(gandam-kao6\)/g,
252      replacement: '<span class="comment_txt_emoji2 gundam-kao6"></span>',
253    },
254    {
255      pattern: /\(gandam-kao7\)/g,
256      replacement: '<span class="comment_txt_emoji2 gundam-kao7"></span>',
257    },
258    {
259      pattern: /\(gandam-kao8\)/g,
260      replacement: '<span class="comment_txt_emoji2 gundam-kao8"></span>',
261    },
262    {
263      pattern: /\(gandam-kao9\)/g,
264      replacement: '<span class="comment_txt_emoji2 gundam-kao9"></span>',
265    },
266    {
267      pattern: /\(gandam-kao10\)/g,
268      replacement: '<span class="comment_txt_emoji2 gundam-kao10"></span>',
269    },
270  ];
271  function replaceTextInComments(commentElements, replacements) {
272    commentElements.forEach(function (element) {
273      var paragraphElement = element.querySelector("p");
274      var textContent = paragraphElement.innerHTML;
275      replacements.forEach(function (replace) {
276        textContent = textContent.replace(replace.pattern, replace.replacement);
277      });
278      paragraphElement.innerHTML = textContent;
279    });
280  }
281  replaceTextInComments(commentElements, replacements);
282}
283AjaxEmoji();
284
285// selectbox
286$("select").wrap('<div class="c-form__select">');
287
288function addLink() {
289  $(".add-link").each(function () {
290    $(this).html(
291      $(this)
292        .html()
293        .replace(
294          /((http|https|ftp):\/\/[\w?=&.\/\-;#\~%-]+(?![\w\s?&.\/;#\~%"=-]*>))/g,
295          '<a class="u-link__text" href="$1" target="_blank" rel="noopener noreferrer nofollow">$1</a> ',
296        ),
297    );
298  });
299}
300$(function () {
301  addLink();
302});
303
304// autosize
305function addAutoResize() {
306  document.querySelectorAll("[data-autoresize]").forEach(function (element) {
307    element.style.boxSizing = "border-box";
308    var offset = element.offsetHeight - element.clientHeight;
309    element.addEventListener("input", function (event) {
310      event.target.style.height = "auto";
311      event.target.style.height = event.target.scrollHeight + offset + "px";
312    });
313    element.removeAttribute("data-autoresize");
314  });
315}
316addAutoResize();
317
318// active
319$(document).ready(() => {
320  if (location.pathname != "/") {
321    $(
322      '.l-global-header .o-header-menu__list a[href^="/' +
323        location.pathname.split("/")[1] +
324        '"]',
325    ).addClass("current");
326  }
327});
328
329// macy
330var galleriesa = document.querySelectorAll(".l-grid__list");
331if (galleriesa !== null) {
332  for (let i = 0; i < galleriesa.length; i++) {
333    var instance = Macy({
334      container: ".l-grid__list",
335      trueOrder: true,
336      waitForImages: true,
337      margin: 16,
338      columns: 5,
339      breakAt: {
340        1400: 5,
341        1200: 4,
342        992: 3,
343        768: 2,
344      },
345    });
346  }
347}
348var galleriesb = document.querySelectorAll(".l-grid-lg__list");
349if (galleriesb !== null) {
350  for (let i = 0; i < galleriesb.length; i++) {
351    var instance = Macy({
352      container: ".l-grid-lg__list",
353      trueOrder: true,
354      waitForImages: true,
355      margin: 16,
356      columns: 4,
357      breakAt: {
358        1400: 4,
359        1200: 4,
360        992: 3,
361        768: 2,
362      },
363    });
364  }
365}
366
367// accordion
368const menu = document.querySelectorAll(".c-acordion-menu__list-link");
369function toggle() {
370  const content = this.nextElementSibling;
371  this.classList.toggle("is-active");
372  content.classList.toggle("is-open");
373}
374for (let i = 0; i < menu.length; i++) {
375  menu[i].addEventListener("click", toggle);
376}
377
378const submenu = document.querySelectorAll(".c-acordion-menu__list-subtitle");
379function toggle() {
380  const content = this.nextElementSibling;
381  this.classList.toggle("is-active");
382  content.classList.toggle("is-open");
383}
384for (let i = 0; i < submenu.length; i++) {
385  submenu[i].addEventListener("click", toggle);
386}
387
388const aopen = document.querySelectorAll(
389  ".c-acordion__left .c-acordion-menu__list-btn",
390);
391aopen.forEach((trigger) => trigger.addEventListener("click", toggleAopen));
392function toggleAopen() {
393  const items = document.querySelectorAll(".c-acordion-menu__list-item");
394  const thisItem = this.parentNode;
395  const navOverflow = this.closest(".c-acordion-overflow");
396  items.forEach((item) => {
397    if (thisItem == item) {
398      thisItem.classList.toggle("is-open");
399      if (navOverflow !== null) {
400        navOverflow.classList.add("is-height");
401      } else if (navOverflow === null) {
402        navOverflow.classList.remove("is-height");
403      }
404      return;
405    }
406    item.classList.remove("is-open");
407  });
408}
409
410// modal
411const modalOpen = document.querySelectorAll(".modal-trigger");
412const modalClose = document.querySelectorAll(".c-modal__overlay");
413const buttonClose = document.querySelectorAll(".c-modal__close");
414modalOpen.forEach((trigger) => trigger.addEventListener("click", toggleModal));
415var savedScrollPosition = 0;
416function toggleModal() {
417  const items = document.querySelectorAll(".modal");
418  const thisItem = this.parentNode;
419  const thisChildren = this.nextElementSibling;
420  const navOverflow = this.closest(".l-global-header");
421  const thisFade = document.getElementById("customOverflow");
422
423  items.forEach((item) => {
424    if (thisItem == item) {
425      thisItem.classList.toggle("is-active");
426      thisChildren.classList.toggle("is-open");
427      setTimeout(() => {
428        const modal = thisChildren.querySelector(".xmodal-content");
429        if (modal) {
430          modal.style.height = "auto";
431          modal.style.maxHeight = "90vh";
432        }
433      }, 0);
434      if (navOverflow) {
435        navOverflow.classList.toggle("is-height");
436      }
437      if (thisFade) {
438        thisFade.classList.add("fadenone");
439      }
440      savedScrollPosition = window.scrollY || window.pageYOffset;
441      return;
442    }
443    item.classList.remove("is-active");
444    item.parentNode.parentNode.parentNode.classList.remove("fadenone");
445    item.lastElementChild.classList.remove("is-open");
446    if (thisFade !== null) {
447      thisFade.classList.remove("sub-open__parent");
448    }
449  });
450}
451modalOpen.forEach((trigger) => trigger.addEventListener("click", toggleModal));
452for (var i = 0; i < modalClose.length; i++) {
453  modalClose[i].addEventListener("click", closeModal, false);
454}
455for (var i = 0; i < buttonClose.length; i++) {
456  buttonClose[i].addEventListener("click", closeModalButton, false);
457}
458
459function closeModal() {
460  const thisCmodal = this.parentNode;
461  const thisModal = this.closest(".modal");
462  const navOverflow = this.closest(".l-global-header");
463  const thisFade = this.closest(".l-single-main__state");
464  thisCmodal.classList.remove("is-open");
465  thisModal.classList.remove("is-active");
466  if (thisFade !== null) {
467    thisFade.classList.remove("fadenone");
468  }
469  if (navOverflow !== null) {
470    navOverflow.classList.remove("is-height");
471  }
472  if (thisFade !== null) {
473    thisFade.classList.remove("sub-open__parent");
474  }
475}
476function closeModalButton() {
477  const thisCmodal = this.parentNode.parentNode.parentNode;
478  const thisModal = this.parentNode.parentNode.parentNode.parentNode;
479  const thisResult = this.parentNode.parentNode.parentNode.parentNode;
480  thisCmodal.classList.remove("is-open");
481  thisModal.classList.remove("is-active");
482  thisResult.classList.remove("p-search__result");
483}
484
485const modalbody = document.querySelector("main");
486if (modalbody) {
487  modalbody.addEventListener("click", (event) => {
488    const activeModal = document.querySelector(".modal.is-active");
489    if (event.target.closest(".l-single-container__action")) {
490      return;
491    }
492    if (activeModal !== null && !activeModal.contains(event.target)) {
493      const thisCmodals = document.querySelectorAll(".c-action__menu");
494      const thisModals = document.querySelectorAll(".modal");
495      thisCmodals.forEach((element) => {
496        element.classList.remove("is-open");
497      });
498      thisModals.forEach((element) => {
499        element.classList.remove("is-active");
500      });
501    }
502  });
503  modalbody.querySelectorAll(".c-modal__stopprop").forEach((cStopprop) => {
504    cStopprop.addEventListener("click", (event) => {
505      event.stopPropagation();
506    });
507  });
508}
509
510const modalheader = document.querySelector(".l-global-header__container");
511if (modalheader) {
512  modalheader.addEventListener("click", (event) => {
513    const activeModal = document.querySelector(".modal.is-active");
514    if (event.target.closest(".l-global-header__item")) {
515      return;
516    }
517    if (activeModal !== null && !activeModal.contains(event.target)) {
518      const thisCmodals = document.querySelectorAll(".c-action__menu-list");
519      const thisModals = document.querySelectorAll(".c-modal");
520      thisCmodals.forEach((element) => {
521        element.classList.remove("is-open");
522      });
523      thisModals.forEach((element) => {
524        element.classList.remove("is-active");
525      });
526    }
527  });
528  modalheader.querySelectorAll(".c-modal__stopprop").forEach((cStopprop) => {
529    cStopprop.addEventListener("click", (event) => {
530      event.stopPropagation();
531    });
532  });
533}
534
535// submodal
536const submodalOpen = document.querySelectorAll(".submodal-trigger");
537const submodalClose = document.querySelectorAll(".c-submodal__overlay");
538const subbuttonClose = document.querySelectorAll(".c-submodal__close");
539submodalOpen.forEach((trigger) =>
540  trigger.addEventListener("click", subtoggleModal),
541);
542function subtoggleModal() {
543  const subitems = document.querySelectorAll(".submodal");
544  const subthisItem = this.parentNode;
545  const subthisChildren = this.nextElementSibling;
546  const parentthisModal = this.closest(".modal");
547  const thisFade = this.closest(".l-single-main__state");
548
549  if (thisFade) {
550    thisFade.classList.add("sub-open__parent");
551  }
552
553  if (parentthisModal) {
554    parentthisModal.dataset.status = "sub-open";
555  }
556
557  subitems.forEach((subitem) => {
558    if (subthisItem == subitem) {
559      subthisItem.classList.toggle("is-active");
560      subthisChildren.classList.toggle("is-open");
561      return;
562    }
563  });
564}
565for (var i = 0; i < submodalClose.length; i++) {
566  submodalClose[i].addEventListener(
567    "click",
568    function () {
569      const subthisCmodal = this.closest(".c-submodal");
570      const subthisModal = this.closest(".submodal");
571      const parentthisCmodal = this.closest(".c-modal");
572      const parentthisModal = this.closest(".modal");
573      const thisFade = this.closest(".l-single-main__state");
574      const repostElement = document.querySelector("#repost_item");
575      // nullチェックを行い、存在する場合のみクラスを操作
576      if (subthisCmodal) {
577        subthisCmodal.classList.remove("is-open");
578      }
579      if (subthisModal) {
580        subthisModal.classList.remove("is-active");
581      }
582      if (parentthisCmodal) {
583        parentthisCmodal.classList.remove("is-open");
584      }
585      if (parentthisModal) {
586        parentthisModal.classList.remove("is-active");
587      }
588      if (thisFade) {
589        thisFade.classList.remove("sub-open__parent");
590        thisFade.classList.remove("fadenone");
591      }
592      if (parentthisModal) {
593        parentthisModal.dataset.status = "";
594      }
595      if (repostElement) {
596        repostElement.innerHTML = "";
597      }
598    },
599    false,
600  );
601}
602
603for (var i = 0; i < subbuttonClose.length; i++) {
604  subbuttonClose[i].addEventListener(
605    "click",
606    function () {
607      const subthisCmodal = this.closest(".c-submodal");
608      const subthisModal = this.closest(".submodal");
609      const parentthisCmodal = this.closest(".c-modal");
610      const parentthisModal = this.closest(".modal");
611      const thisFade = this.closest(".l-single-main__state");
612      subthisCmodal.classList.remove("is-open");
613      subthisModal.classList.remove("is-active");
614      parentthisCmodal.classList.remove("is-open");
615      parentthisModal.classList.remove("is-active");
616      thisFade.classList.remove("sub-open__parent");
617      thisFade.classList.remove("fadenone");
618      parentthisModal.dataset.status = "";
619    },
620    false,
621  );
622}
623
624//login-placeholder
625$('input[value="forever"]').prop("checked", true);
626const path = location.pathname;
627if (path.match("register")) {
628  const registId = document.querySelector(".tml-register #user_login");
629  const registEmail = document.querySelector(".tml-register #user_email");
630  const registPass1 = document.querySelector(".tml-register #pass1");
631  const registPass2 = document.querySelector(".tml-register #pass2");
632  registId.placeholder;
633  registEmail.placeholder;
634  registPass1.placeholder;
635  registPass2.placeholder;
636  registId.placeholder = "半角英数(ニックネームは後から登録できます)";
637  registEmail.placeholder = "[email protected]";
638  registPass1.placeholder = "パスワード";
639  registPass2.placeholder = "パスワード(確認)";
640} else if (path.match("login")) {
641  const loginId = document.querySelector(".tml-login #user_login");
642  const loginPass = document.querySelector(".tml-login #user_pass");
643  loginId.placeholder;
644  loginPass.placeholder;
645  loginId.placeholder = "メールアドレス or ユーザー名";
646  loginPass.placeholder = "パスワード";
647} else if (path.match("lostpassword")) {
648  const loginId = document.querySelector(".tml-lostpassword #user_login");
649  loginId.placeholder;
650  loginId.placeholder = "メールアドレス";
651}
652
653// good-message
654const goodOpen = document.querySelectorAll(".rating_box");
655for (var i = 0; i < goodOpen.length; i++) {
656  goodOpen[i].addEventListener(
657    "click",
658    function () {
659      const thisGood = this.parentNode.parentNode;
660      thisGood.dataset.state = "good-appeared";
661      setTimeout(function () {
662        thisGood.dataset.state = "good-complete";
663      }, 3000);
664    },
665    false,
666  );
667}
668
669// copy-alert
670$(function () {
671  $(".c-copy-alert__trigger").on("click", function () {
672    const text = $(this).next().text();
673    let $textarea = $("<textarea></textarea>");
674    $textarea.text(text);
675    $(this).append($textarea);
676    $textarea.select();
677    document.execCommand("copy");
678    $textarea.remove();
679    $(".c-copy-alert").show().delay(2000).fadeOut(400);
680  });
681});
682
683//ajax
684const ajaxButton = document.querySelector(".c-ajax-button");
685
686if (ajaxButton !== null) {
687  ajaxButton.addEventListener(
688    "click",
689    function () {
690      const ajaxLoader = this.closest(
691        ".l-global-header__item-notification",
692      )?.querySelector(".o-global-notification-modal");
693      if (!ajaxLoader) return;
694      const file_area = ajaxLoader.querySelector("#ajax-area");
695      function loadData() {
696        ajaxLoader.dataset.status = "open";
697      }
698      fetch("/good")
699        .then((response) => response.text())
700        .then((data) => {
701          ajaxLoader.dataset.status = "open";
702
703          const parser = new DOMParser();
704          const html = parser.parseFromString(data, "text/html");
705
706          const ajax_elements = html.querySelectorAll(".ajax-content");
707
708          if (file_area) {
709            for (const ajax of ajax_elements) {
710              file_area.appendChild(ajax);
711            }
712          }
713
714          // JSロード部分はそのまま(ただし安全化)
715          AjaxEmoji?.();
716
717          const scriptElement = document.createElement("script");
718
719          scriptElement.onload = function () {
720            var commentElements = document.querySelectorAll(".js-comment");
721            replaceTextInComments(commentElements, replacements);
722          };
723
724          document.body.appendChild(scriptElement);
725        })
726        .catch((err) => console.error(err));
727    },
728    { once: true },
729  );
730}
731
732// darkcheck
733$(document).ready(function () {
734  const darkForm = $(".c-drawer-menu__dark form");
735  if (darkForm.length > 0) {
736    darkForm.on("change", function (e) {
737      $(this).closest("form").submit();
738      if ($(".wpuf_dark_mode_618144").prop("checked")) {
739        $("html").attr("mode", "dark");
740      } else {
741        $("html").removeAttr("mode", "dark");
742      }
743    });
744    $(".c-drawer-menu__dark .wpuf-checkbox-block").before(
745      '<span class="darkmode_switch"></span>',
746    );
747  }
748});
749
750//notification
751document.addEventListener("DOMContentLoaded", function () {
752  const trigger = document.querySelector(
753    ".l-global-header__item-notification .c-ajax-button",
754  );
755  if (!trigger) return;
756  trigger.addEventListener("click", function () {
757    fetch("/wp-json/myapp/v1/notification/read", {
758      method: "POST",
759      credentials: "same-origin",
760      headers: {
761        "X-WP-Nonce": window.WP_API.nonce,
762      },
763    }).catch(() => {});
764  });
765});
766//darkmode
767document.addEventListener("DOMContentLoaded", () => {
768  const checkbox = document.querySelector("#dark_mode");
769  if (!checkbox) return;
770  const isDark = document.documentElement.getAttribute("mode") === "dark";
771  checkbox.checked = isDark;
772  checkbox.addEventListener("change", async (e) => {
773    const isDark = e.target.checked;
774    if (isDark) {
775      document.documentElement.setAttribute("mode", "dark");
776    } else {
777      document.documentElement.removeAttribute("mode");
778    }
779    try {
780      await fetch("/wp-json/my/v1/dark-mode", {
781        method: "POST",
782        credentials: "same-origin",
783        headers: {
784          "Content-Type": "application/json",
785          "X-WP-Nonce": window.WP_API.nonce,
786        },
787        body: JSON.stringify({
788          dark_mode: isDark ? 1 : 0,
789        }),
790      });
791    } catch (e) {
792      console.error("保存失敗", e);
793    }
794  });
795});
796//gridmode
797document.addEventListener("DOMContentLoaded", () => {
798  const checkbox = document.getElementById("grid_mode");
799  if (!checkbox) return;
800  const targets = document.querySelectorAll(".l-gridless__list");
801  const isGrid = document.body.classList.contains("is-grid-mode");
802  checkbox.checked = isGrid;
803  if (isGrid) {
804    targets.forEach((el) => el.classList.add("l-gridless__grid"));
805  }
806  checkbox.addEventListener("change", async (e) => {
807    const isGrid = e.target.checked;
808    targets.forEach((el) => {
809      el.classList.toggle("l-gridless__grid", isGrid);
810    });
811    try {
812      await fetch("/wp-json/my/v1/grid-mode", {
813        method: "POST",
814        credentials: "same-origin",
815        headers: {
816          "Content-Type": "application/json",
817          "X-WP-Nonce": window.WP_API.nonce,
818        },
819        body: JSON.stringify({
820          grid_mode: isGrid ? 1 : 0,
821        }),
822      });
823    } catch (e) {
824      console.error("保存失敗", e);
825    }
826  });
827});
828//storymode
829document.addEventListener("DOMContentLoaded", () => {
830  const checkbox = document.getElementById("story_mode");
831  if (!checkbox) return;
832  checkbox.addEventListener("change", async () => {
833    const formData = new FormData();
834    formData.append("action", "toggle_story_mode");
835    formData.append("value", checkbox.checked ? "1" : "0");
836    formData.append("nonce", window.WP_API.nonce);
837    await fetch("/wp-admin/admin-ajax.php", {
838      method: "POST",
839      credentials: "same-origin",
840      body: formData,
841    });
842    location.reload();
843  });
844});
845
846//searchhistory
847$(function () {
848  $("#historyForm").searchHistory({
849    sendWhenSelect: false,
850  });
851});
852
853const fadeScroll = document.querySelectorAll(".scroll-fade");
854if (fadeScroll.length !== 0) {
855  window.onscroll = function () {
856    var check = window.pageYOffset;
857    var docHeight = $(document).height();
858    var dispHeight = $(window).height();
859
860    if (check > docHeight - dispHeight - 500) {
861      fadeScroll[0].dataset.state = "fadeout";
862    } else {
863      fadeScroll[0].dataset.state = "fadein";
864    }
865  };
866}
867
868$(document).ready(function () {
869  var fadeScrollDown2 = $(".scroll-fade--down");
870
871  if (fadeScrollDown2.length !== 0) {
872    $(window).on("scroll", function () {
873      var check = window.pageYOffset;
874
875      // 上から100pxスクロールしたらfadeout
876      if (check > 100) {
877        fadeScrollDown2.attr("data-state", "fadeout");
878      } else {
879        fadeScrollDown2.attr("data-state", "fadein");
880      }
881    });
882  }
883});
884
885if (window.matchMedia("(max-width: 768px)").matches) {
886} else {
887  $(window).on("scroll", function () {
888    var scrollTop = $(window).scrollTop();
889    var bgPosition = scrollTop / 5 - 25;
890    if ($(this).scrollTop() > 144) {
891      if (bgPosition) {
892        $(".p-author-cover__image").css(
893          "background-position",
894          "center top +" + bgPosition + "px",
895        );
896      }
897    } else {
898      if (bgPosition) {
899        $(".p-author-cover__image").css("background-position", "center top");
900      }
901    }
902  });
903}
904
905$('.p-post-moment input[value="high"]').prop("checked", true);
906$("li.update_level").hide();
907
908//フォロー
909$(function () {
910  $(".alert-btn-good").on("click", function () {
911    alert("上限に達しました。作品ページからいいね!してください");
912  });
913  $(".alert-btn-join").on("click", function () {
914    alert("メンバーを受け付けていないため、参加できません。");
915  });
916  $(".alert-btn-count").on("click", function () {
917    alert("メンバーの上限数を達しているため、参加できません。");
918  });
919});
920
921//ブロック
922$(function () {
923  $(".blocked #respond").remove();
924  $(".blocked .rating_box").remove();
925  $(".blocked .fn-btn").before(
926    '<a class="wpw-fp-follow-btn alert-btn-follow">フォローする</a>',
927  );
928  $(".blocked .fn-btn").remove();
929  $(".blocked .alert-btn-follow").on("click", function () {
930    alert("フォローできません。");
931  });
932});
933
934$(".o-comment__box-entry .wp-embedded-content")
935  .closest(".edit-comment")
936  .addClass("o-comment__box-embed");
937$(".o-comment__box-entry .wp-embedded-content").each(function () {
938  $(this).prependTo($(this).parent().parent());
939});
940
941$(function () {
942  $(".wpuf-checkbox-block").append('<span class="switch"></span>');
943});
944
945const today = new Date();
946let week = today.getDay();
947if (week == 6) {
948  let shoptags = document.getElementsByClassName("shop_tags");
949  if (shoptags.length > 0) {
950    shoptags[0].classList.remove("d-none");
951  }
952}
953
954$(function () {
955  $("[id^=cat]").change(function () {
956    $("#historyForm" + $(this).attr("id").slice(-1)).submit();
957  });
958});
959
960// scroll-arrow
961const box = document.querySelector(".c-scroll-arrow");
962if (box !== null) {
963  (function () {
964    box.onscroll = function () {
965      var max = this.scrollWidth - this.offsetWidth;
966      data = Math.round((this.scrollLeft / max) * 100);
967      var scroll = data;
968      if (scroll == 100) {
969        this.nextElementSibling.dataset.status = "disabled";
970      } else if (scroll == 0) {
971        this.previousElementSibling.dataset.status = "disabled";
972      } else {
973        delete this.nextElementSibling.dataset.status;
974        delete this.previousElementSibling.dataset.status;
975      }
976    };
977    box.onscroll();
978  })();
979}
980
981$(document).ready(function () {
982  var currentURL = window.location.href;
983  var targetString1 = "/test2";
984  var targetString2 = "tag=moment";
985
986  $(".c-scroll").each(function () {
987    var $scrollContainer = $(this).find(".scroll-container__pc");
988    var $prevArrow = $(this).find(".c-scroll-arrow__prev");
989    var $nextArrow = $(this).find(".c-scroll-arrow__next");
990    var offset = 0;
991
992    if (
993      currentURL.includes(targetString1) ||
994      currentURL.includes(targetString2)
995    ) {
996      var initialOffset = 3 * 216; // デバイス幅が768より大きい場合
997      offset = initialOffset;
998      $scrollContainer.scrollLeft(initialOffset);
999
1000      $prevArrow.click(function () {
1001        offset -= 216;
1002        $scrollContainer.animate({ scrollLeft: offset }, 200, "swing");
1003      });
1004
1005      $nextArrow.click(function () {
1006        offset += 216;
1007        $scrollContainer.animate({ scrollLeft: offset }, 200, "swing");
1008      });
1009    } else {
1010      $prevArrow.click(function () {
1011        offset -= 216;
1012        $scrollContainer.animate({ scrollLeft: offset }, 200, "swing");
1013      });
1014
1015      $nextArrow.click(function () {
1016        offset += 216;
1017        $scrollContainer.animate({ scrollLeft: offset }, 200, "swing");
1018      });
1019    }
1020  });
1021});
1022
1023$(function () {
1024  $(document).on("click", ".icon-notification", function (e) {
1025    $(".u-badge__notification").remove();
1026  });
1027});
1028
1029$(document).ready(function () {
1030  var currentURL = window.location.href;
1031  if (currentURL.indexOf("moment-post") !== -1) {
1032    function updateTagValues(tagName) {
1033      var tagCopyVal = $("#tag-copy").val();
1034      var tagsVal = $("#tags").val();
1035      if (tagCopyVal !== "") {
1036        tagCopyVal += "," + tagName;
1037      } else {
1038        tagCopyVal = tagName;
1039      }
1040      if (tagsVal !== "") {
1041        tagsVal += "," + tagName;
1042      } else {
1043        tagsVal = tagName;
1044      }
1045      $("#tag-copy").val(tagCopyVal);
1046      $("#tags").val(tagsVal);
1047    }
1048    $(".osusume-tag .c-tag__list-link").click(function () {
1049      var tagName = $(this).text();
1050      var tagLink = $(this);
1051      if (!tagLink.hasClass("active")) {
1052        tagLink.addClass("active");
1053        updateTagValues(tagName);
1054      } else {
1055        tagLink.removeClass("active");
1056        var removedTagName = tagName;
1057        var tagCopyVal = $("#tag-copy").val();
1058        var tagsArray = tagCopyVal.split(",");
1059        var updatedTagsArray = tagsArray.filter(function (tag) {
1060          return tag.trim() !== removedTagName.trim();
1061        });
1062        var updatedTagCopyVal = updatedTagsArray.join(",");
1063        $("#tag-copy").val(updatedTagCopyVal);
1064        var tagsVal = $("#tags").val();
1065        var updatedTagsVal = tagsVal
1066          .split(",")
1067          .filter(function (tag) {
1068            return tag.trim() !== removedTagName.trim();
1069          })
1070          .join(",");
1071        $("#tags").val(updatedTagsVal);
1072      }
1073      $(document).on("click", ".tagit-close", function () {
1074        var removedTagName = $(this)
1075          .closest(".tagit-choice")
1076          .find(".tagit-label")
1077          .text(); // 削除されるタグのテキストを取得
1078        $(this).closest(".tagit-choice").remove();
1079        var tagCopyVal = $("#tag-copy").val();
1080        var tagsArray = tagCopyVal.split(",");
1081        var updatedTagsArray = tagsArray.filter(function (tag) {
1082          return tag.trim() !== removedTagName.trim();
1083        });
1084        var updatedTagCopyVal = updatedTagsArray.join(",");
1085        $("#tag-copy").val(updatedTagCopyVal);
1086        var tagsVal = $("#tags").val();
1087        var tagsArray = tagsVal.split(",");
1088        var updatedTagsArray = tagsArray.filter(function (tag) {
1089          return tag.trim() !== removedTagName.trim();
1090        });
1091        var updatedTagsVal = updatedTagsArray.join(",");
1092        $("#tags").val(updatedTagsVal);
1093      });
1094    });
1095    $(".p-post-moment .osusume-tag").each(function () {
1096      $(this).appendTo($(this).parent().find(".tag-copy"));
1097    });
1098  } else if (
1099    currentURL.indexOf("post") !== -1 ||
1100    currentURL.indexOf("test2") !== -1
1101  ) {
1102  } else {
1103    function updateTagValues(tagName) {
1104      var tagCopyVal = $("#tag-copy").val();
1105      var tagsVal = $("#tags").val();
1106      if (tagCopyVal !== "") {
1107        tagCopyVal += "," + tagName;
1108      } else {
1109        tagCopyVal = tagName;
1110      }
1111      if (tagsVal !== "") {
1112        tagsVal += "," + tagName;
1113      } else {
1114        tagsVal = tagName;
1115      }
1116      $("#tag-copy").val(tagCopyVal);
1117      $("#tags").val(tagsVal);
1118    }
1119    $(".osusume-tag .c-tag__list-link").click(function () {
1120      var tagName = $(this).text();
1121      var tagLink = $(this);
1122      if (!tagLink.hasClass("active")) {
1123        tagLink.addClass("active");
1124        updateTagValues(tagName);
1125      } else {
1126        tagLink.removeClass("active");
1127        var removedTagName = tagName;
1128        var tagCopyVal = $("#tag-copy").val();
1129        var tagsArray = tagCopyVal.split(",");
1130        var updatedTagsArray = tagsArray.filter(function (tag) {
1131          return tag.trim() !== removedTagName.trim();
1132        });
1133        var updatedTagCopyVal = updatedTagsArray.join(",");
1134        $("#tag-copy").val(updatedTagCopyVal);
1135        var tagsVal = $("#tags").val();
1136        var updatedTagsVal = tagsVal
1137          .split(",")
1138          .filter(function (tag) {
1139            return tag.trim() !== removedTagName.trim();
1140          })
1141          .join(",");
1142        $("#tags").val(updatedTagsVal);
1143      }
1144      $(document).on("click", ".tagit-close", function () {
1145        var removedTagName = $(this)
1146          .closest(".tagit-choice")
1147          .find(".tagit-label")
1148          .text(); // 削除されるタグのテキストを取得
1149        $(this).closest(".tagit-choice").remove();
1150        var tagCopyVal = $("#tag-copy").val();
1151        var tagsArray = tagCopyVal.split(",");
1152        var updatedTagsArray = tagsArray.filter(function (tag) {
1153          return tag.trim() !== removedTagName.trim();
1154        });
1155        var updatedTagCopyVal = updatedTagsArray.join(",");
1156        $("#tag-copy").val(updatedTagCopyVal);
1157        var tagsVal = $("#tags").val();
1158        var tagsArray = tagsVal.split(",");
1159        var updatedTagsArray = tagsArray.filter(function (tag) {
1160          return tag.trim() !== removedTagName.trim();
1161        });
1162        var updatedTagsVal = updatedTagsArray.join(",");
1163        $("#tags").val(updatedTagsVal);
1164      });
1165    });
1166    $(".p-post-moment .osusume-tag").each(function () {
1167      $(this).appendTo($(this).parent().find(".tag-copy"));
1168    });
1169  }
1170});
1171
1172$(document).ready(function () {
1173  var authorContainer = $(".l-author-container");
1174  var initialOffset;
1175  if (authorContainer.length > 0) {
1176    $(window).scroll(function () {
1177      if (initialOffset === undefined) {
1178        initialOffset = authorContainer.offset().top - 80; // -56px で初期位置をずらす
1179      }
1180    });
1181
1182    // 特定の位置にスクロールする関数
1183    function scrollToPosition(position) {
1184      window.scrollTo(0, position);
1185    }
1186  }
1187});
1188
1189function reportAjax() {
1190  $(".report-trigger").on("click", function () {
1191    $(".o-comment__box-footer .c-modal").removeClass("is-open");
1192    if ($(".report-modal").hasClass("is-open")) {
1193      $(".report-modal").removeClass("is-open");
1194      $(".o-comment__box-footer .c-action__menu").removeClass("is-open");
1195      $(".c-grid-gunsta-state__list-item").removeClass("sub-open__parent");
1196      $(".c-grid-gunsta-state__list-item").removeClass("fadeone");
1197      $(".main .wpuf-submit input").val("a");
1198    } else {
1199      $(".main .report-modal").addClass("is-open");
1200      $(this)
1201        .parent()
1202        .find(".c-grid-gunsta-state__list-item")
1203        .addClass("sub-open__parent");
1204      $(this)
1205        .parent()
1206        .find(".c-grid-gunsta-state__list-item")
1207        .removeClass("fadeone");
1208      const result = $(this).closest(".l-grid__list-item").data();
1209      const value = result.value;
1210      $(".main .wpuf-submit-value").val(value);
1211    }
1212  });
1213  $(".c-ajax-button__author").on("click", function () {
1214    $(".c-grid-gunsta-state__list-item").addClass("sub-open__parent");
1215  });
1216  $(".repost-trigger").on("click", function () {
1217    const repostModal = $(this).closest(".repost-modal");
1218    if (repostModal.hasClass("is-open")) {
1219      repostModal.removeClass("is-open");
1220      $("#repost_item img").remove(); // 既存の画像を削除
1221    } else {
1222      $(".main .repost-modal").addClass("is-open");
1223      $(this).parent().find(".repost-action").addClass("is-open");
1224      const result = $(this).closest(".repost-body").data();
1225      const value = result.value;
1226
1227      $("#repost").val(value);
1228      const $repostImage = $(this)
1229        .closest(".repost-body")
1230        .find(".repost-image");
1231      const srcValue = $repostImage.attr("src");
1232      if (!srcValue) return;
1233      const $image = $("<img>", {
1234        class: "o-pickup-setting__list-image",
1235        src: srcValue,
1236        loading: "lazy",
1237      });
1238      // 既存の画像を削除してから新しい画像を追加する
1239      $("#repost_item").empty().append($image);
1240    }
1241  });
1242  $(".c-ajax-button__author").on("click", function () {
1243    $(".c-grid-gunsta-state__list-item").addClass("sub-open__parent");
1244  });
1245}
1246reportAjax();
1247
1248$(document).ready(function () {
1249  $(".p-contents-more__triger .u-link__text").on("click", function () {
1250    $(this).closest(".p-contents-more").toggleClass("is-open"); // ← 親要素だけ
1251  });
1252  checkContainerHeight();
1253  function checkContainerHeight() {
1254    $(".p-contents-more").each(function () {
1255      // ← 各要素ごとに判定
1256      var containerHeight = $(this)
1257        .find(".p-contents-more__container")
1258        .height();
1259      if (containerHeight >= 73.5 && containerHeight <= 74.5) {
1260        $(this).find(".p-contents-more__triger").show();
1261      } else {
1262        $(this).find(".p-contents-more__triger").hide();
1263      }
1264    });
1265  }
1266  $(window).on("resize", function () {
1267    checkContainerHeight();
1268  });
1269});
1270
1271$(document).ready(function () {
1272  $(document).on("click", ".p-moment-more__triger .u-link__text", function () {
1273    $(this).closest(".p-moment-more").toggleClass("is-open");
1274  });
1275  checkContainerHeight();
1276  function checkContainerHeight() {
1277    $(".p-moment-more").each(function () {
1278      // ← 各要素ごとに判定
1279      var containerHeight = $(this).find(".p-moment-more__container").height();
1280      if (containerHeight >= 159.5 && containerHeight <= 160.5) {
1281        $(this).find(".p-moment-more__triger").show();
1282      }
1283    });
1284  }
1285  $(window).on("resize", function () {
1286    checkContainerHeight();
1287  });
1288  $(document).ajaxComplete(function () {
1289    checkContainerHeight();
1290    addLink();
1291  });
1292});
1293
1294$(function () {
1295  var $fileSelector = $(".wpuf-multiple .file-selector");
1296  var $attachmentList = $(".wpuf-multiple .wpuf-attachment-list");
1297
1298  // .file-selectorを<li>
1298で囲んで、.wpuf-attachment-listの最後に追加
1299  $fileSelector
1300    .wrap('<div class="wpuf-image-wrap wpuf-add-image">')
1301    .insertAfter($attachmentList);
1302});
1303function updateListClass() {
1304  var fileSelector = $(
1305    ".wpuf-multiple .wpuf-attachment-upload-filelist .file-selector",
1306  );
1307  var liCount = $(".wpuf-multiple .wpuf-attachment-list.thumbnails li").length;
1308
1309  if (liCount > 0) {
1310    fileSelector.addClass("u-spacer__top--md wpuf-important");
1311  } else {
1312    fileSelector.removeClass("u-spacer__top--md wpuf-important");
1313  }
1314
1315  if (liCount >= 6) {
1316    fileSelector.removeClass("u-spacer__top--md wpuf-important");
1317  }
1318}
1319
1320var observer = new MutationObserver(function (mutations) {
1321  mutations.forEach(function (mutation) {
1322    if (mutation.addedNodes.length || mutation.removedNodes.length) {
1323      updateListClass();
1324    }
1325  });
1326});
1327
1328$(document).ready(function () {
1329  updateListClass();
1330
1331  var targetNode = document.querySelector(
1332    ".wpuf-multiple .wpuf-attachment-upload-filelist",
1333  );
1334
1335  if (targetNode) {
1336    var config = { childList: true, subtree: true };
1337    observer.observe(targetNode, config);
1338  }
1339});
1340document.addEventListener("DOMContentLoaded", function () {
1341  var textAreaFields = document.querySelectorAll(".wpuf-fields .textareafield");
1342  textAreaFields.forEach(function (textarea) {
1343    var textCountDiv = textarea
1344      .closest(".wpuf-fields")
1345      .querySelector(".text-count-number");
1346    if (textCountDiv) {
1347      updateTextCount();
1348      textarea.addEventListener("input", function () {
1349        updateTextCount();
1350      });
1351    }
1352    function updateTextCount() {
1353      var plainText = textarea.value.replace(/\s/g, "");
1354      if (textCountDiv) {
1355        textCountDiv.textContent = plainText.length;
1356      }
1357    }
1358  });
1359});
1360
1361//xmodal
1362window.addEventListener("DOMContentLoaded", function () {
1363  const isIOS = /iPad|iPhone|iPod/.test(navigator.platform);
1364  let scrollYPosition = 0;
1365  let firstModal = null; // 最初に開いたモーダルを保持する変数
1366
1367  const preventBackgroundScroll = (modal) => {
1368    if (isIOS) {
1369      scrollYPosition = window.scrollY;
1370      document.body.style.position = "fixed";
1371      document.body.style.top = `-${scrollYPosition}px`;
1372      modal.addEventListener("scroll", preventModalScroll);
1373    }
1374  };
1375
1376  const allowBackgroundScroll = () => {
1377    if (isIOS) {
1378      document.body.style.position = "";
1379      document.body.style.top = "";
1380      window.scrollTo(0, scrollYPosition);
1381      document.querySelectorAll(".xmodal").forEach((modal) => {
1382        modal.removeEventListener("scroll", preventModalScroll);
1383      });
1384    }
1385  };
1386
1387  const preventModalScroll = (e) => {
1388    e.preventDefault();
1389  };
1390
1391  const showBottomSheet = (modal) => {
1392    modal.classList.add("show");
1393    document.body.classList.add("xmodal-lock");
1394    preventBackgroundScroll(modal);
1395    const sheetContent = modal.querySelector(".xmodal-content");
1396    const parentHeight = sheetContent.parentElement.clientHeight;
1397    const actualContentHeight = sheetContent.clientHeight;
1398    const calculatedHeightPercentage =
1399      (actualContentHeight / parentHeight) * 100;
1400    updateSheetHeight(sheetContent, calculatedHeightPercentage);
1401  };
1402
1403  const hideBottomSheet = (modal) => {
1404    if (!modal) {
1405      return;
1406    }
1407    if (modal.classList.contains("show")) {
1408      modal.classList.remove("show");
1409      modal.classList.remove("dragging");
1410      document.body.classList.remove("xmodal-lock");
1411      allowBackgroundScroll();
1412      const sheetContent = modal.querySelector(".xmodal-content");
1413      sheetContent.style.maxHeight = "";
1414
1415      document.querySelectorAll(".is-active").forEach((element) => {
1416        element.classList.remove("is-active");
1417      });
1418      document.querySelectorAll(".is-open").forEach((element) => {
1419        element.classList.remove("is-open");
1420      });
1421      document.querySelectorAll(".fadenone").forEach((element) => {
1422        element.classList.remove("fadenone");
1423      });
1424    }
1425  };
1426
1427  // 新しい関数を追加してモーダルを開く
1428  const openModal = (modalId) => {
1429    const modal = document.getElementById(modalId);
1430    if (!firstModal) {
1431      firstModal = modal;
1432    } else {
1433      hideBottomSheet(firstModal); // 最初に開いたモーダルを閉じる
1434      firstModal = modal; // 最初に開いたモーダルを更新
1435    }
1436    showBottomSheet(modal);
1437  };
1438
1439  document.addEventListener("click", (e) => {
1440    const openBtn = e.target.closest(".xmodal__button");
1441    if (!openBtn) return;
1442
1443    e.stopPropagation(); // document close 判定を止める
1444
1445    const targetId = openBtn.getAttribute("data-target");
1446    openModal(targetId);
1447  });
1448
1449  const updateSheetHeight = (sheetContent, height) => {
1450    sheetContent.style.maxHeight = `${height}vh`;
1451  };
1452
1453  let isDragging, startYm, startHeight, sheetContent, bottomSheetContainer;
1454
1455  const dragStart = (e) => {
1456    isDragging = true;
1457    startYm = e.pageY || e.touches?.[0].pageY;
1458    startHeight = parseInt(sheetContent.style.maxHeight);
1459    bottomSheetContainer.classList.add("dragging");
1460  };
1461
1462  const dragging = (e) => {
1463    if (!isDragging) return;
1464    const delta = startYm - (e.pageY || e.touches?.[0].pageY);
1465    const newHeight = startHeight + (delta / window.innerHeight) * 100;
1466    updateSheetHeight(sheetContent, newHeight);
1467  };
1468
1469  const dragStop = (e) => {
1470    if (!sheetContent) return;
1471    isDragging = false;
1472    // ドラッグ停止イベントがモーダルのボディ内で発生した場合にはモーダルを閉じない
1473    if (e && e.target.closest(".xmodal-body")) return;
1474    hideBottomSheet(bottomSheetContainer);
1475  };
1476  document.addEventListener("mousedown", (e) => {
1477    const target = e.target;
1478    if (
1479      target.classList.contains("xmodal-header") ||
1480      target.closest(".xmodal-header")
1481    ) {
1482      sheetContent = target.closest(".xmodal-content");
1483      bottomSheetContainer = sheetContent.closest(".xmodal");
1484      dragStart(e);
1485    }
1486  });
1487
1488  document.addEventListener("mousemove", dragging);
1489  document.addEventListener("mouseup", dragStop);
1490
1491  document.addEventListener("touchstart", (e) => {
1492    const target = e.target;
1493    if (
1494      target.classList.contains("xmodal-header") ||
1495      target.closest(".xmodal-header")
1496    ) {
1497      sheetContent = target.closest(".xmodal-content");
1498      bottomSheetContainer = sheetContent.closest(".xmodal");
1499      dragStart(e);
1500    }
1501  });
1502  document.addEventListener("touchmove", dragging);
1503  document.addEventListener("touchend", dragStop);
1504
1505  document.querySelectorAll(".xmodal-overlay").forEach((overlay) => {
1506    overlay.addEventListener("click", (e) => {
1507      // オーバーレイがクリックされた場合、イベントの伝播を停止する
1508      e.stopPropagation();
1509      const modal = overlay.closest(".xmodal");
1510      hideBottomSheet(modal);
1511    });
1512  });
1513
1514  document
1515    .querySelectorAll(".xmodal-header .c-dialog__close-button")
1516    .forEach((closeButton) => {
1517      closeButton.addEventListener("click", (e) => {
1518        // クリックイベントの伝播を停止する
1519        e.stopPropagation();
1520        const modal = closeButton.closest(".xmodal");
1521        hideBottomSheet(modal);
1522      });
1523    });
1524
1525  document.addEventListener("click", (e) => {
1526    const clickedElement = e.target;
1527
1528    // ① モーダル内(本文・リンク含む)は何もしない
1529    if (clickedElement.closest(".xmodal-content")) {
1530      return;
1531    }
1532
1533    // ② モーダルを開くボタンは除外(重要)
1534    if (clickedElement.closest(".xmodal__button")) {
1535      return;
1536    }
1537
1538    // ③ xmodal の外側がクリックされた場合のみ閉じる
1539    const modal = clickedElement.closest(".xmodal");
1540    if (!modal) {
1541      hideBottomSheet(firstModal);
1542    }
1543  });
1544  // クラスが 'done' の要素が存在するかチェックしてモーダルを表示
1545  const modalDone = document.querySelector(".done");
1546  if (modalDone) {
1547    openModal(modalDone.id);
1548    const repostModal = $(this).closest(".repost-modal");
1549    if (repostModal.hasClass("is-open")) {
1550      repostModal.removeClass("is-open");
1551      $("#repost_item img").remove(); // 既存の画像を削除
1552    } else {
1553      const url = window.location.href;
1554      const postId = url.split("/").pop().split("?")[0];
1555      $("#repost").val(postId);
1556      const $repostImage = $(".p-single-main .repost-image");
1557      const srcValue = $repostImage.attr("src");
1558      if (!srcValue) return;
1559      const $image = $("<img>", {
1560        class: "o-pickup-setting__list-image",
1561        src: srcValue,
1562        loading: "lazy",
1563      });
1564      $("#repost_item").empty().append($image);
1565    }
1566  }
1567});
1568var cActionButtons = document.querySelectorAll(".c-action__button");
1569cActionButtons.forEach(function (button) {
1570  button.addEventListener("click", function () {
1571    document.body.classList.add("xmodal-first");
1572  });
1573});
1574document.addEventListener("click", function (event) {
1575  if (!event.target.closest(".c-action__button")) {
1576    document.body.classList.remove("xmodal-first");
1577  }
1578});
1579$(document).ready(function () {
1580  $(".featured_image input").removeAttr("multiple").remove();
1581});
1582
1583$('[data-target="modal_share"]').on("click", function () {
1584  var post_url = $(this).data("shareurl");
1585  var post_title = $(this).data("sharetitle");
1586  $("#share_url").val(post_url);
1587  $("#share_url2").text(post_url);
1588  var facebookShareUrl =
1589    "https://www.facebook.com/sharer/sharer.php?src=bm&u=" +
1590    encodeURIComponent(post_url) +
1591    "&t=" +
1592    encodeURIComponent(post_title);
1593  $("#share_facebook").attr("href", facebookShareUrl);
1594  var twitterShareUrl =
1595    "https://twitter.com/intent/tweet?url=" +
1596    encodeURIComponent(post_url) +
1597    "&text=" +
1598    encodeURIComponent(post_title);
1599  $("#share_twitter").attr("href", twitterShareUrl);
1600  var lineShareUrl =
1601    "https://social-plugins.line.me/lineit/share?url=" +
1602    encodeURIComponent(post_url);
1603  $("#share_line").attr("href", lineShareUrl);
1604});
1605
1606$(document).on("click", ".contest-trigger", function () {
1607  var ajaxAreaAuthor = $("#ajax-area__contest");
1608  var ajaxSpinner = $(".c-ajax-spinner");
1609  ajaxSpinner.addClass("u-align__flex--center");
1610
1611  $.ajax({
1612    url: "https://gumpla.jp/contest-slider/",
1613    method: "GET",
1614    dataType: "html",
1615    beforeSend: function () {
1616      ajaxSpinner.attr("data-status", "loading").show();
1617    },
1618    success: function (data) {
1619      ajaxAreaAuthor.html(data);
1620      $(".xmodal-content").css("max-height", "90vh");
1621      loadFollowScript(
1622        "https://cdn.jsdelivr.net/npm/[email protected]/keen-slider.min.js",
1623        function () {
1624          loadFollowScript(
1625            "https://gumpla.jp/wp-content/themes/gush/assets/js/story.js",
1626            function () {
1627              console.log("全てのスクリプトが読み込まれました");
1628              observeSliderInitialization(); // keen-slider のロードを監視
1629            },
1630          );
1631        },
1632      );
1633      ajaxSpinner.attr("data-status", "open").addClass("wpuf_mytag");
1634      ajaxSpinner.removeClass("center");
1635    },
1636    complete: function () {
1637      ajaxSpinner.hide();
1638    },
1639  });
1640  function observeSliderInitialization() {
1641    var observer = new MutationObserver(function (mutations) {
1642      mutations.forEach(function (mutation) {
1643        if (document.querySelector(".keen-slider")) {
1644          initKeenSlider();
1645          observer.disconnect();
1646        }
1647      });
1648    });
1649    observer.observe(document.body, { childList: true, subtree: true });
1650  }
1651  function initKeenSlider() {
1652    var sliderElement = document.querySelector(".keen-slider");
1653    if (sliderElement) {
1654      var keenSlider = new KeenSlider(sliderElement, {
1655        loop: true,
1656        mode: "free",
1657        slides: { perView: 1, spacing: 0 }, // spacing を 0 に変更
1658      });
1659
1660      setTimeout(function () {
1661        keenSlider.refresh(); // スライダーのリフレッシュ
1662      }, 1000);
1663
1664      console.log("keen-slider の初期化が完了しました");
1665    } else {
1666      console.error("keen-slider の要素が見つかりませんでした");
1667    }
1668  }
1669  function loadFollowScript(src, callback) {
1670    var script = document.createElement("script");
1671    script.src = src;
1672    script.onload = callback || function () {};
1673    document.head.appendChild(script);
1674  }
1675});
1676
1677document
1678  .querySelector(".c-alert")
1679  ?.addEventListener("animationend", function () {
1680    this.remove();
1681  });

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.