NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/Chameleon/trunk/Chameleon/js/cwc_dhtml.js

Revision 13 (checked in by jcleary, 17 years ago)

Latest Chameleon code checkout from previous repository

Line 
1 /**
2  * @project     Chameleon
3  * @revision    $Id: cwc_dhtml.js,v 1.18 2005/03/30 19:20:37 pspencer Exp $
4  * @purpose     DHTML utilities for Chameleon widgets
5  * @author      DM Solutions Group (spencer@dmsolutions.ca)
6  * @copyright
7  * <b>Copyright (c) 2002, DM Solutions Group Inc.</b>
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation
11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  * and/or sell copies of the Software, and to permit persons to whom the
13  * Software is furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included
16  * in all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24  * DEALINGS IN THE SOFTWARE.
25  */
26
27 //browser detection
28 var CWCIsNav4 = (document.layers) ? 1:0;
29 var CWCIsIE = (document.all) ? 1:0;
30 var CWCIsNav6 = (document.getElementById && !document.all) ? 1:0;
31
32 /**
33  * a global layer that can be used to mask off the page
34  * useful for showing popup divs and preventing access to the
35  * main application while the div is popped up
36  *
37  * suggested useage is to call CWCDHTML_ShowMaskLayer( zIndex )
38  * with zIndex = <int> that would be just below your popup div zIndex.
39  *
40  * when done with the mask layer, call CWCDHTML_HideMaskLayer()
41  *
42  * You can style the mask layer by calling CWCDHTML_GetMaskLayer() to
43  * retrieve a style object for the layer.
44  */
45  
46 var gszCWCMaskLayerName = 'CWCMaskLayer';
47 var goCWCMaskLayer = null;
48 CWCDHTML_CreateLayer( gszCWCMaskLayerName, -10000, -10000, 1, 1, false, '&nbsp;' );
49    
50 function CWCDHTML_InitializeMaskLayer()
51 {
52     CWCDHTML_SetLayerBackgroundColor( gszCWCMaskLayerName, '#ffffff' );
53     CWCDHTML_SetLayerOpacity( gszCWCMaskLayerName, 25 );
54    
55     goCWCMaskLayer = CWCDHTML_GetLayer( gszCWCMaskLayerName, true );
56     goCWCMaskLayer.onmousemove = CWCDHTML_MaskLayerMouseHandler;
57     goCWCMaskLayer.onmouseup = CWCDHTML_MaskLayerMouseHandler;
58     goCWCMaskLayer.onmousedown = CWCDHTML_MaskLayerMouseHandler;
59 }
60
61 function CWCDHTML_MaskLayerMouseHandler( e )
62 {
63     if (CWCIsIE)
64     {
65         e = event;
66         e.cancelBubble = true;
67         e.returnValue = false;
68     }
69     else
70     {
71         if (e.cancelable)
72             e.cancelBubble = true;
73     }
74 }
75
76 function CWCDHTML_ShowMaskLayer( zIndex )
77 {
78     if( goCWCMaskLayer == null)
79     {
80         CWCDHTML_InitializeMaskLayer();
81     }
82        
83     var browserWH = CWCDHTML_GetBrowserWH();
84    
85     CWCDHTML_SetLayerSize( gszCWCMaskLayerName, browserWH[0], browserWH[1] );
86     CWCDHTML_SetLayerZOrder( gszCWCMaskLayerName, zIndex );
87     CWCDHTML_SetLayerPos( gszCWCMaskLayerName, 0, 0 );
88     CWCDHTML_ShowLayer( gszCWCMaskLayerName );
89 }
90
91 function CWCDHTML_GetMaskLayer( )
92 {
93     if( goCWCMaskLayer == null)
94     {
95         CWCDHTML_InitializeMaskLayer();
96     }
97
98     return goCWCMaskLayer;
99 }
100
101 function CWCDHTML_HideMaskLayer()
102 {
103     if( goCWCMaskLayer == null)
104     {
105         CWCDHTML_InitializeMaskLayer();
106     }
107
108     CWCDHTML_HideLayer( gszCWCMaskLayerName );
109 }
110
111 /* ==================================================================== */
112 /*  CWCDHTML_GetBrowserWH( )                                            */
113 /*  returns width and height of current browser window                  */
114 /* ==================================================================== */
115 function CWCDHTML_GetBrowserWH( )
116 {
117     var aWinWH = Array();
118
119     if (self.innerHeight) // all except Explorer
120     {
121       aWinWH[0] = self.innerWidth;
122       aWinWH[1] = self.innerHeight;
123     }
124     else if (document.documentElement && document.documentElement.clientHeight)
125       // Explorer 6 Strict Mode
126     {
127       aWinWH[0] = document.documentElement.clientWidth;
128       aWinWH[1] = document.documentElement.clientHeight;
129     }
130     else if (document.body) // other Explorers
131     {
132       aWinWH[0] = document.body.clientWidth;
133       aWinWH[1] = document.body.clientHeight;
134     }
135
136     return aWinWH;
137 }
138
139
140 /* ==================================================================== */
141 /*  CWCDHTML_GetImage( szImage )                                        */
142 /*  returns a handle on an Image object                                 */
143 /* ==================================================================== */
144 function CWCDHTML_GetImage( szImage )
145 {
146     var obj = null;
147     if (CWCIsNav4) //Netscape 4.x
148     {
149         obj = document.images[szImage];
150     }
151     else
152     {
153         obj = document.getElementById(szImage);
154     }
155     return obj;
156 }
157
158
159 /* ==================================================================== */
160 /*  CWCDHTML_GetLayer( name )                                           */
161 /*  returns a handle on a Layer object                                  */
162 /*  if optional arg (true) is set - layer returned writes to contents   */
163 /* ==================================================================== */
164 function CWCDHTML_GetLayer( name )
165 {
166     if (CWCIsNav4) // Netscape
167     {               
168         return document.layers[name];
169     }
170     else if (CWCIsIE) // IE
171     {           
172         if (eval('document.all.' + name) != null)
173         {
174             if( arguments.length > 1 && arguments[1] == true )
175             {
176                 layer = eval('document.all.' + name);
177             }
178             else
179             {
180                 layer = eval('document.all.' + name + '.style');
181             }
182             return layer;
183
184         }
185         else
186         {
187             return null;
188         }
189     }
190     else if (CWCIsNav6)
191     {
192         if (eval('document.getElementById("' + name + '")') != null)
193         {
194             if( arguments.length > 1 && arguments[1] == true )
195             {
196                 layer = eval('document.getElementById("' + name + '")');
197             }
198             else
199             {
200                 layer = eval('document.getElementById("' + name + '").style');
201             }
202             return layer;
203         }
204         else
205         {
206             return null;
207         }
208     }
209     else // Don't know
210     {                             
211         return null;
212     }
213 }
214
215
216 /* ==================================================================== */
217 /*  CWCDHTML_SetLayerZOrder( name, nLevel )                             */
218 /*  sets the z-Index on a layer                                         */
219 /* ==================================================================== */
220 function CWCDHTML_SetLayerZOrder( name, nLevel )
221 {
222     var layer = CWCDHTML_GetLayer( name );
223     layer.zIndex = nLevel;
224     //CWCIsNav4 ? layer.zIndex = nLevel : layer.style.zIndex = nLevel;
225 }
226
227
228 /* ==================================================================== */
229 /*  CWCDHTML_ClipLayer(name, clipleft, cliptop, clipright, clipbottom)  */
230 /*  clips a layer                                                       */
231 /* ==================================================================== */
232 function CWCDHTML_ClipLayer(name, clipleft, cliptop, clipright, clipbottom)
233 {
234     var layer = CWCDHTML_GetLayer(name);
235     if (layer != null)
236     {
237         if (CWCIsNav4) // Netscape
238         {                     
239             layer.clip.left   = clipleft;
240             layer.clip.top    = cliptop;
241             layer.clip.right  = clipright;
242             layer.clip.bottom = clipbottom;
243         }
244         else if (CWCIsIE) // IE
245         {                 
246             layer.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' +
247                          clipbottom + ' ' + clipleft + ')';
248         }
249         else if (CWCIsNav6) // Netscape 6
250         {       
251             layer.clip = 'rect(' + cliptop + 'px,' + clipright + 'px,' +
252                           clipbottom + 'px,' + clipleft + 'px)';
253         }
254     }
255 }
256
257
258 /* ======================================================================== */
259 /*  CWCDHTML_CreateLayer(name, left, top, width, height, visible, content)  */
260 /*  creates a layer                                                         */
261 /* ======================================================================== */
262 function CWCDHTML_CreateLayer(name, left, top, width, height, visible, content)
263 {
264     var layer, str;
265     if (CWCIsNav4)
266     {                        // Netscape
267         str = '<layer id="' + name + '" name="'+name+'" left=' + left + ' top=' + top +
268               ' width=' + width + ' height=' + height +
269               ' visibility=' + (visible ? '"show"' : '"hide"') + '>';
270         document.writeln(str);
271         document.writeln(content);
272         document.writeln('</layer>');
273         layer = CWCDHTML_GetLayer(name);
274         layer.width = width;
275         layer.height = height;
276     }
277     else if (CWCIsIE || CWCIsNav6)
278     {                    // IE
279         str = '<div id="' + name +
280               '" name="' + name + '" style="position:absolute; overflow:hidden; left:' + left +
281               'px; top:' + top + 'px; width:' + width + 'px; height:' + height +
282               'px;' + ' visibility:' + (visible ? 'visible;' : 'hidden;') +  '">';
283         document.writeln(str);
284         document.writeln(content);
285         document.writeln('</div>');
286     }
287     else
288     {
289         return null;
290     }
291 }
292
293
294 /* ==================================================================== */
295 /*  CWCDHTML_SetLayerBackgroundColor(name, color)                       */
296 /*  sets the background color of a layer                                */
297 /* ==================================================================== */
298 function CWCDHTML_SetLayerBackgroundColor(name, color)
299 {
300     var layer = CWCDHTML_GetLayer(name);
301     if (layer != null)
302     {
303         if (CWCIsNav4) // Netscape
304         {             
305             layer.bgColor = color;
306         }
307         else if (CWCIsIE || CWCIsNav6) // IE
308         {         
309             layer.backgroundColor = color;
310         }
311     }
312 }
313
314
315 /* ==================================================================== */
316 /*  CWCDHTML_SetLayerOpacity(name, opacity)                             */
317 /*  sets the opacity/alpha of a layer                                   */
318 /* ==================================================================== */
319 function CWCDHTML_SetLayerOpacity(name, opacity)
320 {
321     var layer = CWCDHTML_GetLayer( name );
322     if (layer != null)
323     {
324         if (CWCIsNav4)
325         {
326             //netscape 4 doesn't support transparency
327             return;
328         }
329         else if (CWCIsIE)
330         {
331             if (opacity <= 1)
332                 opacity = opacity * 100;
333             layer.filter = "Alpha(opacity=" + opacity + ")";
334         }
335         else if (CWCIsNav6)
336         {
337             if (opacity > 1)
338                 opacity = opacity / 100;
339             layer.MozOpacity = opacity;
340         }
341     }
342 }
343
344
345 /* ==================================================================== */
346 /*  CWCDHTML_GetLayerOpacity( layer )                                   */
347 /*  returns the opacity/alpha of a layer                                */
348 /* ==================================================================== */
349 function CWCDHTML_GetLayerOpacity( layer )
350 {
351     var opacity = null;
352     if (CWCIsNav6)
353     {
354         opacity = layer.style.MozOpacity;
355     }
356     else if (CWCIsIE)
357     {
358         var filter = layer.style.filter;
359         var start = filter.indexOf( "=" ) + 1;
360         var end = filter.indexOf( ")" );
361         opacity = filter.substring( start, end);
362     }
363     return opacity;
364 }
365  
366  
367 /* ==================================================================== */
368 /*  CWCDHTML_ShowLayer(name)                                            */
369 /*  makes a layer visible                                               */
370 /* ==================================================================== */
371 function CWCDHTML_ShowLayer(name)
372 {
373     var layer = CWCDHTML_GetLayer(name);
374     if (layer != null)
375     {
376         if (CWCIsNav4) // Netscape
377         {             
378             layer.visibility = "show";
379             layer.display = 'block';
380         }
381         else if (CWCIsIE || CWCIsNav6) // IE
382         {         
383             layer.visibility = "visible";
384             layer.display = 'block';
385         }
386     }
387 }
388          
389
390 /* ==================================================================== */
391 /*  CWCDHTML_HideLayer(name)                                            */
392 /*  makes a layer hidden                                                */
393 /* ==================================================================== */
394 function CWCDHTML_HideLayer(name)
395 {
396     var layer = CWCDHTML_GetLayer(name);
397     if (layer != null)
398     {
399         if (CWCIsNav4)
400         {              // Netscape
401             layer.visibility = "hide";
402             layer.display = 'none';
403         }
404         else if (CWCIsIE || CWCIsNav6)
405         {
406             layer.visibility = "hidden";
407             layer.display = 'none';
408         }
409     }
410     else
411        alert( 'layer is null? ' + name );
412 }
413
414
415 /* ==================================================================== */
416 /*  CWCDHTML_FindObjectPosX(obj)                                        */
417 /*  returns the X (left) position of an object                          */
418 /* ==================================================================== */
419 function CWCDHTML_FindObjectPosX(obj)
420 {
421     var curleft = 0;
422     if (document.getElementById || document.all)
423     {
424         while (obj.offsetParent)
425         {
426             curleft += obj.offsetLeft;
427             obj = obj.offsetParent;
428         }
429     }
430     else if (document.layers)
431         curleft += obj.x;
432     return curleft;
433 }
434
435
436 /* ==================================================================== */
437 /*  CWCDHTML_FindObjectPosY(obj)                                        */
438 /*  returns the Y (top) position of an object                           */
439 /* ==================================================================== */
440 function CWCDHTML_FindObjectPosY(obj)
441 {
442     var curtop = 0;
443     if (document.getElementById || document.all)
444     {
445         while (obj.offsetParent)
446         {
447             curtop += obj.offsetTop;
448             obj = obj.offsetParent;
449         }
450     }
451     else if (document.layers)
452         curtop += obj.y;
453     return curtop;
454 }
455
456
457 /* ==================================================================== */
458 /*  CWCDHTML_FindObjectPos(oElement)                                    */
459 /*  returns the X & Y positions of an object as an array                */
460 /* ==================================================================== */
461 function CWCDHTML_FindObjectPos(oElement)
462 {
463     var aPos = new Array(2);
464     aPos[0] = CWCDHTML_FindObjectPosX( oElement );
465     aPos[1] = CWCDHTML_FindObjectPosY( oElement );
466
467     if (arguments.length == 2 && CWCIsNav4)
468     {
469         var oLayer = CWCDHTML_GetLayer( arguments[1] );
470        
471         aPos[0] = aPos[0] + oLayer.left;
472         aPos[1] = aPos[1] + oLayer.top;
473     }
474     return aPos;
475 }
476
477
478 /* ==================================================================== */
479 /*  CWCDHTML_SetLayerPos(layerName, x, y)                               */
480 /*  sets layer position based on recieved x & y coords                  */
481 /* ==================================================================== */
482 function CWCDHTML_SetLayerPos(layerName, x, y)
483 {
484     var oLayer = CWCDHTML_GetLayer(layerName);
485    
486     if (oLayer != null)
487     {
488         oLayer.left=x;
489         oLayer.top=y;
490     }
491     else
492         alert( "layer " + layerName + " doesn't exist" );
493 }
494
495
496 /* ==================================================================== */
497 /*  CWCDHTML_SetLayerVis(layerName, bVisible)                           */
498 /*  sets layer visibility based on true/false                           */
499 /* ==================================================================== */
500 function CWCDHTML_SetLayerVis(layerName, bVisible)
501 {
502     var oLayer = CWCDHTML_GetLayer(layerName);
503     if (oLayer != null) //JC added
504     {
505     if (CWCIsNav4)
506     {
507         if (bVisible)
508             oLayer.visibility = "show";
509         else
510             oLayer.visibility = "hide";
511     }
512     else
513     {
514         if (bVisible)
515             oLayer.visibility = "visible";
516         else           
517             oLayer.visibility = "hidden";
518     }
519   } //JC added
520 }
521
522
523 /* ==================================================================== */
524 /*  CWCDHTML_SetLayerVis(layerName, bVisible)                           */
525 /*  sets layer visibility based on true/false                           */
526 /* ==================================================================== */
527 function CWCDHTML_SetLayerSize(layerName, imgWidth, imgHeight)
528 {
529
530     var oLayer = CWCDHTML_GetLayer( layerName );
531
532     oLayer.width = imgWidth;
533     oLayer.height = imgHeight;
534
535 }
536
537
538 /* ==================================================================== */
539 /*  CWCDHTML_PositionLayerByImage( szLayer, szImage )                   */
540 /*  positions layer based on image (tl,tr,bl,br)                        */
541 /* ==================================================================== */
542 function CWCDHTML_PositionLayerByImage( szLayer, szImage )
543 {
544     var oLayer = CWCDHTML_GetLayer( szLayer );
545     var oImage = CWCDHTML_GetImage( szImage );
546     var szPosition;
547     var aPos;
548     var x, y;
549
550     //If no position specified then put the layer to the top left
551     if (arguments.length > 2)
552         szPosition = arguments[2];
553     else
554         szPosition = "tl";
555  
556     //Are there offsets set?
557     if (arguments.length == 5)
558     {
559         nXOffset = arguments[3];
560         nYOffset = arguments[4];
561     }
562     else
563     {
564         nXOffset = 0;
565         nYOffset = 0;
566     }
567
568     //Get the Image position
569     aPos = CWCDHTML_FindObjectPos( oImage );
570     x = aPos[0] + nXOffset;;
571     y = aPos[1] + nYOffset;
572    
573     if (szPosition == "tr" )      //top right
574     {
575         x = x + oImage.width;
576     }
577     else if (szPosition == "bl" ) //bottom left
578     {
579         y = y + oImage.height;
580     }
581     else if (szPosition == "br" ) //bottom right
582     {
583         x = x + oImage.width;
584         y = y + oImage.height;
585     }
586    
587     if (oLayer == null)
588         alert( szLayer + " not found?" );
589     else
590     {
591        
592         oLayer.left = x;
593         oLayer.top = y;
594     }
595 }
596
597
598 /* ==================================================================== */
599 /*  CWCDHTML_PositionLayerByLayer( szLayer, szImage )                   */
600 /*  positions layer based on layer (t,b,l,r)                            */
601 /* ==================================================================== */
602 function CWCDHTML_PositionLayerByLayer( szTabsetLayer, szContentLayer )
603 {
604     var oTSLayer = CWCDHTML_GetLayer( szTabsetLayer );
605     var oCLayer = CWCDHTML_GetLayer( szContentLayer );
606    
607     var szPosition;
608     var deltaX, deltaY;
609
610     var layerCX = parseInt( oCLayer.left );
611     var layerCY = parseInt( oCLayer.top );
612
613     //If no position specified then put the layer to the top left
614     if (arguments.length > 2)
615         szPosition = arguments[2];
616     else
617         szPosition = "t";
618  
619     //Are there offsets set?
620     if (arguments.length == 5)
621     {
622         nXOffset = arguments[3];
623         nYOffset = arguments[4];
624     }
625     else
626     {
627         nXOffset = 0;
628         nYOffset = 0;
629     }
630
631     if( szPosition == "t" )  /////////////////////////////////TOP
632     {
633         var layerTSHeight = parseInt( oTSLayer.height );
634         deltaX = layerCX + nXOffset;
635         deltaY = layerCY - layerTSHeight - nYOffset;
636     }
637     else if( szPosition == "b" )  ////////////////////////////BOTTOM
638     {
639         var layerCHeight = parseInt( oCLayer.height );
640         deltaX = layerCX + nXOffset;
641         deltaY = layerCY + layerCHeight + nYOffset;
642     }
643    
644     else if( szPosition == "l" )  ////////////////////////////LEFT
645     {
646         var layerCWidth = parseInt( oCLayer.width );
647         deltaX = layerCX + layerCWidth + nXOffset;
648         deltaY = layerCY + nYOffset;
649     }
650     else  ////////////////////////////////////////////////////RIGHT
651     {
652         var layerTSWidth = parseInt( oTSLayer.width );
653         deltaX = layerCX - layerTSWidth - nXOffset;
654         deltaY = layerCY + nYOffset;
655     }
656
657     oTSLayer.left = deltaX;
658     oTSLayer.top = deltaY;
659    
660 }
661
662
663 /* ==================================================================== */
664 /*  CWCDHTML_ShowContents( szLayerName, szContents )                    */
665 /*  writes content to a layer                                           */
666 /* ==================================================================== */
667 function CWCDHTML_ShowContents(szLayerName,szContents)
668 {
669
670     oLayer = CWCDHTML_GetLayer(szLayerName, true);
671
672     if (CWCIsNav4)
673     {       
674         oLayer.document.open();
675         oLayer.document.write(szContents);
676         oLayer.document.close();
677     }
678     else
679     {
680         oLayer.innerHTML = szContents;
681     }
682    
683 }   
684
685
686 function CWCDHTML_AddEventHandler()
687 {
688 }
Note: See TracBrowser for help on using the browser.