jhtmlarea 0.0.8 → 0.0.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: 6c895a8b15f4aa45fc7f8d7633af25b66ab2f3d1
4
- data.tar.gz: 98a570de99c84e9177f15f64bf1e539585cca2a9
3
+ metadata.gz: 7e1279607fe08d4f1a29b6e29818f5a03adfc98f
4
+ data.tar.gz: e2e68165f32c2c997979383b72fa1bc002bf533c
5
5
  SHA512:
6
- metadata.gz: a283bb60ccf2ce62cdaa26456f91f887d72a0558550b12c92a9fff5d774ebcd9af5b17843b03d792e213698cb81030cd8a9fc33be55ad6e72a88d5b2a8378d89
7
- data.tar.gz: a4354902486edff8dd590d67afe10636ef829fd93918e5d0d9a4dd7df2be270e810bbbc42aeac983fe1c2bce751a0443399ee1ee0209283ab7404afa36e9e566
6
+ metadata.gz: 67079ac2e2cfec53ca73d61006978aaa54a5d97fe3050253a7205e7e95e4872f5d4317af60ca39aa8ac72701a772a2a2ddc90fe6ab7f8ba8fa81ce3d1fe79f0f
7
+ data.tar.gz: 318d4e146276601a989a2e03c142e76badc6ca631f9082b4840c3490304edce5f3d8ee6e921e7b2f043464764234dad14bbb953aa949d100916c6326ca9f7a97
data/README.md CHANGED
@@ -20,6 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  Add the following to app/assets/javascripts/application.js:
22
22
 
23
+ //= require browserDetect
23
24
  //= require jHtmlArea-0.7.5
24
25
  //= require jHtmlArea.ColorPickerMenu-0.7.0
25
26
 
