diff --git a/src/coffee/controllers/markdown_image_controller.coffee b/src/coffee/controllers/markdown_image_controller.coffee
index fe81f1524..d70825dac 100644
--- a/src/coffee/controllers/markdown_image_controller.coffee
+++ b/src/coffee/controllers/markdown_image_controller.coffee
@@ -7,6 +7,7 @@ All rights reserved.
_ = require 'underscore'
BaseController = require './base_controller'
+MarkdownImage = require '../models/markdown_image'
########################################################################################################################
@@ -23,20 +24,35 @@ module.exports = class MarkdownImageController extends BaseController
@$input.click()
onFileChanged: ->
+ if @_reader? then @_reader.abort = true
+
file = @$input.prop('files')[0]
- @_reader = new FileReader
- @_reader.onload = =>
- index = @_reader.result.indexOf ','
- meta = @_reader.result.substring 0, index
- encodedData = @_reader.result.substring index + 1
+
+ reader = @_reader = new FileReader
+ reader.abort = false
+ reader.onload = =>
+ if reader.abort
+ logger.info "aborted reading #{file.name}"
+ return
+
+ @_reader = null
+
+ index = reader.result.indexOf ','
+ meta = reader.result.substring 0, index
+ encodedData = reader.result.substring index + 1
match = meta.match /data:(.*);(.*)/
mimeType = match[1]
encoding = match[2]
- logger.debug "uploaded #{encodedData.length} bytes as #{mimeType} in #{encoding}"
+ @model.set
+ encodedData: encodedData
+ status: MarkdownImage.Status.updateable
- @_reader.readAsDataURL file
+ logger.info "loaded #{encodedData.length} bytes from #{file.name} as #{mimeType}"
+
+ logger.info "starting to read local file: #{file.name}"
+ reader.readAsDataURL file
# BaseController Overrides #####################################################################
diff --git a/src/coffee/controllers/markdown_image_list_controller.coffee b/src/coffee/controllers/markdown_image_list_controller.coffee
index 4960cd8ca..cd19c3e9f 100644
--- a/src/coffee/controllers/markdown_image_list_controller.coffee
+++ b/src/coffee/controllers/markdown_image_list_controller.coffee
@@ -23,9 +23,15 @@ module.exports = class MarkdownImageListController extends BaseController
# Public Methods ###############################################################################
+ getImageUrlForFile: (fileName)->
+ @model.getImageUrlForFile fileName
+
loadImages: ->
@model.loadImages()
+ reset: ->
+ @model.reset()
+
# Property Methods #############################################################################
getImageBase: ->
diff --git a/src/coffee/controllers/markdown_section_controller.coffee b/src/coffee/controllers/markdown_section_controller.coffee
index b670bdae8..1a8223ace 100644
--- a/src/coffee/controllers/markdown_section_controller.coffee
+++ b/src/coffee/controllers/markdown_section_controller.coffee
@@ -73,6 +73,9 @@ module.exports = class MarkdownSectionController extends BaseController
@model = @_originalModel
@resetToDefaultState()
+ @_imageListController.reset()
+ @_updatePreview()
+
onEditClicked: (event)->
event.preventDefault()
return unless @editable
@@ -89,6 +92,7 @@ module.exports = class MarkdownSectionController extends BaseController
onPreviewClicked: (event)->
event.preventDefault()
+ @_updatePreview()
@state = State.previewing
onReturnClicked: (event)->
@@ -191,8 +195,8 @@ module.exports = class MarkdownSectionController extends BaseController
# Private Methods ##############################################################################
_convertImageLinks: (text)->
- text.replace /\!\[([^\]]*)\]\(([^\)]*)\)/g, (match, altText, fileName)=>
- return ""
+ text.replace /\
+ return "
text.replace /\[\[([^\]]*)\]\]/g, (match, name)=>
@@ -215,8 +219,8 @@ module.exports = class MarkdownSectionController extends BaseController
text = @model
if @model?
text = @_convertWikiLinks text
- text = @_convertImageLinks text
text = convertMarkdown text
+ text = @_convertImageLinks text
@$markdownPanel.html text
diff --git a/src/coffee/models/markdown_image.coffee b/src/coffee/models/markdown_image.coffee
index 8bb6c93fa..d92b902e3 100644
--- a/src/coffee/models/markdown_image.coffee
+++ b/src/coffee/models/markdown_image.coffee
@@ -26,7 +26,7 @@ module.exports = class MarkdownImage extends BaseModel
'empty': 'empty'
'creatable': 'creatable'
'unchanged': 'unchanged'
- 'updateable': 'updatable'
+ 'updateable': 'updateable'
}
constructor: (attributes={}, options={})->
@@ -46,6 +46,12 @@ module.exports = class MarkdownImage extends BaseModel
getFullPath: ->
return "#{@path}/#{@fileName}"
+ getImageUrl: ->
+ if @mimeType? and @encodedData?
+ return "data:#{@mimeType};base64,#{@encodedData}"
+ else
+ return @fullPath
+
getMimeType: ->
if not @_mimeType?
for mimeType in MimeTypes
@@ -57,6 +63,7 @@ module.exports = class MarkdownImage extends BaseModel
Object.defineProperties @prototype,
fullPath: {get:@prototype.getFullPath}
+ imageUrl: {get:@prototype.getImageUrl}
mimeType: {get:@prototype.getMimeType}
# BaseModel Overrides ##########################################################################
diff --git a/src/coffee/models/markdown_image_list.coffee b/src/coffee/models/markdown_image_list.coffee
index 913c842cb..9720ba758 100644
--- a/src/coffee/models/markdown_image_list.coffee
+++ b/src/coffee/models/markdown_image_list.coffee
@@ -30,11 +30,20 @@ module.exports = class MarkdownImageList extends BaseModel
# Public Methods ###############################################################################
+ getImageUrlForFile: (fileName)->
+ result = @_images[fileName]?.imageUrl
+ result ?= "#{@imageBase}/#{fileName}"
+ return result
+
loadImages: ->
for fileName, image of @_images
if image.status is MarkdownImage.Status.unknown
image.fetch()
+ reset: ->
+ @_images = {}
+ @_analyzeMarkdownText()
+
# Property Methods #############################################################################
getAll: ->