MDL-11082 Improved groups upgrade performance 1.8x -> 1.9; thanks Eloy for telling...
[moodle-pu.git] / lib / overlib / overlib_crossframe.js
blobef9e812f433a5b688e6482b4873af388b9052de0
1 //\/////
2 //\  overLIB Crossframe Support Plugin
3 //\  This file requires overLIB 4.10 or later.
4 //\
5 //\  overLIB 4.05 - You may not remove or change this notice.
6 //\  Copyright Erik Bosrup 1998-2004. All rights reserved.
7 //\  Contributors are listed on the homepage.
8 //\  See http://www.bosrup.com/web/overlib/ for details.
9 //   $Revision$                $Date$
10 //\/////
11 //\mini
13 ////////
14 // PRE-INIT
15 // Ignore these lines, configuration is below.
16 ////////
17 if (typeof olInfo == 'undefined' || typeof olInfo.meets == 'undefined' || !olInfo.meets(4.10)) alert('overLIB 4.10 or later is required for the Cross Frame Support Plugin.');
18 else {
19 registerCommands('frame');
22 ////////
23 //  PLUGIN FUNCTIONS
24 ///////
26 // Parses FRAME command
27 function parseFrameExtras(pf,i,ar) {
28         var k = i,v;
30         if (k < ar.length) {
31                 if (ar[k] == FRAME) { v = ar[++k]; if(pf == 'ol_') ol_frame = v; else opt_FRAME(v); return k; }
32         }
34         return -1;
37 ////////
38 // SUPPORT FUNCTIONS
39 ////////
41 // Defines which frame we should point to.
42 function opt_FRAME(frm) {
43         o3_frame = frm;         
44         over = createDivContainer('overDiv');   
45         return 0;
48 // Get frame depth of nested frames
49 function frmDepth(thisFrame,ofrm) {
50         var retVal = '';
52         for (var i = 0; i<thisFrame.length; i++) {
53                 if (thisFrame[i].length > 0) { 
54                         retVal = frmDepth(thisFrame[i],ofrm);
55                         if (retVal ==  '') continue;
56                 } else if (thisFrame[i] != ofrm) continue;
57                 retVal = '[' + i + ']' + retVal;
58                 break;
59         }
61         return retVal;
64 // Gets frame reference value relative to top frame
65 function getFrmRef(srcFrm,tgetFrm) {
66         var rtnVal = ''
68         if (tgetFrm != srcFrm) {
69                 var tFrm = frmDepth(top.frames,tgetFrm)
70                 var sFrm = frmDepth(top.frames,srcFrm)
71                 if (sFrm.length ==  tFrm.length) {
72                         l = tFrm.lastIndexOf('[')
73                         
74                         if (l) {
75                                 while ( sFrm.substring(0,l) != tFrm.substring(0,l) )
76                                 l = tFrm.lastIndexOf('[',l-1)
77                                 tFrm = tFrm.substr(l)
78                                 sFrm = sFrm.substr(l)
79                         }
80                 }
81         
82                 var cnt = 0, p = '',str = tFrm
83                 while ((k = str.lastIndexOf('[')) != -1) {
84                         cnt++ 
85                         str = str.substring(0,k)
86                 }
88                 for (var i = 0; i<cnt; i++) p = p + 'parent.'
89                 rtnVal = p + 'frames' + sFrm + '.'
90         }
92         return rtnVal
95 function chkForFrmRef() {
96         if(o3_frame != ol_frame) fnRef = getFrmRef(ol_frame,o3_frame)
97         return true;
100 ////////
101 // PLUGIN REGISTRATIONS
102 ////////
103 registerCmdLineFunction(parseFrameExtras);
104 registerPostParseFunction(chkForFrmRef);