Skip to content

Commit c462858

Browse files
committed
chore: Sync includes from pro version
- Copy updated includes folder from knowledgebase-pro - Remove pro subfolder - Remove Freemius premium-only initialization blocks - Update translation files
1 parent e292ee1 commit c462858

16 files changed

Lines changed: 480 additions & 281 deletions

includes/admin/class-settings-wizard.php

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -233,17 +233,20 @@ protected function build_step_settings( $keys, $all_settings ) {
233233
*/
234234
public function get_translation_strings() {
235235
return array(
236-
'page_title' => __( 'Knowledge Base Setup Wizard', 'knowledgebase' ),
237-
'menu_title' => __( 'Setup Wizard', 'knowledgebase' ),
238-
'next_step' => __( 'Next Step', 'knowledgebase' ),
239-
'previous_step' => __( 'Previous Step', 'knowledgebase' ),
240-
'finish_setup' => __( 'Finish Setup', 'knowledgebase' ),
241-
'skip_wizard' => __( 'Skip Wizard', 'knowledgebase' ),
236+
'page_title' => __( 'Knowledge Base Setup Wizard', 'knowledgebase' ),
237+
'menu_title' => __( 'Setup Wizard', 'knowledgebase' ),
238+
'next_step' => __( 'Next Step', 'knowledgebase' ),
239+
'previous_step' => __( 'Previous Step', 'knowledgebase' ),
240+
'finish_setup' => __( 'Finish Setup', 'knowledgebase' ),
241+
'skip_wizard' => __( 'Skip Wizard', 'knowledgebase' ),
242+
/* translators: %s: Search query. */
243+
'tom_select_no_results' => __( 'No results found for "%s"', 'knowledgebase' ),
244+
'steps_nav_aria_label' => __( 'Setup Wizard Steps', 'knowledgebase' ),
242245
/* translators: %1$d: Current step number, %2$d: Total number of steps */
243-
'step_of' => __( 'Step %1$d of %2$d', 'knowledgebase' ),
244-
'wizard_complete' => __( 'Setup Complete!', 'knowledgebase' ),
245-
'setup_complete' => __( 'Your Knowledge Base has been configured successfully. You can now start organizing your documentation.', 'knowledgebase' ),
246-
'go_to_settings' => __( 'Go to Settings', 'knowledgebase' ),
246+
'step_of' => __( 'Step %1$d of %2$d', 'knowledgebase' ),
247+
'wizard_complete' => __( 'Setup Complete!', 'knowledgebase' ),
248+
'setup_complete' => __( 'Your Knowledge Base has been configured successfully. You can now start organizing your documentation.', 'knowledgebase' ),
249+
'go_to_settings' => __( 'Go to Settings', 'knowledgebase' ),
247250
);
248251
}
249252

@@ -332,13 +335,13 @@ public function enqueue_custom_scripts( $hook ) {
332335
if ( in_array( $custom_step, array( 'products', 'sections', 'subsections' ), true ) ) {
333336
wp_enqueue_style(
334337
'wzkb-wizard-content',
335-
plugins_url( 'settings/css/wizard-content' . $minimize . '.css', __FILE__ ),
338+
plugins_url( 'css/wizard-content' . $minimize . '.css', __FILE__ ),
336339
array(),
337340
WZKB_VERSION
338341
);
339342
wp_enqueue_script(
340343
'wzkb-wizard-content',
341-
plugins_url( 'settings/js/wizard-content' . $minimize . '.js', __FILE__ ),
344+
plugins_url( 'js/wizard-content' . $minimize . '.js', __FILE__ ),
342345
array( 'jquery' ),
343346
WZKB_VERSION,
344347
true
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.wzkb-wizard-repeater-table th,
2+
.wzkb-wizard-repeater-table td {
3+
vertical-align: top;
4+
}
5+
6+
.wzkb-wizard-repeater-table .wzkb-wizard-col-actions {
7+
width: 120px;
8+
}
9+
10+
.wzkb-wizard-repeater-table input.regular-text,
11+
.wzkb-wizard-repeater-table textarea.large-text,
12+
.wzkb-wizard-repeater-table select {
13+
width: 100%;
14+
max-width: 100%;
15+
}
16+
17+
.wzkb-wizard-repeater-table textarea {
18+
resize: vertical;
19+
}
20+
21+
.wzkb-wizard-repeater-table .button-link-delete {
22+
color: #b32d2e;
23+
}

includes/admin/css/wizard-content-rtl.min.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.wzkb-wizard-repeater-table th,
2+
.wzkb-wizard-repeater-table td {
3+
vertical-align: top;
4+
}
5+
6+
.wzkb-wizard-repeater-table .wzkb-wizard-col-actions {
7+
width: 120px;
8+
}
9+
10+
.wzkb-wizard-repeater-table input.regular-text,
11+
.wzkb-wizard-repeater-table textarea.large-text,
12+
.wzkb-wizard-repeater-table select {
13+
width: 100%;
14+
max-width: 100%;
15+
}
16+
17+
.wzkb-wizard-repeater-table textarea {
18+
resize: vertical;
19+
}
20+
21+
.wzkb-wizard-repeater-table .button-link-delete {
22+
color: #b32d2e;
23+
}

includes/admin/css/wizard-content.min.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
(function ($) {
2+
'use strict';
3+
4+
function slugify(value) {
5+
if (!value) {
6+
return '';
7+
}
8+
return String(value)
9+
.toLowerCase()
10+
.replace(/\s+/g, '-')
11+
.replace(/[^a-z0-9\-]/g, '')
12+
.replace(/\-\-+/g, '-')
13+
.replace(/^\-+|\-+$/g, '');
14+
}
15+
16+
function getNextIndex($tbody) {
17+
var maxIndex = -1;
18+
$tbody.find('tr.wzkb-wizard-repeater-row').each(function () {
19+
var $name = $(this).find('input.wzkb-wizard-name');
20+
var nameAttr = $name.attr('name') || '';
21+
var match = nameAttr.match(/\[(\d+)\]\[name\]/);
22+
if (match && match[1]) {
23+
maxIndex = Math.max(maxIndex, parseInt(match[1], 10));
24+
}
25+
});
26+
return maxIndex + 1;
27+
}
28+
29+
function updateRowIndex($row, fieldName, index) {
30+
$row.find('input, textarea, select').each(function () {
31+
var $field = $(this);
32+
var currentName = $field.attr('name') || '';
33+
currentName = currentName.replace(new RegExp('^' + fieldName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\[\\d+\\]'), fieldName + '[' + index + ']');
34+
$field.attr('name', currentName);
35+
});
36+
}
37+
38+
function clearRowValues($row) {
39+
$row.find('input[type="text"], textarea').val('');
40+
$row.find('select').prop('selectedIndex', 0);
41+
$row.find('.wzkb-wizard-slug').removeData('userEdited');
42+
$row.find('.wzkb-wizard-remove-row').text('Remove');
43+
}
44+
45+
function updateRowActionLabel($row) {
46+
var $existing = $row.find('.wzkb-wizard-existing-select');
47+
if (!$existing.length) {
48+
return;
49+
}
50+
var existingId = parseInt($existing.val(), 10) || 0;
51+
$row.find('.wzkb-wizard-remove-row').text(existingId > 0 ? 'Clear row' : 'Remove');
52+
}
53+
54+
function addRow(fieldName, $tbody) {
55+
var $templateRow = $tbody.find('tr.wzkb-wizard-repeater-row').first();
56+
if (0 === $templateRow.length) {
57+
return;
58+
}
59+
var index = getNextIndex($tbody);
60+
var $newRow = $templateRow.clone(true, true);
61+
updateRowIndex($newRow, fieldName, index);
62+
clearRowValues($newRow);
63+
$tbody.append($newRow);
64+
}
65+
66+
$(document).on('click', '.wzkb-wizard-add-row', function (e) {
67+
e.preventDefault();
68+
var fieldName = $(this).data('target');
69+
var $tbody = $(this).closest('.wzkb-wizard-repeater').find('tbody.wzkb-wizard-repeater-rows');
70+
addRow(fieldName, $tbody);
71+
});
72+
73+
$(document).on('click', '.wzkb-wizard-remove-row', function (e) {
74+
e.preventDefault();
75+
var $tbody = $(this).closest('tbody.wzkb-wizard-repeater-rows');
76+
var $rows = $tbody.find('tr.wzkb-wizard-repeater-row');
77+
var $row = $(this).closest('tr.wzkb-wizard-repeater-row');
78+
var $existing = $row.find('.wzkb-wizard-existing-select');
79+
var existingId = $existing.length ? (parseInt($existing.val(), 10) || 0) : 0;
80+
if (existingId > 0) {
81+
clearRowValues($row);
82+
return;
83+
}
84+
if ($rows.length <= 1) {
85+
clearRowValues($rows.first());
86+
return;
87+
}
88+
$(this).closest('tr.wzkb-wizard-repeater-row').remove();
89+
});
90+
91+
$(document).on('input', '.wzkb-wizard-slug', function () {
92+
$(this).data('userEdited', true);
93+
});
94+
95+
$(document).on('blur', '.wzkb-wizard-name', function () {
96+
var $name = $(this);
97+
var $row = $name.closest('tr.wzkb-wizard-repeater-row');
98+
var $slug = $row.find('.wzkb-wizard-slug');
99+
if (0 === $slug.length) {
100+
return;
101+
}
102+
if ($slug.data('userEdited')) {
103+
return;
104+
}
105+
if ($slug.val()) {
106+
return;
107+
}
108+
$slug.val(slugify($name.val()));
109+
});
110+
111+
$(document).on('change', '.wzkb-wizard-existing-select', function () {
112+
var $select = $(this);
113+
var $row = $select.closest('tr.wzkb-wizard-repeater-row');
114+
var $selected = $select.find('option:selected');
115+
116+
var existingId = parseInt($selected.val(), 10) || 0;
117+
updateRowActionLabel($row);
118+
if (existingId <= 0) {
119+
return;
120+
}
121+
122+
var name = $selected.data('name') || '';
123+
var slug = $selected.data('slug') || '';
124+
var description = $selected.data('description') || '';
125+
var parent = parseInt($selected.data('parent'), 10) || 0;
126+
var relatedId = parseInt($selected.data('related-id'), 10) || 0;
127+
128+
var $name = $row.find('.wzkb-wizard-name');
129+
var $slug = $row.find('.wzkb-wizard-slug');
130+
var $desc = $row.find('.wzkb-wizard-description');
131+
var $parentSelect = $row.find('.wzkb-wizard-term-select');
132+
133+
if ($name.length) {
134+
$name.val(name);
135+
}
136+
if ($slug.length) {
137+
$slug.val(slug);
138+
$slug.data('userEdited', true);
139+
}
140+
if ($desc.length) {
141+
$desc.val(description);
142+
}
143+
if ($parentSelect.length) {
144+
if (parent > 0) {
145+
$parentSelect.val(String(parent));
146+
} else if (relatedId > 0) {
147+
$parentSelect.val(String(relatedId));
148+
}
149+
}
150+
});
151+
})(jQuery);

includes/admin/js/wizard-content.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

includes/admin/settings/class-metabox-api.php

Lines changed: 13 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/**
33
* Class to display and save a Metabox.
44
*
5-
* @package WebberZone\Knowledge_Base
5+
* @package WebberZone\Knowledge_Base\Admin
66
*/
77

88
namespace WebberZone\Knowledge_Base\Admin\Settings;
@@ -15,7 +15,6 @@
1515
/**
1616
* Metabox API class.
1717
*/
18-
#[\AllowDynamicProperties]
1918
class Metabox_API {
2019

2120
/**
@@ -122,40 +121,23 @@ public function add_meta_boxes() {
122121
*/
123122
public function admin_enqueue_scripts( $hook ) {
124123
if ( in_array( $hook, array( 'post.php', 'post-new.php' ), true ) || get_current_screen()->post_type === $this->post_type ) {
125-
self::enqueue_scripts_styles();
124+
$args = array(
125+
'strings' => array(
126+
'no_results' => isset( $this->translation_strings['tom_select_no_results'] ) ? esc_html( $this->translation_strings['tom_select_no_results'] ) : 'No results found for "%s"',
127+
),
128+
);
129+
self::enqueue_scripts_styles( $this->prefix, $args );
126130
}
127131
}
128132

129133
/**
130134
* Enqueues all scripts, styles, settings, and templates necessary to use the Settings API.
135+
*
136+
* @param string $prefix Prefix which is used for creating the unique filters and actions.
137+
* @param array $args Array of arguments.
131138
*/
132-
public static function enqueue_scripts_styles() {
133-
134-
$minimize = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
135-
136-
wp_enqueue_style( 'wp-color-picker' );
137-
138-
wp_enqueue_media();
139-
wp_enqueue_script( 'wp-color-picker' );
140-
wp_enqueue_script( 'jquery' );
141-
wp_enqueue_script( 'jquery-ui-autocomplete' );
142-
wp_enqueue_script( 'jquery-ui-tabs' );
143-
144-
wp_enqueue_code_editor(
145-
array(
146-
'type' => 'text/html',
147-
'codemirror' => array(
148-
'indentUnit' => 2,
149-
'tabSize' => 2,
150-
),
151-
)
152-
);
153-
154-
// Enqueue WZ Admin JS.
155-
wp_enqueue_script( 'wz-admin-js' );
156-
wp_enqueue_script( 'wz-codemirror-js' );
157-
wp_enqueue_script( 'wz-taxonomy-suggest-js' );
158-
wp_enqueue_script( 'wz-media-selector-js' );
139+
public static function enqueue_scripts_styles( $prefix, $args = array() ) {
140+
Settings_API::enqueue_scripts_styles( $prefix, $args );
159141
}
160142

161143
/**
@@ -264,24 +246,7 @@ public function html( $post ) {
264246
echo '<table class="form-table">';
265247
foreach ( $this->registered_settings as $setting ) {
266248

267-
$args = wp_parse_args(
268-
$setting,
269-
array(
270-
'id' => null,
271-
'name' => '',
272-
'desc' => '',
273-
'type' => null,
274-
'default' => '',
275-
'options' => '',
276-
'max' => null,
277-
'min' => null,
278-
'step' => null,
279-
'size' => null,
280-
'field_class' => '',
281-
'field_attributes' => '',
282-
'placeholder' => '',
283-
)
284-
);
249+
$args = Settings_API::parse_field_args( $setting );
285250

286251
$id = $args['id'];
287252
$value = get_post_meta( $post->ID, "_{$this->prefix}_{$id}", true );

0 commit comments

Comments
 (0)