Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8952b64

Browse files
authored
Better control of sponsor package's price display after customization (python#1690)
* Refactor js by introducing a object to hold access to HTML elemnts* Refactor references to cost label* Refactor clear form btn references* Refactor package input* Refactor application form references* Remove unused var* Refactor package info and benefits selector* Refactor benefits inputs/labels/conflicts selectors* Should use functions to "refresh" elements data* New function to display a package cost* Display the package cost if benefits after customization matches with package's ones
1 parent1911074 commit8952b64

File tree

1 file changed

+59
-29
lines changed

1 file changed

+59
-29
lines changed

‎static/js/sponsors/applicationForm.js

Lines changed: 59 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,94 @@
11
$(document).ready(function(){
2-
letcheckboxesContainer=$('#benefits_container');
3-
letcostLabel=$("#cost_label");
4-
letcost=0;
2+
constSELECTORS={
3+
checkboxesContainer:()=>$('#benefits_container'),
4+
costLabel:()=>$("#cost_label"),
5+
clearFormBtn:()=>$("#clear_form_btn"),
6+
packageInput:()=>$("input[name=package]"),
7+
applicationForm:()=>$("#application_form"),
8+
getPackageInfo:(packageId)=>$("#package_benefits_"+packageId),
9+
getPackageBenefits:(packageId)=>SELECTORS.getPackageInfo(packageId).children(),
10+
benefitsInputs:()=>$("input[id^=id_benefits_]"),
11+
getBenefitLabel:(benefitId)=>$('label[benefit_id='+benefitId+']'),
12+
getBenefitInput:(benefitId)=>SELECTORS.benefitsInputs().filter('[value='+benefitId+']'),
13+
getBenefitConflicts:(benefitId)=>$('#conflicts_with_'+benefitId).children(),
14+
getSelectedBenefits:()=>SELECTORS.benefitsInputs().filter(":checked"),
15+
}
516

6-
$("#clear_form_btn").click(function(){
7-
$("#application_form").trigger("reset");
8-
$("#application_form [class=active]").removeClass("active");
9-
$("input[name=package]").prop("checked",false);
10-
checkboxesContainer.find(':checkbox').each(function(){
17+
displayPackageCost=(packageId)=>{
18+
letpackageInfo=SELECTORS.getPackageInfo(packageId);
19+
letcost=packageInfo.attr("data-cost");
20+
SELECTORS.costLabel().html('Sponsorship cost is $'+cost.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")+' USD')
21+
}
22+
23+
24+
25+
SELECTORS.clearFormBtn().click(function(){
26+
SELECTORS.applicationForm().trigger("reset");
27+
SELECTORS.applicationForm().find("[class=active]").removeClass("active");
28+
SELECTORS.packageInput().prop("checked",false);
29+
SELECTORS.checkboxesContainer().find(':checkbox').each(function(){
1130
$(this).prop('checked',false);
1231
if($(this).attr("package_only"))$(this).attr("disabled",true);
1332
});
14-
$("#cost_label").html("");
33+
SELECTORS.costLabel().html("");
1534
});
1635

17-
$("input[name=package]").change(function(){
36+
SELECTORS.packageInput().change(function(){
1837
letpackage=this.value;
1938
if(package.length==0)return;
2039

21-
costLabel.html("Updating cost...")
40+
SELECTORS.costLabel().html("Updating cost...")
2241

23-
checkboxesContainer.find(':checkbox').each(function(){
42+
SELECTORS.checkboxesContainer().find(':checkbox').each(function(){
2443
$(this).prop('checked',false);
2544
letpackageOnlyBenefit=$(this).attr("package_only");
2645
if(packageOnlyBenefit)$(this).attr("disabled",true);
2746
});
2847

29-
letpackageInfo=$("#package_benefits_"+package);
30-
packageInfo.children().each(function(){
48+
SELECTORS.getPackageBenefits(package).each(function(){
3149
letbenefit=$(this).html()
32-
letbenefitInput=checkboxesContainer.find('[value='+benefit+']');
50+
letbenefitInput=SELECTORS.getBenefitInput(benefit);
3351
letpackageOnlyBenefit=benefitInput.attr("package_only");
3452
benefitInput.removeAttr("disabled");
3553
benefitInput.trigger("click");
3654
});
37-
38-
leturl=$("#cost_container").attr("calculate_cost_url");
39-
letdata=$("form").serialize();
40-
41-
letcost=packageInfo.attr("data-cost");
42-
costLabel.html('Sponsorship cost is $'+cost.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")+' USD')
55+
displayPackageCost(package);
4356
});
4457

45-
$("input[id^=id_benefits_]").change(function(){
58+
SELECTORS.benefitsInputs().change(function(){
4659
letbenefit=this.value;
4760
if(benefit.length==0)return;
48-
if(costLabel.html()!="Updating cost...")costLabel.html("Please submit your customized sponsorship package application and we'll contact you within 2 business days.");
4961

50-
letactive=checkboxesContainer.find('[value='+benefit+']').prop("checked");
62+
// display package cost if custom benefit change result matches with package's benefits list
63+
letisChangeFromPackageChange=SELECTORS.costLabel().html()=="Updating cost..."
64+
if(!isChangeFromPackageChange){
65+
letselectedBenefits=SELECTORS.getSelectedBenefits();
66+
selectedBenefits=$.map(selectedBenefits,(b)=>$(b).val()).sort();
67+
letselectedPackageId=SELECTORS.packageInput().filter(":checked").val()
68+
letpackageBenefits=SELECTORS.getPackageBenefits(selectedPackageId);
69+
packageBenefits=$.map(packageBenefits,(b)=>$(b).text()).sort();
70+
71+
// check same num of benefits and join with string. if same string, both lists have the same benefits
72+
if(packageBenefits.length==selectedBenefits.length&&packageBenefits.join(',')===selectedBenefits.join(',')){
73+
displayPackageCost(selectedPackageId);
74+
}else{
75+
letmsg="Please submit your customized sponsorship package application and we'll contact you within 2 business days.";
76+
SELECTORS.costLabel().html(msg);
77+
}
78+
}
79+
80+
// updates the input to be active if needed
81+
letactive=SELECTORS.getBenefitInput(benefit).prop("checked");
5182
if(!active){
5283
return;
5384
}else{
54-
$('label[benefit_id='+benefit+']').addClass("active");
85+
SELECTORS.getBenefitLabel(benefit).addClass("active");
5586
}
5687

57-
58-
$('#conflicts_with_'+benefit).children().each(function(){
88+
// check and ensure conflicts constraints between checked benefits
89+
SELECTORS.getBenefitConflicts(benefit).each(function(){
5990
letconflictId=$(this).html();
60-
letconflictCheckbox=checkboxesContainer.find('[value='+conflictId+']');
61-
letchecked=conflictCheckbox.prop("checked");
91+
letchecked=SELECTORS.getBenefitInput(conflictId).prop("checked");
6292
if(checked){
6393
conflictCheckbox.trigger("click");
6494
conflictCheckbox.parent().removeClass("active");

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp