Skip to content

Commit 3b0d065

Browse files
Closes #497
1 parent b840266 commit 3b0d065

File tree

3 files changed

+95
-3
lines changed

3 files changed

+95
-3
lines changed

src/Plugins/SmartStore.PayPal/Views/PayPalDirect/PaymentInfo.Mobile.cshtml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
<div data-role="fieldcontain">
1818
<fieldset data-role="controlgroup" data-type="horizontal">
1919
@Html.DropDownListFor(model => model.ExpireMonth, Model.ExpireMonths)
20-
/
2120
@Html.DropDownListFor(model => model.ExpireYear, Model.ExpireYears)
2221
</fieldset>
2322
</div>

src/Presentation/SmartStore.Web/Themes/Mobile/Content/styles.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,13 @@
161161
.checkout-data .payment-info{text-align:left;height:auto;}
162162
.checkout-data .payment-info .body{text-align:left;vertical-align:text-top;}
163163
.checkout-data .payment-info .select-button{text-align:left;}
164+
.checkout-data .payment-method-info .pull-left {
165+
float: left;
166+
margin: 0 10px 10px 15px;
167+
}
168+
.checkout-data .payment-method-info .media-body {
169+
margin: 5px 10px 10px 15px;
170+
}
164171
.checkout-data .confirm-order{text-align:left;height:auto;}
165172
.checkout-data .confirm-order .select-button{text-align:left;}
166173
.checkout-data .confirm-order .message-error{text-align:left;}

src/Presentation/SmartStore.Web/Views/Checkout/PaymentMethod.Mobile.cshtml

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,19 @@
3131
@for (int i = 0; i < Model.PaymentMethods.Count; i++)
3232
{
3333
var paymentMethod = Model.PaymentMethods[i];
34+
var infoRoute = paymentMethod.PaymentInfoRoute;
3435
var paymentMethodName = paymentMethod.Name;
3536
if (!String.IsNullOrEmpty(paymentMethod.Fee))
3637
{
3738
paymentMethodName = string.Format("{0} ({1})", paymentMethodName, paymentMethod.Fee);
3839
}
3940
<div class="payment-method-item">
4041
<div class="option-name">
41-
<input id="paymentmethod_@(i)" type="radio" name="paymentmethod" value="@(paymentMethod.PaymentMethodSystemName)" checked="@paymentMethod.Selected" />
42+
<input id="paymentmethod_@(i)" type="radio" name="paymentmethod"
43+
data-has-info='@(infoRoute != null ? "true" : "false")'
44+
data-lazy-info='@(paymentMethod.RequiresInteraction ? "true" : "false")'
45+
class="opt-radio"
46+
value="@(paymentMethod.PaymentMethodSystemName)" checked="@paymentMethod.Selected" />
4247
<label for="paymentmethod_@(i)">
4348
@paymentMethodName
4449
</label>
@@ -49,7 +54,21 @@
4954
</div>
5055
}
5156
</div>
52-
</div>
57+
@if (!paymentMethod.RequiresInteraction || (paymentMethod.Selected && infoRoute != null))
58+
{
59+
<div class="payment-method-item payment-method-info"
60+
@Html.Attr("data-lazy-info", "true", paymentMethod.RequiresInteraction)
61+
data-system-name="@paymentMethod.PaymentMethodSystemName">
62+
@if (paymentMethod.Selected && !ViewData.ModelState.IsValid)
63+
{
64+
<div id="payment-info-validation-summary">
65+
@Html.ValidationSummary(false)
66+
</div>
67+
}
68+
@Html.Action(infoRoute.Action, infoRoute.Controller, infoRoute.RouteValues)
69+
</div>
70+
}
71+
</div>
5372
}
5473
<div class="select-button">
5574
<input type="submit" name="nextstep" value="@T("Checkout.NextButton")" />
@@ -67,3 +86,70 @@
6786
}
6887
</div>
6988
</div>
89+
90+
<script>
91+
$(function () {
92+
93+
var validationSummary = $('#payment-info-validation-summary');
94+
95+
if (validationSummary.length) {
96+
$.scrollTo(validationSummary, 600, { offset: -100 });
97+
}
98+
99+
$('.checkout-data .opt-radio').on('change', function (e) {
100+
var radio = $(this);
101+
var systemName = radio.val();
102+
103+
function removeInfoPanels() {
104+
$('.checkout-data .payment-method-item').each(function (i, val) {
105+
var el = $(val);
106+
if (el.data('system-name') != systemName && el.data('lazy-info')) {
107+
el.remove();
108+
}
109+
});
110+
}
111+
112+
$('.checkout-data .payment-method-item').removeClass('selected');
113+
114+
var item = radio.closest('.payment-method-item');
115+
item.addClass("selected");
116+
117+
if (!radio.data("has-info") || !radio.data("lazy-info")) {
118+
removeInfoPanels();
119+
return;
120+
}
121+
122+
$.ajax({
123+
type: 'POST',
124+
cache: false,
125+
dataType: 'html',
126+
async: false,
127+
url: '@Url.Action("PaymentInfoAjax")',
128+
data: { paymentMethodSystemName: systemName },
129+
success: function (html) {
130+
if (!html)
131+
return;
132+
133+
var panel = item.find('.payment-method-item');
134+
135+
if (panel.length == 0) {
136+
panel = $('<div class="payment-method-item payment-method-info"></div>')
137+
.appendTo(item)
138+
.data('system-name', systemName)
139+
.data('lazy-info', true);
140+
}
141+
142+
panel.html(html);
143+
panel.trigger('create');
144+
},
145+
error: function (xhr, ajaxOptions, thrownError) {
146+
console.error(thrownError);
147+
},
148+
complete: function () {
149+
// remove all other info containers
150+
removeInfoPanels();
151+
}
152+
});
153+
});
154+
});
155+
</script>

0 commit comments

Comments
 (0)