84 lines
2.4 KiB
Dart
84 lines
2.4 KiB
Dart
class MetadataHelper {
|
|
// Common prefixes or patterns
|
|
static const Map<String, String> _prefixes = {
|
|
'_yoast_': 'Yoast SEO',
|
|
'_elementor_': 'Elementor',
|
|
'_wpas_': 'Publicize',
|
|
'facebook_': 'Facebook',
|
|
'_wc_': 'WooCommerce',
|
|
'slide_template': 'Slider',
|
|
};
|
|
|
|
static const Map<String, String> _fieldNames = {
|
|
'_yoast_wpseo_title': 'SEO Title',
|
|
'_yoast_wpseo_metadesc': 'Meta Description',
|
|
'_yoast_wpseo_focuskw': 'Focus Keyword',
|
|
'_yoast_wpseo_canonical': 'Canonical URL',
|
|
'_elementor_edit_mode': 'Edit Mode',
|
|
'_elementor_template_type': 'Template Type',
|
|
'_elementor_version': 'Version',
|
|
'_price': 'Price',
|
|
'_regular_price': 'Regular Price',
|
|
'_sale_price': 'Sale Price',
|
|
'_sku': 'SKU',
|
|
'_stock_status': 'Stock Status',
|
|
};
|
|
|
|
static String getPluginName(String key) {
|
|
for (final entry in _prefixes.entries) {
|
|
if (key.startsWith(entry.key)) {
|
|
return entry.value;
|
|
}
|
|
}
|
|
return 'Other';
|
|
}
|
|
|
|
static String getFieldTitle(String key) {
|
|
if (_fieldNames.containsKey(key)) {
|
|
return _fieldNames[key]!;
|
|
}
|
|
|
|
// Fallback: cleanup the key
|
|
String title = key;
|
|
|
|
// Remove underscores
|
|
if (title.startsWith('_')) title = title.substring(1);
|
|
|
|
// Replace separators
|
|
title = title.replaceAll('_', ' ').replaceAll('-', ' ');
|
|
|
|
// Remove plugin prefixes if recognizable to clean it up further
|
|
for (final prefix in _prefixes.keys) {
|
|
final cleanPrefix = prefix.replaceAll('_', ' ').trim();
|
|
if (title.toLowerCase().startsWith(cleanPrefix)) {
|
|
title = title.substring(cleanPrefix.length).trim();
|
|
}
|
|
}
|
|
|
|
// Capitalize Words
|
|
return title.split(' ').map((str) {
|
|
if (str.isEmpty) return '';
|
|
return str[0].toUpperCase() + str.substring(1).toLowerCase();
|
|
}).join(' ');
|
|
}
|
|
|
|
static Map<String, List<dynamic>> groupMetadata(List<dynamic> metaData) {
|
|
final Map<String, List<dynamic>> groups = {};
|
|
|
|
for (var meta in metaData) {
|
|
final key = meta['key']?.toString() ?? '';
|
|
final groupName = getPluginName(key);
|
|
|
|
if (!groups.containsKey(groupName)) {
|
|
groups[groupName] = [];
|
|
}
|
|
groups[groupName]!.add(meta);
|
|
}
|
|
|
|
// Sort keys: Known plugins first, Other last
|
|
// We can return a sorted map logic or just let the UI handle it.
|
|
// Just ensuring 'Other' is at the end might be nice, but simple map is fine for now.
|
|
return groups;
|
|
}
|
|
}
|