Allow new item description files to be created
This commit is contained in:
@@ -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,20 +89,27 @@ module.exports = class BaseController extends backbone.View
|
||||
|
||||
show: ($el)->
|
||||
$el ?= @$el
|
||||
$el.addClass 'hideable'
|
||||
|
||||
if $el.hasClass('hidden') or $el.hasClass('hiding')
|
||||
if not $el.hasClass 'hideable'
|
||||
$el.addClass 'hideable'
|
||||
_.defer => @show $el
|
||||
return
|
||||
|
||||
if $el.hasClass 'hidden'
|
||||
logger.verbose => "#{this} is showing \"#{$el.selector}\""
|
||||
|
||||
@_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
|
||||
$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
|
||||
|
||||
logger.verbose => "#{this} is finished showing #{$el.selector}"
|
||||
@trigger Event.animate.show.finish, this, $el
|
||||
|
||||
unrender: ->
|
||||
@undelegateEvents()
|
||||
|
||||
@@ -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
|
||||
@model.item.parse @_editingFile.content
|
||||
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'
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user