File: sticky-util.js

package info (click to toggle)
thunderbird 1%3A60.9.0-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,339,492 kB
  • sloc: cpp: 5,457,040; ansic: 2,360,385; python: 596,167; asm: 340,963; java: 326,296; xml: 258,830; sh: 84,445; makefile: 23,705; perl: 17,317; objc: 3,768; yacc: 1,766; ada: 1,681; lex: 1,364; pascal: 1,264; cs: 879; exp: 527; php: 436; lisp: 258; ruby: 153; awk: 152; sed: 53; csh: 27
file content (69 lines) | stat: -rw-r--r-- 2,659 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
 * Builds a generic structure that looks like:
 *
 * <div class="scroller">  // 100x200 viewport
 *   <div class="contents">  // 100x500
 *     <div class="prepadding"></div> // 100x100
 *     <div class="container">  // 300x300 containing block
 *       <div class="filler"></div>  // 100x100
 *       <div class="sticky box"></div>  // 100x100
 *     </div>
 *   </div>
 * </div>
 *
 * If 'inline' is true, the necessary blocks will be marked as inline-block,
 * and the dimensions above are flipped.
 *
 * Returns an 'elements' object which has each of the above elements as an
 * accessible property.
 */
function setupStickyTest(stickyDirection, stickyOffset, inline = false) {
  const elements = {};

  elements.scroller = document.createElement('div');
  elements.scroller.style.position = 'relative';
  elements.scroller.style.width = (inline ? '200px' : '100px');
  elements.scroller.style.height = (inline ? '100px' : '200px');
  elements.scroller.style.overflow = 'scroll';

  elements.contents = document.createElement('div');
  elements.contents.style.height = (inline ? '100%' : '500px');
  elements.contents.style.width = (inline ? '500px' : '100%');

  elements.prepadding = document.createElement('div');
  elements.prepadding.style.height = (inline ? '100%' : '100px');
  elements.prepadding.style.width = (inline ? '100px' : '100%');
  if (inline)
    elements.prepadding.style.display = 'inline-block';

  elements.container = document.createElement('div');
  elements.container.style.height = (inline ? '100%' : '300px');
  elements.container.style.width = (inline ? '300px' : '100%');
  if (inline)
    elements.container.style.display = 'inline-block';

  elements.filler = document.createElement('div');
  elements.filler.style.height = (inline ? '100%' : '100px');
  elements.filler.style.width = (inline ? '100px' : '100%');
  if (inline)
    elements.filler.style.display = 'inline-block';

  elements.sticky = document.createElement('div');
  elements.sticky.style = `${stickyDirection}: ${stickyOffset}px;`;
  elements.sticky.style.position = 'sticky';
  elements.sticky.style.height = (inline ? '100%' : '100px');
  elements.sticky.style.width = (inline ? '100px' : '100%');
  elements.sticky.style.backgroundColor = 'green';
  if (inline)
    elements.sticky.style.display = 'inline-block';

  elements.scroller.appendChild(elements.contents);
  elements.contents.appendChild(elements.prepadding);
  elements.contents.appendChild(elements.container);
  elements.container.appendChild(elements.filler);
  elements.container.appendChild(elements.sticky);

  document.body.appendChild(elements.scroller);

  return elements;
}