redcloth-rails 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +11 -0
- data/CHANGELOG.textile +7 -0
- data/app/assets/javascripts/textile-editor.js.coffee +52 -58
- data/lib/redcloth-rails/version.rb +1 -1
- metadata +6 -4
data/.gitignore
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
+
|
7
|
+
# Ignore bundler config
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore all gem builds
|
11
|
+
*.gem
|
data/CHANGELOG.textile
ADDED
@@ -22,7 +22,7 @@
|
|
22
22
|
# - doesn't need to be in the body onload tag
|
23
23
|
# - can supply your own, custom IDs for the editor to be drawn around
|
24
24
|
#
|
25
|
-
#
|
25
|
+
# TODO:
|
26
26
|
# - a clean way of providing image and link inserts
|
27
27
|
# - get the selection to properly show in IE
|
28
28
|
#
|
@@ -43,7 +43,6 @@ class TextileEditorButton
|
|
43
43
|
@sve = sve # sve = simple vs. extended. add an 's' to make it show up in the simple toolbar
|
44
44
|
@open = open # set to -1 if tag does not need to be closed
|
45
45
|
@standard = true # this is a standard button
|
46
|
-
# this.framework = 'prototype'; // the JS framework used
|
47
46
|
|
48
47
|
window.TextileEditorButton = TextileEditorButton
|
49
48
|
|
@@ -52,7 +51,7 @@ class TextileEditorButtonSeparator
|
|
52
51
|
|
53
52
|
constructor: (sve) ->
|
54
53
|
@separator = true
|
55
|
-
@sve
|
54
|
+
@sve = sve
|
56
55
|
|
57
56
|
window.TextileEditorButtonSeparator = TextileEditorButtonSeparator
|
58
57
|
|
@@ -68,20 +67,19 @@ class TextileEditor
|
|
68
67
|
TextileEditor.buttons || new Array()
|
69
68
|
|
70
69
|
constructor: (canvas, view) ->
|
71
|
-
|
72
|
-
toolbar
|
73
|
-
toolbar.id = "textile-toolbar-" + canvas
|
70
|
+
toolbar = document.createElement("div")
|
71
|
+
toolbar.id = "textile-toolbar-" + canvas
|
74
72
|
toolbar.className = "textile-toolbar"
|
73
|
+
|
75
74
|
@canvas = document.getElementById(canvas)
|
76
|
-
@canvas.parentNode.insertBefore
|
75
|
+
@canvas.parentNode.insertBefore(toolbar, @canvas)
|
77
76
|
@openTags = new Array()
|
78
77
|
|
79
78
|
# Create the local Button array by assigning theButtons array to edButtons
|
80
|
-
edButtons
|
81
|
-
edButtons = TextileEditor.getButtons()
|
79
|
+
edButtons = TextileEditor.getButtons()
|
82
80
|
standardButtons = new Array()
|
83
|
-
i = 0
|
84
81
|
|
82
|
+
i = 0
|
85
83
|
while i < edButtons.length
|
86
84
|
thisButton = @prepareButton(edButtons[i])
|
87
85
|
if view is "s"
|
@@ -95,72 +93,73 @@ class TextileEditor
|
|
95
93
|
toolbar.appendChild thisButton
|
96
94
|
standardButtons.push thisButton
|
97
95
|
i++
|
98
|
-
|
96
|
+
|
99
97
|
te = this
|
100
98
|
buttons = toolbar.getElementsByTagName("button")
|
101
|
-
i = 0
|
102
99
|
|
100
|
+
i = 0
|
103
101
|
while i < buttons.length
|
104
|
-
|
105
|
-
#$A(toolbar.getElementsByTagName('button')).each(function(button) {
|
106
102
|
unless buttons[i].onclick
|
107
103
|
buttons[i].onclick = ->
|
108
104
|
te.insertTag this
|
109
|
-
false
|
110
|
-
|
111
|
-
buttons[i].tagStart
|
112
|
-
buttons[i].tagEnd
|
113
|
-
buttons[i].open
|
105
|
+
return false
|
106
|
+
|
107
|
+
buttons[i].tagStart = buttons[i].getAttribute("tagStart")
|
108
|
+
buttons[i].tagEnd = buttons[i].getAttribute("tagEnd")
|
109
|
+
buttons[i].open = buttons[i].getAttribute("open")
|
114
110
|
buttons[i].textile_editor = te
|
115
|
-
buttons[i].canvas
|
111
|
+
buttons[i].canvas = te.canvas
|
116
112
|
i++
|
117
113
|
|
118
114
|
# draw individual buttons (edShowButton)
|
119
115
|
prepareButton: (button) ->
|
120
116
|
if button.separator
|
121
|
-
theButton
|
117
|
+
theButton = document.createElement("span")
|
122
118
|
theButton.className = "ed_sep"
|
123
119
|
return theButton
|
120
|
+
|
124
121
|
if button.standard
|
125
|
-
theButton
|
122
|
+
theButton = document.createElement("button")
|
126
123
|
theButton.id = button.id
|
127
|
-
theButton.setAttribute
|
128
|
-
theButton.setAttribute
|
129
|
-
theButton.setAttribute
|
130
|
-
theButton.setAttribute
|
131
|
-
|
124
|
+
theButton.setAttribute("class", "standard")
|
125
|
+
theButton.setAttribute("tagStart", button.tagStart)
|
126
|
+
theButton.setAttribute("tagEnd", button.tagEnd)
|
127
|
+
theButton.setAttribute("open", button.open)
|
128
|
+
|
129
|
+
img = document.createElement("img")
|
132
130
|
img.src = button.display
|
133
|
-
theButton.appendChild
|
131
|
+
theButton.appendChild(img)
|
134
132
|
else
|
135
133
|
return button
|
136
|
-
|
134
|
+
|
137
135
|
theButton.accessKey = button.access
|
138
|
-
theButton.title
|
139
|
-
theButton
|
136
|
+
theButton.title = button.title
|
137
|
+
return theButton
|
140
138
|
|
141
139
|
# if clicked, no selected text, tag not open highlight button
|
142
140
|
# (edAddTag)
|
143
141
|
addTag: (button) ->
|
144
142
|
unless button.tagEnd is ""
|
145
143
|
@openTags[@openTags.length] = button
|
146
|
-
|
147
|
-
#var el = document.getElementById(button.id);
|
148
|
-
#el.className = 'selected';
|
149
144
|
button.className = "selected"
|
150
145
|
|
146
|
+
return button
|
147
|
+
|
151
148
|
# if clicked, no selected text, tag open lowlight button
|
152
149
|
# (edRemoveTag)
|
153
150
|
removeTag: (button) ->
|
154
151
|
i = 0
|
155
152
|
while i < @openTags.length
|
156
153
|
if @openTags[i] is button
|
157
|
-
@openTags.splice
|
154
|
+
@openTags.splice(button, 1)
|
158
155
|
|
159
156
|
#var el = document.getElementById(button.id);
|
160
157
|
#el.className = 'unselected';
|
161
158
|
button.className = "unselected"
|
162
159
|
i++
|
163
160
|
|
161
|
+
return undefined
|
162
|
+
|
164
163
|
# see if there are open tags. for the remove tag bit...
|
165
164
|
# (edCheckOpenTags)
|
166
165
|
checkOpenTags: (button) ->
|
@@ -169,16 +168,12 @@ class TextileEditor
|
|
169
168
|
while i < @openTags.length
|
170
169
|
tag++ if @openTags[i] is button
|
171
170
|
i++
|
172
|
-
|
173
|
-
|
174
|
-
else
|
175
|
-
false # tag not found
|
171
|
+
|
172
|
+
return (tag > 0) # tag found / not found
|
176
173
|
|
177
174
|
# insert the tag. this is the bulk of the code.
|
178
175
|
# (edInsertTag)
|
179
176
|
insertTag: (button, tagStart, tagEnd) ->
|
180
|
-
|
181
|
-
#console.log(button);
|
182
177
|
myField = button.canvas
|
183
178
|
myField.focus()
|
184
179
|
if tagStart
|
@@ -204,8 +199,7 @@ class TextileEditor
|
|
204
199
|
newlineReplaceRegexClean = /\r\n\s\n/g
|
205
200
|
newlineReplaceRegexDirty = "\\r\\n\\s\\n"
|
206
201
|
newlineReplaceClean = "\r\n\n"
|
207
|
-
else if myField.selectionStart or myField.selectionStart
|
208
|
-
|
202
|
+
else if myField.selectionStart or myField.selectionStart == 0 or myField.selectionStart == '0' # MOZ/FF/NS/S support
|
209
203
|
# figure out cursor and selection positions
|
210
204
|
startPos = myField.selectionStart
|
211
205
|
endPos = myField.selectionEnd
|
@@ -299,19 +293,20 @@ class TextileEditor
|
|
299
293
|
|
300
294
|
# now lets look and see if the user is trying to muck with a block or block modifier
|
301
295
|
else if button.tagStart.match(/^(h1|h2|h3|h4|h5|h6|bq|p|\>|\<\>|\<|\=|\(|\))/g)
|
302
|
-
insertTag
|
303
|
-
insertModifier
|
304
|
-
tagPartBlock
|
305
|
-
tagPartModifier
|
296
|
+
insertTag = ""
|
297
|
+
insertModifier = ""
|
298
|
+
tagPartBlock = ""
|
299
|
+
tagPartModifier = ""
|
306
300
|
tagPartModifierOrig = "" # ugly hack but it's late
|
307
|
-
drawSwitch
|
308
|
-
captureIndentStart
|
309
|
-
captureListStart
|
310
|
-
periodAddition
|
301
|
+
drawSwitch = ""
|
302
|
+
captureIndentStart = false
|
303
|
+
captureListStart = false
|
304
|
+
periodAddition = "\\. "
|
311
305
|
periodAdditionClean = ". "
|
312
|
-
listItemsAddition
|
313
|
-
re_list_items
|
314
|
-
re_block_modifier
|
306
|
+
listItemsAddition = 0
|
307
|
+
re_list_items = new RegExp("(\\*+|\\#+)", "g") # need this regex later on when checking indentation of lists
|
308
|
+
re_block_modifier = new RegExp("^(h1|h2|h3|h4|h5|h6|bq|p| [\\*]{1,} | [\\#]{1,} |)(\\>|\\<\\>|\\<|\\=|[\\(]{1,}|[\\)]{1,6}|)", "g")
|
309
|
+
|
315
310
|
if tagPartMatches = re_block_modifier.exec(selectedText)
|
316
311
|
tagPartBlock = tagPartMatches[1]
|
317
312
|
tagPartModifier = tagPartMatches[2]
|
@@ -503,19 +498,18 @@ class TextileEditor
|
|
503
498
|
|
504
499
|
# set the appropriate DOM value with the final text
|
505
500
|
if FF is true
|
506
|
-
myField.value
|
501
|
+
myField.value = finalText
|
507
502
|
myField.scrollTop = scrollTop
|
508
503
|
else
|
509
504
|
sel.text = finalText
|
510
505
|
|
511
|
-
# build up the selection capture, doesn't work in IE
|
512
506
|
if textSelected
|
507
|
+
# build up the selection capture, doesn't work in IE
|
513
508
|
myField.selectionStart = startPos + newlineStartPos
|
514
509
|
myField.selectionEnd = endPos + posDiffPos - posDiffNeg - newlineEndPos
|
515
510
|
|
516
|
-
#alert('s: ' + myField.selectionStart + ' e: ' + myField.selectionEnd + ' sp: ' + startPos + ' ep: ' + endPos + ' pdp: ' + posDiffPos + ' pdn: ' + posDiffNeg)
|
517
511
|
else
|
518
512
|
myField.selectionStart = cursorPos
|
519
|
-
myField.selectionEnd
|
513
|
+
myField.selectionEnd = cursorPos
|
520
514
|
|
521
515
|
window.TextileEditor = TextileEditor
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redcloth-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- emjot
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-03-
|
18
|
+
date: 2013-03-08 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -60,6 +60,8 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
|
62
62
|
files:
|
63
|
+
- .gitignore
|
64
|
+
- CHANGELOG.textile
|
63
65
|
- Gemfile
|
64
66
|
- LICENSE
|
65
67
|
- README.textile
|