@@ -26,8 +26,16 @@ var ws;
2626var fxlist = d . getElementById ( 'fxlist' ) , pallist = d . getElementById ( 'pallist' ) ;
2727var cfg = {
2828 theme :{ base :"dark" , bg :{ url :"" } , alpha :{ bg :0.6 , tab :0.8 } , color :{ bg :"" } } ,
29- comp :{ colors :{ picker : true , rgb : false , quick : true , hex : false } , labels :true , pcmbot :false , pid :true }
29+ comp :{ colors :{ picker : true , rgb : false , quick : true , hex : false } ,
30+ labels :true , pcmbot :false , pid :true , seglen :false , css :true , hdays :false }
3031} ;
32+ var hol = [
33+ [ 0 , 11 , 24 , 4 , "https://aircoookie.github.io/xmas.png" ] , // christmas
34+ [ 0 , 2 , 17 , 1 , "https://images.alphacoders.com/491/491123.jpg" ] , // st. Patrick's day
35+ [ 2022 , 3 , 17 , 2 , "https://aircoookie.github.io/easter.png" ] ,
36+ [ 2023 , 3 , 9 , 2 , "https://aircoookie.github.io/easter.png" ] ,
37+ [ 2024 , 2 , 31 , 2 , "https://aircoookie.github.io/easter.png" ]
38+ ] ;
3139
3240var cpick = new iro . ColorPicker ( "#picker" , {
3341 width : 260 ,
@@ -158,13 +166,6 @@ function loadBg(iUrl) {
158166 img . src = iUrl ;
159167 if ( iUrl == "" ) {
160168 var today = new Date ( ) ;
161- var hol = [
162- [ 0 , 11 , 24 , 4 , "https://aircoookie.github.io/xmas.png" ] , // christmas
163- [ 0 , 2 , 17 , 1 , "https://images.alphacoders.com/491/491123.jpg" ] , // st. Patrick's day
164- [ 2022 , 3 , 17 , 2 , "https://aircoookie.github.io/easter.png" ] ,
165- [ 2023 , 3 , 9 , 2 , "https://aircoookie.github.io/easter.png" ] ,
166- [ 2024 , 2 , 31 , 2 , "https://aircoookie.github.io/easter.png" ]
167- ] ;
168169 for ( var i = 0 ; i < hol . length ; i ++ ) {
169170 var yr = hol [ i ] [ 0 ] == 0 ? today . getFullYear ( ) : hol [ i ] [ 0 ] ;
170171 var hs = new Date ( yr , hol [ i ] [ 1 ] , hol [ i ] [ 2 ] ) ;
@@ -182,6 +183,21 @@ function loadBg(iUrl) {
182183 } ) ;
183184}
184185
186+ function loadSkinCSS ( cId )
187+ {
188+ if ( ! d . getElementById ( cId ) ) // check if element exists
189+ {
190+ var h = document . getElementsByTagName ( 'head' ) [ 0 ] ;
191+ var l = document . createElement ( 'link' ) ;
192+ l . id = cId ;
193+ l . rel = 'stylesheet' ;
194+ l . type = 'text/css' ;
195+ l . href = ( loc ?`http://${ locip } ` :'.' ) + '/skin.css' ;
196+ l . media = 'all' ;
197+ h . appendChild ( l ) ;
198+ }
199+ }
200+
185201function onLoad ( ) {
186202 if ( window . location . protocol == "file:" ) {
187203 loc = true ;
@@ -198,7 +214,27 @@ function onLoad() {
198214 resetPUtil ( ) ;
199215
200216 applyCfg ( ) ;
201- loadBg ( cfg . theme . bg . url ) ;
217+ if ( cfg . comp . hdays ) { //load custom holiday list
218+ fetch ( ( loc ?`http://${ locip } ` :'.' ) + "/holidays.json" , { // may be loaded from external source
219+ method : 'get'
220+ } )
221+ . then ( res => {
222+ //if (!res.ok) showErrorToast();
223+ return res . json ( ) ;
224+ } )
225+ . then ( json => {
226+ if ( Array . isArray ( json ) ) hol = json ;
227+ //TODO: do some parsing first
228+ } )
229+ . catch ( function ( error ) {
230+ console . log ( "holidays.json does not contain array of holidays. Defaults loaded." ) ;
231+ } )
232+ . finally ( function ( ) {
233+ loadBg ( cfg . theme . bg . url ) ;
234+ } ) ;
235+ } else
236+ loadBg ( cfg . theme . bg . url ) ;
237+ if ( cfg . comp . css ) loadSkinCSS ( 'skinCss' ) ;
202238
203239 var cd = d . getElementById ( 'csl' ) . children ;
204240 for ( var i = 0 ; i < cd . length ; i ++ ) {
@@ -211,7 +247,7 @@ function onLoad() {
211247 setColor ( 1 ) ;
212248 } ) ;
213249 pmtLS = localStorage . getItem ( 'wledPmt' ) ;
214- setTimeout ( function ( ) { requestJson ( null , false ) ; } , 25 ) ;
250+ setTimeout ( function ( ) { requestJson ( null , false ) ; } , 50 ) ;
215251 d . addEventListener ( "visibilitychange" , handleVisibilityChange , false ) ;
216252 size ( ) ;
217253 d . getElementById ( "cv" ) . style . opacity = 0 ;
@@ -557,12 +593,12 @@ function populateSegments(s)
557593 <table class="infot">
558594 <tr>
559595 <td class="segtd">Start LED</td>
560- <td class="segtd">Stop LED</td>
596+ <td class="segtd">${ cfg . comp . seglen ? "Length" : " Stop LED" } </td>
561597 <td class="segtd">Offset</td>
562598 </tr>
563599 <tr>
564600 <td class="segtd"><input class="noslide segn" id="seg${ i } s" type="number" min="0" max="${ ledCount - 1 } " value="${ inst . start } " oninput="updateLen(${ i } )"></td>
565- <td class="segtd"><input class="noslide segn" id="seg${ i } e" type="number" min="0" max="${ ledCount } " value="${ inst . stop } " oninput="updateLen(${ i } )"></td>
601+ <td class="segtd"><input class="noslide segn" id="seg${ i } e" type="number" min="0" max="${ ledCount - ( cfg . comp . seglen ? inst . start : 0 ) } " value="${ inst . stop - ( cfg . comp . seglen ? inst . start : 0 ) } " oninput="updateLen(${ i } )"></td>
566602 <td class="segtd"><input class="noslide segn" id="seg${ i } of" type="number" value="${ inst . of } " oninput="updateLen(${ i } )"></td>
567603 </tr>
568604 </table>
@@ -661,13 +697,12 @@ function populatePalettes(palettes)
661697 var html = `<div class="searchbar"><input type="text" class="search" placeholder="Search" oninput="search(this)" />
662698 <i class="icons search-cancel-icon" onclick="cancelSearch(this)"></i></div>` ;
663699 for ( let i = 0 ; i < palettes . length ; i ++ ) {
664- let previewCss = genPalPrevCss ( palettes [ i ] . id ) ;
665700 html += generateListItemHtml (
666701 'palette' ,
667702 palettes [ i ] . id ,
668703 palettes [ i ] . name ,
669704 'setPalette' ,
670- `<div class="lstIprev" style="${ previewCss } "></div>` ,
705+ `<div class="lstIprev" style="${ genPalPrevCss ( palettes [ i ] . id ) } "></div>` ,
671706 palettes [ i ] . class ,
672707 ) ;
673708 }
@@ -693,7 +728,6 @@ function genPalPrevCss(id)
693728 return ;
694729 }
695730 var paletteData = palettesData [ id ] ;
696- var previewCss = "" ;
697731
698732 if ( ! paletteData ) {
699733 return 'display: none' ;
@@ -855,7 +889,7 @@ function updateLen(s)
855889 if ( ! d . getElementById ( `seg${ s } s` ) ) return ;
856890 var start = parseInt ( d . getElementById ( `seg${ s } s` ) . value ) ;
857891 var stop = parseInt ( d . getElementById ( `seg${ s } e` ) . value ) ;
858- var len = stop - start ;
892+ var len = stop - ( cfg . comp . seglen ? 0 : start ) ;
859893 var out = "(delete)" ;
860894 if ( len > 1 ) {
861895 out = `${ len } LEDs` ;
@@ -1218,7 +1252,7 @@ function toggleNodes() {
12181252function makeSeg ( ) {
12191253 var ns = 0 ;
12201254 if ( lowestUnused > 0 ) {
1221- var pend = d . getElementById ( `seg${ lowestUnused - 1 } e` ) . value ;
1255+ var pend = parseInt ( d . getElementById ( `seg${ lowestUnused - 1 } e` ) . value , 10 ) + ( cfg . comp . seglen ? parseInt ( d . getElementById ( `seg ${ lowestUnused - 1 } s` ) . value , 10 ) : 0 ) ;
12221256 if ( pend < ledCount ) ns = pend ;
12231257 }
12241258 var cn = `<div class="seg">
@@ -1230,11 +1264,11 @@ function makeSeg() {
12301264 <table class="segt">
12311265 <tr>
12321266 <td class="segtd">Start LED</td>
1233- <td class="segtd">Stop LED</td>
1267+ <td class="segtd">${ cfg . comp . seglen ? "Length" : " Stop LED" } </td>
12341268 </tr>
12351269 <tr>
12361270 <td class="segtd"><input class="noslide segn" id="seg${ lowestUnused } s" type="number" min="0" max="${ ledCount - 1 } " value="${ ns } " oninput="updateLen(${ lowestUnused } )"></td>
1237- <td class="segtd"><input class="noslide segn" id="seg${ lowestUnused } e" type="number" min="0" max="${ ledCount } " value="${ ledCount } " oninput="updateLen(${ lowestUnused } )"></td>
1271+ <td class="segtd"><input class="noslide segn" id="seg${ lowestUnused } e" type="number" min="0" max="${ ledCount - ( cfg . comp . seglen ? ns : 0 ) } " value="${ ledCount - ( cfg . comp . seglen ? ns : 0 ) } " oninput="updateLen(${ lowestUnused } )"></td>
12381272 </tr>
12391273 </table>
12401274 <div class="h" id="seg${ lowestUnused } len">${ ledCount - ns } LED${ ledCount - ns > 1 ? "s" :"" } </div>
@@ -1467,7 +1501,7 @@ function setSeg(s){
14671501 var start = parseInt ( d . getElementById ( `seg${ s } s` ) . value ) ;
14681502 var stop = parseInt ( d . getElementById ( `seg${ s } e` ) . value ) ;
14691503 if ( stop <= start ) { delSeg ( s ) ; return ; }
1470- var obj = { "seg" : { "id" : s , "start" : start , "stop" : stop } } ;
1504+ var obj = { "seg" : { "id" : s , "start" : start , "stop" : ( cfg . comp . seglen ? start : 0 ) + stop } } ;
14711505 if ( d . getElementById ( `seg${ s } grp` ) )
14721506 {
14731507 var grp = parseInt ( d . getElementById ( `seg${ s } grp` ) . value ) ;
0 commit comments