mirror of
https://github.com/fastmail/Squire.git
synced 2024-12-22 15:23:29 -05:00
Merge branch 'farooqu-insertHtml'
This commit is contained in:
commit
3676651e6f
4 changed files with 100 additions and 2 deletions
10
README.md
10
README.md
|
@ -136,6 +136,16 @@ The method takes one argument:
|
||||||
|
|
||||||
Returns a reference to the newly inserted image element.
|
Returns a reference to the newly inserted image element.
|
||||||
|
|
||||||
|
### insertHTML
|
||||||
|
|
||||||
|
Inserts an HTML fragment at the current cursor location, or replaces the selection if selected. The value supplied should not contain `<body>` tags or anything outside of that.
|
||||||
|
|
||||||
|
The method takes one argument:
|
||||||
|
|
||||||
|
* **html**: The html to insert.
|
||||||
|
|
||||||
|
Returns self (the Squire instance).
|
||||||
|
|
||||||
### getPath
|
### getPath
|
||||||
|
|
||||||
Returns the path through the DOM tree from the `<body>` element to the current current cursor position. This is a string consisting of the tag, id and class names in CSS format. For example `BODY>BLOCKQUOTE>DIV#id>STRONG>SPAN.font>EM`. If a selection has been made, so different parts of the selection may have different paths, the value will be `(selection)`. The path is useful for efficiently determining the current formatting for bold, italic, underline etc, and thus determining button state. If a selection has been made, you can has the `hasFormat` method instead to get the current state for the properties you care about.
|
Returns the path through the DOM tree from the `<body>` element to the current current cursor position. This is a string consisting of the tag, id and class names in CSS format. For example `BODY>BLOCKQUOTE>DIV#id>STRONG>SPAN.font>EM`. If a selection has been made, so different parts of the selection may have different paths, the value will be `(selection)`. The path is useful for efficiently determining the current formatting for bold, italic, underline etc, and thus determining button state. If a selection has been made, you can has the `hasFormat` method instead to get the current state for the properties you care about.
|
||||||
|
|
|
@ -3319,6 +3319,50 @@ proto.insertImage = function ( src ) {
|
||||||
return img;
|
return img;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Insert HTML at the cursor location. If the selection is not collapsed
|
||||||
|
// insertTreeFragmentIntoRange will delete the selection so that it is replaced
|
||||||
|
// by the html being inserted.
|
||||||
|
proto.insertHTML = function ( html ) {
|
||||||
|
var range = this.getSelection(),
|
||||||
|
frag = this._doc.createDocumentFragment(),
|
||||||
|
div = this.createElement( 'DIV' );
|
||||||
|
|
||||||
|
// Parse HTML into DOM tree
|
||||||
|
div.innerHTML = html;
|
||||||
|
frag.appendChild( empty( div ) );
|
||||||
|
|
||||||
|
// Record undo checkpoint
|
||||||
|
this._recordUndoState( range );
|
||||||
|
this._getRangeAndRemoveBookmark( range );
|
||||||
|
|
||||||
|
try {
|
||||||
|
frag.normalize();
|
||||||
|
addLinks( frag );
|
||||||
|
cleanTree( frag, true );
|
||||||
|
cleanupBRs( frag );
|
||||||
|
removeEmptyInlines( frag );
|
||||||
|
fixContainer( frag );
|
||||||
|
|
||||||
|
var node = frag;
|
||||||
|
while ( node = getNextBlock( node ) ) {
|
||||||
|
fixCursor( node );
|
||||||
|
}
|
||||||
|
|
||||||
|
insertTreeFragmentIntoRange( range, frag );
|
||||||
|
if ( !canObserveMutations ) {
|
||||||
|
this._docWasChanged();
|
||||||
|
}
|
||||||
|
range.collapse( false );
|
||||||
|
this._ensureBottomLine();
|
||||||
|
|
||||||
|
this.setSelection( range );
|
||||||
|
this._updatePath( range, true );
|
||||||
|
} catch ( error ) {
|
||||||
|
this.didError( error );
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
// --- Formatting ---
|
// --- Formatting ---
|
||||||
|
|
||||||
var command = function ( method, arg, arg2 ) {
|
var command = function ( method, arg, arg2 ) {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2263,6 +2263,50 @@ proto.insertImage = function ( src ) {
|
||||||
return img;
|
return img;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Insert HTML at the cursor location. If the selection is not collapsed
|
||||||
|
// insertTreeFragmentIntoRange will delete the selection so that it is replaced
|
||||||
|
// by the html being inserted.
|
||||||
|
proto.insertHTML = function ( html ) {
|
||||||
|
var range = this.getSelection(),
|
||||||
|
frag = this._doc.createDocumentFragment(),
|
||||||
|
div = this.createElement( 'DIV' );
|
||||||
|
|
||||||
|
// Parse HTML into DOM tree
|
||||||
|
div.innerHTML = html;
|
||||||
|
frag.appendChild( empty( div ) );
|
||||||
|
|
||||||
|
// Record undo checkpoint
|
||||||
|
this._recordUndoState( range );
|
||||||
|
this._getRangeAndRemoveBookmark( range );
|
||||||
|
|
||||||
|
try {
|
||||||
|
frag.normalize();
|
||||||
|
addLinks( frag );
|
||||||
|
cleanTree( frag, true );
|
||||||
|
cleanupBRs( frag );
|
||||||
|
removeEmptyInlines( frag );
|
||||||
|
fixContainer( frag );
|
||||||
|
|
||||||
|
var node = frag;
|
||||||
|
while ( node = getNextBlock( node ) ) {
|
||||||
|
fixCursor( node );
|
||||||
|
}
|
||||||
|
|
||||||
|
insertTreeFragmentIntoRange( range, frag );
|
||||||
|
if ( !canObserveMutations ) {
|
||||||
|
this._docWasChanged();
|
||||||
|
}
|
||||||
|
range.collapse( false );
|
||||||
|
this._ensureBottomLine();
|
||||||
|
|
||||||
|
this.setSelection( range );
|
||||||
|
this._updatePath( range, true );
|
||||||
|
} catch ( error ) {
|
||||||
|
this.didError( error );
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
// --- Formatting ---
|
// --- Formatting ---
|
||||||
|
|
||||||
var command = function ( method, arg, arg2 ) {
|
var command = function ( method, arg, arg2 ) {
|
||||||
|
|
Loading…
Reference in a new issue