From ad4bde25e11dda01dfe7669ad2c7a309e243640f Mon Sep 17 00:00:00 2001 From: Marcus Nyeholt Date: Tue, 24 May 2011 10:36:21 +1000 Subject: [PATCH] Updated class selection plugin to attach classes in a smarter way when only a single element is selected (instead of wrapping in span) --- javascript/nicedit-class-selector.js | 50 +++++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/javascript/nicedit-class-selector.js b/javascript/nicedit-class-selector.js index ec4a88c..f6b3382 100644 --- a/javascript/nicedit-class-selector.js +++ b/javascript/nicedit-class-selector.js @@ -60,29 +60,47 @@ var curRange = this.ne.selectedInstance.getRng(); if (window.getSelection) { var selectionContent = curRange.extractContents(); - for (var i = selectionContent.childNodes.length - 1; i >= 0; i--) { - var tn = selectionContent.childNodes[i]; - if (tn.nodeType == 3) { - curRange.insertNode($('').addClass(cls).text(tn.nodeValue).get(0)); - } else { - curRange.insertNode($(tn).addClass(cls).clone().get(0)); + if (selectionContent.childNodes && selectionContent.childNodes.length > 0) { + for (var i = selectionContent.childNodes.length - 1; i >= 0; i--) { + var tn = selectionContent.childNodes[i]; + if (tn.nodeType == 3) { + curRange.insertNode($('').addClass(cls).text(tn.nodeValue).get(0)); + } else { + curRange.insertNode($(tn).addClass(cls).clone().get(0)); + } + } + } else { + var seld = this.ne.selectedInstance.selElm(); + if (seld.nodeType == 3) { + seld = seld.parentNode; } + $(seld).addClass(cls); } } else { var childNodes = $('
').append(curRange.htmlText).get(0).childNodes; var pc = $('
'); - for (var i = 0; i < childNodes.length; i++) { - var tn = childNodes[i]; - if (tn.nodeType == 3) { - var newSpan = $('').addClass(cls).text(tn.nodeValue); - pc.append(newSpan); - } else { - var newSpan = $(tn).clone().addClass(cls); - pc.append(newSpan); + if (childNodes && childNodes.length) { + for (var i = 0; i < childNodes.length; i++) { + var tn = childNodes[i]; + if (tn.nodeType == 3) { + var newSpan = $('').addClass(cls).text(tn.nodeValue); + pc.append(newSpan); + } else { + var newSpan = $(tn).clone().addClass(cls); + pc.append(newSpan); + } + } + var newText = pc.html(); + curRange.pasteHTML(newText); + } else { + var seld = this.ne.selectedInstance.selElm(); + if (seld) { + if (seld.nodeType == 3) { + seld = seld.parentNode; + } + $(seld).addClass(cls); } } - var newText = pc.html(); - curRange.pasteHTML(newText); } this.close();