DEV: new widget hooks mousemove/mouseup/mousedown/doubleclick (#8807)
This commit is contained in:
parent
e29fef9e99
commit
e19459185a
|
@ -1,6 +1,7 @@
|
||||||
/*eslint no-loop-func:0*/
|
/*eslint no-loop-func:0*/
|
||||||
|
|
||||||
const CLICK_ATTRIBUTE_NAME = "_discourse_click_widget";
|
const CLICK_ATTRIBUTE_NAME = "_discourse_click_widget";
|
||||||
|
const DOUBLE_CLICK_ATTRIBUTE_NAME = "_discourse_double_click_widget";
|
||||||
const CLICK_OUTSIDE_ATTRIBUTE_NAME = "_discourse_click_outside_widget";
|
const CLICK_OUTSIDE_ATTRIBUTE_NAME = "_discourse_click_outside_widget";
|
||||||
const MOUSE_DOWN_OUTSIDE_ATTRIBUTE_NAME =
|
const MOUSE_DOWN_OUTSIDE_ATTRIBUTE_NAME =
|
||||||
"_discourse_mouse_down_outside_widget";
|
"_discourse_mouse_down_outside_widget";
|
||||||
|
@ -9,6 +10,9 @@ const KEY_DOWN_ATTRIBUTE_NAME = "_discourse_key_down_widget";
|
||||||
const DRAG_ATTRIBUTE_NAME = "_discourse_drag_widget";
|
const DRAG_ATTRIBUTE_NAME = "_discourse_drag_widget";
|
||||||
const INPUT_ATTRIBUTE_NAME = "_discourse_input_widget";
|
const INPUT_ATTRIBUTE_NAME = "_discourse_input_widget";
|
||||||
const CHANGE_ATTRIBUTE_NAME = "_discourse_change_widget";
|
const CHANGE_ATTRIBUTE_NAME = "_discourse_change_widget";
|
||||||
|
const MOUSE_DOWN_ATTRIBUTE_NAME = "_discourse_mouse_down_widget";
|
||||||
|
const MOUSE_UP_ATTRIBUTE_NAME = "_discourse_mouse_up_widget";
|
||||||
|
const MOUSE_MOVE_ATTRIBUTE_NAME = "_discourse_mouse_move_widget";
|
||||||
|
|
||||||
function buildHook(attributeName, setAttr) {
|
function buildHook(attributeName, setAttr) {
|
||||||
return class {
|
return class {
|
||||||
|
@ -33,6 +37,7 @@ function buildHook(attributeName, setAttr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WidgetClickHook = buildHook(CLICK_ATTRIBUTE_NAME);
|
export const WidgetClickHook = buildHook(CLICK_ATTRIBUTE_NAME);
|
||||||
|
export const WidgetDoubleClickHook = buildHook(DOUBLE_CLICK_ATTRIBUTE_NAME);
|
||||||
export const WidgetClickOutsideHook = buildHook(
|
export const WidgetClickOutsideHook = buildHook(
|
||||||
CLICK_OUTSIDE_ATTRIBUTE_NAME,
|
CLICK_OUTSIDE_ATTRIBUTE_NAME,
|
||||||
"data-click-outside"
|
"data-click-outside"
|
||||||
|
@ -46,6 +51,9 @@ export const WidgetKeyDownHook = buildHook(KEY_DOWN_ATTRIBUTE_NAME);
|
||||||
export const WidgetDragHook = buildHook(DRAG_ATTRIBUTE_NAME);
|
export const WidgetDragHook = buildHook(DRAG_ATTRIBUTE_NAME);
|
||||||
export const WidgetInputHook = buildHook(INPUT_ATTRIBUTE_NAME);
|
export const WidgetInputHook = buildHook(INPUT_ATTRIBUTE_NAME);
|
||||||
export const WidgetChangeHook = buildHook(CHANGE_ATTRIBUTE_NAME);
|
export const WidgetChangeHook = buildHook(CHANGE_ATTRIBUTE_NAME);
|
||||||
|
export const WidgetMouseUpHook = buildHook(MOUSE_UP_ATTRIBUTE_NAME);
|
||||||
|
export const WidgetMouseDownHook = buildHook(MOUSE_DOWN_ATTRIBUTE_NAME);
|
||||||
|
export const WidgetMouseMoveHook = buildHook(MOUSE_MOVE_ATTRIBUTE_NAME);
|
||||||
|
|
||||||
function nodeCallback(node, attrName, cb, options = { rerender: true }) {
|
function nodeCallback(node, attrName, cb, options = { rerender: true }) {
|
||||||
const { rerender } = options;
|
const { rerender } = options;
|
||||||
|
@ -136,6 +144,10 @@ WidgetClickHook.setupDocumentCallback = function() {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$(document).on("dblclick.discourse-widget", e => {
|
||||||
|
nodeCallback(e.target, DOUBLE_CLICK_ATTRIBUTE_NAME, w => w.doubleClick(e));
|
||||||
|
});
|
||||||
|
|
||||||
$(document).on("click.discourse-widget", e => {
|
$(document).on("click.discourse-widget", e => {
|
||||||
nodeCallback(e.target, CLICK_ATTRIBUTE_NAME, w => w.click(e));
|
nodeCallback(e.target, CLICK_ATTRIBUTE_NAME, w => w.click(e));
|
||||||
|
|
||||||
|
@ -190,5 +202,19 @@ WidgetClickHook.setupDocumentCallback = function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(document).on("mousedown.discourse-widget", e => {
|
||||||
|
nodeCallback(e.target, MOUSE_DOWN_ATTRIBUTE_NAME, w => {
|
||||||
|
w.mouseDown(e);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on("mouseup.discourse-widget", e => {
|
||||||
|
nodeCallback(e.target, MOUSE_UP_ATTRIBUTE_NAME, w => w.mouseUp(e));
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on("mousemove.discourse-widget", e => {
|
||||||
|
nodeCallback(e.target, MOUSE_MOVE_ATTRIBUTE_NAME, w => w.mouseMove(e));
|
||||||
|
});
|
||||||
|
|
||||||
_watchingDocument = true;
|
_watchingDocument = true;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
import {
|
import {
|
||||||
WidgetClickHook,
|
WidgetClickHook,
|
||||||
|
WidgetDoubleClickHook,
|
||||||
WidgetClickOutsideHook,
|
WidgetClickOutsideHook,
|
||||||
WidgetKeyUpHook,
|
WidgetKeyUpHook,
|
||||||
WidgetKeyDownHook,
|
WidgetKeyDownHook,
|
||||||
WidgetMouseDownOutsideHook,
|
WidgetMouseDownOutsideHook,
|
||||||
WidgetDragHook,
|
WidgetDragHook,
|
||||||
WidgetInputHook,
|
WidgetInputHook,
|
||||||
WidgetChangeHook
|
WidgetChangeHook,
|
||||||
|
WidgetMouseUpHook,
|
||||||
|
WidgetMouseDownHook,
|
||||||
|
WidgetMouseMoveHook
|
||||||
} from "discourse/widgets/hooks";
|
} from "discourse/widgets/hooks";
|
||||||
import { h } from "virtual-dom";
|
import { h } from "virtual-dom";
|
||||||
import DecoratorHelper from "discourse/widgets/decorator-helper";
|
import DecoratorHelper from "discourse/widgets/decorator-helper";
|
||||||
|
@ -371,6 +375,9 @@ export default class Widget {
|
||||||
if (this.click) {
|
if (this.click) {
|
||||||
properties["widget-click"] = new WidgetClickHook(this);
|
properties["widget-click"] = new WidgetClickHook(this);
|
||||||
}
|
}
|
||||||
|
if (this.doubleClick) {
|
||||||
|
properties["widget-double-click"] = new WidgetDoubleClickHook(this);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.mouseDownOutside) {
|
if (this.mouseDownOutside) {
|
||||||
properties["widget-mouse-down-outside"] = new WidgetMouseDownOutsideHook(
|
properties["widget-mouse-down-outside"] = new WidgetMouseDownOutsideHook(
|
||||||
|
@ -390,6 +397,18 @@ export default class Widget {
|
||||||
properties["widget-change"] = new WidgetChangeHook(this);
|
properties["widget-change"] = new WidgetChangeHook(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.mouseDown) {
|
||||||
|
properties["widget-mouse-down"] = new WidgetMouseDownHook(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mouseUp) {
|
||||||
|
properties["widget-mouse-up"] = new WidgetMouseUpHook(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mouseMove) {
|
||||||
|
properties["widget-mouse-move"] = new WidgetMouseMoveHook(this);
|
||||||
|
}
|
||||||
|
|
||||||
const attributes = properties["attributes"] || {};
|
const attributes = properties["attributes"] || {};
|
||||||
properties.attributes = attributes;
|
properties.attributes = attributes;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue