Projekt

Obecné

Profil

Stáhnout (15.3 KB) Statistiky
| Větev: | Tag: | Revize:
1
/*
2
 @licstart  The following is the entire license notice for the JavaScript code in this file.
3

    
4
 The MIT License (MIT)
5

    
6
 Copyright (C) 1997-2020 by Dimitri van Heesch
7

    
8
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
9
 and associated documentation files (the "Software"), to deal in the Software without restriction,
10
 including without limitation the rights to use, copy, modify, merge, publish, distribute,
11
 sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
12
 furnished to do so, subject to the following conditions:
13

    
14
 The above copyright notice and this permission notice shall be included in all copies or
15
 substantial portions of the Software.
16

    
17
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
18
 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20
 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22

    
23
 @licend  The above is the entire license notice for the JavaScript code in this file
24
 */
25
var navTreeSubIndices = new Array();
26
var arrowDown = '▼';
27
var arrowRight = '►';
28

    
29
function getData(varName)
30
{
31
  var i = varName.lastIndexOf('/');
32
  var n = i>=0 ? varName.substring(i+1) : varName;
33
  return eval(n.replace(/\-/g,'_'));
34
}
35

    
36
function stripPath(uri)
37
{
38
  return uri.substring(uri.lastIndexOf('/')+1);
39
}
40

    
41
function stripPath2(uri)
42
{
43
  var i = uri.lastIndexOf('/');
44
  var s = uri.substring(i+1);
45
  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
46
  return m ? uri.substring(i-6) : s;
47
}
48

    
49
function hashValue()
50
{
51
  return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
52
}
53

    
54
function hashUrl()
55
{
56
  return '#'+hashValue();
57
}
58

    
59
function pathName()
60
{
61
  return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
62
}
63

    
64
function localStorageSupported()
65
{
66
  try {
67
    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
68
  }
69
  catch(e) {
70
    return false;
71
  }
72
}
73

    
74
function storeLink(link)
75
{
76
  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
77
      window.localStorage.setItem('navpath',link);
78
  }
