Add UI/models to allow uploading images

This commit is contained in:
Andrew Miner
2015-06-05 22:47:40 -07:00
parent 94cd133748
commit dd760018df
12 changed files with 361 additions and 10 deletions
@@ -0,0 +1,40 @@
###
Crafting Guide - markdown_image_controller.coffee
Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
########################################################################################################################
module.exports = class MarkdownImageController extends BaseController
constructor: (options={})->
if not options.model? then throw new Error 'options.model is required'
options.templateName = 'markdown_image'
super
# BaseController Overrides #####################################################################
onDidRender: ->
@$image = @$('img')
@$fileName = @$('.fileName p')
@$button = @$('button')
super
refresh: ->
if @model.mimeType? and @model.encodedData?
@$image.attr 'src', "data:#{@model.mimeType};base64,#{@model.encodedData}"
else
@$image.attr 'src', '/images/unknown.png'
@$fileName.html @model.fileName
if @model.encodedData?
@$button.html 'Update'
else
@$button.html 'Choose'
super
@@ -0,0 +1,55 @@
###
Crafting Guide - markdown_image_list_controller.coffee
Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
MarkdownImageController = require './markdown_image_controller'
MarkdownImageList = require '../models/markdown_image_list'
########################################################################################################################
module.exports = class MarkdownImageListController extends BaseController
constructor: (options={})->
options.model ?= new MarkdownImageList
options.templateName = 'markdown_image_list'
super options
# Property Methods #############################################################################
getMarkdownText: ->
return @model.markdownText
setMarkdownText: (markdownText)->
@model.markdownText = markdownText
Object.defineProperties @prototype,
markdownText: {get:@prototype.getMarkdownText, set:@prototype.setMarkdownText}
# BaseController Overrides #####################################################################
onDidRender: ->
@$imageContainer = @$('.image_container')
super
refresh: ->
@_controllers ?= []
index = 0
for image in @model.all
controller = @_controllers[index]
if not controller?
controller = new MarkdownImageController model:image
@_controllers.push controller
@$imageContainer.append controller.$el
controller.render()
else
controller.model = image
index += 1
while @_controllers.length > index
@_controllers.pop().remove()
@@ -5,12 +5,13 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
convertMarkdown = require 'marked'
_ = require 'underscore'
{Event} = require '../constants'
{Url} = require '../constants'
w = require 'when'
_ = require 'underscore'
BaseController = require './base_controller'
convertMarkdown = require 'marked'
{Event} = require '../constants'
MarkdownImageListController = require './markdown_image_list_controller'
{Url} = require '../constants'
w = require 'when'
########################################################################################################################
@@ -132,6 +133,8 @@ module.exports = class MarkdownSectionController extends BaseController
# BaseController Overrides #####################################################################
onDidRender: ->
@_imageListController = @addChild MarkdownImageListController, '.image_list'
@$errorText = @$('.error p')
@$markdownPanel = @$('.markdown')
@$sizer = @$('.sizer')
@@ -144,6 +147,7 @@ module.exports = class MarkdownSectionController extends BaseController
refresh: ->
@$title.html @title
@_imageListController.markdownText = @model
@_updateSizer()
@_updatePreview()
@@ -210,6 +214,7 @@ module.exports = class MarkdownSectionController extends BaseController
editButton: @$('button.edit')
editorPanel: @$('.editor')
errorPanel: @$('.error')
imageList: @$('.image_list')
markdownPanel: @$markdownPanel
previewButton: @$('button.preview')
returnButton: @$('button.return')
@@ -226,7 +231,7 @@ module.exports = class MarkdownSectionController extends BaseController
else if @state is State.creating
visible = buttonPanel:true, creatingPanel:true, editButton:true
else if @state is State.editing
visible = buttonPanel:true, cancelButton:true, editorPanel:true, previewButton:true
visible = buttonPanel:true, cancelButton:true, editorPanel:true, previewButton:true, imageList:true
else if @state is State.previewing
visible = buttonPanel:true, errorPanel:true, markdownPanel:true, returnButton:true, saveButton:true
errorText = "remember: your changes aren't saved yet!"