# betterdocs/2.0.14/admin/assets/js/betterdocs-admin.js

BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ &amp; Chatbot, version 2.0.14. 864 lines.

- Page: https://pluginprobe.com/plugins/betterdocs/2.0.14/code/admin/assets/js/betterdocs-admin.js
- Raw: https://pluginprobe.com/plugins/betterdocs/2.0.14/raw/admin/assets/js/betterdocs-admin.js
- Modified: 2021-08-03T10:42:30+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/betterdocs/2.0.14/code/admin/assets/js/betterdocs-admin.js#L10-L20`.

```javascript
(function ($) {
	"use strict";

	/**
	 * BetterDocs Admin JS
	 */

	$.betterdocsAdmin = $.betterdocsAdmin || {};

	$(document).ready(function () {
		$.betterdocsAdmin.init();

		var qVars = $.betterdocsAdmin.get_query_vars("page");
		if (qVars != undefined) {
			if (qVars.indexOf("betterdocs-settings") >= 0) {
				var cSettingsTab = qVars.split("#");
				$(
					'.betterdocs-settings-menu li[data-tab="' +
						cSettingsTab[1] +
						'"]'
				).trigger("click");
			}
		}
	});

	$.betterdocsAdmin.init = function () {
		$.betterdocsAdmin.toggleFields();
		$.betterdocsAdmin.bindEvents();
		$.betterdocsAdmin.initializeFields();
	};

	$.betterdocsAdmin.bindEvents = function () {
		//Advance Checkbox with SweetAlear
		$("body").on(
			"click",
			".betterdocs-adv-checkbox-wrap label, .betterdocs-stats-tease",
			function (e) {
				if (typeof $(this)[0].dataset.swal == "undefined") {
					return;
				}
				if (typeof $(this)[0].dataset.swal != "undefined") {
					e.preventDefault();
				}
				var premium_content = document.createElement("p");
				var premium_anchor = document.createElement("a");

				premium_anchor.setAttribute("href", "https://betterdocs.co");
				premium_anchor.innerText = "Premium";
				premium_anchor.style.color = "red";
				premium_content.innerHTML =
					"You need to upgrade to the <strong>" +
					premium_anchor.outerHTML +
					" </strong> Version to use this feature";

				swal({
					title: "Opps...",
					content: premium_content,
					icon: "warning",
					buttons: [false, "Close"],
					dangerMode: true,
				});
			}
		);

		// date range picker
		$("#dashboard-select-date").change(function () {
			if (this.value == 'custom_date') {
				$('#reportrange').show().trigger('click');
			} else {
				$('#reportrange').hide();
			}
		});

		if ($("#dashboard-select-date").val() === 'custom_date') {
			$('#reportrange').show();
		}

		$('#reportrange').daterangepicker({
			timePicker: false,
			/*showDropdowns: true,
			minYear: 1950,
			maxYear: parseInt(moment().format('YYYY'),10),*/
			ranges: {
				'Today': [moment(), moment()],
				'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
				'Last 7 Days': [moment().subtract(6, 'days'), moment()],
				'Last 30 Days': [moment().subtract(29, 'days'), moment()],
				'This Month': [moment().startOf('month'), moment().endOf('month')],
				'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
			},
			locale: {
				format: 'MMMM D, YYYY'
			}
		});

		// Switch to Dark Mode
		$("#betterdocs-mode-toggle").prop(
			"checked",
			betterdocs_admin.dark_mode
		);
		$("#betterdocs-mode-toggle").on("click", function (e) {
			$("body").toggleClass("betterdocs-dark-mode");
			$.ajax({
				type: "POST",
				url: betterdocs_admin.ajaxurl,
				data: {
					action: "betterdocs_dark_mode",
					mode: e.currentTarget.checked ? 1 : 0,
					nonce: betterdocs_admin.doc_cat_order_nonce,
				},
				dataType: "JSON",
				success: function (response) {
					// console.log( response );
				},
			});
		});

		// Go To Sorting UI
		$("body.post-type-docs .wp-heading-inline").after(
			'<a href="admin.php?page=betterdocs-admin" class="page-title-action">' +
			betterdocs_admin.menu_title +
			"</a>"
		);

		/**
		 * Group Field Events
		 */
		$(".betterdocs-group-field .betterdocs-group-field-title").on(
			"click",
			function (e) {
				e.preventDefault();
				if ($(e.srcElement).hasClass("betterdocs-group-field-title")) {
					$.betterdocsAdmin.groupToggle(this);
				}
			}
		);
		$(".betterdocs-group-field .betterdocs-group-clone").on(
			"click",
			function () {
				$.betterdocsAdmin.cloneGroup(this);
			}
		);
		$("body").on(
			"click",
			".betterdocs-group-field .betterdocs-group-remove",
			function () {
				$.betterdocsAdmin.removeGroup(this);
			}
		);

		/**
		 * Media Field
		 */
		$(".betterdocs-media-field-wrapper .betterdocs-media-upload-button").on(
			"click",
			function (e) {
				e.preventDefault();
				$.betterdocsAdmin.initMediaField(this);
			}
		);
		$(".betterdocs-media-field-wrapper .betterdocs-media-remove-button").on(
			"click",
			function (e) {
				e.preventDefault();
				$.betterdocsAdmin.removeMedia(this);
			}
		);

		/**
		 * Settings Tab
		 */
		$(".betterdocs-settings-menu li").on("click", function (e) {
			$.betterdocsAdmin.settingsTab(this);
		});
		$(".betterdocs-settings-button").on("click", function (e) {
			e.preventDefault();
			var form = $(this).parents("#betterdocs-settings-form");
			$.betterdocsAdmin.submitSettings(this, form);
		});

		$(".betterdocs-opt-alert").on("click", function (e) {
			$.betterdocsAdmin.fieldAlert(this);
		});

		/**
		 * Reset Section Settings
		 */
		$(".betterdocs-section-reset").on("click", function (e) {
			e.preventDefault();
			$.betterdocsAdmin.resetSection(this);
		});

		$.betterdocsAdmin.permalink_structure();
		$('#permalink_structure').on('change', $.betterdocsAdmin.permalink_structure);
		$('#multiple_kb').on('change', function(){
			var kb = $('.permalink-structure .available-structure-tags .knowledge-base');
			var multiple_kb = $(this);
			if(multiple_kb.is(':checked')){
				kb.show();
			}
			else{
				kb.hide();
			}
			$.betterdocsAdmin.permalink_structure();
		});
	};

	$.betterdocsAdmin.permalink_structure = function(){
		var multiple_kb = $('#multiple_kb');
		var permalink_structure = $('#permalink_structure');
		var $val = permalink_structure.val();
		if($val && !multiple_kb.is(':checked')){
			permalink_structure.val($val.replace(/%knowledge_base%\/?/g, ''));
		}
	}
	
	$.betterdocsAdmin.initializeFields = function () {
		$.betterdocsAdmin.innerTab();
		if ($(".betterdocs-meta-field, .betterdocs-settings-field").length > 0) {
			$(".betterdocs-meta-field, .betterdocs-settings-field").map(
				function (iterator, item) {
					var node = item.nodeName;
					if (node === "SELECT") {
						$(item).select2({
							placeholder: "Select any",
						});
					}
				}
			);
		}

		if ($(".betterdocs-countdown-datepicker").length > 0) {
			$(".betterdocs-countdown-datepicker").each(function () {
				$(this).find("input").datepicker({
					changeMonth: true,
					changeYear: true,
					dateFormat: "DD, d MM, yy",
				});
			});
		}

		$(".betterdocs-settings-field.betterdocs-select").on("select2:select", function (evt) {
			let $values = $(this).val();
			const isNotEqual = (a, b) => JSON.stringify(a) !== JSON.stringify(b);
			if (isNotEqual($values, ["all"])) {
				let $filtered = $values.filter(function($value, index, arr) {
					return $value != 'all';
				});
				$(this).val($filtered);
				$(this).trigger('change');
			}
		});

		$(".betterdocs-metabox-wrapper .betterdocs-meta-field, .betterdocs-settings-field").trigger("change");

		if ($(".betterdocs-colorpicker-field").length > 0) {
			if ("undefined" !== typeof $.fn.wpColorPicker) {
				$(".betterdocs-colorpicker-field").each(function () {
					var color = $(this).val();
					$(this)
						.wpColorPicker({
							change: function (event, ui) {
								var element = event.target;
								var color = ui.color.toString();
								$(element)
									.parents(".wp-picker-container")
									.find("input.betterdocs-colorpicker-field")
									.val(color)
									.trigger("change");
							},
						})
						.parents(".wp-picker-container")
						.find(".wp-color-result")
						.css("background-color", "#" + color);
				});
			}
		}
		$.betterdocsAdmin.groupField();
		$(".betterdocs-meta-template-editable").trigger("blur");
	};

	$.betterdocsAdmin.innerTab = function () {
		if ($(".betterdocs-section-inner-tab").length <= 0) {
			return;
		}

		$(".betterdocs-section-inner-tab").each(function (i, item) {
			$(item)
				.find("ul")
				.on("click", "li", function (e) {
					var target = e.currentTarget.dataset.target;
					$(this)
						.addClass("betterdocs-active")
						.siblings()
						.removeClass("betterdocs-active");
					$("#" + target)
						.show()
						.siblings()
						.hide();
				});
			$(item).find("ul").find("li:first").trigger("click");
		});
	};

	$.betterdocsAdmin.groupField = function () {
		if ($(".betterdocs-group-field-wrapper").length < 0) {
			return;
		}

		var fields = $(".betterdocs-group-field-wrapper");

		fields.each(function () {
			var $this = $(this),
				groups = $this.find(".betterdocs-group-field"),
				firstGroup = $this.find(".betterdocs-group-field:first"),
				lastGroup = $this.find(".betterdocs-group-field:last");

			groups.each(function () {
				var groupContent = $(this)
					.find(".betterdocs-group-field-title:not(.open)")
					.next();
				if (groupContent.is(":visible")) {
					groupContent.addClass("open");
				}
			});

			$this.find(".betterdocs-group-field-add").on("click", function (e) {
				e.preventDefault();

				var fieldId = $this.attr("id"),
					dataId = $this.data("name"),
					wrapper = $this.find(".betterdocs-group-fields-wrapper"),
					groups = $this.find(".betterdocs-group-field"),
					firstGroup = $this.find(".betterdocs-group-field:first"),
					lastGroup = $this.find(".betterdocs-group-field:last"),
					clone = $($this.find(".betterdocs-group-template").html()),
					groupId = parseInt(lastGroup.data("id")),
					nextGroupId = 1,
					title = clone.data("group-title");

				if (!isNaN(groupId)) {
					nextGroupId = groupId + 1;
				}

				groups.each(function () {
					$(this).removeClass("open");
				});

				// Reset all data of clone object.
				clone.attr("data-id", nextGroupId);
				clone.addClass("open");
				// clone.find('.betterdocs-group-field-title > span').html(title + ' ' + nextGroupId);
				clone
					.find("tr.betterdocs-field[id*=" + fieldId + "]")
					.each(function () {
						var fieldName = dataId;
						var fieldNameSuffix = $(this)
							.attr("id")
							.split("[1]")[1];
						var nextFieldId =
							fieldName +
							"[" +
							nextGroupId +
							"]" +
							fieldNameSuffix;
						var label = $(this).find("th label");

						$(this)
							.find('[name*="' + fieldName + '[1]"]')
							.each(function () {
								var inputName = $(this)
									.attr("name")
									.split("[1]");
								var inputNamePrefix = inputName[0];
								var inputNameSuffix = inputName[1];
								var newInputName =
									inputNamePrefix +
									"[" +
									nextGroupId +
									"]" +
									inputNameSuffix;
								$(this)
									.attr("id", newInputName)
									.attr("name", newInputName);
								label.attr("for", newInputName);
							});

						$(this).attr("id", nextFieldId);
					});

				clone.insertBefore($(this));

				$.betterdocsAdmin.resetFieldIds($(".betterdocs-group-field"));
			});
		});
	};

	/**
	 * This function will change tab
	 * with menu click & Next Previous Button Click
	 */
	$.betterdocsAdmin.tabChanger = function (buttonName) {
		var button = $(buttonName),
			tabID = button.data("tabid"),
			tabKey = button.data("tab"),
			tab;

		if (tabKey != "") {
			tab = $("#betterdocs-" + tabKey);
			$("#betterdocs_builder_current_tab").val(tabKey);
		}

		if (buttonName.nodeName !== "BUTTON") {
			button
				.parent()
				.find("li")
				.each(function (i) {
					if (i < tabID) {
						$(this).addClass("betterdocs-complete");
					} else {
						$(this).removeClass("betterdocs-complete");
					}
				});

			button.addClass("active").siblings().removeClass("active");
			tab.addClass("active").siblings().removeClass("active");
			return;
		}
		if (tab === undefined) {
			$("#publish").trigger("click");
			return;
		}
		$('.betterdocs-metatab-menu li[data-tabid="' + tabID + '"]').trigger(
			"click"
		);
		$(
			'.betterdocs-builder-tab-menu li[data-tabid="' + tabID + '"]'
		).trigger("click");
	};

	$.betterdocsAdmin.toggleFields = function () {
		$(".betterdocs-meta-field, .betterdocs-settings-field").on(
			"change",
			function (e) {
				$.betterdocsAdmin.checkDependencies(this);
			}
		);
	};

	$.betterdocsAdmin.toggle = function (array, func, prefix, suffix, id) {
		var i = 0;
		suffix = "undefined" == typeof suffix ? "" : suffix;

		if (typeof array !== "undefined") {
			for (; i < array.length; i++) {
				var selector = prefix + array[i] + suffix;
				$(selector)[func]();
			}
		}
	};

	$.betterdocsAdmin.checkDependencies = function (variable) {
		if (betterdocsAdminConfig.toggleFields === null) {
			return;
		}

		var current = $(variable),
			container = current.parents(".betterdocs-field:first"),
			id = container.data("id"),
			value = current.val();

		if ("checkbox" === current.attr("type")) {
			if (!current.is(":checked")) {
				value = 0;
			} else {
				value = 1;
			}
		}

		if (current.hasClass("betterdocs-theme-selected")) {
			var currentTheme = current
				.parents(".betterdocs-theme-control-wrapper")
				.data("name");
			value = $("#" + currentTheme).val();
		}

		var mainid = id;

		if (betterdocsAdminConfig.toggleFields.hasOwnProperty(id)) {
			var canShow = betterdocsAdminConfig.toggleFields[id].hasOwnProperty(
				value
			);
			var canHide = true;
			if (betterdocsAdminConfig.hideFields[id]) {
				var canHide = betterdocsAdminConfig.hideFields[
					id
				].hasOwnProperty(value);
			}

			if (
				betterdocsAdminConfig.toggleFields.hasOwnProperty(id) &&
				canHide
			) {
				$.each(betterdocsAdminConfig.toggleFields[id], function (
					key,
					array
				) {
					$.betterdocsAdmin.toggle(
						array.fields,
						"hide",
						"#betterdocs-meta-",
						"",
						mainid
					);
					$.betterdocsAdmin.toggle(
						array.sections,
						"hide",
						"#betterdocs-settings-",
						"",
						mainid
					);
				});
			}

			if (canShow) {
				$.betterdocsAdmin.toggle(
					betterdocsAdminConfig.toggleFields[id][value].fields,
					"show",
					"#betterdocs-meta-",
					"",
					mainid
				);
				$.betterdocsAdmin.toggle(
					betterdocsAdminConfig.toggleFields[id][value].sections,
					"show",
					"#betterdocs-settings-",
					"",
					mainid
				);
			}
		}

		if (betterdocsAdminConfig.hideFields.hasOwnProperty(id)) {
			var hideFields = betterdocsAdminConfig.hideFields[id];

			if (hideFields.hasOwnProperty(value)) {
				$.betterdocsAdmin.toggle(
					hideFields[value].fields,
					"hide",
					"#betterdocs-meta-",
					"",
					mainid
				);
				$.betterdocsAdmin.toggle(
					hideFields[value].sections,
					"hide",
					"#betterdocs-settings-",
					"",
					mainid
				);
			}
		}
	};

	$.betterdocsAdmin.groupToggle = function (group) {
		var input = $(group),
			wrapper = input.parents(".betterdocs-group-field");

		if (wrapper.hasClass("open")) {
			wrapper.removeClass("open");
		} else {
			wrapper.addClass("open").siblings().removeClass("open");
		}
	};

	$.betterdocsAdmin.removeGroup = function (button) {
		var groupId = $(button)
				.parents(".betterdocs-group-field")
				.attr("data-id"),
			group = $(button).parents(
				'.betterdocs-group-field[data-id="' + groupId + '"]'
			),
			parent = group.parent();

		group.fadeOut({
			duration: 300,
			complete: function () {
				$(this).remove();
			},
		});

		$.betterdocsAdmin.resetFieldIds(parent.find(".betterdocs-group-field"));
	};

	$.betterdocsAdmin.cloneGroup = function (button) {
		var groupId = $(button)
				.parents(".betterdocs-group-field")
				.attr("data-id"),
			group = $(button).parents(
				'.betterdocs-group-field[data-id="' + groupId + '"]'
			),
			clone = $(group.clone()),
			lastGroup = $(button)
				.parents(".betterdocs-group-fields-wrapper")
				.find(".betterdocs-group-field:last"),
			parent = group.parent(),
			nextGroupID = $(lastGroup).data("id") + 1;

		group.removeClass("open");

		clone.attr("data-id", nextGroupID);
		clone.insertAfter(group);
		$.betterdocsAdmin.resetFieldIds(parent.find(".betterdocs-group-field"));
	};

	$.betterdocsAdmin.resetFieldIds = function (groups) {
		if (groups.length <= 0) {
			return;
		}
		var groupID = 0;

		groups.map(function (iterator, item) {
			var item = $(item),
				fieldName = item.data("field-name"),
				groupInfo = item
					.find(".betterdocs-group-field-info")
					.data("info"),
				subFields = groupInfo.group_sub_fields;

			item.attr("data-id", groupID);

			var table_row = item.find("tr.betterdocs-field");

			table_row.each(function (i, child) {
				var child = $($(child)[0]),
					childInput = child.find(
						'[name*="betterdocs_meta_' + fieldName + '"]'
					),
					key = childInput.attr("data-key"),
					subKey = subFields[i].original_name,
					dataID = fieldName + "[" + groupID + "][" + subKey + "]",
					idName = "betterdocs-meta-" + dataID,
					inputName = "betterdocs_meta_" + dataID;

				child.attr("data-id", dataID);
				child.attr("id", idName);

				if (key != undefined) {
					childInput.attr("id", inputName);
					childInput.attr("name", inputName);
					childInput.attr("data-key", dataID);
				} else {
					if (childInput.length > 1) {
						childInput.each(function (i, subInput) {
							if (subInput.type === "text") {
								var subInputName = inputName + "[url]";
							}
							if (subInput.type === "hidden") {
								var subInputName = inputName + "[id]";
							}
							subInput = $(subInput);
							subInput.attr("id", subInputName);
							subInput.attr("name", subInputName);
							subInput.attr("data-key", dataID);
						});
					}
				}
			});

			groupID++;
		});
	};

	$.betterdocsAdmin.initMediaField = function (button) {
		var button = $(button),
			wrapper = button.parents(".betterdocs-media-field-wrapper"),
			removeButton = wrapper.find(".betterdocs-media-remove-button"),
			imgContainer = wrapper.find(".betterdocs-thumb-container"),
			idField = wrapper.find(".betterdocs-media-id"),
			urlField = wrapper.find(".betterdocs-media-url");

		// Create a new media frame
		var frame = wp.media({
			title: "Upload Photo",
			button: {
				text: "Use this photo",
			},
			multiple: false, // Set to true to allow multiple files to be selected
		});

		// When an image is selected in the media frame...
		frame.on("select", function () {
			// Get media attachment details from the frame state
			var attachment = frame.state().get("selection").first().toJSON();
			/**
			 * Set image to the image container
			 */
			imgContainer
				.addClass("betterdocs-has-thumb")
				.append(
					'<img src="' +
						attachment.url +
						'" alt="" style="max-width:100%;"/>'
				);
			idField.val(attachment.id); // set image id
			urlField.val(attachment.url); // set image url
			// Hide the upload button
			button.addClass("hidden");
			// Show the remove button
			removeButton.removeClass("hidden");
		});
		// Finally, open the modal on click
		frame.open();
	};

	$.betterdocsAdmin.removeMedia = function (button) {
		var button = $(button),
			wrapper = button.parents(".betterdocs-media-field-wrapper"),
			uploadButton = wrapper.find(".betterdocs-media-upload-button"),
			imgContainer = wrapper.find(".betterdocs-has-thumb"),
			idField = wrapper.find(".betterdocs-media-id"),
			urlField = wrapper.find(".betterdocs-media-url");

		imgContainer.removeClass("betterdocs-has-thumb").find("img").remove();

		urlField.val(""); // URL field has to be empty
		idField.val(""); // ID field has to empty as well

		button.addClass("hidden"); // Hide the remove button first
		uploadButton.removeClass("hidden"); // Show the uplaod button
	};

	$.betterdocsAdmin.fieldAlert = function (button) {
		var premium_content = document.createElement("p");
		var premium_anchor = document.createElement("a");

		premium_anchor.setAttribute("href", "https://betterdocs.co/upgrade");
		premium_anchor.innerText = "Premium";
		premium_anchor.style.color = "red";
		premium_content.innerHTML =
			"You need to upgrade to the <strong>" +
			premium_anchor.outerHTML +
			" </strong> Version to use this feature";

		swal({
			title: "Opps...",
			content: premium_content,
			icon: "warning",
			buttons: [false, "Close"],
			dangerMode: true,
		});
	};

	$.betterdocsAdmin.resetSection = function (button) {
		var button = $(button),
			parent = button.parents(".betterdocs-meta-section"),
			fields = parent.find(".betterdocs-meta-field"),
			updateFields = [];

		window.fieldsss = fields;
		fields.map(function (iterator, item) {
			var item = $(item),
				default_value = item.data("default");

			item.val(default_value);

			if (item.hasClass("wp-color-picker")) {
				item.parents(".wp-picker-container")
					.find(".wp-color-result")
					.removeAttr("style");
			}
			if (item[0].id == "betterdocs_meta_border") {
				item.trigger("click");
			} else {
				item.trigger("change");
			}
		});
	};

	$.betterdocsAdmin.settingsTab = function (button) {
		var button = $(button),
			tabToGo = button.data("tab");

		button.addClass("active").siblings().removeClass("active");
		$("#betterdocs-" + tabToGo)
			.addClass("active")
			.siblings()
			.removeClass("active");
	};

	$.betterdocsAdmin.submitSettings = function (button, form) {
		var button = $(button),
			submitKey = button.data("key"),
			nonce = button.data("nonce"),
			formData = $(form).serializeArray();

		$.ajax({
			type: "POST",
			url: ajaxurl,
			data: {
				action: "betterdocs_general_settings",
				key: submitKey,
				nonce: nonce,
				form_data: formData,
			},
			beforeSend: function () {
				button.html("<span>Saving...</span>");
			},
			success: function (res) {
				button.html("Save Settings");
				if (res.data === "success") {
					swal({
						title: "Settings Saved!",
						text: "Click OK to continue",
						icon: "success",
						buttons: [false, "Ok"],
						timer: 2000,
					}).then(function () {
						$(".betterdocs-save-now").removeClass(
							"betterdocs-save-now"
						);
						location=location.origin+location.pathname+location.search+'&saved=true'+location.hash;
					});
				} else {
					swal({
						title: "Settings Not Saved!",
						text: "Click OK to continue",
						icon: "error",
						buttons: [false, "Ok"],
						timer: 1000,
					});
				}
			},
		});
	};

	$.betterdocsAdmin.get_query_vars = function (name) {
		var vars = {};
		window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (
			m,
			key,
			value
		) {
			vars[key] = value;
		});
		if (name != "") {
			return vars[name];
		}
		return vars;
	};

	/**
	 * Copy To Clipboard
	 */
	$('.betterdocs-settings-input-text span').on('click', function(e){
		var previousValue = this.previousSibling;
		previousValue.select();
		document.execCommand("copy");
		this.firstChild.textContent = betterdocs_admin.text;
		previousValue.setSelectionRange(0, 99999);
	}); 

})(jQuery);

```
