1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-17 14:37:58 +00:00
seahub/media/aloha-0.22.7/lib/aloha/copypaste.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

109 lines
3.5 KiB
JavaScript

/* copypaste.js is part of Aloha Editor project http://aloha-editor.org
*
* Aloha Editor is a WYSIWYG HTML5 inline editing library and editor.
* Copyright (c) 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.
*/
/**
* @overview:
* Various utility functions that are useful when working with selections, and
* ranges for copy/paste functionality.
*/
define('aloha/copypaste', [
'jquery',
'aloha/core'
], function (
$,
Aloha
) {
'use strict';
/**
* Retrieve the editable host in which the given range is contained.
*
* @param {WrappedRange} range
* @return {jQuery.<HTMLElement>|null} The editable host element, null if
* non can be determinded from the given
* range.
*/
function getEditableAt(range) {
if (!range || !range.commonAncestorContainer) {
return null;
}
var $container = $(range.commonAncestorContainer);
return $container.length ? Aloha.getEditableHost($container) : null;
}
/**
* Retrieves the current range.
*
* @return {WrappedRange|null} Range at current selection or null of non
* exists.
*/
function getRange() {
var selection = Aloha.getSelection();
return selection.getRangeCount() ? selection.getRangeAt(0) : null;
}
/**
* Set the selection to the given range
*
* @param {object} range An object that must container the following
* essential range properties: ~ startContainer
* ~ endContainer
* ~ startOffset
* ~ endOffset
*/
function setSelectionAt(range) {
var newRange = Aloha.createRange();
var selection = Aloha.getSelection();
newRange.setStart(range.startContainer, range.startOffset);
newRange.setEnd(range.endContainer, range.endOffset);
selection.removeAllRanges();
selection.addRange(newRange);
}
/**
* Creates a selection that encompasses the contents of the given element.
*
* @param {HTMLElement} element Editable DOM element.
*/
function selectAllOf(element) {
setSelectionAt({
startContainer: element,
endContainer: element,
startOffset: 0,
endOffset: element.childNodes ? element.childNodes.length
: element.length
});
$(element).focus();
}
return {
getEditableAt: getEditableAt,
getRange: getRange,
selectAllOf: selectAllOf,
setSelectionAt: setSelectionAt
};
});