79
}
80

    
81
function deleteLink()
82
{
83
  if (localStorageSupported()) {
84
    window.localStorage.setItem('navpath','');
85
  }
86
}
87

    
88
function cachedLink()
89
{
90
  if (localStorageSupported()) {
91
    return window.localStorage.getItem('navpath');
92
  } else {
93
    return '';
94
  }
95
}
96

    
97
function getScript(scriptName,func,show)
98
{
99
  var head = document.getElementsByTagName("head")[0];
100
  var script = document.createElement('script');
101
  script.id = scriptName;
102
  script.type = 'text/javascript';
103
  script.onload = func;
104
  script.src = scriptName+'.js';
105
  head.appendChild(script);
106
}
107

    
108
function createIndent(o,domNode,node,level)
109
{
110
  var level=-1;
111
  var n = node;
112
  while (n.parentNode) { level++; n=n.parentNode; }
113
  if (node.childrenData) {
114
    var imgNode = document.createElement("span");
115
    imgNode.className = 'arrow';
116
    imgNode.style.paddingLeft=(16*level).toString()+'px';
117
    imgNode.innerHTML=arrowRight;
118
    node.plus_img = imgNode;
119
    node.expandToggle = document.createElement("a");
120
    node.expandToggle.href = "javascript:void(0)";
121
    node.expandToggle.onclick = function() {
122
      if (node.expanded) {
123
        $(node.getChildrenUL()).slideUp("fast");
124
        node.plus_img.innerHTML=arrowRight;
125
        node.expanded = false;
126
      } else {
127
        expandNode(o, node, false, false);
128
      }
129
    }
130
    node.expandToggle.appendChild(imgNode);
131
    domNode.appendChild(node.expandToggle);
132
  } else {
133
    var span = document.createElement("span");
134
    span.className = 'arrow';
135
    span.style.width   = 16*(level+1)+'px';
136
    span.innerHTML = ' ';
137
    domNode.appendChild(span);
138
  }
139
}
140

    
141
var animationInProgress = false;
142

    
143
function gotoAnchor(anchor,aname,updateLocation)
144
{
145
  var pos, docContent = $('#doc-content');
146
  var ancParent = $(anchor.parent());
147
  if (ancParent.hasClass('memItemLeft') ||
148
      ancParent.hasClass('memtitle') ||
149
      ancParent.hasClass('fieldname') ||
150
      ancParent.hasClass('fieldtype') ||
151
      ancParent.is(':header'))
152
  {
153
    pos = ancParent.position().top;
154
  } else if (anchor.position()) {
155
    pos = anchor.position().top;
156
  }
157
  if (pos) {
158
    var dist = Math.abs(Math.min(
159
               pos-docContent.offset().top,
160
               docContent[0].scrollHeight-
161
               docContent.height()-docContent.scrollTop()));
162
    animationInProgress=true;
163
    docContent.animate({
164
      scrollTop: pos + docContent.scrollTop() - docContent.offset().top
165
    },Math.max(50,Math.min(500,dist)),function(){
166
      if (updateLocation) window.location.href=aname;
167
      animationInProgress=false;
168
    });
169
  }
170
}
171

    
172
function newNode(o, po, text, link, childrenData, lastNode)
173
{
174
  var node = new Object();
175
  node.children = Array();
176
  node.childrenData = childrenData;
177
  node.depth = po.depth + 1;
178
  node.relpath = po.relpath;
179
  node.isLast = lastNode;
180

    
181
  node.li = document.createElement("li");
182
  po.getChildrenUL().appendChild(node.li);
183
  node.parentNode = po;
184

    
185
  node.itemDiv = document.createElement("div");
186
  node.itemDiv.className = "item";
187

    
188
  node.labelSpan = document.createElement("span");
189
  node.labelSpan.className = "label";
190

    
191
  createIndent(o,node.itemDiv,node,0);
192
  node.itemDiv.appendChild(node.labelSpan);
193
  node.li.appendChild(node.itemDiv);
194

    
195
  var a = document.createElement("a");
196
  node.labelSpan.appendChild(a);
197
  node.label = document.createTextNode(text);
198
  node.expanded = false;
199
  a.appendChild(node.label);
200
  if (link) {
201
    var url;
202
    if (link.substring(0,1)=='^') {
203
      url = link.substring(1);
204
      link = url;
205
    } else {
206
      url = node.relpath+link;
207
    }
208
    a.className = stripPath(link.replace('#',':'));
209
    if (link.indexOf('#')!=-1) {
210
      var aname = '#'+link.split('#')[1];
211
      var srcPage = stripPath(pathName());
212
      var targetPage = stripPath(link.split('#')[0]);
213
      a.href = srcPage!=targetPage ? url : "javascript:void(0)";
214
      a.onclick = function(){
215
        storeLink(link);
216
        if (!$(a).parent().parent().hasClass('selected'))
217
        {
218
          $('.item').removeClass('selected');
219
          $('.item').removeAttr('id');
220
          $(a).parent().parent().addClass('selected');
221
          $(a).parent().parent().attr('id','selected');
222
        }
223
        var anchor = $(aname);
224
        gotoAnchor(anchor,aname,true);
225
      };
226
    } else {
227
      a.href = url;
228
      a.onclick = function() { storeLink(link); }
229
    }
230
  } else {
231
    if (childrenData != null)
232
    {
233
      a.className = "nolink";
234
      a.href = "javascript:void(0)";
235
      a.onclick = node.expandToggle.onclick;
236
    }
237
  }
238

    
239
  node.childrenUL = null;
240
  node.getChildrenUL = function() {
241
    if (!node.childrenUL) {
242
      node.childrenUL = document.createElement("ul");
243
      node.childrenUL.className = "children_ul";
244
      node.childrenUL.style.display = "none";
245
      node.li.appendChild(node.childrenUL);
246
    }
247
    return node.childrenUL;
248
  };
249

    
250
  return node;
251
}
252

    
253
function showRoot()
254
{
255
  var headerHeight = $("#top").height();
256
  var footerHeight = $("#nav-path").height();
257
  var windowHeight = $(window).height() - headerHeight - footerHeight;
258
  (function (){ // retry until we can scroll to the selected item
259
    try {
260
      var navtree=$('#nav-tree');
261
      navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
262
    } catch (err) {
263
      setTimeout(arguments.callee, 0);
264
    }
265
  })();
266
}
267

    
268
function expandNode(o, node, imm, showRoot)
269
{
270
  if (node.childrenData && !node.expanded) {
271
    if (typeof(node.childrenData)==='string') {
272
      var varName    = node.childrenData;
273
      getScript(node.relpath+varName,function(){
274
        node.childrenData = getData(varName);
275
        expandNode(o, node, imm, showRoot);
276
      }, showRoot);
277
    } else {
278
      if (!node.childrenVisited) {
279
        getNode(o, node);
280
      }
281
      $(node.getChildrenUL()).slideDown("fast");
282
      node.plus_img.innerHTML = arrowDown;
283
      node.expanded = true;
284
    }
285
  }
286
}
287

    
288
function glowEffect(n,duration)
289
{
290
  n.addClass('glow').delay(duration).queue(function(next){
291
    $(this).removeClass('glow');next();
292
  });
293
}
294

    
295
function highlightAnchor()
296
{
297
  var aname = hashUrl();
298
  var anchor = $(aname);
299
  if (anchor.parent().attr('class')=='memItemLeft'){
300
    var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
301
    glowEffect(rows.children(),300); // member without details
302
  } else if (anchor.parent().attr('class')=='fieldname'){
303
    glowEffect(anchor.parent().parent(),1000); // enum value
304
  } else if (anchor.parent().attr('class')=='fieldtype'){
305
    glowEffect(anchor.parent().parent(),1000); // struct field
306
  } else if (anchor.parent().is(":header")) {
307
    glowEffect(anchor.parent(),1000); // section header
308
  } else {
309
    glowEffect(anchor.next(),1000); // normal member
310
  }
311
}
312

    
313
function selectAndHighlight(hash,n)
314
{
315
  var a;
316
  if (hash) {
317
    var link=stripPath(pathName())+':'+hash.substring(1);
318
    a=$('.item a[class$="'+link+'"]');
319
  }
320
  if (a && a.length) {
321
    a.parent().parent().addClass('selected');
322
    a.parent().parent().attr('id','selected');
323
    highlightAnchor();
324
  } else if (n) {
325
    $(n.itemDiv).addClass('selected');
326
    $(n.itemDiv).attr('id','selected');
327
  }
328
  var topOffset=5;
329
  if (typeof page_layout!=='undefined' && page_layout==1) {
330
    topOffset+=$('#top').outerHeight();
331
  }
332
  if ($('#nav-tree-contents .item:first').hasClass('selected')) {
333
    topOffset+=25;
334
  }
335
  $('#nav-sync').css('top',topOffset+'px');
336
  showRoot();
337
}
338

    
339
function showNode(o, node, index, hash)
340
{
341
  if (node && node.childrenData) {
342
    if (typeof(node.childrenData)==='string') {
343
      var varName    = node.childrenData;
344
      getScript(node.relpath+varName,function(){
345
        node.childrenData = getData(varName);
346
        showNode(o,node,index,hash);
347
      },true);
348
    } else {
349
      if (!node.childrenVisited) {
350
        getNode(o, node);
351
      }
352
      $(node.getChildrenUL()).css({'display':'block'});
353
      node.plus_img.innerHTML = arrowDown;
354
      node.expanded = true;
355
      var n = node.children[o.breadcrumbs[index]];
356
      if (index+1<o.breadcrumbs.length) {
357
        showNode(o,n,index+1,hash);
358
      } else {
359
        if (typeof(n.childrenData)==='string') {
360
          var varName = n.childrenData;
361
          getScript(n.relpath+varName,function(){
362
            n.childrenData = getData(varName);
363
            node.expanded=false;
364
            showNode(o,node,index,hash); // retry with child node expanded
365
          },true);
366
        } else {
367
          var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
368
          if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
369
            expandNode(o, n, true, true);
370
          }
371
          selectAndHighlight(hash,n);
372
        }
373
      }
374
    }
375
  } else {
376
    selectAndHighlight(hash);
377
  }
