Skip to content

Commit 3af238c

Browse files
committed
Synchronize Scrolling in Web page comparison WinMerge/winmerge#2064 #3 (2)
1 parent f95ece6 commit 3af238c

File tree

1 file changed

+49
-41
lines changed

1 file changed

+49
-41
lines changed

src/WinWebDiffLib/WebDiffWindow.hpp

Lines changed: 49 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ LR"(
1818
clearTimeout(wdw.timeout);
1919
wdw.timeout = setTimeout(function() {
2020
if (el.scroll)
21+
{
22+
window.removeEventListener('scroll', onScroll, true);
2123
el.scroll(sleft, stop);
24+
setTimeout(function() { window.addEventListener('scroll', onScroll, true); }, 10);
25+
}
2226
}, 100);
2327
}
2428
}
@@ -116,57 +120,38 @@ LR"(
116120
}
117121
return selectorList.join(' > ');
118122
}
119-
window.addEventListener('click', function(e) {
123+
function onScroll(e) {
124+
var el = ('scrollingElement' in e.target) ? e.target.scrollingElement : e.target;
125+
var sel = getElementSelector(el);
126+
var msg = {
127+
"event": "scroll",
128+
"window": getWindowLocation(),
129+
"selector": sel,
130+
"left": ((el.scrollWidth == el.clientWidth) ? 0 : (el.scrollLeft / (el.scrollWidth - el.clientWidth))),
131+
"top": ((el.scrollHeight == el.clientHeight) ? 0 : (el.scrollTop / (el.scrollHeight - el.clientHeight)))
132+
};
133+
window.chrome.webview.postMessage(JSON.stringify(msg));
134+
}
135+
function onClick(e) {
120136
if (wdw.inClick)
121137
return;
122138
var sel = getElementSelector(e.target);
123139
var msg = { "event": "click", "window": getWindowLocation(), "selector": sel };
124140
window.chrome.webview.postMessage(JSON.stringify(msg));
125-
}, true);
126-
window.addEventListener('input', function(e) {
141+
}
142+
function onInput(e) {
127143
var sel = getElementSelector(e.target);
128144
var msg = { "event": "input", "window": getWindowLocation(), "selector": sel, "value": e.target.value };
129145
window.chrome.webview.postMessage(JSON.stringify(msg));
130-
}, true);
131-
/*
132-
var forms = document.querySelectorAll('form');
133-
forms.forEach(function(form) {
134-
form.addEventListener('submit', function(e) {
135-
if (wdw.inSubmit)
136-
return;
137-
var sel = getElementSelector(e.target);
138-
var msg = { "event": "submit", "window": getWindowLocation(), "selector": sel };
139-
window.chrome.webview.postMessage(JSON.stringify(msg));
140-
});
141-
}, true);
142-
window.addEventListener('keydown', function(e) {
143-
if (wdw.inKeydown)
144-
return;
145-
var sel = getElementSelector(e.target);
146-
var msg = { "event": "keydown", "window": getWindowLocation(), "selector": sel, "altKey": e.altKey, "code": e.code, "ctrlKey": e.ctrlKey, "isComposing": e.isComposing, "key": e.key, "locale": e.locale, "location": e.location, "metaKey": e.metaKey, "repeat": e.repeat, "shiftKey": e.shiftKey };
147-
window.chrome.webview.postMessage(JSON.stringify(msg));
148-
}, true);
149-
*/
150-
window.addEventListener('dblclick', function(e) {
146+
}
147+
function onDblClick(e) {
151148
var el = e.target;
152149
var sel = getElementSelector(el);
153150
var wwdid = ('wwdid' in el.dataset) ? el.dataset['wwdid'] : (('wwdid' in el.parentElement.dataset) ? el.parentElement.dataset['wwdid'] : -1);
154151
var msg = { "event": "dblclick", "window": getWindowLocation(), "selector": sel, "wwdid": parseInt(wwdid) };
155152
window.chrome.webview.postMessage(JSON.stringify(msg));
156-
}, true);
157-
window.addEventListener('scroll', function(e) {
158-
var el = ('scrollingElement' in e.target) ? e.target.scrollingElement : e.target;
159-
var sel = getElementSelector(el);
160-
var msg = {
161-
"event": "scroll",
162-
"window": getWindowLocation(),
163-
"selector": sel,
164-
"left": ((el.scrollWidth == el.clientWidth) ? 0 : (el.scrollLeft / (el.scrollWidth - el.clientWidth))),
165-
"top": ((el.scrollHeight == el.clientHeight) ? 0 : (el.scrollTop / (el.scrollHeight - el.clientHeight)))
166-
};
167-
window.chrome.webview.postMessage(JSON.stringify(msg));
168-
}, true);
169-
window.chrome.webview.addEventListener('message', function(arg) {
153+
}
154+
function onMessage(arg) {
170155
var data = arg.data;
171156
switch (data.event) {
172157
case "scroll":
@@ -186,8 +171,32 @@ LR"(
186171
syncKeydown(data);
187172
break;
188173
*/
189-
}
190-
});
174+
}
175+
}
176+
window.addEventListener('click', onClick, true);
177+
window.addEventListener('input', onInput, true);
178+
window.addEventListener('dblclick', onDblClick, true);
179+
window.addEventListener('scroll', onScroll, true);
180+
window.chrome.webview.addEventListener('message', onMessage);
181+
/*
182+
var forms = document.querySelectorAll('form');
183+
forms.forEach(function(form) {
184+
form.addEventListener('submit', function(e) {
185+
if (wdw.inSubmit)
186+
return;
187+
var sel = getElementSelector(e.target);
188+
var msg = { "event": "submit", "window": getWindowLocation(), "selector": sel };
189+
window.chrome.webview.postMessage(JSON.stringify(msg));
190+
});
191+
}, true);
192+
window.addEventListener('keydown', function(e) {
193+
if (wdw.inKeydown)
194+
return;
195+
var sel = getElementSelector(e.target);
196+
var msg = { "event": "keydown", "window": getWindowLocation(), "selector": sel, "altKey": e.altKey, "code": e.code, "ctrlKey": e.ctrlKey, "isComposing": e.isComposing, "key": e.key, "locale": e.locale, "location": e.location, "metaKey": e.metaKey, "repeat": e.repeat, "shiftKey": e.shiftKey };
197+
window.chrome.webview.postMessage(JSON.stringify(msg));
198+
}, true);
199+
*/
191200
})();
192201
)";
193202

@@ -1164,7 +1173,6 @@ class CWebDiffWindow : public IWebDiffWindow
11641173
if (*count == m_nPanes && callback2)
11651174
callback2->Invoke({ hr, nullptr });
11661175
}
1167-
11681176
}
11691177
return S_OK;
11701178
}

0 commit comments

Comments
 (0)