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