@@ -95,6 +95,12 @@ const validateLayers = (config) => {
9595 // Check zooms
9696 errs = errs . concat ( isValidZooms ( layer ) ) ;
9797 break ;
98+ case "video" :
99+ // Check url
100+ errs = errs . concat ( isValidUrl ( layer ) ) ;
101+ // Check bounding box
102+ errs = errs . concat ( isValidBoundingBox ( layer ) ) ;
103+ break ;
98104 default :
99105 errs = errs . concat (
100106 err ( `Unknown layer type: '${ layer . type } '` , [ "layers[layer].type" ] )
@@ -279,6 +285,62 @@ const isValidModelParams = (layer) => {
279285 return errs ;
280286} ;
281287
288+ const isValidBoundingBox = ( layer ) => {
289+ const errs = [ ] ;
290+
291+ if ( ! layer . boundingBox ) {
292+ errs . push (
293+ err ( `Layer '${ layer . name } ' is missing Bounding Box.` , [
294+ "layers[layer].boundingBox" ,
295+ ] )
296+ ) ;
297+ } else if ( ! Array . isArray ( layer . boundingBox ) ) {
298+ errs . push (
299+ err ( `Layer '${ layer . name } ' has invalid Bounding Box format.` , [
300+ "layers[layer].boundingBox" ,
301+ ] )
302+ ) ;
303+ } else if ( layer . boundingBox . length !== 4 ) {
304+ errs . push (
305+ err ( `Layer '${ layer . name } ' has invalid Bounding Box length. Expected 4 values (minx,miny,maxx,maxy).` , [
306+ "layers[layer].boundingBox" ,
307+ ] )
308+ ) ;
309+ } else {
310+ // Validate each coordinate
311+ if ( isNaN ( parseFloat ( layer . boundingBox [ 0 ] ) ) ) {
312+ errs . push (
313+ err ( `Layer '${ layer . name } ' has invalid Bounding Box minx value.` , [
314+ "layers[layer].boundingBox" ,
315+ ] )
316+ ) ;
317+ }
318+ if ( isNaN ( parseFloat ( layer . boundingBox [ 1 ] ) ) ) {
319+ errs . push (
320+ err ( `Layer '${ layer . name } ' has invalid Bounding Box miny value.` , [
321+ "layers[layer].boundingBox" ,
322+ ] )
323+ ) ;
324+ }
325+ if ( isNaN ( parseFloat ( layer . boundingBox [ 2 ] ) ) ) {
326+ errs . push (
327+ err ( `Layer '${ layer . name } ' has invalid Bounding Box maxx value.` , [
328+ "layers[layer].boundingBox" ,
329+ ] )
330+ ) ;
331+ }
332+ if ( isNaN ( parseFloat ( layer . boundingBox [ 3 ] ) ) ) {
333+ errs . push (
334+ err ( `Layer '${ layer . name } ' has invalid Bounding Box maxy value.` , [
335+ "layers[layer].boundingBox" ,
336+ ] )
337+ ) ;
338+ }
339+ }
340+
341+ return errs ;
342+ } ;
343+
282344const hasNonHeaderWithSublayers = ( config ) => {
283345 const errs = [ ] ;
284346 Utils . traverseLayers ( config . layers , ( layer ) => {
@@ -328,6 +390,10 @@ const fillInMissingFieldsWithDefaults = (layer) => {
328390 break ;
329391 case "model" :
330392 break ;
393+ case "video" :
394+ layer . style = layer . style || { } ;
395+ layer . style . className = layer . name . replace ( / / g, "" ) . toLowerCase ( ) ;
396+ break ;
331397 default :
332398 }
333399} ;
0 commit comments