diff --git a/css/gamutable.css.map b/css/gamutable.css.map deleted file mode 100644 index 1594d63..0000000 --- a/css/gamutable.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["gamutable.scss","gamutable.css"],"names":[],"mappings":"AAGA;EACC,qBAAA;ACFD;;ADIA;EACC,iBAAA;ACDD;;ADGA;EACC,iBAAA;ACAD;;ADEA;EACC,qBAAA;ACCD;;ADCA;EACC,iBAAA;EAEA,2BAAA;ACCD;ADAC;EACC,iBAAA;EACA,oCAAA;EACA,WAAA;ACEF;;ADCA;EACC,6BAAA;EACA,cAAA;ACED;;ADJA;EACC,6BAAA;EACA,cAAA;ACED;;ADJA;EACC,6BAAA;EACA,cAAA;ACED;;ADAA;EACC,WAAA;ACGD;;ADGC;;EAEC,gBAAA;ACAF;ADEC;EACC,iBAAA;ACAF;ADEC;EACC,iBAAA;ACAF;;ADGA;EACC,oBAAA;EAAA,aAAA;EACA,sBAAA;MAAA,8BAAA;ACAD;;ADEA;EACC,oBAAA;EAAA,aAAA;ACCD;ADAC;EACC,oBAAA;EAAA,aAAA;ACEF;ADAC;EACC,gBAAA;EACA,sBAAA;EACA,eAAA;ACEF;;ADEA;;EAEC,iBAAA;ACCD;;ADCA;EAOC,eAAA;EACA,kBAAA;ACJD;ADKC;EACC,oCAAA;ACHF;ADKC;EACC,oBAAA;EAAA,aAAA;EACA,sBAAA;MAAA,8BAAA;EACA,sBAAA;MAAA,mBAAA;ACHF;ADKC;EACC,oBAAA;EAAA,aAAA;ACHF;ADKC;EACC,oBAAA;MAAA,YAAA;ACHF;ADKC;EACC,YAAA;EACA,uBAAA;ACHF;ADKE;EACC,gBAAA;EACA,eAAA;ACHH;ADMC;EACC,eAAA;EACA,aAAA;ACJF;ADMC;EACC,sBAAA;EACA,uBAAA;ACJF;ADMC;EACC,0CAAA;ACJF;;ADOA;EACC,0CAAA;ACJD;;ADOA;EACC,eAAA;ACJD;;ADOA;EACC,WAAA;EACA,kBAAA;ACJD;;ADOA;EACC,UAAA;ACJD;ADKC;EACC,SAAA;ACHF;;ADOA;EACC,WAAA;EACA,cAAA;EACA,eAAA;EACA,kBAAA;ACJD;;ADMA;EACC,eAAA;EACA,2BAAA;EAAA,oBAAA;EACA,yBAAA;EACA,yBAAA;EACA,kBAAA;ACHD;ADIC;EACC,yBAAA;ACFF;;ADMA;EACC,iBAAA;ACHD;;ADMA;EACC,oBAAA;EAAA,aAAA;EACA,mBAAA;MAAA,eAAA;ACHD;;ADKA;EACC,UAAA;EACA,yBAAA;EACA,mBAAA;EACA,kBAAA;ACFD;;ADKA;EACC,cAAA;ACFD;;ADKA,0CAAA;AAGC;EACC,WAAA;ACJF;;ADGC;EACC,UAAA;ACAF;;ADDC;EACC,UAAA;ACIF;;ADLC;EACC,UAAA;ACQF;;ADTC;EACC,UAAA;ACYF;;ADbC;EACC,UAAA;ACgBF;;ADjBC;EACC,UAAA;ACoBF;;ADrBC;EACC,UAAA;ACwBF;;ADzBC;EACC,UAAA;AC4BF;;AD7BC;EACC,UAAA;ACgCF;;ADjCC;EACC,UAAA;ACoCF;;ADrCC;EACC,UAAA;ACwCF;;ADzCC;EACC,UAAA;AC4CF;;AD7CC;EACC,UAAA;ACgDF;;ADjDC;EACC,UAAA;ACoDF;;ADrDC;EACC,UAAA;ACwDF;;ADzDC;EACC,UAAA;AC4DF;;AD7DC;EACC,UAAA;ACgEF;;ADjEC;EACC,UAAA;ACoEF;;ADrEC;EACC,SAAA;ACwEF;;ADjEC;EACC,aAAA;ACoEF;;ADlEC;EACC,iBAAA;ACqEF;;ADnEC;EACC,iBAAA;ACsEF;;ADpEC;EACC,aAAA;ACuEF;;ADjFC;EACC,YAAA;ACoFF;;ADlFC;EACC,gBAAA;ACqFF;;ADnFC;EACC,gBAAA;ACsFF;;ADpFC;EACC,YAAA;ACuFF;;ADjGC;EACC,YAAA;ACoGF;;ADlGC;EACC,gBAAA;ACqGF;;ADnGC;EACC,gBAAA;ACsGF;;ADpGC;EACC,YAAA;ACuGF;;ADjHC;EACC,YAAA;ACoHF;;ADlHC;EACC,gBAAA;ACqHF;;ADnHC;EACC,gBAAA;ACsHF;;ADpHC;EACC,YAAA;ACuHF;;ADjIC;EACC,YAAA;ACoIF;;ADlIC;EACC,gBAAA;ACqIF;;ADnIC;EACC,gBAAA;ACsIF;;ADpIC;EACC,YAAA;ACuIF;;ADjJC;EACC,YAAA;ACoJF;;ADlJC;EACC,gBAAA;ACqJF;;ADnJC;EACC,gBAAA;ACsJF;;ADpJC;EACC,YAAA;ACuJF;;ADjKC;EACC,YAAA;ACoKF;;ADlKC;EACC,gBAAA;ACqKF;;ADnKC;EACC,gBAAA;ACsKF;;ADpKC;EACC,YAAA;ACuKF;;ADjLC;EACC,YAAA;ACoLF;;ADlLC;EACC,gBAAA;ACqLF;;ADnLC;EACC,gBAAA;ACsLF;;ADpLC;EACC,YAAA;ACuLF;;ADjMC;EACC,YAAA;ACoMF;;ADlMC;EACC,gBAAA;ACqMF;;ADnMC;EACC,gBAAA;ACsMF;;ADpMC;EACC,YAAA;ACuMF;;ADjNC;EACC,YAAA;ACoNF;;ADlNC;EACC,gBAAA;ACqNF;;ADnNC;EACC,gBAAA;ACsNF;;ADpNC;EACC,YAAA;ACuNF;;ADjOC;EACC,YAAA;ACoOF;;ADlOC;EACC,gBAAA;ACqOF;;ADnOC;EACC,gBAAA;ACsOF;;ADpOC;EACC,YAAA;ACuOF;;ADjPC;EACC,YAAA;ACoPF;;ADlPC;EACC,gBAAA;ACqPF;;ADnPC;EACC,gBAAA;ACsPF;;ADpPC;EACC,YAAA;ACuPF;;ADjQC;EACC,YAAA;ACoQF;;ADlQC;EACC,gBAAA;ACqQF;;ADnQC;EACC,gBAAA;ACsQF;;ADpQC;EACC,YAAA;ACuQF;;ADjRC;EACC,YAAA;ACoRF;;ADlRC;EACC,gBAAA;ACqRF;;ADnRC;EACC,gBAAA;ACsRF;;ADpRC;EACC,YAAA;ACuRF;;ADjSC;EACC,YAAA;ACoSF;;ADlSC;EACC,gBAAA;ACqSF;;ADnSC;EACC,gBAAA;ACsSF;;ADpSC;EACC,YAAA;ACuSF;;ADjTC;EACC,YAAA;ACoTF;;ADlTC;EACC,gBAAA;ACqTF;;ADnTC;EACC,gBAAA;ACsTF;;ADpTC;EACC,YAAA;ACuTF;;ADjTC;EACC,YAAA;ACoTF;;ADlTC;EACC,gBAAA;ACqTF;;ADnTC;EACC,gBAAA;ACsTF;;ADpTC;EACC,YAAA;ACuTF;;ADjUC;EACC,YAAA;ACoUF;;ADlUC;EACC,gBAAA;ACqUF;;ADnUC;EACC,gBAAA;ACsUF;;ADpUC;EACC,YAAA;ACuUF;;ADjVC;EACC,YAAA;ACoVF;;ADlVC;EACC,gBAAA;ACqVF;;ADnVC;EACC,gBAAA;ACsVF;;ADpVC;EACC,YAAA;ACuVF;;ADjWC;EACC,YAAA;ACoWF;;ADlWC;EACC,gBAAA;ACqWF;;ADnWC;EACC,gBAAA;ACsWF;;ADpWC;EACC,YAAA;ACuWF;;ADjXC;EACC,YAAA;ACoXF;;ADlXC;EACC,gBAAA;ACqXF;;ADnXC;EACC,gBAAA;ACsXF;;ADpXC;EACC,YAAA;ACuXF;;ADjYC;EACC,YAAA;ACoYF;;ADlYC;EACC,gBAAA;ACqYF;;ADnYC;EACC,gBAAA;ACsYF;;ADpYC;EACC,YAAA;ACuYF;;ADjZC;EACC,YAAA;ACoZF;;ADlZC;EACC,gBAAA;ACqZF;;ADnZC;EACC,gBAAA;ACsZF;;ADpZC;EACC,YAAA;ACuZF;;ADjaC;EACC,YAAA;ACoaF;;ADlaC;EACC,gBAAA;ACqaF;;ADnaC;EACC,gBAAA;ACsaF;;ADpaC;EACC,YAAA;ACuaF;;ADjbC;EACC,YAAA;ACobF;;ADlbC;EACC,gBAAA;ACqbF;;ADnbC;EACC,gBAAA;ACsbF;;ADpbC;EACC,YAAA;ACubF;;ADjcC;EACC,YAAA;ACocF;;ADlcC;EACC,gBAAA;ACqcF;;ADncC;EACC,gBAAA;ACscF;;ADpcC;EACC,YAAA;ACucF;;ADjdC;EACC,YAAA;ACodF;;ADldC;EACC,gBAAA;ACqdF;;ADndC;EACC,gBAAA;ACsdF;;ADpdC;EACC,YAAA;ACudF;;ADjeC;EACC,WAAA;ACoeF;;ADleC;EACC,eAAA;ACqeF;;ADneC;EACC,eAAA;ACseF;;ADpeC;EACC,WAAA;ACueF;;ADjfC;EACC,WAAA;ACofF;;ADlfC;EACC,eAAA;ACqfF;;ADnfC;EACC,eAAA;ACsfF;;ADpfC;EACC,WAAA;ACufF;;ADjgBC;EACC,WAAA;ACogBF;;ADlgBC;EACC,eAAA;ACqgBF;;ADngBC;EACC,eAAA;ACsgBF;;ADpgBC;EACC,WAAA;ACugBF;;ADjhBC;EACC,WAAA;ACohBF;;ADlhBC;EACC,eAAA;ACqhBF;;ADnhBC;EACC,eAAA;ACshBF;;ADphBC;EACC,WAAA;ACuhBF;;ADjiBC;EACC,WAAA;ACoiBF;;ADliBC;EACC,eAAA;ACqiBF;;ADniBC;EACC,eAAA;ACsiBF;;ADpiBC;EACC,WAAA;ACuiBF;;ADjjBC;EACC,WAAA;ACojBF;;ADljBC;EACC,eAAA;ACqjBF;;ADnjBC;EACC,eAAA;ACsjBF;;ADpjBC;EACC,WAAA;ACujBF;;ADjkBC;EACC,WAAA;ACokBF;;ADlkBC;EACC,eAAA;ACqkBF;;ADnkBC;EACC,eAAA;ACskBF;;ADpkBC;EACC,WAAA;ACukBF;;ADjlBC;EACC,WAAA;AColBF;;ADllBC;EACC,eAAA;ACqlBF;;ADnlBC;EACC,eAAA;ACslBF;;ADplBC;EACC,WAAA;ACulBF;;ADjmBC;EACC,WAAA;AComBF;;ADlmBC;EACC,eAAA;ACqmBF;;ADnmBC;EACC,eAAA;ACsmBF;;ADpmBC;EACC,WAAA;ACumBF;;ADlmBA;EACC,qBAAA;ACqmBD;;ADnmBA;EACC,qBAAA;ACsmBD;;ADpmBA;EACC,WAAA;ACumBD;;ADrmBA;EACC,YAAA;ACwmBD;;ADtmBA;EACC,gBAAA;ACymBD;;ADvmBA;EACC,gBAAA;AC0mBD;;ADxmBA;EACC,aAAA;AC2mBD;;ADzmBA;EACC,iBAAA;AC4mBD;;AD1mBA;EACC,iBAAA;AC6mBD","file":"gamutable.css","sourcesContent":["// ----------------------------\n// Surcharge de vue-next-select\n// ----------------------------\n.gamutable__input--rechercher {\n\tpadding: 0.25rem 1rem;\n}\n.vue-tags .vue-tag.selected {\n\tfont-size: 1.2rem;\n}\ndiv.vue-input > input {\n\tfont-size: 1.2rem;\n}\n.tag--ub {\n\tdisplay: inline-block;\n}\n.gamutable__input--filtrer {\n\tfont-size: 1.2rem;\n\t//box-shadow: 0 0 0 1px rgb(153, 153, 153) inset;\n\tpadding: 5px 5px !important;\n\t&:valid {\n\t\tfont-size: 1.2rem;\n\t\tbackground-color: rgb(153, 153, 153);\n\t\tcolor: #000;\n\t}\n}\n.gamutable__input--filtrer:placeholder-shown {\n\tbackground-color: transparent;\n\tcolor: inherit;\n}\nth .vue-select {\n\twidth: 100%;\n}\n// ----------------------------\n// Fin de la surcharge de vue-next-select\n// ----------------------------\n.gamutable--surTable {\n\tselect,\n\tinput {\n\t\tmargin-bottom: 0;\n\t}\n\t.gamutable-nbrMax {\n\t\tmargin-left: 2rem;\n\t}\n\t.includespip {\n\t\tmargin-left: 2rem;\n\t}\n}\n.gamutable--sousTable {\n\tdisplay: flex;\n\tjustify-content: space-between;\n}\n.gamutable--pagination {\n\tdisplay: flex;\n\t.page-item {\n\t\tdisplay: flex;\n\t}\n\t.page-link {\n\t\tmargin: 0 0.2rem;\n\t\tbackground-color: #eee;\n\t\tcursor: pointer;\n\t}\n}\n\n.h2-like.titregamutable,\n.h2-like.titregamutable_deux {\n\tfont-weight: bold;\n}\n.gamutable table {\n\t// patch provisoire\n\t// .vue-dropdown-item > span {\n\t// \tdisplay: inline-block;\n\t// \tmin-height: 1rem;\n\t// }\n\n\tfont-size: 1rem;\n\ttable-layout: auto;\n\tthead {\n\t\tborder: 1px solid rgb(119, 119, 119);\n\t}\n\t.gt_labels {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t}\n\tth > div {\n\t\tdisplay: flex;\n\t}\n\t.label_tete_colonne {\n\t\tflex-grow: 1;\n\t}\n\t.iconeTri {\n\t\tfloat: right;\n\t\twidth: calc(1rem + 4px);\n\t\t//position: relative;\n\t\t.fa {\n\t\t\tpadding: 2px 5px;\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\t.tri_col {\n\t\tcursor: pointer;\n\t\tfill: #cecece;\n\t}\n\t.iconeTri > .active {\n\t\tfill: rgb(220, 53, 69);\n\t\tcolor: rgb(220, 53, 69);\n\t}\n\ttbody tr:hover {\n\t\tbackground-color: rgba(179, 209, 67, 0.27);\n\t}\n}\n#app .select {\n\tbackground-color: rgba(179, 209, 67, 0.47);\n}\n\ntd.id {\n\tcursor: pointer;\n}\n\nth.icone {\n\twidth: 30px;\n\ttext-align: center;\n}\n\ntr.filtreColonne th {\n\tpadding: 0;\n\tselect {\n\t\tmargin: 0;\n\t}\n}\n\ntd.icone > * {\n\twidth: 100%;\n\tdisplay: block;\n\tpadding: 0.5rem;\n\ttext-align: center;\n}\n.gamutable .url_action {\n\tpadding: 0.2rem;\n\tdisplay: inline-flex;\n\tbackground-color: #f5f5f5;\n\tborder: 1px solid #cecece;\n\tborder-radius: 5px;\n\t&:hover {\n\t\tbackground-color: #cecece;\n\t}\n}\n\ntd.icone i {\n\tfont-size: 1.8rem;\n}\n\n.vueBlocs {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n.vueBlocs-unbloc {\n\twidth: 23%;\n\tborder: 1px solid #cecece;\n\tmargin-bottom: 1rem;\n\tmargin-right: 1rem;\n}\n\n.viderInputSearch {\n\tcolor: #ff0000;\n}\n\n/* blocks widths (percentage and pixels) */\n$i: 100;\n@while $i > 0 {\n\t.w#{$i} {\n\t\twidth: $i * 1%;\n\t}\n\t$i: $i - 5;\n}\n\n$i: 1000;\n@while $i > 200 {\n\t.w#{$i}p {\n\t\twidth: $i * 1px;\n\t}\n\t.minw#{$i}p {\n\t\tmin-width: $i * 1px;\n\t}\n\t.maxw#{$i}p {\n\t\tmax-width: $i * 1px;\n\t}\n\t.w#{$i}p input {\n\t\twidth: $i * 1px;\n\t}\n\t$i: $i - 50;\n}\n$i: 200;\n@while $i > 0 {\n\t.w#{$i}p {\n\t\twidth: $i * 1px;\n\t}\n\t.minw#{$i}p {\n\t\tmin-width: $i * 1px;\n\t}\n\t.maxw#{$i}p {\n\t\tmax-width: $i * 1px;\n\t}\n\t.w#{$i}p input {\n\t\twidth: $i * 1px;\n\t}\n\t$i: $i - 10;\n}\n\n.w66 {\n\twidth: calc(100% / 3 * 2);\n}\n.w33 {\n\twidth: calc(100% / 3);\n}\n.wauto {\n\twidth: auto;\n}\n.w960p {\n\twidth: 960px;\n}\n.minw960p {\n\tmin-width: 960px;\n}\n.maxw960p {\n\tmax-width: 960px;\n}\n.w1140p {\n\twidth: 1140px;\n}\n.minw1140p {\n\tmin-width: 1140px;\n}\n.maxw1140p {\n\tmax-width: 1140px;\n}\n",".gamutable__input--rechercher {\n padding: 0.25rem 1rem;\n}\n\n.vue-tags .vue-tag.selected {\n font-size: 1.2rem;\n}\n\ndiv.vue-input > input {\n font-size: 1.2rem;\n}\n\n.tag--ub {\n display: inline-block;\n}\n\n.gamutable__input--filtrer {\n font-size: 1.2rem;\n padding: 5px 5px !important;\n}\n.gamutable__input--filtrer:valid {\n font-size: 1.2rem;\n background-color: rgb(153, 153, 153);\n color: #000;\n}\n\n.gamutable__input--filtrer:placeholder-shown {\n background-color: transparent;\n color: inherit;\n}\n\nth .vue-select {\n width: 100%;\n}\n\n.gamutable--surTable select,\n.gamutable--surTable input {\n margin-bottom: 0;\n}\n.gamutable--surTable .gamutable-nbrMax {\n margin-left: 2rem;\n}\n.gamutable--surTable .includespip {\n margin-left: 2rem;\n}\n\n.gamutable--sousTable {\n display: flex;\n justify-content: space-between;\n}\n\n.gamutable--pagination {\n display: flex;\n}\n.gamutable--pagination .page-item {\n display: flex;\n}\n.gamutable--pagination .page-link {\n margin: 0 0.2rem;\n background-color: #eee;\n cursor: pointer;\n}\n\n.h2-like.titregamutable,\n.h2-like.titregamutable_deux {\n font-weight: bold;\n}\n\n.gamutable table {\n font-size: 1rem;\n table-layout: auto;\n}\n.gamutable table thead {\n border: 1px solid rgb(119, 119, 119);\n}\n.gamutable table .gt_labels {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.gamutable table th > div {\n display: flex;\n}\n.gamutable table .label_tete_colonne {\n flex-grow: 1;\n}\n.gamutable table .iconeTri {\n float: right;\n width: calc(1rem + 4px);\n}\n.gamutable table .iconeTri .fa {\n padding: 2px 5px;\n cursor: pointer;\n}\n.gamutable table .tri_col {\n cursor: pointer;\n fill: #cecece;\n}\n.gamutable table .iconeTri > .active {\n fill: rgb(220, 53, 69);\n color: rgb(220, 53, 69);\n}\n.gamutable table tbody tr:hover {\n background-color: rgba(179, 209, 67, 0.27);\n}\n\n#app .select {\n background-color: rgba(179, 209, 67, 0.47);\n}\n\ntd.id {\n cursor: pointer;\n}\n\nth.icone {\n width: 30px;\n text-align: center;\n}\n\ntr.filtreColonne th {\n padding: 0;\n}\ntr.filtreColonne th select {\n margin: 0;\n}\n\ntd.icone > * {\n width: 100%;\n display: block;\n padding: 0.5rem;\n text-align: center;\n}\n\n.gamutable .url_action {\n padding: 0.2rem;\n display: inline-flex;\n background-color: #f5f5f5;\n border: 1px solid #cecece;\n border-radius: 5px;\n}\n.gamutable .url_action:hover {\n background-color: #cecece;\n}\n\ntd.icone i {\n font-size: 1.8rem;\n}\n\n.vueBlocs {\n display: flex;\n flex-wrap: wrap;\n}\n\n.vueBlocs-unbloc {\n width: 23%;\n border: 1px solid #cecece;\n margin-bottom: 1rem;\n margin-right: 1rem;\n}\n\n.viderInputSearch {\n color: #ff0000;\n}\n\n/* blocks widths (percentage and pixels) */\n.w100 {\n width: 100%;\n}\n\n.w95 {\n width: 95%;\n}\n\n.w90 {\n width: 90%;\n}\n\n.w85 {\n width: 85%;\n}\n\n.w80 {\n width: 80%;\n}\n\n.w75 {\n width: 75%;\n}\n\n.w70 {\n width: 70%;\n}\n\n.w65 {\n width: 65%;\n}\n\n.w60 {\n width: 60%;\n}\n\n.w55 {\n width: 55%;\n}\n\n.w50 {\n width: 50%;\n}\n\n.w45 {\n width: 45%;\n}\n\n.w40 {\n width: 40%;\n}\n\n.w35 {\n width: 35%;\n}\n\n.w30 {\n width: 30%;\n}\n\n.w25 {\n width: 25%;\n}\n\n.w20 {\n width: 20%;\n}\n\n.w15 {\n width: 15%;\n}\n\n.w10 {\n width: 10%;\n}\n\n.w5 {\n width: 5%;\n}\n\n.w1000p {\n width: 1000px;\n}\n\n.minw1000p {\n min-width: 1000px;\n}\n\n.maxw1000p {\n max-width: 1000px;\n}\n\n.w1000p input {\n width: 1000px;\n}\n\n.w950p {\n width: 950px;\n}\n\n.minw950p {\n min-width: 950px;\n}\n\n.maxw950p {\n max-width: 950px;\n}\n\n.w950p input {\n width: 950px;\n}\n\n.w900p {\n width: 900px;\n}\n\n.minw900p {\n min-width: 900px;\n}\n\n.maxw900p {\n max-width: 900px;\n}\n\n.w900p input {\n width: 900px;\n}\n\n.w850p {\n width: 850px;\n}\n\n.minw850p {\n min-width: 850px;\n}\n\n.maxw850p {\n max-width: 850px;\n}\n\n.w850p input {\n width: 850px;\n}\n\n.w800p {\n width: 800px;\n}\n\n.minw800p {\n min-width: 800px;\n}\n\n.maxw800p {\n max-width: 800px;\n}\n\n.w800p input {\n width: 800px;\n}\n\n.w750p {\n width: 750px;\n}\n\n.minw750p {\n min-width: 750px;\n}\n\n.maxw750p {\n max-width: 750px;\n}\n\n.w750p input {\n width: 750px;\n}\n\n.w700p {\n width: 700px;\n}\n\n.minw700p {\n min-width: 700px;\n}\n\n.maxw700p {\n max-width: 700px;\n}\n\n.w700p input {\n width: 700px;\n}\n\n.w650p {\n width: 650px;\n}\n\n.minw650p {\n min-width: 650px;\n}\n\n.maxw650p {\n max-width: 650px;\n}\n\n.w650p input {\n width: 650px;\n}\n\n.w600p {\n width: 600px;\n}\n\n.minw600p {\n min-width: 600px;\n}\n\n.maxw600p {\n max-width: 600px;\n}\n\n.w600p input {\n width: 600px;\n}\n\n.w550p {\n width: 550px;\n}\n\n.minw550p {\n min-width: 550px;\n}\n\n.maxw550p {\n max-width: 550px;\n}\n\n.w550p input {\n width: 550px;\n}\n\n.w500p {\n width: 500px;\n}\n\n.minw500p {\n min-width: 500px;\n}\n\n.maxw500p {\n max-width: 500px;\n}\n\n.w500p input {\n width: 500px;\n}\n\n.w450p {\n width: 450px;\n}\n\n.minw450p {\n min-width: 450px;\n}\n\n.maxw450p {\n max-width: 450px;\n}\n\n.w450p input {\n width: 450px;\n}\n\n.w400p {\n width: 400px;\n}\n\n.minw400p {\n min-width: 400px;\n}\n\n.maxw400p {\n max-width: 400px;\n}\n\n.w400p input {\n width: 400px;\n}\n\n.w350p {\n width: 350px;\n}\n\n.minw350p {\n min-width: 350px;\n}\n\n.maxw350p {\n max-width: 350px;\n}\n\n.w350p input {\n width: 350px;\n}\n\n.w300p {\n width: 300px;\n}\n\n.minw300p {\n min-width: 300px;\n}\n\n.maxw300p {\n max-width: 300px;\n}\n\n.w300p input {\n width: 300px;\n}\n\n.w250p {\n width: 250px;\n}\n\n.minw250p {\n min-width: 250px;\n}\n\n.maxw250p {\n max-width: 250px;\n}\n\n.w250p input {\n width: 250px;\n}\n\n.w200p {\n width: 200px;\n}\n\n.minw200p {\n min-width: 200px;\n}\n\n.maxw200p {\n max-width: 200px;\n}\n\n.w200p input {\n width: 200px;\n}\n\n.w190p {\n width: 190px;\n}\n\n.minw190p {\n min-width: 190px;\n}\n\n.maxw190p {\n max-width: 190px;\n}\n\n.w190p input {\n width: 190px;\n}\n\n.w180p {\n width: 180px;\n}\n\n.minw180p {\n min-width: 180px;\n}\n\n.maxw180p {\n max-width: 180px;\n}\n\n.w180p input {\n width: 180px;\n}\n\n.w170p {\n width: 170px;\n}\n\n.minw170p {\n min-width: 170px;\n}\n\n.maxw170p {\n max-width: 170px;\n}\n\n.w170p input {\n width: 170px;\n}\n\n.w160p {\n width: 160px;\n}\n\n.minw160p {\n min-width: 160px;\n}\n\n.maxw160p {\n max-width: 160px;\n}\n\n.w160p input {\n width: 160px;\n}\n\n.w150p {\n width: 150px;\n}\n\n.minw150p {\n min-width: 150px;\n}\n\n.maxw150p {\n max-width: 150px;\n}\n\n.w150p input {\n width: 150px;\n}\n\n.w140p {\n width: 140px;\n}\n\n.minw140p {\n min-width: 140px;\n}\n\n.maxw140p {\n max-width: 140px;\n}\n\n.w140p input {\n width: 140px;\n}\n\n.w130p {\n width: 130px;\n}\n\n.minw130p {\n min-width: 130px;\n}\n\n.maxw130p {\n max-width: 130px;\n}\n\n.w130p input {\n width: 130px;\n}\n\n.w120p {\n width: 120px;\n}\n\n.minw120p {\n min-width: 120px;\n}\n\n.maxw120p {\n max-width: 120px;\n}\n\n.w120p input {\n width: 120px;\n}\n\n.w110p {\n width: 110px;\n}\n\n.minw110p {\n min-width: 110px;\n}\n\n.maxw110p {\n max-width: 110px;\n}\n\n.w110p input {\n width: 110px;\n}\n\n.w100p {\n width: 100px;\n}\n\n.minw100p {\n min-width: 100px;\n}\n\n.maxw100p {\n max-width: 100px;\n}\n\n.w100p input {\n width: 100px;\n}\n\n.w90p {\n width: 90px;\n}\n\n.minw90p {\n min-width: 90px;\n}\n\n.maxw90p {\n max-width: 90px;\n}\n\n.w90p input {\n width: 90px;\n}\n\n.w80p {\n width: 80px;\n}\n\n.minw80p {\n min-width: 80px;\n}\n\n.maxw80p {\n max-width: 80px;\n}\n\n.w80p input {\n width: 80px;\n}\n\n.w70p {\n width: 70px;\n}\n\n.minw70p {\n min-width: 70px;\n}\n\n.maxw70p {\n max-width: 70px;\n}\n\n.w70p input {\n width: 70px;\n}\n\n.w60p {\n width: 60px;\n}\n\n.minw60p {\n min-width: 60px;\n}\n\n.maxw60p {\n max-width: 60px;\n}\n\n.w60p input {\n width: 60px;\n}\n\n.w50p {\n width: 50px;\n}\n\n.minw50p {\n min-width: 50px;\n}\n\n.maxw50p {\n max-width: 50px;\n}\n\n.w50p input {\n width: 50px;\n}\n\n.w40p {\n width: 40px;\n}\n\n.minw40p {\n min-width: 40px;\n}\n\n.maxw40p {\n max-width: 40px;\n}\n\n.w40p input {\n width: 40px;\n}\n\n.w30p {\n width: 30px;\n}\n\n.minw30p {\n min-width: 30px;\n}\n\n.maxw30p {\n max-width: 30px;\n}\n\n.w30p input {\n width: 30px;\n}\n\n.w20p {\n width: 20px;\n}\n\n.minw20p {\n min-width: 20px;\n}\n\n.maxw20p {\n max-width: 20px;\n}\n\n.w20p input {\n width: 20px;\n}\n\n.w10p {\n width: 10px;\n}\n\n.minw10p {\n min-width: 10px;\n}\n\n.maxw10p {\n max-width: 10px;\n}\n\n.w10p input {\n width: 10px;\n}\n\n.w66 {\n width: 66.6666666667%;\n}\n\n.w33 {\n width: 33.3333333333%;\n}\n\n.wauto {\n width: auto;\n}\n\n.w960p {\n width: 960px;\n}\n\n.minw960p {\n min-width: 960px;\n}\n\n.maxw960p {\n max-width: 960px;\n}\n\n.w1140p {\n width: 1140px;\n}\n\n.minw1140p {\n min-width: 1140px;\n}\n\n.maxw1140p {\n max-width: 1140px;\n}"]} \ No newline at end of file diff --git a/css/gamutable.scss b/css/gamutable.scss deleted file mode 100644 index df6c76b..0000000 --- a/css/gamutable.scss +++ /dev/null @@ -1,236 +0,0 @@ -// ---------------------------- -// Surcharge de vue-next-select -// ---------------------------- -.gamutable__input--rechercher { - padding: 0.25rem 1rem; -} -.vue-tags .vue-tag.selected { - font-size: 1.2rem; -} -div.vue-input > input { - font-size: 1.2rem; -} -.tag--ub { - display: inline-block; -} -.gamutable__input--filtrer { - font-size: 1.2rem; - //box-shadow: 0 0 0 1px rgb(153, 153, 153) inset; - padding: 5px 5px !important; - &:valid { - font-size: 1.2rem; - background-color: rgb(153, 153, 153); - color: #000; - } -} -.gamutable__input--filtrer:placeholder-shown { - background-color: transparent; - color: inherit; -} -th .vue-select { - width: 100%; -} -// ---------------------------- -// Fin de la surcharge de vue-next-select -// ---------------------------- -.gamutable--surTable { - select, - input { - margin-bottom: 0; - } - .gamutable-nbrMax { - margin-left: 2rem; - } - .includespip { - margin-left: 2rem; - } -} -.gamutable--sousTable { - display: flex; - justify-content: space-between; -} -.gamutable--pagination { - display: flex; - .page-item { - display: flex; - } - .page-link { - margin: 0 0.2rem; - background-color: #eee; - cursor: pointer; - } -} - -.h2-like.titregamutable, -.h2-like.titregamutable_deux { - font-weight: bold; -} -.gamutable table { - // patch provisoire - // .vue-dropdown-item > span { - // display: inline-block; - // min-height: 1rem; - // } - - font-size: 1rem; - table-layout: auto; - thead { - border: 1px solid rgb(119, 119, 119); - } - .gt_labels { - display: flex; - justify-content: space-between; - align-items: center; - } - th > div { - display: flex; - } - .label_tete_colonne { - flex-grow: 1; - } - .iconeTri { - float: right; - width: calc(1rem + 4px); - //position: relative; - .fa { - padding: 2px 5px; - cursor: pointer; - } - } - .tri_col { - cursor: pointer; - fill: #cecece; - } - .iconeTri > .active { - fill: rgb(220, 53, 69); - color: rgb(220, 53, 69); - } - tbody tr:hover { - background-color: rgba(179, 209, 67, 0.27); - } -} -#app .select { - background-color: rgba(179, 209, 67, 0.47); -} - -td.id { - cursor: pointer; -} - -th.icone { - width: 30px; - text-align: center; -} - -tr.filtreColonne th { - padding: 0; - select { - margin: 0; - } -} - -td.icone > * { - width: 100%; - display: block; - padding: 0.5rem; - text-align: center; -} -.gamutable .url_action { - padding: 0.2rem; - display: inline-flex; - background-color: #f5f5f5; - border: 1px solid #cecece; - border-radius: 5px; - &:hover { - background-color: #cecece; - } -} - -td.icone i { - font-size: 1.8rem; -} - -.vueBlocs { - display: flex; - flex-wrap: wrap; -} -.vueBlocs-unbloc { - width: 23%; - border: 1px solid #cecece; - margin-bottom: 1rem; - margin-right: 1rem; -} - -.viderInputSearch { - color: #ff0000; -} - -/* blocks widths (percentage and pixels) */ -$i: 100; -@while $i > 0 { - .w#{$i} { - width: $i * 1%; - } - $i: $i - 5; -} - -$i: 1000; -@while $i > 200 { - .w#{$i}p { - width: $i * 1px; - } - .minw#{$i}p { - min-width: $i * 1px; - } - .maxw#{$i}p { - max-width: $i * 1px; - } - .w#{$i}p input { - width: $i * 1px; - } - $i: $i - 50; -} -$i: 200; -@while $i > 0 { - .w#{$i}p { - width: $i * 1px; - } - .minw#{$i}p { - min-width: $i * 1px; - } - .maxw#{$i}p { - max-width: $i * 1px; - } - .w#{$i}p input { - width: $i * 1px; - } - $i: $i - 10; -} - -.w66 { - width: calc(100% / 3 * 2); -} -.w33 { - width: calc(100% / 3); -} -.wauto { - width: auto; -} -.w960p { - width: 960px; -} -.minw960p { - min-width: 960px; -} -.maxw960p { - max-width: 960px; -} -.w1140p { - width: 1140px; -} -.minw1140p { - min-width: 1140px; -} -.maxw1140p { - max-width: 1140px; -} diff --git a/css/table_knacss.css b/css/table_knacss.css deleted file mode 100644 index 7ae58a6..0000000 --- a/css/table_knacss.css +++ /dev/null @@ -1,49 +0,0 @@ -/* ----------------------------- */ -/* ==Tables */ -/* ----------------------------- */ -table, -.table { - width: 100%; - max-width: 100%; - table-layout: fixed; - border-collapse: collapse; - vertical-align: top; - margin-bottom: 2rem; -} - -.table { - display: table; - border: 1px solid #acb3c2; - background: transparent; -} - -.table--zebra tbody tr:nth-child(odd) { - background: #e7e9ed; -} - -.table caption { - caption-side: bottom; - padding: 1rem; - color: #333; - font-style: italic; - text-align: right; -} - -.table td, -.table th { - padding: 0.3rem 0.6rem; - min-width: 2rem; - vertical-align: top; - border: 1px #acb3c2 dotted; - text-align: left; - cursor: default; -} - -.table thead { - color: #212529; - background: transparent; -} - -.table--auto { - table-layout: auto; -} diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 69062f3..0000000 --- a/gulpfile.js +++ /dev/null @@ -1,142 +0,0 @@ -const { src, dest, series, parallel, watch } = require('gulp'); -const gulpSass = require('gulp-sass')(require('sass')); -const sourcemaps = require('gulp-sourcemaps'); -const postcss = require('gulp-postcss'); -const autoprefixer = require('autoprefixer'); -const CombineMQ = require('postcss-combine-media-query'); -const notify = require('gulp-notify'); -const concat = require('gulp-concat'); -const uglify = require('gulp-uglify'); -const babel = require('gulp-babel'); -const rename = require('gulp-regex-rename'); - -const CSSnano = require('cssnano'); - -// const unuse = require('postcss-uncss'); //https://github.com/uncss/postcss-uncss - -/* - * SASS$ - */ -function sass() { - return src(['css/**/*.scss']) - .pipe(sourcemaps.init()) - .pipe( - gulpSass({ - outputStyle: 'expanded', - }) - ) - .on('error', (err) => notify().write(err)) - .pipe( - postcss([ - CombineMQ, // rassemble les Media Queries (parfait pour les classes utilitaires) - autoprefixer, // ajoute les préfixes vendeurs - // CSSnano, // minification - ]) - ) - .pipe(sourcemaps.write('.')) // initialize sourcemaps first - .pipe(dest('css')); -} - -/* - * JS -> concat + babel - */ -function jsConcatMinif() { - console.log('ok'); - return ( - src(['./js/a_compresser/*.js']) - .pipe(sourcemaps.init()) - .pipe( - babel({ - presets: ['@babel/preset-env'], - }) - ) - .pipe(concat('mon_site.min.js', { newLine: ';' })) - // SPECIFIQUE DEV: ne pas compacter le JS - // .pipe(uglify()) - .pipe(sourcemaps.write('.')) - .pipe(dest('./js')) - ); -} - -/* - * JS -> babel - */ -function jsBabel() { - return src(['js/**/*.es6.js']) - .pipe( - babel({ - presets: ['@babel/preset-env'], - }) - ) - .pipe(rename(/\.es6/, '')) - .pipe(dest('./js')); -} - -/* - * Les Watchers - */ -function watcherSass() { - watch('css/**/*.scss', { ignoreInitial: false }, sass).on('change', function () { - notify('CSS -> SCSS ==> OK').write(''); - }); -} - -function watcherJsConcatMinif() { - watch('./js/a_compresser/*.js', { ignoreInitial: false }, jsConcatMinif).on('change', function () { - notify('JS (concat) ==> OK').write(''); - }); -} - -function watcherJsBabel() { - watch('./js/**/*.es6.js', { ignoreInitial: false }, jsBabel).on('change', function () { - notify('JS (babel) ==> OK').write(''); - }); -} - -/* - * SVG sprite - */ -// const gulpSvgSprite = require('gulp-svg-sprite'); -// const config = { -// shape: { -// spacing: { -// box: 'icon', -// }, -// }, -// mode: { -// symbol: { -// dest: '.', -// sprite: 'sprite_symbol_picto.svg', -// }, -// }, -// }; -// -// function svgSprite() { -// return ( -// src('svg/**/*.svg') -// .pipe(gulpSvgSprite(config)) -// .on('error', function (error) { -// console.log(error); -// }) -// .pipe(dest('img')) -// ); -// } - -/* - * SVG minifier - */ -// var svgmin = require('gulp-svgmin'); -// function svgMin() { -// return src('svg/*.svg').pipe(svgmin()).pipe(dest('./svgmin')); -// } - -/* - * Exports des fonctions - */ -module.exports = { - default: parallel(sass, jsConcatMinif, jsBabel), - sass: sass, - watch: parallel(watcherSass, watcherJsConcatMinif, watcherJsBabel), - // sprite: svgSprite, - // svgmin: svgMin, -}; diff --git a/inclure/gamutable.html b/inclure/gamutable.html index ac3a178..3663bda 100644 --- a/inclure/gamutable.html +++ b/inclure/gamutable.html @@ -1,4 +1,5 @@ -[(#REM) chargement de vue ] [(#VAL{gamutable.js}|vite)] [(#REM) ] +[(#VAL{gamutable.js}|vite)] + -[(#REM) si dans l'env il y a un parametre _id=xxx, il sera récupéré pour -selectionner cette ligne dans le gamutable ajout de la classe: select sur le tr -] - + diff --git a/js/gamutable.js b/js/gamutable.js deleted file mode 100644 index 8b81452..0000000 --- a/js/gamutable.js +++ /dev/null @@ -1,996 +0,0 @@ -"use strict"; - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - -jQuery(function () { - $('#app').on('click', '.url_action', function (e) { - e.preventDefault(); - e.stopPropagation(); - var confirmation = $(this).data('confirm'); - - if (confirmation !== undefined) { - if (!confirm(confirmation)) { - return; - } - } - - var url = $(this).attr('href'); - var id = $(this).data('id'); // passer en refresh animé une éventuelle icone - - if ($(this).has('i.icon, i.fa')) { - $(this).find('i.icon, i.fa').eq(0).replaceWith(''); - } - - var nomBlocAjaxReload = $(this).data('ajaxreload'); - console.time('Chargement de VueJs APRES Ajax'); - $.ajax({ - url: url, - dataType: 'json', - async: true - }).done(function (retour) { - if (!$.isEmptyObject(retour) && !$.isEmptyObject(retour.message_erreur)) { - alert(retour.message_erreur); - } else { - if (parseInt(id) > 0) { - app.rechargerJson(id); - app.rechargerJson_deux(id); - } else { - app.rechargerJson(); - app.rechargerJson_deux(); - } - - if (nomBlocAjaxReload !== undefined) { - console.log('depart reload: ' + nomBlocAjaxReload); - ajaxReload(nomBlocAjaxReload, { - args: { - id: id - }, - callback: function callback() {} - }); - } - } - }); - }); // lancement d'une modalbox - - $('#app').on('click', '.modalbox', function (e) { - e.stopPropagation(); - e.preventDefault(); - var confirmation = $(this).data('confirm'); - - if (confirmation !== undefined) { - if (!confirm(confirmation)) { - return; - } - } - - var url = $(this).attr('href'); - url += '&var_zajax=content'; - var data = {}; - var minHeight = $(this).data('minheight'); - - if (minHeight !== undefined) { - data.minHeight = minHeight; - } - - var minWidth = $(this).data('minwidth'); - - if (minWidth !== undefined) { - data.minWidth = minWidth; - } - - var width = $(this).data('width'); - - if (width !== undefined) { - data.width = width; - var valeur_reduite = $(window).width() * width / 100; - url += '&largeur=' + valeur_reduite + 'px'; - } - - data.onShow = function () { - if ((typeof charger_require === "undefined" ? "undefined" : _typeof(charger_require)) !== undefined) { - charger_require(); - } - }; - - $.modalbox(url, data); - }); // lancement d'une médiabox - - $('#app').on('click', '.mediabox', function (e) { - e.preventDefault(); - var confirmation = $(this).data('confirm'); - - if (confirmation !== undefined) { - if (!confirm(confirmation)) { - return; - } - } - - var href = $(this).attr('href'); - $.fn.mediabox({ - href: href - }); - }); -}); - -function recupJson(d) { - try { - return JSON.parse(d); - } catch (e) { - console.log('erreur recupJson ', e); - return false; - } -} - -var orderBy = function orderBy(arr, props, orders, champ) { - return arr.sort(function (a, b) { - return props.reduce(function (acc, prop, i) { - if (acc === 0) { - var _ref = orders && orders[i] === 'desc' ? [b[champ][prop], a[champ][prop]] : [a[champ][prop], b[champ][prop]], - _ref2 = _slicedToArray(_ref, 2), - p1 = _ref2[0], - p2 = _ref2[1]; // passe en lowercase les String - - - p1 = typeof p1 === 'string' ? p1.toLowerCase() : p1; - p2 = typeof p2 === 'string' ? p2.toLowerCase() : p2; // Gestion du format de date - // transforme 03/11/2000 en 20001103 - - var re = /^(\d{2})\/(\d{2})\/(\d{2,4})$/; - - if (typeof p1 !== 'number') { - var r1 = p1.match(re); - - if (Array.isArray(r1)) { - p1 = r1[3] + r1[2] + r1[1]; - } - - var r2 = p2.match(re); - - if (Array.isArray(r2)) { - p2 = r2[3] + r2[2] + r2[1]; - } - } - - acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0; - } - - return acc; - }, 0); - }); -}; - -console.time('Chargement de VueJS AVANT Ajax'); -console.time('Chargement de VueJs APRES Ajax'); -Vue.nextTick(function () { - console.timeEnd('Chargement de VueJS AVANT Ajax'); -}); - -function exporterCSV(json, delimitercsv, name) { - var csv = ''; - - if (delimitercsv) { - csv = Papa.unparse(json, { - delimiter: delimitercsv - }); - } else { - csv = Papa.unparse(json); - } //Download the file as CSV - - - var link = document.createElement('a'); - link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURIComponent(csv)); - link.setAttribute('download', name); - link.style.visibility = 'hidden'; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -} - -function trouver_index(table, id) { - var i = -1; - table.forEach(function (ligne, index) { - if (ligne.html.id === parseInt(id)) { - i = index; - } - }); - return i; -} - -var monTableau = { - props: { - tparpage: { - type: Array, - default: function _default() { - return [10, 20, 50, 'Tous']; - } - }, - apiuri: { - type: String, - required: true - }, - pdfuri: { - type: String - }, - namepdf: { - type: String - }, - fichierpdf: { - type: String - }, - argpdf: { - type: String - }, - champcsv: { - type: String - }, - delimitercsv: { - type: String - }, - namecsv: { - type: String - }, - url_sort_asc: { - type: String - }, - url_sort_desc: { - type: String - }, - urlvuebloc: { - type: String - }, - vueblocdefaut: { - type: String, - default: 'tableau' - }, - filtrecolmulti: { - type: String - }, - nomblocajaxreload: { - type: String - }, - stockage: { - type: String - }, - includespip: { - type: String - }, - filtrer: { - type: String - }, - _id: { - type: String - }, - filtreselect: { - type: String - } - }, - data: function data() { - return { - table: [], - header: [], - crayons: [], - classes: [], - checkbox: [], - Tcheckbox: [], - ordreCol: [], - filtreCol: [], - filtreColExist: false, - filtreColType: [], - filtreColSelected: {}, - filtreColModif: 0, - filtreColVal: {}, - search: this.filtrer, - page: 1, - parPage: sessionStorage.getItem('nbItems') ? sessionStorage.getItem('nbItems') : this.tparpage[0], - parPageSelect: sessionStorage.getItem('nbItemsChaine') ? sessionStorage.getItem('nbItemsChaine') : this.tparpage[0], - pages: [], - triOrders: [], - triProps: [], - selectTr: [], - champ_search: 'html', - chargement: true, - nameLocalStorage: this.calculer_nameLocalStorage(), - quelleVue: this.vueblocdefaut, - vuebloc: '', - model: [], - options: [], - searchInputHead: '', - searchInputVal: '', - loadingVueSelect: true, - ajaxCrayons: false - }; - }, - mounted: function mounted() { - var _this = this; - - localforage.setDriver(localforage[this.stockage.toUpperCase()]); - this.chargerJson(); - - if (this.urlvuebloc) { - fetch(this.urlvuebloc).then(function (response) { - return response.text(); - }).then(function (data) { - _this.vuebloc = data; - }); - } - }, - computed: { - // - // -------------------- - // ce filtre etait utilisé pour :visible-options de vue-next-select - // A quoi sert il ? - // il empeche la recherche dans le select - // -------------------- - // - // filtreColVal_visible: function () { - // let head = this.searchInputHead; - // let val = this.searchInputVal; - // console.log('head = ', head); - // console.log('val = ', val); - // if (!head) { - // return this.filtreColVal; - // } else { - // let filtreColVal_visible = {}; - // filtreColVal_visible[head] = this.filtreColVal[head].filter((v) => { - // return v.toString().toLowerCase().indexOf(val.toLowerCase()) !== -1; - // }); - // return filtreColVal_visible; - // } - // }, - tableau: function tableau() { - var _this2 = this; - - this.setPages(); - - if (!this.search && !this.filtreColModif) { - return this.pagination(this.table); - } - - return this.pagination(this.table.filter(function (ligne) { - var rsearch = Object.values(ligne[_this2.champ_search]).toString().toLowerCase().indexOf(_this2.search.toLowerCase()) < 0 ? false : true; - - if (!rsearch) { - return false; - } - - Object.keys(_this2.filtreColSelected).forEach(function (colName) { - if (rsearch) { - var colValue = _this2.filtreColSelected[colName]; - - if (colValue !== null) { - if (!Array.isArray(colValue)) { - colValue = [colValue]; - } - - var TcolValue = []; - colValue.forEach(function (s) { - if (Number.isInteger(s)) { - TcolValue.push(s); - } - - if (s.length > 0) { - TcolValue.push(s.toLowerCase()); - } - }); - - if (TcolValue.length) { - if (_this2.filtreColType[colName] === 'select') { - var Trsearch = TcolValue.some(function (uneValeur) { - if (Number.isInteger(uneValeur)) { - if (parseInt(ligne[_this2.champ_search][colName]) === uneValeur) { - return true; - } - } else { - if (ligne[_this2.champ_search][colName] !== undefined && !(uneValeur.indexOf(ligne[_this2.champ_search][colName].toString().toLowerCase().toString()) === -1 || !ligne[_this2.champ_search][colName].toString().toLowerCase())) { - return true; - } - } - }); - - if (!Trsearch) { - rsearch = false; - } - } else { - if (ligne[_this2.champ_search][colName].toString().toLowerCase().indexOf(TcolValue.toString()) === -1) { - rsearch = false; - } - } - } - } - } - }); - return rsearch; - })); - } - }, - watch: { - parPageSelect: function parPageSelect(e) { - if (!parseInt(e)) { - this.parPage = this.table.length; - } else { - this.parPage = e; - } - - console.log(this.parPage); - sessionStorage.setItem('nbItems', this.parPage); - sessionStorage.setItem('nbItemsChaine', this.parPageSelect); - }, - table: function table() { - this.saveHeader(); - var $table = []; - $table = this.table; - localforage.setItem(this.nameLocalStorage, JSON.stringify($table)); - }, - tableau: function tableau() { - var _this3 = this; - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Si on veut filtrer la liste des options dynamique en fonction - // du tri du tableau - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - if (this.filtrecolmulti === 'non') { - this.filtreCol.forEach(function (col) { - // let Tval = ['']; - var Tval = []; - - _this3.tableau.forEach(function (t) { - var valCol = t[_this3.champ_search][col]; - - if (Tval.indexOf(valCol) === -1) { - Tval.push(valCol); - _this3.filtreColValOk = true; - } - }); - - _this3.filtreColVal[col] = Tval; - }); - } - }, - filtreColSelected: { - handler: function handler() { - if (!this.loadingVueSelect) { - var ObfiltreSelect = []; - - if (this.filtreColSelected) { - Object.entries(this.filtreColSelected).forEach(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 2), - champ = _ref4[0], - valeurs = _ref4[1]; - - if (!Array.isArray(valeurs)) { - valeurs = [valeurs]; - } - - ObfiltreSelect.push({ - champ: champ, - valeurs: valeurs - }); - }); - } - - if (!this.ajaxCrayons) { - localStorage.setItem('filtreselect_' + this.nameLocalStorage, JSON.stringify(ObfiltreSelect)); - } - } - }, - deep: true - } - }, - methods: { - saveHeader: function saveHeader() { - var $header = { - header: this.header, - crayons: this.crayons, - classes: this.classes, - filtreCol: this.filtreColType, - ordreCol: this.ordreCol - }; // if (!localStorage.getItem('header_' + this.nameLocalStorage)) { - // localStorage.setItem('headerJson_' + this.nameLocalStorage, JSON.stringify($header)); - // } - - localStorage.setItem('header_' + this.nameLocalStorage, JSON.stringify($header)); - }, - deleteInputSearch: function deleteInputSearch(head) { - this.loadingVueSelect = false; - this.filtreColSelected[head] = []; - }, - hanldeSearchInput: function hanldeSearchInput(event, head) { - this.searchInputHead = head; - this.searchInputVal = event.target.value; - }, - selectValCol: function selectValCol() { - this.filtreColModif++; - this.searchInputVal = ''; - this.searchInputHead = ''; - }, - endLoadingVueSelect: function endLoadingVueSelect() { - this.loadingVueSelect = false; - }, - calculer_nameLocalStorage: function calculer_nameLocalStorage() { - if (this.apiuri) { - return this.apiuri.match(/.*page=(.*)/)[1]; - } - - return ''; - }, - chargerJson: function chargerJson(id) { - var _this4 = this; - - this.chargement = true; - var url = this.apiuri; - - if (parseInt(id) > 0) { - url += '&id=' + id; - } else { - var config = localStorage.getItem('header_' + this.nameLocalStorage); - config = recupJson(config); - - if (config && config.header !== undefined) { - this.header = config.header; - - if (config.crayons !== undefined) { - this.crayons = config.crayons; - } - - if (config.classes !== undefined) { - this.classes = config.classes; - } - - if (config.checkbox !== undefined) { - this.checkbox = config.checkbox; - Object.keys(this.checkbox).forEach(function (head) { - _this4.Tcheckbox[head] = []; - }); - } - - if (config.ordreCol !== undefined) { - this.ordreCol = config.ordreCol; - } - - var filtreCol = []; - - if (config.filtreCol !== undefined) { - filtreCol = config.filtreCol; - } - - var that = this; - localforage.getItem(that.nameLocalStorage).then(function (data) { - data = recupJson(data); - - if (data && data.length) { - that.table = data; - - if (data[0].search) { - that.champ_search = 'search'; - } - - if (filtreCol !== undefined) { - that.filtreColType = filtreCol; - Object.keys(that.filtreColType).forEach(function (col) { - var Tval = []; // let Tval = ['']; - - that.table.forEach(function (t) { - var valCol = t[that.champ_search][col]; - - if (Tval.indexOf(valCol) === -1) { - Tval.push(valCol); - } - }); // that.filtreCol.push(col); - - that.filtreColVal[col] = Tval.sort(); - that.filtreColSelected[col] = []; - }); - } - - console.log('fin chargement local forage '); - } - - if (that.nomblocajaxreload) { - ajaxReload(that.nomblocajaxreload); - } - }).catch(function (err) { - console.log(err); - }); - } - } - - fetch(url).then(function (response) { - return response.json(); - }).then(function (data) { - var config = data.shift(); - _this4.header = config.header; - - if (config.crayons !== undefined) { - _this4.crayons = config.crayons; - } else { - _this4.crayons = []; - } - - if (config.classes !== undefined) { - _this4.classes = config.classes; - } else { - _this4.classes = []; - } - - if (config.checkbox !== undefined) { - _this4.checkbox = config.checkbox; - Object.keys(_this4.checkbox).forEach(function (head) { - _this4.Tcheckbox[head] = []; - }); - } - - if (config.ordreCol !== undefined) { - _this4.ordreCol = config.ordreCol; - } else { - _this4.ordreCol = []; - } - - if (parseInt(id) > 0) { - if (data.length > 0) { - var i = trouver_index(_this4.table, id); - _this4.table[i] = data[0]; - } else { - var _i2 = trouver_index(_this4.table, id); - - _this4.table.splice(_i2, 1); - } - - localforage.setItem(_this4.nameLocalStorage, JSON.stringify(_this4.table)); - } else { - _this4.table = data; - - if (data[0] && data[0].search) { - _this4.champ_search = 'search'; - } - } - - if (config.filtreCol !== undefined) { - _this4.filtreColType = config.filtreCol; - _this4.filtreCol = []; - Object.keys(_this4.filtreColType).forEach(function (col) { - var Tval = []; - - _this4.table.forEach(function (t) { - var valCol = t[_this4.champ_search][col]; - - if (valCol) { - if (Tval.indexOf(valCol) === -1) { - Tval.push(valCol); - } - } - }); - - _this4.filtreCol.push(col); - - _this4.filtreColVal[col] = Tval.sort(); - _this4.filtreColSelected[col] = []; - }); - } - - Vue.nextTick(function () { - _this4.chargement = false; - var filtreselect = localStorage.getItem('filtreselect_' + _this4.nameLocalStorage); - var Tfiltres = []; // if (filtreselect) { - // Tfiltres = JSON.parse(filtreselect); - // } else if (this.filtreselect) { - // Tfiltres = recupJson(decodeURIComponent(this.filtreselect)); - // localStorage.setItem('filtreselect_' + this.nameLocalStorage, JSON.stringify(Tfiltres)); - // } - - if (_this4.filtreselect) { - Tfiltres = recupJson(decodeURIComponent(_this4.filtreselect)); - localStorage.setItem('filtreselect_' + _this4.nameLocalStorage, JSON.stringify(Tfiltres)); - } else if (filtreselect) { - Tfiltres = JSON.parse(filtreselect); - } - - Tfiltres.forEach(function (col) { - _this4.filtreColSelected[col.champ] = [].concat(_toConsumableArray(_this4.filtreColSelected[col.champ]), _toConsumableArray(col.valeurs)); - }); - _this4.filtreColModif++; - _this4.ajaxCrayons = false; - - if (parseInt(_this4._id) > 0) { - var _id = parseInt(_this4._id); - - var parPage = parseInt(_this4.parPage); - - if (parseInt(parPage)) { - var ordre = 0; - Object.values(_this4.table).forEach(function (d, i) { - if (_id === d.html.id) { - ordre = i + 1; - } - }); - - if (ordre > parPage) { - var numPage = parseInt(ordre / parPage) + 1; - _this4.page = numPage; - } - } - - _this4.selectLigne(_id, 'id'); // let url = new URL(window.location); - // url = url.href.replace('&_id=' + _id, ''); - // history.pushState({}, null, url); - - } - - if (_this4.nomblocajaxreload) { - ajaxReload(_this4.nomblocajaxreload); - } - - if (_this4.ordreCol) { - Object.entries(_this4.ordreCol).forEach(function (_ref5) { - var _ref6 = _slicedToArray(_ref5, 2), - col = _ref6[0], - sens = _ref6[1]; - - _this4.tri(col, sens); - }); - } - - $('td.crayon-init').removeClass('crayon-init'); - console.timeEnd('Chargement de VueJs APRES Ajax'); - }); - }).catch(function (error) { - return console.log(error); - }); - }, - setPages: function setPages() { - var nombreDePages = Math.ceil(this.table.length / this.parPage); - this.pages = []; - - for (var index = 1; index <= nombreDePages; index++) { - this.pages.push(index); - } - }, - pagination: function pagination(tableau) { - var page = this.page; - var parPage = this.parPage; - var from = page * parPage - parPage; - var to = page * parPage; - return tableau.slice(from, to); - }, - afficher_crayons: function afficher_crayons(name, l) { - var id = l.crayons !== undefined && l.crayons[name] !== undefined ? l.crayons[name] : l.html.id; - - if (Object.keys(this.crayons).indexOf(name) !== -1) { - return "crayon ".concat(this.crayons[name], "-").concat(name, "-").concat(id); - } - }, - tri: function tri(col) { - var sens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var i = this.triProps.indexOf(col); - - if (i !== -1) { - if (!sens) { - sens = 'asc'; - - if (this.triOrders[i] === 'asc') { - sens = 'desc'; - } - } - - this.triOrders[i] = sens; - } else { - if (!sens) { - sens = 'asc'; - } - - this.triProps.push(col); - this.triOrders.push(sens); - } - - this.table = orderBy(this.table, this.triProps, this.triOrders, this.champ_search); - this.ordreCol[col] = sens; - this.saveHeader(); - }, - ordreActif: function ordreActif(col, sens) { - var i = this.triProps.indexOf(col); - - if (i !== -1) { - if (this.triOrders[i] === sens) { - return 'active'; - } - } - }, - resetTri: function resetTri() { - var _this5 = this; - - this.loadingVueSelect = false; - this.table = orderBy(this.table, ['id'], '', this.champ_search); - this.triOrders = []; - this.triProps = []; - this.ordreCol = []; - Object.keys(this.filtreColType).forEach(function (col) { - _this5.filtreColSelected[col] = []; - }); - }, - selectLigne: function selectLigne(id, col) { - if (col === 'id' && parseInt(id)) { - var i = this.selectTr.indexOf(id); - - if (i !== -1) { - this.selectTr.splice(i, 1); - } else { - this.selectTr.push(id); - } - } - }, - genererPDF: function genererPDF() { - var quoi = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'tableau'; - var $tableau = []; - Object.values(this[quoi]).forEach(function (d) { - $tableau.push(d.html); - }); - var data = { - fichierpdf: this.fichierpdf, - namepdf: this.namepdf, - header: this.header, - arg: this.argpdf, - Tdata: $tableau - }; - var req = $.ajax({ - url: this.pdfuri, - type: 'POST', - dataType: 'text', - data: data - }); - var that = this; - req.done(function (urlpdf) { - if (urlpdf) { - that.navigate(urlpdf, true); - } - }); - }, - navigate: function navigate(href, newTab) { - var a = document.createElement('a'); - a.href = href; - - if (newTab) { - a.setAttribute('target', '_blank'); - } - - a.click(); - }, - exportCSV: function exportCSV() { - var _this6 = this; - - var quoi = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'tableau'; - var $csv = []; - var $header = []; - var $tableau = []; - Object.keys(this.header).forEach(function (k) { - return $header.push(k); - }); - $tableau = this[quoi].reduce(function (acc, ligne) { - var $uneLigne = []; - Object.values(ligne[_this6.champcsv]).forEach(function (l) { - return $uneLigne.push(l); - }); - return [].concat(_toConsumableArray(acc), [[].concat($uneLigne)]); - }, []); - $csv = [[].concat($header)].concat(_toConsumableArray($tableau)); - exporterCSV($csv, this.delimitercsv, this.namecsv); - }, - replaceBloc: function replaceBloc(ligne) { - var html = this.vuebloc; - Object.keys(ligne).forEach(function (key) { - html = html.replace("@@".concat(key, "@@"), ligne[key]); - }); - return html; - }, - changerVue: function changerVue(vue) { - this.quelleVue = vue; - }, - ordonnerSelect: function ordonnerSelect(a, b) { - // attention ! le test d'égalité en == et non pas === est voulu tel quel... - if ((Number.isInteger(a) || parseInt(a) == a) && (Number.isInteger(b) || parseInt(b) == b)) { - return parseInt(a) - parseInt(b); - } else { - var x = toString(a).toLowerCase(); - var y = toString(b).toLowerCase(); - - if (x < y) { - return -1; - } - - if (x > y) { - return 1; - } - - return 0; - } - }, - validerCheckboxCol: function validerCheckboxCol(head) { - var _this7 = this; - - var tableau = this.tableau; - - if (this.Tcheckbox[head] !== undefined && this.Tcheckbox[head].length) { - this.Tcheckbox[head] = []; - } else { - this.Tcheckbox[head] = []; - tableau.forEach(function (d) { - _this7.Tcheckbox[head].push(d.html.id); - }); - } - }, - checkboxValider: function checkboxValider(head, url) { - var that = this; - console.log('head = ', head); - console.log('url = ', url); - var typeLien = 'page'; - - if (url.includes('action=')) { - typeLien = 'action'; - } // $.modalbox(url, data); - - - if (typeLien === 'action') { - $.ajax({ - url: url, - data: { - data: this.Tcheckbox[head] - }, - type: 'POST' - }).done(function () { - that.chargerJson(); - }); - } else { - var Tcheck = encodeURIComponent(JSON.stringify(this.Tcheckbox[head])); - url += '&data=' + Tcheck; - url += '&var_zajax=content'; - var data = {}; - - data.onClose = function () { - that.chargerJson(); - }; - - $.modalbox(url, data); - } - } - }, - template: "\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tMise \xE0 jour de la base de donn\xE9e\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{tableau.length}} / {{table.length}} \xE9l\xE9ments\n\t\t\t \n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tX\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t
\n\t\t\t
{{tableau.length}} / {{table.length}} \xE9l\xE9ments
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
" -}; -var gamuTable = { - components: { - monTableau: monTableau - }, - methods: { - rechargerJson: function rechargerJson(id) { - var ajaxCrayons = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this.$refs.montableau.ajaxCrayons = ajaxCrayons; - this.$refs.montableau.chargerJson(id); - }, - rechargerJson_deux: function rechargerJson_deux(id) { - var ajaxCrayons = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - if (this.$refs.montableau_deux) { - this.$refs.montableau_deux.ajaxCrayons = ajaxCrayons; - this.$refs.montableau_deux.chargerJson(id); - } - } - } -}; -var app = Vue.createApp(gamuTable).component('vue-select', window.VueNextSelect).mount('#app'); \ No newline at end of file diff --git a/js/papaparse.js b/js/papaparse.js deleted file mode 100644 index 70dedf0..0000000 --- a/js/papaparse.js +++ /dev/null @@ -1,1924 +0,0 @@ -/* @license -Papa Parse -v5.2.0 -https://github.com/mholt/PapaParse -License: MIT -*/ - -(function(root, factory) -{ - /* globals define */ - if (typeof define === 'function' && define.amd) - { - // AMD. Register as an anonymous module. - define([], factory); - } - else if (typeof module === 'object' && typeof exports !== 'undefined') - { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } - else - { - // Browser globals (root is window) - root.Papa = factory(); - } - // in strict mode we cannot access arguments.callee, so we need a named reference to - // stringify the factory method for the blob worker - // eslint-disable-next-line func-name -}(this, function moduleFactory() -{ - 'use strict'; - - var global = (function() { - // alternative method, similar to `Function('return this')()` - // but without using `eval` (which is disabled when - // using Content Security Policy). - - if (typeof self !== 'undefined') { return self; } - if (typeof window !== 'undefined') { return window; } - if (typeof global !== 'undefined') { return global; } - - // When running tests none of the above have been defined - return {}; - })(); - - - function getWorkerBlob() { - var URL = global.URL || global.webkitURL || null; - var code = moduleFactory.toString(); - return Papa.BLOB_URL || (Papa.BLOB_URL = URL.createObjectURL(new Blob(['(', code, ')();'], {type: 'text/javascript'}))); - } - - var IS_WORKER = !global.document && !!global.postMessage, - IS_PAPA_WORKER = IS_WORKER && /blob:/i.test((global.location || {}).protocol); - var workers = {}, workerIdCounter = 0; - - var Papa = {}; - - Papa.parse = CsvToJson; - Papa.unparse = JsonToCsv; - - Papa.RECORD_SEP = String.fromCharCode(30); - Papa.UNIT_SEP = String.fromCharCode(31); - Papa.BYTE_ORDER_MARK = '\ufeff'; - Papa.BAD_DELIMITERS = ['\r', '\n', '"', Papa.BYTE_ORDER_MARK]; - Papa.WORKERS_SUPPORTED = !IS_WORKER && !!global.Worker; - Papa.NODE_STREAM_INPUT = 1; - - // Configurable chunk sizes for local and remote files, respectively - Papa.LocalChunkSize = 1024 * 1024 * 10; // 10 MB - Papa.RemoteChunkSize = 1024 * 1024 * 5; // 5 MB - Papa.DefaultDelimiter = ','; // Used if not specified and detection fails - - // Exposed for testing and development only - Papa.Parser = Parser; - Papa.ParserHandle = ParserHandle; - Papa.NetworkStreamer = NetworkStreamer; - Papa.FileStreamer = FileStreamer; - Papa.StringStreamer = StringStreamer; - Papa.ReadableStreamStreamer = ReadableStreamStreamer; - if (typeof PAPA_BROWSER_CONTEXT === 'undefined') { - Papa.DuplexStreamStreamer = DuplexStreamStreamer; - } - - if (global.jQuery) - { - var $ = global.jQuery; - $.fn.parse = function(options) - { - var config = options.config || {}; - var queue = []; - - this.each(function(idx) - { - var supported = $(this).prop('tagName').toUpperCase() === 'INPUT' - && $(this).attr('type').toLowerCase() === 'file' - && global.FileReader; - - if (!supported || !this.files || this.files.length === 0) - return true; // continue to next input element - - for (var i = 0; i < this.files.length; i++) - { - queue.push({ - file: this.files[i], - inputElem: this, - instanceConfig: $.extend({}, config) - }); - } - }); - - parseNextFile(); // begin parsing - return this; // maintains chainability - - - function parseNextFile() - { - if (queue.length === 0) - { - if (isFunction(options.complete)) - options.complete(); - return; - } - - var f = queue[0]; - - if (isFunction(options.before)) - { - var returned = options.before(f.file, f.inputElem); - - if (typeof returned === 'object') - { - if (returned.action === 'abort') - { - error('AbortError', f.file, f.inputElem, returned.reason); - return; // Aborts all queued files immediately - } - else if (returned.action === 'skip') - { - fileComplete(); // parse the next file in the queue, if any - return; - } - else if (typeof returned.config === 'object') - f.instanceConfig = $.extend(f.instanceConfig, returned.config); - } - else if (returned === 'skip') - { - fileComplete(); // parse the next file in the queue, if any - return; - } - } - - // Wrap up the user's complete callback, if any, so that ours also gets executed - var userCompleteFunc = f.instanceConfig.complete; - f.instanceConfig.complete = function(results) - { - if (isFunction(userCompleteFunc)) - userCompleteFunc(results, f.file, f.inputElem); - fileComplete(); - }; - - Papa.parse(f.file, f.instanceConfig); - } - - function error(name, file, elem, reason) - { - if (isFunction(options.error)) - options.error({name: name}, file, elem, reason); - } - - function fileComplete() - { - queue.splice(0, 1); - parseNextFile(); - } - }; - } - - - if (IS_PAPA_WORKER) - { - global.onmessage = workerThreadReceivedMessage; - } - - - - - function CsvToJson(_input, _config) - { - _config = _config || {}; - var dynamicTyping = _config.dynamicTyping || false; - if (isFunction(dynamicTyping)) { - _config.dynamicTypingFunction = dynamicTyping; - // Will be filled on first row call - dynamicTyping = {}; - } - _config.dynamicTyping = dynamicTyping; - - _config.transform = isFunction(_config.transform) ? _config.transform : false; - - if (_config.worker && Papa.WORKERS_SUPPORTED) - { - var w = newWorker(); - - w.userStep = _config.step; - w.userChunk = _config.chunk; - w.userComplete = _config.complete; - w.userError = _config.error; - - _config.step = isFunction(_config.step); - _config.chunk = isFunction(_config.chunk); - _config.complete = isFunction(_config.complete); - _config.error = isFunction(_config.error); - delete _config.worker; // prevent infinite loop - - w.postMessage({ - input: _input, - config: _config, - workerId: w.id - }); - - return; - } - - var streamer = null; - if (_input === Papa.NODE_STREAM_INPUT && typeof PAPA_BROWSER_CONTEXT === 'undefined') - { - // create a node Duplex stream for use - // with .pipe - streamer = new DuplexStreamStreamer(_config); - return streamer.getStream(); - } - else if (typeof _input === 'string') - { - if (_config.download) - streamer = new NetworkStreamer(_config); - else - streamer = new StringStreamer(_config); - } - else if (_input.readable === true && isFunction(_input.read) && isFunction(_input.on)) - { - streamer = new ReadableStreamStreamer(_config); - } - else if ((global.File && _input instanceof File) || _input instanceof Object) // ...Safari. (see issue #106) - streamer = new FileStreamer(_config); - - return streamer.stream(_input); - } - - - - - - - function JsonToCsv(_input, _config) - { - // Default configuration - - /** whether to surround every datum with quotes */ - var _quotes = false; - - /** whether to write headers */ - var _writeHeader = true; - - /** delimiting character(s) */ - var _delimiter = ','; - - /** newline character(s) */ - var _newline = '\r\n'; - - /** quote character */ - var _quoteChar = '"'; - - /** escaped quote character, either "" or " */ - var _escapedQuote = _quoteChar + _quoteChar; - - /** whether to skip empty lines */ - var _skipEmptyLines = false; - - /** the columns (keys) we expect when we unparse objects */ - var _columns = null; - - unpackConfig(); - - var quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g'); - - if (typeof _input === 'string') - _input = JSON.parse(_input); - - if (Array.isArray(_input)) - { - if (!_input.length || Array.isArray(_input[0])) - return serialize(null, _input, _skipEmptyLines); - else if (typeof _input[0] === 'object') - return serialize(_columns || objectKeys(_input[0]), _input, _skipEmptyLines); - } - else if (typeof _input === 'object') - { - if (typeof _input.data === 'string') - _input.data = JSON.parse(_input.data); - - if (Array.isArray(_input.data)) - { - if (!_input.fields) - _input.fields = _input.meta && _input.meta.fields; - - if (!_input.fields) - _input.fields = Array.isArray(_input.data[0]) - ? _input.fields - : objectKeys(_input.data[0]); - - if (!(Array.isArray(_input.data[0])) && typeof _input.data[0] !== 'object') - _input.data = [_input.data]; // handles input like [1,2,3] or ['asdf'] - } - - return serialize(_input.fields || [], _input.data || [], _skipEmptyLines); - } - - // Default (any valid paths should return before this) - throw new Error('Unable to serialize unrecognized input'); - - - function unpackConfig() - { - if (typeof _config !== 'object') - return; - - if (typeof _config.delimiter === 'string' - && !Papa.BAD_DELIMITERS.filter(function(value) { return _config.delimiter.indexOf(value) !== -1; }).length) - { - _delimiter = _config.delimiter; - } - - if (typeof _config.quotes === 'boolean' - || typeof _config.quotes === 'function' - || Array.isArray(_config.quotes)) - _quotes = _config.quotes; - - if (typeof _config.skipEmptyLines === 'boolean' - || typeof _config.skipEmptyLines === 'string') - _skipEmptyLines = _config.skipEmptyLines; - - if (typeof _config.newline === 'string') - _newline = _config.newline; - - if (typeof _config.quoteChar === 'string') - _quoteChar = _config.quoteChar; - - if (typeof _config.header === 'boolean') - _writeHeader = _config.header; - - if (Array.isArray(_config.columns)) { - - if (_config.columns.length === 0) throw new Error('Option columns is empty'); - - _columns = _config.columns; - } - - if (_config.escapeChar !== undefined) { - _escapedQuote = _config.escapeChar + _quoteChar; - } - } - - - /** Turns an object's keys into an array */ - function objectKeys(obj) - { - if (typeof obj !== 'object') - return []; - var keys = []; - for (var key in obj) - keys.push(key); - return keys; - } - - /** The double for loop that iterates the data and writes out a CSV string including header row */ - function serialize(fields, data, skipEmptyLines) - { - var csv = ''; - - if (typeof fields === 'string') - fields = JSON.parse(fields); - if (typeof data === 'string') - data = JSON.parse(data); - - var hasHeader = Array.isArray(fields) && fields.length > 0; - var dataKeyedByField = !(Array.isArray(data[0])); - - // If there a header row, write it first - if (hasHeader && _writeHeader) - { - for (var i = 0; i < fields.length; i++) - { - if (i > 0) - csv += _delimiter; - csv += safe(fields[i], i); - } - if (data.length > 0) - csv += _newline; - } - - // Then write out the data - for (var row = 0; row < data.length; row++) - { - var maxCol = hasHeader ? fields.length : data[row].length; - - var emptyLine = false; - var nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0; - if (skipEmptyLines && !hasHeader) - { - emptyLine = skipEmptyLines === 'greedy' ? data[row].join('').trim() === '' : data[row].length === 1 && data[row][0].length === 0; - } - if (skipEmptyLines === 'greedy' && hasHeader) { - var line = []; - for (var c = 0; c < maxCol; c++) { - var cx = dataKeyedByField ? fields[c] : c; - line.push(data[row][cx]); - } - emptyLine = line.join('').trim() === ''; - } - if (!emptyLine) - { - for (var col = 0; col < maxCol; col++) - { - if (col > 0 && !nullLine) - csv += _delimiter; - var colIdx = hasHeader && dataKeyedByField ? fields[col] : col; - csv += safe(data[row][colIdx], col); - } - if (row < data.length - 1 && (!skipEmptyLines || (maxCol > 0 && !nullLine))) - { - csv += _newline; - } - } - } - return csv; - } - - /** Encloses a value around quotes if needed (makes a value safe for CSV insertion) */ - function safe(str, col) - { - if (typeof str === 'undefined' || str === null) - return ''; - - if (str.constructor === Date) - return JSON.stringify(str).slice(1, 25); - - var escapedQuoteStr = str.toString().replace(quoteCharRegex, _escapedQuote); - - var needsQuotes = (typeof _quotes === 'boolean' && _quotes) - || (typeof _quotes === 'function' && _quotes(str, col)) - || (Array.isArray(_quotes) && _quotes[col]) - || hasAny(escapedQuoteStr, Papa.BAD_DELIMITERS) - || escapedQuoteStr.indexOf(_delimiter) > -1 - || escapedQuoteStr.charAt(0) === ' ' - || escapedQuoteStr.charAt(escapedQuoteStr.length - 1) === ' '; - - return needsQuotes ? _quoteChar + escapedQuoteStr + _quoteChar : escapedQuoteStr; - } - - function hasAny(str, substrings) - { - for (var i = 0; i < substrings.length; i++) - if (str.indexOf(substrings[i]) > -1) - return true; - return false; - } - } - - /** ChunkStreamer is the base prototype for various streamer implementations. */ - function ChunkStreamer(config) - { - this._handle = null; - this._finished = false; - this._completed = false; - this._halted = false; - this._input = null; - this._baseIndex = 0; - this._partialLine = ''; - this._rowCount = 0; - this._start = 0; - this._nextChunk = null; - this.isFirstChunk = true; - this._completeResults = { - data: [], - errors: [], - meta: {} - }; - replaceConfig.call(this, config); - - this.parseChunk = function(chunk, isFakeChunk) - { - // First chunk pre-processing - if (this.isFirstChunk && isFunction(this._config.beforeFirstChunk)) - { - var modifiedChunk = this._config.beforeFirstChunk(chunk); - if (modifiedChunk !== undefined) - chunk = modifiedChunk; - } - this.isFirstChunk = false; - this._halted = false; - - // Rejoin the line we likely just split in two by chunking the file - var aggregate = this._partialLine + chunk; - this._partialLine = ''; - - var results = this._handle.parse(aggregate, this._baseIndex, !this._finished); - - if (this._handle.paused() || this._handle.aborted()) { - this._halted = true; - return; - } - - var lastIndex = results.meta.cursor; - - if (!this._finished) - { - this._partialLine = aggregate.substring(lastIndex - this._baseIndex); - this._baseIndex = lastIndex; - } - - if (results && results.data) - this._rowCount += results.data.length; - - var finishedIncludingPreview = this._finished || (this._config.preview && this._rowCount >= this._config.preview); - - if (IS_PAPA_WORKER) - { - global.postMessage({ - results: results, - workerId: Papa.WORKER_ID, - finished: finishedIncludingPreview - }); - } - else if (isFunction(this._config.chunk) && !isFakeChunk) - { - this._config.chunk(results, this._handle); - if (this._handle.paused() || this._handle.aborted()) { - this._halted = true; - return; - } - results = undefined; - this._completeResults = undefined; - } - - if (!this._config.step && !this._config.chunk) { - this._completeResults.data = this._completeResults.data.concat(results.data); - this._completeResults.errors = this._completeResults.errors.concat(results.errors); - this._completeResults.meta = results.meta; - } - - if (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) { - this._config.complete(this._completeResults, this._input); - this._completed = true; - } - - if (!finishedIncludingPreview && (!results || !results.meta.paused)) - this._nextChunk(); - - return results; - }; - - this._sendError = function(error) - { - if (isFunction(this._config.error)) - this._config.error(error); - else if (IS_PAPA_WORKER && this._config.error) - { - global.postMessage({ - workerId: Papa.WORKER_ID, - error: error, - finished: false - }); - } - }; - - function replaceConfig(config) - { - // Deep-copy the config so we can edit it - var configCopy = copy(config); - configCopy.chunkSize = parseInt(configCopy.chunkSize); // parseInt VERY important so we don't concatenate strings! - if (!config.step && !config.chunk) - configCopy.chunkSize = null; // disable Range header if not streaming; bad values break IIS - see issue #196 - this._handle = new ParserHandle(configCopy); - this._handle.streamer = this; - this._config = configCopy; // persist the copy to the caller - } - } - - - function NetworkStreamer(config) - { - config = config || {}; - if (!config.chunkSize) - config.chunkSize = Papa.RemoteChunkSize; - ChunkStreamer.call(this, config); - - var xhr; - - if (IS_WORKER) - { - this._nextChunk = function() - { - this._readChunk(); - this._chunkLoaded(); - }; - } - else - { - this._nextChunk = function() - { - this._readChunk(); - }; - } - - this.stream = function(url) - { - this._input = url; - this._nextChunk(); // Starts streaming - }; - - this._readChunk = function() - { - if (this._finished) - { - this._chunkLoaded(); - return; - } - - xhr = new XMLHttpRequest(); - - if (this._config.withCredentials) - { - xhr.withCredentials = this._config.withCredentials; - } - - if (!IS_WORKER) - { - xhr.onload = bindFunction(this._chunkLoaded, this); - xhr.onerror = bindFunction(this._chunkError, this); - } - - xhr.open(this._config.downloadRequestBody ? 'POST' : 'GET', this._input, !IS_WORKER); - // Headers can only be set when once the request state is OPENED - if (this._config.downloadRequestHeaders) - { - var headers = this._config.downloadRequestHeaders; - - for (var headerName in headers) - { - xhr.setRequestHeader(headerName, headers[headerName]); - } - } - - if (this._config.chunkSize) - { - var end = this._start + this._config.chunkSize - 1; // minus one because byte range is inclusive - xhr.setRequestHeader('Range', 'bytes=' + this._start + '-' + end); - } - - try { - xhr.send(this._config.downloadRequestBody); - } - catch (err) { - this._chunkError(err.message); - } - - if (IS_WORKER && xhr.status === 0) - this._chunkError(); - }; - - this._chunkLoaded = function() - { - if (xhr.readyState !== 4) - return; - - if (xhr.status < 200 || xhr.status >= 400) - { - this._chunkError(); - return; - } - - // Use chunckSize as it may be a diference on reponse lentgh due to characters with more than 1 byte - this._start += this._config.chunkSize ? this._config.chunkSize : xhr.responseText.length; - this._finished = !this._config.chunkSize || this._start >= getFileSize(xhr); - this.parseChunk(xhr.responseText); - }; - - this._chunkError = function(errorMessage) - { - var errorText = xhr.statusText || errorMessage; - this._sendError(new Error(errorText)); - }; - - function getFileSize(xhr) - { - var contentRange = xhr.getResponseHeader('Content-Range'); - if (contentRange === null) { // no content range, then finish! - return -1; - } - return parseInt(contentRange.substring(contentRange.lastIndexOf('/') + 1)); - } - } - NetworkStreamer.prototype = Object.create(ChunkStreamer.prototype); - NetworkStreamer.prototype.constructor = NetworkStreamer; - - - function FileStreamer(config) - { - config = config || {}; - if (!config.chunkSize) - config.chunkSize = Papa.LocalChunkSize; - ChunkStreamer.call(this, config); - - var reader, slice; - - // FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862 - // But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76 - var usingAsyncReader = typeof FileReader !== 'undefined'; // Safari doesn't consider it a function - see issue #105 - - this.stream = function(file) - { - this._input = file; - slice = file.slice || file.webkitSlice || file.mozSlice; - - if (usingAsyncReader) - { - reader = new FileReader(); // Preferred method of reading files, even in workers - reader.onload = bindFunction(this._chunkLoaded, this); - reader.onerror = bindFunction(this._chunkError, this); - } - else - reader = new FileReaderSync(); // Hack for running in a web worker in Firefox - - this._nextChunk(); // Starts streaming - }; - - this._nextChunk = function() - { - if (!this._finished && (!this._config.preview || this._rowCount < this._config.preview)) - this._readChunk(); - }; - - this._readChunk = function() - { - var input = this._input; - if (this._config.chunkSize) - { - var end = Math.min(this._start + this._config.chunkSize, this._input.size); - input = slice.call(input, this._start, end); - } - var txt = reader.readAsText(input, this._config.encoding); - if (!usingAsyncReader) - this._chunkLoaded({ target: { result: txt } }); // mimic the async signature - }; - - this._chunkLoaded = function(event) - { - // Very important to increment start each time before handling results - this._start += this._config.chunkSize; - this._finished = !this._config.chunkSize || this._start >= this._input.size; - this.parseChunk(event.target.result); - }; - - this._chunkError = function() - { - this._sendError(reader.error); - }; - - } - FileStreamer.prototype = Object.create(ChunkStreamer.prototype); - FileStreamer.prototype.constructor = FileStreamer; - - - function StringStreamer(config) - { - config = config || {}; - ChunkStreamer.call(this, config); - - var remaining; - this.stream = function(s) - { - remaining = s; - return this._nextChunk(); - }; - this._nextChunk = function() - { - if (this._finished) return; - var size = this._config.chunkSize; - var chunk; - if(size) { - chunk = remaining.substring(0, size); - remaining = remaining.substring(size); - } else { - chunk = remaining; - remaining = ''; - } - this._finished = !remaining; - return this.parseChunk(chunk); - }; - } - StringStreamer.prototype = Object.create(StringStreamer.prototype); - StringStreamer.prototype.constructor = StringStreamer; - - - function ReadableStreamStreamer(config) - { - config = config || {}; - - ChunkStreamer.call(this, config); - - var queue = []; - var parseOnData = true; - var streamHasEnded = false; - - this.pause = function() - { - ChunkStreamer.prototype.pause.apply(this, arguments); - this._input.pause(); - }; - - this.resume = function() - { - ChunkStreamer.prototype.resume.apply(this, arguments); - this._input.resume(); - }; - - this.stream = function(stream) - { - this._input = stream; - - this._input.on('data', this._streamData); - this._input.on('end', this._streamEnd); - this._input.on('error', this._streamError); - }; - - this._checkIsFinished = function() - { - if (streamHasEnded && queue.length === 1) { - this._finished = true; - } - }; - - this._nextChunk = function() - { - this._checkIsFinished(); - if (queue.length) - { - this.parseChunk(queue.shift()); - } - else - { - parseOnData = true; - } - }; - - this._streamData = bindFunction(function(chunk) - { - try - { - queue.push(typeof chunk === 'string' ? chunk : chunk.toString(this._config.encoding)); - - if (parseOnData) - { - parseOnData = false; - this._checkIsFinished(); - this.parseChunk(queue.shift()); - } - } - catch (error) - { - this._streamError(error); - } - }, this); - - this._streamError = bindFunction(function(error) - { - this._streamCleanUp(); - this._sendError(error); - }, this); - - this._streamEnd = bindFunction(function() - { - this._streamCleanUp(); - streamHasEnded = true; - this._streamData(''); - }, this); - - this._streamCleanUp = bindFunction(function() - { - this._input.removeListener('data', this._streamData); - this._input.removeListener('end', this._streamEnd); - this._input.removeListener('error', this._streamError); - }, this); - } - ReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); - ReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer; - - - function DuplexStreamStreamer(_config) { - var Duplex = require('stream').Duplex; - var config = copy(_config); - var parseOnWrite = true; - var writeStreamHasFinished = false; - var parseCallbackQueue = []; - var stream = null; - - this._onCsvData = function(results) - { - var data = results.data; - if (!stream.push(data) && !this._handle.paused()) { - // the writeable consumer buffer has filled up - // so we need to pause until more items - // can be processed - this._handle.pause(); - } - }; - - this._onCsvComplete = function() - { - // node will finish the read stream when - // null is pushed - stream.push(null); - }; - - config.step = bindFunction(this._onCsvData, this); - config.complete = bindFunction(this._onCsvComplete, this); - ChunkStreamer.call(this, config); - - this._nextChunk = function() - { - if (writeStreamHasFinished && parseCallbackQueue.length === 1) { - this._finished = true; - } - if (parseCallbackQueue.length) { - parseCallbackQueue.shift()(); - } else { - parseOnWrite = true; - } - }; - - this._addToParseQueue = function(chunk, callback) - { - // add to queue so that we can indicate - // completion via callback - // node will automatically pause the incoming stream - // when too many items have been added without their - // callback being invoked - parseCallbackQueue.push(bindFunction(function() { - this.parseChunk(typeof chunk === 'string' ? chunk : chunk.toString(config.encoding)); - if (isFunction(callback)) { - return callback(); - } - }, this)); - if (parseOnWrite) { - parseOnWrite = false; - this._nextChunk(); - } - }; - - this._onRead = function() - { - if (this._handle.paused()) { - // the writeable consumer can handle more data - // so resume the chunk parsing - this._handle.resume(); - } - }; - - this._onWrite = function(chunk, encoding, callback) - { - this._addToParseQueue(chunk, callback); - }; - - this._onWriteComplete = function() - { - writeStreamHasFinished = true; - // have to write empty string - // so parser knows its done - this._addToParseQueue(''); - }; - - this.getStream = function() - { - return stream; - }; - stream = new Duplex({ - readableObjectMode: true, - decodeStrings: false, - read: bindFunction(this._onRead, this), - write: bindFunction(this._onWrite, this) - }); - stream.once('finish', bindFunction(this._onWriteComplete, this)); - } - if (typeof PAPA_BROWSER_CONTEXT === 'undefined') { - DuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); - DuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer; - } - - - // Use one ParserHandle per entire CSV file or string - function ParserHandle(_config) - { - // One goal is to minimize the use of regular expressions... - var MAX_FLOAT = Math.pow(2, 53); - var MIN_FLOAT = -MAX_FLOAT; - var FLOAT = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)(e[-+]?\d+)?\s*$/; - var ISO_DATE = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/; - var self = this; - var _stepCounter = 0; // Number of times step was called (number of rows parsed) - var _rowCounter = 0; // Number of rows that have been parsed so far - var _input; // The input being parsed - var _parser; // The core parser being used - var _paused = false; // Whether we are paused or not - var _aborted = false; // Whether the parser has aborted or not - var _delimiterError; // Temporary state between delimiter detection and processing results - var _fields = []; // Fields are from the header row of the input, if there is one - var _results = { // The last results returned from the parser - data: [], - errors: [], - meta: {} - }; - - if (isFunction(_config.step)) - { - var userStep = _config.step; - _config.step = function(results) - { - _results = results; - - if (needsHeaderRow()) - processResults(); - else // only call user's step function after header row - { - processResults(); - - // It's possbile that this line was empty and there's no row here after all - if (_results.data.length === 0) - return; - - _stepCounter += results.data.length; - if (_config.preview && _stepCounter > _config.preview) - _parser.abort(); - else { - _results.data = _results.data[0]; - userStep(_results, self); - } - } - }; - } - - /** - * Parses input. Most users won't need, and shouldn't mess with, the baseIndex - * and ignoreLastRow parameters. They are used by streamers (wrapper functions) - * when an input comes in multiple chunks, like from a file. - */ - this.parse = function(input, baseIndex, ignoreLastRow) - { - var quoteChar = _config.quoteChar || '"'; - if (!_config.newline) - _config.newline = guessLineEndings(input, quoteChar); - - _delimiterError = false; - if (!_config.delimiter) - { - var delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess); - if (delimGuess.successful) - _config.delimiter = delimGuess.bestDelimiter; - else - { - _delimiterError = true; // add error after parsing (otherwise it would be overwritten) - _config.delimiter = Papa.DefaultDelimiter; - } - _results.meta.delimiter = _config.delimiter; - } - else if(isFunction(_config.delimiter)) - { - _config.delimiter = _config.delimiter(input); - _results.meta.delimiter = _config.delimiter; - } - - var parserConfig = copy(_config); - if (_config.preview && _config.header) - parserConfig.preview++; // to compensate for header row - - _input = input; - _parser = new Parser(parserConfig); - _results = _parser.parse(_input, baseIndex, ignoreLastRow); - processResults(); - return _paused ? { meta: { paused: true } } : (_results || { meta: { paused: false } }); - }; - - this.paused = function() - { - return _paused; - }; - - this.pause = function() - { - _paused = true; - _parser.abort(); - - // If it is streaming via "chunking", the reader will start appending correctly already so no need to substring, - // otherwise we can get duplicate content within a row - _input = isFunction(_config.chunk) ? "" : _input.substring(_parser.getCharIndex()); - }; - - this.resume = function() - { - if(self.streamer._halted) { - _paused = false; - self.streamer.parseChunk(_input, true); - } else { - // Bugfix: #636 In case the processing hasn't halted yet - // wait for it to halt in order to resume - setTimeout(self.resume, 3); - } - }; - - this.aborted = function() - { - return _aborted; - }; - - this.abort = function() - { - _aborted = true; - _parser.abort(); - _results.meta.aborted = true; - if (isFunction(_config.complete)) - _config.complete(_results); - _input = ''; - }; - - function testEmptyLine(s) { - return _config.skipEmptyLines === 'greedy' ? s.join('').trim() === '' : s.length === 1 && s[0].length === 0; - } - - function testFloat(s) { - if (FLOAT.test(s)) { - var floatValue = parseFloat(s); - if (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) { - return true; - } - } - return false; - } - - function processResults() - { - if (_results && _delimiterError) - { - addError('Delimiter', 'UndetectableDelimiter', 'Unable to auto-detect delimiting character; defaulted to \'' + Papa.DefaultDelimiter + '\''); - _delimiterError = false; - } - - if (_config.skipEmptyLines) - { - for (var i = 0; i < _results.data.length; i++) - if (testEmptyLine(_results.data[i])) - _results.data.splice(i--, 1); - } - - if (needsHeaderRow()) - fillHeaderFields(); - - return applyHeaderAndDynamicTypingAndTransformation(); - } - - function needsHeaderRow() - { - return _config.header && _fields.length === 0; - } - - function fillHeaderFields() - { - if (!_results) - return; - - function addHeder(header) - { - if (isFunction(_config.transformHeader)) - header = _config.transformHeader(header); - - _fields.push(header); - } - - if (Array.isArray(_results.data[0])) - { - for (var i = 0; needsHeaderRow() && i < _results.data.length; i++) - _results.data[i].forEach(addHeder); - - _results.data.splice(0, 1); - } - // if _results.data[0] is not an array, we are in a step where _results.data is the row. - else - _results.data.forEach(addHeder); - } - - function shouldApplyDynamicTyping(field) { - // Cache function values to avoid calling it for each row - if (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) { - _config.dynamicTyping[field] = _config.dynamicTypingFunction(field); - } - return (_config.dynamicTyping[field] || _config.dynamicTyping) === true; - } - - function parseDynamic(field, value) - { - if (shouldApplyDynamicTyping(field)) - { - if (value === 'true' || value === 'TRUE') - return true; - else if (value === 'false' || value === 'FALSE') - return false; - else if (testFloat(value)) - return parseFloat(value); - else if (ISO_DATE.test(value)) - return new Date(value); - else - return (value === '' ? null : value); - } - return value; - } - - function applyHeaderAndDynamicTypingAndTransformation() - { - if (!_results || (!_config.header && !_config.dynamicTyping && !_config.transform)) - return _results; - - function processRow(rowSource, i) - { - var row = _config.header ? {} : []; - - var j; - for (j = 0; j < rowSource.length; j++) - { - var field = j; - var value = rowSource[j]; - - if (_config.header) - field = j >= _fields.length ? '__parsed_extra' : _fields[j]; - - if (_config.transform) - value = _config.transform(value,field); - - value = parseDynamic(field, value); - - if (field === '__parsed_extra') - { - row[field] = row[field] || []; - row[field].push(value); - } - else - row[field] = value; - } - - - if (_config.header) - { - if (j > _fields.length) - addError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i); - else if (j < _fields.length) - addError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i); - } - - return row; - } - - var incrementBy = 1; - if (!_results.data.length || Array.isArray(_results.data[0])) - { - _results.data = _results.data.map(processRow); - incrementBy = _results.data.length; - } - else - _results.data = processRow(_results.data, 0); - - - if (_config.header && _results.meta) - _results.meta.fields = _fields; - - _rowCounter += incrementBy; - return _results; - } - - function guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) { - var bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount; - - delimitersToGuess = delimitersToGuess || [',', '\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP]; - - for (var i = 0; i < delimitersToGuess.length; i++) { - var delim = delimitersToGuess[i]; - var delta = 0, avgFieldCount = 0, emptyLinesCount = 0; - fieldCountPrevRow = undefined; - - var preview = new Parser({ - comments: comments, - delimiter: delim, - newline: newline, - preview: 10 - }).parse(input); - - for (var j = 0; j < preview.data.length; j++) { - if (skipEmptyLines && testEmptyLine(preview.data[j])) { - emptyLinesCount++; - continue; - } - var fieldCount = preview.data[j].length; - avgFieldCount += fieldCount; - - if (typeof fieldCountPrevRow === 'undefined') { - fieldCountPrevRow = fieldCount; - continue; - } - else if (fieldCount > 0) { - delta += Math.abs(fieldCount - fieldCountPrevRow); - fieldCountPrevRow = fieldCount; - } - } - - if (preview.data.length > 0) - avgFieldCount /= (preview.data.length - emptyLinesCount); - - if ((typeof bestDelta === 'undefined' || delta <= bestDelta) - && (typeof maxFieldCount === 'undefined' || avgFieldCount > maxFieldCount) && avgFieldCount > 1.99) { - bestDelta = delta; - bestDelim = delim; - maxFieldCount = avgFieldCount; - } - } - - _config.delimiter = bestDelim; - - return { - successful: !!bestDelim, - bestDelimiter: bestDelim - }; - } - - function guessLineEndings(input, quoteChar) - { - input = input.substring(0, 1024 * 1024); // max length 1 MB - // Replace all the text inside quotes - var re = new RegExp(escapeRegExp(quoteChar) + '([^]*?)' + escapeRegExp(quoteChar), 'gm'); - input = input.replace(re, ''); - - var r = input.split('\r'); - - var n = input.split('\n'); - - var nAppearsFirst = (n.length > 1 && n[0].length < r[0].length); - - if (r.length === 1 || nAppearsFirst) - return '\n'; - - var numWithN = 0; - for (var i = 0; i < r.length; i++) - { - if (r[i][0] === '\n') - numWithN++; - } - - return numWithN >= r.length / 2 ? '\r\n' : '\r'; - } - - function addError(type, code, msg, row) - { - var error = { - type: type, - code: code, - message: msg - }; - if(row !== undefined) { - error.row = row; - } - _results.errors.push(error); - } - } - - /** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */ - function escapeRegExp(string) - { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string - } - - /** The core parser implements speedy and correct CSV parsing */ - function Parser(config) - { - // Unpack the config object - config = config || {}; - var delim = config.delimiter; - var newline = config.newline; - var comments = config.comments; - var step = config.step; - var preview = config.preview; - var fastMode = config.fastMode; - var quoteChar; - /** Allows for no quoteChar by setting quoteChar to undefined in config */ - if (config.quoteChar === undefined) { - quoteChar = '"'; - } else { - quoteChar = config.quoteChar; - } - var escapeChar = quoteChar; - if (config.escapeChar !== undefined) { - escapeChar = config.escapeChar; - } - - // Delimiter must be valid - if (typeof delim !== 'string' - || Papa.BAD_DELIMITERS.indexOf(delim) > -1) - delim = ','; - - // Comment character must be valid - if (comments === delim) - throw new Error('Comment character same as delimiter'); - else if (comments === true) - comments = '#'; - else if (typeof comments !== 'string' - || Papa.BAD_DELIMITERS.indexOf(comments) > -1) - comments = false; - - // Newline must be valid: \r, \n, or \r\n - if (newline !== '\n' && newline !== '\r' && newline !== '\r\n') - newline = '\n'; - - // We're gonna need these at the Parser scope - var cursor = 0; - var aborted = false; - - this.parse = function(input, baseIndex, ignoreLastRow) - { - // For some reason, in Chrome, this speeds things up (!?) - if (typeof input !== 'string') - throw new Error('Input must be a string'); - - // We don't need to compute some of these every time parse() is called, - // but having them in a more local scope seems to perform better - var inputLen = input.length, - delimLen = delim.length, - newlineLen = newline.length, - commentsLen = comments.length; - var stepIsFunction = isFunction(step); - - // Establish starting state - cursor = 0; - var data = [], errors = [], row = [], lastCursor = 0; - - if (!input) - return returnable(); - - if (fastMode || (fastMode !== false && input.indexOf(quoteChar) === -1)) - { - var rows = input.split(newline); - for (var i = 0; i < rows.length; i++) - { - row = rows[i]; - cursor += row.length; - if (i !== rows.length - 1) - cursor += newline.length; - else if (ignoreLastRow) - return returnable(); - if (comments && row.substring(0, commentsLen) === comments) - continue; - if (stepIsFunction) - { - data = []; - pushRow(row.split(delim)); - doStep(); - if (aborted) - return returnable(); - } - else - pushRow(row.split(delim)); - if (preview && i >= preview) - { - data = data.slice(0, preview); - return returnable(true); - } - } - return returnable(); - } - - var nextDelim = input.indexOf(delim, cursor); - var nextNewline = input.indexOf(newline, cursor); - var quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g'); - var quoteSearch = input.indexOf(quoteChar, cursor); - - // Parser loop - for (;;) - { - // Field has opening quote - if (input[cursor] === quoteChar) - { - // Start our search for the closing quote where the cursor is - quoteSearch = cursor; - - // Skip the opening quote - cursor++; - - for (;;) - { - // Find closing quote - quoteSearch = input.indexOf(quoteChar, quoteSearch + 1); - - //No other quotes are found - no other delimiters - if (quoteSearch === -1) - { - if (!ignoreLastRow) { - // No closing quote... what a pity - errors.push({ - type: 'Quotes', - code: 'MissingQuotes', - message: 'Quoted field unterminated', - row: data.length, // row has yet to be inserted - index: cursor - }); - } - return finish(); - } - - // Closing quote at EOF - if (quoteSearch === inputLen - 1) - { - var value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar); - return finish(value); - } - - // If this quote is escaped, it's part of the data; skip it - // If the quote character is the escape character, then check if the next character is the escape character - if (quoteChar === escapeChar && input[quoteSearch + 1] === escapeChar) - { - quoteSearch++; - continue; - } - - // If the quote character is not the escape character, then check if the previous character was the escape character - if (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar) - { - continue; - } - - if(nextDelim !== -1 && nextDelim < (quoteSearch + 1)) { - nextDelim = input.indexOf(delim, (quoteSearch + 1)); - } - if(nextNewline !== -1 && nextNewline < (quoteSearch + 1)) { - nextNewline = input.indexOf(newline, (quoteSearch + 1)); - } - // Check up to nextDelim or nextNewline, whichever is closest - var checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline); - var spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo); - - // Closing quote followed by delimiter or 'unnecessary spaces + delimiter' - if (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter] === delim) - { - row.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar)); - cursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen; - - // If char after following delimiter is not quoteChar, we find next quote char position - if (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen] !== quoteChar) - { - quoteSearch = input.indexOf(quoteChar, cursor); - } - nextDelim = input.indexOf(delim, cursor); - nextNewline = input.indexOf(newline, cursor); - break; - } - - var spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline); - - // Closing quote followed by newline or 'unnecessary spaces + newLine' - if (input.substring(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen) === newline) - { - row.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar)); - saveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen); - nextDelim = input.indexOf(delim, cursor); // because we may have skipped the nextDelim in the quoted field - quoteSearch = input.indexOf(quoteChar, cursor); // we search for first quote in next line - - if (stepIsFunction) - { - doStep(); - if (aborted) - return returnable(); - } - - if (preview && data.length >= preview) - return returnable(true); - - break; - } - - - // Checks for valid closing quotes are complete (escaped quotes or quote followed by EOF/delimiter/newline) -- assume these quotes are part of an invalid text string - errors.push({ - type: 'Quotes', - code: 'InvalidQuotes', - message: 'Trailing quote on quoted field is malformed', - row: data.length, // row has yet to be inserted - index: cursor - }); - - quoteSearch++; - continue; - - } - - continue; - } - - // Comment found at start of new line - if (comments && row.length === 0 && input.substring(cursor, cursor + commentsLen) === comments) - { - if (nextNewline === -1) // Comment ends at EOF - return returnable(); - cursor = nextNewline + newlineLen; - nextNewline = input.indexOf(newline, cursor); - nextDelim = input.indexOf(delim, cursor); - continue; - } - - // Next delimiter comes before next newline, so we've reached end of field - if (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1)) - { - // we check, if we have quotes, because delimiter char may be part of field enclosed in quotes - if (quoteSearch > nextDelim) { - // we have quotes, so we try to find the next delimiter not enclosed in quotes and also next starting quote char - var nextDelimObj = getNextUnquotedDelimiter(nextDelim, quoteSearch, nextNewline); - - // if we have next delimiter char which is not enclosed in quotes - if (nextDelimObj && typeof nextDelimObj.nextDelim !== 'undefined') { - nextDelim = nextDelimObj.nextDelim; - quoteSearch = nextDelimObj.quoteSearch; - row.push(input.substring(cursor, nextDelim)); - cursor = nextDelim + delimLen; - // we look for next delimiter char - nextDelim = input.indexOf(delim, cursor); - continue; - } - } else { - row.push(input.substring(cursor, nextDelim)); - cursor = nextDelim + delimLen; - nextDelim = input.indexOf(delim, cursor); - continue; - } - } - - // End of row - if (nextNewline !== -1) - { - row.push(input.substring(cursor, nextNewline)); - saveRow(nextNewline + newlineLen); - - if (stepIsFunction) - { - doStep(); - if (aborted) - return returnable(); - } - - if (preview && data.length >= preview) - return returnable(true); - - continue; - } - - break; - } - - - return finish(); - - - function pushRow(row) - { - data.push(row); - lastCursor = cursor; - } - - /** - * checks if there are extra spaces after closing quote and given index without any text - * if Yes, returns the number of spaces - */ - function extraSpaces(index) { - var spaceLength = 0; - if (index !== -1) { - var textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index); - if (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === '') { - spaceLength = textBetweenClosingQuoteAndIndex.length; - } - } - return spaceLength; - } - - /** - * Appends the remaining input from cursor to the end into - * row, saves the row, calls step, and returns the results. - */ - function finish(value) - { - if (ignoreLastRow) - return returnable(); - if (typeof value === 'undefined') - value = input.substring(cursor); - row.push(value); - cursor = inputLen; // important in case parsing is paused - pushRow(row); - if (stepIsFunction) - doStep(); - return returnable(); - } - - /** - * Appends the current row to the results. It sets the cursor - * to newCursor and finds the nextNewline. The caller should - * take care to execute user's step function and check for - * preview and end parsing if necessary. - */ - function saveRow(newCursor) - { - cursor = newCursor; - pushRow(row); - row = []; - nextNewline = input.indexOf(newline, cursor); - } - - /** Returns an object with the results, errors, and meta. */ - function returnable(stopped) - { - return { - data: data, - errors: errors, - meta: { - delimiter: delim, - linebreak: newline, - aborted: aborted, - truncated: !!stopped, - cursor: lastCursor + (baseIndex || 0) - } - }; - } - - /** Executes the user's step function and resets data & errors. */ - function doStep() - { - step(returnable()); - data = []; - errors = []; - } - - /** Gets the delimiter character, which is not inside the quoted field */ - function getNextUnquotedDelimiter(nextDelim, quoteSearch, newLine) { - var result = { - nextDelim: undefined, - quoteSearch: undefined - }; - // get the next closing quote character - var nextQuoteSearch = input.indexOf(quoteChar, quoteSearch + 1); - - // if next delimiter is part of a field enclosed in quotes - if (nextDelim > quoteSearch && nextDelim < nextQuoteSearch && (nextQuoteSearch < newLine || newLine === -1)) { - // get the next delimiter character after this one - var nextNextDelim = input.indexOf(delim, nextQuoteSearch); - - // if there is no next delimiter, return default result - if (nextNextDelim === -1) { - return result; - } - // find the next opening quote char position - if (nextNextDelim > nextQuoteSearch) { - nextQuoteSearch = input.indexOf(quoteChar, nextQuoteSearch + 1); - } - // try to get the next delimiter position - result = getNextUnquotedDelimiter(nextNextDelim, nextQuoteSearch, newLine); - } else { - result = { - nextDelim: nextDelim, - quoteSearch: quoteSearch - }; - } - - return result; - } - }; - - /** Sets the abort flag */ - this.abort = function() - { - aborted = true; - }; - - /** Gets the cursor position */ - this.getCharIndex = function() - { - return cursor; - }; - } - - - function newWorker() - { - if (!Papa.WORKERS_SUPPORTED) - return false; - - var workerUrl = getWorkerBlob(); - var w = new global.Worker(workerUrl); - w.onmessage = mainThreadReceivedMessage; - w.id = workerIdCounter++; - workers[w.id] = w; - return w; - } - - /** Callback when main thread receives a message */ - function mainThreadReceivedMessage(e) - { - var msg = e.data; - var worker = workers[msg.workerId]; - var aborted = false; - - if (msg.error) - worker.userError(msg.error, msg.file); - else if (msg.results && msg.results.data) - { - var abort = function() { - aborted = true; - completeWorker(msg.workerId, { data: [], errors: [], meta: { aborted: true } }); - }; - - var handle = { - abort: abort, - pause: notImplemented, - resume: notImplemented - }; - - if (isFunction(worker.userStep)) - { - for (var i = 0; i < msg.results.data.length; i++) - { - worker.userStep({ - data: msg.results.data[i], - errors: msg.results.errors, - meta: msg.results.meta - }, handle); - if (aborted) - break; - } - delete msg.results; // free memory ASAP - } - else if (isFunction(worker.userChunk)) - { - worker.userChunk(msg.results, handle, msg.file); - delete msg.results; - } - } - - if (msg.finished && !aborted) - completeWorker(msg.workerId, msg.results); - } - - function completeWorker(workerId, results) { - var worker = workers[workerId]; - if (isFunction(worker.userComplete)) - worker.userComplete(results); - worker.terminate(); - delete workers[workerId]; - } - - function notImplemented() { - throw new Error('Not implemented.'); - } - - /** Callback when worker thread receives a message */ - function workerThreadReceivedMessage(e) - { - var msg = e.data; - - if (typeof Papa.WORKER_ID === 'undefined' && msg) - Papa.WORKER_ID = msg.workerId; - - if (typeof msg.input === 'string') - { - global.postMessage({ - workerId: Papa.WORKER_ID, - results: Papa.parse(msg.input, msg.config), - finished: true - }); - } - else if ((global.File && msg.input instanceof File) || msg.input instanceof Object) // thank you, Safari (see issue #106) - { - var results = Papa.parse(msg.input, msg.config); - if (results) - global.postMessage({ - workerId: Papa.WORKER_ID, - results: results, - finished: true - }); - } - } - - /** Makes a deep copy of an array or object (mostly) */ - function copy(obj) - { - if (typeof obj !== 'object' || obj === null) - return obj; - var cpy = Array.isArray(obj) ? [] : {}; - for (var key in obj) - cpy[key] = copy(obj[key]); - return cpy; - } - - function bindFunction(f, self) - { - return function() { f.apply(self, arguments); }; - } - - function isFunction(func) - { - return typeof func === 'function'; - } - - return Papa; -})); diff --git a/js/papaparse.min.js b/js/papaparse.min.js deleted file mode 100644 index 2876359..0000000 --- a/js/papaparse.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/* @license -Papa Parse -v5.2.0 -https://github.com/mholt/PapaParse -License: MIT -*/ -!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof module&&"undefined"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){"use strict";var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob(["(",r,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&U(e.read)&&U(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",v="\r\n",s='"',a=s+s,i=!1,r=null;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);"string"==typeof t.newline&&(v=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s)}();var o=new RegExp(q(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||h(e[0]),e,i)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:h(e.data[0])),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function h(e){if("object"!=typeof e)return[];var t=[];for(var i in e)t.push(i);return t}function u(e,t,i){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(U(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!U(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+i)}try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t))}}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)):r=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(r.error)}}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=""),this._finished=!i,this.parseChunk(e)}}}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData("")},this),this._streamCleanUp=y(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function i(m){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)(e[-+]?\d+)?\s*$/,u=/(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(U(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;i+=e.data.length,m.preview&&i>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function v(e){return"greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),h=!1),m.skipEmptyLines)for(var e=0;e=l.length?"__parsed_extra":l[i]),m.transform&&(s=m.transform(s,n)),s=y(n,s),"__parsed_extra"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s}return m.header&&(i>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+i,f+t):i=r.length/2?"\r\n":"\r"}(e,r)),h=!1,m.delimiter)U(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,i,r,n){var s,a,o,h;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u=L)return R(!0)}else for(m=M,M++;;){if(-1===(m=a.indexOf(O,m+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:M}),E();if(m===r-1)return E(a.substring(M,m).replace(_,O));if(O!==z||a[m+1]!==z){if(O===z||0===m||a[m-1]!==z){-1!==p&&p=L)return R(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:M}),m++}}else m++}return E();function b(e){h.push(e),d=M}function w(e){var t=0;if(-1!==e){var i=a.substring(m+1,e);i&&""===i.trim()&&(t=i.length)}return t}function E(e){return i||(void 0===e&&(e=a.substring(M)),f.push(e),M=r,b(f),o&&S()),R()}function C(e){M=e,b(f),f=[],g=a.indexOf(I,M)}function R(e){return{data:h,errors:u,meta:{delimiter:D,linebreak:I,aborted:j,truncated:!!e,cursor:d+(t||0)}}}function S(){A(R()),h=[],u=[]}function x(e,t,i){var r={nextDelim:void 0,quoteSearch:void 0},n=a.indexOf(O,t+1);if(t arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - function _createForOfIteratorHelper(o, allowArrayLike) { - var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; - - if (!it) { - if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { - if (it) o = it; - var i = 0; - - var F = function () {}; - - return { - s: F, - n: function () { - if (i >= o.length) return { - done: true - }; - return { - done: false, - value: o[i++] - }; - }, - e: function (e) { - throw e; - }, - f: F - }; - } - - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - var normalCompletion = true, - didErr = false, - err; - return { - s: function () { - it = it.call(o); - }, - n: function () { - var step = it.next(); - normalCompletion = step.done; - return step; - }, - e: function (e) { - didErr = true; - err = e; - }, - f: function () { - try { - if (!normalCompletion && it.return != null) it.return(); - } finally { - if (didErr) throw err; - } - } - }; - } - - var script$2 = { - inheritAttrs: false, - name: 'vue-input', - props: { - autocomplete: { - required: false, - type: String - }, - modelValue: { - required: true, - type: String - }, - placeholder: { - required: true, - type: String - }, - disabled: { - required: true, - type: Boolean - }, - tabindex: { - required: true, - type: Number - }, - autofocus: { - required: true, - type: Boolean - }, - comboboxUid: { - required: true, - type: Number - } - }, - emits: ['update:modelValue', 'input', 'change', 'focus', 'blur', 'escape'], - setup: function setup(props, context) { - var handleInput = function handleInput(event) { - context.emit('input', event); - context.emit('update:modelValue', event.target.value); - }; - - var handleChange = function handleChange(event) { - context.emit('change', event); - context.emit('update:modelValue', event.target.value); - }; - - var handleFocus = function handleFocus(event) { - context.emit('focus', event); - }; - - var handleBlur = function handleBlur(event) { - context.emit('blur', event); - }; - - var input = vue.ref(null); - - var handleEscape = function handleEscape(event) { - input.value.blur(); - context.emit('escape', event); - }; - - vue.onMounted(function () { - if (props.autofocus) input.value.focus(); - }); - vue.onUpdated(function () { - if (props.autofocus) input.value.focus(); - }); - return { - handleInput: handleInput, - handleChange: handleChange, - handleFocus: handleFocus, - handleBlur: handleBlur, - input: input, - handleEscape: handleEscape - }; - } - }; - - var _hoisted_1$2 = { - "class": "vue-input" - }; - var _hoisted_2$2 = ["autocomplete", "modelValue", "placeholder", "disabled", "tabindex", "autofocus", "aria-controls", "aria-labelledby"]; - function render$3(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [vue.renderSlot(_ctx.$slots, "prepend"), vue.createElementVNode("input", { - ref: "input", - autocomplete: $props.autocomplete, - modelValue: $props.modelValue, - placeholder: $props.placeholder, - disabled: $props.disabled, - onInput: _cache[0] || (_cache[0] = function () { - return $setup.handleInput && $setup.handleInput.apply($setup, arguments); - }), - onChange: _cache[1] || (_cache[1] = function () { - return $setup.handleChange && $setup.handleChange.apply($setup, arguments); - }), - onFocus: _cache[2] || (_cache[2] = function () { - return $setup.handleFocus && $setup.handleFocus.apply($setup, arguments); - }), - onBlur: _cache[3] || (_cache[3] = function () { - return $setup.handleBlur && $setup.handleBlur.apply($setup, arguments); - }), - onKeyup: _cache[4] || (_cache[4] = vue.withKeys(vue.withModifiers(function () { - return $setup.handleEscape && $setup.handleEscape.apply($setup, arguments); - }, ["exact"]), ["esc"])), - tabindex: $props.tabindex, - autofocus: $props.autofocus, - "aria-autocomplete": "list", - "aria-controls": "vs".concat($props.comboboxUid, "-listbox"), - "aria-labelledby": "vs".concat($props.comboboxUid, "-combobox") - }, null, 40 - /* PROPS, HYDRATE_EVENTS */ - , _hoisted_2$2), vue.renderSlot(_ctx.$slots, "append")]); - } - - script$2.render = render$3; - script$2.__file = "src/components/input.vue"; - - var script$1 = { - inheritAttrs: false, - name: 'vue-tags', - props: { - modelValue: { - required: true, - type: Array, - validator: function validator(modelValue) { - return modelValue.every(function (option) { - return _typeof(option.key) !== undefined && option.label !== undefined && typeof option.selected === 'boolean'; - }); - } - }, - collapseTags: { - type: Boolean - } - }, - emits: ['click'], - setup: function setup(props, context) { - var dataAttrs = vue.inject('dataAttrs'); - - var handleClick = function handleClick(event) { - context.emit('click', event); - }; - - return { - dataAttrs: dataAttrs, - handleClick: handleClick - }; - } - }; - - function render$2(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("ul", vue.mergeProps({ - "class": ["vue-tags", { - collapsed: $props.collapseTags - }], - onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(function () {}, ["prevent"])), - tabindex: "-1", - onClick: _cache[1] || (_cache[1] = function () { - return $setup.handleClick && $setup.handleClick.apply($setup, arguments); - }) - }, $setup.dataAttrs), [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.modelValue, function (option) { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, { - key: option.key - }, [!option.group ? (vue.openBlock(), vue.createElementBlock("li", { - key: 0, - "class": vue.normalizeClass(["vue-tag", { - selected: option.selected - }]) - }, [vue.renderSlot(_ctx.$slots, "default", { - option: option - }, function () { - return [vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1 - /* TEXT */ - )]; - })], 2 - /* CLASS */ - )) : vue.createCommentVNode("v-if", true)], 64 - /* STABLE_FRAGMENT */ - ); - }), 128 - /* KEYED_FRAGMENT */ - ))], 16 - /* FULL_PROPS */ - ); - } - - script$1.render = render$2; - script$1.__file = "src/components/tags.vue"; - - var script = { - inheritAttrs: false, - name: 'vue-dropdown', - props: { - modelValue: { - required: true, - type: Array, - validator: function validator(modelValue) { - return modelValue.every(function (option) { - return _typeof(option.key) !== undefined && option.label !== undefined && typeof option.selected === 'boolean'; - }); - } - }, - comboboxUid: { - required: true, - type: Number - }, - maxHeight: { - required: true - }, - highlightedOriginalIndex: { - required: true - } - }, - emits: ['click-item', 'mouseenter'], - setup: function setup(props, context) { - var dataAttrs = vue.inject('dataAttrs'); - - var handleClickItem = function handleClickItem(event, option) { - if (option.disabled) return; - context.emit('click-item', event, option); - }; - - var handleMouseenter = function handleMouseenter(event, option) { - context.emit('mouseenter', event, option); - }; - - return { - dataAttrs: dataAttrs, - handleClickItem: handleClickItem, - handleMouseenter: handleMouseenter - }; - } - }; - - var _hoisted_1$1 = ["id", "aria-multiselectable", "aria-busy", "aria-disabled"]; - var _hoisted_2$1 = ["onClick", "onMouseenter", "id", "aria-selected", "aria-disabled"]; - function render$1(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("ul", vue.mergeProps({ - "class": "vue-dropdown", - style: { - maxHeight: $props.maxHeight + 'px' - }, - onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(function () {}, ["prevent"])) - }, $setup.dataAttrs, { - role: "listbox", - id: "vs".concat($props.comboboxUid, "-listbox"), - "aria-multiselectable": $setup.dataAttrs['data-multiple'], - "aria-busy": $setup.dataAttrs['data-loading'], - "aria-disabled": $setup.dataAttrs['data-disabled'] - }), [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.modelValue, function (option, index) { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, { - key: option.key - }, [option.visible && option.hidden === false ? (vue.openBlock(), vue.createElementBlock("li", { - key: 0, - onClick: function onClick($event) { - return $setup.handleClickItem($event, option); - }, - "class": vue.normalizeClass(["vue-dropdown-item", { - selected: option.selected, - disabled: option.disabled, - highlighted: option.originalIndex === $props.highlightedOriginalIndex, - group: option.group - }]), - onMouseenter: function onMouseenter($event) { - return $setup.handleMouseenter($event, option); - }, - role: "option", - id: "vs".concat($props.comboboxUid, "-option-").concat(index), - "aria-selected": option.selected ? true : option.disabled ? undefined : false, - "aria-disabled": option.disabled - }, [vue.renderSlot(_ctx.$slots, "default", { - option: option - }, function () { - return [vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1 - /* TEXT */ - )]; - })], 42 - /* CLASS, PROPS, HYDRATE_EVENTS */ - , _hoisted_2$1)) : vue.createCommentVNode("v-if", true)], 64 - /* STABLE_FRAGMENT */ - ); - }), 128 - /* KEYED_FRAGMENT */ - ))], 16 - /* FULL_PROPS */ - , _hoisted_1$1); - } - - script.render = render$1; - script.__file = "src/components/dropdown.vue"; - - var isSameOption = function isSameOption(option1, option2, _ref) { - var valueBy = _ref.valueBy; - return valueBy(option1) === valueBy(option2); - }; - var hasOption = function hasOption(options, option, _ref2) { - var valueBy = _ref2.valueBy; - return options.some(function (_option) { - return isSameOption(_option, option, { - valueBy: valueBy - }); - }); - }; - var getOptionByValue = function getOptionByValue(options, value, _ref3) { - var valueBy = _ref3.valueBy; - return options.find(function (option) { - return valueBy(option) === value; - }); - }; - var addOption = function addOption(selectedOptions, option, _ref4) { - var max = _ref4.max, - valueBy = _ref4.valueBy; - if (hasOption(selectedOptions, option, { - valueBy: valueBy - })) return selectedOptions; - if (selectedOptions.length >= max) return selectedOptions; - return selectedOptions.concat(option); - }; - var removeOption = function removeOption(selectedOptions, option, _ref5) { - var min = _ref5.min, - valueBy = _ref5.valueBy; - if (hasOption(selectedOptions, option, { - valueBy: valueBy - }) === false) return selectedOptions; - if (selectedOptions.length <= min) return selectedOptions; - return selectedOptions.filter(function (_option) { - return isSameOption(_option, option, { - valueBy: valueBy - }) === false; - }); - }; - - var createComputedForGetterFunction = function createComputedForGetterFunction(maybePathFunc) { - return vue.computed(function () { - return typeof maybePathFunc.value === 'function' ? maybePathFunc.value : typeof maybePathFunc.value === 'string' ? function (option) { - return maybePathFunc.value.split('.').reduce(function (value, key) { - return value[key]; - }, option); - } : function (option) { - return option; - }; - }); - }; - - var normalize = (function (props) { - var normalized = vue.reactive({}); - var labelBy = createComputedForGetterFunction(vue.toRef(props, 'labelBy')); - vue.watchEffect(function () { - return normalized.labelBy = labelBy.value; - }); - var valueBy = createComputedForGetterFunction(vue.toRef(props, 'valueBy')); - vue.watchEffect(function () { - return normalized.valueBy = valueBy.value; - }); - var disabledBy = createComputedForGetterFunction(vue.toRef(props, 'disabledBy')); - vue.watchEffect(function () { - return normalized.disabledBy = disabledBy.value; - }); - var groupBy = createComputedForGetterFunction(vue.toRef(props, 'groupBy')); - vue.watchEffect(function () { - return normalized.groupBy = groupBy.value; - }); - var min = vue.computed(function () { - return props.multiple ? props.min : Math.min(1, props.min); - }); - vue.watchEffect(function () { - return normalized.min = min.value; - }); - var max = vue.computed(function () { - return props.multiple ? props.max : 1; - }); - vue.watchEffect(function () { - return normalized.max = max.value; - }); - vue.watchEffect(function () { - return normalized.options = props.options; - }); - return normalized; - }); - - var usePointer = function usePointer(options, highlightedOriginalIndex) { - var pointerForward = function pointerForward() { - if (isSomeSelectable.value === false) return; - if (highlightedOriginalIndex.value === null) return; - var tempOriginalIndex = highlightedOriginalIndex.value + 1; - var safeCount = 0; - - while (tempOriginalIndex !== highlightedOriginalIndex.value && safeCount++ < options.value.length) { - if (options.value.length <= tempOriginalIndex) tempOriginalIndex = 0; - if (pointerSet(tempOriginalIndex)) break; - ++tempOriginalIndex; - } - }; - - var pointerBackward = function pointerBackward() { - if (isSomeSelectable.value === false) return; - if (highlightedOriginalIndex.value === null) return; - var tempOriginalIndex = highlightedOriginalIndex.value - 1; - var safeCount = 0; - - while (tempOriginalIndex !== highlightedOriginalIndex.value && safeCount++ < options.value.length) { - if (tempOriginalIndex < 0) tempOriginalIndex = options.value.length - 1; - if (pointerSet(tempOriginalIndex)) break; - --tempOriginalIndex; - } - }; - - var originalIndexToOption = vue.computed(function () { - return options.value.reduce(function (acc, option) { - return Object.assign(acc, _defineProperty({}, option.originalIndex, option)); - }, {}); - }); - - var pointerSet = function pointerSet(originalIndex) { - var option = originalIndexToOption.value[originalIndex]; - if (option === undefined) return false; - if (isSelectable(option) === false) return false; - highlightedOriginalIndex.value = originalIndex; - return true; - }; - - var isSelectable = function isSelectable(option) { - return !option.disabled && !option.hidden && option.visible; - }; - - var isSomeSelectable = vue.computed(function () { - return options.value.some(function (option) { - return isSelectable(option); - }); - }); - vue.watchEffect(function () { - if (isSomeSelectable.value === false) highlightedOriginalIndex.value = null; - - if (highlightedOriginalIndex.value !== null && options.value.length <= highlightedOriginalIndex.value) { - var _iterator = _createForOfIteratorHelper(options.value.reverse()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var option = _step.value; - if (pointerSet(option.originalIndex)) break; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } - - if (highlightedOriginalIndex.value === null || isSelectable(options.value[highlightedOriginalIndex.value]) === false) { - var _iterator2 = _createForOfIteratorHelper(options.value), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var _option = _step2.value; - if (pointerSet(_option.originalIndex)) break; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - } - }); - return { - pointerForward: pointerForward, - pointerBackward: pointerBackward, - pointerSet: pointerSet - }; - }; - - var version = "2.10.4"; - - function escapeRegExp(pattern) { - // $& means the whole matched string - return pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - - var VueSelect = vue.defineComponent({ - name: 'vue-select', - inheritAttrs: false, - props: { - // modelValue - modelValue: { - required: true - }, - // TODO: default to `undefined` in next major version - // https://github.com/vuejs/vue-next/issues/3744 - emptyModelValue: {}, - // options - options: { - required: true, - type: Array - }, - // TODO: default to `'label'` in next major version - labelBy: { - type: [String, Function] - }, - // TODO: default to `'value'` in next major version - valueBy: { - type: [String, Function] - }, - disabledBy: { - "default": 'disabled', - type: [String, Function] - }, - groupBy: { - "default": 'group', - type: [String, Function] - }, - // TODO: default to `undefined` in next major version - visibleOptions: { - type: Array, - "default": null - }, - // multiple - multiple: { - "default": false, - type: Boolean - }, - min: { - "default": 0, - type: Number - }, - max: { - "default": Infinity, - type: Number - }, - // search - searchable: { - "default": false, - type: Boolean - }, - searchPlaceholder: { - "default": 'Type to search', - type: String - }, - clearOnSelect: { - "default": false, - type: Boolean - }, - clearOnClose: { - "default": false, - type: Boolean - }, - // tag - taggable: { - "default": false, - type: Boolean - }, - collapseTags: { - "default": false, - type: Boolean - }, - // misc - autocomplete: { - "default": 'off', - type: String - }, - disabled: { - "default": false, - type: Boolean - }, - loading: { - "default": false, - type: Boolean - }, - closeOnSelect: { - "default": false, - type: Boolean - }, - hideSelected: { - "default": false, - type: Boolean - }, - placeholder: { - "default": 'Select option', - type: String - }, - tabindex: { - "default": 0, - type: Number - }, - autofocus: { - "default": false, - type: Boolean - }, - maxHeight: { - "default": 300, - type: Number - }, - openDirection: { - type: String, - validator: function validator(value) { - return ['top', 'bottom'].includes(value); - } - } - }, - emits: ['selected', 'removed', 'update:modelValue', 'focus', 'blur', 'toggle', // TODO: remove use `opened` in next major version - 'opened', // TODO: remove use `opened` in next major version - 'closed', 'search:input', 'search:change', 'search:focus', 'search:blur'], - setup: function setup(props, context) { - var normalized = normalize(props); - var normalizedEmptyModelValue = vue.computed(function () { - var _a; - - return (_a = props.emptyModelValue) !== null && _a !== void 0 ? _a : null; - }); - var instance = vue.getCurrentInstance(); - var wrapper = vue.ref(); - var dropdown = vue.ref(); - var input = vue.ref(); - var inputEl = vue.computed(function () { - var _a; - - return (_a = input.value) === null || _a === void 0 ? void 0 : _a._.refs.input; - }); - var isFocusing = vue.ref(false); - vue.watch(function () { - return isFocusing.value; - }, function () { - var _a, _b; - - if (isFocusing.value) { - context.emit('opened'); - context.emit('focus'); - - if (props.searchable) { - if (inputEl.value !== document.activeElement) { - inputEl.value.focus(); - } - - context.emit('search:focus'); - } else { - (_a = wrapper.value) === null || _a === void 0 ? void 0 : _a.focus(); - } - } else { - if (props.searchable) { - if (inputEl.value === document.activeElement) { - inputEl.value.blur(); - } - - if (props.clearOnClose) clearInput(); - context.emit('search:blur'); - } else { - (_b = wrapper.value) === null || _b === void 0 ? void 0 : _b.blur(); - } - - context.emit('closed'); - context.emit('blur'); - } - - context.emit('toggle'); - }); - - var focus = function focus() { - if (props.disabled) return; - isFocusing.value = true; - }; - - var blur = function blur(e) { - var _a; - - if ((_a = wrapper.value) === null || _a === void 0 ? void 0 : _a.contains(e === null || e === void 0 ? void 0 : e.relatedTarget)) { - setTimeout(function () { - var _a; - - (_a = wrapper.value) === null || _a === void 0 ? void 0 : _a.focus(); - }); - return; - } - - isFocusing.value = false; - }; - - var toggle = function toggle() { - if (isFocusing.value) blur();else focus(); - }; - - vue.watch(function () { - return props.disabled; - }, function () { - return blur(); - }); // input - - var searchingInputValue = vue.ref(''); - - var handleInputForInput = function handleInputForInput(event) { - context.emit('search:input', event); - }; - - var handleChangeForInput = function handleChangeForInput(event) { - context.emit('search:change', event); - }; - - var handleFocusForInput = function handleFocusForInput(event) { - focus(); - }; - - var handleBlurForInput = function handleBlurForInput(event) { - blur(); - }; - - var searchRe = vue.computed(function () { - return new RegExp(escapeRegExp(searchingInputValue.value), 'i'); - }); - var searchedOptions = vue.computed(function () { - return searchingInputValue.value ? normalized.options.filter(function (option) { - return searchRe.value.test(normalized.labelBy(option)); - }) : undefined; - }); // sync model value - - var normalizedModelValue = vue.ref([]); - var selectedValueSet = vue.computed(function () { - return new Set(normalizedModelValue.value.map(function (option) { - return normalized.valueBy(option); - })); - }); - - var isSynchronoused = function isSynchronoused() { - if (props.multiple) { - if (Array.isArray(props.modelValue) === false) return false; - if (normalizedModelValue.value.length !== props.modelValue.length) return false; - if (Object.keys(normalizedModelValue.value).some(function (index) { - return normalizedModelValue.value[index] !== getOptionByValue(normalized.options, props.modelValue[index], { - valueBy: normalized.valueBy - }); - })) return false; - } else { - if (normalizedModelValue.value.length === 0 && props.modelValue !== normalizedEmptyModelValue.value) return false; - if (normalizedModelValue.value.length === 1 && props.modelValue === normalizedEmptyModelValue.value) return false; - if (normalizedModelValue.value[0] !== getOptionByValue(normalized.options, props.modelValue, { - valueBy: normalized.valueBy - })) return false; - } - - return true; - }; - - var syncFromModelValue = function syncFromModelValue() { - if (isSynchronoused()) return; - normalizedModelValue.value = []; - var modelValue = props.multiple ? props.modelValue : props.modelValue === normalizedEmptyModelValue.value ? [] : [props.modelValue]; - - var _iterator = _createForOfIteratorHelper(modelValue), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var value = _step.value; - var option = getOptionByValue(normalized.options, value, { - valueBy: normalized.valueBy - }); // guarantee options has modelValue - - if (hasOption(normalized.options, option, { - valueBy: normalized.valueBy - }) === false) continue; - normalizedModelValue.value = addOption(normalizedModelValue.value, option, { - max: Infinity, - valueBy: normalized.valueBy - }); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - }; - - syncFromModelValue(); - vue.watch(function () { - return props.modelValue; - }, function () { - return syncFromModelValue(); - }, { - deep: true - }); // guarantee options has modelValue - - vue.watch(function () { - return normalized.options; - }, function () { - normalizedModelValue.value = normalized.options.filter(function (option) { - return selectedValueSet.value.has(normalized.valueBy(option)); - }); - }, { - deep: true - }); - - var addOrRemoveOption = function addOrRemoveOption(event, option) { - if (props.disabled) return; // TODO: hot spot, improve performance - - if (option.group && props.multiple) addOrRemoveOptionForGroupOption(event, option);else addOrRemoveOptionForNonGroupOption(event, option); - syncToModelValue(); - if (props.closeOnSelect === true) isFocusing.value = false; - if (props.clearOnSelect === true && searchingInputValue.value) clearInput(); - }; - - var addOrRemoveOptionForGroupOption = function addOrRemoveOptionForGroupOption(event, option) { - option = option.originalOption; - var has = option.value.every(function (value) { - var option = getOptionByValue(normalized.options, value, { - valueBy: normalized.valueBy - }); - return hasOption(normalizedModelValue.value, option, { - valueBy: normalized.valueBy - }); - }); - - if (has) { - option.value.forEach(function (value) { - var option = getOptionByValue(normalized.options, value, { - valueBy: normalized.valueBy - }); - normalizedModelValue.value = removeOption(normalizedModelValue.value, option, { - min: normalized.min, - valueBy: normalized.valueBy - }); - context.emit('removed', option); - }); - } else { - option.value.forEach(function (value) { - var option = getOptionByValue(normalized.options, value, { - valueBy: normalized.valueBy - }); - if (hasOption(normalizedModelValue.value, option, { - valueBy: normalized.valueBy - })) return; - normalizedModelValue.value = addOption(normalizedModelValue.value, option, { - max: normalized.max, - valueBy: normalized.valueBy - }); - context.emit('selected', option); - }); - } - }; - - var addOrRemoveOptionForNonGroupOption = function addOrRemoveOptionForNonGroupOption(event, option) { - option = option.originalOption; - - if (hasOption(normalizedModelValue.value, option, { - valueBy: normalized.valueBy - })) { - normalizedModelValue.value = removeOption(normalizedModelValue.value, option, { - min: normalized.min, - valueBy: normalized.valueBy - }); - context.emit('removed', option); - } else { - if (!props.multiple && normalizedModelValue.value.length === 1) { - var removingOption = normalizedModelValue.value[0]; - normalizedModelValue.value = removeOption(normalizedModelValue.value, normalizedModelValue.value[0], { - min: 0, - valueBy: normalized.valueBy - }); - context.emit('removed', removingOption); - } - - normalizedModelValue.value = addOption(normalizedModelValue.value, option, { - max: normalized.max, - valueBy: normalized.valueBy - }); - context.emit('selected', option); - } - }; - - var syncToModelValue = function syncToModelValue() { - if (isSynchronoused()) return; - var selectedValues = normalizedModelValue.value.map(function (option) { - return normalized.valueBy(option); - }); - - if (props.multiple) { - context.emit('update:modelValue', selectedValues); - } else { - if (selectedValues.length) context.emit('update:modelValue', selectedValues[0]);else context.emit('update:modelValue', normalizedEmptyModelValue.value); - } - }; - - var clearInput = function clearInput() { - // simulate clear input value - inputEl.value.value = ''; - inputEl.value.dispatchEvent(new Event('input')); - inputEl.value.dispatchEvent(new Event('change')); - }; - - var renderedOptions = vue.computed(function () { - var _a, _b; - - return (_b = (_a = props.visibleOptions) !== null && _a !== void 0 ? _a : searchedOptions.value) !== null && _b !== void 0 ? _b : normalized.options; - }); - var highlightedOriginalIndex = vue.ref(0); - var optionsWithInfo = vue.computed(function () { - var visibleValueSet = new Set(renderedOptions.value.map(function (option) { - return normalized.valueBy(option); - })); - var optionsWithInfo = normalized.options.map(function (option, index) { - var _a; - - var optionWithInfo = { - key: normalized.valueBy(option), - label: normalized.labelBy(option), - // selected: selectedValueSet.value.has(normalized.valueBy(option)), - // disabled: normalized.disabledBy(option), - group: (_a = normalized.groupBy(option)) !== null && _a !== void 0 ? _a : false, - // visible: visibleValueSet.has(normalized.valueBy(option)), - // hidden: props.hideSelected ? selectedValueSet.value.has(normalized.valueBy(option)) : false, - originalIndex: index, - originalOption: option - }; - optionWithInfo.selected = optionWithInfo.group ? option.value.every(function (value) { - return selectedValueSet.value.has(value); - }) : selectedValueSet.value.has(normalized.valueBy(option)); - optionWithInfo.disabled = optionWithInfo.group ? normalized.disabledBy(option) || option.value.every(function (value) { - var option = getOptionByValue(normalized.options, value, { - valueBy: normalized.valueBy - }); - return normalized.disabledBy(option); - }) : normalized.disabledBy(option); - optionWithInfo.visible = optionWithInfo.group ? option.value.some(function (value) { - return visibleValueSet.has(value); - }) : visibleValueSet.has(normalized.valueBy(option)); - optionWithInfo.hidden = props.hideSelected ? optionWithInfo.group ? option.value.every(function (value) { - return selectedValueSet.value.has(value); - }) : selectedValueSet.value.has(normalized.valueBy(option)) : false; - return optionWithInfo; - }); - - var _iterator2 = _createForOfIteratorHelper(optionsWithInfo), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var option = _step2.value; - if (option.group === false) continue; - - if (option.disabled) { - (function () { - var values = new Set(option.originalOption.value); - optionsWithInfo.filter(function (optionWithInfo) { - return values.has(normalized.valueBy(optionWithInfo.originalOption)); - }).forEach(function (optionWithInfo) { - return optionWithInfo.disabled = true; - }); - })(); - } - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - - return optionsWithInfo; - }); - - var _usePointer = usePointer(optionsWithInfo, highlightedOriginalIndex), - _pointerForward = _usePointer.pointerForward, - _pointerBackward = _usePointer.pointerBackward, - pointerSet = _usePointer.pointerSet; - - var pointerForward = function pointerForward() { - _pointerForward(); - - vue.nextTick(updateScrollTop); - }; - - var pointerBackward = function pointerBackward() { - _pointerBackward(); - - vue.nextTick(updateScrollTop); - }; - - var pointerFirst = function pointerFirst() { - var _iterator3 = _createForOfIteratorHelper(normalized.options.keys()), - _step3; - - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { - var index = _step3.value; - if (pointerSet(index)) break; - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - - vue.nextTick(updateScrollTop); - }; - - var pointerLast = function pointerLast() { - var _iterator4 = _createForOfIteratorHelper(_toConsumableArray(normalized.options.keys()).reverse()), - _step4; - - try { - for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { - var index = _step4.value; - if (pointerSet(index)) break; - } - } catch (err) { - _iterator4.e(err); - } finally { - _iterator4.f(); - } - - vue.nextTick(updateScrollTop); - }; - - var recentTypedChars = ''; - var timerForClearingRecentTypedChars; - var alphanumRe = /^[\w]$/; - var sortedOriginalIndexBaseOnHighlighted = vue.computed(function () { - var indexes = _toConsumableArray(normalized.options.keys()); - - return indexes.slice(highlightedOriginalIndex.value).concat(indexes.slice(0, highlightedOriginalIndex.value)); - }); - - var typeAhead = function typeAhead(event) { - var _a, _b; - - if (props.searchable) return; - var changed = false; - - if (alphanumRe.test(event.key)) { - recentTypedChars += event.key.toLowerCase(); - changed = true; - } else if (event.code === 'Space') { - recentTypedChars += ' '; - } - - if (changed) { - var _iterator5 = _createForOfIteratorHelper(sortedOriginalIndexBaseOnHighlighted.value), - _step5; - - try { - for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { - var index = _step5.value; - if (((_b = (_a = normalized.labelBy(normalized.options[index])) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.startsWith(recentTypedChars)) !== true) continue; - if (pointerSet(index)) break; - } - } catch (err) { - _iterator5.e(err); - } finally { - _iterator5.f(); - } - - clearTimeout(timerForClearingRecentTypedChars); - timerForClearingRecentTypedChars = setTimeout(function () { - recentTypedChars = ''; - }, 500); - } - }; - - var updateScrollTop = function updateScrollTop() { - var _a; - - var highlightedEl = (_a = wrapper.value) === null || _a === void 0 ? void 0 : _a.querySelector('.highlighted'); - if (!highlightedEl) return; - if (!dropdown.value) return; - var computedStyle = getComputedStyle(highlightedEl); - var safeCount; - safeCount = 0; - - while (highlightedEl.offsetTop + parseFloat(computedStyle.height) + parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom) > dropdown.value.$el.clientHeight + dropdown.value.$el.scrollTop && safeCount++ < optionsWithInfo.value.length) { - dropdown.value.$el.scrollTop = dropdown.value.$el.scrollTop + parseFloat(computedStyle.height) + parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); - } - - safeCount = 0; - - while (highlightedEl.offsetTop < dropdown.value.$el.scrollTop && safeCount++ < optionsWithInfo.value.length) { - dropdown.value.$el.scrollTop = dropdown.value.$el.scrollTop - parseFloat(computedStyle.height) - parseFloat(computedStyle.paddingTop) - parseFloat(computedStyle.paddingBottom); - } - }; - - vue.watch(function () { - return [isFocusing.value, normalized.options, selectedValueSet.value]; - }, function (_, oldValue) { - if ((oldValue === null || oldValue === void 0 ? void 0 : oldValue[0]) === true) return; - if (isFocusing.value === false) return; - if (normalizedModelValue.value.length === 0) return; - pointerSet(normalized.options.findIndex(function (option) { - return selectedValueSet.value.has(normalized.valueBy(option)); - })); - vue.nextTick(updateScrollTop); - }, { - deep: true, - immediate: true - }); - var dataAttrs = vue.computed(function () { - return { - 'data-is-focusing': isFocusing.value, - 'data-visible-length': optionsWithInfo.value.filter(function (option) { - return option.visible && option.hidden === false; - }).length, - 'data-not-selected-length': normalized.options.length - optionsWithInfo.value.filter(function (option) { - return option.selected; - }).length, - 'data-selected-length': optionsWithInfo.value.filter(function (option) { - return option.selected; - }).length, - 'data-addable': optionsWithInfo.value.filter(function (option) { - return option.selected; - }).length < normalized.max, - 'data-removable': optionsWithInfo.value.filter(function (option) { - return option.selected; - }).length > normalized.min, - 'data-total-length': normalized.options.length, - 'data-multiple': props.multiple, - 'data-loading': props.loading, - 'data-disabled': props.disabled - }; - }); - vue.provide('dataAttrs', dataAttrs); - var selectedOptions = vue.computed(function () { - return optionsWithInfo.value.filter(function (option) { - return option.selected; - }).filter(function (option) { - return !option.group; - }); - }); - var innerPlaceholder = vue.computed(function () { - if (props.multiple) { - if (selectedOptions.value.length === 0) { - return props.placeholder; - } else if (selectedOptions.value.length === 1) { - return '1 option selected'; - } else { - return selectedOptions.value.length + ' options selected'; - } - } else { - if (selectedOptions.value.length === 0) { - return props.placeholder; - } else { - return selectedOptions.value[0].label + ''; - } - } - }); - var selected = vue.computed(function () { - var selected = selectedOptions.value.map(function (option) { - return option.originalOption; - }); - if (props.multiple) return selected; - return selected[0] || normalizedEmptyModelValue.value; - }); - var direction = vue.ref(); - vue.watch(function () { - return [props.openDirection, isFocusing.value]; - }, function () { - var _a, _b; - - direction.value = (_b = (_a = props.openDirection) !== null && _a !== void 0 ? _a : calcPreferredDirection()) !== null && _b !== void 0 ? _b : 'bottom'; - }, { - immediate: true - }); - - function calcPreferredDirection() { - if (wrapper.value === undefined) return; - if (window === undefined) return; - var spaceBelow = window.innerHeight - wrapper.value.getBoundingClientRect().bottom; - var hasEnoughSpaceBelow = spaceBelow >= props.maxHeight; - return hasEnoughSpaceBelow ? 'bottom' : 'top'; - } - - return { - instance: instance, - isFocusing: isFocusing, - wrapper: wrapper, - dropdown: dropdown, - input: input, - focus: focus, - blur: blur, - toggle: toggle, - searchingInputValue: searchingInputValue, - handleInputForInput: handleInputForInput, - handleChangeForInput: handleChangeForInput, - handleFocusForInput: handleFocusForInput, - handleBlurForInput: handleBlurForInput, - optionsWithInfo: optionsWithInfo, - addOrRemoveOption: addOrRemoveOption, - dataAttrs: dataAttrs, - innerPlaceholder: innerPlaceholder, - selected: selected, - highlightedOriginalIndex: highlightedOriginalIndex, - pointerForward: pointerForward, - pointerBackward: pointerBackward, - pointerFirst: pointerFirst, - pointerLast: pointerLast, - typeAhead: typeAhead, - pointerSet: pointerSet, - direction: direction - }; - }, - components: { - VInput: script$2, - VTags: script$1, - VDropdown: script - } - }); - VueSelect.__VERSION__ = version; - - var _imports_0 = 'data:image/svg+xml;base64,PHN2ZyBpZD0iZGVsZXRlIiBkYXRhLW5hbWU9ImRlbGV0ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmRlbGV0ZTwvdGl0bGU+PHBhdGggZD0iTTI1NiwyNEMzODMuOSwyNCw0ODgsMTI4LjEsNDg4LDI1NlMzODMuOSw0ODgsMjU2LDQ4OCwyNC4wNiwzODMuOSwyNC4wNiwyNTYsMTI4LjEsMjQsMjU2LDI0Wk0wLDI1NkMwLDM5Ny4xNiwxMTQuODQsNTEyLDI1Niw1MTJTNTEyLDM5Ny4xNiw1MTIsMjU2LDM5Ny4xNiwwLDI1NiwwLDAsMTE0Ljg0LDAsMjU2WiIgZmlsbD0iIzViNWI1ZiIvPjxwb2x5Z29uIHBvaW50cz0iMzgyIDE3Mi43MiAzMzkuMjkgMTMwLjAxIDI1NiAyMTMuMjkgMTcyLjcyIDEzMC4wMSAxMzAuMDEgMTcyLjcyIDIxMy4yOSAyNTYgMTMwLjAxIDMzOS4yOCAxNzIuNzIgMzgyIDI1NiAyOTguNzEgMzM5LjI5IDM4MS45OSAzODIgMzM5LjI4IDI5OC43MSAyNTYgMzgyIDE3Mi43MiIgZmlsbD0iIzViNWI1ZiIvPjwvc3ZnPg=='; - - var _hoisted_1 = ["tabindex", "id", "role", "aria-expanded", "aria-owns", "aria-activedescendant", "aria-busy", "aria-disabled"]; - var _hoisted_2 = { - "class": "vue-select-header" - }; - var _hoisted_3 = { - key: 0, - "class": "vue-input" - }; - var _hoisted_4 = ["placeholder", "autocomplete"]; - var _hoisted_5 = ["onClick"]; - - var _hoisted_6 = /*#__PURE__*/vue.createElementVNode("span", { - "class": "icon loading" - }, [/*#__PURE__*/vue.createElementVNode("div"), /*#__PURE__*/vue.createElementVNode("div"), /*#__PURE__*/vue.createElementVNode("div")], -1 - /* HOISTED */ - ); - - var _hoisted_7 = { - key: 0, - "class": "vue-select-input-wrapper" - }; - - var _hoisted_8 = /*#__PURE__*/vue.createElementVNode("span", { - "class": "icon loading" - }, [/*#__PURE__*/vue.createElementVNode("div"), /*#__PURE__*/vue.createElementVNode("div"), /*#__PURE__*/vue.createElementVNode("div")], -1 - /* HOISTED */ - ); - - function render(_ctx, _cache, $props, $setup, $data, $options) { - var _component_v_tags = vue.resolveComponent("v-tags"); - - var _component_v_input = vue.resolveComponent("v-input"); - - var _component_v_dropdown = vue.resolveComponent("v-dropdown"); - - return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ - ref: "wrapper", - "class": ["vue-select", ["direction-".concat(_ctx.direction)]], - tabindex: _ctx.isFocusing ? -1 : _ctx.tabindex, - onFocus: _cache[9] || (_cache[9] = function () { - return _ctx.focus && _ctx.focus.apply(_ctx, arguments); - }), - onBlur: _cache[10] || (_cache[10] = function (e) { - return _ctx.searchable ? false : _ctx.blur(e); - }) - }, Object.assign({}, _ctx.dataAttrs, _ctx.$attrs), { - onKeypress: _cache[11] || (_cache[11] = vue.withKeys(vue.withModifiers(function () { - return _ctx.highlightedOriginalIndex !== null && _ctx.addOrRemoveOption(_ctx.$event, _ctx.optionsWithInfo[_ctx.highlightedOriginalIndex]); - }, ["prevent", "exact"]), ["enter"])), - onKeydown: [_cache[12] || (_cache[12] = vue.withKeys(vue.withModifiers(function () { - return _ctx.pointerForward && _ctx.pointerForward.apply(_ctx, arguments); - }, ["prevent", "exact"]), ["down"])), _cache[13] || (_cache[13] = vue.withKeys(vue.withModifiers(function () { - return _ctx.pointerBackward && _ctx.pointerBackward.apply(_ctx, arguments); - }, ["prevent", "exact"]), ["up"])), _cache[14] || (_cache[14] = vue.withKeys(vue.withModifiers(function () { - return _ctx.pointerFirst && _ctx.pointerFirst.apply(_ctx, arguments); - }, ["prevent", "exact"]), ["home"])), _cache[15] || (_cache[15] = vue.withKeys(vue.withModifiers(function () { - return _ctx.pointerLast && _ctx.pointerLast.apply(_ctx, arguments); - }, ["prevent", "exact"]), ["end"])), _cache[16] || (_cache[16] = function () { - return _ctx.typeAhead && _ctx.typeAhead.apply(_ctx, arguments); - })], - id: "vs".concat(_ctx.instance.uid, "-combobox"), - role: _ctx.searchable ? 'combobox' : null, - "aria-expanded": _ctx.isFocusing, - "aria-haspopup": "listbox", - "aria-owns": "vs".concat(_ctx.instance.uid, "-listbox"), - "aria-activedescendant": _ctx.highlightedOriginalIndex === null ? null : "vs".concat(_ctx.instance.uid, "-option-").concat(_ctx.highlightedOriginalIndex), - "aria-busy": _ctx.loading, - "aria-disabled": _ctx.disabled - }), [vue.createElementVNode("div", _hoisted_2, [_ctx.multiple && _ctx.taggable && _ctx.modelValue.length === 0 || _ctx.searchable === false && _ctx.taggable === false ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [vue.renderSlot(_ctx.$slots, "label", { - selected: _ctx.selected - }, function () { - return [vue.createElementVNode("input", { - placeholder: _ctx.innerPlaceholder, - autocomplete: _ctx.autocomplete, - readonly: "", - onClick: _cache[0] || (_cache[0] = function () { - return _ctx.focus && _ctx.focus.apply(_ctx, arguments); - }) - }, null, 8 - /* PROPS */ - , _hoisted_4)]; - })])) : vue.createCommentVNode("v-if", true), _ctx.multiple && _ctx.taggable ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { - key: 1 - }, [vue.createVNode(_component_v_tags, { - modelValue: _ctx.optionsWithInfo, - "collapse-tags": _ctx.collapseTags, - tabindex: "-1", - onClick: _ctx.focus - }, { - "default": vue.withCtx(function (_ref) { - var option = _ref.option; - return [vue.renderSlot(_ctx.$slots, "tag", { - option: option.originalOption, - remove: function remove() { - return _ctx.addOrRemoveOption(_ctx.$event, option); - } - }, function () { - return [vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1 - /* TEXT */ - ), vue.createElementVNode("img", { - src: _imports_0, - alt: "delete tag", - "class": "icon delete", - onClick: vue.withModifiers(function () { - return _ctx.addOrRemoveOption(_ctx.$event, option); - }, ["prevent", "stop"]) - }, null, 8 - /* PROPS */ - , _hoisted_5)]; - })]; - }), - _: 3 - /* FORWARDED */ - - }, 8 - /* PROPS */ - , ["modelValue", "collapse-tags", "onClick"]), vue.renderSlot(_ctx.$slots, "toggle", { - isFocusing: _ctx.isFocusing, - toggle: _ctx.toggle - }, function () { - return [vue.createElementVNode("span", { - "class": vue.normalizeClass(["icon arrow-downward", { - active: _ctx.isFocusing - }]), - onClick: _cache[1] || (_cache[1] = function () { - return _ctx.toggle && _ctx.toggle.apply(_ctx, arguments); - }), - onMousedown: _cache[2] || (_cache[2] = vue.withModifiers(function () {}, ["prevent", "stop"])) - }, null, 34 - /* CLASS, HYDRATE_EVENTS */ - )]; - })], 64 - /* STABLE_FRAGMENT */ - )) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { - key: 2 - }, [_ctx.searchable ? (vue.openBlock(), vue.createBlock(_component_v_input, { - key: 0, - ref: "input", - modelValue: _ctx.searchingInputValue, - "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { - return _ctx.searchingInputValue = $event; - }), - disabled: _ctx.disabled, - autocomplete: _ctx.autocomplete, - placeholder: _ctx.isFocusing ? _ctx.searchPlaceholder : _ctx.innerPlaceholder, - onInput: _ctx.handleInputForInput, - onChange: _ctx.handleChangeForInput, - onFocus: _ctx.handleFocusForInput, - onBlur: _ctx.handleBlurForInput, - onEscape: _ctx.blur, - autofocus: _ctx.autofocus || _ctx.taggable && _ctx.searchable, - tabindex: _ctx.tabindex, - comboboxUid: _ctx.instance.uid - }, null, 8 - /* PROPS */ - , ["modelValue", "disabled", "autocomplete", "placeholder", "onInput", "onChange", "onFocus", "onBlur", "onEscape", "autofocus", "tabindex", "comboboxUid"])) : vue.createCommentVNode("v-if", true), _ctx.loading ? vue.renderSlot(_ctx.$slots, "loading", { - key: 1 - }, function () { - return [_hoisted_6]; - }) : vue.renderSlot(_ctx.$slots, "toggle", { - key: 2, - isFocusing: _ctx.isFocusing, - toggle: _ctx.toggle - }, function () { - return [vue.createElementVNode("span", { - "class": vue.normalizeClass(["icon arrow-downward", { - active: _ctx.isFocusing - }]), - onClick: _cache[4] || (_cache[4] = function () { - return _ctx.toggle && _ctx.toggle.apply(_ctx, arguments); - }), - onMousedown: _cache[5] || (_cache[5] = vue.withModifiers(function () {}, ["prevent", "stop"])) - }, null, 34 - /* CLASS, HYDRATE_EVENTS */ - )]; - })], 64 - /* STABLE_FRAGMENT */ - ))]), _ctx.multiple && _ctx.taggable && _ctx.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [vue.withDirectives(vue.createVNode(_component_v_input, { - ref: "input", - modelValue: _ctx.searchingInputValue, - "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) { - return _ctx.searchingInputValue = $event; - }), - disabled: _ctx.disabled, - autocomplete: _ctx.autocomplete, - placeholder: _ctx.isFocusing ? _ctx.searchPlaceholder : _ctx.innerPlaceholder, - onInput: _ctx.handleInputForInput, - onChange: _ctx.handleChangeForInput, - onFocus: _ctx.handleFocusForInput, - onBlur: _ctx.handleBlurForInput, - onEscape: _ctx.blur, - autofocus: _ctx.autofocus || _ctx.taggable && _ctx.searchable, - tabindex: _ctx.tabindex, - comboboxUid: _ctx.instance.uid - }, null, 8 - /* PROPS */ - , ["modelValue", "disabled", "autocomplete", "placeholder", "onInput", "onChange", "onFocus", "onBlur", "onEscape", "autofocus", "tabindex", "comboboxUid"]), [[vue.vShow, _ctx.isFocusing]]), _ctx.loading ? vue.renderSlot(_ctx.$slots, "loading", { - key: 0 - }, function () { - return [_hoisted_8]; - }) : vue.createCommentVNode("v-if", true)])) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_v_dropdown, { - ref: "dropdown", - modelValue: _ctx.optionsWithInfo, - "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) { - return _ctx.optionsWithInfo = $event; - }), - onClickItem: _ctx.addOrRemoveOption, - onMouseenter: _cache[8] || (_cache[8] = function (ev, option) { - return _ctx.pointerSet(option.originalIndex); - }), - comboboxUid: _ctx.instance.uid, - maxHeight: _ctx.maxHeight, - highlightedOriginalIndex: _ctx.highlightedOriginalIndex - }, { - "default": vue.withCtx(function (_ref2) { - var option = _ref2.option; - return [vue.renderSlot(_ctx.$slots, "dropdown-item", { - option: option.originalOption - }, function () { - return [vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1 - /* TEXT */ - )]; - })]; - }), - _: 3 - /* FORWARDED */ - - }, 8 - /* PROPS */ - , ["modelValue", "onClickItem", "comboboxUid", "maxHeight", "highlightedOriginalIndex"])], 16 - /* FULL_PROPS */ - , _hoisted_1); - } - - VueSelect.render = render; - VueSelect.__file = "src/index.vue"; - - return VueSelect; - -})(Vue); diff --git a/js/vue-next-select.min.js b/js/vue-next-select.min.js deleted file mode 100644 index f225b13..0000000 --- a/js/vue-next-select.min.js +++ /dev/null @@ -1 +0,0 @@ -this.VueNextSelect=function(e){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){if(e){if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:l}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,u=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return u=e.done,e},e:function(e){i=!0,r=e},f:function(){try{u||null==n.return||n.return()}finally{if(i)throw r}}}}var r={inheritAttrs:!1,name:"vue-input",props:{autocomplete:{required:!1,type:String},modelValue:{required:!0,type:String},placeholder:{required:!0,type:String},disabled:{required:!0,type:Boolean},tabindex:{required:!0,type:Number},autofocus:{required:!0,type:Boolean},comboboxUid:{required:!0,type:Number}},emits:["update:modelValue","input","change","focus","blur","escape"],setup:function(t,n){var o=e.ref(null);return e.onMounted((function(){t.autofocus&&o.value.focus()})),e.onUpdated((function(){t.autofocus&&o.value.focus()})),{handleInput:function(e){n.emit("input",e),n.emit("update:modelValue",e.target.value)},handleChange:function(e){n.emit("change",e),n.emit("update:modelValue",e.target.value)},handleFocus:function(e){n.emit("focus",e)},handleBlur:function(e){n.emit("blur",e)},input:o,handleEscape:function(e){o.value.blur(),n.emit("escape",e)}}}},u={class:"vue-input"},i=["autocomplete","modelValue","placeholder","disabled","tabindex","autofocus","aria-controls","aria-labelledby"];r.render=function(t,n,o,a,l,r){return e.openBlock(),e.createElementBlock("div",u,[e.renderSlot(t.$slots,"prepend"),e.createElementVNode("input",{ref:"input",autocomplete:o.autocomplete,modelValue:o.modelValue,placeholder:o.placeholder,disabled:o.disabled,onInput:n[0]||(n[0]=function(){return a.handleInput&&a.handleInput.apply(a,arguments)}),onChange:n[1]||(n[1]=function(){return a.handleChange&&a.handleChange.apply(a,arguments)}),onFocus:n[2]||(n[2]=function(){return a.handleFocus&&a.handleFocus.apply(a,arguments)}),onBlur:n[3]||(n[3]=function(){return a.handleBlur&&a.handleBlur.apply(a,arguments)}),onKeyup:n[4]||(n[4]=e.withKeys(e.withModifiers((function(){return a.handleEscape&&a.handleEscape.apply(a,arguments)}),["exact"]),["esc"])),tabindex:o.tabindex,autofocus:o.autofocus,"aria-autocomplete":"list","aria-controls":"vs".concat(o.comboboxUid,"-listbox"),"aria-labelledby":"vs".concat(o.comboboxUid,"-combobox")},null,40,i),e.renderSlot(t.$slots,"append")])},r.__file="src/components/input.vue";var c={inheritAttrs:!1,name:"vue-tags",props:{modelValue:{required:!0,type:Array,validator:function(e){return e.every((function(e){return void 0!==t(e.key)&&void 0!==e.label&&"boolean"==typeof e.selected}))}},collapseTags:{type:Boolean}},emits:["click"],setup:function(t,n){return{dataAttrs:e.inject("dataAttrs"),handleClick:function(e){n.emit("click",e)}}}};c.render=function(t,n,o,a,l,r){return e.openBlock(),e.createElementBlock("ul",e.mergeProps({class:["vue-tags",{collapsed:o.collapseTags}],onMousedown:n[0]||(n[0]=e.withModifiers((function(){}),["prevent"])),tabindex:"-1",onClick:n[1]||(n[1]=function(){return a.handleClick&&a.handleClick.apply(a,arguments)})},a.dataAttrs),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.modelValue,(function(n){return e.openBlock(),e.createElementBlock(e.Fragment,{key:n.key},[n.group?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("li",{key:0,class:e.normalizeClass(["vue-tag",{selected:n.selected}])},[e.renderSlot(t.$slots,"default",{option:n},(function(){return[e.createElementVNode("span",null,e.toDisplayString(n.label),1)]}))],2))],64)})),128))],16)},c.__file="src/components/tags.vue";var d={inheritAttrs:!1,name:"vue-dropdown",props:{modelValue:{required:!0,type:Array,validator:function(e){return e.every((function(e){return void 0!==t(e.key)&&void 0!==e.label&&"boolean"==typeof e.selected}))}},comboboxUid:{required:!0,type:Number},maxHeight:{required:!0},highlightedOriginalIndex:{required:!0}},emits:["click-item","mouseenter"],setup:function(t,n){return{dataAttrs:e.inject("dataAttrs"),handleClickItem:function(e,t){t.disabled||n.emit("click-item",e,t)},handleMouseenter:function(e,t){n.emit("mouseenter",e,t)}}}},s=["id","aria-multiselectable","aria-busy","aria-disabled"],p=["onClick","onMouseenter","id","aria-selected","aria-disabled"];d.render=function(t,n,o,a,l,r){return e.openBlock(),e.createElementBlock("ul",e.mergeProps({class:"vue-dropdown",style:{maxHeight:o.maxHeight+"px"},onMousedown:n[0]||(n[0]=e.withModifiers((function(){}),["prevent"]))},a.dataAttrs,{role:"listbox",id:"vs".concat(o.comboboxUid,"-listbox"),"aria-multiselectable":a.dataAttrs["data-multiple"],"aria-busy":a.dataAttrs["data-loading"],"aria-disabled":a.dataAttrs["data-disabled"]}),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.modelValue,(function(n,l){return e.openBlock(),e.createElementBlock(e.Fragment,{key:n.key},[n.visible&&!1===n.hidden?(e.openBlock(),e.createElementBlock("li",{key:0,onClick:function(e){return a.handleClickItem(e,n)},class:e.normalizeClass(["vue-dropdown-item",{selected:n.selected,disabled:n.disabled,highlighted:n.originalIndex===o.highlightedOriginalIndex,group:n.group}]),onMouseenter:function(e){return a.handleMouseenter(e,n)},role:"option",id:"vs".concat(o.comboboxUid,"-option-").concat(l),"aria-selected":!!n.selected||!!n.disabled&&void 0,"aria-disabled":n.disabled},[e.renderSlot(t.$slots,"default",{option:n},(function(){return[e.createElementVNode("span",null,e.toDisplayString(n.label),1)]}))],42,p)):e.createCommentVNode("v-if",!0)],64)})),128))],16,s)},d.__file="src/components/dropdown.vue";var v=function(e,t,n){var o=n.valueBy;return o(e)===o(t)},f=function(e,t,n){var o=n.valueBy;return e.some((function(e){return v(e,t,{valueBy:o})}))},m=function(e,t,n){var o=n.valueBy;return e.find((function(e){return o(e)===t}))},g=function(e,t,n){var o=n.max,a=n.valueBy;return f(e,t,{valueBy:a})||e.length>=o?e:e.concat(t)},h=function(e,t,n){var o=n.min,a=n.valueBy;return!1===f(e,t,{valueBy:a})||e.length<=o?e:e.filter((function(e){return!1===v(e,t,{valueBy:a})}))},y=function(t){return e.computed((function(){return"function"==typeof t.value?t.value:"string"==typeof t.value?function(e){return t.value.split(".").reduce((function(e,t){return e[t]}),e)}:function(e){return e}}))},b=function(t,n){var o=e.computed((function(){return t.value.reduce((function(e,t){return Object.assign(e,(n={},o=t.originalIndex,a=t,o in n?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a,n));var n,o,a}),{})})),a=function(e){var t=o.value[e];return void 0!==t&&(!1!==r(t)&&(n.value=e,!0))},r=function(e){return!e.disabled&&!e.hidden&&e.visible},u=e.computed((function(){return t.value.some((function(e){return r(e)}))}));return e.watchEffect((function(){if(!1===u.value&&(n.value=null),null!==n.value&&t.value.length<=n.value){var e,o=l(t.value.reverse());try{for(o.s();!(e=o.n()).done;){var i=e.value;if(a(i.originalIndex))break}}catch(e){o.e(e)}finally{o.f()}}if(null===n.value||!1===r(t.value[n.value])){var c,d=l(t.value);try{for(d.s();!(c=d.n()).done;){var s=c.value;if(a(s.originalIndex))break}}catch(e){d.e(e)}finally{d.f()}}})),{pointerForward:function(){if(!1!==u.value&&null!==n.value)for(var e=n.value+1,o=0;e!==n.value&&o++c.value.$el.clientHeight+c.value.$el.scrollTop&&n++a.min,"data-total-length":a.options.length,"data-multiple":t.multiple,"data-loading":t.loading,"data-disabled":t.disabled}}));e.provide("dataAttrs",H);var _=e.computed((function(){return D.value.filter((function(e){return e.selected})).filter((function(e){return!e.group}))})),W=e.computed((function(){return t.multiple?0===_.value.length?t.placeholder:1===_.value.length?"1 option selected":_.value.length+" options selected":0===_.value.length?t.placeholder:_.value[0].label+""})),Z=e.computed((function(){var e=_.value.map((function(e){return e.originalOption}));return t.multiple?e:e[0]||r.value})),K=e.ref();return e.watch((function(){return[t.openDirection,p.value]}),(function(){var e,n;K.value=null!==(n=null!==(e=t.openDirection)&&void 0!==e?e:function(){if(void 0===i.value)return;if(void 0===window)return;return window.innerHeight-i.value.getBoundingClientRect().bottom>=t.maxHeight?"bottom":"top"}())&&void 0!==n?n:"bottom"}),{immediate:!0}),{instance:u,isFocusing:p,wrapper:i,dropdown:c,input:d,focus:v,blur:B,toggle:function(){p.value?B():v()},searchingInputValue:w,handleInputForInput:function(e){o.emit("search:input",e)},handleChangeForInput:function(e){o.emit("search:change",e)},handleFocusForInput:function(e){v()},handleBlurForInput:function(e){B()},optionsWithInfo:D,addOrRemoveOption:function(e,n){t.disabled||(n.group&&t.multiple?N(e,n):F(e,n),O(),!0===t.closeOnSelect&&(p.value=!1),!0===t.clearOnSelect&&w.value&&C())},dataAttrs:H,innerPlaceholder:W,selected:Z,highlightedOriginalIndex:T,pointerForward:function(){j(),e.nextTick(q)},pointerBackward:function(){z(),e.nextTick(q)},pointerFirst:function(){var t,n=l(a.options.keys());try{for(n.s();!(t=n.n()).done;){var o=t.value;if($(o))break}}catch(e){n.e(e)}finally{n.f()}e.nextTick(q)},pointerLast:function(){var t,o=l(n(a.options.keys()).reverse());try{for(o.s();!(t=o.n()).done;){var r=t.value;if($(r))break}}catch(e){o.e(e)}finally{o.f()}e.nextTick(q)},typeAhead:function(e){var n,o;if(!t.searchable){var r=!1;if(P.test(e.key)?(U+=e.key.toLowerCase(),r=!0):"Space"===e.code&&(U+=" "),r){var u,i=l(R.value);try{for(i.s();!(u=i.n()).done;){var c=u.value;if(!0===(null===(o=null===(n=a.labelBy(a.options[c]))||void 0===n?void 0:n.toLowerCase())||void 0===o?void 0:o.startsWith(U))&&$(c))break}}catch(e){i.e(e)}finally{i.f()}clearTimeout(S),S=setTimeout((function(){U=""}),500)}}},pointerSet:$,direction:K}},components:{VInput:r,VTags:c,VDropdown:d}});B.__VERSION__="2.10.4";var w=["tabindex","id","role","aria-expanded","aria-owns","aria-activedescendant","aria-busy","aria-disabled"],I={class:"vue-select-header"},x={key:0,class:"vue-input"},k=["placeholder","autocomplete"],V=["onClick"],M=e.createElementVNode("span",{class:"icon loading"},[e.createElementVNode("div"),e.createElementVNode("div"),e.createElementVNode("div")],-1),E={key:0,class:"vue-select-input-wrapper"},S=e.createElementVNode("span",{class:"icon loading"},[e.createElementVNode("div"),e.createElementVNode("div"),e.createElementVNode("div")],-1);return B.render=function(t,n,o,a,l,r){var u=e.resolveComponent("v-tags"),i=e.resolveComponent("v-input"),c=e.resolveComponent("v-dropdown");return e.openBlock(),e.createElementBlock("div",e.mergeProps({ref:"wrapper",class:["vue-select",["direction-".concat(t.direction)]],tabindex:t.isFocusing?-1:t.tabindex,onFocus:n[9]||(n[9]=function(){return t.focus&&t.focus.apply(t,arguments)}),onBlur:n[10]||(n[10]=function(e){return!t.searchable&&t.blur(e)})},Object.assign({},t.dataAttrs,t.$attrs),{onKeypress:n[11]||(n[11]=e.withKeys(e.withModifiers((function(){return null!==t.highlightedOriginalIndex&&t.addOrRemoveOption(t.$event,t.optionsWithInfo[t.highlightedOriginalIndex])}),["prevent","exact"]),["enter"])),onKeydown:[n[12]||(n[12]=e.withKeys(e.withModifiers((function(){return t.pointerForward&&t.pointerForward.apply(t,arguments)}),["prevent","exact"]),["down"])),n[13]||(n[13]=e.withKeys(e.withModifiers((function(){return t.pointerBackward&&t.pointerBackward.apply(t,arguments)}),["prevent","exact"]),["up"])),n[14]||(n[14]=e.withKeys(e.withModifiers((function(){return t.pointerFirst&&t.pointerFirst.apply(t,arguments)}),["prevent","exact"]),["home"])),n[15]||(n[15]=e.withKeys(e.withModifiers((function(){return t.pointerLast&&t.pointerLast.apply(t,arguments)}),["prevent","exact"]),["end"])),n[16]||(n[16]=function(){return t.typeAhead&&t.typeAhead.apply(t,arguments)})],id:"vs".concat(t.instance.uid,"-combobox"),role:t.searchable?"combobox":null,"aria-expanded":t.isFocusing,"aria-haspopup":"listbox","aria-owns":"vs".concat(t.instance.uid,"-listbox"),"aria-activedescendant":null===t.highlightedOriginalIndex?null:"vs".concat(t.instance.uid,"-option-").concat(t.highlightedOriginalIndex),"aria-busy":t.loading,"aria-disabled":t.disabled}),[e.createElementVNode("div",I,[t.multiple&&t.taggable&&0===t.modelValue.length||!1===t.searchable&&!1===t.taggable?(e.openBlock(),e.createElementBlock("div",x,[e.renderSlot(t.$slots,"label",{selected:t.selected},(function(){return[e.createElementVNode("input",{placeholder:t.innerPlaceholder,autocomplete:t.autocomplete,readonly:"",onClick:n[0]||(n[0]=function(){return t.focus&&t.focus.apply(t,arguments)})},null,8,k)]}))])):e.createCommentVNode("v-if",!0),t.multiple&&t.taggable?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(u,{modelValue:t.optionsWithInfo,"collapse-tags":t.collapseTags,tabindex:"-1",onClick:t.focus},{default:e.withCtx((function(n){var o=n.option;return[e.renderSlot(t.$slots,"tag",{option:o.originalOption,remove:function(){return t.addOrRemoveOption(t.$event,o)}},(function(){return[e.createElementVNode("span",null,e.toDisplayString(o.label),1),e.createElementVNode("img",{src:"data:image/svg+xml;base64,PHN2ZyBpZD0iZGVsZXRlIiBkYXRhLW5hbWU9ImRlbGV0ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmRlbGV0ZTwvdGl0bGU+PHBhdGggZD0iTTI1NiwyNEMzODMuOSwyNCw0ODgsMTI4LjEsNDg4LDI1NlMzODMuOSw0ODgsMjU2LDQ4OCwyNC4wNiwzODMuOSwyNC4wNiwyNTYsMTI4LjEsMjQsMjU2LDI0Wk0wLDI1NkMwLDM5Ny4xNiwxMTQuODQsNTEyLDI1Niw1MTJTNTEyLDM5Ny4xNiw1MTIsMjU2LDM5Ny4xNiwwLDI1NiwwLDAsMTE0Ljg0LDAsMjU2WiIgZmlsbD0iIzViNWI1ZiIvPjxwb2x5Z29uIHBvaW50cz0iMzgyIDE3Mi43MiAzMzkuMjkgMTMwLjAxIDI1NiAyMTMuMjkgMTcyLjcyIDEzMC4wMSAxMzAuMDEgMTcyLjcyIDIxMy4yOSAyNTYgMTMwLjAxIDMzOS4yOCAxNzIuNzIgMzgyIDI1NiAyOTguNzEgMzM5LjI5IDM4MS45OSAzODIgMzM5LjI4IDI5OC43MSAyNTYgMzgyIDE3Mi43MiIgZmlsbD0iIzViNWI1ZiIvPjwvc3ZnPg==",alt:"delete tag",class:"icon delete",onClick:e.withModifiers((function(){return t.addOrRemoveOption(t.$event,o)}),["prevent","stop"])},null,8,V)]}))]})),_:3},8,["modelValue","collapse-tags","onClick"]),e.renderSlot(t.$slots,"toggle",{isFocusing:t.isFocusing,toggle:t.toggle},(function(){return[e.createElementVNode("span",{class:e.normalizeClass(["icon arrow-downward",{active:t.isFocusing}]),onClick:n[1]||(n[1]=function(){return t.toggle&&t.toggle.apply(t,arguments)}),onMousedown:n[2]||(n[2]=e.withModifiers((function(){}),["prevent","stop"]))},null,34)]}))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[t.searchable?(e.openBlock(),e.createBlock(i,{key:0,ref:"input",modelValue:t.searchingInputValue,"onUpdate:modelValue":n[3]||(n[3]=function(e){return t.searchingInputValue=e}),disabled:t.disabled,autocomplete:t.autocomplete,placeholder:t.isFocusing?t.searchPlaceholder:t.innerPlaceholder,onInput:t.handleInputForInput,onChange:t.handleChangeForInput,onFocus:t.handleFocusForInput,onBlur:t.handleBlurForInput,onEscape:t.blur,autofocus:t.autofocus||t.taggable&&t.searchable,tabindex:t.tabindex,comboboxUid:t.instance.uid},null,8,["modelValue","disabled","autocomplete","placeholder","onInput","onChange","onFocus","onBlur","onEscape","autofocus","tabindex","comboboxUid"])):e.createCommentVNode("v-if",!0),t.loading?e.renderSlot(t.$slots,"loading",{key:1},(function(){return[M]})):e.renderSlot(t.$slots,"toggle",{key:2,isFocusing:t.isFocusing,toggle:t.toggle},(function(){return[e.createElementVNode("span",{class:e.normalizeClass(["icon arrow-downward",{active:t.isFocusing}]),onClick:n[4]||(n[4]=function(){return t.toggle&&t.toggle.apply(t,arguments)}),onMousedown:n[5]||(n[5]=e.withModifiers((function(){}),["prevent","stop"]))},null,34)]}))],64))]),t.multiple&&t.taggable&&t.searchable?(e.openBlock(),e.createElementBlock("div",E,[e.withDirectives(e.createVNode(i,{ref:"input",modelValue:t.searchingInputValue,"onUpdate:modelValue":n[6]||(n[6]=function(e){return t.searchingInputValue=e}),disabled:t.disabled,autocomplete:t.autocomplete,placeholder:t.isFocusing?t.searchPlaceholder:t.innerPlaceholder,onInput:t.handleInputForInput,onChange:t.handleChangeForInput,onFocus:t.handleFocusForInput,onBlur:t.handleBlurForInput,onEscape:t.blur,autofocus:t.autofocus||t.taggable&&t.searchable,tabindex:t.tabindex,comboboxUid:t.instance.uid},null,8,["modelValue","disabled","autocomplete","placeholder","onInput","onChange","onFocus","onBlur","onEscape","autofocus","tabindex","comboboxUid"]),[[e.vShow,t.isFocusing]]),t.loading?e.renderSlot(t.$slots,"loading",{key:0},(function(){return[S]})):e.createCommentVNode("v-if",!0)])):e.createCommentVNode("v-if",!0),e.createVNode(c,{ref:"dropdown",modelValue:t.optionsWithInfo,"onUpdate:modelValue":n[7]||(n[7]=function(e){return t.optionsWithInfo=e}),onClickItem:t.addOrRemoveOption,onMouseenter:n[8]||(n[8]=function(e,n){return t.pointerSet(n.originalIndex)}),comboboxUid:t.instance.uid,maxHeight:t.maxHeight,highlightedOriginalIndex:t.highlightedOriginalIndex},{default:e.withCtx((function(n){var o=n.option;return[e.renderSlot(t.$slots,"dropdown-item",{option:o.originalOption},(function(){return[e.createElementVNode("span",null,e.toDisplayString(o.label),1)]}))]})),_:3},8,["modelValue","onClickItem","comboboxUid","maxHeight","highlightedOriginalIndex"])],16,w)},B.__file="src/index.vue",B}(Vue); diff --git a/js/vue.js b/js/vue.js deleted file mode 100644 index e45eed3..0000000 --- a/js/vue.js +++ /dev/null @@ -1,15754 +0,0 @@ -var Vue = (function (exports) { - 'use strict'; - - /** - * Make a map and return a function for checking if a key - * is in that map. - * IMPORTANT: all calls of this function must be prefixed with - * \/\*#\_\_PURE\_\_\*\/ - * So that rollup can tree-shake them if necessary. - */ - function makeMap(str, expectsLowerCase) { - const map = Object.create(null); - const list = str.split(','); - for (let i = 0; i < list.length; i++) { - map[list[i]] = true; - } - return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val]; - } - - /** - * dev only flag -> name mapping - */ - const PatchFlagNames = { - [1 /* TEXT */]: `TEXT`, - [2 /* CLASS */]: `CLASS`, - [4 /* STYLE */]: `STYLE`, - [8 /* PROPS */]: `PROPS`, - [16 /* FULL_PROPS */]: `FULL_PROPS`, - [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`, - [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`, - [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`, - [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`, - [512 /* NEED_PATCH */]: `NEED_PATCH`, - [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`, - [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`, - [-1 /* HOISTED */]: `HOISTED`, - [-2 /* BAIL */]: `BAIL` - }; - - /** - * Dev only - */ - const slotFlagsText = { - [1 /* STABLE */]: 'STABLE', - [2 /* DYNAMIC */]: 'DYNAMIC', - [3 /* FORWARDED */]: 'FORWARDED' - }; - - const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' + - 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' + - 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt'; - const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED); - - const range = 2; - function generateCodeFrame(source, start = 0, end = source.length) { - // Split the content into individual lines but capture the newline sequence - // that separated each line. This is important because the actual sequence is - // needed to properly take into account the full line length for offset - // comparison - let lines = source.split(/(\r?\n)/); - // Separate the lines and newline sequences into separate arrays for easier referencing - const newlineSequences = lines.filter((_, idx) => idx % 2 === 1); - lines = lines.filter((_, idx) => idx % 2 === 0); - let count = 0; - const res = []; - for (let i = 0; i < lines.length; i++) { - count += - lines[i].length + - ((newlineSequences[i] && newlineSequences[i].length) || 0); - if (count >= start) { - for (let j = i - range; j <= i + range || end > count; j++) { - if (j < 0 || j >= lines.length) - continue; - const line = j + 1; - res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`); - const lineLength = lines[j].length; - const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0; - if (j === i) { - // push underline - const pad = start - (count - (lineLength + newLineSeqLength)); - const length = Math.max(1, end > count ? lineLength - pad : end - start); - res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length)); - } - else if (j > i) { - if (end > count) { - const length = Math.max(Math.min(end - count, lineLength), 1); - res.push(` | ` + '^'.repeat(length)); - } - count += lineLength + newLineSeqLength; - } - } - break; - } - } - return res.join('\n'); - } - - /** - * On the client we only need to offer special cases for boolean attributes that - * have different names from their corresponding dom properties: - * - itemscope -> N/A - * - allowfullscreen -> allowFullscreen - * - formnovalidate -> formNoValidate - * - ismap -> isMap - * - nomodule -> noModule - * - novalidate -> noValidate - * - readonly -> readOnly - */ - const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; - const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs); - /** - * Boolean attributes should be included if the value is truthy or ''. - * e.g. ` - const forcePatchValue = (type === 'input' && dirs) || type === 'option'; - // skip props & children if this is hoisted static nodes - // #5405 in dev, always hydrate children for HMR - { - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, 'created'); - } - // props - if (props) { - if (forcePatchValue || - !optimized || - patchFlag & (16 /* FULL_PROPS */ | 32 /* HYDRATE_EVENTS */)) { - for (const key in props) { - if ((forcePatchValue && key.endsWith('value')) || - (isOn(key) && !isReservedProp(key))) { - patchProp(el, key, null, props[key], false, undefined, parentComponent); - } - } - } - else if (props.onClick) { - // Fast path for click listeners (which is most often) to avoid - // iterating through props. - patchProp(el, 'onClick', null, props.onClick, false, undefined, parentComponent); - } - } - // vnode / directive hooks - let vnodeHooks; - if ((vnodeHooks = props && props.onVnodeBeforeMount)) { - invokeVNodeHook(vnodeHooks, parentComponent, vnode); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount'); - } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs) { - queueEffectWithSuspense(() => { - vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); - dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted'); - }, parentSuspense); - } - // children - if (shapeFlag & 16 /* ARRAY_CHILDREN */ && - // skip if element has innerHTML / textContent - !(props && (props.innerHTML || props.textContent))) { - let next = hydrateChildren(el.firstChild, vnode, el, parentComponent, parentSuspense, slotScopeIds, optimized); - let hasWarned = false; - while (next) { - hasMismatch = true; - if (!hasWarned) { - warn$1(`Hydration children mismatch in <${vnode.type}>: ` + - `server rendered element contains more child nodes than client vdom.`); - hasWarned = true; - } - // The SSRed DOM contains more nodes than it should. Remove them. - const cur = next; - next = next.nextSibling; - remove(cur); - } - } - else if (shapeFlag & 8 /* TEXT_CHILDREN */) { - if (el.textContent !== vnode.children) { - hasMismatch = true; - warn$1(`Hydration text content mismatch in <${vnode.type}>:\n` + - `- Client: ${el.textContent}\n` + - `- Server: ${vnode.children}`); - el.textContent = vnode.children; - } - } - } - return el.nextSibling; - }; - const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!parentVNode.dynamicChildren; - const children = parentVNode.children; - const l = children.length; - let hasWarned = false; - for (let i = 0; i < l; i++) { - const vnode = optimized - ? children[i] - : (children[i] = normalizeVNode(children[i])); - if (node) { - node = hydrateNode(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized); - } - else if (vnode.type === Text && !vnode.children) { - continue; - } - else { - hasMismatch = true; - if (!hasWarned) { - warn$1(`Hydration children mismatch in <${container.tagName.toLowerCase()}>: ` + - `server rendered element contains fewer child nodes than client vdom.`); - hasWarned = true; - } - // the SSRed DOM didn't contain enough nodes. Mount the missing ones. - patch(null, vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds); - } - } - return node; - }; - const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - const { slotScopeIds: fragmentSlotScopeIds } = vnode; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds - ? slotScopeIds.concat(fragmentSlotScopeIds) - : fragmentSlotScopeIds; - } - const container = parentNode(node); - const next = hydrateChildren(nextSibling(node), vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized); - if (next && isComment(next) && next.data === ']') { - return nextSibling((vnode.anchor = next)); - } - else { - // fragment didn't hydrate successfully, since we didn't get a end anchor - // back. This should have led to node/children mismatch warnings. - hasMismatch = true; - // since the anchor is missing, we need to create one and insert it - insert((vnode.anchor = createComment(`]`)), container, next); - return next; - } - }; - const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => { - hasMismatch = true; - warn$1(`Hydration node mismatch:\n- Client vnode:`, vnode.type, `\n- Server rendered DOM:`, node, node.nodeType === 3 /* TEXT */ - ? `(text)` - : isComment(node) && node.data === '[' - ? `(start of fragment)` - : ``); - vnode.el = null; - if (isFragment) { - // remove excessive fragment nodes - const end = locateClosingAsyncAnchor(node); - while (true) { - const next = nextSibling(node); - if (next && next !== end) { - remove(next); - } - else { - break; - } - } - } - const next = nextSibling(node); - const container = parentNode(node); - remove(node); - patch(null, vnode, container, next, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds); - return next; - }; - const locateClosingAsyncAnchor = (node) => { - let match = 0; - while (node) { - node = nextSibling(node); - if (node && isComment(node)) { - if (node.data === '[') - match++; - if (node.data === ']') { - if (match === 0) { - return nextSibling(node); - } - else { - match--; - } - } - } - } - return node; - }; - return [hydrate, hydrateNode]; - } - - /* eslint-disable no-restricted-globals */ - let supported; - let perf; - function startMeasure(instance, type) { - if (instance.appContext.config.performance && isSupported()) { - perf.mark(`vue-${type}-${instance.uid}`); - } - { - devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now()); - } - } - function endMeasure(instance, type) { - if (instance.appContext.config.performance && isSupported()) { - const startTag = `vue-${type}-${instance.uid}`; - const endTag = startTag + `:end`; - perf.mark(endTag); - perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag); - perf.clearMarks(startTag); - perf.clearMarks(endTag); - } - { - devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now()); - } - } - function isSupported() { - if (supported !== undefined) { - return supported; - } - if (typeof window !== 'undefined' && window.performance) { - supported = true; - perf = window.performance; - } - else { - supported = false; - } - return supported; - } - - const queuePostRenderEffect = queueEffectWithSuspense - ; - /** - * The createRenderer function accepts two generic arguments: - * HostNode and HostElement, corresponding to Node and Element types in the - * host environment. For example, for runtime-dom, HostNode would be the DOM - * `Node` interface and HostElement would be the DOM `Element` interface. - * - * Custom renderers can pass in the platform specific types like this: - * - * ``` js - * const { render, createApp } = createRenderer({ - * patchProp, - * ...nodeOps - * }) - * ``` - */ - function createRenderer(options) { - return baseCreateRenderer(options); - } - // Separate API for creating hydration-enabled renderer. - // Hydration logic is only used when calling this function, making it - // tree-shakable. - function createHydrationRenderer(options) { - return baseCreateRenderer(options, createHydrationFunctions); - } - // implementation - function baseCreateRenderer(options, createHydrationFns) { - const target = getGlobalThis(); - target.__VUE__ = true; - { - setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target); - } - const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, cloneNode: hostCloneNode, insertStaticContent: hostInsertStaticContent } = options; - // Note: functions inside this closure should use `const xxx = () => {}` - // style in order to prevent being inlined by minifiers. - const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = isHmrUpdating ? false : !!n2.dynamicChildren) => { - if (n1 === n2) { - return; - } - // patching & not same type, unmount old tree - if (n1 && !isSameVNodeType(n1, n2)) { - anchor = getNextHostNode(n1); - unmount(n1, parentComponent, parentSuspense, true); - n1 = null; - } - if (n2.patchFlag === -2 /* BAIL */) { - optimized = false; - n2.dynamicChildren = null; - } - const { type, ref, shapeFlag } = n2; - switch (type) { - case Text: - processText(n1, n2, container, anchor); - break; - case Comment: - processCommentNode(n1, n2, container, anchor); - break; - case Static: - if (n1 == null) { - mountStaticNode(n2, container, anchor, isSVG); - } - else { - patchStaticNode(n1, n2, container, isSVG); - } - break; - case Fragment: - processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - break; - default: - if (shapeFlag & 1 /* ELEMENT */) { - processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - else if (shapeFlag & 6 /* COMPONENT */) { - processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - else if (shapeFlag & 64 /* TELEPORT */) { - type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals); - } - else if (shapeFlag & 128 /* SUSPENSE */) { - type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals); - } - else { - warn$1('Invalid VNode type:', type, `(${typeof type})`); - } - } - // set ref - if (ref != null && parentComponent) { - setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2); - } - }; - const processText = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert((n2.el = hostCreateText(n2.children)), container, anchor); - } - else { - const el = (n2.el = n1.el); - if (n2.children !== n1.children) { - hostSetText(el, n2.children); - } - } - }; - const processCommentNode = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert((n2.el = hostCreateComment(n2.children || '')), container, anchor); - } - else { - // there's no support for dynamic comments - n2.el = n1.el; - } - }; - const mountStaticNode = (n2, container, anchor, isSVG) => { - [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor); - }; - /** - * Dev / HMR only - */ - const patchStaticNode = (n1, n2, container, isSVG) => { - // static nodes are only patched during dev for HMR - if (n2.children !== n1.children) { - const anchor = hostNextSibling(n1.anchor); - // remove existing - removeStaticNode(n1); - [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG); - } - else { - n2.el = n1.el; - n2.anchor = n1.anchor; - } - }; - const moveStaticNode = ({ el, anchor }, container, nextSibling) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostInsert(el, container, nextSibling); - el = next; - } - hostInsert(anchor, container, nextSibling); - }; - const removeStaticNode = ({ el, anchor }) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostRemove(el); - el = next; - } - hostRemove(anchor); - }; - const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - isSVG = isSVG || n2.type === 'svg'; - if (n1 == null) { - mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - else { - patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - }; - const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - let el; - let vnodeHook; - const { type, props, shapeFlag, transition, patchFlag, dirs } = vnode; - { - el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props); - // mount children first, since some props may rely on child content - // being already rendered, e.g. `