PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 1.3.4
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v1.3.4
4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 All 200 releases
betterdocs / admin / assets / js / betterdocs-admin.js

betterdocs-admin.js in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 1.3.4, at admin/assets/js/betterdocs-admin.js

761 lines 18.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function ($) {
2 "use strict";
3
4 /**
5 * BetterDocs Admin JS
6 */
7
8 $.betterdocsAdmin = $.betterdocsAdmin || {};
9
10 $(document).ready(function () {
11 $.betterdocsAdmin.init();
12
13 var qVars = $.betterdocsAdmin.get_query_vars("page");
14 if (qVars != undefined) {
15 if (qVars.indexOf("betterdocs-settings") >= 0) {
16 var cSettingsTab = qVars.split("#");
17 $(
18 '.betterdocs-settings-menu li[data-tab="' +
19 cSettingsTab[1] +
20 '"]'
21 ).trigger("click");
22 }
23 }
24 });
25
26 $.betterdocsAdmin.init = function () {
27 $.betterdocsAdmin.toggleFields();
28 $.betterdocsAdmin.bindEvents();
29 $.betterdocsAdmin.initializeFields();
30 };
31
32 $.betterdocsAdmin.bindEvents = function () {
33 //Advance Checkbox with SweetAlear
34 $("body").on(
35 "click",
36 ".betterdocs-adv-checkbox-wrap label, .betterdocs-stats-tease",
37 function (e) {
38 if (typeof $(this)[0].dataset.swal == "undefined") {
39 return;
40 }
41 if (typeof $(this)[0].dataset.swal != "undefined") {
42 e.preventDefault();
43 }
44 var premium_content = document.createElement("p");
45 var premium_anchor = document.createElement("a");
46
47 premium_anchor.setAttribute("href", "https://betterdocs.co");
48 premium_anchor.innerText = "Premium";
49 premium_anchor.style.color = "red";
50 premium_content.innerHTML =
51 "You need to upgrade to the <strong>" +
52 premium_anchor.outerHTML +
53 " </strong> Version to use this feature";
54
55 swal({
56 title: "Opps...",
57 content: premium_content,
58 icon: "warning",
59 buttons: [false, "Close"],
60 dangerMode: true,
61 });
62 }
63 );
64
65 /**
66 * Group Field Events
67 */
68 $(".betterdocs-group-field .betterdocs-group-field-title").on(
69 "click",
70 function (e) {
71 e.preventDefault();
72 if ($(e.srcElement).hasClass("betterdocs-group-field-title")) {
73 $.betterdocsAdmin.groupToggle(this);
74 }
75 }
76 );
77 $(".betterdocs-group-field .betterdocs-group-clone").on(
78 "click",
79 function () {
80 $.betterdocsAdmin.cloneGroup(this);
81 }
82 );
83 $("body").on(
84 "click",
85 ".betterdocs-group-field .betterdocs-group-remove",
86 function () {
87 $.betterdocsAdmin.removeGroup(this);
88 }
89 );
90
91 /**
92 * Media Field
93 */
94 $(".betterdocs-media-field-wrapper .betterdocs-media-upload-button").on(
95 "click",
96 function (e) {
97 e.preventDefault();
98 $.betterdocsAdmin.initMediaField(this);
99 }
100 );
101 $(".betterdocs-media-field-wrapper .betterdocs-media-remove-button").on(
102 "click",
103 function (e) {
104 e.preventDefault();
105 $.betterdocsAdmin.removeMedia(this);
106 }
107 );
108
109 /**
110 * Settings Tab
111 */
112 $(".betterdocs-settings-menu li").on("click", function (e) {
113 $.betterdocsAdmin.settingsTab(this);
114 });
115 $(".betterdocs-settings-button").on("click", function (e) {
116 e.preventDefault();
117 var form = $(this).parents("#betterdocs-settings-form");
118 $.betterdocsAdmin.submitSettings(this, form);
119 });
120
121 $(".betterdocs-opt-alert").on("click", function (e) {
122 $.betterdocsAdmin.fieldAlert(this);
123 });
124
125 /**
126 * Reset Section Settings
127 */
128 $(".betterdocs-section-reset").on("click", function (e) {
129 e.preventDefault();
130 $.betterdocsAdmin.resetSection(this);
131 });
132 };
133
134 $.betterdocsAdmin.initializeFields = function () {
135 $.betterdocsAdmin.innerTab();
136 if (
137 $(".betterdocs-meta-field, .betterdocs-settings-field").length > 0
138 ) {
139 $(".betterdocs-meta-field, .betterdocs-settings-field").map(
140 function (iterator, item) {
141 var node = item.nodeName;
142 if (node === "SELECT") {
143 $(item).select2({
144 placeholder: "Select any",
145 });
146 }
147 }
148 );
149 }
150
151 if ($(".betterdocs-countdown-datepicker").length > 0) {
152 $(".betterdocs-countdown-datepicker").each(function () {
153 $(this).find("input").datepicker({
154 changeMonth: true,
155 changeYear: true,
156 dateFormat: "DD, d MM, yy",
157 });
158 });
159 }
160
161 $(
162 ".betterdocs-metabox-wrapper .betterdocs-meta-field, .betterdocs-settings-field"
163 ).trigger("change");
164
165 if ($(".betterdocs-colorpicker-field").length > 0) {
166 if ("undefined" !== typeof $.fn.wpColorPicker) {
167 $(".betterdocs-colorpicker-field").each(function () {
168 var color = $(this).val();
169 $(this)
170 .wpColorPicker({
171 change: function (event, ui) {
172 var element = event.target;
173 var color = ui.color.toString();
174 $(element)
175 .parents(".wp-picker-container")
176 .find("input.betterdocs-colorpicker-field")
177 .val(color)
178 .trigger("change");
179 },
180 })
181 .parents(".wp-picker-container")
182 .find(".wp-color-result")
183 .css("background-color", "#" + color);
184 });
185 }
186 }
187 $.betterdocsAdmin.groupField();
188 $(".betterdocs-meta-template-editable").trigger("blur");
189 };
190
191 $.betterdocsAdmin.innerTab = function () {
192 if ($(".betterdocs-section-inner-tab").length <= 0) {
193 return;
194 }
195
196 $(".betterdocs-section-inner-tab").each(function (i, item) {
197 $(item)
198 .find("ul")
199 .on("click", "li", function (e) {
200 var target = e.currentTarget.dataset.target;
201 $(this)
202 .addClass("betterdocs-active")
203 .siblings()
204 .removeClass("betterdocs-active");
205 $("#" + target)
206 .show()
207 .siblings()
208 .hide();
209 });
210 $(item).find("ul").find("li:first").trigger("click");
211 });
212 };
213
214 $.betterdocsAdmin.groupField = function () {
215 if ($(".betterdocs-group-field-wrapper").length < 0) {
216 return;
217 }
218
219 var fields = $(".betterdocs-group-field-wrapper");
220
221 fields.each(function () {
222 var $this = $(this),
223 groups = $this.find(".betterdocs-group-field"),
224 firstGroup = $this.find(".betterdocs-group-field:first"),
225 lastGroup = $this.find(".betterdocs-group-field:last");
226
227 groups.each(function () {
228 var groupContent = $(this)
229 .find(".betterdocs-group-field-title:not(.open)")
230 .next();
231 if (groupContent.is(":visible")) {
232 groupContent.addClass("open");
233 }
234 });
235
236 $this.find(".betterdocs-group-field-add").on("click", function (e) {
237 e.preventDefault();
238
239 var fieldId = $this.attr("id"),
240 dataId = $this.data("name"),
241 wrapper = $this.find(".betterdocs-group-fields-wrapper"),
242 groups = $this.find(".betterdocs-group-field"),
243 firstGroup = $this.find(".betterdocs-group-field:first"),
244 lastGroup = $this.find(".betterdocs-group-field:last"),
245 clone = $($this.find(".betterdocs-group-template").html()),
246 groupId = parseInt(lastGroup.data("id")),
247 nextGroupId = 1,
248 title = clone.data("group-title");
249
250 if (!isNaN(groupId)) {
251 nextGroupId = groupId + 1;
252 }
253
254 groups.each(function () {
255 $(this).removeClass("open");
256 });
257
258 // Reset all data of clone object.
259 clone.attr("data-id", nextGroupId);
260 clone.addClass("open");
261 // clone.find('.betterdocs-group-field-title > span').html(title + ' ' + nextGroupId);
262 clone
263 .find("tr.betterdocs-field[id*=" + fieldId + "]")
264 .each(function () {
265 var fieldName = dataId;
266 var fieldNameSuffix = $(this)
267 .attr("id")
268 .split("[1]")[1];
269 var nextFieldId =
270 fieldName +
271 "[" +
272 nextGroupId +
273 "]" +
274 fieldNameSuffix;
275 var label = $(this).find("th label");
276
277 $(this)
278 .find('[name*="' + fieldName + '[1]"]')
279 .each(function () {
280 var inputName = $(this)
281 .attr("name")
282 .split("[1]");
283 var inputNamePrefix = inputName[0];
284 var inputNameSuffix = inputName[1];
285 var newInputName =
286 inputNamePrefix +
287 "[" +
288 nextGroupId +
289 "]" +
290 inputNameSuffix;
291 $(this)
292 .attr("id", newInputName)
293 .attr("name", newInputName);
294 label.attr("for", newInputName);
295 });
296
297 $(this).attr("id", nextFieldId);
298 });
299
300 clone.insertBefore($(this));
301
302 $.betterdocsAdmin.resetFieldIds($(".betterdocs-group-field"));
303 });
304 });
305 };
306
307 /**
308 * This function will change tab
309 * with menu click & Next Previous Button Click
310 */
311 $.betterdocsAdmin.tabChanger = function (buttonName) {
312 var button = $(buttonName),
313 tabID = button.data("tabid"),
314 tabKey = button.data("tab"),
315 tab;
316
317 if (tabKey != "") {
318 tab = $("#betterdocs-" + tabKey);
319 $("#betterdocs_builder_current_tab").val(tabKey);
320 }
321
322 if (buttonName.nodeName !== "BUTTON") {
323 button
324 .parent()
325 .find("li")
326 .each(function (i) {
327 if (i < tabID) {
328 $(this).addClass("betterdocs-complete");
329 } else {
330 $(this).removeClass("betterdocs-complete");
331 }
332 });
333
334 button.addClass("active").siblings().removeClass("active");
335 tab.addClass("active").siblings().removeClass("active");
336 return;
337 }
338 if (tab === undefined) {
339 $("#publish").trigger("click");
340 return;
341 }
342 $('.betterdocs-metatab-menu li[data-tabid="' + tabID + '"]').trigger(
343 "click"
344 );
345 $(
346 '.betterdocs-builder-tab-menu li[data-tabid="' + tabID + '"]'
347 ).trigger("click");
348 };
349
350 $.betterdocsAdmin.toggleFields = function () {
351 $(".betterdocs-meta-field, .betterdocs-settings-field").on(
352 "change",
353 function (e) {
354 $.betterdocsAdmin.checkDependencies(this);
355 }
356 );
357 };
358
359 $.betterdocsAdmin.toggle = function (array, func, prefix, suffix, id) {
360 var i = 0;
361 suffix = "undefined" == typeof suffix ? "" : suffix;
362
363 if (typeof array !== "undefined") {
364 for (; i < array.length; i++) {
365 var selector = prefix + array[i] + suffix;
366 $(selector)[func]();
367 }
368 }
369 };
370
371 $.betterdocsAdmin.checkDependencies = function (variable) {
372 if (betterdocsAdminConfig.toggleFields === null) {
373 return;
374 }
375
376 var current = $(variable),
377 container = current.parents(".betterdocs-field:first"),
378 id = container.data("id"),
379 value = current.val();
380
381 if ("checkbox" === current.attr("type")) {
382 if (!current.is(":checked")) {
383 value = 0;
384 } else {
385 value = 1;
386 }
387 }
388
389 if (current.hasClass("betterdocs-theme-selected")) {
390 var currentTheme = current
391 .parents(".betterdocs-theme-control-wrapper")
392 .data("name");
393 value = $("#" + currentTheme).val();
394 }
395
396 var mainid = id;
397
398 if (betterdocsAdminConfig.toggleFields.hasOwnProperty(id)) {
399 var canShow = betterdocsAdminConfig.toggleFields[id].hasOwnProperty(
400 value
401 );
402 var canHide = true;
403 if (betterdocsAdminConfig.hideFields[id]) {
404 var canHide = betterdocsAdminConfig.hideFields[
405 id
406 ].hasOwnProperty(value);
407 }
408
409 if (
410 betterdocsAdminConfig.toggleFields.hasOwnProperty(id) &&
411 canHide
412 ) {
413 $.each(betterdocsAdminConfig.toggleFields[id], function (
414 key,
415 array
416 ) {
417 $.betterdocsAdmin.toggle(
418 array.fields,
419 "hide",
420 "#betterdocs-meta-",
421 "",
422 mainid
423 );
424 $.betterdocsAdmin.toggle(
425 array.sections,
426 "hide",
427 "#betterdocs-settings-",
428 "",
429 mainid
430 );
431 });
432 }
433
434 if (canShow) {
435 $.betterdocsAdmin.toggle(
436 betterdocsAdminConfig.toggleFields[id][value].fields,
437 "show",
438 "#betterdocs-meta-",
439 "",
440 mainid
441 );
442 $.betterdocsAdmin.toggle(
443 betterdocsAdminConfig.toggleFields[id][value].sections,
444 "show",
445 "#betterdocs-settings-",
446 "",
447 mainid
448 );
449 }
450 }
451
452 if (betterdocsAdminConfig.hideFields.hasOwnProperty(id)) {
453 var hideFields = betterdocsAdminConfig.hideFields[id];
454
455 if (hideFields.hasOwnProperty(value)) {
456 $.betterdocsAdmin.toggle(
457 hideFields[value].fields,
458 "hide",
459 "#betterdocs-meta-",
460 "",
461 mainid
462 );
463 $.betterdocsAdmin.toggle(
464 hideFields[value].sections,
465 "hide",
466 "#betterdocs-settings-",
467 "",
468 mainid
469 );
470 }
471 }
472 };
473
474 $.betterdocsAdmin.groupToggle = function (group) {
475 var input = $(group),
476 wrapper = input.parents(".betterdocs-group-field");
477
478 if (wrapper.hasClass("open")) {
479 wrapper.removeClass("open");
480 } else {
481 wrapper.addClass("open").siblings().removeClass("open");
482 }
483 };
484
485 $.betterdocsAdmin.removeGroup = function (button) {
486 var groupId = $(button)
487 .parents(".betterdocs-group-field")
488 .attr("data-id"),
489 group = $(button).parents(
490 '.betterdocs-group-field[data-id="' + groupId + '"]'
491 ),
492 parent = group.parent();
493
494 group.fadeOut({
495 duration: 300,
496 complete: function () {
497 $(this).remove();
498 },
499 });
500
501 $.betterdocsAdmin.resetFieldIds(parent.find(".betterdocs-group-field"));
502 };
503
504 $.betterdocsAdmin.cloneGroup = function (button) {
505 var groupId = $(button)
506 .parents(".betterdocs-group-field")
507 .attr("data-id"),
508 group = $(button).parents(
509 '.betterdocs-group-field[data-id="' + groupId + '"]'
510 ),
511 clone = $(group.clone()),
512 lastGroup = $(button)
513 .parents(".betterdocs-group-fields-wrapper")
514 .find(".betterdocs-group-field:last"),
515 parent = group.parent(),
516 nextGroupID = $(lastGroup).data("id") + 1;
517
518 group.removeClass("open");
519
520 clone.attr("data-id", nextGroupID);
521 clone.insertAfter(group);
522 $.betterdocsAdmin.resetFieldIds(parent.find(".betterdocs-group-field"));
523 };
524
525 $.betterdocsAdmin.resetFieldIds = function (groups) {
526 if (groups.length <= 0) {
527 return;
528 }
529 var groupID = 0;
530
531 groups.map(function (iterator, item) {
532 var item = $(item),
533 fieldName = item.data("field-name"),
534 groupInfo = item
535 .find(".betterdocs-group-field-info")
536 .data("info"),
537 subFields = groupInfo.group_sub_fields;
538
539 item.attr("data-id", groupID);
540
541 var table_row = item.find("tr.betterdocs-field");
542
543 table_row.each(function (i, child) {
544 var child = $($(child)[0]),
545 childInput = child.find(
546 '[name*="betterdocs_meta_' + fieldName + '"]'
547 ),
548 key = childInput.attr("data-key"),
549 subKey = subFields[i].original_name,
550 dataID = fieldName + "[" + groupID + "][" + subKey + "]",
551 idName = "betterdocs-meta-" + dataID,
552 inputName = "betterdocs_meta_" + dataID;
553
554 child.attr("data-id", dataID);
555 child.attr("id", idName);
556
557 if (key != undefined) {
558 childInput.attr("id", inputName);
559 childInput.attr("name", inputName);
560 childInput.attr("data-key", dataID);
561 } else {
562 if (childInput.length > 1) {
563 childInput.each(function (i, subInput) {
564 if (subInput.type === "text") {
565 var subInputName = inputName + "[url]";
566 }
567 if (subInput.type === "hidden") {
568 var subInputName = inputName + "[id]";
569 }
570 subInput = $(subInput);
571 subInput.attr("id", subInputName);
572 subInput.attr("name", subInputName);
573 subInput.attr("data-key", dataID);
574 });
575 }
576 }
577 });
578
579 groupID++;
580 });
581 };
582
583 $.betterdocsAdmin.initMediaField = function (button) {
584 var button = $(button),
585 wrapper = button.parents(".betterdocs-media-field-wrapper"),
586 removeButton = wrapper.find(".betterdocs-media-remove-button"),
587 imgContainer = wrapper.find(".betterdocs-thumb-container"),
588 idField = wrapper.find(".betterdocs-media-id"),
589 urlField = wrapper.find(".betterdocs-media-url");
590
591 // Create a new media frame
592 var frame = wp.media({
593 title: "Upload Photo",
594 button: {
595 text: "Use this photo",
596 },
597 multiple: false, // Set to true to allow multiple files to be selected
598 });
599
600 // When an image is selected in the media frame...
601 frame.on("select", function () {
602 // Get media attachment details from the frame state
603 var attachment = frame.state().get("selection").first().toJSON();
604 /**
605 * Set image to the image container
606 */
607 imgContainer
608 .addClass("betterdocs-has-thumb")
609 .append(
610 '<img src="' +
611 attachment.url +
612 '" alt="" style="max-width:100%;"/>'
613 );
614 idField.val(attachment.id); // set image id
615 urlField.val(attachment.url); // set image url
616 // Hide the upload button
617 button.addClass("hidden");
618 // Show the remove button
619 removeButton.removeClass("hidden");
620 });
621 // Finally, open the modal on click
622 frame.open();
623 };
624
625 $.betterdocsAdmin.removeMedia = function (button) {
626 var button = $(button),
627 wrapper = button.parents(".betterdocs-media-field-wrapper"),
628 uploadButton = wrapper.find(".betterdocs-media-upload-button"),
629 imgContainer = wrapper.find(".betterdocs-has-thumb"),
630 idField = wrapper.find(".betterdocs-media-id"),
631 urlField = wrapper.find(".betterdocs-media-url");
632
633 imgContainer.removeClass("betterdocs-has-thumb").find("img").remove();
634
635 urlField.val(""); // URL field has to be empty
636 idField.val(""); // ID field has to empty as well
637
638 button.addClass("hidden"); // Hide the remove button first
639 uploadButton.removeClass("hidden"); // Show the uplaod button
640 };
641
642 $.betterdocsAdmin.fieldAlert = function (button) {
643 var premium_content = document.createElement("p");
644 var premium_anchor = document.createElement("a");
645
646 premium_anchor.setAttribute("href", "https://betterdocs.co/upgrade");
647 premium_anchor.innerText = "Premium";
648 premium_anchor.style.color = "red";
649 premium_content.innerHTML =
650 "You need to upgrade to the <strong>" +
651 premium_anchor.outerHTML +
652 " </strong> Version to use this feature";
653
654 swal({
655 title: "Opps...",
656 content: premium_content,
657 icon: "warning",
658 buttons: [false, "Close"],
659 dangerMode: true,
660 });
661 };
662
663 $.betterdocsAdmin.resetSection = function (button) {
664 var button = $(button),
665 parent = button.parents(".betterdocs-meta-section"),
666 fields = parent.find(".betterdocs-meta-field"),
667 updateFields = [];
668
669 window.fieldsss = fields;
670 fields.map(function (iterator, item) {
671 var item = $(item),
672 default_value = item.data("default");
673
674 item.val(default_value);
675
676 if (item.hasClass("wp-color-picker")) {
677 item.parents(".wp-picker-container")
678 .find(".wp-color-result")
679 .removeAttr("style");
680 }
681 if (item[0].id == "betterdocs_meta_border") {
682 item.trigger("click");
683 } else {
684 item.trigger("change");
685 }
686 });
687 };
688
689 $.betterdocsAdmin.settingsTab = function (button) {
690 var button = $(button),
691 tabToGo = button.data("tab");
692
693 button.addClass("active").siblings().removeClass("active");
694 $("#betterdocs-" + tabToGo)
695 .addClass("active")
696 .siblings()
697 .removeClass("active");
698 };
699
700 $.betterdocsAdmin.submitSettings = function (button, form) {
701 var button = $(button),
702 submitKey = button.data("key"),
703 nonce = button.data("nonce"),
704 formData = $(form).serializeArray();
705
706 $.ajax({
707 type: "POST",
708 url: ajaxurl,
709 data: {
710 action: "betterdocs_general_settings",
711 key: submitKey,
712 nonce: nonce,
713 form_data: formData,
714 },
715 beforeSend: function () {
716 button.html("<span>Saving...</span>");
717 },
718 success: function (res) {
719 button.html("Save Settings");
720 if (res.data === "success") {
721 swal({
722 title: "Settings Saved!",
723 text: "Click OK to continue",
724 icon: "success",
725 buttons: [false, "Ok"],
726 timer: 2000,
727 }).then(function () {
728 $(".betterdocs-save-now").removeClass(
729 "betterdocs-save-now"
730 );
731 location.reload();
732 });
733 } else {
734 swal({
735 title: "Settings Not Saved!",
736 text: "Click OK to continue",
737 icon: "error",
738 buttons: [false, "Ok"],
739 timer: 1000,
740 });
741 }
742 },
743 });
744 };
745
746 $.betterdocsAdmin.get_query_vars = function (name) {
747 var vars = {};
748 window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (
749 m,
750 key,
751 value
752 ) {
753 vars[key] = value;
754 });
755 if (name != "") {
756 return vars[name];
757 }
758 return vars;
759 };
760 })(jQuery);
761