-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: remove jq dependency #35
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
16.15.0 | ||
20.9.0 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
nodejs 14.17.1 | ||
nodejs 20.9.0 |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,16 @@ | ||
import initiationStrategies from './initiationStrategies'; | ||
|
||
export const strategies = initiationStrategies({ | ||
nextTick(pluginFn, $$) { | ||
return window.setTimeout(() => pluginFn(), 0); | ||
}, | ||
|
||
immediate(pluginFn, $$) { | ||
return pluginFn() || {}; | ||
}, | ||
|
||
hover(pluginFn, $$) { | ||
return $$.one('mouseover', () => pluginFn()); | ||
} | ||
}); | ||
export function nextTick(pluginFn, _el) { | ||
return window.setTimeout(() => pluginFn(), 0); | ||
} | ||
export function immediate(pluginFn, _el) { | ||
return pluginFn() || {}; | ||
} | ||
export function hover(pluginFn, el) { | ||
const isJqueryEl = el.jquery !== undefined; | ||
return isJqueryEl ? | ||
el.one('mouseover', pluginFn) : | ||
el.addEventListener('mouseover', pluginFn, { once: true }); | ||
} | ||
export function fallback(strategy, fallback) { | ||
console.warn(`Strategy ${strategy} not found, falling back to ${fallback.name} strategy.`); | ||
return fallback; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe just There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So then not fallback at all. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, that's what I prefer anyway. I don't think throwing a "function undefined" method is helpful, but having a strict interface is good too. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually I'm wrong, the fallback with warning is a good idea. Moving a widget into a different environment probably shouldn't break it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Yeah, that was my line too 👍 |
||
} |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
|
||
import * as strategies from '../src/strategies'; | ||
jest.useFakeTimers(); | ||
|
||
describe('strategies', () => { | ||
beforeEach(() => { | ||
jest.clearAllTimers(); | ||
}); | ||
describe('fallback', () => { | ||
it('should fall back to the provided strategy', () => { | ||
const fallback = strategies.fallback('nonexistent', strategies.nextTick); | ||
expect(fallback).toEqual(strategies.nextTick); | ||
}); | ||
|
||
it('should log a warning', () => { | ||
const nonexistentStrategy = 'nonexistent'; | ||
const fallbackStrategy = strategies.nextTick; | ||
const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { }); | ||
strategies.fallback(nonexistentStrategy, fallbackStrategy); | ||
expect(warnSpy).toHaveBeenCalledWith(`Strategy ${nonexistentStrategy} not found, falling back to ${fallbackStrategy.name} strategy.`); | ||
}); | ||
}) | ||
describe('nextTick', () => { | ||
it('should call the plugin function', () => { | ||
const pluginFn = jest.fn(); | ||
strategies.nextTick(pluginFn); | ||
jest.runAllTimers(); | ||
expect(pluginFn).toHaveBeenCalled(); | ||
}); | ||
}); | ||
describe('immediate', () => { | ||
it('should call the plugin function', () => { | ||
const pluginFn = jest.fn(); | ||
strategies.immediate(pluginFn); | ||
expect(pluginFn).toHaveBeenCalled(); | ||
}); | ||
}); | ||
describe('hover', () => { | ||
describe('with a jQuery element', () => { | ||
it('should call the plugin function', () => { | ||
const pluginFn = jest.fn(); | ||
const el = { jquery: true, one: jest.fn() }; | ||
strategies.hover(pluginFn, el); | ||
expect(el.one).toHaveBeenCalledWith('mouseover', pluginFn); | ||
}); | ||
}); | ||
describe('with a DOM element', () => { | ||
it('should call the plugin function', () => { | ||
const pluginFn = jest.fn(); | ||
const el = { addEventListener: jest.fn() }; | ||
strategies.hover(pluginFn, el); | ||
expect(el.addEventListener).toHaveBeenCalledWith('mouseover', pluginFn, { once: true }); | ||
}); | ||
}) | ||
}); | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we just leave it up to the the client code to add a new hover strategy with
widget.strategies.add('hover', () => {})
, if they want to have a jQuery hover option?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In fact I don't think this works, since #31 the hover strategy has been broken.
Notice that in UE we're using
1.3.0
. We use2.0.0
in another project and haven't used the hover strategy in that project yet.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, still keeping the registry and opening it up to client registering new strategies makes sense.