summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/views/tutorials
diff options
context:
space:
mode:
authormo <mokha@cisco.com>2017-09-02 14:48:43 -0600
committermo <mokha@cisco.com>2017-09-02 14:48:43 -0600
commitb8dfe131c6c5fe9d0e5b4ee2d271feeb5d411502 (patch)
tree05b475a8b6442e2a43d9529c42362a3460df7d13 /app/assets/javascripts/views/tutorials
parentbba21d02643d632fee5fa4bdbc876d44832ccf4b (diff)
promote backbone subdirectory up to root.
Diffstat (limited to 'app/assets/javascripts/views/tutorials')
-rw-r--r--app/assets/javascripts/views/tutorials/index_view.js.coffee10
-rw-r--r--app/assets/javascripts/views/tutorials/new_view.js.coffee69
-rw-r--r--app/assets/javascripts/views/tutorials/no_tutorials_view.js.coffee5
-rw-r--r--app/assets/javascripts/views/tutorials/show_view.js.coffee7
-rw-r--r--app/assets/javascripts/views/tutorials/tutorial_view.js.coffee10
5 files changed, 101 insertions, 0 deletions
diff --git a/app/assets/javascripts/views/tutorials/index_view.js.coffee b/app/assets/javascripts/views/tutorials/index_view.js.coffee
new file mode 100644
index 00000000..764611ed
--- /dev/null
+++ b/app/assets/javascripts/views/tutorials/index_view.js.coffee
@@ -0,0 +1,10 @@
+#= require views/tutorials/no_tutorials_view
+#= require views/tutorials/tutorial_view
+
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.IndexView extends Marionette.CollectionView
+ childView: CakeSide.Views.Tutorials.TutorialView
+ emptyView: CakeSide.Views.Tutorials.NoTutorialsView
+ className: ''
+ tagName: 'div'
diff --git a/app/assets/javascripts/views/tutorials/new_view.js.coffee b/app/assets/javascripts/views/tutorials/new_view.js.coffee
new file mode 100644
index 00000000..6aca51a7
--- /dev/null
+++ b/app/assets/javascripts/views/tutorials/new_view.js.coffee
@@ -0,0 +1,69 @@
+#= require service/embedly_service
+
+class CakeSide.Views.Tutorials.NewView extends Marionette.ItemView
+ template: JST['templates/tutorials/new']
+ ui:
+ url: '#tutorial_url'
+ url_group: '#url-group'
+ save_button: '#save-button'
+ preview: '#preview-panel'
+ tags: '#tutorial_tags'
+
+ modelEvents:
+ 'invalid': 'displayError'
+ 'change:url': 'render'
+
+ events:
+ 'change #tutorial_url': 'loadUrl'
+ "submit #new-tutorial": "save"
+
+ initialize: ->
+ @model = new @collection.model()
+ @service = new EmbedlyService()
+
+ loadUrl: ->
+ if @model.isValidUrl(@ui.url.val())
+ @service.retrieve_info_on(@ui.url.val(), @updateTutorial)
+ @validate()
+
+ updateTutorial: (attributes) =>
+ @model.set
+ url: attributes.url
+ heading: attributes.title
+ description: attributes.description
+ image_url: if _.any(attributes.images) then attributes.images[0].url else ''
+ author: attributes.provider_name
+ author_url: attributes.provider_url
+
+ onRender: ->
+ @ui.tags.tagit({ availableTags: ALL_TAGS })
+
+ validate: ->
+ @model.isValid()
+
+ displayError: (model, error) ->
+ @ui.save_button.attr('disabled', 'disabled')
+ @ui.preview.hide()
+ @ui.url_group.addClass("error")
+ errorTag = $('<span>').addClass('help-inline').text(error)
+ @ui.url_group.find('.controls').append(errorTag)
+
+ save: (event) ->
+ event.preventDefault()
+ event.stopPropagation()
+ @model.set('tags', @ui.tags.val())
+ @ui.save_button.attr('disabled', 'disabled')
+ @collection.create(@model,
+ success: @savedSuccessfully
+ error: @couldNotSave
+ )
+
+ savedSuccessfully: (cake) =>
+ window.location.hash = "tutorials"
+
+ couldNotSave: (cake, xhr) =>
+ @ui.save_button.removeAttr('disabled')
+ error = new CakeSide.Views.ErrorView
+ el: @$('form#new-tutorial'),
+ attributesWithErrors: $.parseJSON(xhr.responseText)
+ error.render()
diff --git a/app/assets/javascripts/views/tutorials/no_tutorials_view.js.coffee b/app/assets/javascripts/views/tutorials/no_tutorials_view.js.coffee
new file mode 100644
index 00000000..979d52e9
--- /dev/null
+++ b/app/assets/javascripts/views/tutorials/no_tutorials_view.js.coffee
@@ -0,0 +1,5 @@
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.NoTutorialsView extends Marionette.ItemView
+ template: JST['templates/tutorials/no_tutorials']
+ tagName: 'li'
diff --git a/app/assets/javascripts/views/tutorials/show_view.js.coffee b/app/assets/javascripts/views/tutorials/show_view.js.coffee
new file mode 100644
index 00000000..544338d6
--- /dev/null
+++ b/app/assets/javascripts/views/tutorials/show_view.js.coffee
@@ -0,0 +1,7 @@
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.ShowView extends Marionette.ItemView
+ template: JST["templates/tutorials/show"]
+ templateHelpers:
+ displayDate: (date) ->
+ date
diff --git a/app/assets/javascripts/views/tutorials/tutorial_view.js.coffee b/app/assets/javascripts/views/tutorials/tutorial_view.js.coffee
new file mode 100644
index 00000000..6ec82e06
--- /dev/null
+++ b/app/assets/javascripts/views/tutorials/tutorial_view.js.coffee
@@ -0,0 +1,10 @@
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.TutorialView extends Marionette.ItemView
+ template: JST['templates/tutorials/tutorial']
+ tagName: 'div'
+ className: 'media'
+
+ templateHelpers:
+ displayDate: (date) ->
+ new Date(date).toLocaleDateString()