wysihtml5x-rails 0.4.8 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3a2130d7224dcba4c3e6d98a379a394d4154769
|
4
|
+
data.tar.gz: 652cb61fc14aa44d53cfbcf412015036fe6ec453
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9120a099177dcb0fe653ad639afab5cb188dbb87af2f7c69f4b4c97a049ebbeafd8b255233a87411a335658b789c8c1d95dc17f0207c493fd9aaa9f12cb53c6a
|
7
|
+
data.tar.gz: 9fe43031a37d2648e2b619db67c06684824c41f2d5435966bffc17df41bcb4b902467ac17ef44a9cc41f50d3f779d052d1a8cc9a394608315cdcb021c3a329c1
|
@@ -25,7 +25,7 @@ if(!Array.isArray) {
|
|
25
25
|
return Object.prototype.toString.call(arg) === '[object Array]';
|
26
26
|
};
|
27
27
|
};/**
|
28
|
-
* @license wysihtml5x v0.4.
|
28
|
+
* @license wysihtml5x v0.4.9
|
29
29
|
* https://github.com/Edicy/wysihtml5
|
30
30
|
*
|
31
31
|
* Author: Christopher Blum (https://github.com/tiff)
|
@@ -36,7 +36,7 @@ if(!Array.isArray) {
|
|
36
36
|
*
|
37
37
|
*/
|
38
38
|
var wysihtml5 = {
|
39
|
-
version: "0.4.
|
39
|
+
version: "0.4.9",
|
40
40
|
|
41
41
|
// namespaces
|
42
42
|
commands: {},
|
@@ -5813,10 +5813,15 @@ wysihtml5.dom.parse = (function() {
|
|
5813
5813
|
var context = config.context || elementOrHtml.ownerDocument || document,
|
5814
5814
|
fragment = context.createDocumentFragment(),
|
5815
5815
|
isString = typeof(elementOrHtml) === "string",
|
5816
|
+
clearInternals = false,
|
5816
5817
|
element,
|
5817
5818
|
newNode,
|
5818
5819
|
firstChild;
|
5819
5820
|
|
5821
|
+
if (config.clearInternals === true) {
|
5822
|
+
clearInternals = true;
|
5823
|
+
}
|
5824
|
+
|
5820
5825
|
if (config.uneditableClass) {
|
5821
5826
|
uneditableClass = config.uneditableClass;
|
5822
5827
|
}
|
@@ -5829,11 +5834,13 @@ wysihtml5.dom.parse = (function() {
|
|
5829
5834
|
|
5830
5835
|
while (element.firstChild) {
|
5831
5836
|
firstChild = element.firstChild;
|
5832
|
-
newNode = _convert(firstChild, config.cleanUp);
|
5833
|
-
element.removeChild(firstChild);
|
5837
|
+
newNode = _convert(firstChild, config.cleanUp, clearInternals);
|
5834
5838
|
if (newNode) {
|
5835
5839
|
fragment.appendChild(newNode);
|
5836
5840
|
}
|
5841
|
+
if (firstChild !== newNode) {
|
5842
|
+
element.removeChild(firstChild);
|
5843
|
+
}
|
5837
5844
|
}
|
5838
5845
|
|
5839
5846
|
// Clear element contents
|
@@ -5845,7 +5852,7 @@ wysihtml5.dom.parse = (function() {
|
|
5845
5852
|
return isString ? wysihtml5.quirks.getCorrectInnerHTML(element) : element;
|
5846
5853
|
}
|
5847
5854
|
|
5848
|
-
function _convert(oldNode, cleanUp) {
|
5855
|
+
function _convert(oldNode, cleanUp, clearInternals) {
|
5849
5856
|
var oldNodeType = oldNode.nodeType,
|
5850
5857
|
oldChilds = oldNode.childNodes,
|
5851
5858
|
oldChildsLength = oldChilds.length,
|
@@ -5855,21 +5862,28 @@ wysihtml5.dom.parse = (function() {
|
|
5855
5862
|
newNode,
|
5856
5863
|
newChild;
|
5857
5864
|
|
5865
|
+
// Passes directly elemets with uneditable class
|
5858
5866
|
if (uneditableClass && oldNodeType === 1 && wysihtml5.dom.hasClass(oldNode, uneditableClass)) {
|
5859
5867
|
return oldNode;
|
5860
5868
|
}
|
5861
5869
|
|
5862
|
-
newNode = method && method(oldNode);
|
5870
|
+
newNode = method && method(oldNode, clearInternals);
|
5863
5871
|
|
5872
|
+
// Remove or unwrap node in case of return value null or false
|
5864
5873
|
if (!newNode) {
|
5865
5874
|
if (newNode === false) {
|
5866
5875
|
// false defines that tag should be removed but contents should remain (unwrap)
|
5867
5876
|
fragment = oldNode.ownerDocument.createDocumentFragment();
|
5868
5877
|
|
5869
5878
|
for (i = oldChildsLength; i--;) {
|
5870
|
-
|
5871
|
-
|
5872
|
-
|
5879
|
+
if (oldChilds[i]) {
|
5880
|
+
newChild = _convert(oldChilds[i], cleanUp, clearInternals);
|
5881
|
+
if (newChild) {
|
5882
|
+
if (oldChilds[i] === newChild) {
|
5883
|
+
i--;
|
5884
|
+
}
|
5885
|
+
fragment.insertBefore(newChild, fragment.firstChild);
|
5886
|
+
}
|
5873
5887
|
}
|
5874
5888
|
}
|
5875
5889
|
|
@@ -5893,14 +5907,21 @@ wysihtml5.dom.parse = (function() {
|
|
5893
5907
|
}
|
5894
5908
|
return fragment;
|
5895
5909
|
} else {
|
5896
|
-
|
5910
|
+
// Remove
|
5911
|
+
return null;
|
5897
5912
|
}
|
5898
5913
|
}
|
5899
5914
|
|
5915
|
+
// Converts all childnodes
|
5900
5916
|
for (i=0; i<oldChildsLength; i++) {
|
5901
|
-
|
5902
|
-
|
5903
|
-
|
5917
|
+
if (oldChilds[i]) {
|
5918
|
+
newChild = _convert(oldChilds[i], cleanUp, clearInternals);
|
5919
|
+
if (newChild) {
|
5920
|
+
if (oldChilds[i] === newChild) {
|
5921
|
+
i--;
|
5922
|
+
}
|
5923
|
+
newNode.appendChild(newChild);
|
5924
|
+
}
|
5904
5925
|
}
|
5905
5926
|
}
|
5906
5927
|
|
@@ -5908,7 +5929,7 @@ wysihtml5.dom.parse = (function() {
|
|
5908
5929
|
if (cleanUp &&
|
5909
5930
|
newNode.nodeName.toLowerCase() === DEFAULT_NODE_NAME &&
|
5910
5931
|
(!newNode.childNodes.length ||
|
5911
|
-
((/^\s*$/gi).test(newNode.innerHTML) && oldNode.className !== "_wysihtml5-temp-placeholder" && oldNode.className !== "rangySelectionBoundary") ||
|
5932
|
+
((/^\s*$/gi).test(newNode.innerHTML) && (clearInternals || (oldNode.className !== "_wysihtml5-temp-placeholder" && oldNode.className !== "rangySelectionBoundary"))) ||
|
5912
5933
|
!newNode.attributes.length)
|
5913
5934
|
) {
|
5914
5935
|
fragment = newNode.ownerDocument.createDocumentFragment();
|
@@ -5927,7 +5948,7 @@ wysihtml5.dom.parse = (function() {
|
|
5927
5948
|
return newNode;
|
5928
5949
|
}
|
5929
5950
|
|
5930
|
-
function _handleElement(oldNode) {
|
5951
|
+
function _handleElement(oldNode, clearInternals) {
|
5931
5952
|
var rule,
|
5932
5953
|
newNode,
|
5933
5954
|
tagRules = currentRules.tags,
|
@@ -5985,10 +6006,10 @@ wysihtml5.dom.parse = (function() {
|
|
5985
6006
|
}
|
5986
6007
|
|
5987
6008
|
newNode = oldNode.ownerDocument.createElement(rule.rename_tag || nodeName);
|
5988
|
-
_handleAttributes(oldNode, newNode, rule);
|
6009
|
+
_handleAttributes(oldNode, newNode, rule, clearInternals);
|
5989
6010
|
_handleStyles(oldNode, newNode, rule);
|
5990
6011
|
// tests if type condition is met or node should be removed/unwrapped
|
5991
|
-
if (rule.one_of_type && !_testTypes(oldNode, currentRules, rule.one_of_type)) {
|
6012
|
+
if (rule.one_of_type && !_testTypes(oldNode, currentRules, rule.one_of_type, clearInternals)) {
|
5992
6013
|
return (rule.remove_action && rule.remove_action == "unwrap") ? false : null;
|
5993
6014
|
}
|
5994
6015
|
|
@@ -5998,11 +6019,11 @@ wysihtml5.dom.parse = (function() {
|
|
5998
6019
|
return newNode;
|
5999
6020
|
}
|
6000
6021
|
|
6001
|
-
function _testTypes(oldNode, rules, types) {
|
6022
|
+
function _testTypes(oldNode, rules, types, clearInternals) {
|
6002
6023
|
var definition, type;
|
6003
6024
|
|
6004
6025
|
// do not interfere with placeholder span or pasting caret position is not maintained
|
6005
|
-
if (oldNode.nodeName === "SPAN" && (oldNode.className === "_wysihtml5-temp-placeholder" || oldNode.className === "rangySelectionBoundary")) {
|
6026
|
+
if (oldNode.nodeName === "SPAN" && !clearInternals && (oldNode.className === "_wysihtml5-temp-placeholder" || oldNode.className === "rangySelectionBoundary")) {
|
6006
6027
|
return true;
|
6007
6028
|
}
|
6008
6029
|
|
@@ -6112,7 +6133,8 @@ wysihtml5.dom.parse = (function() {
|
|
6112
6133
|
}
|
6113
6134
|
}
|
6114
6135
|
|
6115
|
-
|
6136
|
+
// TODO: refactor. Too long to read
|
6137
|
+
function _handleAttributes(oldNode, newNode, rule, clearInternals) {
|
6116
6138
|
var attributes = {}, // fresh new set of attributes to set on newNode
|
6117
6139
|
setClass = rule.set_class, // classes to set
|
6118
6140
|
addClass = rule.add_class, // add classes based on existing attributes
|
@@ -6189,8 +6211,11 @@ wysihtml5.dom.parse = (function() {
|
|
6189
6211
|
attributes["class"] = oldNode.getAttribute("class");
|
6190
6212
|
} else {
|
6191
6213
|
// make sure that wysihtml5 temp class doesn't get stripped out
|
6192
|
-
|
6193
|
-
|
6214
|
+
if (!clearInternals) {
|
6215
|
+
allowedClasses["_wysihtml5-temp-placeholder"] = 1;
|
6216
|
+
allowedClasses["_rangySelectionBoundary"] = 1;
|
6217
|
+
allowedClasses["wysiwyg-tmp-selected-cell"] = 1;
|
6218
|
+
}
|
6194
6219
|
|
6195
6220
|
// add old classes last
|
6196
6221
|
oldClasses = oldNode.getAttribute("class");
|
@@ -6210,6 +6235,14 @@ wysihtml5.dom.parse = (function() {
|
|
6210
6235
|
}
|
6211
6236
|
}
|
6212
6237
|
|
6238
|
+
// remove table selection class if present
|
6239
|
+
if (attributes["class"] && clearInternals) {
|
6240
|
+
attributes["class"] = attributes["class"].replace("wysiwyg-tmp-selected-cell", "");
|
6241
|
+
if ((/^\s*$/g).test(attributes["class"])) {
|
6242
|
+
delete attributes.class;
|
6243
|
+
}
|
6244
|
+
}
|
6245
|
+
|
6213
6246
|
if (styles.length) {
|
6214
6247
|
attributes["style"] = wysihtml5.lang.array(styles).unique().join(" ");
|
6215
6248
|
}
|
@@ -10827,7 +10860,7 @@ wysihtml5.commands.formatCode = {
|
|
10827
10860
|
return wysihtml5.commands.insertList.state(composer, command, "UL");
|
10828
10861
|
}
|
10829
10862
|
};
|
10830
|
-
;wysihtml5.commands.insertList = (function() {
|
10863
|
+
;wysihtml5.commands.insertList = (function(wysihtml5) {
|
10831
10864
|
|
10832
10865
|
var isNode = function(node, name) {
|
10833
10866
|
if (node && node.nodeName) {
|
@@ -10985,7 +11018,7 @@ wysihtml5.commands.formatCode = {
|
|
10985
11018
|
}
|
10986
11019
|
};
|
10987
11020
|
|
10988
|
-
})();;wysihtml5.commands.italic = {
|
11021
|
+
})(wysihtml5);;wysihtml5.commands.italic = {
|
10989
11022
|
exec: function(composer, command) {
|
10990
11023
|
wysihtml5.commands.formatInline.execWithToggle(composer, command, "i");
|
10991
11024
|
},
|
@@ -11451,7 +11484,7 @@ wysihtml5.commands.formatCode = {
|
|
11451
11484
|
|
11452
11485
|
transact: function() {
|
11453
11486
|
var previousHtml = this.historyStr[this.position - 1],
|
11454
|
-
currentHtml = this.composer.getValue();
|
11487
|
+
currentHtml = this.composer.getValue(false, false);
|
11455
11488
|
|
11456
11489
|
if (currentHtml === previousHtml) {
|
11457
11490
|
return;
|
@@ -11654,11 +11687,10 @@ wysihtml5.views.View = Base.extend(
|
|
11654
11687
|
this.element.innerHTML = browser.displaysCaretInEmptyContentEditableCorrectly() ? "" : this.CARET_HACK;
|
11655
11688
|
},
|
11656
11689
|
|
11657
|
-
getValue: function(parse) {
|
11690
|
+
getValue: function(parse, clearInternals) {
|
11658
11691
|
var value = this.isEmpty() ? "" : wysihtml5.quirks.getCorrectInnerHTML(this.element);
|
11659
|
-
|
11660
|
-
|
11661
|
-
value = this.parent.parse(value);
|
11692
|
+
if (parse !== false) {
|
11693
|
+
value = this.parent.parse(value, (clearInternals === false) ? false : true);
|
11662
11694
|
}
|
11663
11695
|
|
11664
11696
|
return value;
|
@@ -11795,7 +11827,7 @@ wysihtml5.views.View = Base.extend(
|
|
11795
11827
|
this.element = (this.config.contentEditableMode) ? this.sandbox.getContentEditable() : this.doc.body;
|
11796
11828
|
if (!this.config.noTextarea) {
|
11797
11829
|
this.textarea = this.parent.textarea;
|
11798
|
-
this.element.innerHTML = this.textarea.getValue(true);
|
11830
|
+
this.element.innerHTML = this.textarea.getValue(true, false);
|
11799
11831
|
} else {
|
11800
11832
|
this.cleanUp(); // cleans contenteditable on initiation as it may contain html
|
11801
11833
|
}
|
@@ -12374,7 +12406,7 @@ wysihtml5.views.View = Base.extend(
|
|
12374
12406
|
|
12375
12407
|
wysihtml5.views.Composer.prototype.observe = function() {
|
12376
12408
|
var that = this,
|
12377
|
-
state = this.getValue(),
|
12409
|
+
state = this.getValue(false, false),
|
12378
12410
|
container = (this.sandbox.getIframe) ? this.sandbox.getIframe() : this.sandbox.getContentEditable(),
|
12379
12411
|
element = this.element,
|
12380
12412
|
focusBlurElement = (browser.supportsEventsInIframeCorrectly() || this.sandbox.getContentEditable) ? element : this.sandbox.getWindow(),
|
@@ -12422,11 +12454,11 @@ wysihtml5.views.View = Base.extend(
|
|
12422
12454
|
|
12423
12455
|
// Delay storing of state until all focus handler are fired
|
12424
12456
|
// especially the one which resets the placeholder
|
12425
|
-
setTimeout(function() { state = that.getValue(); }, 0);
|
12457
|
+
setTimeout(function() { state = that.getValue(false, false); }, 0);
|
12426
12458
|
});
|
12427
12459
|
|
12428
12460
|
dom.observe(focusBlurElement, "blur", function() {
|
12429
|
-
if (state !== that.getValue()) {
|
12461
|
+
if (state !== that.getValue(false, false)) {
|
12430
12462
|
that.parent.fire("change").fire("change:composer");
|
12431
12463
|
}
|
12432
12464
|
that.parent.fire("blur").fire("blur:composer");
|
@@ -12603,7 +12635,7 @@ wysihtml5.views.View = Base.extend(
|
|
12603
12635
|
* @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the textarea
|
12604
12636
|
*/
|
12605
12637
|
fromComposerToTextarea: function(shouldParseHtml) {
|
12606
|
-
this.textarea.setValue(wysihtml5.lang.string(this.composer.getValue()).trim(), shouldParseHtml);
|
12638
|
+
this.textarea.setValue(wysihtml5.lang.string(this.composer.getValue(false, false)).trim(), shouldParseHtml);
|
12607
12639
|
},
|
12608
12640
|
|
12609
12641
|
/**
|
@@ -12612,7 +12644,7 @@ wysihtml5.views.View = Base.extend(
|
|
12612
12644
|
* @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the composer
|
12613
12645
|
*/
|
12614
12646
|
fromTextareaToComposer: function(shouldParseHtml) {
|
12615
|
-
var textareaValue = this.textarea.getValue();
|
12647
|
+
var textareaValue = this.textarea.getValue(false, false);
|
12616
12648
|
if (textareaValue) {
|
12617
12649
|
this.composer.setValue(textareaValue, shouldParseHtml);
|
12618
12650
|
} else {
|
@@ -12693,7 +12725,7 @@ wysihtml5.views.View = Base.extend(
|
|
12693
12725
|
|
12694
12726
|
getValue: function(parse) {
|
12695
12727
|
var value = this.isEmpty() ? "" : this.element.value;
|
12696
|
-
if (parse) {
|
12728
|
+
if (parse !== false) {
|
12697
12729
|
value = this.parent.parse(value);
|
12698
12730
|
}
|
12699
12731
|
return value;
|
@@ -12878,8 +12910,8 @@ wysihtml5.views.View = Base.extend(
|
|
12878
12910
|
return this;
|
12879
12911
|
},
|
12880
12912
|
|
12881
|
-
getValue: function(parse) {
|
12882
|
-
return this.currentView.getValue(parse);
|
12913
|
+
getValue: function(parse, clearInternals) {
|
12914
|
+
return this.currentView.getValue(parse, clearInternals);
|
12883
12915
|
},
|
12884
12916
|
|
12885
12917
|
setValue: function(html, parse) {
|
@@ -12926,13 +12958,14 @@ wysihtml5.views.View = Base.extend(
|
|
12926
12958
|
return this.currentView.hasPlaceholderSet();
|
12927
12959
|
},
|
12928
12960
|
|
12929
|
-
parse: function(htmlOrElement) {
|
12930
|
-
var parseContext = (this.config.contentEditableMode) ? document : this.composer.sandbox.getDocument();
|
12961
|
+
parse: function(htmlOrElement, clearInternals) {
|
12962
|
+
var parseContext = (this.config.contentEditableMode) ? document : ((this.composer) ? this.composer.sandbox.getDocument() : null);
|
12931
12963
|
var returnValue = this.config.parser(htmlOrElement, {
|
12932
12964
|
"rules": this.config.parserRules,
|
12933
12965
|
"cleanUp": this.config.cleanUp,
|
12934
12966
|
"context": parseContext,
|
12935
|
-
"uneditableClass": this.config.uneditableContainerClassname
|
12967
|
+
"uneditableClass": this.config.uneditableContainerClassname,
|
12968
|
+
"clearInternals" : clearInternals
|
12936
12969
|
});
|
12937
12970
|
if (typeof(htmlOrElement) === "object") {
|
12938
12971
|
wysihtml5.quirks.redraw(htmlOrElement);
|
@@ -25,7 +25,7 @@ if(!Array.isArray) {
|
|
25
25
|
return Object.prototype.toString.call(arg) === '[object Array]';
|
26
26
|
};
|
27
27
|
};/**
|
28
|
-
* @license wysihtml5x v0.4.
|
28
|
+
* @license wysihtml5x v0.4.9
|
29
29
|
* https://github.com/Edicy/wysihtml5
|
30
30
|
*
|
31
31
|
* Author: Christopher Blum (https://github.com/tiff)
|
@@ -36,7 +36,7 @@ if(!Array.isArray) {
|
|
36
36
|
*
|
37
37
|
*/
|
38
38
|
var wysihtml5 = {
|
39
|
-
version: "0.4.
|
39
|
+
version: "0.4.9",
|
40
40
|
|
41
41
|
// namespaces
|
42
42
|
commands: {},
|
@@ -5813,10 +5813,15 @@ wysihtml5.dom.parse = (function() {
|
|
5813
5813
|
var context = config.context || elementOrHtml.ownerDocument || document,
|
5814
5814
|
fragment = context.createDocumentFragment(),
|
5815
5815
|
isString = typeof(elementOrHtml) === "string",
|
5816
|
+
clearInternals = false,
|
5816
5817
|
element,
|
5817
5818
|
newNode,
|
5818
5819
|
firstChild;
|
5819
5820
|
|
5821
|
+
if (config.clearInternals === true) {
|
5822
|
+
clearInternals = true;
|
5823
|
+
}
|
5824
|
+
|
5820
5825
|
if (config.uneditableClass) {
|
5821
5826
|
uneditableClass = config.uneditableClass;
|
5822
5827
|
}
|
@@ -5829,11 +5834,13 @@ wysihtml5.dom.parse = (function() {
|
|
5829
5834
|
|
5830
5835
|
while (element.firstChild) {
|
5831
5836
|
firstChild = element.firstChild;
|
5832
|
-
newNode = _convert(firstChild, config.cleanUp);
|
5833
|
-
element.removeChild(firstChild);
|
5837
|
+
newNode = _convert(firstChild, config.cleanUp, clearInternals);
|
5834
5838
|
if (newNode) {
|
5835
5839
|
fragment.appendChild(newNode);
|
5836
5840
|
}
|
5841
|
+
if (firstChild !== newNode) {
|
5842
|
+
element.removeChild(firstChild);
|
5843
|
+
}
|
5837
5844
|
}
|
5838
5845
|
|
5839
5846
|
// Clear element contents
|
@@ -5845,7 +5852,7 @@ wysihtml5.dom.parse = (function() {
|
|
5845
5852
|
return isString ? wysihtml5.quirks.getCorrectInnerHTML(element) : element;
|
5846
5853
|
}
|
5847
5854
|
|
5848
|
-
function _convert(oldNode, cleanUp) {
|
5855
|
+
function _convert(oldNode, cleanUp, clearInternals) {
|
5849
5856
|
var oldNodeType = oldNode.nodeType,
|
5850
5857
|
oldChilds = oldNode.childNodes,
|
5851
5858
|
oldChildsLength = oldChilds.length,
|
@@ -5855,21 +5862,28 @@ wysihtml5.dom.parse = (function() {
|
|
5855
5862
|
newNode,
|
5856
5863
|
newChild;
|
5857
5864
|
|
5865
|
+
// Passes directly elemets with uneditable class
|
5858
5866
|
if (uneditableClass && oldNodeType === 1 && wysihtml5.dom.hasClass(oldNode, uneditableClass)) {
|
5859
5867
|
return oldNode;
|
5860
5868
|
}
|
5861
5869
|
|
5862
|
-
newNode = method && method(oldNode);
|
5870
|
+
newNode = method && method(oldNode, clearInternals);
|
5863
5871
|
|
5872
|
+
// Remove or unwrap node in case of return value null or false
|
5864
5873
|
if (!newNode) {
|
5865
5874
|
if (newNode === false) {
|
5866
5875
|
// false defines that tag should be removed but contents should remain (unwrap)
|
5867
5876
|
fragment = oldNode.ownerDocument.createDocumentFragment();
|
5868
5877
|
|
5869
5878
|
for (i = oldChildsLength; i--;) {
|
5870
|
-
|
5871
|
-
|
5872
|
-
|
5879
|
+
if (oldChilds[i]) {
|
5880
|
+
newChild = _convert(oldChilds[i], cleanUp, clearInternals);
|
5881
|
+
if (newChild) {
|
5882
|
+
if (oldChilds[i] === newChild) {
|
5883
|
+
i--;
|
5884
|
+
}
|
5885
|
+
fragment.insertBefore(newChild, fragment.firstChild);
|
5886
|
+
}
|
5873
5887
|
}
|
5874
5888
|
}
|
5875
5889
|
|
@@ -5893,14 +5907,21 @@ wysihtml5.dom.parse = (function() {
|
|
5893
5907
|
}
|
5894
5908
|
return fragment;
|
5895
5909
|
} else {
|
5896
|
-
|
5910
|
+
// Remove
|
5911
|
+
return null;
|
5897
5912
|
}
|
5898
5913
|
}
|
5899
5914
|
|
5915
|
+
// Converts all childnodes
|
5900
5916
|
for (i=0; i<oldChildsLength; i++) {
|
5901
|
-
|
5902
|
-
|
5903
|
-
|
5917
|
+
if (oldChilds[i]) {
|
5918
|
+
newChild = _convert(oldChilds[i], cleanUp, clearInternals);
|
5919
|
+
if (newChild) {
|
5920
|
+
if (oldChilds[i] === newChild) {
|
5921
|
+
i--;
|
5922
|
+
}
|
5923
|
+
newNode.appendChild(newChild);
|
5924
|
+
}
|
5904
5925
|
}
|
5905
5926
|
}
|
5906
5927
|
|
@@ -5908,7 +5929,7 @@ wysihtml5.dom.parse = (function() {
|
|
5908
5929
|
if (cleanUp &&
|
5909
5930
|
newNode.nodeName.toLowerCase() === DEFAULT_NODE_NAME &&
|
5910
5931
|
(!newNode.childNodes.length ||
|
5911
|
-
((/^\s*$/gi).test(newNode.innerHTML) && oldNode.className !== "_wysihtml5-temp-placeholder" && oldNode.className !== "rangySelectionBoundary") ||
|
5932
|
+
((/^\s*$/gi).test(newNode.innerHTML) && (clearInternals || (oldNode.className !== "_wysihtml5-temp-placeholder" && oldNode.className !== "rangySelectionBoundary"))) ||
|
5912
5933
|
!newNode.attributes.length)
|
5913
5934
|
) {
|
5914
5935
|
fragment = newNode.ownerDocument.createDocumentFragment();
|
@@ -5927,7 +5948,7 @@ wysihtml5.dom.parse = (function() {
|
|
5927
5948
|
return newNode;
|
5928
5949
|
}
|
5929
5950
|
|
5930
|
-
function _handleElement(oldNode) {
|
5951
|
+
function _handleElement(oldNode, clearInternals) {
|
5931
5952
|
var rule,
|
5932
5953
|
newNode,
|
5933
5954
|
tagRules = currentRules.tags,
|
@@ -5985,10 +6006,10 @@ wysihtml5.dom.parse = (function() {
|
|
5985
6006
|
}
|
5986
6007
|
|
5987
6008
|
newNode = oldNode.ownerDocument.createElement(rule.rename_tag || nodeName);
|
5988
|
-
_handleAttributes(oldNode, newNode, rule);
|
6009
|
+
_handleAttributes(oldNode, newNode, rule, clearInternals);
|
5989
6010
|
_handleStyles(oldNode, newNode, rule);
|
5990
6011
|
// tests if type condition is met or node should be removed/unwrapped
|
5991
|
-
if (rule.one_of_type && !_testTypes(oldNode, currentRules, rule.one_of_type)) {
|
6012
|
+
if (rule.one_of_type && !_testTypes(oldNode, currentRules, rule.one_of_type, clearInternals)) {
|
5992
6013
|
return (rule.remove_action && rule.remove_action == "unwrap") ? false : null;
|
5993
6014
|
}
|
5994
6015
|
|
@@ -5998,11 +6019,11 @@ wysihtml5.dom.parse = (function() {
|
|
5998
6019
|
return newNode;
|
5999
6020
|
}
|
6000
6021
|
|
6001
|
-
function _testTypes(oldNode, rules, types) {
|
6022
|
+
function _testTypes(oldNode, rules, types, clearInternals) {
|
6002
6023
|
var definition, type;
|
6003
6024
|
|
6004
6025
|
// do not interfere with placeholder span or pasting caret position is not maintained
|
6005
|
-
if (oldNode.nodeName === "SPAN" && (oldNode.className === "_wysihtml5-temp-placeholder" || oldNode.className === "rangySelectionBoundary")) {
|
6026
|
+
if (oldNode.nodeName === "SPAN" && !clearInternals && (oldNode.className === "_wysihtml5-temp-placeholder" || oldNode.className === "rangySelectionBoundary")) {
|
6006
6027
|
return true;
|
6007
6028
|
}
|
6008
6029
|
|
@@ -6112,7 +6133,8 @@ wysihtml5.dom.parse = (function() {
|
|
6112
6133
|
}
|
6113
6134
|
}
|
6114
6135
|
|
6115
|
-
|
6136
|
+
// TODO: refactor. Too long to read
|
6137
|
+
function _handleAttributes(oldNode, newNode, rule, clearInternals) {
|
6116
6138
|
var attributes = {}, // fresh new set of attributes to set on newNode
|
6117
6139
|
setClass = rule.set_class, // classes to set
|
6118
6140
|
addClass = rule.add_class, // add classes based on existing attributes
|
@@ -6189,8 +6211,11 @@ wysihtml5.dom.parse = (function() {
|
|
6189
6211
|
attributes["class"] = oldNode.getAttribute("class");
|
6190
6212
|
} else {
|
6191
6213
|
// make sure that wysihtml5 temp class doesn't get stripped out
|
6192
|
-
|
6193
|
-
|
6214
|
+
if (!clearInternals) {
|
6215
|
+
allowedClasses["_wysihtml5-temp-placeholder"] = 1;
|
6216
|
+
allowedClasses["_rangySelectionBoundary"] = 1;
|
6217
|
+
allowedClasses["wysiwyg-tmp-selected-cell"] = 1;
|
6218
|
+
}
|
6194
6219
|
|
6195
6220
|
// add old classes last
|
6196
6221
|
oldClasses = oldNode.getAttribute("class");
|
@@ -6210,6 +6235,14 @@ wysihtml5.dom.parse = (function() {
|
|
6210
6235
|
}
|
6211
6236
|
}
|
6212
6237
|
|
6238
|
+
// remove table selection class if present
|
6239
|
+
if (attributes["class"] && clearInternals) {
|
6240
|
+
attributes["class"] = attributes["class"].replace("wysiwyg-tmp-selected-cell", "");
|
6241
|
+
if ((/^\s*$/g).test(attributes["class"])) {
|
6242
|
+
delete attributes.class;
|
6243
|
+
}
|
6244
|
+
}
|
6245
|
+
|
6213
6246
|
if (styles.length) {
|
6214
6247
|
attributes["style"] = wysihtml5.lang.array(styles).unique().join(" ");
|
6215
6248
|
}
|
@@ -10827,7 +10860,7 @@ wysihtml5.commands.formatCode = {
|
|
10827
10860
|
return wysihtml5.commands.insertList.state(composer, command, "UL");
|
10828
10861
|
}
|
10829
10862
|
};
|
10830
|
-
;wysihtml5.commands.insertList = (function() {
|
10863
|
+
;wysihtml5.commands.insertList = (function(wysihtml5) {
|
10831
10864
|
|
10832
10865
|
var isNode = function(node, name) {
|
10833
10866
|
if (node && node.nodeName) {
|
@@ -10985,7 +11018,7 @@ wysihtml5.commands.formatCode = {
|
|
10985
11018
|
}
|
10986
11019
|
};
|
10987
11020
|
|
10988
|
-
})();;wysihtml5.commands.italic = {
|
11021
|
+
})(wysihtml5);;wysihtml5.commands.italic = {
|
10989
11022
|
exec: function(composer, command) {
|
10990
11023
|
wysihtml5.commands.formatInline.execWithToggle(composer, command, "i");
|
10991
11024
|
},
|
@@ -11451,7 +11484,7 @@ wysihtml5.commands.formatCode = {
|
|
11451
11484
|
|
11452
11485
|
transact: function() {
|
11453
11486
|
var previousHtml = this.historyStr[this.position - 1],
|
11454
|
-
currentHtml = this.composer.getValue();
|
11487
|
+
currentHtml = this.composer.getValue(false, false);
|
11455
11488
|
|
11456
11489
|
if (currentHtml === previousHtml) {
|
11457
11490
|
return;
|
@@ -11654,11 +11687,10 @@ wysihtml5.views.View = Base.extend(
|
|
11654
11687
|
this.element.innerHTML = browser.displaysCaretInEmptyContentEditableCorrectly() ? "" : this.CARET_HACK;
|
11655
11688
|
},
|
11656
11689
|
|
11657
|
-
getValue: function(parse) {
|
11690
|
+
getValue: function(parse, clearInternals) {
|
11658
11691
|
var value = this.isEmpty() ? "" : wysihtml5.quirks.getCorrectInnerHTML(this.element);
|
11659
|
-
|
11660
|
-
|
11661
|
-
value = this.parent.parse(value);
|
11692
|
+
if (parse !== false) {
|
11693
|
+
value = this.parent.parse(value, (clearInternals === false) ? false : true);
|
11662
11694
|
}
|
11663
11695
|
|
11664
11696
|
return value;
|
@@ -11795,7 +11827,7 @@ wysihtml5.views.View = Base.extend(
|
|
11795
11827
|
this.element = (this.config.contentEditableMode) ? this.sandbox.getContentEditable() : this.doc.body;
|
11796
11828
|
if (!this.config.noTextarea) {
|
11797
11829
|
this.textarea = this.parent.textarea;
|
11798
|
-
this.element.innerHTML = this.textarea.getValue(true);
|
11830
|
+
this.element.innerHTML = this.textarea.getValue(true, false);
|
11799
11831
|
} else {
|
11800
11832
|
this.cleanUp(); // cleans contenteditable on initiation as it may contain html
|
11801
11833
|
}
|
@@ -12374,7 +12406,7 @@ wysihtml5.views.View = Base.extend(
|
|
12374
12406
|
|
12375
12407
|
wysihtml5.views.Composer.prototype.observe = function() {
|
12376
12408
|
var that = this,
|
12377
|
-
state = this.getValue(),
|
12409
|
+
state = this.getValue(false, false),
|
12378
12410
|
container = (this.sandbox.getIframe) ? this.sandbox.getIframe() : this.sandbox.getContentEditable(),
|
12379
12411
|
element = this.element,
|
12380
12412
|
focusBlurElement = (browser.supportsEventsInIframeCorrectly() || this.sandbox.getContentEditable) ? element : this.sandbox.getWindow(),
|
@@ -12422,11 +12454,11 @@ wysihtml5.views.View = Base.extend(
|
|
12422
12454
|
|
12423
12455
|
// Delay storing of state until all focus handler are fired
|
12424
12456
|
// especially the one which resets the placeholder
|
12425
|
-
setTimeout(function() { state = that.getValue(); }, 0);
|
12457
|
+
setTimeout(function() { state = that.getValue(false, false); }, 0);
|
12426
12458
|
});
|
12427
12459
|
|
12428
12460
|
dom.observe(focusBlurElement, "blur", function() {
|
12429
|
-
if (state !== that.getValue()) {
|
12461
|
+
if (state !== that.getValue(false, false)) {
|
12430
12462
|
that.parent.fire("change").fire("change:composer");
|
12431
12463
|
}
|
12432
12464
|
that.parent.fire("blur").fire("blur:composer");
|
@@ -12603,7 +12635,7 @@ wysihtml5.views.View = Base.extend(
|
|
12603
12635
|
* @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the textarea
|
12604
12636
|
*/
|
12605
12637
|
fromComposerToTextarea: function(shouldParseHtml) {
|
12606
|
-
this.textarea.setValue(wysihtml5.lang.string(this.composer.getValue()).trim(), shouldParseHtml);
|
12638
|
+
this.textarea.setValue(wysihtml5.lang.string(this.composer.getValue(false, false)).trim(), shouldParseHtml);
|
12607
12639
|
},
|
12608
12640
|
|
12609
12641
|
/**
|
@@ -12612,7 +12644,7 @@ wysihtml5.views.View = Base.extend(
|
|
12612
12644
|
* @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the composer
|
12613
12645
|
*/
|
12614
12646
|
fromTextareaToComposer: function(shouldParseHtml) {
|
12615
|
-
var textareaValue = this.textarea.getValue();
|
12647
|
+
var textareaValue = this.textarea.getValue(false, false);
|
12616
12648
|
if (textareaValue) {
|
12617
12649
|
this.composer.setValue(textareaValue, shouldParseHtml);
|
12618
12650
|
} else {
|
@@ -12693,7 +12725,7 @@ wysihtml5.views.View = Base.extend(
|
|
12693
12725
|
|
12694
12726
|
getValue: function(parse) {
|
12695
12727
|
var value = this.isEmpty() ? "" : this.element.value;
|
12696
|
-
if (parse) {
|
12728
|
+
if (parse !== false) {
|
12697
12729
|
value = this.parent.parse(value);
|
12698
12730
|
}
|
12699
12731
|
return value;
|
@@ -12878,8 +12910,8 @@ wysihtml5.views.View = Base.extend(
|
|
12878
12910
|
return this;
|
12879
12911
|
},
|
12880
12912
|
|
12881
|
-
getValue: function(parse) {
|
12882
|
-
return this.currentView.getValue(parse);
|
12913
|
+
getValue: function(parse, clearInternals) {
|
12914
|
+
return this.currentView.getValue(parse, clearInternals);
|
12883
12915
|
},
|
12884
12916
|
|
12885
12917
|
setValue: function(html, parse) {
|
@@ -12926,13 +12958,14 @@ wysihtml5.views.View = Base.extend(
|
|
12926
12958
|
return this.currentView.hasPlaceholderSet();
|
12927
12959
|
},
|
12928
12960
|
|
12929
|
-
parse: function(htmlOrElement) {
|
12930
|
-
var parseContext = (this.config.contentEditableMode) ? document : this.composer.sandbox.getDocument();
|
12961
|
+
parse: function(htmlOrElement, clearInternals) {
|
12962
|
+
var parseContext = (this.config.contentEditableMode) ? document : ((this.composer) ? this.composer.sandbox.getDocument() : null);
|
12931
12963
|
var returnValue = this.config.parser(htmlOrElement, {
|
12932
12964
|
"rules": this.config.parserRules,
|
12933
12965
|
"cleanUp": this.config.cleanUp,
|
12934
12966
|
"context": parseContext,
|
12935
|
-
"uneditableClass": this.config.uneditableContainerClassname
|
12967
|
+
"uneditableClass": this.config.uneditableContainerClassname,
|
12968
|
+
"clearInternals" : clearInternals
|
12936
12969
|
});
|
12937
12970
|
if (typeof(htmlOrElement) === "object") {
|
12938
12971
|
wysihtml5.quirks.redraw(htmlOrElement);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wysihtml5x-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tanel Jakobsoo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|