@@ -10,6 +10,12 @@ jQuery ->
10
10
noneSelectedText : " Select actors" ,
11
11
selectedText : " # actors selected"
12
12
).multiselectfilter ()
13
+ # Multiselect for movie index, to filter movies by one or more directors
14
+ $ (" select#director" ).multiselect (
15
+ selectedList : false ,
16
+ noneSelectedText : " Select directors" ,
17
+ selectedText : " # directors selected"
18
+ ).multiselectfilter ()
13
19
# Toggle the filter controls
14
20
$ (" #filters-toggle" ).click ( ->
15
21
$ (" #new-filters" ).toggle (" blind" )
@@ -167,6 +173,74 @@ jQuery ->
167
173
)
168
174
)
169
175
176
+ # Helper function for inserting html representing directors
177
+ logDirector = (name , val ) ->
178
+ # console.log(name)
179
+ $ (" #director-list" ).append ($ (" <li>" ).text (name).attr (" data-id" , val).append ($ (" <p class=\" delete-director\" >" ).button (
180
+ icons :
181
+ primary : " ui-icon\- closethick"
182
+ text : false
183
+ ).click ( ->
184
+ $ (this ).parent ().remove ()
185
+ $ (" option.director[value=" + val+ " ]" ).remove ())))
186
+ $ (" #movie_directors" ).append (" <option class=\" director\" selected=\" true\" value=\" " + val + " \" >" + name + " </option>" )
187
+ # Button to remove director's from the movie's list
188
+ $ (" .delete-director" ).button (
189
+ icons :
190
+ primary : " ui-icon\- closethick"
191
+ text : false
192
+ ).click ( ->
193
+ id = $ (this ).parent ().attr (" data-id" )
194
+ $ (this ).parent ().remove ()
195
+ $ (" option.director[value=" + id+ " ]" ).remove ())
196
+ # Autocomplete box for adding directors to the movie's list
197
+ $ (" .director-picker" ).autocomplete (
198
+ source : (request , response ) ->
199
+ $ .getJSON (" /directors.json" , (rawdata ) ->
200
+ matcher = new RegExp ($ .ui .autocomplete .escapeRegex (request .term ), " i" )
201
+ data = []
202
+ for obj in rawdata
203
+ data .push ({" label" : obj .firstname + " " + obj .lastname , " value" : obj .id })
204
+ response ($ .grep (data, (el , index ) ->
205
+ return matcher .test (el .label )
206
+ ))
207
+ )
208
+ select : (event , ui )->
209
+ if ui .item && ($ (" option.director[value=" + ui .item .value + " ]" ).length == 0 )
210
+ logDirector (ui .item .label , ui .item .value )
211
+ event .preventDefault ()
212
+ $ (this ).autocomplete (" close" )
213
+ $ (this ).val (" " )
214
+ response : (event , ui ) ->
215
+ if ui .content .length == 0
216
+ strg = this .value
217
+ length = strg .length
218
+ idex = strg .lastIndexOf " " # seperates firstname and lastname based on last space
219
+ fname = strg .substr (0 , idex)
220
+ lname = strg .substr (idex+ 1 , length - idex - 1 )
221
+ $ (" #create-new-director" ).show ().text (" Create " + this .value ).attr (" data-firstname" , fname).attr (" data-lastname" , lname)
222
+ else
223
+ $ (" #create-new-director" ).hide ()
224
+ )
225
+ # Button for adding new director to the database
226
+ $ (" #create-new-director" ).click ( ->
227
+ firstname = $ (this ).attr (" data-firstname" )
228
+ lastname = $ (this ).attr (" data-lastname" )
229
+ $ .ajax (
230
+ url : " /directors.json" ,
231
+ type : " POST" ,
232
+ data :
233
+ " director[firstname]" : firstname,
234
+ " director[lastname]" : lastname,
235
+ success : (a ,b ,c ,d ) ->
236
+ logDirector (firstname + " " + lastname, a .id )
237
+ $ (" #create-new-director" ).hide ()
238
+ failure : (a ,b ,c ,d ) ->
239
+ alert " Failure"
240
+ console .log (a, b, c, d)
241
+ )
242
+ )
243
+
170
244
# Control for adding a viewing date to the movie
171
245
if $ (" body" ).data (" action" ) == " show"
172
246
convertDateFormat = (date ) ->
0 commit comments