OSDN Git Service

Merge branch 'v06sheet' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06sheet
[pettanr/pettanr.git] / app / assets / javascripts / panels.js.coffee
index c203f09..c5466fe 100644 (file)
@@ -2,6 +2,7 @@ $ ->
   confirm_confirm_confirm = () ->\r
     confirm(  )\r
   editor = window.PettanrEditor\r
+  configurations =  window.configurations\r
   WritingFormat = window.PettanrWritingFormat\r
   WritingFormat.load($('#writing_formats'))\r
   SpeechBalloonTemplate = window.PettanrSpeechBalloonTemplate\r
@@ -12,6 +13,93 @@ $ ->
   PictureSizeHelper = window.PettanrPictureSizeHelper\r
   ColorHelper = window.PettanrColorHelper\r
   \r
+  find_configurations = ( hash, key) ->\r
+    if typeof(hash[key]) == 'string'\r
+      find_configurations(hash, hash[key])\r
+    else\r
+      return hash[key]\r
+  \r
+  set_validates = (form) ->\r
+    rules = {}\r
+    $('input', form).map ->\r
+      model_name = $(@).attr('data-model')\r
+      column_name = $(@).attr('column')\r
+      name = $(@).attr('name')\r
+      if model_name and column_name\r
+        model = find_configurations(configurations['models'], model_name)\r
+        rule = model['attributes'][column_name]['rules']\r
+        trace = editor.element_tag_id($(@)) \r
+        if rule\r
+          rules[name] = rule\r
+          $(@).focusout ->\r
+            if editor.is_panel(form)\r
+              validate_panel(form)\r
+            else\r
+              validate_element(form)\r
+    if Object.keys(rules).length > 0\r
+      v = form.validate({ignore:[],rules: rules})\r
+  \r
+  validate_panel = (form) ->\r
+    valid = form.valid()\r
+    bc = if valid\r
+      ''\r
+    else\r
+      '#ef29ef'\r
+    $('a', $('#tabs-1-tab')).map ->\r
+      $(@).css('background-color', bc)\r
+    valid\r
+  \r
+  display_element = (element, vis) ->\r
+    v = if vis\r
+      ''\r
+    else\r
+      'none'\r
+    trace = editor.element_tag_id(element)\r
+    switch element.attr('element_type')\r
+      when 'panel_picture'\r
+        trace = trace + 'div'\r
+    $(trace).css('display', v)\r
+  \r
+  validate_element = (form) ->\r
+    valid = form.valid()\r
+    bc = if valid\r
+      ''\r
+    else\r
+      '#ef29ef'\r
+    display_element(form, valid)\r
+    trace = editor.element_tag_id(form) \r
+    $('.elements-tab', $(trace + 'element_tab')).map  ->\r
+      $(@).css('background-color', bc)\r
+    valid\r
+  \r
+  validate_forms = () ->\r
+    valid = true\r
+    $('form', $('#tabs-1')).map  ->\r
+      form_name = $(@).attr('data-form-name')\r
+      if form_name\r
+        if validate_panel($(@))\r
+        else\r
+          valid = false\r
+    invalid_elements = []\r
+    $('form', $('#tabs-2')).map  ->\r
+      form_name = $(@).attr('data-form-name')\r
+      if form_name\r
+        if validate_element($(@))\r
+        else\r
+          valid = false\r
+          invalid_elements.push form_name\r
+    if invalid_elements.length > 0\r
+      bc = '#ef29ef'\r
+    else\r
+      bc = ''\r
+    $('a', $('#tabs-2-tab')).map ->\r
+      $(@).css('background-color', bc)\r
+    return valid\r
+  $('form').map  ->\r
+    form_name = $(@).attr('data-form-name')\r
+    if form_name\r
+      form = $(this)\r
+      set_validates(form)\r
   $('.panel-editor').map ->\r
     if $(@).attr('current') and parseInt($(@).attr('current')) > 0\r
       editor.pettanr_current_panel_id = parseInt($(@).attr('panel_id'))\r
@@ -72,11 +160,7 @@ $ ->
           $(trace + 'tab_panel').css('display', 'none')\r
           $(trace + 'zsort').css('display', 'none')\r
           $(trace + 'tsort').css('display', 'none')\r
-          switch $(@).attr('element_type')\r
-            when 'panel_picture'\r
-              trace = trace + 'div'\r
-          $(trace).css('display', 'none')\r
-          \r
+          display_element($(@), false)\r
     \r
     $('#pettanr-panel-submit').focusin ->\r
       editor.refresh_attribute($('#pettanr-panel-json'))\r
@@ -421,6 +505,11 @@ $ ->
     \r
     $('.edit_panel' ).map ->\r
       if $(@).attr('jqform')\r
+        $(@).submit ->\r
+          if validate_forms()\r
+            true\r
+          else\r
+            false\r
       else\r
         $(@).submit ->\r
           false\r
@@ -443,4 +532,6 @@ $ ->
     $('.new-element').map ->\r
       $(@).click -> \r
         false\r
-    \r
+    j = JSON.stringify(window.configurations)\r
+    $('#pettanr-configurations').val(j)\r
+\r