Page 1 of 1

http mosaic wizard rewrited for IE 6

Posted: 28 Mar 2006 16:13
by Albert
Hello,
I found some bugs in http mosaic wizard when used with Internet Explorer 6.
I suppose there was a problem with DOM structures when mosaic table was created: tbody was needed (see http://msdn.microsoft.com/library/defau ... tables.asp)
and I had to do some changes in code about setting CSS classes [function setclass()] and setAttributes for IE. IE6 uses expressions like element.className=value and element[sName]=sValue
Please test this with Mozilla family browsers.

changed content of mosaic.js:

Code: Select all

function mosaic_size_change() { var x,y; var bg_width = check_and_replace_int( "bg_width", "400" ); var bg_height = check_and_replace_int( "bg_height", "300" ); mosaic_height = check_and_replace_int( "mosaic_height", "100" ); mosaic_width = check_and_replace_int( "mosaic_width", "100" ); mosaic_xoffset = check_and_replace_int( "mosaic_xoffset", "10" ); mosaic_yoffset = check_and_replace_int( "mosaic_yoffset", "10" ); mosaic_vborder = check_and_replace_int( "mosaic_vborder", "5" ); mosaic_hborder = check_and_replace_int( "mosaic_hborder", "10" ); mosaic_rows = check_and_replace_int( "mosaic_rows", "1" ); mosaic_cols = check_and_replace_int( "mosaic_cols", "1" ); cell_width = Math.floor((mosaic_width-(mosaic_cols-1)*mosaic_hborder)/mosaic_cols); cell_height = Math.floor((mosaic_height-(mosaic_rows-1)*mosaic_vborder)/mosaic_rows); var mlayout = document.getElementById( "mosaic_layout" ); /* TODO: keep 'common' cells when resizing */ while( mlayout.hasChildNodes() ) mlayout.removeChild( mlayout.firstChild ); mlayout.style.width = bg_width + "px"; mlayout.style.height = bg_height + "px"; /* rewrited */ var mdt = document.createElement("div"); mdt.id='mosaic.dt'; mdt.className='mosaic_tbl'; mdt.style.width = mosaic_width + "px"; mdt.style.height = mosaic_height + "px"; mdt.style.top = mosaic_yoffset + "px"; mdt.style.left = mosaic_xoffset + "px"; var mtable = document.createElement("table"); mtable.border="1"; mtable.style.top = "-" + mosaic_vborder + "px"; mtable.style.left = "-" + mosaic_hborder + "px"; mtable.style.width = (1*mosaic_width +2*mosaic_hborder) + "px"; mtable.style.height = (1*mosaic_height+2*mosaic_vborder) + "px"; mtable.style.borderSpacing = mosaic_hborder + "px " + mosaic_vborder + "px"; var mtbody = document.createElement("tbody"); mtable.appendChild(mtbody); var mrow, mcol, i, j; for (i=0; i<mosaic_rows; i++) { mrow = document.createElement("tr"); mtbody.appendChild(mrow); for (j=0; j<mosaic_cols; j++) { mcell = document.createElement("td"); mcell.className='mosaic_itm'; mcell.style.width = cell_width + "px"; mcell.style.height = cell_height + "px"; var id = i+'_'+j; var btn = create_button( cells[id] ? cells[id] : '?', 'mosaic_elt_choose(\"'+id+'\");' ); btn.id=id; btn.title='Click to choose stream'; mcell.appendChild(btn); mrow.appendChild(mcell); } } // Ins into the document tree mosaic_layout.appendChild(mtable); mosaic_code_update(); }
Albert

Posted: 28 Mar 2006 19:18
by dionoea
Thanks ! the missing tbody is now fixed ( https://trac.videolan.org/vlc/changeset/14952 )

Could you paste your changes to setclass() and setattributes() ? (i haven't noticed any problems using them ... but it's on IE7 so they might have fixed some stuff)

shifted mosaic element layout

Posted: 29 Mar 2006 22:45
by Albert
Hello,
I think there is still a problem with mosaic h/v-border.

My IE 6 show Mosaic Wizard: blue background, pink "div" for mosaic table elements and green squares shifted to left top corner outside of pink "div".

If I comment

Code: Select all

// mtable.style.top = "-" + mosaic_vborder + "px"; // mtable.style.left = "-" + mosaic_hborder + "px";
I see everything centered and it resizes quite as expected.

Due to

Code: Select all

mosaic_vborder = check_and_replace_int( "mosaic_vborder", "10" ); mosaic_hborder = check_and_replace_int( "mosaic_hborder", "5" );
I am not able to set borders to "0" ???

I don´t know what was the idea of mosaic-borders. Maybe this could be visualised better by another color for mosaic borders (size of table border, other table/cell css classes,...). I expected that changing mosaic-borders will result in some more evident changes than resizing.
Could you explain me the idea, please? Thank you.
Albert

Posted: 30 Mar 2006 02:05
by dionoea
The best explanation is to test in firefox :)

Mosaic borders basically are the distance between the cells in the table (only between two cells, not between a cell and the outside). firefox does a good job at displaying it. I haven't figured how to do it in IE yet.

To fix all those table related issues, i think that it might even be a good idea to rewrite it all using divs only and some javascript to do the positioning (using absolute positions)

mosaic rewrited with DIVs

Posted: 01 Apr 2006 16:24
by Albert
Hello,
I wrote mosaic_size_change() without table, with DIVs. It could be also usefull let user set zero border - visualized as dashed line.
I tried to avoid changes in linked files, so all CSS attributes and classes are set within the code.
I didn´t understand your terminology mosaic_hborder (¦) and mosaic_vborder (---) and cell_width/height, so I switch them.

There is still a problem with dimensions and Math.floor(), so in some constallation right and bottom borders aren´t overlayed with the background. For the visual effect this can be fixed, but I don´t know if it is necessary.

mosaic.js

Code: Select all

function mosaic_size_change() { var x,y; var bg_width = check_and_replace_int( "bg_width", "400" ); var bg_height = check_and_replace_int( "bg_height", "300" ); mosaic_height = check_and_replace_int( "mosaic_height", "100" ); mosaic_width = check_and_replace_int( "mosaic_width", "100" ); mosaic_xoffset = check_and_replace_int( "mosaic_xoffset", "10" ); mosaic_yoffset = check_and_replace_int( "mosaic_yoffset", "10" ); mosaic_vborder = check_and_replace_int( "mosaic_vborder", "0" ); mosaic_hborder = check_and_replace_int( "mosaic_hborder", "0" ); mosaic_rows = check_and_replace_int( "mosaic_rows", "2" ); mosaic_cols = check_and_replace_int( "mosaic_cols", "2" ); cell_width = Math.floor((mosaic_width-(mosaic_cols-1)*mosaic_vborder)/mosaic_cols); cell_height = Math.floor((mosaic_height-(mosaic_rows-1)*mosaic_hborder)/mosaic_rows); var mlayout = document.getElementById( "mosaic_layout" ); while( mlayout.hasChildNodes() ) mlayout.removeChild( mlayout.firstChild ); mlayout.style.width = bg_width + "px"; mlayout.style.height = bg_height + "px"; if( mosaic_cols && mosaic_rows ) { var mdiv = document.createElement( 'div' ); mdiv.setAttribute( 'id', 'mosaic_div' ); mdiv.style.position = "relative"; mdiv.style.width = mosaic_width + "px"; mdiv.style.height = mosaic_height + "px"; mdiv.style.top = mosaic_yoffset + "px"; mdiv.style.left = mosaic_xoffset + "px"; mdiv.style.backgroundColor = "#faa"; for( y = 0; y < mosaic_rows; y++ ) { for( x = 0; x < mosaic_cols; x++ ) { var mdiv_cell = document.createElement( 'div' ); mdiv_cell.style.position = "absolute"; mdiv_cell.setAttribute( 'id', 'mdiv_cell'+x+'_'+y ); mdiv_cell.style.left = x*cell_width + x*mosaic_vborder + "px"; mdiv_cell.style.top = y*(mosaic_hborder) + y*cell_height +"px"; mdiv_cell.style.width = cell_width + "px"; mdiv_cell.style.height = cell_height + "px"; mdiv_cell.style.backgroundColor = "#afa"; mdiv.appendChild(mdiv_cell); var id = x+'_'+y; var melt = create_button( cells[id] ? cells[id] : '?', 'mosaic_elt_choose(\"'+id+'\");' ); melt.setAttribute( 'id', id ); melt.style.position = "absolute"; melt.style.top = "0%"; melt.style.left = "0%"; melt.setAttribute( 'title', 'Click to choose stream' ); melt.style.backgroundColor = "#afa"; melt.style.border = "0px"; mdiv_cell.appendChild( melt ); // set mosaic_vborder if(x < (mosaic_cols-1)) { var mdiv_vborder = document.createElement( 'div' ); mdiv_vborder.setAttribute( 'id', 'mdiv_vborder'+x+'_'+y ); // show fake border between mosaic items if(mosaic_vborder==0) { mdiv_vborder.style.backgroundColor = "#afa"; mdiv_vborder.style.borderLeftWidth = "1px"; mdiv_vborder.style.borderLeftColor = "white"; mdiv_vborder.style.borderLeftStyle = "dashed"; mdiv_vborder.style.zIndex = "2"; } else { mdiv_vborder.style.backgroundColor = "#faa"; } mdiv_vborder.style.top = y*cell_height + y*mosaic_hborder + "px"; mdiv_vborder.style.position = "absolute"; mdiv_vborder.style.width = mosaic_vborder + "px"; mdiv_vborder.style.left = (x+1)*cell_width +(x)*mosaic_vborder+ "px"; mdiv_vborder.style.height = cell_height + "px"; mdiv.appendChild(mdiv_vborder); } } // set mosaic_hborder if(y < (mosaic_rows-1)) { var mdiv_hborder = document.createElement( 'div' ); mdiv_hborder.setAttribute( 'id', 'mdiv_hborder'+x+'_'+y ); // show fake border between mosaic items if(mosaic_hborder==0) { mdiv_hborder.style.backgroundColor = "#afa"; mdiv_hborder.style.borderTopWidth = "1px"; mdiv_hborder.style.borderTopColor = "white"; mdiv_hborder.style.borderTopStyle = "dashed"; mdiv_hborder.style.zIndex = "2"; } else { mdiv_hborder.style.backgroundColor = "#faa"; } mdiv_hborder.style.position = "absolute"; mdiv_hborder.style.height = mosaic_hborder + "px"; mdiv_hborder.style.width = mosaic_cols*cell_width + (mosaic_cols-1)*mosaic_vborder +"px"; mdiv_hborder.style.top = (y)*mosaic_hborder + (y+1)*cell_height + "px"; mdiv.appendChild(mdiv_hborder); } } mlayout.appendChild( mdiv ); } mosaic_code_update(); }
Albert

updated and upgraded patch

Posted: 08 Apr 2006 11:39
by Albert
Hello,
any comment? reply? critique?

I tested it with Mozilla and IE 6.
Now it looks like the original mosaic wizard
+ possibility to set mosaic borders to 0
+ vizualisation of mosaic borders 0
+ fixed IE shift to the left top corner

I tried to create a patch (diff) file to mosaic.js (8.4.2006) but I don´t know how :-(

Code: Select all

--- mosaic.orig 2006-04-08 00:44:22.000000000 +0200 +++ mosaic.js 2006-04-08 11:05:36.000000000 +0200 @@ -66,14 +66,14 @@ function mosaic_size_change() mosaic_width = check_and_replace_int( "mosaic_width", "100" ); mosaic_xoffset = check_and_replace_int( "mosaic_xoffset", "10" ); mosaic_yoffset = check_and_replace_int( "mosaic_yoffset", "10" ); - mosaic_vborder = check_and_replace_int( "mosaic_vborder", "5" ); - mosaic_hborder = check_and_replace_int( "mosaic_hborder", "10" ); - mosaic_rows = check_and_replace_int( "mosaic_rows", "1" ); - mosaic_cols = check_and_replace_int( "mosaic_cols", "1" ); - - cell_width = Math.floor((mosaic_width-(mosaic_cols-1)*mosaic_hborder)/mosaic_cols); - cell_height = Math.floor((mosaic_height-(mosaic_rows-1)*mosaic_vborder)/mosaic_rows); - + mosaic_vborder = check_and_replace_int( "mosaic_vborder", "0" ); + mosaic_hborder = check_and_replace_int( "mosaic_hborder", "0" ); + mosaic_rows = check_and_replace_int( "mosaic_rows", "2" ); + mosaic_cols = check_and_replace_int( "mosaic_cols", "2" ); + + cell_width = Math.floor((mosaic_width-(mosaic_cols-1)*mosaic_vborder)/mosaic_cols); + cell_height = Math.floor((mosaic_height-(mosaic_rows-1)*mosaic_hborder)/mosaic_rows); + var mlayout = document.getElementById( "mosaic_layout" ); while( mlayout.hasChildNodes() ) @@ -81,52 +81,104 @@ function mosaic_size_change() mlayout.style.width = bg_width + "px"; mlayout.style.height = bg_height + "px"; - if( mosaic_cols && mosaic_rows ) - { - var mdt = document.createElement( 'div' ); - mdt.setAttribute( 'id', 'mosaic_dt' ); - setclass( mdt, 'mosaic_tbl' ); - - mdt.style.width = mosaic_width + "px"; - mdt.style.height = mosaic_height + "px"; - mdt.style.top = mosaic_yoffset + "px"; - mdt.style.left = mosaic_xoffset + "px"; - - var mtable = document.createElement( 'table' ); - mtable.setAttribute( 'id', 'mosaic_table' ); - mtable.style.top = "-" + mosaic_vborder + "px"; - mtable.style.left = "-" + mosaic_hborder + "px"; - mtable.style.width = (1*mosaic_width +2*mosaic_hborder) + "px"; - mtable.style.height = (1*mosaic_height+2*mosaic_vborder) + "px"; - mtable.style.borderSpacing = mosaic_hborder + "px " + - mosaic_vborder + "px"; - var mtbody = document.createElement( 'tbody' ); +if( mosaic_cols && mosaic_rows ) +{ + var mdiv = document.createElement( 'div' ); + mdiv.setAttribute( 'id', 'mosaic_div' ); + mdiv.style.position = "relative"; + mdiv.style.width = mosaic_width + "px"; + mdiv.style.height = mosaic_height + "px"; + mdiv.style.top = mosaic_yoffset + "px"; + mdiv.style.left = mosaic_xoffset + "px"; + mdiv.style.backgroundColor = "#faa"; + + for( y = 0; y < mosaic_rows; y++ ) + { + for( x = 0; x < mosaic_cols; x++ ) + { + var mdiv_cell = document.createElement( 'div' ); + mdiv_cell.style.position = "absolute"; + mdiv_cell.setAttribute( 'id', 'mdiv_cell'+x+'_'+y ); + mdiv_cell.style.left = x*cell_width + x*mosaic_vborder + "px"; + mdiv_cell.style.top = y*(mosaic_hborder) + y*cell_height +"px"; + mdiv_cell.style.width = cell_width + "px"; + mdiv_cell.style.height = cell_height + "px"; + mdiv_cell.style.backgroundColor = "#afa"; + + mdiv.appendChild(mdiv_cell); + + var id = x+'_'+y; + var melt = create_button( cells[id] ? cells[id] : '?', 'mosaic_elt_choose(\"'+id+'\");' ); + melt.setAttribute( 'id', id ); + melt.style.position = "absolute"; + melt.style.top = "40%"; // approx in the middle + melt.style.left = "40%"; + melt.setAttribute( 'title', 'Click to choose stream' ); + melt.style.backgroundColor = "#afa"; + melt.style.border = "0px"; + + mdiv_cell.appendChild( melt ); + + // set mosaic_vborder + if(x < (mosaic_cols-1)) + { + var mdiv_vborder = document.createElement( 'div' ); + mdiv_vborder.setAttribute( 'id', 'mdiv_vborder'+x+'_'+y ); + // show fake border between mosaic items + if(mosaic_vborder==0) + { + mdiv_vborder.style.backgroundColor = "#afa"; + mdiv_vborder.style.borderLeftWidth = "1px"; + mdiv_vborder.style.borderLeftColor = "#ebebeb"; + mdiv_vborder.style.borderLeftStyle = "dashed"; + mdiv_vborder.style.zIndex = "2"; + } + else + { + mdiv_vborder.style.backgroundColor = "#faa"; + } + mdiv_vborder.style.top = y*cell_height + y*mosaic_hborder + "px"; + mdiv_vborder.style.position = "absolute"; + mdiv_vborder.style.width = mosaic_vborder + "px"; + mdiv_vborder.style.left = (x+1)*cell_width +(x)*mosaic_vborder+ "px"; + mdiv_vborder.style.height = cell_height + "px"; + + mdiv.appendChild(mdiv_vborder); + } // end mosaic vborder + } // end mosaic cols + + // set mosaic_hborder + if(y < (mosaic_rows-1)) + { + var mdiv_hborder = document.createElement( 'div' ); + mdiv_hborder.setAttribute( 'id', 'mdiv_hborder'+x+'_'+y ); + // show fake border between mosaic items + if(mosaic_hborder==0) + { + mdiv_hborder.style.backgroundColor = "#afa"; + mdiv_hborder.style.borderTopWidth = "1px"; + mdiv_hborder.style.borderTopColor = "#ebebeb"; + mdiv_hborder.style.borderTopStyle = "dashed"; + mdiv_hborder.style.zIndex = "2"; + } + else + { + mdiv_hborder.style.backgroundColor = "#faa"; + } + mdiv_hborder.style.position = "absolute"; + mdiv_hborder.style.height = mosaic_hborder + "px"; + mdiv_hborder.style.width = mosaic_cols*cell_width + (mosaic_cols-1)*mosaic_vborder +"px"; + mdiv_hborder.style.top = (y)*mosaic_hborder + (y+1)*cell_height + "px"; + + mdiv.appendChild(mdiv_hborder); + } // end mosaic hborder + } // end mosaic rows + + mlayout.appendChild( mdiv ); + +} // end mosaic cols and rows - for( y = 0; y < mosaic_rows; y++ ) - { - var mrow = document.createElement( 'tr' ); - for( x = 0; x < mosaic_cols; x++ ) - { - var mcell = document.createElement( 'td' ); - setclass( mcell, 'mosaic_itm' ); - mcell.style.width = cell_width + "px"; - mcell.style.height = cell_height + "px"; - - var id = x+'_'+y; - var melt = create_button( cells[id] ? cells[id] : '?', 'mosaic_elt_choose(\"'+id+'\");' ); - melt.setAttribute( 'id', id ); - melt.setAttribute( 'title', 'Click to choose stream' ); - - mcell.appendChild( melt ); - mrow.appendChild( mcell ); - } - mtbody.appendChild( mrow ); - } - mtable.appendChild( mtbody ); - mdt.appendChild( mtable ); - mlayout.appendChild( mdt ); - } mosaic_code_update(); }
Albert

Posted: 08 Apr 2006 11:53
by dionoea
I've been quite busy last week. I'll check your patch this weekend.

...

Posted: 10 May 2006 13:34
by Albert
Hello,
any comment? The default mosaic wizard has still shifted panels in IE 6, so anything wrong with my suggestion?
Albert

Posted: 10 May 2006 22:39
by dionoea
Nope :) I just forgot (i have loads of things to do ...). Send me a private message on saturday so that i remember to have a look.