dante2-editor 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/.babelrc +20 -0
  3. data/.eslint +13 -0
  4. data/.gitignore +15 -0
  5. data/README.md +5 -1
  6. data/dante2.gemspec +2 -4
  7. data/{app → demo}/assets/index.html +2 -2
  8. data/{app → demo}/assets/license.html +1 -1
  9. data/{app → demo}/assets/options.html +1 -5
  10. data/{app → demo}/assets/store.json +0 -0
  11. data/demo/data/poc.js +9 -0
  12. data/demo/demo.js +9 -0
  13. data/demo/initialize.js +7 -0
  14. data/{app → demo}/styles/layout/layout.scss +0 -0
  15. data/{app → demo}/styles/layout/normalize.css +0 -0
  16. data/{app → demo}/styles/layout/scaffold.scss +0 -0
  17. data/{app → demo}/styles/layout/tooltips.scss +0 -0
  18. data/dist/Dante2.js +2995 -0
  19. data/dist/Dante2.min.js +3 -0
  20. data/dist/Dante2.min.js.map +1 -0
  21. data/dist/DanteStyles.css +2 -0
  22. data/dist/DanteStyles.css.map +1 -0
  23. data/dist/DanteStyles.js +102 -0
  24. data/dist/DanteStyles.min.js +2 -0
  25. data/dist/DanteStyles.min.js.map +1 -0
  26. data/dist/dante-vendors.js +48316 -0
  27. data/dist/dante-vendors.min.js +29 -0
  28. data/dist/dante-vendors.min.js.map +1 -0
  29. data/{app/styles/fonts/dante → dist/fonts}/dante.eot +0 -0
  30. data/{app/styles/fonts/dante → dist/fonts}/dante.svg +0 -0
  31. data/{app/styles/fonts/dante → dist/fonts}/dante.ttf +0 -0
  32. data/{app/styles/fonts/dante → dist/fonts}/dante.woff +0 -0
  33. data/{app/styles/fonts/dante → dist/fonts}/fontello.eot +0 -0
  34. data/{app/styles/fonts/dante → dist/fonts}/fontello.svg +0 -0
  35. data/{app/styles/fonts/dante → dist/fonts}/fontello.ttf +0 -0
  36. data/{app/styles/fonts/dante → dist/fonts}/fontello.woff +0 -0
  37. data/docs/app.css +430 -1
  38. data/docs/app.css.map +1 -1
  39. data/docs/app.js +62 -2
  40. data/docs/app.js.map +1 -1
  41. data/docs/dante-vendors.js +49513 -22
  42. data/docs/dante-vendors.js.map +1 -1
  43. data/docs/dante.css +1602 -1
  44. data/docs/dante.css.map +1 -1
  45. data/docs/dante.js +3310 -3
  46. data/docs/dante.js.map +1 -1
  47. data/docs/doc.html +3 -7
  48. data/docs/index.html +4 -4
  49. data/docs/license.html +3 -3
  50. data/docs/options.html +53 -0
  51. data/package.json +47 -17
  52. data/rb_lib/dante2-editor/rails.rb +15 -0
  53. data/{lib → rb_lib}/dante2-editor/version.rb +1 -1
  54. data/{lib → rb_lib}/dante2-editor.rb +0 -0
  55. data/src/components/blocks/embed.js +126 -0
  56. data/src/components/blocks/image.js +377 -0
  57. data/src/components/blocks/placeholder.js +68 -0
  58. data/src/components/blocks/video.js +80 -0
  59. data/src/components/dante.js +291 -0
  60. data/src/components/dante_editor.js +928 -0
  61. data/src/components/debug.js +104 -0
  62. data/src/components/decorators/link.js +64 -0
  63. data/src/components/popovers/addButton.js +318 -0
  64. data/src/components/popovers/image.js +188 -0
  65. data/src/components/popovers/link.js +107 -0
  66. data/src/components/popovers/toolTip.js +402 -0
  67. data/{app/utils/logger.coffee → src/components/wrapper.js} +0 -0
  68. data/{app → src}/images/dante/media-loading-placeholder.png +0 -0
  69. data/{app → src}/images/site/dante-demo.png +0 -0
  70. data/{app → src}/images/site/dante-editor-logo.png +0 -0
  71. data/{app → src}/images/site/github-logo.png +0 -0
  72. data/src/index.js +9 -0
  73. data/{app → src}/model/index.js +0 -0
  74. data/src/style.js +3 -0
  75. data/{app → src}/styles/dante/_animations.scss +0 -0
  76. data/{app → src}/styles/dante/_caption.scss +0 -0
  77. data/{app → src}/styles/dante/_debug.scss +0 -0
  78. data/{app → src}/styles/dante/_fonts.scss +0 -0
  79. data/{app → src}/styles/dante/_graf.scss +0 -0
  80. data/{app → src}/styles/dante/_icons.scss +0 -0
  81. data/{app → src}/styles/dante/_media.scss +0 -0
  82. data/{app → src}/styles/dante/_menu.scss +0 -0
  83. data/{app → src}/styles/dante/_needsorder.scss +0 -0
  84. data/{app → src}/styles/dante/_popover.scss +0 -0
  85. data/{app → src}/styles/dante/_post.scss +0 -0
  86. data/{app → src}/styles/dante/_scaffold.scss +0 -0
  87. data/{app → src}/styles/dante/_tooltip.scss +0 -0
  88. data/{app → src}/styles/dante/_utilities.scss +0 -0
  89. data/{app → src}/styles/dante/_variables.scss +0 -0
  90. data/{app → src}/styles/dante/blame.scss +0 -0
  91. data/{app → src}/styles/dante.scss +0 -0
  92. data/{app → src}/styles/draft.css +0 -0
  93. data/src/styles/fonts/dante/dante.eot +0 -0
  94. data/src/styles/fonts/dante/dante.svg +18 -0
  95. data/src/styles/fonts/dante/dante.ttf +0 -0
  96. data/src/styles/fonts/dante/dante.woff +0 -0
  97. data/src/styles/fonts/dante/fontello.eot +0 -0
  98. data/src/styles/fonts/dante/fontello.svg +36 -0
  99. data/src/styles/fonts/dante/fontello.ttf +0 -0
  100. data/src/styles/fonts/dante/fontello.woff +0 -0
  101. data/src/utils/find_entities.js +17 -0
  102. data/src/utils/html2content.js +127 -0
  103. data/src/utils/save_content.js +80 -0
  104. data/{app → src}/utils/selection.js +0 -0
  105. data/tools/.eslintrc +9 -0
  106. data/tools/amd/README.md +7 -0
  107. data/tools/amd/bower.json +19 -0
  108. data/tools/amd/build.js +36 -0
  109. data/tools/build-cli.js +46 -0
  110. data/tools/build.js +30 -0
  111. data/tools/buildBabel.js +32 -0
  112. data/tools/constants.js +10 -0
  113. data/tools/dist/build.js +13 -0
  114. data/tools/docs/build.js +12 -0
  115. data/tools/es/build.js +27 -0
  116. data/tools/exec.js +50 -0
  117. data/tools/fs-utils.js +35 -0
  118. data/tools/lib/build.js +14 -0
  119. data/tools/promisify.js +14 -0
  120. data/webpack/base.config.js +89 -0
  121. data/webpack/docs.config.js +147 -0
  122. data/webpack/webpack.config.js +78 -0
  123. data/webpack.config-doc.js +5 -0
  124. data/webpack.config.js +3 -147
  125. data/yarn.lock +973 -718
  126. metadata +108 -64
  127. data/app/components/App.cjsx +0 -1083
  128. data/app/components/blocks/embed.cjsx +0 -109
  129. data/app/components/blocks/image.cjsx +0 -316
  130. data/app/components/blocks/placeholder.cjsx +0 -60
  131. data/app/components/blocks/video.cjsx +0 -75
  132. data/app/components/debug.cjsx +0 -96
  133. data/app/components/decorators/link.cjsx +0 -61
  134. data/app/components/popovers/addButton.cjsx +0 -247
  135. data/app/components/popovers/image.cjsx +0 -160
  136. data/app/components/popovers/link.cjsx +0 -87
  137. data/app/components/popovers/toolTip.cjsx +0 -326
  138. data/app/data/poc.js +0 -15
  139. data/app/demo.js +0 -7
  140. data/app/initialize.js +0 -4
  141. data/app/utils/find_entities.coffee +0 -20
  142. data/app/utils/html2content.coffee +0 -120
  143. data/app/utils/save_content.coffee +0 -63
  144. data/lib/dante2-editor/rails.rb +0 -16
@@ -1,109 +0,0 @@
1
-
2
- React = require('react')
3
- ReactDOM = require('react-dom')
4
-
5
- {
6
- Entity,
7
- RichUtils
8
- AtomicBlockUtils
9
- EditorBlock
10
- } = require('draft-js')
11
-
12
- axios = require("axios")
13
-
14
- { updateDataOfBlock } = require('../../model/index.js')
15
-
16
- class EmbedBlock extends React.Component
17
- constructor: (props) ->
18
- super props
19
- #api_key = "86c28a410a104c8bb58848733c82f840"
20
-
21
- @state =
22
- embed_data: @defaultData()
23
- error: ""
24
-
25
- defaultData: ->
26
- existing_data = @.props.block.getData().toJS()
27
- existing_data.embed_data || {}
28
-
29
- # will update block state
30
- updateData: =>
31
- blockProps = @.props.blockProps
32
- block = @.props.block
33
- getEditorState = @props.blockProps.getEditorState
34
- setEditorState = @props.blockProps.setEditorState
35
- data = block.getData();
36
- newData = data.merge(@state)
37
- setEditorState(updateDataOfBlock(getEditorState(), block, newData))
38
-
39
- dataForUpdate: =>
40
-
41
- @.props.blockProps.data.toJS()
42
-
43
- componentDidMount: =>
44
-
45
- return unless @.props.blockProps.data
46
-
47
- # ensure data isnt already loaded
48
- # unless @dataForUpdate().endpoint or @dataForUpdate().provisory_text
49
-
50
- unless @dataForUpdate().endpoint or @dataForUpdate().provisory_text
51
- #debugger
52
- return
53
-
54
- axios
55
- method: 'get'
56
- url: "#{@dataForUpdate().endpoint}#{@dataForUpdate().provisory_text}&scheme=https"
57
- .then (result)=>
58
-
59
- @setState
60
- embed_data: result.data #JSON.parse(data.responseText)
61
- , @updateData
62
- .catch (error)=>
63
-
64
- @setState
65
- error: error.response.data.error_message
66
- console.log("TODO: error")
67
-
68
- classForImage: ->
69
- if @state.embed_data.images then "" else "mixtapeImage--empty u-ignoreBlock"
70
- #if @state.embed_data.thumbnail_url then "" else "mixtapeImage--empty u-ignoreBlock"
71
-
72
- picture: ->
73
- if @state.embed_data.images and @state.embed_data.images.length > 0 then @state.embed_data.images[0].url else ""
74
-
75
- render: ->
76
- #block = @.props;
77
- #foo = @.props.blockProps;
78
- #data = Entity.get(block.block.getEntityAt(0)).getData();
79
- console.log "ERROR", @state.error
80
- return(
81
- <span>
82
- {
83
- if @picture()
84
- <a target='_blank'
85
- className="js-mixtapeImage mixtapeImage #{@classForImage()}"
86
- href={@state.embed_data.url}
87
- style={{backgroundImage: "url('#{@picture()}')"}}>
88
- </a>
89
- }
90
-
91
- {
92
- if @state.error
93
- <h2>{@state.error}</h2>
94
- }
95
-
96
- <a className='markup--anchor markup--mixtapeEmbed-anchor'
97
- target='_blank' href={@state.embed_data.url}>
98
- <strong className='markup--strong markup--mixtapeEmbed-strong'>
99
- {@state.embed_data.title}
100
- </strong>
101
- <em className='markup--em markup--mixtapeEmbed-em'>
102
- {@state.embed_data.description}
103
- </em>
104
- </a>
105
- {@state.embed_data.provider_url}
106
- </span>
107
- )
108
-
109
- module.exports = EmbedBlock
@@ -1,316 +0,0 @@
1
- React = require('react')
2
- ReactDOM = require('react-dom')
3
-
4
- {
5
- Entity,
6
- RichUtils
7
- AtomicBlockUtils
8
- EditorBlock
9
- EditorState
10
- } = require('draft-js')
11
-
12
- axios = require("axios")
13
-
14
- { updateDataOfBlock } = require('../../model/index.js')
15
-
16
-
17
- class ImageBlock extends React.Component
18
-
19
- constructor: (props) ->
20
- super props
21
-
22
- existing_data = @.props.block.getData().toJS()
23
-
24
- @config = @props.blockProps.config
25
- @file = @props.blockProps.data.get('file')
26
- @state =
27
- loading: false
28
- selected: false
29
- loading_progress: 0
30
- enabled: false
31
- caption: @defaultPlaceholder()
32
- direction: existing_data.direction || "center"
33
- width: 0
34
- height: 0
35
- file: null
36
- url: @blockPropsSrc() || @defaultUrl(existing_data)
37
- aspect_ratio: @defaultAspectRatio(existing_data)
38
-
39
- blockPropsSrc: ()=>
40
- # console.log @.props.blockProps.data.src
41
- @.props.blockProps.data.src
42
- ###
43
- debugger
44
- block = @.props;
45
- entity = block.block.getEntityAt(0)
46
- if entity
47
- data = Entity.get(entity).getData().src
48
- else
49
- null
50
- ###
51
-
52
- defaultUrl: (data)=>
53
- return data.url if data.url
54
-
55
- if data.url
56
- if data.file then URL.createObjectURL(data.file) else data.url
57
- else
58
- @props.blockProps.data.src
59
-
60
- defaultPlaceholder: ->
61
- @props.blockProps.config.image_caption_placeholder
62
-
63
- defaultAspectRatio: (data)=>
64
- if data.aspect_ratio
65
- width: data.aspect_ratio['width']
66
- height: data.aspect_ratio['height']
67
- ratio: data.aspect_ratio['ratio']
68
- else
69
- width: 0
70
- height: 0
71
- ratio: 100
72
-
73
- getAspectRatio: (w, h)->
74
- maxWidth = 1000
75
- maxHeight = 1000
76
- ratio = 0
77
- width = w # Current image width
78
- height = h # Current image height
79
-
80
- # Check if the current width is larger than the max
81
- if width > maxWidth
82
- ratio = maxWidth / width # get ratio for scaling image
83
- height = height * ratio # Reset height to match scaled image
84
- width = width * ratio # Reset width to match scaled image
85
-
86
- # Check if current height is larger than max
87
- else if height > maxHeight
88
- ratio = maxHeight / height # get ratio for scaling image
89
- width = width * ratio # Reset width to match scaled image
90
- height = height * ratio # Reset height to match scaled image
91
-
92
- fill_ratio = height / width * 100
93
- result = { width: width, height: height, ratio: fill_ratio }
94
- # console.log result
95
- result
96
-
97
- # will update block state
98
- updateData: =>
99
- blockProps = @.props.blockProps
100
- block = @.props.block
101
- getEditorState = @props.blockProps.getEditorState
102
- setEditorState = @props.blockProps.setEditorState
103
- data = block.getData()
104
- newData = data.merge(@state).merge(forceUpload: false)
105
- setEditorState(updateDataOfBlock(getEditorState(), block, newData))
106
-
107
- replaceImg: =>
108
- @img = new Image();
109
- @img.src = this.refs.image_tag.src
110
- @setState
111
- url: @img.src
112
- self = @
113
- # exit only when not blob and not forceUload
114
- return if !@img.src.includes("blob:") and !@props.block.data.get("forceUpload")
115
- @img.onload = ()=>
116
- @setState
117
- width: @img.width
118
- height: @img.height
119
- aspect_ratio: self.getAspectRatio(@img.width, @img.height)
120
-
121
- @handleUpload()
122
-
123
- startLoader: =>
124
- @setState
125
- loading: true
126
-
127
- stopLoader: =>
128
- @setState
129
- loading: false
130
-
131
- handleUpload: =>
132
- @startLoader()
133
- @props.blockProps.addLock()
134
- @updateData()
135
- @uploadFile()
136
-
137
- componentDidMount: ->
138
- @replaceImg()
139
-
140
- aspectRatio: =>
141
- maxWidth: "#{@state.aspect_ratio.width}"
142
- maxHeight: "#{@state.aspect_ratio.height}"
143
- ratio: "#{@state.aspect_ratio.height}"
144
-
145
- updateDataSelection: =>
146
- getEditorState = @props.blockProps.getEditorState
147
- setEditorState = @props.blockProps.setEditorState
148
- newselection = getEditorState().getSelection().merge(
149
- anchorKey: @.props.block.getKey()
150
- focusKey: @.props.block.getKey()
151
- )
152
-
153
- setEditorState(
154
- EditorState.forceSelection(getEditorState(), newselection)
155
- )
156
-
157
- handleGrafFigureSelectImg: (e)=>
158
- e.preventDefault()
159
- @setState
160
- selected: true
161
- , @updateDataSelection
162
-
163
- #main_editor.onChange(main_editor.state.editorState)
164
-
165
- coords: ->
166
- maxWidth: "#{@state.aspect_ratio.width}px"
167
- maxHeight: "#{@state.aspect_ratio.height}px"
168
-
169
- getBase64Image: (img) ->
170
- canvas = document.createElement("canvas")
171
- canvas.width = img.width
172
- canvas.height = img.height
173
- ctx = canvas.getContext("2d")
174
- ctx.drawImage img, 0, 0
175
- dataURL = canvas.toDataURL("image/png")
176
-
177
- return dataURL
178
-
179
- formatData: ->
180
- formData = new FormData()
181
- if @file
182
- #file = @.props.blockProps.data.get('file')
183
-
184
- formData.append('file', @file)
185
- return formData
186
- else
187
- formData.append('url',
188
- @.props.blockProps.data.get("url")
189
- )
190
- return formData
191
-
192
- getUploadUrl: =>
193
- url = @config.upload_url
194
- if typeof(url) is "function" then url() else url
195
-
196
-
197
- uploadFile: =>
198
- # console.log "FORM DATA:" , @formatData()
199
- axios
200
- method: 'post'
201
- url: @getUploadUrl()
202
- data: @formatData()
203
- onUploadProgress: (e)=>
204
- @updateProgressBar(e)
205
- .then (result)=>
206
- @uploadCompleted(result.data)
207
- @props.blockProps.removeLock()
208
- @stopLoader()
209
- @file = null
210
-
211
- if @config.upload_callback
212
- @config.upload_callback(response, @)
213
-
214
- .catch (error)=>
215
- @props.blockProps.removeLock()
216
- @stopLoader()
217
-
218
- console.log("ERROR: got error uploading file #{error}")
219
- if @config.upload_error_callback
220
- @config.upload_error_callback(error, @)
221
-
222
- handleUp = (json_response)=>
223
- @uploadCompleted json_response, n
224
-
225
- uploadCompleted: (json)=>
226
- @setState
227
- url: json.url
228
- , @updateData
229
-
230
- updateProgressBar: (e)=>
231
- complete = @state.loading_progress
232
- if (e.lengthComputable)
233
- complete = e.loaded / e.total * 100
234
- complete = complete ? complete : 0
235
- @setState
236
- loading_progress: complete
237
- console.log "complete: #{complete}"
238
-
239
- placeHolderEnabled: =>
240
- @state.enabled or @.props.block.getText()
241
-
242
- placeholderText: =>
243
- return "" if @placeHolderEnabled()
244
- "Write caption for image (optional)"
245
-
246
- handleFocus: (e)=>
247
- # console.log "focus on placeholder"
248
- setTimeout =>
249
- @setState
250
- enabled: true
251
- , 0
252
-
253
- render: =>
254
-
255
- return (
256
- <div ref="image_tag2"
257
- suppressContentEditableWarning={true}>
258
- <div
259
- className="aspectRatioPlaceholder is-locked"
260
- style={@coords()}
261
- onClick={@handleGrafFigureSelectImg}>
262
- <div style={{paddingBottom: "#{@state.aspect_ratio.ratio}%" }}} className='aspect-ratio-fill'>
263
- </div>
264
- <img src={@state.url}
265
- ref="image_tag"
266
- height={@state.aspect_ratio.height}
267
- width={@state.aspect_ratio.width}
268
- className='graf-image'
269
- />
270
- <Loader
271
- toggle={@state.loading}
272
- progress={@state.loading_progress}
273
- />
274
- </div>
275
- <figcaption className='imageCaption'
276
- onMouseDown={@handleFocus}>
277
-
278
- {
279
- if !@state.enabled
280
- <span className="danteDefaultPlaceholder">
281
- {@placeholderText()}
282
- </span>
283
- }
284
-
285
- <EditorBlock {...@props}
286
- editable=true
287
- className="imageCaption"
288
- />
289
- </figcaption>
290
- </div>
291
- )
292
-
293
- class Loader extends React.Component
294
-
295
- render: ->
296
- return (
297
- <div>
298
- { if @props.toggle
299
- <div className="image-upoader-loader">
300
- <p>
301
- {
302
- if @props.progress is 100
303
- "processing image..."
304
- else
305
- <span>
306
- <span>loading</span>
307
- {Math.round @props.progress}
308
- </span>
309
- }
310
- </p>
311
- </div>
312
- }
313
- </div>
314
- )
315
-
316
- module.exports = ImageBlock
@@ -1,60 +0,0 @@
1
-
2
- React = require('react')
3
- ReactDOM = require('react-dom')
4
-
5
- {
6
- Entity,
7
- RichUtils
8
- AtomicBlockUtils
9
- EditorBlock
10
- } = require('draft-js')
11
-
12
- #utils = require("../../utils/utils")
13
-
14
-
15
- class PlaceholderBlock extends React.Component
16
- constructor: (props) ->
17
- super props
18
- @state =
19
- enabled: false
20
- data: @.props.blockProps.data.toJS()
21
-
22
- placeholderText: =>
23
- return "" if @state.enabled
24
- @.props.blockProps.data.toJS().placeholder || @placeholderFromProps() || @defaultText()
25
- #if @.props.blockProps.data then @.props.blockProps.data.placeholder else @defaultText()
26
-
27
-
28
- placeholderFromProps: =>
29
- @.props.block.toJS().placeholder
30
-
31
- defaultText: =>
32
- "write something "
33
-
34
- componentDidMount: ->
35
-
36
- handleFocus: (e)=>
37
- # console.log "focus on placeholder"
38
- setTimeout =>
39
- @setState
40
- enabled: true
41
- , 0
42
-
43
- classForDefault: =>
44
- if !@state.enabled then "defaultValue defaultValue--root" else ""
45
-
46
- render: ->
47
- return(
48
- <span className={@classForDefault()}
49
- onMouseDown={@handleFocus}>
50
-
51
- {@placeholderText()}
52
-
53
- <EditorBlock {...@props}
54
- className="imageCaption"
55
- placeholder="escrive alalal"
56
- />
57
- </span>
58
- )
59
-
60
- module.exports = PlaceholderBlock
@@ -1,75 +0,0 @@
1
-
2
- React = require('react')
3
- ReactDOM = require('react-dom')
4
-
5
- {
6
- Entity,
7
- RichUtils
8
- AtomicBlockUtils
9
- EditorBlock
10
- } = require('draft-js')
11
-
12
- { updateDataOfBlock } = require('../../model/index.js')
13
-
14
- axios = require("axios")
15
-
16
- class VideoBlock extends React.Component
17
- constructor: (props) ->
18
- super props
19
- #api_key = "86c28a410a104c8bb58848733c82f840"
20
-
21
- @state =
22
- embed_data: @defaultData()
23
-
24
- defaultData: ->
25
- existing_data = @.props.block.getData().toJS()
26
- existing_data.embed_data || {}
27
-
28
- # will update block state
29
- updateData: =>
30
- blockProps = @.props.blockProps
31
- block = @.props.block
32
- getEditorState = @props.blockProps.getEditorState
33
- setEditorState = @props.blockProps.setEditorState
34
- data = block.getData();
35
- newData = data.merge(@state)
36
- setEditorState(updateDataOfBlock(getEditorState(), block, newData))
37
-
38
- dataForUpdate: =>
39
- @.props.blockProps.data.toJS()
40
-
41
- componentDidMount: ->
42
-
43
- return unless @.props.blockProps.data
44
- # ensure data isnt already loaded
45
- return unless @dataForUpdate().endpoint or @dataForUpdate().provisory_text
46
-
47
- axios
48
- method: 'get'
49
- url: "#{@.dataForUpdate().endpoint}#{@.dataForUpdate().provisory_text}&scheme=https"
50
- .then (result)=>
51
- @setState
52
- embed_data: result.data #JSON.parse(data.responseText)
53
- , @updateData
54
- .catch (error)=>
55
- console.log("TODO: error")
56
-
57
- classForImage: ->
58
- if @state.embed_data.thumbnail_url then "" else "mixtapeImage--empty u-ignoreBlock"
59
-
60
- render: ->
61
- return(
62
- <figure
63
- className='graf--figure graf--iframe graf--first' tabIndex='0'>
64
- <div className='iframeContainer' dangerouslySetInnerHTML={__html: @state.embed_data.html}>
65
- </div>
66
- <figcaption
67
- className='imageCaption'>
68
- <EditorBlock {...@props}
69
- className="imageCaption"
70
- />
71
- </figcaption>
72
- </figure>
73
- )
74
-
75
- module.exports = VideoBlock
@@ -1,96 +0,0 @@
1
- React = require('react')
2
-
3
- class Debug extends React.Component
4
-
5
- constructor: (options={})->
6
- @state =
7
- output: ""
8
- display: "none"
9
-
10
- handleToggleReadOnly: (e)=>
11
- e.preventDefault()
12
- @props.editor.toggleEditable()
13
- return false
14
-
15
- handleTestEmitAndDecode: (e)=>
16
- e.preventDefault()
17
- @.testEmitAndDecode()
18
-
19
- handleTestEmitTEXT: (e)=>
20
- e.preventDefault()
21
- @.testEmitTEXT()
22
-
23
- testEmitAndDecode: (e)=>
24
- raw_as_json = @props.editor.emitSerializedOutput()
25
- @props.editor.setState
26
- editorState: @props.editor.decodeEditorContent(raw_as_json)
27
- , @logState(JSON.stringify(raw_as_json))
28
- false
29
-
30
- testEmitTEXT: ()=>
31
- text = @props.editor.getTextFromEditor()
32
- @logState(text)
33
-
34
- logState: (raw)=>
35
- @setState
36
- output: raw
37
- , @open
38
-
39
- toggleDisplay: (e)=>
40
- e.preventDefault()
41
- d = if @state.display is "block" then "none" else @state.display
42
- @setState
43
- display: d
44
-
45
- open: =>
46
- @setState
47
- display: "block"
48
-
49
- render: =>
50
- return (
51
-
52
- <div>
53
- <div className="debugControls">
54
- <ul>
55
- <li>LOCKS: {@props.editor.state.locks}</li>
56
- <li>
57
- <a href="#" onClick={@handleToggleReadOnly}>
58
- EDITABLE: {if @props.editor.state.read_only then 'NO' else 'YES'}
59
- </a>
60
- </li>
61
- <li>
62
- <a href="#" onClick={@handleTestEmitTEXT}>
63
- EDITOR TEXT
64
- </a>
65
- </li>
66
-
67
- <li>
68
- <a href="#" onClick={@handleTestEmitAndDecode}>
69
- EDITOR STATE
70
- </a>
71
- </li>
72
-
73
- </ul>
74
- </div>
75
-
76
- <div className="debugZone" style={display: @state.display}>
77
- <a href="#"
78
- className="dante-debug-close close"
79
- onClick={@toggleDisplay}
80
- />
81
-
82
- <div className="debugOutput">
83
- <h2>EDITOR OUTPUT</h2>
84
- {
85
- if @state.output.length > 0
86
- <pre>
87
- {@state.output}
88
- </pre>
89
- }
90
- </div>
91
- </div>
92
- </div>
93
- )
94
-
95
-
96
- module.exports = Debug
@@ -1,61 +0,0 @@
1
- React = require('react')
2
- {Entity} = require('draft-js')
3
-
4
- ###
5
- Link = (props) ->
6
- data = Entity.get(props.entityKey).getData();
7
- console.log props
8
- #onMouseOver={@props.showPopLinkOver}>
9
- #onMouseOut={@props.hidePopLinkOver}>
10
- return (
11
- <a href={data.url} className="markup--anchor">
12
- {props.children}
13
- </a>
14
- );
15
- ###
16
-
17
- class Link extends React.Component
18
-
19
- constructor: (props) ->
20
- super props
21
- @isHover = false
22
-
23
- _validateLink: ()=>
24
- pattern = new RegExp('^(https?:\/\/)?'+ # protocol
25
- '((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|'+ # domain name
26
- '((\d{1,3}\.){3}\d{1,3}))'+ # OR ip (v4) address
27
- '(\:\d+)?(\/[-a-z\d%_.~+]*)*'+ # port and path
28
- '(\?[;&a-z\d%_.~+=-]*)?'+ # query string
29
- '(\#[-a-z\d_]*)?$','i') # fragment locater
30
- if !pattern.test(str)
31
- alert("Please enter a valid URL.")
32
- return false
33
- else
34
- return true
35
-
36
- _checkProtocol: ()=>
37
- console.log "xcvd"
38
-
39
-
40
- _showPopLinkOver: (e)=>
41
- return unless @data.showPopLinkOver
42
- @data.showPopLinkOver(@refs.link)
43
-
44
- _hidePopLinkOver: (e)=>
45
- return unless @data.hidePopLinkOver
46
- @data.hidePopLinkOver()
47
-
48
- render: ->
49
- @data = Entity.get(@props.entityKey).getData();
50
-
51
- return (
52
- <a ref="link"
53
- href={@data.url}
54
- className="markup--anchor"
55
- onMouseOver={@_showPopLinkOver}
56
- onMouseOut={@_hidePopLinkOver}>
57
- {@props.children}
58
- </a>
59
- );
60
-
61
- module.exports = Link