X-Git-Url: https://jasonwoof.com/gitweb/?p=crayon_mockup.git;a=blobdiff_plain;f=auto.coffee;h=6d391e8b87da9cafbb93b92c73ed809ac132725d;hp=480fbbe537424daeadba3dc95976d7cbff58b623;hb=5d274b8b3095caf08933dd0474e270571dcc33e9;hpb=804571d5567f5c6b9ec21c4e1db9fcc40aaf6823 diff --git a/auto.coffee b/auto.coffee index 480fbbe..6d391e8 100644 --- a/auto.coffee +++ b/auto.coffee @@ -9,20 +9,26 @@ $tool_options = null # jquery object for tool options line selection = null svg_ns = 'http://www.w3.org/2000/svg' cur_tool = null +cur_tool_name = null mouse = x: 0, y: 0, buttons: [0,0,0] class Tool - constructor: (name) -> - @name = name + constructor: (args) -> + @button = args.button + if @button? + @button.addClass 'disabled' + @tool_options = args.tool_options click: (x, y) -> - button_click: (button) -> mousemove: (x, y) -> keydown: (keycode) -> disable: -> + if @button? + @button.removeClass 'disabled' + @tool_options.empty() class TutorialTool extends Tool - constructor: (toolbar) -> - super 'tutorial' + constructor: (args) -> + super args @paths = [] choose = [ [[219,34],[53,141],[96,143],[92,255],[365,257],[362,145],[407,144,'z']], @@ -45,24 +51,26 @@ class TutorialTool extends Tool svg.appendChild path.element @paths.push path @tip = $ " " - toolbar.append @tip + @tool_options.append @tip disable: -> - @tip.remove() + super() for p in @paths svg.removeChild p.element class DrawTool extends Tool - constructor: (toolbar) -> - super 'draw' + constructor: (args) -> + super args + @tool_options.append $ "Draw tool helpers:" @stop_button = $ 'finish line' @stop_close_button = $ 'close (loop)' @cancel_button = $ 'cancel line' - toolbar.append @stop_button - toolbar.append @stop_close_button - toolbar.append @cancel_button + @tool_options.append @stop_button + @tool_options.append @stop_close_button + @tool_options.append @cancel_button @stop_button.click @stop_drawing.bind @ @stop_close_button.click @stop_close_drawing.bind @ @cancel_button.click @cancel_drawing.bind @ + @update_helper_buttons() click: (x, y) -> if selection? and not selection.drawing? selection = null @@ -72,23 +80,41 @@ class DrawTool extends Tool svg.appendChild path selection.data.push [x, y] update_path selection - button_click: (button) -> - if @[button] - return @[button]() + @update_helper_buttons() + update_helper_buttons: -> + if selection?.drawing? and selection?.data.length > 0 + @cancel_button.removeClass 'disabled' + else + @cancel_button.addClass 'disabled' + if selection?.drawing? and selection?.data.length > 1 + @stop_button.removeClass 'disabled' + else + @stop_button.addClass 'disabled' + if selection?.drawing? and selection?.data.length > 2 + @stop_close_button.removeClass 'disabled' + else + @stop_close_button.addClass 'disabled' cancel_drawing: -> if selection?.drawing? svg.removeChild selection.element selection = null + @update_helper_buttons() return false stop_drawing: -> if selection?.drawing? + if selection?.data.length < 2 + return @cancel_drawing() update_path selection selection = null + @update_helper_buttons() return false stop_close_drawing: -> if selection?.drawing? + if selection?.data.length < 3 + return @stop_drawing() update_path selection, close: true selection = null + @update_helper_buttons() return false mousemove: (x, y) -> mouse.x = x @@ -104,19 +130,23 @@ class DrawTool extends Tool when 27 return @cancel_drawing() disable: -> + super() @stop_drawing() if selection?.drawing? delete selection.drawing class EditTool extends Tool - constructor: (toolbar) -> - super 'draw' - toolbar.append $ "Oops, this tool isn't implemented yet" + constructor: (args) -> + super args + args.tool_options.append $ "Oops, the edit tool isn't implemented yet" class DeleteTool extends Tool - constructor: (toolbar) -> - super 'draw' - toolbar.append $ "Oops, this tool isn't implemented yet" + constructor: (args) -> + super args + args.tool_options.append $ "To delete: click on a line below" + click: (x, y) -> + $svg.find('path:hover').remove() + return false update_path = (path, flags) -> d = '' @@ -134,24 +164,8 @@ switch_to_tool = (tool_class) -> # called automatically on domcontentloaded init = -> - tool_buttons = - draw: button_text: 'draw', factory: DrawTool - edit: button_text: 'edit', factory: EditTool - delete: button_text: 'delete', factory: DeleteTool $container = $ '.crayon_mockup' - $toolbar = $ '
Tools:
' - for k, t of tool_buttons - t.element = $ "" - t.element.text t.button_text - $toolbar.append t.element - do (t) -> - t.element.click -> - if cur_tool? - cur_tool.disable() - ($toolbar.find '.button').removeClass 'disabled' - $tool_options.empty() - cur_tool = new t.factory $tool_options - t.element.addClass 'disabled' + $toolbar = $ '
Tools:
' $tool_options = $ '
' $container.append $toolbar $container.append $tool_options @@ -161,7 +175,32 @@ init = -> svg.setAttribute 'viewBox', "0 0 #{width} #{height}" $svg = $ svg $container.append $svg - cur_tool = new TutorialTool $tool_options + + tool_buttons = + tutorial: default: true, factory: TutorialTool + draw: button_text: 'draw', factory: DrawTool + edit: button_text: 'edit', factory: EditTool + delete: button_text: 'delete', factory: DeleteTool + for k, t of tool_buttons + if t.button_text? + t.button = $ "" + t.button.text t.button_text + $toolbar.append t.button + do (k, t) -> + activate = -> + if cur_tool? + cur_tool.disable() + $container.removeClass "#{cur_tool_name}_tool" + ($toolbar.find '.button').removeClass 'disabled' + cur_tool_name = k + $container.addClass "#{cur_tool_name}_tool" + $tool_options.empty() + cur_tool = new t.factory button: t.button, tool_options: $tool_options + if t.button? + t.button.click activate + if t.default + activate() + $svg.mousedown (e) -> offset = $svg.offset() if cur_tool?