PageSourceSearch

https://www.mville.edu/_resources/js/vendor/scrollsync.js

js mville.edu collected 2026-10-01 10:21:45 UTC 3,880 bytes, 146 lines download raw bytes

1/*
2 * iFactory Notes:
3 * Manual Edit to Vendor File for accessibility ("Attribute name not allowed on element tbody at this point."):
4 * Where: Line 59
5 * Original: if (!(name = el.getAttribute('name'))) {
6 * New:      if (!(name = el.getAttribute('data-name'))) {
7 */
8
9/**
10 * @fileoverview syncscroll - scroll several areas simultaniously
11 * @version 0.0.3
12 * 
13 * @license MIT, see http://github.com/asvd/intence
14 * @copyright 2015 asvd <[email protected]> 
15 */
16
17
18(function (root, factory) {
19  if (typeof define === 'function' && define.amd) {
20    define(['exports'], factory);
21  } else if (typeof exports !== 'undefined') {
22    factory(exports);
23  } else {
24    factory((root.syncscroll = {}));
25  }
26}(this, function (exports) {
27  var Width = 'Width';
28  var Height = 'Height';
29  var Top = 'Top';
30  var Left = 'Left';
31  var scroll = 'scroll';
32  var client = 'client';
33  var EventListener = 'EventListener';
34  var addEventListener = 'add' + EventListener;
35  var length = 'length';
36  var Math_round = Math.round;
37
38  var names = {};
39
40  var reset = function () {
41    var elems = document.getElementsByClassName('sync' + scroll);
42
43    // clearing existing listeners
44    var i, j, el, found, name;
45    for (name in names) {
46      if (names.hasOwnProperty(name)) {
47        for (i = 0; i < names[name][length]; i++) {
48          names[name][i]['remove' + EventListener](
49            scroll, names[name][i].syn, 0
50          );
51        }
52      }
53    }
54
55    // setting-up the new listeners
56    for (i = 0; i < elems[length];) {
57      found = j = 0;
58      el = elems[i++];
59      if (!(name = el.getAttribute('data-name'))) {
60        // name attribute is not set
61        continue;
62      }
63
64      el = el[scroll + 'er'] || el; // needed for intence
65
66      // searching for existing entry in array of names;
67      // searching for the element in that entry
68      for (; j < (names[name] = names[name] || [])[length];) {
69        found |= names[name][j++] == el;
70      }
71
72      if (!found) {
73        names[name].push(el);
74      }
75
76      el.eX = el.eY = 0;
77
78      (function (el, name) {
79        el[addEventListener](
80          scroll,
81          el.syn = function () {
82            var elems = names[name];
83
84            var scrollX = el[scroll + Left];
85            var scrollY = el[scroll + Top];
86
87            var xRate =
88              scrollX /
89              (el[scroll + Width] - el[client + Width]);
90            var yRate =
91              scrollY /
92              (el[scroll + Height] - el[client + Height]);
93
94            var updateX = scrollX != el.eX;
95            var updateY = scrollY != el.eY;
96
97            var otherEl, i = 0;
98
99            el.eX = scrollX;
100            el.eY = scrollY;
101
102            for (; i < elems[length];) {
103              otherEl = elems[i++];
104              if (otherEl != el) {
105                if (updateX &&
106                  Math_round(
107                    otherEl[scroll + Left] -
108                    (scrollX = otherEl.eX =
109                      Math_round(xRate *
110                        (otherEl[scroll + Width] -
111                          otherEl[client + Width]))
112                    )
113                  )
114                ) {
115                  otherEl[scroll + Left] = scrollX;
116                }
117
118                if (updateY &&
119                  Math_round(
120                    otherEl[scroll + Top] -
121                    (scrollY = otherEl.eY =
122                      Math_round(yRate *
123                        (otherEl[scroll + Height] -
124                          otherEl[client + Height]))
125                    )
126                  )
127                ) {
128                  otherEl[scroll + Top] = scrollY;
129                }
130              }
131            }
132          }, 0
133        );
134      })(el, name);
135    }
136  }
137
138
139  if (document.readyState == "complete") {
140    reset();
141  } else {
142    window[addEventListener]("load", reset, 0);
143  }
144
145  exports.reset = reset;
146}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.