2 confirm_confirm_confirm = () ->
\r
4 new_element_index = {}
\r
5 new_element_index[pettanr_current_panel_id] = 0
\r
7 set_tree_value = (keys, last_attr, value) ->
\r
10 last_attr[key] = value
\r
12 last_attr[key] = last_attr[key] || {}
\r
13 set_tree_value(keys, last_attr[key], value)
\r
15 repeat_texts = ['repeat', 'repeat-x', 'repeat-y', 'no-repeat']
\r
17 is_editable = (p) ->
\r
18 if p.parent().attr('editable')
\r
23 if parseInt(o.attr('no_attr')) > 0
\r
26 if o.attr('column')
\r
27 if o.attr('column') == '_destroy' and o.val().length < 1
\r
34 if o.attr('element_type')
\r
38 is_element_part = (o) ->
\r
39 if o.attr('element_part_type')
\r
43 element_types = {'panel_picture': 'panel_pictures', 'speech_balloon': 'speech_balloons', 'ground_picture': 'ground_pictures', 'ground_color': 'ground_colors'}
\r
44 element_type_to_table = (element_type) ->
\r
45 element_types[element_type]
\r
46 text_align_texts = ['left', 'left', 'right', 'center']
\r
48 make_tree = (attr, o) ->
\r
50 tree = 'panels-' + o.attr('panel_id') + '-'
\r
52 tree = tree + element_type_to_table(o.attr('element_type')) + '_attributes-' + o.attr('element_id') + '-'
\r
53 if is_element_part(o)
\r
54 tree = tree + o.attr('element_part_type') + '_attributes-'
\r
55 tree = tree + o.attr('column')
\r
56 keys = tree.split('-')
\r
57 set_tree_value(keys, attr, o.val())
\r
59 panel_tag_id = (element) ->
\r
60 '#panel' + element.attr('panel_id')
\r
62 element_tag_id = (element) ->
\r
63 '#panel' + element.attr('panel_id') + element.attr('element_type') + element.attr('element_id')
\r
65 element_part_tag_id = (element_part) ->
\r
66 '#panel' + element_part.attr('panel_id') + element_part.attr('element_type') + element_part.attr('element_id') + element_part.attr('element_part_type') + element_part.attr('element_part_id')
\r
68 refresh_attribute = () ->
\r
71 make_tree(attr, $(@))
\r
72 $('textarea').map ->
\r
73 make_tree(attr, $(@))
\r
75 make_tree(attr, $(@))
\r
76 $('#pettanr-panel-json').val(JSON.stringify(attr['panels'][pettanr_current_panel_id.toString() ]))
\r
79 $('#elements-tabs').tabs()
\r
80 $('#new-element-tabs').tabs()
\r
81 $('#new-speech_balloon-tabs').tabs()
\r
82 $('#elements-tabs').addClass( "ui-tabs-vertical ui-helper-clearfix" )
\r
83 $("#elements-tabs li").removeClass("ui-corner-top")
\r
84 $("#elements-tabs li").addClass("ui-corner-left")
\r
85 $("#elements-tabs li").map ->
\r
87 switch $(@).attr('element_type')
\r
88 when 'speech_balloon'
\r
89 trace = element_tag_id($(@))
\r
90 t = $('img', $(trace))
\r
91 when 'panel_picture'
\r
92 trace = element_tag_id($(@)) + 'img'
\r
97 $('.ui-resizable-handle', t.parent()).map ->
\r
98 $(@).css('display', 'block')
\r
100 switch $(@).attr('element_type')
\r
101 when 'speech_balloon'
\r
102 trace = element_tag_id($(@))
\r
103 t = $('img', $(trace))
\r
104 when 'panel_picture'
\r
105 trace = element_tag_id($(@)) + 'img'
\r
110 $('.ui-resizable-handle', t.parent()).map ->
\r
111 $(@).css('display', 'none')
\r
114 $('.ui-icon-destroy').map ->
\r
117 primary: 'ui-icon-close',
\r
123 if confirm('destroy ?')
\r
124 trace = element_tag_id($(@))
\r
125 $(trace + '_destroy').val('true')
\r
126 panel_trace = panel_tag_id($(@))
\r
127 update_t(panel_trace + 'tsort')
\r
128 update_z(panel_trace + 'zsort')
\r
130 $(trace + 'element_tab').css('display', 'none')
\r
131 $(trace + 'tab_panel').css('display', 'none')
\r
132 $(trace + 'zsort').css('display', 'none')
\r
133 $(trace + 'tsort').css('display', 'none')
\r
134 switch $(@).attr('element_type')
\r
135 when 'panel_picture'
\r
136 trace = trace + 'div'
\r
137 $(trace).css('display', 'none')
\r
140 $('#pettanr-panel-submit').focusin ->
\r
141 refresh_attribute()
\r
144 $('.pettanr-comic-panel').map ->
\r
145 if is_editable($(@))
\r
147 stop: ( event, ui ) ->
\r
148 trace = panel_tag_id($(@))
\r
149 w = parseInt($(@).width())
\r
150 h = parseInt($(@).height())
\r
151 $(trace + 'width').val(w)
\r
152 $(trace + 'height').val(h)
\r
153 $('.pettanr-comic-ground-picture').map ->
\r
156 $('.pettanr-comic-ground-color').map ->
\r
162 $('#panel' + pettanr_current_panel_id.toString() + 'width').focusout ->
\r
163 trace = '#panel' + $(@).attr('panel_id')
\r
164 $(trace).width(parseInt( $(@).val()))
\r
166 $('#panel' + pettanr_current_panel_id.toString() + 'height').focusout ->
\r
167 trace = '#panel' + $(@).attr('panel_id')
\r
168 $(trace).height(parseInt( $(@).val()))
\r
170 $('#panel' + pettanr_current_panel_id.toString() + 'border').focusout ->
\r
171 trace = '#panel' + $(@).attr('panel_id')
\r
172 $(trace).css('border-width', parseInt($(@).val()).toString() + 'px')
\r
176 $('.pettanr-panel-picture-wrapper').map ->
\r
178 stop: ( event, ui ) ->
\r
179 trace = '#panel' + $(@).attr('panel_id') + 'panel_picture' + $(@).attr('element_id')
\r
180 img = '#panel' + $(@).attr('panel_id') + 'panel_picture' + $(@).attr('element_id') + 'img'
\r
181 left = $(img).parent().position().left + $(@).position().left
\r
182 top = $(img ).parent().position().top + $(@).position().top
\r
183 $(trace + 'x').val(parseInt(left))
\r
184 $(trace + 'y').val(parseInt(top))
\r
187 $('.panel-picture').map ->
\r
189 stop: ( event, ui ) ->
\r
190 trace = '#panel' + $(@).parent().attr('panel_id') + 'panel_picture' + $(@).parent().attr('element_id')
\r
191 $(trace + 'width').val($(@).width())
\r
192 $(trace + 'height').val($(@).height())
\r
197 refresh_picture = (e, w, h) ->
\r
206 pid = parseInt(e.attr('picture_id')).toString()
\r
207 ext = e.attr('ext')
\r
208 src = '/pictures/' + sd + pid + '.' + ext
\r
213 if $(@).attr('element_type') and $(@).attr('element_type') == 'panel_picture'
\r
215 switch $(@).attr('column')
\r
217 trace = element_tag_id($(@)) + 'div'
\r
218 v = parseInt($(@).val()).toString() + 'px'
\r
219 $(trace).css('left', v)
\r
221 trace = element_tag_id($(@)) + 'div'
\r
222 v = parseInt($(@).val()).toString() + 'px'
\r
223 $(trace).css('top', v)
\r
225 trace = element_tag_id($(@)) + 'img'
\r
226 w = parseInt($(@).val())
\r
227 $(trace).width(Math.abs(w))
\r
228 $(trace).parent().width(Math.abs(w))
\r
229 h = parseInt($(element_tag_id($(@)) + 'height').val())
\r
231 trace = element_tag_id($(@)) + 'img'
\r
232 h = parseInt($(@).val())
\r
233 $(trace).height(Math.abs(h))
\r
234 $(trace).parent().height(Math.abs(h))
\r
235 w = parseInt($(element_tag_id($(@)) + 'width').val())
\r
237 refresh_picture($(trace), w, h)
\r
241 $('.pettanr-comic-balloon' ).map ->
\r
243 stop: ( event, ui ) ->
\r
244 trace = '#panel' + $(@).attr('panel_id') + 'speech_balloon' + $(@).attr('element_id') + 'balloon' + $(@).attr('balloon_id')
\r
245 left = $(@).position().left
\r
246 top = $(@).position().top
\r
247 $(trace + 'x').val(parseInt(left))
\r
248 $(trace + 'y').val(parseInt(top))
\r
252 $('.pettanr-balloon' ).map ->
\r
254 stop: ( event, ui ) ->
\r
255 trace = '#panel' + $(@).parent().attr('panel_id') + 'speech_balloon' + $(@).parent().attr('element_id') + 'balloon' + $(@).parent().attr('balloon_id')
\r
256 $(trace + 'width').val($(@).width())
\r
257 $(trace + 'height').val($(@).height())
\r
258 resize: ( event, ui ) ->
\r
259 trace = '#panel' + $(@).parent().attr('panel_id') + 'speech_balloon' + $(@).parent().attr('element_id')
\r
260 $(trace).width($(@).width())
\r
261 $(trace).height($(@).height())
\r
265 $('.pettanr-comic-speech-inner' ).map ->
\r
267 outer = $(@).parent()
\r
268 sb = outer.parent()
\r
269 trace = '#panel' + sb.attr('panel_id') + 'speech_balloon' + sb.attr('element_id') + 'balloon' + sb.attr('balloon_id')
\r
271 $('.ui-resizable-handle', img.parent()).map ->
\r
272 $(@).css('display', 'block')
\r
274 outer = $(@).parent()
\r
275 sb = outer.parent()
\r
276 trace = '#panel' + sb.attr('panel_id') + 'speech_balloon' + sb.attr('element_id') + 'balloon' + sb.attr('balloon_id')
\r
278 $('.ui-resizable-handle', img.parent()).map ->
\r
279 $(@).css('display', 'none')
\r
284 if $(@).attr('element_type') and $(@).attr('element_type') == 'speech_balloon'
\r
286 switch $(@).attr('column')
\r
288 trace = element_tag_id($(@))
\r
289 v = parseInt($(@).val()).toString() + 'px'
\r
290 $(trace).css('left', v)
\r
292 trace = element_tag_id($(@))
\r
293 v = parseInt($(@).val()).toString() + 'px'
\r
294 $(trace).css('top', v)
\r
296 trace = element_tag_id($(@))
\r
297 v = parseInt($(@).val())
\r
298 $(trace).width(Math.abs(v))
\r
299 trace = '#panel' + $(trace).attr('panel_id') + 'speech_balloon' + $(trace).attr('element_id') + 'balloon' + $(trace).attr('balloon_id')
\r
300 $(trace).parent().width(v)
\r
303 trace = element_tag_id($(@))
\r
304 v = parseInt($(@).val())
\r
305 $(trace).height(Math.abs(v))
\r
306 trace = '#panel' + $(trace).attr('panel_id') + 'speech_balloon' + $(trace).attr('element_id') + 'balloon' + $(trace).attr('balloon_id')
\r
307 $(trace).parent().height(v)
\r
311 $('textarea').map ->
\r
312 if $(@).attr('element_type') and $(@).attr('element_type') == 'speech_balloon'
\r
314 switch $(@).attr('column')
\r
316 trace = '#panel' + $(@).attr('panel_id') + 'speech_balloon' + $(@).attr('element_id') + 'speech' + $(@).attr('element_part_id')
\r
317 wf_sel = $(trace + 'writing_format_id')
\r
318 wf_id = parseInt(wf_sel.val())
\r
319 v = writing_format_functions[writing_formats[wf_id]]($(@).val())
\r
321 $('textarea').map ->
\r
322 if $(@).attr('element_type') and $(@).attr('element_type') == 'speech_balloon'
\r
323 switch $(@).attr('column')
\r
325 $(@).bind('textchange', (event, previousText) ->
\r
326 trace = '#panel' + $(@).attr('panel_id') + 'speech_balloon' + $(@).attr('element_id') + 'speech' + $(@).attr('element_part_id')
\r
327 wf_sel = $(trace + 'writing_format_id')
\r
328 wf_id = parseInt(wf_sel.val())
\r
329 v = writing_format_functions[writing_formats[wf_id]]($(@).val())
\r
330 $(trace).html('<p>' + v + '</p>')
\r
333 if $(@).attr('element_type') and $(@).attr('element_type') == 'speech_balloon'
\r
335 switch $(@).attr('column')
\r
337 trace = element_part_tag_id($(@))
\r
338 $(trace).css('font-size', $(@).val() + 'em')
\r
340 trace = element_part_tag_id($(@))
\r
341 v = parseInt($(@).val())
\r
342 $(trace).css('text-align', text_align_texts[v])
\r
345 if $(@).attr('element_type') and $(@).attr('element_type') == 'speech_balloon' and $(@).attr('column') == 'fore_color'
\r
352 if $(@).attr('element_type') and $(@).attr('element_type') == 'ground_picture'
\r
354 switch $(@).attr('column')
\r
356 trace = element_tag_id($(@))
\r
357 x = parseInt($(@).val()).toString() + 'px'
\r
358 ytrace = '#panel' + $(@).attr('panel_id') + 'ground_picture' + $(@).attr('element_id') + 'y'
\r
359 y = parseInt($(ytrace).val()).toString() + 'px'
\r
360 $(trace).css('background-position', y + ' ' + x)
\r
362 if $(@).attr('element_type') and $(@).attr('element_type') == 'ground_picture'
\r
364 switch $(@).attr('column')
\r
366 trace = element_tag_id($(@))
\r
367 v = parseInt($(@).val())
\r
368 $(trace).css('background-repeat', repeat_texts[v])
\r
375 if $(@).attr('element_type') and $(@).attr('element_type') == 'ground_color' and $(@).attr('column') == 'code'
\r
378 color_slider_change = (trace) ->
\r
379 red = $(trace + 'code_red').slider('value')
\r
380 green = $(trace + 'code_green').slider('value')
\r
381 blue = $(trace + 'code_blue').slider('value')
\r
382 code = (red << 16) + (green << 8) + (blue)
\r
383 phex = "000000" + code.toString(16)
\r
384 hex = code.toString(16)
\r
385 h = phex.substring(phex.length - 6)
\r
386 $(trace + 'code_swatch').css('background-color', '#' + h)
\r
387 $(trace + 'code_hex').html('HEX: #' + h)
\r
388 $(trace + 'code_rgb').html('RGB: (' + red + ',' + green + ',' +blue + ')')
\r
390 if is_element_part($(trace))
\r
391 $(trace + 'fore_color').val(code)
\r
392 $(trace).css('color', v)
\r
394 $(trace + 'code').val(code)
\r
395 $(trace).css('background-color', v)
\r
397 $('.colorpicker').map ->
\r
398 if is_element_part($(@))
\r
399 code_picker_trace = element_part_tag_id($(@))
\r
400 code = parseInt($(code_picker_trace + 'fore_color').val())
\r
402 code_picker_trace = element_tag_id($(@))
\r
403 code = parseInt($(code_picker_trace + 'code').val())
\r
404 red = (code >> 16) & 0xFF
\r
405 green = (code >> 8) & 0xFF
\r
407 $(code_picker_trace + 'code_red').slider {
\r
408 orientation: 'horizontal',
\r
412 change: ( event, ui ) ->
\r
413 if is_element_part($(@).parent())
\r
414 trace = element_part_tag_id($(@).parent())
\r
416 trace = element_tag_id($(@).parent())
\r
417 color_slider_change(trace)
\r
419 $(code_picker_trace + 'code_green').slider {
\r
420 orientation: 'horizontal',
\r
424 change: ( event, ui ) ->
\r
425 if is_element_part($(@).parent())
\r
426 trace = element_part_tag_id($(@).parent())
\r
428 trace = element_tag_id($(@).parent())
\r
429 color_slider_change(trace)
\r
431 $(code_picker_trace + 'code_blue').slider {
\r
432 orientation: 'horizontal',
\r
436 change: ( event, ui ) ->
\r
437 if is_element_part($(@).parent())
\r
438 trace = element_part_tag_id($(@).parent())
\r
440 trace = element_tag_id($(@).parent())
\r
441 color_slider_change(trace)
\r
443 color_slider_change(code_picker_trace)
\r
444 $('.colorpicker-wrap').map ->
\r
445 $(@).css('display', 'block')
\r
447 update_t = (ultrace) ->
\r
449 $(ultrace + ' li').map ->
\r
450 trace = element_tag_id($(@))
\r
451 if $(trace + '_destroy').val().length < 1
\r
452 $(trace + 't').val(t)
\r
456 $('.tsort').map ->
\r
458 update: ( event, ui ) ->
\r
459 trace = panel_tag_id($(@))
\r
460 update_t(trace + 'tsort')
\r
462 $('.t-sort li').map ->
\r
463 $(@).disableSelection()
\r
465 update_z = (ultrace) ->
\r
467 $(ultrace + ' li').map ->
\r
468 trace = element_tag_id($(@))
\r
470 if $(trace + '_destroy').val().length < 1
\r
471 $(trace + 'z').val(z)
\r
472 switch $(@).attr('element_type')
\r
473 when 'panel_picture'
\r
474 trace = trace + 'div'
\r
475 $(trace).css('zIndex', z)
\r
479 $('.zsort').map ->
\r
481 update: ( event, ui ) ->
\r
482 trace = panel_tag_id($(@))
\r
483 update_z(trace + 'zsort')
\r
485 $('.z-sort li').map ->
\r
486 $(@).disableSelection()
\r
488 $('.panel_picture_width_tool').map ->
\r
489 $(@).html('<button class="wreverse">Rev</button><button class="wdouble">x2</button><button class="whalf">/2</button>')
\r
491 $('.wreverse').click ->
\r
493 trace = element_tag_id(d)
\r
494 f = $(trace + 'width')
\r
497 f = $(trace + 'height')
\r
499 refresh_picture($(trace + 'img'), w, h)
\r
501 $('.wdouble').click ->
\r
503 trace = element_tag_id(d)
\r
504 f = $(trace + 'width')
\r
507 $(trace + 'img').width(Math.abs(w))
\r
508 $(trace + 'img').parent().width(Math.abs(w))
\r
510 $('.whalf').click ->
\r
512 trace = element_tag_id(d)
\r
513 f = $(trace + 'width')
\r
514 w = Math.floor(f.val() / 2)
\r
516 $(trace + 'img').width(Math.abs(w))
\r
517 $(trace + 'img').parent().width(Math.abs(w))
\r
519 $('.panel_picture_height_tool').map ->
\r
520 $(@).html('<button class="hreverse">Rev</button><button class="hdouble">x2</button><button class="hhalf">/2</button>')
\r
522 $('.hreverse').click ->
\r
524 trace = element_tag_id(d)
\r
525 f = $(trace + 'height')
\r
528 f = $(trace + 'width')
\r
530 refresh_picture($(trace + 'img'), w, h)
\r
532 $('.hdouble').click ->
\r
534 trace = element_tag_id(d)
\r
535 f = $(trace + 'height')
\r
538 $(trace + 'img').height(Math.abs(h))
\r
539 $(trace + 'img').parent().height(Math.abs(h))
\r
541 $('.hhalf').click ->
\r
543 trace = element_tag_id(d)
\r
544 f = $(trace + 'height')
\r
545 h = Math.floor(f.val() / 2)
\r
547 $(trace + 'img').height(Math.abs(h))
\r
548 $(trace + 'img').parent().height(Math.abs(h))
\r
551 # disable form actions
\r
552 # hide submit buttons
\r
553 $('.edit_panel_picture' ).map ->
\r
556 $('.edit_speech_balloon' ).map ->
\r
559 $('.edit_ground_picture' ).map ->
\r
562 $('.edit_ground_color' ).map ->
\r
566 $('.edit_panel' ).map ->
\r
567 if $(@).attr('jqform')
\r
572 $('.submit' ).map ->
\r
577 if $(@).attr('element_type') and $(@).attr('column')
\r
578 switch $(@).attr('column')
\r
581 $(@).parent().hide() #label
\r
583 # add button on new form
\r
584 $('.submit-new-form').map ->
\r
585 $(@).html('<button class="new-element">add</button>')
\r
587 $('.new-element').map ->
\r