1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-18 15:08:22 +00:00
seahub/media/aloha-0.22.7/lib/util/position.js
llj 720ac28c22 [aloha] upgraded to 0.22.7 and added textcolor plugin
* textcolor: fixed plugin bugs, added translation for zh
* image: fixed default.jpg src bug
* added 'ru' support for seaf edit
* rm aloha-0.22.3 and ununsed files in aloha-0.22.7
2013-01-15 14:48:04 +08:00

177 lines
4.9 KiB
JavaScript
Executable File

/* position.js is part of Aloha Editor project http://aloha-editor.org
*
* Aloha Editor is a WYSIWYG HTML5 inline editing library and editor.
* Copyright (c) 2010-2012 Gentics Software GmbH, Vienna, Austria.
* Contributors http://aloha-editor.org/contribution.php
*
* Aloha Editor is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* Aloha Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* As an additional permission to the GNU GPL version 2, you may distribute
* non-source (e.g., minimized or compacted) forms of the Aloha-Editor
* source code without the copy of the GNU GPL normally required,
* provided you include this license notice and a URL through which
* recipients can access the Corresponding Source.
*/
// Start Closure
// Ensure GENTICS Namespace
window.GENTICS = window.GENTICS || {};
window.GENTICS.Utils = window.GENTICS.Utils || {};
define(['jquery'], function (jQuery) {
"use strict";
var $ = jQuery,
GENTICS = window.GENTICS,
Class = window.Class,
console = window.console;
/**
* position utility, which will provide scroll and mouse positions
* please note that the positions provided by this class are not
* realtime - instead they are calculated with a 0.5 second delay
*/
GENTICS.Utils.Position = {};
/**
* jquery reference to the window object
*/
GENTICS.Utils.Position.w = jQuery(window);
/**
* contains the current scroll top and left position, and indicates if the user is currently scrolling
* @api
*/
GENTICS.Utils.Position.Scroll = {
top: 0,
left: 0,
isScrolling: false
};
/**
* contains the scroll corrections to apply on special cases (ribbon for example)
* @api
*/
GENTICS.Utils.Position.ScrollCorrection = {
top: 100,
left: 50
};
/**
* contains the current mouse position (x,y) as well as an indicator if the mouse is moving
* @api
*/
GENTICS.Utils.Position.Mouse = {
x: 0,
y: 0,
oldX: 0,
oldY: 0,
isMoving: false,
triggeredMouseStop: true
};
/**
* contains all mousestop callbacks
*/
GENTICS.Utils.Position.mouseStopCallbacks = [];
/**
* contains all mousemove callbacks
*/
GENTICS.Utils.Position.mouseMoveCallbacks = [];
/**
* updates scroll position and the scrolling status
*/
GENTICS.Utils.Position.update = function () {
// update scroll position
var st = this.w.scrollTop(),
sl = this.w.scrollLeft(),
i;
if (this.Scroll.isScrolling) {
if (this.Scroll.top == st && this.Scroll.left == sl) {
// stopped scrolling
this.Scroll.isScrolling = false;
}
} else {
if (this.Scroll.top != st || this.Scroll.left != sl) {
// started scrolling
this.Scroll.isScrolling = true;
}
}
// update scroll positions
this.Scroll.top = st;
this.Scroll.left = sl;
// check wether the user has stopped moving the mouse
if (this.Mouse.x == this.Mouse.oldX && this.Mouse.y == this.Mouse.oldY) {
this.Mouse.isMoving = false;
// now check if we've triggered the mousestop event
if (!this.Mouse.triggeredMouseStop) {
this.Mouse.triggeredMouseStop = true;
// iterate callbacks
for (i = 0; i < this.mouseStopCallbacks.length; i++) {
this.mouseStopCallbacks[i].call();
}
}
} else {
this.Mouse.isMoving = true;
this.Mouse.triggeredMouseStop = false;
// iterate callbacks
for (i = 0; i < this.mouseMoveCallbacks.length; i++) {
this.mouseMoveCallbacks[i].call();
}
}
// update mouse positions
this.Mouse.oldX = this.Mouse.x;
this.Mouse.oldY = this.Mouse.y;
};
/**
* adds a callback method which is invoked when the mouse has stopped moving
* @param callback the callback method to be invoked
* @return index of the callback
*/
GENTICS.Utils.Position.addMouseStopCallback = function (callback) {
this.mouseStopCallbacks.push(callback);
return (this.mouseStopCallbacks.length - 1);
};
/**
* adds a callback method which is invoked when the mouse is moving
* @param callback the callback method to be invoked
* @return index of the callback
*/
GENTICS.Utils.Position.addMouseMoveCallback = function (callback) {
this.mouseMoveCallbacks.push(callback);
return (this.mouseMoveCallbacks.length - 1);
};
// Mousemove Hooks
jQuery(function () {
window.setInterval(function () {
GENTICS.Utils.Position.update();
}, 500);
});
jQuery('html').mousemove(function (e) {
GENTICS.Utils.Position.Mouse.x = e.pageX;
GENTICS.Utils.Position.Mouse.y = e.pageY;
});
});