PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 1.7.2
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v1.7.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 3.5.2 All 199 releases
betterdocs / admin / assets / js / betterdocs-admin.js

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

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