Allow new item description files to be created

This commit is contained in:
Andrew Miner
2015-05-11 09:20:42 -07:00
parent 8eb5cef71b
commit 23e98f5d31
7 changed files with 75 additions and 34 deletions
+2 -2
View File
@@ -133,7 +133,7 @@ module.exports = (grunt)->
tasks: ['browserify:dev', 'exorcise']
jade:
files: ['./src/**/*.jade']
tasks: ['jade:pages', 'jade:templates', 'browserify:dev', 'exorcise']
tasks: ['jade:pages', 'jade:templates']
sass:
files: ['./src/**/*.scss']
tasks: ['sass', 'copy:styles']
@@ -156,7 +156,7 @@ module.exports = (grunt)->
grunt.registerTask 'test', ['mochaTest']
grunt.registerTask 'watch-dev', ['clean', 'build', 'watch:static', 'watch:coffee', 'watch:jade', 'watch:sass']
grunt.registerTask 'watch-dev', ['clean', 'build', 'watch']
grunt.registerTask 'watch-test', ['clean', 'build', 'watch:test']
+24 -14
View File
@@ -49,14 +49,17 @@ module.exports = class BaseController extends backbone.View
if not ($el.hasClass('hiding') or $el.hasClass('hidden'))
logger.verbose => "#{this} is hiding \"#{$el.selector}\""
@_onAnimationComplete $el, Duration.normal, =>
$el.addClass 'hidden'
$el.removeClass 'hiding'
logger.verbose => "#{this} is finished hiding #{$el.selector}"
@trigger Event.animate.hide.finish, this, $el
$el.addClass 'hiding'
@trigger Event.animate.hide.start, this, $el
@_onAnimationComplete $el, Duration.normal, => @hide $el
return
if $el.hasClass('hiding') and not $el.hasClass('hidden')
$el.removeClass 'hiding'
$el.addClass 'hidden'
logger.verbose => "#{this} is finished hiding #{$el.selector}"
@trigger Event.animate.hide.finish, this, $el
refresh: ->
logger.verbose => "#{this} refreshing"
@@ -86,21 +89,28 @@ module.exports = class BaseController extends backbone.View
show: ($el)->
$el ?= @$el
if not $el.hasClass 'hideable'
$el.addClass 'hideable'
_.defer => @show $el
return
if $el.hasClass('hidden') or $el.hasClass('hiding')
if $el.hasClass 'hidden'
logger.verbose => "#{this} is showing \"#{$el.selector}\""
$el.removeClass 'hidden'
$el.addClass 'hiding'
@trigger Event.animate.show.start, this, $el
_.defer => @show $el
return
if $el.hasClass 'hiding'
$el.removeClass 'hiding'
@_onAnimationComplete $el, Duration.normal, => @show $el
return
@_onAnimationComplete $el, Duration.normal, =>
logger.verbose => "#{this} is finished showing #{$el.selector}"
@trigger Event.animate.show.finish, this, $el
$el.addClass 'hiding'
$el.removeClass 'hidden'
_.defer =>
$el.removeClass 'hiding'
@trigger Event.animate.show.start, this, $el
unrender: ->
@undelegateEvents()
@$el.empty()
@@ -9,6 +9,7 @@ $ = require 'jquery'
BaseController = require './base_controller'
EmailClient = require '../models/email_client'
_ = require 'underscore'
w = require 'when'
{Duration} = require '../constants'
{Key} = require '../constants'
@@ -148,7 +148,11 @@ module.exports = class ItemPageController extends PageController
@client.fetchFile path:GitHub.file.itemDescription modSlug:@_itemSlug.mod, itemSlug:@_itemSlug.item
.then (response)=>
@_editingFile = response.json.data
if @_editingFile.content.length > 0
@model.item.parse @_editingFile.content
else
@model.item.description = ''
@_descriptionController.model = @model.item.description
_endEditingDescription: ->
@@ -180,6 +184,8 @@ module.exports = class ItemPageController extends PageController
if @model.item?.description?.length > 0
@_descriptionController.model = @model.item.description
@show @$descriptionSection
else if @user?
@show @$descriptionSection
else
@hide @$descriptionSection
@@ -19,19 +19,22 @@ module.exports = class MarkdownSectionController extends BaseController
@State = State =
appologizing: 'applogizing'
confirming: 'confirming'
creating: 'creating'
editing: 'editing'
previewing: 'previewing'
viewing: 'viewing'
waiting: 'waiting'
constructor: (options={})->
@_state = State.waiting
if not options.modPack? then throw new Error 'options.modPack is required'
options.model ?= null
options.templateName = 'markdown_section'
@_state = State.waiting
super options
@on Event.animate.hide.finish, => @_updateStateVisibility()
@on Event.animate.show.finish, => @_updateStateVisibility()
@confirmactionMessage = options.confirmationMessage
@confirmDuration = options.confirmationDuration ?= 5000
@imageBase = options.imageBase ?= ''
@@ -52,13 +55,13 @@ module.exports = class MarkdownSectionController extends BaseController
onCancelClicked: (event)->
event.preventDefault()
@model = @_originalModel
@state = State.viewing
@_resetToDefaultState()
onEditClicked: (event)->
event.preventDefault()
return unless @editable
@_originalModel = "#{@model}"
@_originalModel = @model
@state = State.waiting
@_beginEditing()
.then =>
@@ -66,7 +69,7 @@ module.exports = class MarkdownSectionController extends BaseController
.catch (e)=>
logger.warning "cannot begin editing: #{e.stack}"
@state = State.appologizing
w(true).delay(@confirmDuration).then => @state = State.viewing
w(true).delay(@confirmDuration).then => @_resetToDefaultState()
onPreviewClicked: (event)->
event.preventDefault()
@@ -124,6 +127,8 @@ module.exports = class MarkdownSectionController extends BaseController
@$textarea = @$('textarea')
@$title = @$('h2')
@_resetToDefaultState()
super
refresh: ->
@@ -131,17 +136,10 @@ module.exports = class MarkdownSectionController extends BaseController
@_updateSizer()
@_updatePreview()
@_updateStateVisibility()
super
onWillChangeModel: (oldModel, newModel)->
result = super oldModel, newModel
if @state is State.waiting and newModel?
@state = State.viewing
else if not newModel?
@state = State.waiting
@$textarea.val newModel
return result
@@ -190,6 +188,16 @@ module.exports = class MarkdownSectionController extends BaseController
@$markdownPanel.html text
_resetToDefaultState: ->
if @model?
@state = State.viewing
else
if @editable?
@state = State.creating
else
@state = State.waiting
_updateStateVisibility: ->
return if @_lastUpdatedState is @state
@_lastUpdatedState = @state
@@ -199,6 +207,7 @@ module.exports = class MarkdownSectionController extends BaseController
buttonPanel: @$('.buttons')
cancelButton: @$('button.cancel')
confirmingPanel: @$('.confirming')
creatingPanel: @$('.creating')
editButton: @$('button.edit')
editorPanel: @$('.editor')
errorPanel: @$('.error')
@@ -215,6 +224,8 @@ module.exports = class MarkdownSectionController extends BaseController
visible = appologizingPanel:true
else if @state is State.confirming
visible = confirmingPanel:true
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, saveButton:true
else if @state is State.previewing
+2
View File
@@ -13,6 +13,8 @@
.editor.hideable.hidden
textarea
.sizer
.creating.hideable.hidden
p Please help by adding a description!
.buttons.hideable.hidden
.error.hideable.hidden: p
button.return.hideable.hidden return
+11
View File
@@ -52,6 +52,17 @@ All rights reserved.
}
}
.creating {
width: 100%;
text-align: center;
p {
color: $color-gray-light;
font-size: $font-size-x-large;
margin: 1em;
}
}
.editor {
width: 100%;