Implements fixes based on code review.

This commit is contained in:
Josh Callebaut 2016-01-20 15:32:21 -08:00
parent 80c2a9e539
commit c28720c640
8 changed files with 125 additions and 152 deletions

View file

@ -1,3 +1,3 @@
#artisan-guide-modal #artisan-guide-modal
.centered-stack .centered-stack
text-align: center text-align: center

View file

@ -2,7 +2,9 @@
td td
cursor: pointer cursor: pointer
.taskCheck .taskCheck
width: 5% width: 5em
.editCell
width: 5em
.taskCheck * .taskCheck *
text-align: center text-align: center
margin: auto margin: auto
@ -12,4 +14,4 @@
cursor: pointer cursor: pointer
text-align:center text-align:center
.noArticle .noArticle
color: rgba(160, 0, 0, 1) color: rgba(160, 0, 0, 1)

View file

@ -2,12 +2,16 @@ extends /templates/core/modal-base
block modal-header-content block modal-header-content
h3 Artisan Compendium h3 Artisan Compendium
block modal-body-content block modal-body-content
p
p p
| Welcome to the Artisan Compendium. Below you will find a series of helpful guides and tutorials for getting your levels to Master Artisan quality | Welcome to the Artisan Compendium. Below you will find a series of helpful guides and tutorials for getting your levels to Master Artisan quality
if creator == meID if view.creator === view.meID
|, as well as a way to submit your level for official Artisan review |, as well as a way to submit your level for official Artisan review
|! If you have any feedback on the Level Editor, please contact us at: artisans@codecombat.com |! If you have any feedback on the Level Editor, please contact us at:
a(href='mailto:artisans@codecombat.com') artisans@codecombat.com
div.centered-stack div.centered-stack
div div
a(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home', target='_blank') Wiki Homepage a(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home', target='_blank') Wiki Homepage
@ -15,7 +19,7 @@ block modal-body-content
a(href='https://github.com/codecombat/codecombat/wiki/Artisan-How-To-Index', target='_blank') Basic How-tos a(href='https://github.com/codecombat/codecombat/wiki/Artisan-How-To-Index', target='_blank') Basic How-tos
div div
a(href='http://direct.codecombat.com/community', target='_blank') Artisan Rankings a(href='http://direct.codecombat.com/community', target='_blank') Artisan Rankings
if creator == meID if view.creator === view.meID
h4 Level Submission h4 Level Submission
p p
| Do you want your level to be added to the campaign? Please take a moment to fill out the questions below! Dont worry, this isnt a timed quiz. It is just a way for the artisans at CodeCombat HQ to get a feel for the purpose of this level. If it doesnt quite yet meet our standards for release we will give you feedback to help polish it further! | Do you want your level to be added to the campaign? Please take a moment to fill out the questions below! Dont worry, this isnt a timed quiz. It is just a way for the artisans at CodeCombat HQ to get a feel for the purpose of this level. If it doesnt quite yet meet our standards for release we will give you feedback to help polish it further!
@ -33,9 +37,8 @@ block modal-body-content
label.control-label(for='level-location') Where in the campaign do you think this level belongs? label.control-label(for='level-location') Where in the campaign do you think this level belongs?
textarea#level-location.form-control(name='levelLocation', rows=4) textarea#level-location.form-control(name='levelLocation', rows=4)
block modal-footer-content block modal-footer-content
div div
a(href='#', data-dismiss="modal", aria-hidden="true").btn Close a(href='#', data-dismiss="modal", aria-hidden="true").btn Close
if creator == meID if view.creator === view.meID
button.btn.btn-primary#level-submit Submit button.btn.btn-primary#level-submit Submit

View file

@ -0,0 +1,41 @@
mixin task-row(task)
- var taskName = task.get('name');
- var isComplete = task.get('complete')
- var taskLink = view.defaultTaskLinks[taskName]
tr.taskRow(data-task=task)
td.taskCheck
div.checkbox
input(type='checkbox', checked=(isComplete || false)).taskInput
if task.get('curEdit') === true
td.editCell
td
input(type="input", value=taskName)#curEdit
else
td.editCell
span.startEdit ✎
td
if taskLink
if taskLink === './'
a.noArticle(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home', target='blank')= taskName
else
a(href=taskLink, target='_blank')= taskName
else
span= taskName
block
table.table.table-striped.table-hover
tr
th.taskCheck Complete
th Edit
th Incomplete Tasks
for task in (view.taskArray() || [])
if task.get('revert').complete !== true
+task-row(task)
tr
th
th
th Completed Tasks
for task in (view.taskArray() || [])
if task.get('revert').complete === true
+task-row(task)
button#createTask.btn.btn-default Add Task

View file

@ -1,40 +0,0 @@
mixin taskRow(task)
tr.taskRow(data=task.name)
td.taskCheck
div.checkbox
input(type='checkbox', checked=(task.complete || false), data=task.name, placeholder='Enter a description of the task.').taskInput
if task.curEdit == true
td
td
input(type="input", value=task.name)#curEdit
else
td
span.startEdit(data=task.name) ✎
td
if view.defaultTaskLinks[task.name]
if view.defaultTaskLinks[task.name] === './'
a.noArticle(href='https://github.com/codecombat/codecombat/wiki/Artisan-Home' target='_blank')= task.name
else
a(href=view.defaultTaskLinks[task.name], target='_blank')= task.name
else
span= task.name
block
if view.tasks
table.table.table-striped.table-hover
tr
th.taskCheck Complete
th Edit
th Incomplete Tasks
for task in view.tTasks
if task.reversion !== true
+taskRow(task)
tr
th
th
th Completed Tasks
for task in view.tTasks
if task.reversion === true
+taskRow(task)
button#createTask.btn.btn-default Add Task
else
div Wrong!

View file

@ -26,4 +26,4 @@ mixin thangRow(thang)
for task in (thang.tasks || []) for task in (thang.tasks || [])
if !task.complete if !task.complete
tr tr
td= task.name td= task.name

View file

@ -23,17 +23,11 @@ module.exports = class ArtisanGuideModal extends ModalView
events: events:
'click #level-submit': 'levelSubmit' 'click #level-submit': 'levelSubmit'
constructor: (options) -> initialize: (options) ->
super options
@level = options.level @level = options.level
@options = level: @level.get 'name' @options = level: @level.get 'name'
@render() @creator = @level.get 'creator'
@meID = me.id
getRenderData: ->
c = super()
c.creator = @level.get 'creator'
c.meID = me.id
c
levelSubmit: -> levelSubmit: ->
@playSound 'menu-button-click' @playSound 'menu-button-click'

View file

@ -1,5 +1,5 @@
CocoView = require 'views/core/CocoView' CocoView = require 'views/core/CocoView'
template = require 'templates/editor/level/tasks_tab' template = require 'templates/editor/level/tasks-tab'
Level = require 'models/Level' Level = require 'models/Level'
module.exports = class TasksTabView extends CocoView module.exports = class TasksTabView extends CocoView
@ -7,11 +7,11 @@ module.exports = class TasksTabView extends CocoView
className: 'tab-pane' className: 'tab-pane'
template: template template: template
events: events:
'click .taskRow': 'onTaskRowClicked' 'click .taskRow': 'onClickTaskRow'
'click .taskInput': 'onTaskCompletionClicked' 'click .taskInput': 'onClickTaskInput'
'click .startEdit': 'onTaskEditClicked' 'click .startEdit': 'onClickStartEdit'
'click #createTask': 'onTaskCreateClicked' 'click #createTask': 'onClickCreateTask'
'keydown #curEdit': 'onCurEditKeyDown' 'keydown #curEdit': 'onKeyDownCurEdit'
subscriptions: subscriptions:
'editor:level-loaded': 'onLevelLoaded' 'editor:level-loaded': 'onLevelLoaded'
@ -54,123 +54,96 @@ module.exports = class TasksTabView extends CocoView
'Do thorough set decoration.':'./' 'Do thorough set decoration.':'./'
'Add a walkthrough video.':'./' 'Add a walkthrough video.':'./'
constructor: (options) -> taskMap: ->
super options return @tasks?.map((_obj) -> return (name: _obj.get('name'), complete: (_obj.get('complete') || false)))
@render()
taskArray: ->
return @tasks?.toArray()
findTask: (_name) ->
return @tasks.findWhere(name:_name)
onLoaded: -> onLoaded: ->
onLevelLoaded: (e) -> onLevelLoaded: (e) ->
@level = e.level @level = e.level
if e.level._revertAttributes Task = Backbone.Model.extend({
@revertTasks = e.level._revertAttributes.tasks initialize: ->
else if e?.level?._revertAttributes?.tasks?
@revertTasks = @level.get 'tasks' if _.find(e.level._revertAttributes.tasks, {name:arguments[0].name})
@tasks = @level.get 'tasks' @set 'revert', _.find(e.level._revertAttributes.tasks, {name:arguments[0].name})
@tTasks = _.clone @tasks, true else
for task in @tTasks @set 'revert', arguments[0]
if @revertTasks[_.findKey(@revertTasks, {'name':task.name})] else
task.reversion = @revertTasks[_.findKey(@revertTasks, {'name':task.name})].complete || null @set 'revert', arguments[0]
else })
task.reversion = false TaskList = Backbone.Collection.extend({
model: Task
})
@tasks = new TaskList(@level.get 'tasks')
@render() @render()
getRenderData: ->
c = super()
c.tasks = @tasks
c.status
c
pushTasks: -> pushTasks: ->
for task in @tTasks @level.set 'tasks', @taskMap()
taskKey = @findTaskByName(@tasks, task.name)
oTaskKey = @findTaskByName(@tasks, task.oldName)
if taskKey?
@tasks[taskKey].complete = task.complete
else if oTaskKey?
if task.name is ''
@tasks.splice(oTaskKey, 1)
@tTasks.splice(@tTasks.indexOf(task), 1)
break
@pushTasks()
else
@tasks[oTaskKey].name = task.name
@tasks[oTaskKey].complete = task.complete
else
if task.name is ''
@tasks.splice(oTaskKey, 1)
@tTasks.splice(@tTasks.indexOf(task), 1)
else
@tasks.push
name: task.name
complete: task.complete
@level.set 'tasks', @tasks
@parent.renderSelectors '#tasks-tab'
onTaskRowClicked: (e) -> onClickTaskRow: (e) ->
if not $(e.target).is('input') and not $(e.target).is('a') and not $(e.target).hasClass('startEdit') if not $(e.target).is('input') and not $(e.target).is('a') and not $(e.target).hasClass('startEdit')
checkBox = $(e.currentTarget).find('.taskInput')[0] task = @findTask($(e.target).closest('tr').data('task').name)
tTaskKey = @findTaskByName(@tTasks, @getData e) checkbox = $(e.currentTarget).find('.taskInput')[0]
if tTaskKey? if task.get 'complete'
if checkBox.checked task.set 'complete', false
checkBox.checked = false else
else task.set 'complete', true
checkBox.checked = true checkbox.checked = task.get 'complete'
console.log(checkBox.checked)
@tTasks[tTaskKey].complete = checkBox.checked
@pushTasks() @pushTasks()
onTaskCompletionClicked: (e) -> onClickTaskInput: (e) ->
tTaskKey = @findTaskByName(@tTasks, @getData e) task = @findTask($(e.target).closest('tr').data('task').name)
if tTaskKey? task.set 'complete', e.currentTarget.checked
@tTasks[tTaskKey].complete = e.currentTarget.checked
@pushTasks() @pushTasks()
onTaskCreateClicked: (e) -> onClickStartEdit: (e) ->
if $('#curEdit').length is 0 if $('#curEdit').length is 0
@tTasks.push task = @findTask($(e.target).closest('tr').data('task').name)
name: '' task.set 'curEdit', true
complete: false
reversion: false
curEdit: true
@render() @render()
editDiv = $('#curEdit')[0] editDiv = $('#curEdit')[0]
editDiv.focus() editDiv.focus()
len = editDiv.value.length * 2 len = editDiv.value.length * 2
editDiv.setSelectionRange len, len editDiv.setSelectionRange len, len
onCurEditKeyDown: (e) -> onKeyDownCurEdit: (e) ->
editDiv = $('#curEdit')[0]
if e.keyCode is 13 if e.keyCode is 13
taskIndex = @findTaskByName(@tasks, editDiv.value) editDiv = $('#curEdit')[0]
tTaskIndex = _.findKey(@tTasks, {'curEdit':true}) task = @findTask($(e.target).closest('tr').data('task').name)
if taskIndex? and tTaskIndex? and taskIndex isnt tTaskIndex potentialTask = @findTask(editDiv.value)
if potentialTask and potentialTask isnt task
noty noty
timeout: 5000 timeout: 5000
text: 'Task with name already exists.' text: 'Task with name already exists!'
type: 'error' type: 'error'
layout: 'topCenter' layout: 'topCenter'
else if editDiv.value is ''
@tasks.remove task
@pushTasks()
@render()
else else
@tTasks[tTaskIndex].oldName = @tTasks[tTaskIndex].name task.set 'name', editDiv.value
@tTasks[tTaskIndex].name = curEdit.value task.set 'curEdit', false
@tTasks[tTaskIndex].curEdit = false @pushTasks()
@render()
@pushTasks() onClickCreateTask: (e) ->
@render()
onTaskEditClicked: (e) ->
if $('#curEdit').length is 0 if $('#curEdit').length is 0
taskIndex = @findTaskByName(@tTasks, @getData e) @tasks.add
@tTasks[taskIndex].curEdit = true name: ''
complete: false
curEdit: true
revert:
name: 'null'
complete: false
@render() @render()
editDiv = $('#curEdit')[0] editDiv = $('#curEdit')[0]
editDiv.focus() editDiv.focus()
len = editDiv.value.length * 2 len = editDiv.value.length * 2
editDiv.setSelectionRange len, len editDiv.setSelectionRange len, len
findTaskByName: (obj, name) ->
return _.findKey(obj, {'name':name})
getData: (elem) ->
return elem.currentTarget.getAttribute('data')