Skip to content

Commit 0ef36ec

Browse files
Integration: move files to ts (jquery) (#31692)
1 parent 11a4a73 commit 0ef36ec

28 files changed

+599
-532
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* eslint-disable import/first */
2+
3+
import errors from '@ts/core/utils/m_error';
4+
import { compare as compareVersions } from '@ts/core/utils/m_version';
5+
// eslint-disable-next-line import/no-extraneous-dependencies
6+
import jQuery from 'jquery';
7+
8+
import useJQueryMethod from './jquery/use_jquery';
9+
10+
const useJQuery = useJQueryMethod();
11+
12+
if (useJQuery && compareVersions(jQuery.fn.jquery, [1, 10]) < 0) {
13+
// @ts-expect-error
14+
throw errors.Error('E0012');
15+
}
16+
17+
import './jquery/renderer';
18+
import './jquery/hooks';
19+
import './jquery/deferred';
20+
import './jquery/hold_ready';
21+
import './jquery/events';
22+
import './jquery/easing';
23+
import './jquery/element_data';
24+
import './jquery/element';
25+
import './jquery/component_registrator';
26+
import './jquery/ajax';
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Ajax } from '@ts/core/utils/m_ajax';
2+
// eslint-disable-next-line import/no-extraneous-dependencies
3+
import jQuery from 'jquery';
4+
5+
import useJQueryFn from './use_jquery';
6+
7+
const useJQuery = useJQueryFn();
8+
9+
if (useJQuery) {
10+
Ajax.inject({
11+
sendRequest(options) {
12+
if (!options.responseType && !options.upload) {
13+
return jQuery.ajax(options);
14+
}
15+
16+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
17+
return this.callBase.apply(this, [options]);
18+
},
19+
});
20+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { componentRegistratorCallbacks } from '@ts/core/m_component_registrator_callbacks';
2+
import errors from '@ts/core/m_errors';
3+
// eslint-disable-next-line import/no-extraneous-dependencies
4+
import jQuery from 'jquery';
5+
6+
if (jQuery) {
7+
// eslint-disable-next-line func-names
8+
const registerJQueryComponent = function (name, componentClass): void {
9+
// @ts-expect-error
10+
// eslint-disable-next-line func-names
11+
jQuery.fn[name] = function (options): unknown {
12+
const isMemberInvoke = typeof options === 'string';
13+
// eslint-disable-next-line @typescript-eslint/init-declarations
14+
let result: unknown | undefined;
15+
16+
if (isMemberInvoke) {
17+
const memberName = options;
18+
// eslint-disable-next-line prefer-rest-params
19+
const memberArgs = [].slice.call(arguments).slice(1);
20+
21+
this.each(function () {
22+
const instance = componentClass.getInstance(this);
23+
24+
if (!instance) {
25+
throw errors.Error('E0009', name);
26+
}
27+
28+
const member = instance[memberName];
29+
const memberValue = member.apply(instance, memberArgs);
30+
31+
if (result === undefined) {
32+
result = memberValue;
33+
}
34+
});
35+
} else {
36+
this.each(function () {
37+
const instance = componentClass.getInstance(this);
38+
if (instance) {
39+
instance.option(options);
40+
} else {
41+
// eslint-disable-next-line no-new,new-cap
42+
new componentClass(this, options);
43+
}
44+
});
45+
46+
// eslint-disable-next-line @typescript-eslint/no-this-alias
47+
result = this;
48+
}
49+
50+
return result;
51+
};
52+
};
53+
54+
componentRegistratorCallbacks.add(registerJQueryComponent);
55+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import type { DeferredObj } from '@js/core/utils/deferred';
2+
import { setStrategy } from '@ts/core/utils/m_deferred';
3+
import { compare as compareVersion } from '@ts/core/utils/m_version';
4+
// eslint-disable-next-line import/no-extraneous-dependencies
5+
import jQuery from 'jquery';
6+
7+
import useJQueryFn from './use_jquery';
8+
9+
const useJQuery = useJQueryFn();
10+
11+
if (useJQuery) {
12+
const { Deferred } = jQuery;
13+
const strategy = { Deferred };
14+
15+
// @ts-expect-error
16+
strategy.when = compareVersion(jQuery.fn.jquery, [3]) < 0
17+
? jQuery.when
18+
// eslint-disable-next-line func-names
19+
: function (singleArg): DeferredObj<unknown> {
20+
if (arguments.length === 0) {
21+
// @ts-expect-error
22+
return (new Deferred() as DeferredObj<unknown>).resolve();
23+
} if (arguments.length === 1) {
24+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
25+
return singleArg?.then
26+
? singleArg
27+
// @ts-expect-error
28+
: (new Deferred() as DeferredObj<unknown>).resolve(singleArg);
29+
}
30+
// @ts-expect-error
31+
// eslint-disable-next-line prefer-spread, prefer-rest-params
32+
return jQuery.when.apply(jQuery, arguments);
33+
};
34+
35+
setStrategy(strategy);
36+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { setEasing } from '@ts/common/core/animation/easing';
2+
// eslint-disable-next-line import/no-extraneous-dependencies
3+
import jQuery from 'jquery';
4+
5+
if (jQuery) {
6+
setEasing(jQuery.easing);
7+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { setPublicElementWrapper } from '@ts/core/m_element';
2+
3+
import useJQueryFn from './use_jquery';
4+
5+
const useJQuery = useJQueryFn();
6+
7+
// eslint-disable-next-line @stylistic/max-len
8+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type,@typescript-eslint/explicit-module-boundary-types
9+
export function getPublicElementJQuery($element) {
10+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
11+
return $element;
12+
}
13+
14+
if (useJQuery) {
15+
setPublicElementWrapper(getPublicElementJQuery);
16+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { setDataStrategy } from '@ts/core/m_element_data';
2+
// eslint-disable-next-line import/no-extraneous-dependencies
3+
import jQuery from 'jquery';
4+
5+
import useJQueryFn from './use_jquery';
6+
7+
const useJQuery = useJQueryFn();
8+
9+
if (useJQuery) {
10+
setDataStrategy(jQuery);
11+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import registerEventCallbacks from '@js/common/core/events/core/event_registrator_callbacks';
2+
import domAdapter from '@ts/core/m_dom_adapter';
3+
import eventsEngine from '@ts/events/core/m_events_engine';
4+
// eslint-disable-next-line import/no-extraneous-dependencies
5+
import jQuery from 'jquery';
6+
7+
import useJQueryFn from './use_jquery';
8+
9+
const useJQuery = useJQueryFn();
10+
11+
if (useJQuery) {
12+
registerEventCallbacks.add((name, eventObject) => {
13+
jQuery.event.special[name] = eventObject;
14+
});
15+
16+
if (eventsEngine.passiveEventHandlersSupported()) {
17+
eventsEngine.forcePassiveFalseEventNames.forEach((eventName) => {
18+
jQuery.event.special[eventName] = {
19+
setup(data, namespaces, handler): void {
20+
domAdapter.listen(this, eventName, handler, { passive: false });
21+
},
22+
};
23+
});
24+
}
25+
26+
eventsEngine.set({
27+
on(element) {
28+
// @ts-expect-error
29+
// eslint-disable-next-line prefer-spread,prefer-rest-params
30+
jQuery(element).on.apply(jQuery(element), Array.prototype.slice.call(arguments, 1));
31+
},
32+
one(element) {
33+
// @ts-expect-error
34+
// eslint-disable-next-line prefer-spread,prefer-rest-params
35+
jQuery(element).one.apply(jQuery(element), Array.prototype.slice.call(arguments, 1));
36+
},
37+
off(element) {
38+
// @ts-expect-error
39+
// eslint-disable-next-line prefer-spread,prefer-rest-params
40+
jQuery(element).off.apply(jQuery(element), Array.prototype.slice.call(arguments, 1));
41+
},
42+
trigger(element) {
43+
// @ts-expect-error
44+
// eslint-disable-next-line prefer-spread,prefer-rest-params
45+
jQuery(element).trigger.apply(jQuery(element), Array.prototype.slice.call(arguments, 1));
46+
},
47+
triggerHandler(element) {
48+
// @ts-expect-error
49+
// eslint-disable-next-line prefer-spread,prefer-rest-params,@stylistic/max-len
50+
jQuery(element).triggerHandler.apply(jQuery(element), Array.prototype.slice.call(arguments, 1));
51+
},
52+
Event: jQuery.Event,
53+
});
54+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import readyCallbacks from '@ts/core/utils/m_ready_callbacks';
2+
import { themeReadyCallback } from '@ts/ui/m_themes_callback';
3+
// eslint-disable-next-line import/no-extraneous-dependencies
4+
import jQuery from 'jquery';
5+
6+
if (jQuery && !themeReadyCallback.fired()) {
7+
// @ts-expect-error
8+
const holdReady = jQuery.holdReady || jQuery.fn.holdReady;
9+
10+
holdReady(true);
11+
12+
themeReadyCallback.add(() => {
13+
readyCallbacks.add(() => {
14+
holdReady(false);
15+
});
16+
});
17+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import { each } from '@ts/core/utils/m_iterator';
2+
import { isNumeric } from '@ts/core/utils/m_type';
3+
import { compare as compareVersion } from '@ts/core/utils/m_version';
4+
import registerEvent from '@ts/events/core/m_event_registrator';
5+
import hookTouchProps from '@ts/events/core/m_hook_touch_props';
6+
import { setEventFixMethod } from '@ts/events/utils/index';
7+
// eslint-disable-next-line import/no-extraneous-dependencies
8+
import jQuery from 'jquery';
9+
10+
import useJQueryFn from './use_jquery';
11+
12+
const useJQuery = useJQueryFn();
13+
14+
if (useJQuery) {
15+
if (compareVersion(jQuery.fn.jquery, [3]) < 0) {
16+
const POINTER_TYPE_MAP = {
17+
2: 'touch',
18+
3: 'pen',
19+
4: 'mouse',
20+
};
21+
22+
each([
23+
'MSPointerDown', 'MSPointerMove', 'MSPointerUp', 'MSPointerCancel', 'MSPointerOver', 'MSPointerOut', 'mouseenter', 'mouseleave',
24+
'pointerdown', 'pointermove', 'pointerup', 'pointercancel', 'pointerover', 'pointerout', 'pointerenter', 'pointerleave',
25+
// eslint-disable-next-line func-names
26+
], function () {
27+
// @ts-expect-error
28+
jQuery.event.fixHooks[this] = {
29+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
30+
filter(event, originalEvent) {
31+
const { pointerType } = originalEvent;
32+
33+
if (isNumeric(pointerType)) {
34+
event.pointerType = POINTER_TYPE_MAP[pointerType];
35+
}
36+
37+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
38+
return event;
39+
},
40+
// @ts-expect-error
41+
props: jQuery.event.mouseHooks.props.concat([
42+
'pointerId',
43+
'pointerType',
44+
'originalTarget',
45+
'width',
46+
'height',
47+
'pressure',
48+
'result',
49+
'tiltX',
50+
'charCode',
51+
'tiltY',
52+
'detail',
53+
'isPrimary',
54+
'prevValue',
55+
]),
56+
};
57+
});
58+
59+
each(['touchstart', 'touchmove', 'touchend', 'touchcancel'], function () {
60+
// @ts-expect-error
61+
jQuery.event.fixHooks[this] = {
62+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
63+
filter(event, originalEvent) {
64+
hookTouchProps((name, hook) => {
65+
event[name] = hook(originalEvent);
66+
});
67+
68+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
69+
return event;
70+
},
71+
72+
// @ts-expect-error
73+
props: jQuery.event.mouseHooks.props.concat([
74+
'touches',
75+
'changedTouches',
76+
'targetTouches',
77+
'detail',
78+
'result',
79+
'originalTarget',
80+
'charCode',
81+
'prevValue',
82+
]),
83+
};
84+
});
85+
86+
// @ts-expect-error
87+
jQuery.event.fixHooks.wheel = jQuery.event.mouseHooks;
88+
89+
const DX_EVENT_HOOKS = {
90+
// @ts-expect-error
91+
props: jQuery.event.mouseHooks.props.concat(['pointerType', 'pointerId', 'pointers']),
92+
};
93+
94+
registerEvent.callbacks.add((name) => {
95+
// @ts-expect-error
96+
jQuery.event.fixHooks[name] = DX_EVENT_HOOKS;
97+
});
98+
99+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
100+
const fix = function (event, originalEvent) {
101+
// @ts-expect-error
102+
const fixHook = jQuery.event.fixHooks[originalEvent.type] || jQuery.event.mouseHooks;
103+
104+
// @ts-expect-error
105+
const props = fixHook.props ? jQuery.event.props.concat(fixHook.props) : jQuery.event.props;
106+
let propIndex: number = props.length;
107+
108+
// eslint-disable-next-line no-cond-assign
109+
while (propIndex -= 1) {
110+
const prop = props[propIndex];
111+
event[prop] = originalEvent[prop];
112+
}
113+
114+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
115+
return fixHook.filter ? fixHook.filter(event, originalEvent) : event;
116+
};
117+
118+
setEventFixMethod(fix);
119+
} else {
120+
hookTouchProps((name, hook) => {
121+
// @ts-expect-error
122+
jQuery.event.addProp(name, hook);
123+
});
124+
}
125+
}

0 commit comments

Comments
 (0)