PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 1.2.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v1.2.3
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.2.3, at admin/assets/js/betterdocs-admin.js

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