-
Notifications
You must be signed in to change notification settings - Fork 146
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
enhance: form builder content body UI redesign #1491
base: develop
Are you sure you want to change the base?
Changes from all commits
63151b3
787c082
a7c5fe7
d008e8a
c96afbf
065b1fa
63f6663
2b12da4
e58e788
743860f
b720564
7590512
daae343
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,5 +1,9 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'use strict'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
module.exports = function(grunt) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
module.exports = function( grunt) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const tailwindFileMap = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'admin/form-builder/views/form-builder.php': 'admin/form-builder.css', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var formBuilderAssets = require('./admin/form-builder/assets/js/form-builder-assets.js'); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var pkg = grunt.file.readJSON('package.json'); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -112,7 +116,20 @@ module.exports = function(grunt) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tasks: [ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'shell:npm_build' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tailwind: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
files: [ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'src/css/**/*.css', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'admin/form-builder/views/*.php', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'includes/Admin/views/*.php', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'admin/form-builder/assets/js/**/*' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tasks: ['shell:tailwind'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
options: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spawn: false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Clean up build directory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -221,6 +238,11 @@ module.exports = function(grunt) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
shell: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
npm_build: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
command: 'npm run build', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tailwind: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
command: function ( input, output ) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return `npx tailwindcss -i ${input} -o ${output}`; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -238,6 +260,7 @@ module.exports = function(grunt) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.loadNpmTasks( 'grunt-notify' ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.loadNpmTasks( 'grunt-wp-readme-to-markdown' ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.loadNpmTasks( 'grunt-shell' ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.loadNpmTasks( 'grunt-postcss' ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.registerTask( 'default', [ 'less', 'concat', 'uglify', 'i18n' ] ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -248,4 +271,28 @@ module.exports = function(grunt) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// build stuff | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.registerTask( 'release', [ 'less', 'concat', 'uglify', 'i18n', 'readme' ] ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.registerTask( 'zip', [ 'clean', 'copy', 'compress' ] ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.event.on('watch', function(action, filepath, target) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (target === 'tailwind') { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.task.run('tailwind'); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+275
to
+279
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Optimize watch handler to process only changed files. The current implementation runs the full Tailwind task for any file change. Consider processing only the affected files by using the filepath parameter. grunt.event.on('watch', function(action, filepath, target) {
if (target === 'tailwind') {
- grunt.task.run('tailwind');
+ // Find the corresponding CSS file for the changed PHP file
+ const cssFile = Object.entries(tailwindFileMap).find(([phpFile]) =>
+ filepath.includes(phpFile)
+ )?.[1];
+
+ if (cssFile) {
+ const inputFile = `src/css/${cssFile}`;
+ const outputFile = `assets/css/${cssFile}`;
+ grunt.task.run(`shell:tailwind:${inputFile}:${outputFile}`);
+ } else if (filepath.endsWith('.css')) {
+ // Process CSS file changes directly
+ const match = filepath.match(/src\/css\/(.+)$/);
+ if (match) {
+ const outputFile = `assets/css/${match[1]}`;
+ grunt.task.run(`shell:tailwind:${filepath}:${outputFile}`);
+ }
+ }
}
});
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.registerTask('tailwind', function() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const done = this.async(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Process each file mapping | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Object.entries(tailwindFileMap).forEach(([phpFile, cssFile]) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const inputFile = `src/css/${cssFile}`; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const outputFile = `assets/css/${cssFile}`; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Ensure the input file exists | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (grunt.file.exists(inputFile)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Run the tailwind command | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grunt.task.run(`shell:tailwind:${inputFile}:${outputFile}`); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
done(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+281
to
+297
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance Tailwind task with better error handling and feedback. The task could benefit from:
grunt.registerTask('tailwind', function() {
const done = this.async();
+ let hasErrors = false;
+ const promises = [];
// Process each file mapping
Object.entries(tailwindFileMap).forEach(([phpFile, cssFile]) => {
const inputFile = `src/css/${cssFile}`;
const outputFile = `assets/css/${cssFile}`;
// Ensure the input file exists
if (grunt.file.exists(inputFile)) {
- // Run the tailwind command
- grunt.task.run(`shell:tailwind:${inputFile}:${outputFile}`);
+ grunt.log.writeln(`Processing ${inputFile} → ${outputFile}`);
+ promises.push(new Promise((resolve, reject) => {
+ grunt.util.spawn({
+ cmd: 'npx',
+ args: ['tailwindcss', '-i', inputFile, '-o', outputFile]
+ }, (error, result, code) => {
+ if (error) {
+ grunt.log.error(`Error processing ${inputFile}: ${error}`);
+ hasErrors = true;
+ reject(error);
+ } else {
+ grunt.log.ok(`Successfully processed ${outputFile}`);
+ resolve();
+ }
+ });
+ }));
+ } else {
+ grunt.log.error(`Input file ${inputFile} not found`);
+ hasErrors = true;
}
});
- done();
+ Promise.all(promises)
+ .then(() => {
+ if (hasErrors) {
+ done(false);
+ } else {
+ grunt.log.ok('Tailwind processing completed successfully');
+ done();
+ }
+ })
+ .catch(() => done(false));
}); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,16 +1,38 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div class="wpuf-fields"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ul :class="['wpuf-fields-list', ('yes' === field.inline) ? 'wpuf-list-inline' : '']"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<li v-if="has_options" v-for="(label, val) in field.options"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<label> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="field.inline !== 'yes'" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="wpuf-space-y-2"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="has_options" v-for="(label, val) in field.options" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="wpuf-relative wpuf-flex wpuf-items-center"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div class="wpuf-flex wpuf-items-center"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<input | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type="checkbox" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:value="val" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:checked="is_selected(val)" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:class="class_names('checkbox_btns')" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> {{ label }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</label> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</li> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ul> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="wpuf-h-4 wpuf-w-4 wpuf-rounded wpuf-border-gray-300 wpuf-text-indigo-600 focus:wpuf-ring-indigo-600 !wpuf-mt-0.5"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<label class="wpuf-ml-3 wpuf-text-sm wpuf-font-medium wpuf-text-gray-900">{{ label }}</label> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<span v-if="field.help" class="wpuf-help" v-html="field.help" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="wpuf-flex" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="has_options" v-for="(label, val) in field.options" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="wpuf-relative wpuf-flex wpuf-items-center wpuf-mr-4"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<input | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type="checkbox" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:value="val" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:checked="is_selected(val)" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:class="class_names('checkbox_btns')" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="!wpuf-mt-[.5px] wpuf-rounded wpuf-border-gray-300 wpuf-text-indigo-600"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<label class="wpuf-ml-1 wpuf-text-sm wpuf-font-medium wpuf-text-gray-900">{{ label }}</label> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+20
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider using a more robust alignment approach. While the current alignment works, the Consider using flexbox alignment instead: -class="!wpuf-mt-[.5px] wpuf-rounded wpuf-border-gray-300 wpuf-text-indigo-600"
+class="wpuf-self-center wpuf-rounded wpuf-border-gray-300 wpuf-text-indigo-600" 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<p v-if="field.help" class="wpuf-mt-2 wpuf-text-sm wpuf-text-gray-500" v-html="field.help"></p> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Based on the search results, I can now provide a complete analysis of how the help text is handled:
<p v-if="field.help" class="wpuf-mt-2 wpuf-text-sm wpuf-text-gray-500" v-html="field.help"></p>
a. In Field_Contract.php: <span class="wpuf-help"><?php echo stripslashes( $field['help'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></span> b. In Render_Form.php: <span class="wpuf-help"><?php echo esc_html( stripslashes( $attr['help'] ) ); ?></span> The issue is that while the PHP backend properly sanitizes the help text using Final Response: Help text needs sanitization in form builder templates to prevent XSS The help text is currently rendered using
🔗 Analysis chainVerify help text sanitization for XSS prevention. The use of Let's check how the help text is processed: Let me search for how the help text content is processed before being displayed. Let's look for where the field help text is set or sanitized. Let me search for where the help text content is set or processed before being displayed in the form builder. Let me search for where the help text is processed before being displayed and any sanitization that might be applied. Let me try a different search pattern to find how the help text is processed. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Search for help text sanitization in the codebase
rg -A 5 "field\.help" --type php
Length of output: 23289 Script: #!/bin/bash
# Search for field help text initialization or sanitization
rg -A 5 "field\['help'\]|field\.help\s*=" --type js --type php
# Also search for any sanitization functions that might be used
rg -A 5 "sanitize|escape" --type js --type php
Length of output: 362504 Script: #!/bin/bash
# Search for where field help text is set or processed in form builder
ast-grep --pattern 'field.help = $_'
ast-grep --pattern 'field["help"] = $_'
# Also search for form builder initialization code
rg -A 5 "form_builder|form-builder" --type js
Length of output: 37896 Script: #!/bin/bash
# Search for help text processing in PHP files
rg -A 5 "help.*=.*field\[.*help" --type php
rg -A 5 "sanitize.*help" --type php
# Search for help text in Vue components
ast-grep --pattern 'v-html="$_"'
Length of output: 118 Script: #!/bin/bash
# Search for help text processing in PHP files
rg -A 5 "help.*text" --type php
rg -A 5 "field\[.?'help" --type php
# Search for help text in Vue templates
rg -A 5 'v-html.*help' --type php --type vue --type html
Length of output: 66456 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,10 @@ | ||
<div class="wpuf-fields"> | ||
<input | ||
type="text" | ||
:class="class_names('textfield')" | ||
:class="builder_class_names('text_hidden')" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Based on the findings, I can now generate the final response: The change to The
🔗 Analysis chainVerify the builder_class_names implementation. The change to Let's verify the implementation of this new method: Let me gather more information about the class naming methods to better understand the implementation. Let me search for any Vue-related files or mixins that might define these class naming methods. Let me check the implementation of the Let me check one more thing to see how the 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Search for the builder_class_names implementation and its usage
ast-grep --pattern 'builder_class_names'
# Also check for any potential references to the old class naming
rg "class_names\('textfield'\)"
Length of output: 482 Script: #!/bin/bash
# Search for class_names and builder_class_names method definitions
ast-grep --pattern 'function class_names'
ast-grep --pattern 'function builder_class_names'
ast-grep --pattern 'const class_names'
ast-grep --pattern 'const builder_class_names'
# Search for any imports or mixins that might define these methods
rg -A 3 "import.*class.*names"
rg -A 3 "mixin.*class.*names"
Length of output: 44699 Script: #!/bin/bash
# Search for Vue-related files that might contain class naming methods
fd -e vue -e js | xargs rg -l "class.*names"
# Search for any Vue mixins
fd -e vue -e js | xargs rg -l "mixins.*class.*names"
# Search for builder_class_names in JS files
rg -A 5 "builder_class_names" --type js
Length of output: 1408 Script: #!/bin/bash
# Get the full implementation of builder_class_names from the form-field mixin
rg -A 20 "builder_class_names: function\(type_class\)" "admin/form-builder/assets/js/mixins/form-field.js"
# Also check if there are any other files using this method
rg "\builder_class_names\(" --type js
Length of output: 1207 Script: #!/bin/bash
# Get more context around the builder_class_names implementation
rg -A 30 "builder_class_names: function\(type_class\)" "admin/form-builder/assets/js/mixins/form-field.js"
# Also check for any text_hidden related code
rg "case 'text_hidden':" --type js
rg "text_hidden" --type js
Length of output: 1512 |
||
:placeholder="field.placeholder" | ||
:value="field.default" | ||
:size="field.size" | ||
> | ||
<span v-if="field.help" class="wpuf-help" v-html="field.help" /> | ||
<p v-if="field.help" class="wpuf-mt-2 wpuf-text-sm wpuf-text-gray-500" v-html="field.help"></p> | ||
</div> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,14 @@ | ||
<div class="wpuf-fields"> | ||
<select | ||
:class="class_names('select_lbl')" | ||
> | ||
class="wpuf-block wpuf-w-full wpuf-min-w-full wpuf-rounded-md wpuf-py-1.5 wpuf-text-gray-900 wpuf-shadow-sm placeholder:wpuf-text-gray-400 sm:wpuf-text-sm sm:wpuf-leading-6 wpuf-border !wpuf-border-gray-300"> | ||
<option v-if="field.first" value="">{{ field.first }}</option> | ||
|
||
<option | ||
v-if="has_options" | ||
v-for="(label, val) in field.options" | ||
:value="label" | ||
:selected="is_selected(label)" | ||
>{{ label }}</option> | ||
</select> | ||
|
||
<span v-if="field.help" class="wpuf-help" v-html="field.help"> </span> | ||
<p v-if="field.help" class="wpuf-mt-2 wpuf-text-sm wpuf-text-gray-500" v-html="field.help"></p> | ||
</div> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,10 @@ | ||
<div class="wpuf-fields"> | ||
<input | ||
type="email" | ||
:class="class_names('email')" | ||
:class="class_names('email') + builder_class_names('text')" | ||
:placeholder="field.placeholder" | ||
:value="field.default" | ||
:size="field.size" | ||
> | ||
<span v-if="field.help" class="wpuf-help" v-html="field.help" /> | ||
<p v-if="field.help" class="wpuf-mt-2 wpuf-text-sm wpuf-text-gray-500" v-html="field.help"></p> | ||
</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Enhance the Tailwind shell command with error handling and build modes.
Consider these improvements: