diff --git a/web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee b/web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee
new file mode 100644
index 000000000..e3ff051db
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee
@@ -0,0 +1,47 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@EditableList = React.createClass({
+ objects: []
+
+ listObjects: ->
+ objs=[]
+ @root = jQuery(this.getDOMNode())
+ $(".listItem", @root).each ->
+ objs.push $(this).data("object-id")
+ objs
+
+ deleteItem: (e) ->
+ e.preventDefault()
+ keys = (k for k, v of e.target when typeof v is 'function')
+
+ logger.debug("Delete item", e.target, keys)
+ i = e.target.getAttribute("data-item-index")
+ this.props.listItems.splice(i,1)
+ this.props.onItemChanged(this.props.objectName, this.props.listItems)
+
+ render: () ->
+ object_options = []
+
+ logger.debug("Rendering EditableList", this.props, this.props.listItems)
+
+ if this.props.listItems? && this.props.listItems.length > 0
+ for object,i in this.props.listItems
+ nm = "item_#{i}"
+ displayValue = this.props.formatListItem(object)
+ object_options.push `
`
+ else
+ object_options.push `None
`
+
+ ``
+
+})
\ No newline at end of file
diff --git a/web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee
new file mode 100644
index 000000000..a080f7b21
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee
@@ -0,0 +1,18 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@GenreCheckBoxList = React.createClass({
+ genres: []
+ componentDidUnmount: () ->
+ @genres = []
+
+ componentDidMount: () ->
+ rest.getGenres().done (genres) =>
+ @genres = genres
+
+ render: () ->
+ `
+
+
`
+})
\ No newline at end of file
diff --git a/web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee
new file mode 100644
index 000000000..2be186366
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee
@@ -0,0 +1,18 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@InstrumentCheckBoxList = React.createClass({
+ instruments: []
+ componentDidUnmount: () ->
+ @instruments = []
+
+ componentDidMount: () ->
+ rest.getInstruments().done (instruments) =>
+ @instruments = instruments
+
+ render: () ->
+ `
+
+
`
+})
\ No newline at end of file
diff --git a/web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee
new file mode 100644
index 000000000..71592d822
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee
@@ -0,0 +1,18 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@LanguageCheckBoxList = React.createClass({
+ languages: []
+ componentDidUnmount: () ->
+ @languages = []
+
+ componentDidMount: () ->
+ rest.getLanguages().done (languages) =>
+ @languages = languages
+
+ render: () ->
+ `
+
+
`
+})
\ No newline at end of file
diff --git a/web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee
new file mode 100644
index 000000000..e3cf1fbe9
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee
@@ -0,0 +1,18 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@SubjectCheckBoxList = React.createClass({
+ subjects: []
+ componentDidUnmount: () ->
+ @subjects = []
+
+ componentDidMount: () ->
+ rest.getSubjects().done (subjects) =>
+ @subjects = subjects
+
+ render: () ->
+ `
+
+
`
+})
\ No newline at end of file
diff --git a/web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee b/web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee
new file mode 100644
index 000000000..5ed8aca0e
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee
@@ -0,0 +1,67 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@TeacherExperienceEditableList = React.createClass({
+ instruments: []
+ componentDidUnmount: () ->
+ @instruments = []
+
+ componentDidMount: () ->
+ $root = jQuery(this.getDOMNode())
+ rest.getInstruments().done (instruments) =>
+ @instruments = instruments
+
+ $root.off("submit", ".teacher-experience-teaching-form").on("submit", ".teacher-experience-teaching-form", @addExperience)
+
+ formatListItem: (obj) ->
+ "#{obj.name}"
+
+ listItems: () ->
+ logger.debug("listItems", this.props.listItems)
+ this.props.listItems
+
+ addExperience: (e) ->
+ e.preventDefault()
+ logger.debug("addExperience", $(this))
+ $form = e.target
+ formValues = $(":input", $form).formToObject()
+ this.props.listItems.push {
+ name: $("[name='title_input']", $form).val()
+ organization: $("[name='organization_input']", $form).val()
+ start_year: $("[name='start_year']", $form).val()
+ end_year: $("[name='end_year']", $form).val()
+ }
+ logger.debug("addExperience", this.props.listItems)
+ this.props.onItemChanged(this.props.experienceType, this.props.listItems)
+ $form.reset()
+ false
+
+ render: () ->
+ ``
+})
\ No newline at end of file
diff --git a/web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee b/web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee
new file mode 100644
index 000000000..10993eafd
--- /dev/null
+++ b/web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee
@@ -0,0 +1,24 @@
+context = window
+rest = window.JK.Rest()
+logger = context.JK.logger
+
+@YearSelect = React.createClass({
+ instruments: []
+ componentDidUnmount: () ->
+ @instruments = []
+
+ componentDidMount: () ->
+ rest.getInstruments().done (instruments) =>
+ @instruments = instruments
+
+ render: () ->
+ options = []
+
+ now = new Date().getFullYear()
+ for yr in [1901..now]
+ options.push ``
+
+ ``
+})
\ No newline at end of file