@exposure-lib/vue2
Version:
61 lines (58 loc) • 1.68 kB
JavaScript
import { resetExposure, createExposure } from '@exposure-lib/core';
let Vue;
let exposure;
const Logger = console;
const useResetExposure = resetExposure;
const bind = (el, binding, vnode) => {
let { value, arg } = binding;
let threshold;
const { context } = vnode;
if (!context) {
return;
}
if (!exposure) {
Logger.error('exposure is not initialized, please use Vue.use(Exposure)');
return;
}
threshold = Number(arg);
if ((arg && typeof arg !== 'number') || !arg) {
arg && Logger.error('element arguments must be number type');
threshold = exposure.threshold;
}
if (context.$resetExposure && context.$resetExposure !== useResetExposure) {
Logger.error('context bind $resetExposure propertyKey');
return;
}
!context.$resetExposure && (context.$resetExposure = useResetExposure);
exposure.observe(el, value, threshold);
};
const unbind = (el) => {
if (!exposure) {
Logger.error('exposure is not initialized, please use Vue.use(Exposure)');
return;
}
exposure.unobserve(el);
};
const installDirective = () => {
Vue.directive('exposure', {
bind,
unbind,
});
};
const install = (_Vue, options) => {
if (!Vue) {
Vue = _Vue;
}
let golablThreshold;
if (options && options.threshold) {
golablThreshold = options.threshold;
}
if (!exposure) {
exposure = createExposure(golablThreshold);
}
installDirective();
};
const ExposurePLugin = {
install,
};
export { ExposurePLugin as default, useResetExposure };