@@ -60,11 +61,9 @@ Then add this code to the view with your form (you can edit out any buttons you
60
61
  </script>
61
62
  ~~~
62
63
 
63
- ## Limitations
64
+ ## Notes
64
65
 
65
- ### This gem seems to work fine in Firefox and Chrome, but may not work as well with Safari or IE.
66
-
67
- The original jHtmlArea 0.7.5 source caused errors in Rails 4 since it calls the `$.browser` function which is [no longer supported in jQuery 1.9](http://stackoverflow.com/questions/14524289/browser-is-undefined-error). [jQuery recommends](http://jquery.com/upgrade-guide/1.9/#jquery-browser-removed) using a library such as [Modernizer](http://modernizr.com/) for feature detection. In the interest of getting a working editor as quickly as possible, I edited out this feature detection code from the original jHtmlArea source code.
66
+ The original jHtmlArea 0.7.5 source caused errors in Rails 4 since it calls the `$.browser` function which is [no longer supported in jQuery 1.9](http://stackoverflow.com/questions/14524289/browser-is-undefined-error). [jQuery recommends](http://jquery.com/upgrade-guide/1.9/#jquery-browser-removed) using a library such as [Modernizer](http://modernizr.com/) for feature detection, but I have not been able to use modernizer to address the browser incompatibilities handled with $.browser() in the original javascript. These issues could be dealt with by including jquery-migrate, but instead I have included a simple browser detection script and modified the original javascript accordingly.
68
67
 
69
68
  ## Contributing
70
69
 
@@ -1,3 +1,3 @@
1
1
  module Jhtmlarea
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -0,0 +1,118 @@
1
+ // http://www.quirksmode.org/js/detect.htmlvar
2
+ BrowserDetect = {
3
+ init: function () {
4
+ this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
5
+ this.version = this.searchVersion(navigator.userAgent)
6
+ || this.searchVersion(navigator.appVersion)
7
+ || "an unknown version";
8
+ this.OS = this.searchString(this.dataOS) || "an unknown OS";
9
+ },
10
+ searchString: function (data) {
11
+ for (var i=0;i<data.length;i++) {
12
+ var dataString = data[i].string;
13
+ var dataProp = data[i].prop;
14
+ this.versionSearchString = data[i].versionSearch || data[i].identity;
15
+ if (dataString) {
16
+ if (dataString.indexOf(data[i].subString) != -1)
17
+ return data[i].identity;
18
+ }
19
+ else if (dataProp)
20
+ return data[i].identity;
21
+ }
22
+ },
23
+ searchVersion: function (dataString) {
24
+ var index = dataString.indexOf(this.versionSearchString);
25
+ if (index == -1) return;
26
+ return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
27
+ },
28
+ dataBrowser: [
29
+ {
30
+ string: navigator.userAgent,
31
+ subString: "Chrome",
32
+ identity: "Chrome"
33
+ },
34
+ { string: navigator.userAgent,
35
+ subString: "OmniWeb",
36
+ versionSearch: "OmniWeb/",
37
+ identity: "OmniWeb"
38
+ },
39
+ {
40
+ string: navigator.vendor,
41
+ subString: "Apple",
42
+ identity: "Safari",
43
+ versionSearch: "Version"
44
+ },
45
+ {
46
+ prop: window.opera,
47
+ identity: "Opera",
48
+ versionSearch: "Version"
49
+ },
50
+ {
51
+ string: navigator.vendor,
52
+ subString: "iCab",
53
+ identity: "iCab"
54
+ },
55
+ {
56
+ string: navigator.vendor,
57
+ subString: "KDE",
58
+ identity: "Konqueror"
59
+ },
60
+ {
61
+ string: navigator.userAgent,
62
+ subString: "Firefox",
63
+ identity: "Firefox"
64
+ },
65
+ {
66
+ string: navigator.vendor,
67
+ subString: "Camino",
68
+ identity: "Camino"
69
+ },
70
+ { // for newer Netscapes (6+)
71
+ string: navigator.userAgent,
72
+ subString: "Netscape",
73
+ identity: "Netscape"
74
+ },
75
+ {
76
+ string: navigator.userAgent,
77
+ subString: "MSIE",
78
+ identity: "Explorer",
79
+ versionSearch: "MSIE"
80
+ },
81
+ {
82
+ string: navigator.userAgent,
83
+ subString: "Gecko",
84
+ identity: "Mozilla",
85
+ versionSearch: "rv"
86
+ },
87
+ { // for older Netscapes (4-)
88
+ string: navigator.userAgent,
89
+ subString: "Mozilla",
90
+ identity: "Netscape",
91
+ versionSearch: "Mozilla"
92
+ }
93
+ ],
94
+ dataOS : [
95
+ {
96
+ string: navigator.platform,
97
+ subString: "Win",
98
+ identity: "Windows"
99
+ },
100
+ {
101
+ string: navigator.platform,
102
+ subString: "Mac",
103
+ identity: "Mac"
104
+ },
105
+ {
106
+ string: navigator.userAgent,
107
+ subString: "iPhone",
108
+ identity: "iPhone/iPod"
109
+ },
110
+ {
111
+ string: navigator.platform,
112
+ subString: "Linux",
113
+ identity: "Linux"
114
+ }
115
+ ]
116
+
117
+ };
118
+ BrowserDetect.init();
@@ -4,6 +4,8 @@
4
4
  * http://jhtmlarea.codeplex.com
5
5
  * Licensed under the Microsoft Reciprocal License (Ms-RL)
6
6
  * http://jhtmlarea.codeplex.com/license
7
+
8
+ * Modified by Dow Drake to use browserDetect.js for jQuery 1.9+ compatibility
7
9
  */
8
10
  (function ($) {
9
11
  $.fn.htmlarea = function (opts) {
@@ -45,7 +47,7 @@
45
47
  var iframe = this.iframe = $("<iframe/>").height(textarea.height());
46
48
  // jQuery.browser is deprecated
47
49
  //iframe.width(textarea.width() - ($.browser.msie ? 0 : 4));
48
- iframe.width(textarea.width() - 4);
50
+ iframe.width(textarea.width() - (BrowserDetect.browser === "Explorer" ? 0 : 4));
49
51
  var htmlarea = this.htmlarea = $("<div/>").append(iframe);
50
52
 
51
53
  container.append(htmlarea).append(textarea.hide());
@@ -87,8 +89,12 @@
87
89
  // var elem = this.getRange().cloneContents();
88
90
  // return $("<p/>").append($(elem)).html();
89
91
  // }
90
- var elem = this.getRange().cloneContents();
91
- return $("<p/>").append($(elem)).html();
92
+ if (BrowserDetect.browser === "Explorer") {
93
+ return this.getRange().htmlText;
94
+ } else {
95
+ var elem = this.getRange().cloneContents();
96
+ return $("<p/>").append($(elem)).html();
97
+ }
92
98
 
93
99
  },
94
100
  getSelection: function () {
@@ -98,8 +104,13 @@
98
104
  // } else {
99
105
  // return this.iframe[0].contentDocument.defaultView.getSelection();
100
106
  // }
101
- return this.iframe[0].contentDocument.defaultView.getSelection();
102
- },
107
+ if (BrowserDetect.browser === "Explorer") {
108
+ //return (this.editor.parentWindow.getSelection) ? this.editor.parentWindow.getSelection() : this.editor.selection;
109
+ return this.editor.selection;
110
+ } else {
111
+ return this.iframe[0].contentDocument.defaultView.getSelection();
112
+ }
113
+ },
103
114
  getRange: function () {
104
115
  var s = this.getSelection();
105
116
  if (!s) { return null; }
@@ -126,8 +137,15 @@
126
137
  // r.deleteContents();
127
138
  // r.insertNode($(this.iframe[0].contentWindow.document.createElement("span")).append($((html.indexOf("<") != 0) ? "<span>" + html + "</span>" : html))[0]);
128
139
  // }
129
- r.deleteContents();
130
- r.insertNode($((html.indexOf("<") != 0) ? $("<span/>").append(html) : html)[0]);
140
+ if (BrowserDetect.browser === "Explorer") {
141
+ r.pasteHTML(html);
142
+ } else if (BrowserDetect.browser === "Firefox" || BrowserDetect.browser === "Mozilla") {
143
+ r.deleteContents();
144
+ r.insertNode($((html.indexOf("<") != 0) ? $("<span/>").append(html) : html)[0]);
145
+ } else { // Safari
146
+ r.deleteContents();
147
+ r.insertNode($(this.iframe[0].contentWindow.document.createElement("span")).append($((html.indexOf("<") != 0) ? "<span>" + html + "</span>" : html))[0]);
148
+ }
131
149
  r.collapse(false);
132
150
  r.select();
133
151
  },
@@ -150,7 +168,11 @@
150
168
  // } else {
151
169
  // this.ec("insertImage", false, (url || prompt("Image URL:", "http://")));
152
170
  // }
153
- this.ec("insertImage", false, (url || prompt("Image URL:", "http://")));
171
+ if (BrowserDetect.browser === "Explorer" && !url) {
172
+ this.ec("insertImage", true);
173
+ } else {
174
+ this.ec("insertImage", false, (url || prompt("Image URL:", "http://")));
175
+ }
154
176
  },
155
177
  removeFormat: function () {
156
178
  this.ec("removeFormat", false, []);
@@ -162,7 +184,11 @@
162
184
  // } else {
163
185
  // this.ec("createLink", false, prompt("Link URL:", "http://"));
164
186
  // }
165
- this.ec("createLink", false, prompt("Link URL:", "http://"));
187
+ if (BrowserDetect.browser === "Explorer") {
188
+ this.ec("createLink", true);
189
+ } else {
190
+ this.ec("createLink", false, prompt("Link URL:", "http://"));
191
+ }
166
192
  },
167
193
  unlink: function () { this.ec("unlink", false, []); },
168
194
  orderedList: function () { this.ec("insertorderedlist"); },
@@ -193,7 +219,7 @@
193
219
  },
194
220
  heading: function (h) {
195
221
  // this.formatBlock($.browser.msie ? "Heading " + h : "h" + h);
196
- this.formatBlock("h" + h);
222
+ this.formatBlock(BrowserDetect.browser === "Explorer" ? "Heading " + h : "h" + h);
197
223
  },
198
224
 
199
225
  indent: function () {
@@ -225,7 +251,13 @@
225
251
  // } else {
226
252
  // this.ec("increaseFontSize", false, "big");
227
253
  // }
228
- this.ec("increaseFontSize", false, "big");
254
+ if (BrowserDetect.browser === "Explorer") {
255
+ this.ec("fontSize", false, this.qc("fontSize") + 1);
256
+ } else if (BrowserDetect.browser === "Safari") {
257
+ this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size", "larger")[0]);
258
+ } else {
259
+ this.ec("increaseFontSize", false, "big");
260
+ }
229
261
  },
230
262
  decreaseFontSize: function () {
231
263
  // if ($.browser.msie) {
@@ -235,7 +267,13 @@
235
267
  // } else {
236
268
  // this.ec("decreaseFontSize", false, "small");
237
269
  // }
238
- this.ec("decreaseFontSize", false, "small");
270
+ if (BrowserDetect.browser === "Explorer") {
271
+ this.ec("fontSize", false, this.qc("fontSize") - 1);
272
+ } else if (BrowserDetect.browser === "Safari") {
273
+ this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size", "smaller")[0]);
274
+ } else {
275
+ this.ec("decreaseFontSize", false, "small");
276
+ }
239
277
  },
240
278
 
241
279
  forecolor: function (c) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jhtmlarea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dow Drake
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-14 00:00:00.000000000 Z
11
+ date: 2013-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,6 +72,7 @@ files:
72
72
  - vendor/assets/images/jHtmlArea.png
73
73
  - vendor/assets/images/jHtmlArea_Toolbar_Group_BG.png
74
74
  - vendor/assets/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png
75
+ - vendor/assets/javascripts/browserDetect.js
75
76
  - vendor/assets/javascripts/jHtmlArea-0.7.5.js
76
77
  - vendor/assets/javascripts/jHtmlArea.ColorPickerMenu-0.7.0.js
77
78
  - vendor/assets/stylesheets/jHtmlArea.ColorPickerMenu.css.scss