Skip to content

Commit

Permalink
*: move testIgnore and testAllow to Interactable
Browse files Browse the repository at this point in the history
Also add interactable.testIgnoreAllow() to do both checks
  • Loading branch information
taye committed Aug 27, 2016
1 parent 3fba796 commit c26a58a
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 40 deletions.
34 changes: 34 additions & 0 deletions src/Interactable.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const isType = require('./utils/isType');
const events = require('./utils/events');
const extend = require('./utils/extend');
const domUtils = require('./utils/domUtils');
const actions = require('./actions');
const scope = require('./scope');
const Eventable = require('./Eventable');
Expand Down Expand Up @@ -213,6 +214,39 @@ class Interactable {
|| nodeContains(this._context, element));
}

testIgnore (ignoreFrom, interactableElement, element) {
if (!ignoreFrom || !isType.isElement(element)) { return false; }

if (isType.isString(ignoreFrom)) {
return domUtils.matchesUpTo(element, ignoreFrom, interactableElement);
}
else if (isType.isElement(ignoreFrom)) {
return domUtils.nodeContains(ignoreFrom, element);
}

return false;
}

testAllow (allowFrom, interactableElement, element) {
if (!allowFrom) { return true; }

if (!isType.isElement(element)) { return false; }

if (isType.isString(allowFrom)) {
return domUtils.matchesUpTo(element, allowFrom, interactableElement);
}
else if (isType.isElement(allowFrom)) {
return domUtils.nodeContains(allowFrom, element);
}

return false;
}

testIgnoreAllow (options, interactableElement, element) {
return (!this.testIgnore(options.ignoreFrom, interactableElement, element)
&& this.testAllow(options.allowFrom, interactableElement, element));
}

/*\
* Interactable.fire
[ method ]
Expand Down
6 changes: 3 additions & 3 deletions src/autoStart/drag.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ autoStart.signals.on('before-start', function ({ interaction, eventTarget, dx,

if (interactable === interaction.target) { return; }

const options = interactable.options;
let action = null;

if (interactable.inContext(eventTarget)
&& !interactable.options.drag.manualStart
&& !autoStart.testIgnore(interactable, element, eventTarget)
&& autoStart.testAllow(interactable, element, eventTarget)
&& !options.drag.manualStart
&& !interactable.testIgnoreAllow(options, element, eventTarget)
&& matchesSelector(element, selector, elements)) {

action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element);
Expand Down
40 changes: 3 additions & 37 deletions src/autoStart/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ const signals = require('../utils/Signals').new();

const autoStart = {
signals,
testIgnore,
testAllow,
withinInteractionLimit,
// Allow this many interactions to happen simultaneously
maxInteractions: Infinity,
Expand All @@ -25,38 +23,6 @@ const autoStart = {
},
};

function testIgnore (interactable, interactableElement, element) {
const ignoreFrom = interactable.options.ignoreFrom;

if (!ignoreFrom || !utils.isElement(element)) { return false; }

if (utils.isString(ignoreFrom)) {
return utils.matchesUpTo(element, ignoreFrom, interactableElement);
}
else if (utils.isElement(ignoreFrom)) {
return utils.nodeContains(ignoreFrom, element);
}

return false;
}

function testAllow (interactable, interactableElement, element) {
const allowFrom = interactable.options.allowFrom;

if (!allowFrom) { return true; }

if (!utils.isElement(element)) { return false; }

if (utils.isString(allowFrom)) {
return utils.matchesUpTo(element, allowFrom, interactableElement);
}
else if (utils.isElement(allowFrom)) {
return utils.nodeContains(allowFrom, element);
}

return false;
}

// set cursor style on mousedown
Interaction.signals.on('down', function ({ interaction, pointer, event, eventTarget }) {
if (interaction.interacting()) { return; }
Expand Down Expand Up @@ -138,11 +104,11 @@ function getActionInfo (interaction, pointer, event, eventTarget) {
const elements = (browser.useMatchesSelectorPolyfill
? context.querySelectorAll(selector)
: undefined);
const options = interactable.options;

if (interactable.inContext(element)
&& !module.exports.testIgnore(interactable, element, eventTarget)
&& module.exports.testAllow(interactable, element, eventTarget)
&& utils.matchesSelector(element, selector, elements)) {
&& interactable.testIgnoreAllow(options, element, eventTarget)
&& utils.matchesSelector(element, selector, elements)) {

matches.push(interactable);
matchElements.push(element);
Expand Down

0 comments on commit c26a58a

Please sign in to comment.