define(
'tinymce.themes.mobile.model.SwipingModel',
[
],
function () {
var SWIPING_LEFT = 1;
var SWIPING_RIGHT = -1;
var SWIPING_NONE = 0;
/* The state is going to record the edge points before the direction changed. We can then use
* these points to identify whether or not the swipe was *consistent enough*
*/
var init = function (xValue) {
return {
xValue: xValue,
points: [ ]
};
};
var move = function (model, xValue) {
if (xValue === model.xValue) {
return model; // do nothing.
}
// If the direction is the same as the previous direction, the change the last point
// in the points array (because we have a new edge point). If the direction is different,
// add a new point to the points array (because we have changed direction)
var currentDirection = xValue - model.xValue > 0 ? SWIPING_LEFT : SWIPING_RIGHT;
var newPoint = { direction: currentDirection, xValue: xValue };
var priorPoints = (function () {
if (model.points.length === 0) {
return [ ];
} else {
var prev = model.points[model.points.length - 1];
return prev.direction === currentDirection ? model.points.slice(0, model.points.length - 1) : model.points;
}
})();
return {
xValue: xValue,
points: priorPoints.concat([ newPoint ])
};
};
var complete = function (model/*, snaps*/) {
if (model.points.length === 0) {
return SWIPING_NONE;
} else {
// Preserving original intention
var firstDirection = model.points[0].direction;
var lastDirection = model.points[model.points.length - 1].direction;
// eslint-disable-next-line no-nested-ternary
return firstDirection === SWIPING_RIGHT && lastDirection === SWIPING_RIGHT ? SWIPING_RIGHT :
firstDirection === SWIPING_LEFT && lastDirection == SWIPING_LEFT ? SWIPING_LEFT : SWIPING_NONE;
}
};
return {
init: init,
move: move,
complete: complete
};
}
);
|