app/soc/content/js/survey-take-090708.js
changeset 2572 1ad6d986be6d
parent 2570 851640749319
child 2800 cd9eed2b787e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/content/js/survey-take-090708.js	Wed Jul 08 11:50:02 2009 +0200
@@ -0,0 +1,153 @@
+/* Copyright 2009 the Melange authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+*
+* @author <a href="mailto:ajaksu@gmail.com">Daniel Diniz</a>
+* @author <a href="mailto:jamesalexanderlevy@gmail.com">James Levy</a>
+*/
+
+(function ($) {
+  $(function () {
+
+    /*
+    * == Setup Survey on Page Load ==
+    *
+    */
+
+    var widget = $('div#survey_widget');
+
+    // TODO(ajaksu) survey below is unused, remove if no known use is predicted
+    var survey = widget.find('tbody:first');
+
+    if (widget.hasClass('create')) {
+
+      /*
+      * == Set Custom Field Rules ==
+      *
+      */
+      widget.find('textarea').each(
+        function () {
+          $(this).attr('overflow', 'auto').growfield();
+        }
+      );
+    }
+
+    else { // survey has saved results
+      widget.find('textarea').each(
+        function () {
+          $(this).attr('overflow', 'auto').growfield();
+        }
+      ).end()
+      .find('.pick_multi').each(
+        function () {
+          $(this).find('input').each(
+            function () {
+              // if $(this).attr('checked', 'true');});
+            }
+          );
+        }
+      );
+    }
+
+    /*
+    * == Configure Project ==
+    *
+    */
+
+    // remember if form has been touched
+    $('input,textarea,select').change(
+      function () {
+        if ($(this).attr('id') === 'id_project') {
+          return;
+        }
+        $('form:first').data('touched', true);
+      }
+    );
+
+    // remember initially chosen project choice
+    $('select#id_project').blur(
+      function () {
+        $(this).data('selected', $(this).find('option:first'));
+      }
+    ).change(
+      function () {
+        if ($('form:first').data('touched') === true) {
+          // if form has been touched, send confirmation dialog
+          var save_check = confirm(["Switching projects will lose unsaved ",
+                                    "edits made to this survey."].join(""));
+          if (!save_check) {
+            $(this).data('selected').attr('selected', 'selected');
+            return false;
+          }
+        }
+
+        if ($(this).val() !== 'None') {
+          // redirect with new project GET param
+          window.location = [window.location.href.split('?')[0],  "?project=",
+                             $(this).val()].join("");
+        }
+      }
+    );
+
+    // insert project link after project select field
+    $('div#project_link').insertAfter($('select#id_project')).show();
+
+    /*
+    * == Survey Submission Handler ==
+    *
+    */
+
+    // validate form
+    $('input[type=submit]').bind(
+      'click',
+      function (e) {
+        e.preventDefault();
+
+        // validate project and grade choice fields
+        if ($('select#id_project') &&
+        $('select#id_project').val() === 'None') {
+          return alert('Please Choose a Project');
+        }
+
+        if ($('select#id_grade') && $('select#id_grade').val() === 'None') {
+          return alert('Please Choose a Grade');
+        }
+        $('form').trigger('submit');
+
+      }
+    );
+
+    $('form').bind('submit',
+      function () {
+        $('input#id_s_html').val(
+          widget.find('div#survey_options').remove().end().html()
+        );
+      }
+    );
+
+   /*
+   * == Customize Comment Appearance ==
+   */
+
+   var comments = widget.find('td > .comment');
+   comments.each(function(){
+     $(this).parents('tr:first')
+           .prev().css({'margin-top': '-10px'})
+           .find('label').css({'font-size': '11px'});
+   });
+
+  });
+}(jQuery));