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
5.0 KiB
JavaScript
1 line
5.0 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 _="object"==typeof exports?T(require("handsontable")):T(E.Handsontable);for(var N in _)("object"==typeof exports?exports:E)[N]=_[N]}}("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}},_={};function N(E){var O=_[E];if(void 0!==O)return O.exports;var I=_[E]={exports:{}};return T[E](I,I.exports,N),I.exports}var O={};return(()=>{"use strict";var E=N(436)(N(330));const T=E.default.languages.dictionaryKeys,_={languageCode:"pl-PL",[T.CONTEXTMENU_ITEMS_NO_ITEMS]:"Brak dostępnych opcji",[T.CONTEXTMENU_ITEMS_ROW_ABOVE]:"Wstaw wiersz powyżej",[T.CONTEXTMENU_ITEMS_ROW_BELOW]:"Wstaw wiersz poniżej",[T.CONTEXTMENU_ITEMS_INSERT_LEFT]:"Wstaw kolumnę z lewej",[T.CONTEXTMENU_ITEMS_INSERT_RIGHT]:"Wstaw kolumnę z prawej",[T.CONTEXTMENU_ITEMS_REMOVE_ROW]:["Usuń wiersz","Usuń wiersze"],[T.CONTEXTMENU_ITEMS_REMOVE_COLUMN]:["Usuń kolumnę","Usuń kolumny"],[T.CONTEXTMENU_ITEMS_UNDO]:"Cofnij",[T.CONTEXTMENU_ITEMS_REDO]:"Ponów",[T.CONTEXTMENU_ITEMS_READ_ONLY]:"Tylko do odczytu",[T.CONTEXTMENU_ITEMS_CLEAR_COLUMN]:"Wyczyść kolumnę",[T.CONTEXTMENU_ITEMS_ALIGNMENT]:"Wyrównanie",[T.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]:"Do lewej",[T.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]:"Do środka",[T.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]:"Do prawej",[T.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]:"Wyjustuj",[T.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]:"Do góry",[T.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]:"Wyśrodkuj",[T.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]:"Do dołu",[T.CONTEXTMENU_ITEMS_FREEZE_COLUMN]:"Zablokuj kolumnę",[T.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]:"Odblokuj kolumnę",[T.CONTEXTMENU_ITEMS_BORDERS]:"Obramowanie",[T.CONTEXTMENU_ITEMS_BORDERS_TOP]:"Krawędź górna",[T.CONTEXTMENU_ITEMS_BORDERS_RIGHT]:"Krawędź prawa",[T.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]:"Krawędź dolna",[T.CONTEXTMENU_ITEMS_BORDERS_LEFT]:"Krawędź lewa",[T.CONTEXTMENU_ITEMS_REMOVE_BORDERS]:"Usuń obramowanie(a)",[T.CONTEXTMENU_ITEMS_ADD_COMMENT]:"Dodaj komentarz",[T.CONTEXTMENU_ITEMS_EDIT_COMMENT]:"Edytuj komentarz",[T.CONTEXTMENU_ITEMS_REMOVE_COMMENT]:"Usuń komentarz",[T.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]:"Komentarz tylko do odczytu",[T.CONTEXTMENU_ITEMS_MERGE_CELLS]:"Scal komórki",[T.CONTEXTMENU_ITEMS_UNMERGE_CELLS]:"Rozdziel komórki",[T.CONTEXTMENU_ITEMS_COPY]:"Kopiuj",[T.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]:["Kopiuj z nagłówkiem","Kopiuj z nagłówkami"],[T.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]:["Kopiuj z nagłówkiem grupowym","Kopiuj z nagłówkami grupowymi"],[T.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]:["Kopiuj sam nagłówek","Kopiuj same nagłówki"],[T.CONTEXTMENU_ITEMS_CUT]:"Wytnij",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]:"Wstaw wiersz podrzędny",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]:"Odłącz od nadrzędnego",[T.CONTEXTMENU_ITEMS_HIDE_COLUMN]:["Ukryj kolumnę","Ukryj kolumny"],[T.CONTEXTMENU_ITEMS_SHOW_COLUMN]:["Pokaż kolumnę","Pokaż kolumny"],[T.CONTEXTMENU_ITEMS_HIDE_ROW]:["Ukryj wiersz","Ukryj wiersze"],[T.CONTEXTMENU_ITEMS_SHOW_ROW]:["Pokaż wiersz","Pokaż wiersze"],[T.FILTERS_CONDITIONS_NONE]:"Brak",[T.FILTERS_CONDITIONS_EMPTY]:"Komórka jest pusta",[T.FILTERS_CONDITIONS_NOT_EMPTY]:"Komórka nie jest pusta",[T.FILTERS_CONDITIONS_EQUAL]:"Jest równe",[T.FILTERS_CONDITIONS_NOT_EQUAL]:"Jest różne od",[T.FILTERS_CONDITIONS_BEGINS_WITH]:"Tekst zaczyna się od",[T.FILTERS_CONDITIONS_ENDS_WITH]:"Tekst kończy się na",[T.FILTERS_CONDITIONS_CONTAINS]:"Tekst zawiera fragment",[T.FILTERS_CONDITIONS_NOT_CONTAIN]:"Tekst nie zawiera fragmentu",[T.FILTERS_CONDITIONS_GREATER_THAN]:"Większe niż",[T.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]:"Większe lub równe",[T.FILTERS_CONDITIONS_LESS_THAN]:"Mniejsze niż",[T.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]:"Mniejsze lub równe",[T.FILTERS_CONDITIONS_BETWEEN]:"Jest pomiędzy",[T.FILTERS_CONDITIONS_NOT_BETWEEN]:"Nie jest pomiędzy",[T.FILTERS_CONDITIONS_AFTER]:"Data późniejsza niż",[T.FILTERS_CONDITIONS_BEFORE]:"Data wcześniejsza niż",[T.FILTERS_CONDITIONS_TODAY]:"Dzisiaj",[T.FILTERS_CONDITIONS_TOMORROW]:"Jutro",[T.FILTERS_CONDITIONS_YESTERDAY]:"Wczoraj",[T.FILTERS_VALUES_BLANK_CELLS]:"Puste miejsca",[T.FILTERS_DIVS_FILTER_BY_CONDITION]:"Filtruj wg warunku",[T.FILTERS_DIVS_FILTER_BY_VALUE]:"Filtruj wg wartości",[T.FILTERS_LABELS_CONJUNCTION]:"Oraz",[T.FILTERS_LABELS_DISJUNCTION]:"Lub",[T.FILTERS_BUTTONS_SELECT_ALL]:"Zaznacz wszystko",[T.FILTERS_BUTTONS_CLEAR]:"Wyczyść",[T.FILTERS_BUTTONS_OK]:"OK",[T.FILTERS_BUTTONS_CANCEL]:"Anuluj",[T.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]:"Szukaj",[T.FILTERS_BUTTONS_PLACEHOLDER_VALUE]:"Wartość",[T.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]:"Druga wartość",[T.CHECKBOX_CHECKED]:"Zaznaczony",[T.CHECKBOX_UNCHECKED]:"Odznaczony"};E.default.languages.registerLanguageDictionary(_)})(),O=O.___})())); |