Replaces JSON textarea with professional Excel-like spreadsheet interface for managing product variant properties. Features: - Handsontable 14.6.1 spreadsheet component - Property presets (Size, Color, Material, Storage, Custom) - Inline cell editing with Tab/Enter navigation - Context menu for add/remove rows and columns - Keyboard shortcuts (Ctrl+D delete, Ctrl+Enter save, Ctrl+Z undo) - Mobile touch gestures (swipe to delete rows) - Automatic JSON serialization on form submit - Form validation before saving - Comprehensive user guide documentation Files Changed: - LittleShop/package.json: NPM package management setup - LittleShop/wwwroot/js/variant-editor.js: 400-line spreadsheet editor module - LittleShop/wwwroot/lib/handsontable/: Handsontable library (Community Edition) - LittleShop/wwwroot/lib/hammerjs/: Hammer.js touch gesture library - LittleShop/Areas/Admin/Views/VariantCollections/Edit.cshtml: Spreadsheet UI integration - VARIANT_COLLECTIONS_USER_GUIDE.md: Complete user guide (18+ pages) Technical Details: - Excel-like editing experience (no more manual JSON editing) - Mobile-first responsive design - Browser compatibility: Chrome 90+, Firefox 88+, Edge 90+, Safari 14+ - Touch-optimized for mobile administration - Automatic data validation and error handling
1 line
4.5 KiB
JavaScript
1 line
4.5 KiB
JavaScript
!function(E,T){if("object"==typeof exports&&"object"==typeof module)module.exports=T(require("handsontable"));else if("function"==typeof define&&define.amd)define(["handsontable"],T);else{var e="object"==typeof exports?T(require("handsontable")):T(E.Handsontable);for(var _ in e)("object"==typeof exports?exports:E)[_]=e[_]}}("undefined"!=typeof self?self:this,(E=>(()=>{var T={330:T=>{"use strict";T.exports=E},436:E=>{E.exports=function(E){return E&&E.__esModule?E:{default:E}},E.exports.__esModule=!0,E.exports.default=E.exports}},e={};function _(E){var N=e[E];if(void 0!==N)return N.exports;var I=e[E]={exports:{}};return T[E](I,I.exports,_),I.exports}var N={};return(()=>{"use strict";var E=_(436)(_(330));const T=E.default.languages.dictionaryKeys,e={languageCode:"fr-FR",[T.CONTEXTMENU_ITEMS_ROW_ABOVE]:"Insérer une ligne en haut",[T.CONTEXTMENU_ITEMS_ROW_BELOW]:"Insérer une ligne en bas",[T.CONTEXTMENU_ITEMS_INSERT_LEFT]:"Insérer une colonne à gauche",[T.CONTEXTMENU_ITEMS_INSERT_RIGHT]:"Insérer une colonne à droite",[T.CONTEXTMENU_ITEMS_REMOVE_ROW]:["Supprimer une ligne","Supprimer les lignes"],[T.CONTEXTMENU_ITEMS_REMOVE_COLUMN]:["Supprimer une colonne","Supprimer les colonnes"],[T.CONTEXTMENU_ITEMS_UNDO]:"Annuler",[T.CONTEXTMENU_ITEMS_REDO]:"Rétablir",[T.CONTEXTMENU_ITEMS_READ_ONLY]:"Lecture seule",[T.CONTEXTMENU_ITEMS_CLEAR_COLUMN]:"Effacer la colonne",[T.CONTEXTMENU_ITEMS_ALIGNMENT]:"Alignement",[T.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]:"Gauche",[T.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]:"Centre",[T.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]:"Droite",[T.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]:"Justifié",[T.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]:"En haut",[T.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]:"Au milieu",[T.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]:"En bas",[T.CONTEXTMENU_ITEMS_FREEZE_COLUMN]:"Figer la colonne",[T.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]:"Libérer la colonne",[T.CONTEXTMENU_ITEMS_BORDERS]:"Bordures",[T.CONTEXTMENU_ITEMS_BORDERS_TOP]:"Supérieure",[T.CONTEXTMENU_ITEMS_BORDERS_RIGHT]:"Droite",[T.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]:"Inférieure",[T.CONTEXTMENU_ITEMS_BORDERS_LEFT]:"Gauche",[T.CONTEXTMENU_ITEMS_REMOVE_BORDERS]:"Pas de bordure",[T.CONTEXTMENU_ITEMS_ADD_COMMENT]:"Ajouter commentaire",[T.CONTEXTMENU_ITEMS_EDIT_COMMENT]:"Modifier commentaire",[T.CONTEXTMENU_ITEMS_REMOVE_COMMENT]:"Supprimer commentaire",[T.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]:"Commentaire en lecture seule",[T.CONTEXTMENU_ITEMS_MERGE_CELLS]:"Fusionner les cellules",[T.CONTEXTMENU_ITEMS_UNMERGE_CELLS]:"Séparer les cellules",[T.CONTEXTMENU_ITEMS_COPY]:"Copier",[T.CONTEXTMENU_ITEMS_CUT]:"Couper",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]:"Insérer une sous-ligne",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]:"Détacher de la ligne précédente",[T.CONTEXTMENU_ITEMS_HIDE_COLUMN]:["Masquer colonne","Masquer les colonnes"],[T.CONTEXTMENU_ITEMS_SHOW_COLUMN]:["Afficher colonne","Afficher les colonnes"],[T.CONTEXTMENU_ITEMS_HIDE_ROW]:["Masquer ligne","Masquer les lignes"],[T.CONTEXTMENU_ITEMS_SHOW_ROW]:["Afficher ligne","Afficher les lignes"],[T.FILTERS_CONDITIONS_NONE]:"Aucun",[T.FILTERS_CONDITIONS_EMPTY]:"Est vide",[T.FILTERS_CONDITIONS_NOT_EMPTY]:"N'est pas vide",[T.FILTERS_CONDITIONS_EQUAL]:"Egal à",[T.FILTERS_CONDITIONS_NOT_EQUAL]:"Est différent de",[T.FILTERS_CONDITIONS_BEGINS_WITH]:"Commence par",[T.FILTERS_CONDITIONS_ENDS_WITH]:"Finit par",[T.FILTERS_CONDITIONS_CONTAINS]:"Contient",[T.FILTERS_CONDITIONS_NOT_CONTAIN]:"Ne contient pas",[T.FILTERS_CONDITIONS_GREATER_THAN]:"Supérieur à",[T.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]:"Supérieur ou égal à",[T.FILTERS_CONDITIONS_LESS_THAN]:"Inférieur à",[T.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]:"Inférieur ou égal à",[T.FILTERS_CONDITIONS_BETWEEN]:"Est compris entre",[T.FILTERS_CONDITIONS_NOT_BETWEEN]:"N'est pas compris entre",[T.FILTERS_CONDITIONS_AFTER]:"Après le",[T.FILTERS_CONDITIONS_BEFORE]:"Avant le",[T.FILTERS_CONDITIONS_TODAY]:"Aujourd'hui",[T.FILTERS_CONDITIONS_TOMORROW]:"Demain",[T.FILTERS_CONDITIONS_YESTERDAY]:"Hier",[T.FILTERS_VALUES_BLANK_CELLS]:"Cellules vides",[T.FILTERS_DIVS_FILTER_BY_CONDITION]:"Filtrer par conditions",[T.FILTERS_DIVS_FILTER_BY_VALUE]:"Filtrer par valeurs",[T.FILTERS_LABELS_CONJUNCTION]:"Et",[T.FILTERS_LABELS_DISJUNCTION]:"Ou",[T.FILTERS_BUTTONS_SELECT_ALL]:"Tout sélectionner",[T.FILTERS_BUTTONS_CLEAR]:"Effacer la sélection",[T.FILTERS_BUTTONS_OK]:"OK",[T.FILTERS_BUTTONS_CANCEL]:"Annuler",[T.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]:"Chercher",[T.FILTERS_BUTTONS_PLACEHOLDER_VALUE]:"Valeur",[T.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]:"Valeur de remplacement"};E.default.languages.registerLanguageDictionary(e)})(),N=N.___})())); |