wysihtml5_with_ps 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,60 @@
1
+ module("wysihtml5 - Incompatible", {
2
+ setup: function() {
3
+ this.originalSupportCheck = wysihtml5.browser.supported;
4
+ wysihtml5.browser.supported = function() { return false; };
5
+
6
+ this.textareaElement = document.createElement("textarea");
7
+ document.body.appendChild(this.textareaElement);
8
+ },
9
+
10
+ teardown: function() {
11
+ wysihtml5.browser.supported = this.originalSupportCheck;
12
+ this.textareaElement.parentNode.removeChild(this.textareaElement);
13
+ }
14
+ });
15
+
16
+
17
+ asyncTest("Basic test", function() {
18
+ expect(12);
19
+
20
+ var that = this;
21
+
22
+ var oldIframesLength = document.getElementsByTagName("iframe").length;
23
+
24
+ var oldInputsLength = document.getElementsByTagName("input").length;
25
+
26
+ var editor = new wysihtml5.Editor(this.textareaElement);
27
+ editor.observe("load", function() {
28
+ ok(true, "'load' event correctly triggered");
29
+ ok(!wysihtml5.dom.hasClass(document.body, "wysihtml5-supported"), "<body> didn't receive the 'wysihtml5-supported' class");
30
+ ok(!editor.isCompatible(), "isCompatible returns false when rich text editing is not correctly supported in the current browser");
31
+ equal(that.textareaElement.style.display, "", "Textarea is visible");
32
+ ok(!editor.composer, "Composer not initialized");
33
+
34
+ equal(document.getElementsByTagName("iframe").length, oldIframesLength, "No hidden field has been inserted into the dom");
35
+ equal(document.getElementsByTagName("input").length, oldInputsLength, "Composer not initialized");
36
+
37
+ var html = "foobar<br>";
38
+ editor.setValue(html);
39
+ equal(that.textareaElement.value, html);
40
+ equal(editor.getValue(), html);
41
+ editor.clear();
42
+ equal(that.textareaElement.value, "");
43
+
44
+ editor.observe("focus", function() {
45
+ ok(true, "Generic 'focus' event fired");
46
+ });
47
+
48
+ editor.observe("focus:textarea", function() {
49
+ ok(true, "Specific 'focus:textarea' event fired");
50
+ });
51
+
52
+ editor.observe("focus:composer", function() {
53
+ ok(false, "Specific 'focus:composer' event fired, and that's wrong, there shouldn't be a composer element/view");
54
+ });
55
+
56
+ QUnit.triggerEvent(that.textareaElement, wysihtml5.browser.supportsEvent("focusin") ? "focusin" : "focus");
57
+
58
+ start();
59
+ });
60
+ });
data/test/index.html ADDED
@@ -0,0 +1,126 @@
1
+ <!DOCTYPE html>
2
+
3
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
4
+ <meta charset="utf-8">
5
+
6
+ <title>wysihtml5 - Test Suite</title>
7
+
8
+ <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-git.css">
9
+
10
+ <script src="http://code.jquery.com/qunit/qunit-git.js"></script>
11
+
12
+ <script src="../src/wysihtml5.js"></script>
13
+ <script src="../lib/rangy/rangy-core.js"></script>
14
+ <script src="../lib/base/base.js"></script>
15
+ <script src="../src/browser.js"></script>
16
+ <script src="../src/lang/array.js"></script>
17
+ <script src="../src/lang/dispatcher.js"></script>
18
+ <script src="../src/lang/object.js"></script>
19
+ <script src="../src/lang/string.js"></script>
20
+ <script src="../src/dom/auto_link.js"></script>
21
+ <script src="../src/dom/class.js"></script>
22
+ <script src="../src/dom/contains.js"></script>
23
+ <script src="../src/dom/convert_to_list.js"></script>
24
+ <script src="../src/dom/copy_attributes.js"></script>
25
+ <script src="../src/dom/copy_styles.js"></script>
26
+ <script src="../src/dom/delegate.js"></script>
27
+ <script src="../src/dom/get_as_dom.js"></script>
28
+ <script src="../src/dom/get_parent_element.js"></script>
29
+ <script src="../src/dom/get_style.js"></script>
30
+ <script src="../src/dom/has_element_with_tag_name.js"></script>
31
+ <script src="../src/dom/has_element_with_class_name.js"></script>
32
+ <script src="../src/dom/insert.js"></script>
33
+ <script src="../src/dom/insert_css.js"></script>
34
+ <script src="../src/dom/observe.js"></script>
35
+ <script src="../src/dom/parse.js"></script>
36
+ <script src="../src/dom/remove_empty_text_nodes.js"></script>
37
+ <script src="../src/dom/rename_element.js"></script>
38
+ <script src="../src/dom/replace_with_child_nodes.js"></script>
39
+ <script src="../src/dom/resolve_list.js"></script>
40
+ <script src="../src/dom/sandbox.js"></script>
41
+ <script src="../src/dom/set_attributes.js"></script>
42
+ <script src="../src/dom/set_styles.js"></script>
43
+ <script src="../src/dom/simulate_placeholder.js"></script>
44
+ <script src="../src/dom/text_content.js"></script>
45
+ <script src="../src/quirks/clean_pasted_html.js"></script>
46
+ <script src="../src/quirks/ensure_proper_clearing.js"></script>
47
+ <script src="../src/quirks/get_correct_inner_html.js"></script>
48
+ <script src="../src/quirks/insert_line_break_on_return.js"></script>
49
+ <script src="../src/quirks/redraw.js"></script>
50
+ <script src="../src/selection/selection.js"></script>
51
+ <script src="../src/selection/html_applier.js"></script>
52
+ <script src="../src/commands.js"></script>
53
+ <script src="../src/commands/bold.js"></script>
54
+ <script src="../src/commands/createLink.js"></script>
55
+ <script src="../src/commands/fontSize.js"></script>
56
+ <script src="../src/commands/foreColor.js"></script>
57
+ <script src="../src/commands/formatBlock.js"></script>
58
+ <script src="../src/commands/formatInline.js"></script>
59
+ <script src="../src/commands/insertHTML.js"></script>
60
+ <script src="../src/commands/insertImage.js"></script>
61
+ <script src="../src/commands/insertLineBreak.js"></script>
62
+ <script src="../src/commands/insertOrderedList.js"></script>
63
+ <script src="../src/commands/insertUnorderedList.js"></script>
64
+ <script src="../src/commands/italic.js"></script>
65
+ <script src="../src/commands/justifyCenter.js"></script>
66
+ <script src="../src/commands/justifyLeft.js"></script>
67
+ <script src="../src/commands/justifyRight.js"></script>
68
+ <script src="../src/commands/justifyFull.js"></script>
69
+ <script src="../src/commands/redo.js"></script>
70
+ <script src="../src/commands/underline.js"></script>
71
+ <script src="../src/commands/undo.js"></script>
72
+ <script src="../src/undo_manager.js"></script>
73
+ <script src="../src/views/view.js"></script>
74
+ <script src="../src/views/composer.js"></script>
75
+ <script src="../src/views/composer.style.js"></script>
76
+ <script src="../src/views/composer.observe.js"></script>
77
+ <script src="../src/views/synchronizer.js"></script>
78
+ <script src="../src/views/textarea.js"></script>
79
+ <script src="../src/toolbar/dialog.js"></script>
80
+ <script src="../src/toolbar/speech.js"></script>
81
+ <script src="../src/toolbar/toolbar.js"></script>
82
+ <script src="../src/editor.js"></script>
83
+
84
+ <script src="../src/assert/html_equal.js"></script>
85
+
86
+ <script src="browser_test.js"></script>
87
+ <script src="incompatible_test.js"></script>
88
+
89
+ <script>
90
+ if (wysihtml5.browser.supported()) {
91
+ document.write(
92
+ '<script src="assert/html_equal_test.js"><\/script>' +
93
+ '<script src="lang/array_test.js"><\/script>' +
94
+ '<script src="lang/object_test.js"><\/script>' +
95
+ '<script src="lang/string_test.js"><\/script>' +
96
+ '<script src="dom/auto_link_test.js"><\/script>' +
97
+ '<script src="dom/contains_test.js"><\/script>' +
98
+ '<script src="dom/convert_to_list_test.js"><\/script>' +
99
+ '<script src="dom/copy_styles_test.js"><\/script>' +
100
+ '<script src="dom/copy_attributes_test.js"><\/script>' +
101
+ '<script src="dom/delegate_test.js"><\/script>' +
102
+ '<script src="dom/sandbox_test.js"><\/script>' +
103
+ '<script src="dom/observe_test.js"><\/script>' +
104
+ '<script src="dom/get_as_dom_test.js"><\/script>' +
105
+ '<script src="dom/get_parent_element_test.js"><\/script>' +
106
+ '<script src="dom/get_style_test.js"><\/script>' +
107
+ '<script src="dom/has_element_with_tag_name_test.js"><\/script>' +
108
+ '<script src="dom/has_element_with_class_name_test.js"><\/script>' +
109
+ '<script src="dom/insert_css_test.js"><\/script>' +
110
+ '<script src="dom/resolve_list_test.js"><\/script>' +
111
+ '<script src="dom/rename_element_test.js"><\/script>' +
112
+ '<script src="dom/set_styles_test.js"><\/script>' +
113
+ '<script src="dom/set_attributes_test.js"><\/script>' +
114
+ '<script src="dom/parse_test.js"><\/script>' +
115
+ '<script src="quirks/clean_pasted_html_test.js"><\/script>' +
116
+ '<script src="undo_manager_test.js"><\/script>' +
117
+ '<script src="editor_test.js"><\/script>'
118
+ );
119
+ }
120
+ </script>
121
+
122
+ <h1 id="qunit-header">wysihtml5 - Test Suite</h1>
123
+ <h2 id="qunit-banner"></h2>
124
+ <div id="qunit-testrunner-toolbar"></div>
125
+ <h2 id="qunit-userAgent"></h2>
126
+ <ol id="qunit-tests"></ol>
@@ -0,0 +1,22 @@
1
+ module("wysihtml5.lang.array");
2
+
3
+ test("contains()", function() {
4
+ var arr = [1, "2", "foo"];
5
+ ok(wysihtml5.lang.array(arr).contains(1));
6
+ ok(!wysihtml5.lang.array(arr).contains(2));
7
+ ok(wysihtml5.lang.array(arr).contains("2"));
8
+ ok(wysihtml5.lang.array(arr).contains("foo"));
9
+ });
10
+
11
+ test("without()", function() {
12
+ var arr = [1, 2, 3];
13
+ deepEqual(wysihtml5.lang.array(arr).without([1]), [2, 3]);
14
+ deepEqual(wysihtml5.lang.array(arr).without([4]), [1, 2, 3]);
15
+ });
16
+
17
+ test("get()", function() {
18
+ var nodeList = document.getElementsByTagName("*"),
19
+ arr = wysihtml5.lang.array(nodeList).get();
20
+ equal(arr.length, nodeList.length);
21
+ ok(arr instanceof Array);
22
+ });
@@ -0,0 +1,22 @@
1
+ module("wysihtml5.lang.object");
2
+
3
+ test("merge()", function() {
4
+ var obj = { foo: 1, bar: 1 },
5
+ returnValue = wysihtml5.lang.object(obj).merge({ bar: 2, baz: 3 }).get();
6
+ equal(returnValue, obj);
7
+ deepEqual(obj, { foo: 1, bar: 2, baz: 3 });
8
+ });
9
+
10
+ test("clone()", function() {
11
+ var obj = { foo: true },
12
+ returnValue = wysihtml5.lang.object(obj).clone();
13
+ ok(obj != returnValue);
14
+ deepEqual(obj, returnValue);
15
+ });
16
+
17
+ test("isArray()", function() {
18
+ ok(wysihtml5.lang.object([]).isArray());
19
+ ok(!wysihtml5.lang.object({}).isArray());
20
+ ok(!wysihtml5.lang.object(document.body.childNodes).isArray());
21
+ ok(!wysihtml5.lang.object("1,2,3").isArray());
22
+ });
@@ -0,0 +1,19 @@
1
+ module("wysihtml5.lang.string");
2
+
3
+ test("trim()", function() {
4
+ equal(wysihtml5.lang.string(" foo \n").trim(), "foo");
5
+ });
6
+
7
+ test("interpolate()", function() {
8
+ equal(
9
+ wysihtml5.lang.string("Hello #{name}, I LOVE YOUR NAME. IT'S VERY GERMAN AND SOUNDS STRONG.").interpolate({ name: "Reinhold" }),
10
+ "Hello Reinhold, I LOVE YOUR NAME. IT'S VERY GERMAN AND SOUNDS STRONG."
11
+ );
12
+ });
13
+
14
+ test("replace()", function() {
15
+ equal(
16
+ wysihtml5.lang.string("I LOVE CAKE").replace("CAKE").by("BOOBS"),
17
+ "I LOVE BOOBS"
18
+ );
19
+ });
@@ -0,0 +1,11 @@
1
+ if (wysihtml5.browser.supported()) {
2
+ module("wysihtml5.quirks.cleanPastedHTML");
3
+
4
+ test("Basic test", function() {
5
+ wysihtml5.assert.htmlEqual(
6
+ wysihtml5.quirks.cleanPastedHTML("<u>See: </u><a href=\"http://www.google.com\"><u><b>best search engine</b></u></a>"),
7
+ "<u>See: </u><a href=\"http://www.google.com\"><b>best search engine</b></a>",
8
+ "Correctly removed <u> within <a>"
9
+ );
10
+ });
11
+ }
@@ -0,0 +1,94 @@
1
+ if (wysihtml5.browser.supportsCommand(document, "insertHTML")) {
2
+
3
+ module("wysihtml5.UndoManager", {
4
+ setup: function() {
5
+ this.textareaElement = document.createElement("textarea");
6
+ this.textareaElement.value = "1";
7
+
8
+ document.body.appendChild(this.textareaElement);
9
+ },
10
+
11
+ teardown: function() {
12
+ var leftover;
13
+ while (leftover = document.querySelector("iframe.wysihtml5-sandbox, input[name='_wysihtml5_mode']")) {
14
+ leftover.parentNode.removeChild(leftover);
15
+ }
16
+ document.body.removeChild(this.textareaElement);
17
+ },
18
+
19
+ triggerUndo: function(editor) {
20
+ this.triggerKey(editor, 90);
21
+ },
22
+
23
+ triggerRedo: function(editor) {
24
+ this.triggerKey(editor, 89);
25
+ },
26
+
27
+ triggerKey: function(editor, keyCode) {
28
+ var event;
29
+ try {
30
+ event = editor.composer.sandbox.getDocument().createEvent("KeyEvents");
31
+ event.initKeyEvent("keydown", true, true, editor.composer.sandbox.getWindow(), true, false, false, false, keyCode, keyCode);
32
+ } catch(e) {
33
+ event = editor.composer.sandbox.getDocument().createEvent("Events");
34
+ event.initEvent("keydown", true, true);
35
+ event.ctrlKey = true;
36
+ event.keyCode = keyCode;
37
+ }
38
+ editor.composer.element.dispatchEvent(event);
39
+ }
40
+ });
41
+
42
+
43
+ asyncTest("Basic test", function() {
44
+ expect(5);
45
+
46
+ var that = this,
47
+ editor = new wysihtml5.Editor(this.textareaElement);
48
+ editor.on("load", function() {
49
+ editor.setValue("1 2").fire("newword:composer");
50
+ editor.setValue("1 2 3").fire("newword:composer");
51
+ editor.setValue("1 2 3 4").fire("newword:composer");
52
+ editor.setValue("1 2 3 4 5");
53
+
54
+ that.triggerUndo(editor);
55
+ equal(editor.getValue(), "1 2 3 4");
56
+ that.triggerRedo(editor);
57
+ that.triggerRedo(editor);
58
+ equal(editor.getValue(), "1 2 3 4 5");
59
+ that.triggerUndo(editor);
60
+ that.triggerUndo(editor);
61
+ equal(editor.getValue(), "1 2 3");
62
+ that.triggerUndo(editor);
63
+ that.triggerUndo(editor);
64
+ equal(editor.getValue(), "1");
65
+ that.triggerUndo(editor);
66
+ that.triggerUndo(editor);
67
+ equal(editor.getValue(), "1");
68
+
69
+ start();
70
+ });
71
+ });
72
+
73
+
74
+ asyncTest("Test commands", function() {
75
+ expect(3);
76
+
77
+ var that = this,
78
+ editor = new wysihtml5.Editor(this.textareaElement);
79
+ editor.on("load", function() {
80
+ editor.setValue("<b>1</b>").fire("beforecommand:composer");
81
+ editor.setValue("<i><b>1</b></i>").fire("beforecommand:composer");
82
+
83
+ that.triggerUndo(editor);
84
+ equal(editor.getValue(), "<b>1</b>");
85
+ that.triggerRedo(editor);
86
+ equal(editor.getValue(), "<i><b>1</b></i>");
87
+ that.triggerUndo(editor);
88
+ that.triggerUndo(editor);
89
+ equal(editor.getValue(), "1");
90
+
91
+ start();
92
+ });
93
+ });
94
+ }
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wysihtml5_with_ps
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Swami Atma
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-18 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Temporary clone of wysihtml5. I need a published version supporting p
15
+ tags to include in my gem so I'll use this until wysihtml5 0.4 is published.
16
+ email:
17
+ - swami@TenThousandHours.eu
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/base/base.js
23
+ - lib/rangy/rangy-core.js
24
+ - lib/wysihtml5_with_ps/version.rb
25
+ - Rakefile
26
+ - Makefile
27
+ - test/assert/html_equal_test.js
28
+ - test/browser_test.js
29
+ - test/dom/auto_link_test.js
30
+ - test/dom/contains_test.js
31
+ - test/dom/convert_to_list_test.js
32
+ - test/dom/copy_attributes_test.js
33
+ - test/dom/copy_styles_test.js
34
+ - test/dom/delegate_test.js
35
+ - test/dom/get_as_dom_test.js
36
+ - test/dom/get_parent_element_test.js
37
+ - test/dom/get_style_test.js
38
+ - test/dom/has_element_with_class_name_test.js
39
+ - test/dom/has_element_with_tag_name_test.js
40
+ - test/dom/insert_css_test.js
41
+ - test/dom/observe_test.js
42
+ - test/dom/parse_test.js
43
+ - test/dom/rename_element_test.js
44
+ - test/dom/resolve_list_test.js
45
+ - test/dom/sandbox_test.js
46
+ - test/dom/set_attributes_test.js
47
+ - test/dom/set_styles_test.js
48
+ - test/editor_test.js
49
+ - test/incompatible_test.js
50
+ - test/index.html
51
+ - test/lang/array_test.js
52
+ - test/lang/object_test.js
53
+ - test/lang/string_test.js
54
+ - test/quirks/clean_pasted_html_test.js
55
+ - test/undo_manager_test.js
56
+ homepage: https://github.com/allesklar/wysihtml5_with_ps
57
+ licenses: []
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ segments:
69
+ - 0
70
+ hash: -2162486776215135411
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ segments:
78
+ - 0
79
+ hash: -2162486776215135411
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 1.8.23
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Temporary clone of wysihtml5. I need a published version supporting p tags
86
+ to include in my gem so I'll use this until wysihtml5 0.4 is published.
87
+ test_files:
88
+ - test/assert/html_equal_test.js
89
+ - test/browser_test.js
90
+ - test/dom/auto_link_test.js
91
+ - test/dom/contains_test.js
92
+ - test/dom/convert_to_list_test.js
93
+ - test/dom/copy_attributes_test.js
94
+ - test/dom/copy_styles_test.js
95
+ - test/dom/delegate_test.js
96
+ - test/dom/get_as_dom_test.js
97
+ - test/dom/get_parent_element_test.js
98
+ - test/dom/get_style_test.js
99
+ - test/dom/has_element_with_class_name_test.js
100
+ - test/dom/has_element_with_tag_name_test.js
101
+ - test/dom/insert_css_test.js
102
+ - test/dom/observe_test.js
103
+ - test/dom/parse_test.js
104
+ - test/dom/rename_element_test.js
105
+ - test/dom/resolve_list_test.js
106
+ - test/dom/sandbox_test.js
107
+ - test/dom/set_attributes_test.js
108
+ - test/dom/set_styles_test.js
109
+ - test/editor_test.js
110
+ - test/incompatible_test.js
111
+ - test/index.html
112
+ - test/lang/array_test.js
113
+ - test/lang/object_test.js
114
+ - test/lang/string_test.js
115
+ - test/quirks/clean_pasted_html_test.js
116
+ - test/undo_manager_test.js