PageSourceSearch

https://terrancelaw.github.io/iQuery/js/body.js

js terrancelaw.github.io collected 2026-10-03 10:05:16 UTC 3,664 bytes, 109 lines download raw bytes

1let Body = {
2	resizeTimer: null,
3
4	init: function() {
5		const self = this;
6
7		self.initResizeBehaviour();
8		self.initPressKeyBehaviour();
9		self.initClickBehaviour();
10	},
11	initResizeBehaviour: function() {
12		const self = this;
13
14		$(window).on('resize', function(event){
15			let isResizingLookAheadAndShelfPanes = $(event.target).hasClass('ui-resizable');
16
17			// update vis after resizing is done
18			if (!isResizingLookAheadAndShelfPanes) {
19				DimensionMeasurePane.adjustHeight();
20				clearTimeout(self.resizeTimer);
21				self.resizeTimer = setTimeout(onResizeWindow, 300);
22			}
23		});
24
25		function onResizeWindow() {
26			let isShowingViz = !Shelves.areEmpty();
27
28			if (isShowingViz) {
29				VisualizationPane.showLoader();
30				VisualizationPane.allowUpdating();
31		   		VegaliteGenerator.generateSpecification(); // may block vis update
32		    	VisualizationPane.tryUpdating();
33			}
34		}
35	},
36	initPressKeyBehaviour: function() {
37		const self = this;
38
39		$("body").keydown(function(event) {
40			let pressedEnter = (event.keyCode === 13);
41			let pressedUp = (event.keyCode === 38);
42			let pressedDown = (event.keyCode === 40);
43
44			let isPreviewingRecommendation = PreviewMode.isOn;
45			let isVariableSettingMenuOpened = $("#variable-setting-menu").css("display") == "block";
46			let isLookAheadSelectMetricMenuOpened = $("#look-ahead-select-metric-menu").css("display") == "block";
47
48			if (pressedEnter) {
49				if (!isVariableSettingMenuOpened && !isLookAheadSelectMetricMenuOpened && isPreviewingRecommendation)
50					PreviewMode.confirm();
51				if (isLookAheadSelectMetricMenuOpened && isPreviewingRecommendation)
52					PreviewMode.end();
53				if (isVariableSettingMenuOpened)
54					$("#variable-setting-menu .footer .confirm.button").click();
55				if (isLookAheadSelectMetricMenuOpened)
56					$("#look-ahead-select-metric-menu .footer .confirm.button").click();
57			}
58
59			if (pressedUp) {
60				if (isVariableSettingMenuOpened)
61					$('#variable-setting-menu').css('display', 'none');
62				if (isLookAheadSelectMetricMenuOpened)
63					$('#look-ahead-select-metric-menu').css('display', 'none');
64
65				LookAheadPane.selectPrevious();
66				event.preventDefault();
67			}
68
69			if (pressedDown) {
70				if (isVariableSettingMenuOpened)
71					$('#variable-setting-menu').css('display', 'none');
72				if (isLookAheadSelectMetricMenuOpened)
73					$('#look-ahead-select-metric-menu').css('display', 'none');
74				
75				LookAheadPane.selectNext();
76				event.preventDefault();
77			}
78		});
79	},
80	initClickBehaviour: function() {
81		const self = this;
82
83		$('body').on('click', function(event) {
84			for (let currentEventID in ClickEventListener.clickEvents) {
85				let currentTargetSelectors = ClickEventListener.clickEvents[currentEventID].targetSelectorArray;
86				let currentNotApplicableElSelectors = ClickEventListener.clickEvents[currentEventID].notApplicableElSelectorArray;
87				let isClickedElOneOfTargets = clickedElInSelectorArray(event.target, currentTargetSelectors);
88				let isClickedElOneOfNotApplicableEl = clickedElInSelectorArray(event.target, currentNotApplicableElSelectors);
89
90				if (!isClickedElOneOfNotApplicableEl && isClickedElOneOfTargets)
91					ClickEventListener.clickEvents[currentEventID].onClick(event);
92				if (!isClickedElOneOfNotApplicableEl && !isClickedElOneOfTargets)
93					ClickEventListener.clickEvents[currentEventID].onNotClick(event);
94			}
95		});
96
97		function clickedElInSelectorArray(clickedEl, selectorArray) {
98			for (let i = 0; i < selectorArray.length; i++) {
99				let currentSelector = selectorArray[i];
100				let isClickedElInSelectorArray = $(clickedEl).closest(currentSelector).length > 0;
101
102				if (isClickedElInSelectorArray)
103					return true;
104			}
105
106			return false;
107		}
108	}
109}

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.