[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
tracer
/
assets
/
tinymce
/
src
/
core
/
src
/
main
/
js
/
dom
/
[
Home
]
File: RangeNormalizer.js
/** * RangeNormalizer.js * * Released under LGPL License. * Copyright (c) 1999-2017 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing */ define( 'tinymce.core.dom.RangeNormalizer', [ 'tinymce.core.caret.CaretFinder', 'tinymce.core.caret.CaretPosition', 'tinymce.core.caret.CaretUtils' ], function (CaretFinder, CaretPosition, CaretUtils) { var createRange = function (sc, so, ec, eo) { var rng = document.createRange(); rng.setStart(sc, so); rng.setEnd(ec, eo); return rng; }; // If you triple click a paragraph in this case: // <blockquote><p>a</p></blockquote><p>b</p> // It would become this range in webkit: // <blockquote><p>[a</p></blockquote><p>]b</p> // We would want it to be: // <blockquote><p>[a]</p></blockquote><p>b</p> // Since it would otherwise produces spans out of thin air on insertContent for example. var normalizeBlockSelectionRange = function (rng) { var startPos = CaretPosition.fromRangeStart(rng); var endPos = CaretPosition.fromRangeEnd(rng); var rootNode = rng.commonAncestorContainer; return CaretFinder.fromPosition(false, rootNode, endPos) .map(function (newEndPos) { if (!CaretUtils.isInSameBlock(startPos, endPos, rootNode) && CaretUtils.isInSameBlock(startPos, newEndPos, rootNode)) { return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset()); } else { return rng; } }).getOr(rng); }; var normalizeBlockSelection = function (rng) { return rng.collapsed ? rng : normalizeBlockSelectionRange(rng); }; var normalize = function (rng) { return normalizeBlockSelection(rng); }; return { normalize: normalize }; } );