378
}
379

    
380
function removeToInsertLater(element) {
381
  var parentNode = element.parentNode;
382
  var nextSibling = element.nextSibling;
383
  parentNode.removeChild(element);
384
  return function() {
385
    if (nextSibling) {
386
      parentNode.insertBefore(element, nextSibling);
387
    } else {
388
      parentNode.appendChild(element);
389
    }
390
  };
391
}
392

    
393
function getNode(o, po)
394
{
395
  var insertFunction = removeToInsertLater(po.li);
396
  po.childrenVisited = true;
397
  var l = po.childrenData.length-1;
398
  for (var i in po.childrenData) {
399
    var nodeData = po.childrenData[i];
400
    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
401
      i==l);
402
  }
403
  insertFunction();
404
}
405

    
406
function gotoNode(o,subIndex,root,hash,relpath)
407
{
408
  var nti = navTreeSubIndices[subIndex][root+hash];
409
  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
410
  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
411
    navTo(o,NAVTREE[0][1],"",relpath);
412
    $('.item').removeClass('selected');
413
    $('.item').removeAttr('id');
414
  }
415
  if (o.breadcrumbs) {
416
    o.breadcrumbs.unshift(0); // add 0 for root node
417
    showNode(o, o.node, 0, hash);
418
  }
419
}
420

    
421
function navTo(o,root,hash,relpath)
422
{
423
  var link = cachedLink();
424
  if (link) {
425
    var parts = link.split('#');
426
    root = parts[0];
427
    if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
428
    else hash='';
429
  }
430
  if (hash.match(/^#l\d+$/)) {
431
    var anchor=$('a[name='+hash.substring(1)+']');
432
    glowEffect(anchor.parent(),1000); // line number
433
    hash=''; // strip line number anchors
434
  }
435
  var url=root+hash;
436
  var i=-1;
437
  while (NAVTREEINDEX[i+1]<=url) i++;
438
  if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
439
  if (navTreeSubIndices[i]) {
440
    gotoNode(o,i,root,hash,relpath)
441
  } else {
442
    getScript(relpath+'navtreeindex'+i,function(){
443
      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
444
      if (navTreeSubIndices[i]) {
445
        gotoNode(o,i,root,hash,relpath);
446
      }
447
    },true);
448
  }
449
}
450

    
451
function showSyncOff(n,relpath)
452
{
453
    n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
454
}
455

    
456
function showSyncOn(n,relpath)
457
{
458
    n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
459
}
460

    
461
function toggleSyncButton(relpath)
462
{
463
  var navSync = $('#nav-sync');
464
  if (navSync.hasClass('sync')) {
465
    navSync.removeClass('sync');
466
    showSyncOff(navSync,relpath);
467
    storeLink(stripPath2(pathName())+hashUrl());
468
  } else {
469
    navSync.addClass('sync');
470
    showSyncOn(navSync,relpath);
471
    deleteLink();
472
  }
473
}
474

    
475
var loadTriggered = false;
476
var readyTriggered = false;
477
var loadObject,loadToRoot,loadUrl,loadRelPath;
478

    
479
$(window).on('load',function(){
480
  if (readyTriggered) { // ready first
481
    navTo(loadObject,loadToRoot,loadUrl,loadRelPath);
482
    showRoot();
483
  }
484
  loadTriggered=true;
485
});
486

    
487
function initNavTree(toroot,relpath)
488
{
489
  var o = new Object();
490
  o.toroot = toroot;
491
  o.node = new Object();
492
  o.node.li = document.getElementById("nav-tree-contents");
493
  o.node.childrenData = NAVTREE;
494
  o.node.children = new Array();
495
  o.node.childrenUL = document.createElement("ul");
496
  o.node.getChildrenUL = function() { return o.node.childrenUL; };
497
  o.node.li.appendChild(o.node.childrenUL);
498
  o.node.depth = 0;
499
  o.node.relpath = relpath;
500
  o.node.expanded = false;
501
  o.node.isLast = true;
502
  o.node.plus_img = document.createElement("span");
503
  o.node.plus_img.className = 'arrow';
504
  o.node.plus_img.innerHTML = arrowRight;
505

    
506
  if (localStorageSupported()) {
507
    var navSync = $('#nav-sync');
508
    if (cachedLink()) {
509
      showSyncOff(navSync,relpath);
510
      navSync.removeClass('sync');
511
    } else {
512
      showSyncOn(navSync,relpath);
513
    }
514
    navSync.click(function(){ toggleSyncButton(relpath); });
515
  }
516

    
517
  if (loadTriggered) { // load before ready
518
    navTo(o,toroot,hashUrl(),relpath);
519
    showRoot();
520
  } else { // ready before load
521
    loadObject  = o;
522
    loadToRoot  = toroot;
523
    loadUrl     = hashUrl();
524
    loadRelPath = relpath;
525
    readyTriggered=true;
526
  }
527

    
528
  $(window).bind('hashchange', function(){
529
     if (window.location.hash && window.location.hash.length>1){
530
       var a;
531
       if ($(location).attr('hash')){
532
         var clslink=stripPath(pathName())+':'+hashValue();
533
         a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
534
       }
535
       if (a==null || !$(a).parent().parent().hasClass('selected')){
536
         $('.item').removeClass('selected');
537
         $('.item').removeAttr('id');
538
       }
539
       var link=stripPath2(pathName());
540
       navTo(o,link,hashUrl(),relpath);
541
     } else if (!animationInProgress) {
542
       $('#doc-content').scrollTop(0);
543
       $('.item').removeClass('selected');
544
       $('.item').removeAttr('id');
545
       navTo(o,toroot,hashUrl(),relpath);
546
     }
547
  })
548
}
549
/* @license-end */
(99-99/111)