summaryrefslogtreecommitdiffstats
path: root/extensions/MozProjectReview/web
diff options
context:
space:
mode:
authorDave Lawrence <dlawrence@mozilla.com>2013-03-07 23:04:11 +0100
committerDave Lawrence <dlawrence@mozilla.com>2013-03-07 23:04:11 +0100
commit136d427d43ec2536ab2b23291ff6ee7614a93c49 (patch)
tree198f0a01f45556147279b2a47037273d04d7e608 /extensions/MozProjectReview/web
parentd22f87824f5f201453482ae74ceaabb2b8f70ecb (diff)
downloadbugzilla-136d427d43ec2536ab2b23291ff6ee7614a93c49.tar.gz
bugzilla-136d427d43ec2536ab2b23291ff6ee7614a93c49.tar.xz
Bug 841202 - Refactor code in current MozProjectReview extension to be less complex and more maintainable
Diffstat (limited to 'extensions/MozProjectReview/web')
-rw-r--r--extensions/MozProjectReview/web/js/moz_project_review.js446
1 files changed, 272 insertions, 174 deletions
diff --git a/extensions/MozProjectReview/web/js/moz_project_review.js b/extensions/MozProjectReview/web/js/moz_project_review.js
index 4c5a5314e..dca67f2ae 100644
--- a/extensions/MozProjectReview/web/js/moz_project_review.js
+++ b/extensions/MozProjectReview/web/js/moz_project_review.js
@@ -3,207 +3,305 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This Source Code Form is "Incompatible With Secondary Licenses", as
- * defined by the Mozilla Public License, v. 2.0.
+ * defined by the Mozilla Public License, v. 2.0.
*/
-YAHOO.namespace('MozProjectReview');
-
-var MPR = YAHOO.MozProjectReview;
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
-MPR.required_fields = {
- "initial_questions": {
- "short_desc": "Please enter a value for project or feature name in the initial questions section",
- "cc": "Please enter a value for points of contact in the initial questions section",
- "urgency": "Please enter a value for urgency in the initial questions section",
- "key_initiative": "Please select a value for key initiative in the initial questions section",
- "project_status": "Please select a value for project status in the initial questions section",
- "mozilla_data": "Please select a value for mozilla data in the initial questions section",
- "new_or_change": "Please select a value for new or change to existing project in the initial questions section",
- "separate_party": "Please select a value for separate party in the initial questions section"
- },
- "finance_questions": {
- "finance_purchase_vendor": "Please enter a value for vendor in the finance questions section",
- "finance_purchase_what": "Please enter a value for what in the finance questions section",
- "finance_purchase_why": "Please enter a value for why in the finance questions section",
- "finance_purchase_risk": "Please enter a value for risk in the finance questions section",
- "finance_purchase_alternative": "Please enter a value for alternative in the finance questions section",
- "finance_purchase_inbudget": "Please enter a value for in budget in the finance questions section",
- "finance_purchase_urgency": "Please select a value for urgency in the finance questions section",
- "finance_purchase_cost": "Please enter a value for total cost in the finance questions section"
+var MPR = {
+ required_fields: {
+ "initial_questions": {
+ "short_desc": "Please enter a value for project or feature name in the initial questions section",
+ "cc": "Please enter a value for points of contact in the initial questions section",
+ "urgency": "Please enter a value for urgency in the initial questions section",
+ "key_initiative": "Please select a value for key initiative in the initial questions section",
+ "project_status": "Please select a value for project status in the initial questions section",
+ "mozilla_data": "Please select a value for mozilla data in the initial questions section",
+ "new_or_change": "Please select a value for new or change to existing project in the initial questions section",
+ "separate_party": "Please select a value for separate party in the initial questions section"
+ },
+ "finance_questions": {
+ "finance_purchase_vendor": "Please enter a value for vendor in the finance questions section",
+ "finance_purchase_what": "Please enter a value for what in the finance questions section",
+ "finance_purchase_why": "Please enter a value for why in the finance questions section",
+ "finance_purchase_risk": "Please enter a value for risk in the finance questions section",
+ "finance_purchase_alternative": "Please enter a value for alternative in the finance questions section",
+ "finance_purchase_inbudget": "Please enter a value for in budget in the finance questions section",
+ "finance_purchase_urgency": "Please select a value for urgency in the finance questions section",
+ "finance_purchase_cost": "Please enter a value for total cost in the finance questions section"
+ },
+ "legal_questions": {
+ "legal_priority": "Please select a priority for the legal questions section",
+ "legal_help_from_legal": "Please describe the help needed from the Legal department"
+ },
+ "legal_sow_questions": {
+ "legal_sow_vendor_name": "Please enter a value for SOW legal vendor name",
+ "legal_sow_vendor_address": "Please enter a value for SOW vendor address",
+ "legal_sow_vendor_email": "Please enter a value for SOW vendor email for notices",
+ "legal_sow_vendor_mozcontact": "Please enter a value for SOW Mozilla contact",
+ "legal_sow_vendor_contact": "Please enter a value for SOW vendor contact and email address",
+ "legal_sow_vendor_services": "Please enter a value for SOW vendor services description",
+ "legal_sow_vendor_deliverables": "Please enter a value for SOW vendor deliverables description",
+ "legal_sow_start_date": "Please enter a value for SOW vendor start date",
+ "legal_sow_end_date": "Please enter a value for SOW vendor end date",
+ "legal_sow_vendor_payment": "Please enter a value for SOW vendor payment amount",
+ "legal_sow_vendor_payment_basis": "Please enter a value for SOW vendor payment basis",
+ "legal_sow_vendor_payment_schedule": "Please enter a value for SOW vendor payment schedule",
+ "legal_sow_vendor_total_max": "Please enter a value for SOW vendor maximum total to be paid",
+ "legal_sow_vendor_product_line": "Please enter a value for SOW vendor product line"
+ }
},
- "legal_questions": {
- "legal_priority": "Please select a priority for the legal questions section",
- "legal_help_from_legal": "Please describe the help needed from the Legal department",
+
+ select_inputs: [
+ 'urgency',
+ 'key_initiative',
+ 'project_status',
+ 'mozilla_data',
+ 'new_or_change',
+ 'mozilla_project',
+ 'separate_party',
+ 'relationship_type',
+ 'data_access',
+ 'vendor_cost',
+ 'po_needed',
+ 'sec_affects_products',
+ 'privacy_policy_project',
+ 'privacy_policy_user_data',
+ 'privacy_policy_vendor_user_data',
+ 'privacy_policy_vendor_questionnaire',
+ 'legal_priority',
+ 'legal_sow_vendor_product_line',
+ 'legal_vendor_services_where',
+ 'finance_purchase_inbudget',
+ 'finance_purchase_urgency',
+ 'data_safety_user_data',
+ 'data_safety_retention',
+ 'data_safety_separate_party',
+ 'data_safety_community_visibility'
+ ],
+
+ init: function () {
+ // Bind the updateSections function to each of the inputs desired
+ for (var i = 0, l = this.select_inputs.length; i < l; i++) {
+ Event.on(this.select_inputs[i], 'change', MPR.updateSections);
+ }
+ MPR.updateSections();
},
- "legal_sow_questions": {
- "legal_sow_vendor_name": "Please enter a value for SOW legal vendor name",
- "legal_sow_vendor_address": "Please enter a value for SOW vendor address",
- "legal_sow_vendor_email": "Please enter a value for SOW vendor email for notices",
- "legal_sow_vendor_mozcontact": "Please enter a value for SOW Mozilla contact",
- "legal_sow_vendor_contact": "Please enter a value for SOW vendor contact and email address",
- "legal_sow_vendor_services": "Please enter a value for SOW vendor services description",
- "legal_sow_vendor_deliverables": "Please enter a value for SOW vendor deliverables description",
- "legal_sow_start_date": "Please enter a value for SOW vendor start date",
- "legal_sow_end_date": "Please enter a value for SOW vendor end date",
- "legal_sow_vendor_payment": "Please enter a value for SOW vendor payment amount",
- "legal_sow_vendor_payment_basis": "Please enter a value for SOW vendor payment basis",
- "legal_sow_vendor_payment_schedule": "Please enter a value for SOW vendor payment schedule",
- "legal_sow_vendor_total_max": "Please enter a value for SOW vendor maximum total to be paid",
- "legal_sow_vendor_product_line": "Please enter a value for SOW vendor product line",
- }
-};
-MPR.toggleSpecialSections = function () {
- var mozilla_data_select = Dom.get('mozilla_data');
- var data_access_select = Dom.get('data_access');
- var vendor_cost_select = Dom.get('vendor_cost');
+ updateSections: function () {
+ // Sections that will be hidden/shown based on the input values
+ // Start out as all false except for initial questions which is always visible
+ var page_sections = {
+ initial_questions: true,
+ key_initiative_other_row: false,
+ initial_separate_party_questions: false,
+ finance_questions: false,
+ finance_purchase_notinbudget_why_row: false,
+ po_needed_row: false,
+ legal_questions: false,
+ legal_sow_questions: false,
+ legal_vendor_single_country: false,
+ legal_vendor_services_where_row: false,
+ sec_review_questions: false,
+ privacy_policy_project_questions: false,
+ privacy_policy_vendor_questions: false,
+ data_safety_questions: false,
+ data_safety_extra_questions: false,
+ mozilla_project_row: false,
+ privacy_policy_project_link_row: false,
+ privacy_policy_project_user_data_bug_row: false,
+ privacy_policy_vendor_extra: false,
+ data_safety_extra_questions: false,
+ data_safety_retention_length_row: false,
+ data_safety_separate_party_data_row: false,
+ data_safety_communication_channels_row: false,
+ data_safety_communication_plan_row: false,
+ };
- if (mozilla_data_select.value == 'Yes') {
- Dom.removeClass('legal_questions', 'bz_default_hidden');
- Dom.removeClass('privacy_policy_project_questions', 'bz_default_hidden');
- Dom.removeClass('data_safety_questions', 'bz_default_hidden');
- Dom.removeClass('sec_review_questions', 'bz_default_hidden');
- }
- else {
- if (Dom.get('separate_party').value != 'Yes')
- Dom.addClass('legal_questions', 'bz_default_hidden');
- Dom.addClass('privacy_policy_project_questions', 'bz_default_hidden');
- Dom.addClass('data_safety_questions', 'bz_default_hidden');
- Dom.addClass('sec_review_questions', 'bz_default_hidden');
- }
+ if (Dom.get('key_initiative').value == 'Other') {
+ page_sections.key_initiative_other_row = true;
+ }
- if (Dom.get('separate_party').value == 'Yes'
- && Dom.get('relationship_type').value == 'Vendor/Services')
- {
- Dom.removeClass('legal_sow_section', 'bz_default_hidden');
- }
+ if (Dom.get('new_or_change').value == 'Existing') {
+ page_sections.mozilla_project_row = true;
+ }
- if (data_access_select.value == 'Yes' || mozilla_data_select.value == 'Yes') {
- Dom.removeClass('sec_review_questions', 'bz_default_hidden');
- }
- else {
- Dom.addClass('sec_review_questions', 'bz_default_hidden');
- }
+ if (Dom.get('new_or_change').value == 'New')
+ page_sections.legal_questions = true;
- if (data_access_select.value == 'Yes') {
- Dom.removeClass('privacy_policy_vendor_questions', 'bz_default_hidden');
- }
- else {
- Dom.addClass('privacy_policy_vendor_questions', 'bz_default_hidden');
- }
+ if (Dom.get('mozilla_data').value == 'Yes') {
+ page_sections.legal_questions = true;
+ page_sections.privacy_policy_project_questions = true;
+ page_sections.data_safety_questions = true;
+ page_sections.sec_review_questions = true;
+ }
- if (vendor_cost_select.value == '> $25,000') {
- Dom.removeClass('finance_questions', 'bz_default_hidden');
- }
- else {
- Dom.addClass('finance_questions', 'bz_default_hidden');
- }
-}
+ if (Dom.get('separate_party').value == 'Yes') {
+ page_sections.initial_separate_party_questions = true;
-MPR.toggleVisibleById = function () {
- var args = Array.prototype.slice.call(arguments);
- var select = args.shift();
- var value = args.shift();
- var ids = args;
+ if (Dom.get('relationship_type').value
+ && Dom.get('relationship_type').value != 'Hardware Purchase')
+ {
+ page_sections.legal_questions = true;
+ }
- if (typeof select == 'string') {
- select = Dom.get(select);
- }
+ if (Dom.get('relationship_type').value == 'Vendor/Services'
+ || Dom.get('relationship_type').value == 'Distribution/Bundling')
+ {
+ page_sections.legal_sow_questions = true;
+ page_sections.legal_vendor_services_where_row = true;
+ }
+
+ if (Dom.get('relationship_type').value == 'Hardware Purchase') {
+ page_sections.finance_questions = true;
+ }
+
+ if (Dom.get('data_access').value == 'Yes') {
+ page_sections.legal_questions = true;
+ page_sections.sec_review_questions = true;
+ page_sections.privacy_policy_vendor_questions = true;
+ }
+
+ if (Dom.get('vendor_cost').value == '<= $25,000') {
+ page_sections.po_needed_row = true;
+ }
+
+ if (Dom.get('po_needed').value == 'Yes') {
+ page_sections.finance_questions = true;
+ }
- for (var i = 0; i < ids.length; i++) {
- if (select.value == value) {
- Dom.removeClass(ids[i], 'bz_default_hidden');
+ if (Dom.get('vendor_cost').value == '> $25,000') {
+ page_sections.finance_questions = true;
+ }
}
- else {
- Dom.addClass(ids[i], 'bz_default_hidden');
+
+ if (Dom.get('legal_vendor_services_where').value == 'A single country') {
+ page_sections.legal_vendor_single_country = true;
}
- }
-}
-
-MPR.validateAndSubmit = function () {
- var alert_text = '';
- var section = '';
- for (section in MPR.required_fields) {
- if (!Dom.hasClass(section, 'bz_default_hidden')) {
- var field = '';
- for (field in MPR.required_fields[section]) {
- if (!MPR.isFilledOut(field)) {
- alert_text += MPR.required_fields[section][field] + "\n";
+
+ if (Dom.get('finance_purchase_inbudget').value == 'No') {
+ page_sections.finance_purchase_notinbudget_why_row = true;
+ }
+
+ if (Dom.get('privacy_policy_project').value == 'Yes') {
+ page_sections.privacy_policy_project_link_row = true;
+ }
+
+ if (Dom.get('privacy_policy_user_data').value == 'Yes') {
+ page_sections.privacy_policy_project_user_data_bug_row = true;
+ }
+
+ if (Dom.get('privacy_policy_vendor_user_data').value == 'Yes') {
+ page_sections.privacy_policy_vendor_extra = true;
+ }
+
+ if (Dom.get('data_safety_user_data').value == 'Yes') {
+ page_sections.data_safety_extra_questions = true;
+ }
+
+ if (Dom.get('data_safety_retention').value == 'Yes') {
+ page_sections.data_safety_retention_length_row = true;
+ }
+
+ if (Dom.get('data_safety_separate_party').value == 'Yes') {
+ page_sections.data_safety_separate_party_data_row = true;
+ }
+
+ if (Dom.get('data_safety_community_visibility').value == 'Yes') {
+ page_sections.data_safety_communication_channels_row = true;
+ }
+
+ if (Dom.get('data_safety_community_visibility').value == 'No') {
+ page_sections.data_safety_communication_plan_row = true;
+ }
+
+ // Toggle the individual page_sections
+ for (section in page_sections) {
+ MPR.toggleShowSection(section, page_sections[section]);
+ }
+ },
+
+ toggleShowSection: function (section, show) {
+ if (show) {
+ Dom.removeClass(section, 'bz_default_hidden');
+ }
+ else {
+ Dom.addClass(section ,'bz_default_hidden');
+ }
+ },
+
+ validateAndSubmit: function () {
+ var alert_text = '';
+ var section = '';
+ for (section in this.required_fields) {
+ if (!Dom.hasClass(section, 'bz_default_hidden')) {
+ var field = '';
+ for (field in MPR.required_fields[section]) {
+ if (!MPR.isFilledOut(field)) {
+ alert_text += this.required_fields[section][field] + "\n";
+ }
}
}
}
- }
+
+ // Special case checks
+ if (Dom.get('relationship_type').value == 'Vendor/Services'
+ && Dom.get('legal_vendor_services_where').value == '')
+ {
+ alert_text += "Please select a value for vendor services where\n";
+ }
- if (Dom.get('relationship_type').value == 'Vendor/Services'
- && Dom.get('legal_vendor_services_where').value == '')
- {
- alert_text += "Please select a value for vendor services where\n";
- }
+ if (Dom.get('relationship_type').value == 'Vendor/Services'
+ && Dom.get('legal_vendor_services_where').value == 'A single country'
+ && Dom.get('legal_vendor_single_country').value == '')
+ {
+ alert_text += "Please select a value for vendor services where single country\n";
+ }
- if (Dom.get('relationship_type').value == 'Vendor/Services'
- && Dom.get('legal_vendor_services_where').value == 'A single country'
- && Dom.get('legal_vendor_single_country').value == '')
- {
- alert_text += "Please select a value for vendor services where single country\n";
- }
+ if (Dom.get('key_initiative').value == 'Other') {
+ if (!MPR.isFilledOut('key_initiative_other')) {
+ alert_text += "Please enter a value for key initiative in the initial questions section\n";
+ }
+ }
- if (Dom.get('key_initiative').value == 'Other') {
- if (!MPR.isFilledOut('key_initiative_other'))
- alert_text += "Please enter a value for key initiative in the initial questions section\n";
- }
+ if (Dom.get('separate_party').value == 'Yes') {
+ if (!MPR.isFilledOut('relationship_type')) {
+ alert_text += "Please select a value for type of relationship\n";
+ }
+ if (!MPR.isFilledOut('data_access')) {
+ alert_text += "Please select a value for data access\n";
+ }
+ if (!MPR.isFilledOut('vendor_cost')) {
+ alert_text += "Please select a value for vendor cost\n";
+ }
+ }
- if (Dom.get('separate_party').value == 'Yes') {
- if (!MPR.isFilledOut('relationship_type')) alert_text += "Please select a value for type of relationship\n";
- if (!MPR.isFilledOut('data_access')) alert_text += "Please select a value for data access\n";
- if (!MPR.isFilledOut('vendor_cost')) alert_text += "Please select a value for vendor cost\n";
- }
+ if (Dom.get('finance_purchase_inbudget').value == 'No') {
+ if (!MPR.isFilledOut('finance_purchase_notinbudget_why')) {
+ alert_text += "Please include additional description for the out of budget line item\n";
+ }
+ }
- if (Dom.get('finance_purchase_inbudget').value == 'No') {
- if (!MPR.isFilledOut('finance_purchase_notinbudget_why'))
- alert_text += "Please include additional description for the out of budget line item\n";
- }
+ if (Dom.get('vendor_cost').value == '<= $25,000'
+ && Dom.get('po_needed').value == '')
+ {
+ alert_text += "Please select whether a PO is needed or not\n";
+ }
- if (Dom.get('vendor_cost').value == '<= $25,000'
- && Dom.get('po_needed').value == '')
- {
- alert_text += "Please select whether a PO is needed or not\n";
- }
+ if (alert_text) {
+ alert(alert_text);
+ return false;
+ }
- if (alert_text) {
- alert(alert_text);
- return false;
+ return true;
+ },
+
+ //Takes a DOM element id and makes sure that it is filled out
+ isFilledOut: function (elem_id) {
+ var str = Dom.get(elem_id).value;
+ return str.length > 0 ? true : false;
}
+};
- return true;
-}
-
-YAHOO.util.Event.onDOMReady(function() {
- MPR.toggleSpecialSections();
- MPR.toggleVisibleById('new_or_change', 'Existing', 'mozilla_project_row');
- MPR.toggleVisibleById('separate_party', 'Yes', 'initial_separate_party_questions');
- MPR.toggleVisibleById('relationship_type', 'Vendor/Services', 'legal_sow_section');
- MPR.toggleVisibleById('vendor_cost', '> $25,000', 'finance_questions');
- MPR.toggleVisibleById('privacy_policy_project', 'Yes', 'privacy_policy_project_link_row');
- MPR.toggleVisibleById('privacy_policy_user_data', 'Yes', 'privacy_policy_project_user_data_bug_row');
- MPR.toggleVisibleById('privacy_policy_vendor_user_data', 'Yes', 'privacy_policy_vendor_extra');
- MPR.toggleVisibleById('data_safety_user_data', 'Yes', 'data_safety_extra_questions');
- MPR.toggleVisibleById('data_safety_retention', 'Yes', 'data_safety_retention_length_row');
- MPR.toggleVisibleById('data_safety_separate_party', 'Yes', 'data_safety_separate_party_data_row');
- MPR.toggleVisibleById('data_safety_community_visibility', 'Yes', 'data_safety_communication_channels_row');
- MPR.toggleVisibleById('data_safety_community_visibility', 'No', 'data_safety_communication_plan_row');
-});
-
-//Takes a DOM element id and makes sure that it is filled out
-MPR.isFilledOut = function (elem_id) {
- var str = Dom.get(elem_id).value;
- return str.length > 0 ? true : false;
-}
-
-Event.addListener('legal_vendor_services_where', 'change', function(e) {
- if (this.value == 'A single country')
- Dom.removeClass('legal_vendor_single_country', 'bz_default_hidden');
- else
- Dom.addClass('legal_vendor_single_country', 'bz_default_hidden');
-});
+Event.onDOMReady(MPR.init());