| 3932 | | HTMLArea.prototype.ie_checkBackspace = function() { |
| 3933 | | var sel = this._getSelection(); |
| 3934 | | if(HTMLArea.is_ie && sel.type == 'Control') |
| 3935 | | { |
| 3936 | | var elm = this._activeElement(sel); |
| 3937 | | HTMLArea.removeFromParent(elm); |
| 3938 | | return true; |
| 3939 | | } |
| 3940 | | |
| 3941 | | // This bit of code preseves links when you backspace over the |
| 3942 | | // endpoint of the link in IE. Without it, if you have something like |
| 3943 | | // link_here | |
| 3944 | | // where | is the cursor, and backspace over the last e, then the link |
| 3945 | | // will de-link, which is a bit tedious |
| 3946 | | var range = this._createRange(sel); |
| 3947 | | var r2 = range.duplicate(); |
| 3948 | | r2.moveStart("character", -1); |
| 3949 | | var a = r2.parentElement(); |
| 3950 | | if (a != range.parentElement() && |
| 3951 | | /^a$/i.test(a.tagName)) { |
| 3952 | | r2.collapse(true); |
| 3953 | | r2.moveEnd("character", 1); |
| 3954 | | r2.pasteHTML(''); |
| 3955 | | r2.select(); |
| 3956 | | return true; |
| 3957 | | } |
| 3958 | | }; |
| 3959 | | |
| 3960 | | HTMLArea.prototype.dom_checkBackspace = function() { |
| 3961 | | var self = this; |
| 3962 | | setTimeout(function() { |
| 3963 | | var sel = self._getSelection(); |
| 3964 | | var range = self._createRange(sel); |
| 3965 | | var SC = range.startContainer; |
| 3966 | | var SO = range.startOffset; |
| 3967 | | var EC = range.endContainer; |
| 3968 | | var EO = range.endOffset; |
| 3969 | | var newr = SC.nextSibling; |
| 3970 | | if (SC.nodeType == 3) |
| 3971 | | SC = SC.parentNode; |
| 3972 | | if (!/\S/.test(SC.tagName)) { |
| 3973 | | var p = document.createElement("p"); |
| 3974 | | while (SC.firstChild) |
| 3975 | | p.appendChild(SC.firstChild); |
| 3976 | | SC.parentNode.insertBefore(p, SC); |
| 3977 | | HTMLArea.removeFromParent(SC); |
| 3978 | | var r = range.cloneRange(); |
| 3979 | | r.setStartBefore(newr); |
| 3980 | | r.setEndAfter(newr); |
| 3981 | | r.extractContents(); |
| 3982 | | sel.removeAllRanges(); |
| 3983 | | sel.addRange(r); |
| 3984 | | } |
| 3985 | | }, 10); |
| 3986 | | }; |
| | 3932 | if(HTMLArea.is_ie) |
| | 3933 | { |
| | 3934 | // this function is for IE |
| | 3935 | HTMLArea.prototype.checkBackspace = function() |
| | 3936 | { |
| | 3937 | var sel = this._getSelection(); |
| | 3938 | if(sel.type == 'Control') |
| | 3939 | { |
| | 3940 | var elm = this._activeElement(sel); |
| | 3941 | HTMLArea.removeFromParent(elm); |
| | 3942 | return true; |
| | 3943 | } |
| | 3944 | |
| | 3945 | // This bit of code preseves links when you backspace over the |
| | 3946 | // endpoint of the link in IE. Without it, if you have something like |
| | 3947 | // link_here | |
| | 3948 | // where | is the cursor, and backspace over the last e, then the link |
| | 3949 | // will de-link, which is a bit tedious |
| | 3950 | var range = this._createRange(sel); |
| | 3951 | var r2 = range.duplicate(); |
| | 3952 | r2.moveStart("character", -1); |
| | 3953 | var a = r2.parentElement(); |
| | 3954 | if (a != range.parentElement() && |
| | 3955 | /^a$/i.test(a.tagName)) |
| | 3956 | { |
| | 3957 | r2.collapse(true); |
| | 3958 | r2.moveEnd("character", 1); |
| | 3959 | r2.pasteHTML(''); |
| | 3960 | r2.select(); |
| | 3961 | return true; |
| | 3962 | } |
| | 3963 | }; |
| | 3964 | } |
| | 3965 | else |
| | 3966 | { |
| | 3967 | // this function is for DOM |
| | 3968 | HTMLArea.prototype.checkBackspace = function() |
| | 3969 | { |
| | 3970 | var self = this; |
| | 3971 | setTimeout(function() |
| | 3972 | { |
| | 3973 | var sel = self._getSelection(); |
| | 3974 | var range = self._createRange(sel); |
| | 3975 | var SC = range.startContainer; |
| | 3976 | var SO = range.startOffset; |
| | 3977 | var EC = range.endContainer; |
| | 3978 | var EO = range.endOffset; |
| | 3979 | var newr = SC.nextSibling; |
| | 3980 | if (SC.nodeType == 3) |
| | 3981 | { |
| | 3982 | SC = SC.parentNode; |
| | 3983 | } |
| | 3984 | if (!/\S/.test(SC.tagName)) |
| | 3985 | { |
| | 3986 | var p = document.createElement("p"); |
| | 3987 | while (SC.firstChild) |
| | 3988 | { |
| | 3989 | p.appendChild(SC.firstChild); |
| | 3990 | } |
| | 3991 | SC.parentNode.insertBefore(p, SC); |
| | 3992 | HTMLArea.removeFromParent(SC); |
| | 3993 | var r = range.cloneRange(); |
| | 3994 | r.setStartBefore(newr); |
| | 3995 | r.setEndAfter(newr); |
| | 3996 | r.extractContents(); |
| | 3997 | sel.removeAllRanges(); |
| | 3998 | sel.addRange(r); |
| | 3999 | } |
| | 4000 | }, 10); |
| | 4001 | }; |
| | 4002 | } |