Error executing template "Designs/Rapido/UserManagement/CreateProfile/CreateAccount.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.b__3_0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 516
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.b__1_0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 47
at RazorEngine.Templating.TemplateWriter.ToString()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.<>c__DisplayClass5_0.b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 697
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.<>c__DisplayClass4_0.b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 607
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.<>c__DisplayClass5_0.b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 730
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.<>c__DisplayClass4_0.b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 607
at CompiledRazorTemplates.Dynamic.RazorEngine_6ece7a750020458d812c98638ab6d74b.Execute() in C:\inetpub\wwwroot\Website\LasanLIVE\Solution\rapidofull-20200702-files\Files\Templates\Designs\Rapido\UserManagement\CreateProfile\CreateAccount.cshtml:line 2680
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2 @using System.Web;
3 @using System.IO;
4 @using Dynamicweb.Rapido.Blocks.Components.General
5 @using Dynamicweb.Rapido.Blocks;
6
7 <link rel="stylesheet" id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/jquery-min.css?v=1.0">
8 <script src="/Files/Templates/Designs/Rapido/js/jquery.js" type="text/javascript"></script>
9 <script src="/Files/Templates/Designs/Rapido/js/jquery-ui.js" type="text/javascript"></script>
10 <script src="https://www.google.com/recaptcha/api.js" async defer></script>
11
12 @functions {
13 BlocksPage createAccountPage = BlocksPage.GetBlockPage("CreateAccount");
14 }
15
16 @{
17 Block createAccountContainer = new Block
18 {
19 Id = "CreateAccountContainer",
20 SortId = 10,
21 BlocksList = new List<Block> {
22 new Block {
23 Id = "CreateAccountForm",
24 Template = RenderCreateAccountForm(),
25 SortId = 20
26 }
27 }
28 };
29
30 createAccountPage.Add(createAccountContainer);
31 }
32
33 @helper RenderCreateAccountForm()
34 {
35 string SendSMSPageId = GetPageIdByNavigationTag("CreateAccountSMS").ToString();
36 string ProfileCompletedPageId = GetPageIdByNavigationTag("ProfileCompleted").ToString();
37 string createAccountPageId = GetPageIdByNavigationTag("CreateAccount").ToString();
38 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/bootstrap.min.css">
39 <script src="/Files/Templates/Designs/Rapido/js/bootstrap.min.js"></script>
40
41 <div class="tab">
42 <button class="tablinks" onclick="openForm(event, 'EmailForm')" id="defaultOpen">@Translate("Create Account with Email")</button>
43 <button class="tablinks" onclick="openForm(event, 'PhoneForm')">@Translate("Create Account with Phone")</button>
44 </div>
45 <input type ="hidden" value="" id="type"/>
46 <div id="EmailForm" class="tabcontent">
47 @RenderCreateAccountWithEmail()
48 </div>
49
50 <div id="PhoneForm" class="tabcontent">
51 @RenderCreateAccountWithPhone()
52 </div>
53
54 <text>
55 <script>
56 $(document).ready(function(){
57 var str = "[a-z0-9._%+-]+@@[a-z0-9.-]+\.[a-z]{2,}$";
58 $("#UserManagement_Form_Email").attr("pattern",str);
59 });
60 function openForm(evt, formName) {
61 if(formName == "PhoneForm" ){
62 $("#type").val("phone");
63 $(".submitter").addClass("disabled");
64 $(".submitter").attr("disabled","true");
65 $("#pwdNotMatch").hide();
66 }
67 else{
68 $("#type").val("email");
69 $("#pwdNotMatch").hide();
70 $("#email-error").hide();
71 $("#UserManagement_Form_Email").val("");
72 $(".submitter").removeClass("disabled");
73 $(".submitter").removeAttr("disabled");
74 }
75 var i, tabcontent, tablinks;
76 tabcontent = document.getElementsByClassName("tabcontent");
77 for (i = 0; i < tabcontent.length; i++) {
78 tabcontent[i].style.display = "none";
79 }
80 tablinks = document.getElementsByClassName("tablinks");
81 for (i = 0; i < tablinks.length; i++) {
82 tablinks[i].className = tablinks[i].className.replace(" active", "");
83 }
84 document.getElementById(formName).style.display = "block";
85 evt.currentTarget.className += " active";
86 }
87 document.getElementById("defaultOpen").click();
88
89 $( function() {
90 $("#DateofBirth").attr("autocomplete", "off");
91 $("#DateofBirth").datepicker({
92 dateFormat: 'dd M yy',
93 changeMonth: true,
94 yearRange: '1900:+10',
95 changeYear: true
96 });
97 $("#DateofBirthMobile").attr("autocomplete", "off");
98 $("#DateofBirthMobile").datepicker({
99 dateFormat: 'dd M yy',
100 changeMonth: true,
101 yearRange: '1900:+10',
102 changeYear: true
103 });
104 });
105
106 function splitMonthMobileRegister() {
107 var input=document.getElementById("DateofBirthMobile").value;
108 var fields = input.split(' ');
109 var name = fields[1];
110 document.getElementById("BirthMonthMobile").value= name;
111 }
112 function splitMonthEmailResigter(event) {
113 var email = document.getElementById("UserManagement_Form_Email").value;
114 var pattern = /^(([^<>()[\]\\.,;:\s@@\"]+(\.[^<>()[\]\\.,;:\s@@\"]+)*)|(\".+\"))@@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
115
116 var input=document.getElementById("DateofBirth").value;
117 var fields = input.split(' ');
118 var name = fields[1];
119 document.getElementById("BirthMonth").value =name;
120 var emailRegex = /^(([^<>()[\]\\.,;:\s@@\"]+(\.[^<>()[\]\\.,;:\s@@\"]+)*)|(\".+\"))@@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
121
122 if (!email || typeof email !== "string" || !email.match(emailRegex)) {
123 document.body.scrollTop = 0;
124 document.documentElement.scrollTop = 0;
125 $("#email-error").show();
126 return false; // STOP HERE
127 }
128
129 // --- CAPTCHA VALIDATION ---
130 var response = grecaptcha.getResponse();
131 if (response.length == 0) {
132 document.getElementById("errorCaptcha").innerHTML = '@Translate("Please verify you are human!")';
133 return false; // MUST STOP HERE TOO
134 }
135
136 // --- ALL VALID → PROCEED ---
137 Buttons.LockButton(event);
138 return true;
139
140 }
141
142 $('#SendCodeBtn').on('click', function(e) {
143 e.preventDefault();
144 SendCode();
145 var btn = $(this);
146 btn.button('loading');
147 setTimeout(function() {
148 btn.button('reset');
149 $("#ResendCodeBtn").show();
150 $("#SendCodeBtn").hide();
151 }, 1000);
152
153 return false;
154 });
155 function SendCode(){
156 var phone = $("#Phone").val();
157 if(phone.length > 11){
158 $("#phone-len-error").show();
159 }
160 else
161 {
162 $("#phone-len-error").hide();
163 $.ajax({
164 url: "/lasan-myanmar/send-sms-for-create-account?" + "phonenumber=+95" + phone.substring(1) + "&action=sendCode",
165 success: function(data){
166 console.log(data);
167 if(data.message == "Error")
168 {
169 $("#phone-error").show();
170 }
171 else
172 {
173 $("#phone-error").hide();
174 $("#verifyCode").removeAttr("disabled");
175 $("#pinId").val(data.message);
176 }
177 }
178 });
179 }
180 }
181 $('#ResendCodeBtn').on('click', function(e) {
182 e.preventDefault();
183 ResendCode();
184 var btn = $(this);
185 btn.button('loading');
186 setTimeout(function() {
187 btn.button('reset');
188 }, 1500);
189 return false;
190 });
191 function ResendCode(){
192 var pinId = $("#pinId").val();
193 var phone = $("#Phone").val();
194 $.ajax({
195 url: "/lasan-myanmar/send-sms-for-create-account?" + "pinId=" + pinId + "&action=resendCode",
196 success: function(data){
197 if(data.message == "Error")
198 {
199 $("#phone-error").show();
200 }
201 else
202 {
203 $("#phone-error").hide();
204 $("#pinId").val(data.message);
205 }
206 }
207 });
208 }
209 $('#verifyCode').on('click', function(e) {
210 e.preventDefault();
211 VerifyCode();
212 var btn = $(this);
213 btn.button('loading');
214 setTimeout(function() {
215 btn.button('reset');
216 }, 1000);
217
218 return false;
219 });
220
221 function VerifyCode(){
222 var pinId = $("#pinId").val();
223 var phone = $("#Phone").val();
224 var pinCode = $("#Code").val();
225 $.ajax({
226 url: "/lasan-myanmar/send-sms-for-create-account?" + "pinCode=" + pinCode + "&pinId="+ pinId + "&action=verify" ,
227 success: function(data){
228 if(data.message == "True")
229 {
230 $("#phone-error").hide();
231 $(".submitter").removeClass("disabled");
232 $(".submitter").removeAttr("disabled");
233 $("#otp-error").hide();
234 }
235 else
236 {
237 if(data.message.includes("expired"))
238 {
239 $("#ResendCodeBtn").hide();
240 $("#SendCodeBtn").show();
241 }
242 $("#otp-error").html(data.message);
243 $("#otp-error").show();
244 }
245 }
246 });
247 }
248 function recaptchaCallback() {
249 $("#errorCaptcha").html("");
250 }
251 function FormSubmit(event)
252 {
253 if($("#Country").val() == "" || $("#State").val() == "" || $("#City").val() == "" || $("#Address").val() == "" )
254 {
255 if($("#Country").val() == "")
256 {
257 $("#error-country").show();
258 return false;
259 }
260 if($("#State").val() == "")
261 {
262 $("#error-state").show();
263 return false;
264 }
265 if($("#City").val() == "")
266 {
267 $("#error-city").show();
268 return false;
269 }
270 if($("#Address").val() == "")
271 {
272 $("#error-address").show();
273 return false;
274 }
275 }
276 // --- CAPTCHA VALIDATION ---
277 var response = grecaptcha.getResponse();
278 if (response.length === 0) {
279 $("#errorCaptcha").html("@Translate("Please verify you are human!")");
280 return false; // STOP submitting
281 }
282
283 if($("#Password").val() == $("#PasswordConfirm").val())
284 {
285 var name = $("#Name").val();
286 var phone = $("#Phone").val();
287 var password = $("#Password").val();
288 var birthday = $("#DateofBirthMobile").val();
289 var birthMonth = $("#BirthMonthMobile").val();
290
291 var country = $("#Country").val();
292 var state = $("#State").val();
293 var city = $("#City").val();
294 var address = $("#Address").val();
295
296 $.ajax({
297 url: "/lasan-myanmar/create-user-with-phone-number?" + "name=" + name + "&phone="+ phone + "&password=" + password + "&birthday="+ birthday+ "&birthMonth="+ birthMonth + "&country="+ country + "&state="+ state + "&city="+ city+ "&address="+ address ,
298 success: function(data){
299 if(data.message == "success")
300 {
301 location.href= "/Default.aspx?ID=@ProfileCompletedPageId";
302 }
303 else if(data.message == "invalid")
304 {
305 $("#user-error").show();
306 }
307 else
308 {
309 $("#phone-error").show();
310 }
311 }
312 });
313 }
314 else
315 {
316 $("#pwdNotMatch").show();
317 return false;
318 }
319 }
320 </script>
321
322 <script>
323 $(document).ready(function() {
324 $('#UserManagement_Form_Country').append(new Option("Myanmar", "MM"));
325 $('#Country').append(new Option("Myanmar", "MM"));
326 var region = [];
327 $.ajax({
328 url: "/lasan-myanmar/delivery-control-json",
329 type: "GET",
330 dataType: 'json',
331 success: function(data){
332 for(var j =0; j< data[0].DeliveryControls.length ; j++){
333 region[j]= [data[0].DeliveryControls[j].ToRegion];
334 }
335 var flags = [], output = [], l = region.length, i;
336 for( i=0; i<l; i++) {
337 if( flags[region[i]]) continue;
338 flags[region[i]] = true;
339 output.push(region[i]);
340 }
341 for(var index =0; index < output.length ; index++){var stateHidden = $('#stateHidden').val();
342 if(stateHidden == output[index]){
343 $('#UserManagement_Form_State').append(new Option(output[index], output[index]));
344 $("#UserManagement_Form_State option[value='"+stateHidden+"']").prop('selected' , true);
345
346 $('#State').append(new Option(output[index], output[index]));
347 $("#State option[value='"+stateHidden+"']").prop('selected' , true);
348 }
349 else{
350 $('#UserManagement_Form_State').append(new Option(output[index], output[index]));
351 $('#State').append(new Option(output[index], output[index]));
352 }
353 }
354 }
355 }).done(function(){
356 if($('#UserManagement_Form_State').val() == null){
357 $("#UserManagement_Form_City").attr('disabled', true);
358 }else{
359 var state = $('#UserManagement_Form_State').val();
360 $.ajax({
361 url: "/lasan-myanmar/delivery-control-json?ToRegion="+state,
362 type: "GET",
363 dataType: 'json',
364 success: function(data){
365 var city = $('#UserManagement_Form_City').val();
366 $('#UserManagement_Form_City').empty();
367 for(var i =0; i< data[0].DeliveryControls.length ; i++){
368 $('#UserManagement_Form_City').append(new Option(data[0].DeliveryControls[i].ToTownship, data[0].DeliveryControls[i].ToTownship));
369 $("#UserManagement_Form_City option[value='"+city+"']").prop('selected' , true);
370 }
371 }
372 });
373 }
374
375 if($('#State').val() == null){
376 $("#City").attr('disabled', true);
377 }else{
378 var state1 = $('#State').val();
379 $.ajax({
380 url: "/lasan-myanmar/delivery-control-json?ToRegion="+state1,
381 type: "GET",
382 dataType: 'json',
383 success: function(data){
384 var city1 = $('#City').val();
385 $('#City').empty();
386 for(var i =0; i< data[0].DeliveryControls.length ; i++){
387 $('#City').append(new Option(data[0].DeliveryControls[i].ToTownship, data[0].DeliveryControls[i].ToTownship));
388 $("#City option[value='"+city1+"']").prop('selected' , true);
389 }
390 }
391 });
392 }
393 });
394
395 });
396
397 $('#UserManagement_Form_State').on('change', function() {
398 var state = $('#UserManagement_Form_State').val();
399 $("#UserManagement_Form_City").attr('disabled', false);
400 $("#UserManagement_Form_City").empty();
401 $.ajax({
402 url: "/lasan-myanmar/delivery-control-json?ToRegion="+state,
403 type: "GET",
404 dataType: 'json',
405 success: function(data){
406 for(var i =0; i< data[0].DeliveryControls.length ; i++){
407 $('#UserManagement_Form_City').append(new Option(data[0].DeliveryControls[i].ToTownship, data[0].DeliveryControls[i].ToTownship));
408 }
409 }
410 });
411 });
412 $('#State').on('change', function() {
413 var state1 = $('#State').val();
414 $("#City").attr('disabled', false);
415 $("#City").empty();
416 $.ajax({
417 url: "/lasan-myanmar/delivery-control-json?ToRegion="+state1,
418 type: "GET",
419 dataType: 'json',
420 success: function(data){
421 for(var i =0; i< data[0].DeliveryControls.length ; i++){
422 $('#City').append(new Option(data[0].DeliveryControls[i].ToTownship, data[0].DeliveryControls[i].ToTownship));
423 }
424 }
425 });
426 });
427 </script>
428 </text>
429 }
430
431 @helper RenderCreateAccountWithPhone()
432 {
433 string googleRecaptcha = Dynamicweb.Frontend.PageView.Current().AreaSettings.GetItem("Custom").GetValue("GoogleRecaptcha").ToString();
434 <form>
435 <div class="form__field-group u-full-width dw-mod">
436 <div class="u-full-width">
437 <label for="phone" class="u-pull--left">@Translate("Phone Number") <span class="required dw-mod">*</span></label>
438 </div>
439 <div class="u-inline">
440 <input type="hidden" id="pinId" value=""/>
441 <span id="countrycode" name="countrycode" type="text" value="+95" class="dw-mod u-inline phoneprefix">+95</span>
442 <input id="Phone" name="phone" type="number" value="" placeholder="09*********" maxlength="11" pattern="0[0-9]{9}" class="dw-mod u-inline width_53" style="min-width: 59% !important;">
443 <button class="btn btn--primary dw-mod width_30" id="SendCodeBtn" data-loading-text="<i class='fa fa-spinner fa-spin'></i>Loading... ">@Translate("Send Code")</button>
444 <span class="btn btn--primary dw-mod width_30" id="ResendCodeBtn" style="display:none;" data-loading-text="<i class='fa fa-spinner fa-spin'></i>Loading... ">@Translate("Resend Code")</span>
445 </div>
446 <div id="phone-len-error" class="notification-message-error notification-message-clean clean u-full-width dw-mod" style="display:none;">@Translate("Wrong phone number.")</div>
447 <div id="phone-error" class="notification-message-error notification-message-clean clean u-full-width dw-mod" style="display:none;">@Translate("You have requested too many time. Please try again after 24hours.")</div>
448 <div id="user-error" class="notification-message-error notification-message-clean clean u-full-width dw-mod" style="display:none;">@Translate("Your phone number is already registered.")</div>
449
450 </div>
451 <div class="form__field-group u-full-width dw-mod">
452 <div class="u-full-width">
453 <label for="Code" class="u-pull--left">@Translate("OTP Code") <span class="required dw-mod">*</span></label>
454 </div>
455 <div class="u-inline">
456 <input id="Code" type="number" value="" class="dw-mod u-inline width_68" >
457 <button class="btn btn--primary dw-mod width_30" disabled="true" id="verifyCode" data-loading-text="<i class='fa fa-spinner fa-spin'></i>Loading... ">@Translate("Verify")</button>
458
459 <div id="otp-error" class="notification-message-error notification-message-clean clean u-full-width dw-mod" style="display:none;">@Translate("Wrong OTP.")</div>
460 </div>
461 </div>
462 @Render(new HiddenField { Name = "birthMonth", Id = "BirthMonthMobile" })
463 @Render(new TextField { Id = "DateofBirthMobile", Label = Translate("Birthday"), Placeholder = Translate("Please Select Date"), Required = true})
464 @Render(new TextField { Id = "Name", Type = TextFieldType.Text, Label = Translate("Name"), CssClass = "u-full-width u-padding", Required = true })
465 @Render(new TextField { Id = "Password", Type = TextFieldType.Password, Label = Translate("Password"), CssClass = "u-full-width u-padding" })
466 <div class="notification-message-error notification-message-clean clean u-full-width dw-mod" id="pwdNotMatch" style="display:none;"> @Translate("The passwords do not match")</div>
467 @Render(new TextField { Id = "PasswordConfirm", Type = TextFieldType.Password, Label = Translate("Confirm Password"), CssClass = "u-full-width u-padding"})
468
469 @Render(new SelectField
470 {
471 Id = "Country",
472 Name = "Country",
473 Label = Translate("Country")+"<span class='required'> *</span>",
474 Required = true,
475 ErrorMessage = GetString("UserManagement:User.Country.Input.Error"),
476 Value = GetString("UserManagement:User.Country"),
477 CssClass = "js-profile-view"
478 })
479 <div class="notification-message-error notification-message-clean clean u-full-width dw-mod" id="error-country" style="display:none;"> @Translate("Please fill the Country.")</div>
480
481 @Render(new HiddenField { Id = "countryHidden", Name = "CountryCode", Value = "MM" })
482 @Render(new SelectField
483 {
484 Id = "State",
485 Name = "State",
486 Label = Translate("State/Region") + "<span class='required'> *</span>",
487 Required = true,
488 ErrorMessage = GetString("UserManagement:User.UserAddress.State.Input.Error"),
489 Value = GetString("UserManagement:User.State")
490 })
491 <div class="notification-message-error notification-message-clean clean u-full-width dw-mod" id="error-state" style="display:none;"> @Translate("Please fill the State/Region.")</div>
492
493 @Render(new SelectField
494 {
495 Id = "City",
496 Name = "City",
497 Label = Translate("City") + "<span class='required'> *</span>",
498 Required = true,
499 ErrorMessage = GetString("UserManagement:User.UserAddress.City.Input.Error"),
500 Value = GetString("UserManagement:User.City")
501 })
502 <div class="notification-message-error notification-message-clean clean u-full-width dw-mod" id="error-city" style="display:none;"> @Translate("Please fill the City.")</div>
503
504 @Render(new TextField { Id = "Address", Name = "Address", Type = TextFieldType.Text, Label = Translate("Address"), Value = GetString("UserManagement:User.Address"), ErrorMessage = GetString("UserManagement:User.Address.Input.Error"), Required = true })
505 <div class="notification-message-error notification-message-clean clean u-full-width dw-mod" id="error-address" style="display:none;"> @Translate("Please fill the Address.")</div>
506 <div class="form-group mob-rightcol--label signup-google__recaptcha">
507 <div class="g-recaptcha" data-sitekey='@googleRecaptcha' data-callback="recaptchaCallback"></div>
508 <span class="required" id="errorCaptcha"></span>
509 </div>
510 @Render(new Button { Id = "btnsubmit", Title = Translate("Sign up now"), OnClick = " splitMonthMobileRegister(); FormSubmit(event); ", Disabled = true, CssClass = "u-full-width u-margin-top submitter u-padding" })
511 </form>
512 }
513
514 @helper RenderCreateAccountWithEmail()
515 {
516 string googleRecaptcha = Dynamicweb.Frontend.PageView.Current().AreaSettings.GetItem("Custom").GetValue("GoogleRecaptcha").ToString();
517 string forgotPasswordPageId = GetPageIdByNavigationTag("SignInPage").ToString() + "&LoginAction=Recovery";
518 bool isEmailExist = GetString("UserManagement:User.Email.Input.Error") == "User with specified email exists.";
519
520 @GetString("UserManagement:User.FormStart")
521 @Render(new HiddenField { Name = "UserManagementForm", Value = "1" });
522 @Render(new TextField { Id = "UserManagement_Form_Email", Name = "UserManagement_Form_Email", Type = TextFieldType.Email, Label = Translate("Email"), Value = GetString("UserManagement:User.Email"), Required = true, ErrorMessage = isEmailExist ? "You already exist in our system click below to reset your password" : GetString("UserManagement:User.Email.Input.Error") });
523 <div id="email-error" class="notification-message-error notification-message-clean clean u-full-width dw-mod" style="display:none;">@Translate("Invalid Email Format.")</div>
524 if (isEmailExist)
525 {
526 @Render(new Link { Href = "/default.aspx?ID=" + forgotPasswordPageId, Title = Translate("Reset password"), ButtonLayout = ButtonLayout.Secondary });
527 }
528
529 @Render(new TextField { Id = "DateofBirth", Name = "CustomField.AccessUser_AccessUser_Birthday", Label = Translate("Birthday"), Placeholder = Translate("Please Select Date"), Required = true})
530 @Render(new HiddenField { Name = "birthMonth", Id = "BirthMonth" })
531 @Render(new TextField { Id = "UserManagement_Form_Name", Name = "UserManagement_Form_Name", Type = TextFieldType.Text, Label = Translate("Name"), Value = GetString("UserManagement:User.Name"), Required = true, ErrorMessage = GetString("UserManagement:User.Name.Input.Error") });
532 @Render(new TextField { Id = "UserManagement_Form_Phone", Name = "UserManagement_Form_Phone", Label = Translate("Phone"), Placeholder="09*********" , Value = GetString("UserManagement:User.Phone"), Required = true});
533
534 @Render(new TextField { Id = "UserManagement_Form_NewPassword", Name = "UserManagement_Form_NewPassword", Type = TextFieldType.Password, Label = Translate("Password"), CssClass = "u-full-width", ErrorMessage = GetString("UserManagement:User.NewPassword.Input.Error") });
535 <div class="notification-message-error notification-message-clean clean u-full-width dw-mod" id="pwdNotMatch" style="display:none;"> @Translate("The passwords do not match")</div>
536
537 @Render(new TextField { Id = "UserManagement_Form_NewPasswordConfirm", Name = "UserManagement_Form_NewPasswordConfirm", Type = TextFieldType.Password, Label = Translate("Confirm Password"), CssClass = "u-full-width u-padding", ErrorMessage = GetString("UserManagement:User.NewPasswordConfirm.Input.Error") })
538
539 @Render(new SelectField
540 {
541 Id = "UserManagement_Form_Country",
542 Name = "UserManagement_Form_Country",
543 Label = Translate("Country")+"<span class='required'> *</span>",
544 Required = true,
545 ErrorMessage = GetString("UserManagement:User.Country.Input.Error"),
546 Value = GetString("UserManagement:User.Country"),
547 CssClass = "js-profile-view"
548 });
549
550 @Render(new HiddenField { Id = "countryHidden", Name = "UserManagement_Form_CountryCode", Value = "MM" });
551 @Render(new SelectField
552 {
553 Id = "UserManagement_Form_State",
554 Name = "UserManagement_Form_State",
555 Label = Translate("State/Region") + "<span class='required'> *</span>",
556 Required = true,
557 ErrorMessage = GetString("UserManagement:User.UserAddress.State.Input.Error"),
558 Value = GetString("UserManagement:User.State")
559 });
560 @Render(new SelectField
561 {
562 Id = "UserManagement_Form_City",
563 Name = "UserManagement_Form_City",
564 Label = Translate("City") + "<span class='required'> *</span>",
565 Required = true,
566 ErrorMessage = GetString("UserManagement:User.UserAddress.City.Input.Error"),
567 Value = GetString("UserManagement:User.City")
568 });
569 @Render(new TextField { Id = "UserManagement_Form_Address", Name = "UserManagement_Form_Address", Type = TextFieldType.Text, Label = Translate("Address"), Value = GetString("UserManagement:User.Address"), ErrorMessage = GetString("UserManagement:User.Address.Input.Error"), Required = true });
570 <div class="form-group mob-rightcol--label signup-google__recaptcha">
571 <div class="g-recaptcha" data-sitekey='@googleRecaptcha' data-callback="recaptchaCallback"></div>
572 <span class="required" id="errorCaptcha"></span>
573 </div>
574 @Render(new Button { Id = "submitter", ButtonType = ButtonType.Submit, Title = Translate("Sign up now"), OnClick = "return splitMonthEmailResigter(event); ", CssClass = "u-full-width u-margin-top submitter u-padding" })
575 @GetString("UserManagement:User.FormEnd")
576
577
578
579 }
580
581 @using System.Text.RegularExpressions
582 @using System.Collections.Generic
583 @using System.Reflection
584 @using System.Web
585 @using System.Web.UI.HtmlControls
586 @using Dynamicweb.Rapido.Blocks.Components
587 @using Dynamicweb.Rapido.Blocks.Components.Articles
588 @using Dynamicweb.Rapido.Blocks.Components.Documentation
589 @using Dynamicweb.Rapido.Blocks
590
591
592 @*--- START: Base block renderers ---*@
593
594 @helper RenderBlockList(List<Block> blocks)
595 {
596 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
597 blocks = blocks.OrderBy(item => item.SortId).ToList();
598
599 foreach (Block item in blocks)
600 {
601 if (debug) {
602 <!-- Block START: @item.Id -->
603 }
604
605 if (item.Design == null)
606 {
607 @RenderBlock(item)
608 }
609 else if (item.Design.RenderType == RenderType.None) {
610 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
611
612 <div class="@cssClass dw-mod">
613 @RenderBlock(item)
614 </div>
615 }
616 else if (item.Design.RenderType != RenderType.Hide)
617 {
618 string cssClass = item.Design.CssClass != null ? item.Design.CssClass : "";
619
620 if (!item.SkipRenderBlocksList) {
621 if (item.Design.RenderType == RenderType.Row)
622 {
623 <div class="grid grid--align-content-start @cssClass dw-mod" id="Block__@item.Id">
624 @RenderBlock(item)
625 </div>
626 }
627
628 if (item.Design.RenderType == RenderType.Column)
629 {
630 string hidePadding = item.Design.HidePadding ? "u-no-padding" : "";
631 string size = item.Design.Size ?? "12";
632 size = Regex.IsMatch(size, @"\d") ? "md-" + item.Design.Size : item.Design.Size;
633
634 <div class="grid__col-lg-@item.Design.Size grid__col-md-@item.Design.Size grid__col-sm-12 grid__col-xs-12 @hidePadding @cssClass dw-mod" id="Block__@item.Id">
635 @RenderBlock(item)
636 </div>
637 }
638
639 if (item.Design.RenderType == RenderType.Table)
640 {
641 <table class="table @cssClass dw-mod" id="Block__@item.Id">
642 @RenderBlock(item)
643 </table>
644 }
645
646 if (item.Design.RenderType == RenderType.TableRow)
647 {
648 <tr class="@cssClass dw-mod" id="Block__@item.Id">
649 @RenderBlock(item)
650 </tr>
651 }
652
653 if (item.Design.RenderType == RenderType.TableColumn)
654 {
655 <td class="@cssClass dw-mod" id="Block__@item.Id">
656 @RenderBlock(item)
657 </td>
658 }
659
660 if (item.Design.RenderType == RenderType.CardHeader)
661 {
662 <div class="card-header @cssClass dw-mod">
663 @RenderBlock(item)
664 </div>
665 }
666
667 if (item.Design.RenderType == RenderType.CardBody)
668 {
669 <div class="card @cssClass dw-mod">
670 @RenderBlock(item)
671 </div>
672 }
673
674 if (item.Design.RenderType == RenderType.CardFooter)
675 {
676 <div class="card-footer @cssClass dw-mod">
677 @RenderBlock(item)
678 </div>
679 }
680 }
681 else
682 {
683 @RenderBlock(item)
684 }
685 }
686
687 if (debug) {
688 <!-- Block END: @item.Id -->
689 }
690 }
691 }
692
693 @helper RenderBlock(Block item)
694 {
695 bool debug = !String.IsNullOrEmpty(HttpContext.Current.Request.QueryString.Get("debug")) ? Convert.ToBoolean(HttpContext.Current.Request.QueryString.Get("debug")) : false;
696
697 if (item.Template != null)
698 {
699 @BlocksPage.RenderTemplate(item.Template)
700 }
701
702 if (item.Component != null)
703 {
704 string customSufix = "Custom";
705 string methodName = item.Component.HelperName;
706
707 ComponentBase[] methodParameters = new ComponentBase[1];
708 methodParameters[0] = item.Component;
709 Type methodType = this.GetType();
710
711 MethodInfo customMethod = methodType.GetMethod(methodName + customSufix);
712 MethodInfo generalMethod = methodType.GetMethod(methodName);
713
714 try {
715 if (debug) {
716 <!-- Component: @methodName.Replace("Render", "") -->
717 }
718 @customMethod.Invoke(this, methodParameters).ToString();
719 } catch {
720 try {
721 @generalMethod.Invoke(this, methodParameters).ToString();
722 } catch(Exception ex) {
723 throw new Exception(item.Component.GetType().Name + " method '" + methodName +"' could not be invoked", ex);
724 }
725 }
726 }
727
728 if (item.BlocksList.Count > 0 && !item.SkipRenderBlocksList)
729 {
730 @RenderBlockList(item.BlocksList)
731 }
732 }
733
734 @*--- END: Base block renderers ---*@
735
736 @using Dynamicweb.Rapido.Blocks.Components
737 @using Dynamicweb.Rapido.Blocks.Components.General
738 @using Dynamicweb.Rapido.Blocks
739 @using System.IO
740
741 @* Required *@
742 @using Dynamicweb.Rapido.Blocks.Components
743 @using Dynamicweb.Rapido.Blocks.Components.General
744 @using Dynamicweb.Rapido.Blocks
745
746
747 @helper Render(ComponentBase component)
748 {
749 if (component != null)
750 {
751 @component.Render(this)
752 }
753 }
754
755 @* Components *@
756 @using System.Reflection
757 @using Dynamicweb.Rapido.Blocks.Components.General
758
759
760 @* Component *@
761
762 @helper RenderIcon(Icon settings)
763 {
764 if (settings != null)
765 {
766 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
767
768 if (settings.Name != null)
769 {
770 if (string.IsNullOrEmpty(settings.Label))
771 {
772 <i class="@settings.Prefix @settings.Name @settings.CssClass" @color></i>
773 }
774 else
775 {
776 if (settings.LabelPosition == IconLabelPosition.Before)
777 {
778 <div class="u-flex u-flex--align-items-center @settings.CssClass">@settings.Label <i class="@settings.Prefix @settings.Name u-margin-left" @color></i></div>
779 }
780 else
781 {
782 <div class="u-flex u-flex--align-items-center @settings.CssClass"><i class="@settings.Prefix @settings.Name u-margin-right--lg u-w20px" @color></i>@settings.Label</div>
783 }
784 }
785 }
786 else if (!string.IsNullOrEmpty(settings.Label))
787 {
788 @settings.Label
789 }
790 }
791 }
792 @using System.Reflection
793 @using Dynamicweb.Rapido.Blocks.Components.General
794 @using Dynamicweb.Rapido.Blocks.Components
795 @using Dynamicweb.Core
796
797 @* Component *@
798
799 @helper RenderButton(Button settings)
800 {
801 if (settings != null && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
802 {
803 Dictionary<string, string> attributes = new Dictionary<string, string>();
804 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
805 if (settings.Disabled) {
806 attributes.Add("disabled", "true");
807 classList.Add("disabled");
808 }
809
810 if (!string.IsNullOrEmpty(settings.ConfirmText) || !string.IsNullOrEmpty(settings.ConfirmTitle))
811 {
812 settings.Id = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
813 @RenderConfirmDialog(settings);
814 settings.OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = true";
815 }
816
817 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
818 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
819 if (!string.IsNullOrEmpty(settings.AltText))
820 {
821 attributes.Add("title", settings.AltText);
822 }
823 else if (!string.IsNullOrEmpty(settings.Title))
824 {
825 attributes.Add("title", settings.Title);
826 }
827
828 var onClickEvents = new List<string>();
829 if (!string.IsNullOrEmpty(settings.OnClick))
830 {
831 onClickEvents.Add(settings.OnClick);
832 }
833 if (!string.IsNullOrEmpty(settings.Href))
834 {
835 onClickEvents.Add("location.href='" + settings.Href + "'");
836 }
837 if (onClickEvents.Count > 0)
838 {
839 attributes.Add("onClick", string.Join(";", onClickEvents));
840 }
841
842 if (settings.ButtonLayout != ButtonLayout.None)
843 {
844 classList.Add("btn");
845 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
846 if (btnLayout == "linkclean")
847 {
848 btnLayout = "link-clean"; //fix
849 }
850 classList.Add("btn--" + btnLayout);
851 }
852
853 if (settings.Icon == null)
854 {
855 settings.Icon = new Icon();
856 }
857
858 settings.Icon.CssClass += Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower() != "linkclean" ? " u-flex--align-center" : "";
859 settings.Icon.Label = settings.Title;
860
861 attributes.Add("type", Enum.GetName(typeof(ButtonType), settings.ButtonType).ToLower());
862
863 <button class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</button>
864 }
865 }
866
867 @helper RenderConfirmDialog(Button settings)
868 {
869 Modal confirmDialog = new Modal {
870 Id = settings.Id,
871 Width = ModalWidth.Sm,
872 Heading = new Heading
873 {
874 Level = 2,
875 Title = settings.ConfirmTitle
876 },
877 BodyText = settings.ConfirmText
878 };
879
880 confirmDialog.AddAction(new Button { Title = Translate("Cancel"), ButtonLayout = ButtonLayout.Secondary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false"});
881 confirmDialog.AddAction(new Button { Title = Translate("OK"), ButtonLayout = ButtonLayout.Primary, OnClick = "document.getElementById('" + settings.Id + "ModalTrigger').checked = false;" + settings.OnClick });
882
883 @Render(confirmDialog)
884 }
885 @using Dynamicweb.Rapido.Blocks.Components.General
886 @using Dynamicweb.Rapido.Blocks.Components
887 @using Dynamicweb.Core
888
889 @helper RenderDashboard(Dashboard settings)
890 {
891 var widgets = settings.GetWidgets();
892
893 if (!string.IsNullOrEmpty(settings.WidgetsBaseBackgroundColor))
894 {
895 //set bg color for them
896
897 System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(settings.WidgetsBaseBackgroundColor);
898 int r = Convert.ToInt16(color.R);
899 int g = Convert.ToInt16(color.G);
900 int b = Convert.ToInt16(color.B);
901
902 var count = widgets.Length;
903 var max = Math.Max(r, Math.Max(g, b));
904 double step = 255.0 / (max * count);
905 var i = 0;
906 foreach (var widget in widgets)
907 {
908 i++;
909
910 var shade = "rgb(" + Converter.ToString(r * step * i).Replace(",", ".") + ", " + Converter.ToString(g * step * i).Replace(",", ".") + ", " + Converter.ToString(b * step * i).Replace(",", ".") + ")";
911 widget.BackgroundColor = shade;
912 }
913 }
914
915 <div class="dashboard @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
916 @foreach (var widget in widgets)
917 {
918 <div class="dashboard__widget">
919 @Render(widget)
920 </div>
921 }
922 </div>
923 }
924 @using Dynamicweb.Rapido.Blocks.Components.General
925 @using Dynamicweb.Rapido.Blocks.Components
926
927 @helper RenderDashboardWidgetLink(DashboardWidgetLink settings)
928 {
929 if (!string.IsNullOrEmpty(settings.Link))
930 {
931 var backgroundStyles = "";
932 if (!string.IsNullOrEmpty(settings.BackgroundColor))
933 {
934 backgroundStyles = "style=\"background-color:" + settings.BackgroundColor + "\"";
935 }
936
937 <a href="@settings.Link" class="widget widget--link @settings.CssClass dw-mod" @backgroundStyles title="@settings.Title" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
938 <div class="u-center-middle u-color-light">
939 @if (settings.Icon != null)
940 {
941 settings.Icon.CssClass += "widget__icon";
942 @Render(settings.Icon)
943 }
944 <div class="widget__title">@settings.Title</div>
945 </div>
946 </a>
947 }
948 }
949 @using Dynamicweb.Rapido.Blocks.Components.General
950 @using Dynamicweb.Rapido.Blocks.Components
951
952 @helper RenderDashboardWidgetCounter(DashboardWidgetCounter settings)
953 {
954 var backgroundStyles = "";
955 if (!string.IsNullOrEmpty(settings.BackgroundColor))
956 {
957 backgroundStyles = "style='background-color:" + settings.BackgroundColor + "'";
958 }
959
960 <div class="widget @settings.CssClass dw-mod" @backgroundStyles @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
961 <div class="u-center-middle u-color-light">
962 @if (settings.Icon != null)
963 {
964 settings.Icon.CssClass += "widget__icon";
965 @Render(settings.Icon)
966 }
967 <div class="widget__counter">@settings.Count</div>
968 <div class="widget__title">@settings.Title</div>
969 </div>
970 </div>
971 }
972 @using System.Reflection
973 @using Dynamicweb.Rapido.Blocks.Components.General
974 @using Dynamicweb.Rapido.Blocks.Components
975 @using Dynamicweb.Core
976
977 @* Component *@
978
979 @helper RenderLink(Link settings)
980 {
981 if (settings != null && !string.IsNullOrEmpty(settings.Href) && (!string.IsNullOrEmpty(settings.Title) || settings.Icon != null))
982 {
983 Dictionary<string, string> attributes = new Dictionary<string, string>();
984 List<string> classList = settings.CssClass != null ? settings.CssClass.Split(' ').ToList() : new List<string>();
985 if (settings.Disabled)
986 {
987 attributes.Add("disabled", "true");
988 classList.Add("disabled");
989 }
990
991 if (!string.IsNullOrEmpty(settings.AltText))
992 {
993 attributes.Add("title", settings.AltText);
994 }
995 else if (!string.IsNullOrEmpty(settings.Title))
996 {
997 attributes.Add("title", settings.Title);
998 }
999
1000 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1001 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1002 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onClick", settings.OnClick); }
1003 attributes.Add("href", settings.Href);
1004
1005 if (settings.ButtonLayout != ButtonLayout.None)
1006 {
1007 classList.Add("btn");
1008 string btnLayout = Enum.GetName(typeof(ButtonLayout), settings.ButtonLayout).ToLower();
1009 if (btnLayout == "linkclean")
1010 {
1011 btnLayout = "link-clean"; //fix
1012 }
1013 classList.Add("btn--" + btnLayout);
1014 }
1015
1016 if (settings.Icon == null)
1017 {
1018 settings.Icon = new Icon();
1019 }
1020 settings.Icon.Label = settings.Title;
1021
1022 if (settings.Target == LinkTargetType.Blank && settings.Rel == LinkRelType.None)
1023 {
1024 settings.Rel = LinkRelType.Noopener;
1025 }
1026 if (settings.Target != LinkTargetType.None)
1027 {
1028 attributes.Add("target", "_" + Enum.GetName(typeof(LinkTargetType), settings.Target).ToLower());
1029 }
1030 if (settings.Download)
1031 {
1032 attributes.Add("download", "true");
1033 }
1034 if (settings.Rel != LinkRelType.None)
1035 {
1036 attributes.Add("rel", Enum.GetName(typeof(LinkRelType), settings.Rel).ToLower());
1037 }
1038
1039 <a class="@string.Join(" ", classList) dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@Render(settings.Icon)</a>
1040 }
1041 }
1042 @using System.Reflection
1043 @using Dynamicweb.Rapido.Blocks.Components
1044 @using Dynamicweb.Rapido.Blocks.Components.General
1045 @using Dynamicweb.Rapido.Blocks
1046
1047
1048 @* Component *@
1049
1050 @helper RenderRating(Rating settings)
1051 {
1052 if (settings.Score > 0)
1053 {
1054 int rating = settings.Score;
1055 string iconType = "fa-star";
1056
1057 switch (settings.Type.ToString()) {
1058 case "Stars":
1059 iconType = "fa-star";
1060 break;
1061 case "Hearts":
1062 iconType = "fa-heart";
1063 break;
1064 case "Lemons":
1065 iconType = "fa-lemon";
1066 break;
1067 case "Bombs":
1068 iconType = "fa-bomb";
1069 break;
1070 }
1071
1072 <div class="u-ta-right">
1073 @for (int i = 0; i < settings.OutOf; i++)
1074 {
1075 <i class="@(rating > i ? "fas" : "far") @iconType"></i>
1076 }
1077 </div>
1078 }
1079 }
1080 @using System.Reflection
1081 @using Dynamicweb.Rapido.Blocks.Components.General
1082 @using Dynamicweb.Rapido.Blocks.Components
1083
1084
1085 @* Component *@
1086
1087 @helper RenderSelectFieldOption(SelectFieldOption settings)
1088 {
1089 Dictionary<string, string> attributes = new Dictionary<string, string>();
1090 if (settings.Checked) { attributes.Add("selected", "true"); }
1091 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1092 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1093 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1094
1095 <option @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Label</option>
1096 }
1097 @using System.Reflection
1098 @using Dynamicweb.Rapido.Blocks.Components.General
1099 @using Dynamicweb.Rapido.Blocks.Components
1100
1101
1102 @* Component *@
1103
1104 @helper RenderNavigation(Navigation settings) {
1105 @RenderNavigation(new
1106 {
1107 id = settings.Id,
1108 cssclass = settings.CssClass,
1109 startLevel = settings.StartLevel,
1110 endlevel = settings.EndLevel,
1111 expandmode = settings.Expandmode,
1112 sitemapmode = settings.SitemapMode,
1113 template = settings.Template
1114 })
1115 }
1116 @using Dynamicweb.Rapido.Blocks.Components.General
1117 @using Dynamicweb.Rapido.Blocks.Components
1118
1119
1120 @* Component *@
1121
1122 @helper RenderBreadcrumbNavigation(BreadcrumbNavigation settings) {
1123 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
1124 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
1125 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
1126 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
1127 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
1128 settings.SitemapMode = false;
1129
1130 @RenderNavigation(settings)
1131 }
1132 @using Dynamicweb.Rapido.Blocks.Components.General
1133 @using Dynamicweb.Rapido.Blocks.Components
1134
1135
1136 @* Component *@
1137
1138 @helper RenderLeftNavigation(LeftNavigation settings) {
1139 settings.Id = String.IsNullOrEmpty(settings.Id) ? "breadcrumb" : settings.Id;
1140 settings.Template = String.IsNullOrEmpty(settings.Template) ? "Breadcrumb.xslt" : settings.Template;
1141 settings.StartLevel = settings.StartLevel == 0 ? 1 : settings.StartLevel;
1142 settings.EndLevel = settings.EndLevel == 10 ? 1 : settings.EndLevel;
1143 settings.Expandmode = String.IsNullOrEmpty(settings.Expandmode) ? "all" : settings.Expandmode;
1144
1145 <div class="grid__cell">
1146 @RenderNavigation(settings)
1147 </div>
1148 }
1149 @using System.Reflection
1150 @using Dynamicweb.Rapido.Blocks.Components.General
1151 @using Dynamicweb.Core
1152
1153 @* Component *@
1154
1155 @helper RenderHeading(Heading settings)
1156 {
1157 if (settings != null && !string.IsNullOrEmpty(settings.Title))
1158 {
1159 string color = settings.Color != null ? "style=\"color: " + settings.Color + "\"" : "";
1160 string tagName = settings.Level != 0 ? "h" + settings.Level.ToString() : "div";
1161
1162 @("<" + tagName + " class=\"" + settings.CssClass + " dw-mod\" " + color + ">")
1163 if (!string.IsNullOrEmpty(settings.Link))
1164 {
1165 @Render(new Link { Href = settings.Link, Icon = settings.Icon, Title = settings.Title, ButtonLayout = ButtonLayout.None })
1166 }
1167 else
1168 {
1169 if (settings.Icon == null)
1170 {
1171 settings.Icon = new Icon();
1172 }
1173 settings.Icon.Label = settings.Title;
1174 @Render(settings.Icon)
1175 }
1176 @("</" + tagName + ">");
1177 }
1178 }
1179 @using Dynamicweb.Rapido.Blocks.Components
1180 @using Dynamicweb.Rapido.Blocks.Components.General
1181 @using Dynamicweb.Rapido.Blocks
1182
1183
1184 @* Component *@
1185
1186 @helper RenderImage(Image settings)
1187 {
1188 if (settings.FilterPrimary != ImageFilter.None || settings.FilterSecondary != ImageFilter.None)
1189 {
1190 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
1191 if (!string.IsNullOrEmpty(settings.FilterColor)) { optionalAttributes.Add("style", "background-color: " + settings.FilterColor); }
1192
1193 if (settings.Caption != null)
1194 {
1195 @:<div>
1196 }
1197
1198 var primaryFilterClass = settings.FilterPrimary.ToString().ToLower();
1199 var secondaryFilterClass = settings.FilterSecondary.ToString().ToLower();
1200
1201 <div class="image-filter image-filter--@primaryFilterClass u-position-relative dw-mod" @ComponentMethods.AddAttributes(optionalAttributes)>
1202 <div class="image-filter image-filter--@secondaryFilterClass dw-mod">
1203 @if (settings.Link != null)
1204 {
1205 <a href="@settings.Link">
1206 @RenderTheImage(settings)
1207 </a>
1208 }
1209 else
1210 {
1211 @RenderTheImage(settings)
1212 }
1213 </div>
1214 </div>
1215
1216 if (settings.Caption != null)
1217 {
1218 <span class="image-caption dw-mod">@settings.Caption</span>
1219 @:</div>
1220 }
1221 }
1222 else
1223 {
1224 if (settings.Caption != null)
1225 {
1226 @:<div>
1227 }
1228 if (!string.IsNullOrEmpty(settings.Link))
1229 {
1230 <a href="@settings.Link">
1231 @RenderTheImage(settings)
1232 </a>
1233 }
1234 else
1235 {
1236 @RenderTheImage(settings)
1237 }
1238
1239 if (settings.Caption != null)
1240 {
1241 <span class="image-caption dw-mod">@settings.Caption</span>
1242 @:</div>
1243 }
1244 }
1245 }
1246
1247 @helper RenderTheImage(Image settings)
1248 {
1249 if (settings != null)
1250 {
1251 string alternativeImage = !string.IsNullOrEmpty(Pageview.AreaSettings.GetItem("Settings").GetString("AlternativeImage")) ? Pageview.AreaSettings.GetItem("Settings").GetFile("AlternativeImage").PathUrlEncoded : "/Images/missing_image.jpg";
1252 string placeholderImage = "/Files/Images/placeholder.gif";
1253 string imageEngine = "/Admin/Public/GetImage.ashx?";
1254
1255 string imageStyle = "";
1256
1257 switch (settings.Style)
1258 {
1259 case ImageStyle.Ball:
1260 imageStyle = "grid__cell-img--ball";
1261 break;
1262
1263 case ImageStyle.Triangle:
1264 imageStyle = "grid__cell-img--triangle";
1265 break;
1266 }
1267
1268 if (settings.Style == ImageStyle.Ball || settings.Style == ImageStyle.Circle || settings.Style == ImageStyle.Triangle)
1269 {
1270 settings.ImageDefault.Crop = settings.ImageDefault.Crop == 5 ? settings.ImageDefault.Crop = 0 : settings.ImageDefault.Crop;
1271
1272 if (settings.ImageDefault != null)
1273 {
1274 settings.ImageDefault.Height = settings.ImageDefault.Width;
1275 }
1276 if (settings.ImageMedium != null)
1277 {
1278 settings.ImageMedium.Height = settings.ImageMedium.Width;
1279 }
1280 if (settings.ImageSmall != null)
1281 {
1282 settings.ImageSmall.Height = settings.ImageSmall.Width;
1283 }
1284 }
1285
1286 string defaultImage = imageEngine;
1287 string imageSmall = "";
1288 string imageMedium = "";
1289
1290 if (settings.DisableImageEngine)
1291 {
1292 defaultImage = settings.Path;
1293 }
1294 else
1295 {
1296 if (settings.ImageDefault != null)
1297 {
1298 defaultImage += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageDefault);
1299
1300 if (settings.Path.GetType() != typeof(string))
1301 {
1302 defaultImage += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
1303 defaultImage += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
1304 }
1305 else
1306 {
1307 defaultImage += settings.Path != null ? "Image=" + settings.Path : "";
1308 }
1309
1310 defaultImage += "&AlternativeImage=" + alternativeImage;
1311 }
1312
1313 if (settings.ImageSmall != null)
1314 {
1315 imageSmall = "data-src-small=\"" + imageEngine;
1316 imageSmall += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageSmall);
1317
1318 if (settings.Path.GetType() != typeof(string))
1319 {
1320 imageSmall += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
1321 imageSmall += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
1322 }
1323 else
1324 {
1325 imageSmall += settings.Path != null ? "Image=" + settings.Path : "";
1326 }
1327
1328 imageSmall += "&alternativeImage=" + alternativeImage;
1329
1330 imageSmall += "\"";
1331 }
1332
1333 if (settings.ImageMedium != null)
1334 {
1335 imageMedium = "data-src-medium=\"" + imageEngine;
1336 imageMedium += Dynamicweb.Rapido.Services.Images.GetImagePathFromSettings(settings.ImageMedium);
1337
1338 if (settings.Path.GetType() != typeof(string))
1339 {
1340 imageMedium += settings.Path != null ? "Image=" + settings.Path.PathUrlEncoded : "";
1341 imageMedium += settings.Path != null ? "&" + settings.Path.GetFocalPointParameters() : "";
1342 }
1343 else
1344 {
1345 imageMedium += settings.Path != null ? "Image=" + settings.Path : "";
1346 }
1347
1348 imageMedium += "&alternativeImage=" + alternativeImage;
1349
1350 imageMedium += "\"";
1351 }
1352 }
1353
1354 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
1355 if (!string.IsNullOrEmpty(settings.OnClick)) { optionalAttributes.Add("onclick", settings.OnClick); }
1356 if (!string.IsNullOrEmpty(settings.Title))
1357 {
1358 optionalAttributes.Add("alt", settings.Title);
1359 optionalAttributes.Add("title", settings.Title);
1360 }
1361
1362 if (settings.DisableLazyLoad)
1363 {
1364 <img id="@settings.Id" class="@imageStyle @settings.CssClass dw-mod" src="@defaultImage" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
1365 }
1366 else
1367 {
1368 <img id="@settings.Id" class="b-lazy @imageStyle @settings.CssClass dw-mod" src="@placeholderImage" data-src="@defaultImage" @imageSmall @imageMedium @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes) />
1369 }
1370 }
1371 }
1372 @using System.Reflection
1373 @using Dynamicweb.Rapido.Blocks.Components.General
1374 @using Dynamicweb.Rapido.Blocks.Components
1375
1376 @* Component *@
1377
1378 @helper RenderFileField(FileField settings)
1379 {
1380 var attributes = new Dictionary<string, string>();
1381 if (string.IsNullOrEmpty(settings.Id))
1382 {
1383 settings.Id = Guid.NewGuid().ToString("N");
1384 }
1385
1386 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1387 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1388 if (settings.Required) { attributes.Add("required", "true"); }
1389 if (settings.Multiple) { attributes.Add("multiple", "true"); }
1390 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1391 if (string.IsNullOrEmpty(settings.ChooseFileText))
1392 {
1393 settings.ChooseFileText = Translate("Choose file");
1394 }
1395 if (string.IsNullOrEmpty(settings.NoFilesChosenText))
1396 {
1397 settings.NoFilesChosenText = Translate("No files chosen...");
1398 }
1399 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1400
1401 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1402
1403 string setValueToFakeInput = "FileUpload.setValueToFakeInput(this)";
1404 attributes.Add("onchange", setValueToFakeInput + (!string.IsNullOrEmpty(settings.OnChange) ? settings.OnChange : ""));
1405
1406 attributes.Add("type", "file");
1407 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1408 settings.CssClass = "u-full-width " + settings.CssClass;
1409
1410 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1411
1412 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1413 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1414 {
1415 <div class="u-full-width">
1416 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1417 @if (settings.Link != null) {
1418 <div class="u-pull--right">
1419 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1420 @Render(settings.Link)
1421 </div>
1422 }
1423 </div>
1424
1425 }
1426
1427 @if (!string.IsNullOrEmpty(settings.HelpText))
1428 {
1429 <small class="form__help-text">@settings.HelpText</small>
1430 }
1431
1432 <div class="form__field-combi file-input u-no-margin dw-mod">
1433 <input @ComponentMethods.AddAttributes(resultAttributes) class="file-input__real-input" data-no-files-text="@settings.NoFilesChosenText" data-many-files-text="@Translate("files")" />
1434 <label for="@settings.Id" class="file-input__btn btn--secondary btn dw-mod">@settings.ChooseFileText</label>
1435 <label for="@settings.Id" class="@settings.CssClass file-input__fake-input js-fake-input dw-mod">@settings.NoFilesChosenText</label>
1436 @if (settings.UploadButton != null)
1437 {
1438 settings.UploadButton.CssClass += " btn--condensed u-no-margin";
1439 @Render(settings.UploadButton)
1440 }
1441 </div>
1442 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1443 </div>
1444 }
1445 @using System.Reflection
1446 @using Dynamicweb.Rapido.Blocks.Components.General
1447 @using Dynamicweb.Rapido.Blocks.Components
1448 @using Dynamicweb.Core
1449 @using System.Linq
1450
1451 @* Component *@
1452
1453 @helper RenderDateTimeField(DateTimeField settings)
1454 {
1455 if (string.IsNullOrEmpty(settings.Id))
1456 {
1457 settings.Id = Guid.NewGuid().ToString("N");
1458 }
1459
1460 var textField = new TextField {
1461 Name = settings.Name,
1462 Id = settings.Id,
1463 Label = settings.Label,
1464 HelpText = settings.HelpText,
1465 Value = settings.Value,
1466 Disabled = settings.Disabled,
1467 Required = settings.Required,
1468 ErrorMessage = settings.ErrorMessage,
1469 CssClass = settings.CssClass,
1470 WrapperCssClass = settings.WrapperCssClass,
1471 OnChange = settings.OnChange,
1472 OnClick = settings.OnClick,
1473 Link = settings.Link,
1474 ExtraAttributes = settings.ExtraAttributes,
1475 //
1476 Placeholder = settings.Placeholder
1477 };
1478
1479 @Render(textField)
1480
1481 List<string> jsAttributes = new List<string>();
1482
1483 jsAttributes.Add("mode: '" + Enum.GetName(typeof(DateTimeFieldMode), settings.Mode).ToLower() + "'");
1484
1485 if (!string.IsNullOrEmpty(settings.DateFormat))
1486 {
1487 jsAttributes.Add("dateFormat: '" + settings.DateFormat + "'");
1488 }
1489 if (!string.IsNullOrEmpty(settings.MinDate))
1490 {
1491 jsAttributes.Add("minDate: '" + settings.MinDate + "'");
1492 }
1493 if (!string.IsNullOrEmpty(settings.MaxDate))
1494 {
1495 jsAttributes.Add("maxDate: '" + settings.MaxDate + "'");
1496 }
1497 if (settings.IsInline)
1498 {
1499 jsAttributes.Add("inline: " + Converter.ToString(settings.IsInline).ToLower());
1500 }
1501 if (settings.EnableTime)
1502 {
1503 jsAttributes.Add("enableTime: " + Converter.ToString(settings.EnableTime).ToLower());
1504 }
1505 if (settings.EnableWeekNumbers)
1506 {
1507 jsAttributes.Add("weekNumbers: " + Converter.ToString(settings.EnableWeekNumbers).ToLower());
1508 }
1509
1510 jsAttributes.AddRange(settings.GetFlatPickrOptions().Select(x => x.Key + ": " + x.Value));
1511
1512 <script>
1513 document.addEventListener("DOMContentLoaded", function () {
1514 flatpickr("#@textField.Id", {
1515 @string.Join(",", jsAttributes)
1516 });
1517 });
1518 </script>
1519 }
1520 @using System.Reflection
1521 @using Dynamicweb.Rapido.Blocks.Components.General
1522 @using Dynamicweb.Rapido.Blocks.Components
1523
1524 @* Component *@
1525
1526 @helper RenderTextField(TextField settings)
1527 {
1528 var attributes = new Dictionary<string, string>();
1529 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1530 {
1531 settings.Id = Guid.NewGuid().ToString("N");
1532 }
1533
1534 /*base settings*/
1535 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1536 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1537 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1538 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1539 if (settings.Required) { attributes.Add("required", "true"); }
1540 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1541 /*end*/
1542
1543 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1544 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1545 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1546 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1547 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1548 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1549 attributes.Add("type", Enum.GetName(typeof(TextFieldType), settings.Type).ToLower());
1550 if (settings.Type == TextFieldType.Password) { attributes.Add("autocomplete", "off"); };
1551 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1552
1553 settings.CssClass = "u-full-width " + settings.CssClass;
1554
1555 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1556
1557 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1558
1559 string noMargin = "u-no-margin";
1560 if (!settings.ReadOnly) {
1561 noMargin = "";
1562 }
1563
1564 <div class="form__field-group u-full-width @noMargin @settings.WrapperCssClass dw-mod">
1565 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1566 {
1567 <div class="u-full-width">
1568 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1569 @if (settings.Link != null) {
1570 settings.Link.ButtonLayout = ButtonLayout.LinkClean;
1571
1572 <div class="u-pull--right">
1573 @Render(settings.Link)
1574 </div>
1575 }
1576 </div>
1577
1578 }
1579
1580 @if (!string.IsNullOrEmpty(settings.HelpText))
1581 {
1582 <small class="form__help-text">@settings.HelpText</small>
1583 }
1584
1585 @if (settings.ActionButton != null)
1586 {
1587 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1588 <div class="form__field-combi u-no-margin dw-mod">
1589 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1590 @Render(settings.ActionButton)
1591 </div>
1592 }
1593 else
1594 {
1595 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1596 }
1597
1598 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1599 </div>
1600 }
1601 @using System.Reflection
1602 @using Dynamicweb.Rapido.Blocks.Components.General
1603 @using Dynamicweb.Rapido.Blocks.Components
1604
1605 @* Component *@
1606
1607 @helper RenderNumberField(NumberField settings)
1608 {
1609 var attributes = new Dictionary<string, string>();
1610 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1611 {
1612 settings.Id = Guid.NewGuid().ToString("N");
1613 }
1614
1615 /*base settings*/
1616 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1617 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1618 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1619 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1620 if (settings.Required) { attributes.Add("required", "true"); }
1621 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1622 /*end*/
1623
1624 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1625 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1626 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1627 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1628 if (settings.Max != null) { attributes.Add("max", settings.Max.ToString()); }
1629 if (settings.Min != null) { attributes.Add("min", settings.Min.ToString()); }
1630 if (settings.Step != 0) { attributes.Add("step", settings.Step.ToString()); }
1631 if (settings.Value != null && !string.IsNullOrEmpty(settings.Value.ToString())) { attributes.Add("value", settings.Value.ToString()); }
1632 attributes.Add("type", "number");
1633
1634 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1635
1636 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
1637 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1638 {
1639 <div class="u-full-width">
1640 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1641 @if (settings.Link != null) {
1642 <div class="u-pull--right">
1643 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1644 @Render(settings.Link)
1645 </div>
1646 }
1647 </div>
1648
1649 }
1650
1651 @if (!string.IsNullOrEmpty(settings.HelpText))
1652 {
1653 <small class="form__help-text">@settings.HelpText</small>
1654 }
1655
1656 @if (settings.ActionButton != null)
1657 {
1658 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
1659 <div class="form__field-combi u-no-margin dw-mod">
1660 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1661 @Render(settings.ActionButton)
1662 </div>
1663 }
1664 else
1665 {
1666 <div class="form__field-combi u-no-margin dw-mod">
1667 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1668 </div>
1669 }
1670
1671 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1672 </div>
1673 }
1674 @using System.Reflection
1675 @using Dynamicweb.Rapido.Blocks.Components.General
1676 @using Dynamicweb.Rapido.Blocks.Components
1677
1678
1679 @* Component *@
1680
1681 @helper RenderTextareaField(TextareaField settings)
1682 {
1683 Dictionary<string, string> attributes = new Dictionary<string, string>();
1684 string id = settings.Id;
1685 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(id))
1686 {
1687 id = Guid.NewGuid().ToString("N");
1688 }
1689
1690 if (!string.IsNullOrEmpty(id)) { attributes.Add("id", id); }
1691 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1692 if (!string.IsNullOrEmpty(settings.OnKeyUp)) { attributes.Add("onkeyup", settings.OnKeyUp); }
1693 if (!string.IsNullOrEmpty(settings.OnInput)) { attributes.Add("oninput", settings.OnInput); }
1694 if (!string.IsNullOrEmpty(settings.OnFocus)) { attributes.Add("onfocus", settings.OnFocus); }
1695 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1696 if (!string.IsNullOrEmpty(settings.Placeholder)) { attributes.Add("placeholder", settings.Placeholder); }
1697 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1698 if (settings.Required) { attributes.Add("required", "true"); }
1699 if (settings.ReadOnly) { attributes.Add("readonly", "true"); }
1700 if (settings.MaxLength != 0) { attributes.Add("maxlength", settings.MaxLength.ToString()); }
1701 if (settings.Rows != 0) { attributes.Add("rows", settings.Rows.ToString()); }
1702 attributes.Add("name", settings.Name);
1703
1704 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1705
1706 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1707 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1708 {
1709 <div class="u-full-width">
1710 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1711 @if (settings.Link != null) {
1712 <div class="u-pull--right">
1713 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1714 @Render(settings.Link)
1715 </div>
1716 }
1717 </div>
1718 }
1719
1720 @if (!string.IsNullOrEmpty(settings.HelpText))
1721 {
1722 <small class="form__help-text">@settings.HelpText</small>
1723 }
1724
1725 <textarea class="u-full-width @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Value</textarea>
1726
1727 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1728 </div>
1729 }
1730 @using System.Reflection
1731 @using Dynamicweb.Rapido.Blocks.Components.General
1732 @using Dynamicweb.Rapido.Blocks.Components
1733
1734
1735 @* Component *@
1736
1737 @helper RenderHiddenField(HiddenField settings) {
1738 var attributes = new Dictionary<string, string>();
1739 attributes.Add("type", "hidden");
1740 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1741 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1742 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1743
1744 <input @ComponentMethods.AddAttributes(attributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)/>
1745 }
1746 @using System.Reflection
1747 @using Dynamicweb.Rapido.Blocks.Components.General
1748 @using Dynamicweb.Rapido.Blocks.Components
1749
1750 @* Component *@
1751
1752 @helper RenderCheckboxField(CheckboxField settings)
1753 {
1754 var attributes = new Dictionary<string, string>();
1755 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1756 {
1757 settings.Id = Guid.NewGuid().ToString("N");
1758 }
1759
1760 /*base settings*/
1761 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
1762 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
1763 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
1764 if (settings.Disabled) { attributes.Add("disabled", "true"); }
1765 if (settings.Required) { attributes.Add("required", "true"); }
1766 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
1767 /*end*/
1768
1769 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
1770
1771 attributes.Add("type", "checkbox");
1772 if (settings.Checked) { attributes.Add("checked", "true"); }
1773 settings.CssClass = "form__control " + settings.CssClass;
1774 if (settings.Value != null) { attributes.Add("value", settings.Value); }
1775
1776 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1777
1778 <div class="form__field-group @settings.WrapperCssClass dw-mod">
1779 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
1780 @if (!string.IsNullOrEmpty(settings.Label))
1781 {
1782 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
1783 }
1784
1785 @if (settings.Link != null) {
1786 <span>
1787 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1788 @Render(settings.Link)
1789 </span>
1790 }
1791
1792 @if (!string.IsNullOrEmpty(settings.HelpText))
1793 {
1794 <small class="form__help-text checkbox-help dw-mod">@settings.HelpText</small>
1795 }
1796 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1797 </div>
1798 }
1799 @using System.Reflection
1800 @using Dynamicweb.Rapido.Blocks.Components.General
1801 @using Dynamicweb.Rapido.Blocks.Components
1802
1803
1804 @* Component *@
1805
1806 @helper RenderCheckboxListField(CheckboxListField settings)
1807 {
1808 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
1809 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
1810 {
1811 <div class="u-full-width">
1812 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
1813 @if (settings.Link != null) {
1814 <div class="u-pull--right">
1815 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
1816 @Render(settings.Link)
1817 </div>
1818 }
1819 </div>
1820
1821 }
1822
1823 <div class="u-pull--left">
1824 @if (!string.IsNullOrEmpty(settings.HelpText))
1825 {
1826 <small class="form__help-text">@settings.HelpText</small>
1827 }
1828
1829 @foreach (var item in settings.Options)
1830 {
1831 if (settings.Required)
1832 {
1833 item.Required = true;
1834 }
1835 if (settings.Disabled)
1836 {
1837 item.Disabled = true;
1838 }
1839 if (!string.IsNullOrEmpty(settings.Name))
1840 {
1841 item.Name = settings.Name;
1842 }
1843 if (!string.IsNullOrEmpty(settings.CssClass))
1844 {
1845 item.CssClass += settings.CssClass;
1846 }
1847
1848 /* value is not supported */
1849
1850 if (!string.IsNullOrEmpty(settings.OnClick))
1851 {
1852 item.OnClick += settings.OnClick;
1853 }
1854 if (!string.IsNullOrEmpty(settings.OnChange))
1855 {
1856 item.OnChange += settings.OnChange;
1857 }
1858 @Render(item)
1859 }
1860
1861 @Render(new NotificationMessage { Message = settings.ErrorMessage })
1862 </div>
1863
1864 </div>
1865 }
1866 @using Dynamicweb.Rapido.Blocks.Components.General
1867
1868 @* Component *@
1869
1870 @helper RenderSearch(Search settings)
1871 {
1872 var searchValue = HttpContext.Current.Request.QueryString.Get(settings.SearchParameter) ?? "";
1873 var groupValue = HttpContext.Current.Request.QueryString.Get(settings.GroupsParameter) ?? "";
1874
1875 if (string.IsNullOrEmpty(settings.Id))
1876 {
1877 settings.Id = Guid.NewGuid().ToString("N");
1878 }
1879
1880 var resultAttributes = new Dictionary<string, string>();
1881
1882 if (settings.PageSize != 0)
1883 {
1884 resultAttributes.Add("data-page-size", settings.PageSize.ToString());
1885 }
1886 if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1887 {
1888 resultAttributes.Add("data-groups-feed-url", settings.GroupItemsFeedUrl);
1889 if (!string.IsNullOrEmpty(groupValue))
1890 {
1891 resultAttributes.Add("data-selected-group", groupValue);
1892 }
1893 if (!string.IsNullOrEmpty(settings.GroupsParameter))
1894 {
1895 resultAttributes.Add("data-groups-parameter", settings.GroupsParameter);
1896 }
1897 }
1898 resultAttributes.Add("data-force-init", "true");
1899 if (settings.GoToFirstSearchResultOnEnter)
1900 {
1901 resultAttributes.Add("data-go-to-first-search-result-on-enter", settings.GoToFirstSearchResultOnEnter.ToString().ToLower());
1902 }
1903 if (!string.IsNullOrEmpty(settings.SearchParameter))
1904 {
1905 resultAttributes.Add("data-search-parameter", settings.SearchParameter);
1906 }
1907 resultAttributes.Add("data-search-feed-url", settings.SearchData.SearchFeedUrl);
1908 resultAttributes.Add("data-results-template-id", settings.SearchData.ResultsTemplateId);
1909
1910 if (settings.SecondSearchData != null)
1911 {
1912 resultAttributes.Add("data-second-search-feed-url", settings.SecondSearchData.SearchFeedUrl);
1913 resultAttributes.Add("data-second-results-template-id", settings.SecondSearchData.ResultsTemplateId);
1914 }
1915 if (!string.IsNullOrEmpty(settings.ResultsPageUrl))
1916 {
1917 resultAttributes.Add("data-results-page-url", settings.ResultsPageUrl);
1918 }
1919
1920 resultAttributes = resultAttributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
1921
1922 string searchFieldCss = (settings.SearchButton == null) ? "search--with-icon" : "";
1923
1924 <div class="search @settings.CssClass @searchFieldCss js-search-data-source dw-mod" id="@settings.Id" @ComponentMethods.AddAttributes(resultAttributes)>
1925 @if (!string.IsNullOrEmpty(settings.GroupItemsFeedUrl))
1926 {
1927 <button type="button" class="search__groups-btn dw-mod js-search-groups-btn">@Translate("All")</button>
1928 <ul class="dropdown dropdown--absolute-position dw-mod search__groups-results js-search-groups-list"></ul>
1929 }
1930
1931 <input type="text" class="search__field dw-mod js-search-field" placeholder="@settings.Placeholder" value="@searchValue">
1932
1933 <div class="dropdown dropdown--absolute-position search__results dw-mod js-search-results @(settings.SecondSearchData != null ? "search__results--combined" : "")">
1934 @if (settings.SecondSearchData != null)
1935 {
1936 <div class="search__column search__column--products dw-mod">
1937 <div class="search__column-header dw-mod">@Translate("Products")</div>
1938 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1939 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1940 {
1941 @Render(new Link {
1942 Title = Translate("View all"),
1943 CssClass = "js-view-all-button u-margin",
1944 Href = settings.SearchData.ResultsPageUrl
1945 });
1946 }
1947 </div>
1948 <div class="search__column search__column--pages dw-mod">
1949 <div class="search__column-header">@Translate("Pages")</div>
1950 <ul class="search__results-list dw-mod js-search-results-second-list" id="@(settings.Id)_SecondResultsList"></ul>
1951 @if (!string.IsNullOrEmpty(settings.SecondSearchData.ResultsPageUrl))
1952 {
1953 @Render(new Link
1954 {
1955 Title = Translate("View all"),
1956 CssClass = "js-view-all-button u-margin",
1957 Href = settings.SecondSearchData.ResultsPageUrl
1958 });
1959 }
1960 </div>
1961 }
1962 else
1963 {
1964 <div class="search__column search__column--only dw-mod">
1965 <ul class="search__results-list dw-mod js-search-results-list" id="@(settings.Id)_ResultsList"></ul>
1966 @if (!string.IsNullOrEmpty(settings.SearchData.ResultsPageUrl))
1967 {
1968 @Render(new Link {
1969 Title = Translate("View all"),
1970 CssClass = "js-view-all-button u-margin",
1971 Href = settings.SearchData.ResultsPageUrl
1972 });
1973 }
1974 </div>
1975 }
1976 </div>
1977
1978 @if (settings.SearchButton != null)
1979 {
1980 settings.SearchButton.CssClass += " search__btn js-search-btn";
1981 if (settings.RenderDefaultSearchIcon)
1982 {
1983 settings.SearchButton.Icon = new Icon { Name = Pageview.AreaSettings.GetItem("Layout").GetItem("Icons").GetList("SearchIcon").SelectedValue };
1984 }
1985 @Render(settings.SearchButton);
1986 }
1987 </div>
1988 }
1989 @using System.Reflection
1990 @using Dynamicweb.Rapido.Blocks.Components.General
1991 @using Dynamicweb.Rapido.Blocks.Components
1992
1993
1994 @* Component *@
1995
1996 @helper RenderSelectField(SelectField settings)
1997 {
1998 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
1999 {
2000 settings.Id = Guid.NewGuid().ToString("N");
2001 }
2002
2003 <div class="form__field-group u-full-width @settings.WrapperCssClass dw-mod">
2004 @if (!string.IsNullOrEmpty(settings.Label) || settings.Link != null )
2005 {
2006 <div class="u-full-width">
2007 @if (!string.IsNullOrEmpty(settings.Label)) { <label for="@settings.Id" class="u-pull--left">@settings.Label</label> }
2008 @if (settings.Link != null) {
2009 <div class="u-pull--right">
2010 @{ settings.Link.ButtonLayout = ButtonLayout.LinkClean; }
2011 @Render(settings.Link)
2012 </div>
2013 }
2014 </div>
2015 }
2016
2017 @if (!string.IsNullOrEmpty(settings.HelpText))
2018 {
2019 <small class="form__help-text">@settings.HelpText</small>
2020 }
2021
2022 @if (settings.ActionButton != null)
2023 {
2024 settings.ActionButton.CssClass += " btn--condensed u-no-margin";
2025 <div class="form__field-combi u-no-margin dw-mod">
2026 @RenderSelectBase(settings)
2027 @Render(settings.ActionButton)
2028 </div>
2029 }
2030 else
2031 {
2032 @RenderSelectBase(settings)
2033 }
2034
2035 @Render(new NotificationMessage { Message = settings.ErrorMessage })
2036 </div>
2037 }
2038
2039 @helper RenderSelectBase(SelectField settings)
2040 {
2041 var attributes = new Dictionary<string, string>();
2042
2043 /*base settings*/
2044 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2045 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
2046 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
2047 if (settings.Disabled) { attributes.Add("disabled", "true"); }
2048 if (settings.Required) { attributes.Add("required", "true"); }
2049 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
2050 /*end*/
2051
2052 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
2053
2054 <select @ComponentMethods.AddAttributes(resultAttributes) class="u-full-width @settings.CssClass dw-mod">
2055 @if (settings.Default != null)
2056 {
2057 @Render(settings.Default)
2058 }
2059
2060 @foreach (var item in settings.Options)
2061 {
2062 if (settings.Value != null) {
2063 item.Checked = item.Value == settings.Value;
2064 }
2065 @Render(item)
2066 }
2067 </select>
2068 }
2069 @using System.Reflection
2070 @using Dynamicweb.Rapido.Blocks.Components.General
2071 @using Dynamicweb.Rapido.Blocks.Components
2072
2073 @* Component *@
2074
2075 @helper RenderRadioButtonField(RadioButtonField settings)
2076 {
2077 var attributes = new Dictionary<string, string>();
2078 if (!string.IsNullOrEmpty(settings.Label) && string.IsNullOrEmpty(settings.Id))
2079 {
2080 settings.Id = Guid.NewGuid().ToString("N");
2081 }
2082
2083 /*base settings*/
2084 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2085 if (!string.IsNullOrEmpty(settings.OnClick)) { attributes.Add("onclick", settings.OnClick); }
2086 if (!string.IsNullOrEmpty(settings.OnChange)) { attributes.Add("onchange", settings.OnChange); }
2087 if (settings.Disabled) { attributes.Add("disabled", "true"); }
2088 if (settings.Required) { attributes.Add("required", "true"); }
2089 if (!string.IsNullOrEmpty(settings.Name)) { attributes.Add("name", settings.Name); }
2090 /*end*/
2091
2092 attributes.Add("type", "radio");
2093 if (settings.Checked) { attributes.Add("checked", "true"); }
2094 settings.CssClass = "form__control " + settings.CssClass;
2095 if (settings.Value != null) { attributes.Add("value", settings.Value); }
2096
2097 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary (d => d.Key, d => d.Last().Value);
2098
2099 <div class="form__field-group @settings.WrapperCssClass dw-mod">
2100 <input @ComponentMethods.AddAttributes(resultAttributes) class="@settings.CssClass dw-mod" />
2101 @if (!string.IsNullOrEmpty(settings.Label))
2102 {
2103 <label for="@settings.Id" class="dw-mod">@settings.Label</label>
2104 }
2105 @if (!string.IsNullOrEmpty(settings.HelpText))
2106 {
2107 <small class="form__help-text">@settings.HelpText</small>
2108 }
2109 @Render(new NotificationMessage { Message = settings.ErrorMessage })
2110 </div>
2111 }
2112 @using System.Reflection
2113 @using Dynamicweb.Rapido.Blocks.Components.General
2114 @using Dynamicweb.Rapido.Blocks.Components
2115
2116
2117 @* Component *@
2118
2119 @helper RenderRadioButtonListField(RadioButtonListField settings)
2120 {
2121 if (settings.Required && !String.IsNullOrEmpty(settings.Label)) { settings.Label += " <span class=\"required dw-mod\">*</span>"; }
2122
2123 <div class="form__field-group @settings.WrapperCssClass u-margin-bottom dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
2124 @if (!string.IsNullOrEmpty(settings.Label))
2125 {
2126 <label>@settings.Label</label>
2127 }
2128 @if (!string.IsNullOrEmpty(settings.HelpText))
2129 {
2130 <small class="form__help-text">@settings.HelpText</small>
2131 }
2132
2133 @foreach (var item in settings.Options)
2134 {
2135 if (settings.Required)
2136 {
2137 item.Required = true;
2138 }
2139 if (settings.Disabled)
2140 {
2141 item.Disabled = true;
2142 }
2143 if (!string.IsNullOrEmpty(settings.Name))
2144 {
2145 item.Name = settings.Name;
2146 }
2147 if (settings.Value != null && settings.Value == item.Value)
2148 {
2149 item.Checked = true;
2150 }
2151 if (!string.IsNullOrEmpty(settings.OnClick))
2152 {
2153 item.OnClick += settings.OnClick;
2154 }
2155 if (!string.IsNullOrEmpty(settings.OnChange))
2156 {
2157 item.OnChange += settings.OnChange;
2158 }
2159 if (!string.IsNullOrEmpty(settings.CssClass))
2160 {
2161 item.CssClass += settings.CssClass;
2162 }
2163 @Render(item)
2164 }
2165
2166 @Render(new NotificationMessage { Message = settings.ErrorMessage })
2167 </div>
2168 }
2169 @using System.Reflection
2170 @using Dynamicweb.Rapido.Blocks.Components.General
2171 @using Dynamicweb.Rapido.Blocks.Components
2172
2173
2174 @* Component *@
2175
2176 @helper RenderNotificationMessage(NotificationMessage settings)
2177 {
2178 if (!string.IsNullOrEmpty(settings.Message))
2179 {
2180 var attributes = new Dictionary<string, string>();
2181 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2182
2183 string messageTypeClass = Enum.GetName(typeof(NotificationMessageType), settings.MessageType).ToLower();
2184 string messageLayoutClass = Enum.GetName(typeof(NotificationMessageLayout), settings.MessageLayout).ToLower();
2185 string minHeightClass = settings.Icon != null ? "u-min-h70px" : "";
2186
2187 <div class="notification-message-@messageTypeClass notification-message-@messageLayoutClass @messageLayoutClass @minHeightClass @settings.CssClass u-full-width dw-mod" @ComponentMethods.AddAttributes(attributes)>
2188 @if (settings.Icon != null) {
2189 settings.Icon.Label = !string.IsNullOrEmpty(settings.Icon.Label) ? settings.Message + settings.Icon.Label : settings.Message;
2190 @Render(settings.Icon)
2191 } else {
2192 @settings.Message
2193 }
2194 </div>
2195 }
2196 }
2197 @using Dynamicweb.Rapido.Blocks.Components.General
2198
2199
2200 @* Component *@
2201
2202 @helper RenderHandlebarsRoot(HandlebarsRoot settings) {
2203 string preRender = !String.IsNullOrEmpty(settings.PreRenderScriptTemplate) ? "data-pre-render-template=\"" + settings.PreRenderScriptTemplate + "\"" : "";
2204
2205 <div class="@settings.CssClass dw-mod js-handlebars-root" id="@settings.Id" data-template="@settings.ScriptTemplate" data-json-feed="@settings.FeedUrl" data-init-onload="@settings.InitOnLoad.ToString()" data-preloader="@settings.Preloader" @preRender>
2206 @if (settings.SubBlocks != null) {
2207 @RenderBlockList(settings.SubBlocks)
2208 }
2209 </div>
2210 }
2211 @using System.Reflection
2212 @using Dynamicweb.Rapido.Blocks.Components.General
2213 @using Dynamicweb.Rapido.Blocks.Components
2214 @using System.Text.RegularExpressions
2215
2216
2217 @* Component *@
2218
2219 @helper RenderSticker(Sticker settings) {
2220 if (!String.IsNullOrEmpty(settings.Title)) {
2221 string size = settings.Size.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Size.ToString().ToLower() : "";
2222 string style = settings.Style.ToString() != "None" ? "" + "stickers-container__tag--" + settings.Style.ToString().ToLower() : "";
2223
2224 Dictionary<String, String> optionalAttributes = new Dictionary<string, string>();
2225 if (!String.IsNullOrEmpty(settings.Color) || !String.IsNullOrEmpty(settings.BackgroundColor)) {
2226 string styleTag = !String.IsNullOrEmpty(settings.Color) ? "color: " + settings.Color + "; " : "";
2227 styleTag += !String.IsNullOrEmpty(settings.BackgroundColor) ? "background-color: " + settings.BackgroundColor + "; " : "";
2228 optionalAttributes.Add("style", styleTag);
2229 }
2230
2231 <div class="stickers-container__tag @size @style @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>@settings.Title</div>
2232 }
2233 }
2234
2235 @using System.Reflection
2236 @using Dynamicweb.Rapido.Blocks.Components.General
2237 @using Dynamicweb.Rapido.Blocks.Components
2238
2239
2240 @* Component *@
2241
2242 @helper RenderStickersCollection(StickersCollection settings)
2243 {
2244 if (settings.Stickers.Count > 0)
2245 {
2246 string position = "stickers-container--" + Regex.Replace(settings.Position.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
2247
2248 <div class="stickers-container @position @settings.CssClass dw-mod" @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
2249 @foreach (Sticker sticker in settings.Stickers)
2250 {
2251 @Render(sticker)
2252 }
2253 </div>
2254 }
2255 }
2256
2257 @using Dynamicweb.Rapido.Blocks.Components.General
2258
2259
2260 @* Component *@
2261
2262 @helper RenderForm(Form settings) {
2263 if (settings != null)
2264 {
2265 Dictionary<string, string> optionalAttributes = new Dictionary<string, string>();
2266 if (!string.IsNullOrEmpty(settings.Action)) { optionalAttributes.Add("action", settings.Action); };
2267 if (!string.IsNullOrEmpty(settings.Name)) { optionalAttributes.Add("name", settings.Name); };
2268 if (!string.IsNullOrEmpty(settings.OnSubmit)) { optionalAttributes.Add("onsubmit", settings.OnSubmit); };
2269 var enctypes = new Dictionary<string, string>
2270 {
2271 { "multipart", "multipart/form-data" },
2272 { "text", "text/plain" },
2273 { "application", "application/x-www-form-urlencoded" }
2274 };
2275 if (settings.Enctype != FormEnctype.none) { optionalAttributes.Add("enctype", enctypes[Enum.GetName(typeof(FormEnctype), settings.Enctype).ToLower()]); };
2276 optionalAttributes.Add("method", settings.Method.ToString());
2277
2278 if (!string.IsNullOrEmpty(settings.FormStartMarkup))
2279 {
2280 @settings.FormStartMarkup
2281 }
2282 else
2283 {
2284 @:<form class="@settings.CssClass u-no-margin dw-mod" @ComponentMethods.AddAttributes(optionalAttributes) @ComponentMethods.AddAttributes(settings.ExtraAttributes)>
2285 }
2286
2287 foreach (var field in settings.GetFields())
2288 {
2289 @Render(field)
2290 }
2291
2292 @:</form>
2293 }
2294 }
2295 @using System.Reflection
2296 @using Dynamicweb.Rapido.Blocks.Components.General
2297 @using Dynamicweb.Rapido.Blocks.Components
2298
2299
2300 @* Component *@
2301
2302 @helper RenderText(Text settings)
2303 {
2304 @settings.Content
2305 }
2306 @using System.Reflection
2307 @using Dynamicweb.Rapido.Blocks.Components.General
2308 @using Dynamicweb.Rapido.Blocks.Components
2309
2310
2311 @* Component *@
2312
2313 @helper RenderContentModule(ContentModule settings) {
2314 if (!string.IsNullOrEmpty(settings.Content))
2315 {
2316 @settings.Content
2317 }
2318 }
2319 @using System.Reflection
2320 @using Dynamicweb.Rapido.Blocks.Components.General
2321 @using Dynamicweb.Rapido.Blocks.Components
2322
2323
2324 @* Component *@
2325
2326 @helper RenderModal(Modal settings) {
2327 if (settings != null)
2328 {
2329 string modalId = !string.IsNullOrEmpty(settings.Id) ? settings.Id : Guid.NewGuid().ToString("N");
2330
2331 string onchange = !string.IsNullOrEmpty(settings.OnClose) ? "onchange=\"if(!this.checked){" + settings.OnClose + "}\"" : "";
2332
2333 <input type="checkbox" id="@(modalId)ModalTrigger" class="modal-trigger" @onchange />
2334
2335 <div class="modal-container">
2336 @if (!settings.DisableDarkOverlay)
2337 {
2338 <label for="@(modalId)ModalTrigger" id="@(modalId)ModalOverlay" class="modal-overlay"></label>
2339 }
2340 <div class="modal modal--@settings.Width.ToString().ToLower() modal-height--@settings.Height.ToString().ToLower()" id="@(modalId)Modal">
2341 @if (settings.Heading != null)
2342 {
2343 if (!string.IsNullOrEmpty(settings.Heading.Title))
2344 {
2345 <div class="modal__header">
2346 @Render(settings.Heading)
2347 </div>
2348 }
2349 }
2350 <div class="modal__body @(settings.Width.ToString().ToLower() == "full" ? "modal__body--full" : "")">
2351 @if (!string.IsNullOrEmpty(settings.BodyText))
2352 {
2353 @settings.BodyText
2354 }
2355 @if (settings.BodyTemplate != null)
2356 {
2357 @settings.BodyTemplate
2358 }
2359 @{
2360 var actions = settings.GetActions();
2361 }
2362 </div>
2363 @if (actions.Length > 0)
2364 {
2365 <div class="modal__footer">
2366 @foreach (var action in actions)
2367 {
2368 if (Pageview.Device.ToString() != "Mobile") {
2369 action.CssClass += " u-no-margin";
2370 } else {
2371 action.CssClass += " u-full-width u-margin-bottom";
2372 }
2373
2374 @Render(action)
2375 }
2376 </div>
2377 }
2378 <label class="modal__close-btn" for="@(modalId)ModalTrigger"></label>
2379 </div>
2380 </div>
2381 }
2382 }
2383 @using Dynamicweb.Rapido.Blocks.Components.General
2384
2385 @* Component *@
2386
2387 @helper RenderMediaListItem(MediaListItem settings)
2388 {
2389 <div class="media-list-item @settings.CssClass dw-mod" @(!string.IsNullOrEmpty(settings.Id) ? "id=\"" + settings.Id + "\"" : "")>
2390 @if (!string.IsNullOrEmpty(settings.Label))
2391 {
2392 if (!string.IsNullOrEmpty(settings.Link))
2393 {
2394 @Render(new Link
2395 {
2396 Href = settings.Link,
2397 CssClass = "media-list-item__sticker dw-mod",
2398 ButtonLayout = ButtonLayout.None,
2399 Title = settings.Label,
2400 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
2401 })
2402 }
2403 else if (!string.IsNullOrEmpty(settings.OnClick))
2404 {
2405 <span class="media-list-item__sticker dw-mod" onclick="@(settings.OnClick)">
2406 <span class="u-uppercase">@settings.Label</span>
2407 </span>
2408 }
2409 else
2410 {
2411 <span class="media-list-item__sticker media-list-item__sticker--no-link dw-mod">
2412 <span class="u-uppercase">@settings.Label</span>
2413 </span>
2414 }
2415 }
2416 <div class="media-list-item__wrap">
2417 <div class="media-list-item__info dw-mod">
2418 <div class="media-list-item__header dw-mod">
2419 @if (!string.IsNullOrEmpty(settings.Title))
2420 {
2421 if (!string.IsNullOrEmpty(settings.Link))
2422 {
2423 @Render(new Link
2424 {
2425 Href = settings.Link,
2426 CssClass = "media-list-item__name dw-mod",
2427 ButtonLayout = ButtonLayout.None,
2428 Title = settings.Title,
2429 OnClick = !string.IsNullOrEmpty(settings.OnClick) ? settings.OnClick : ""
2430 })
2431 }
2432 else if (!string.IsNullOrEmpty(settings.OnClick))
2433 {
2434 <span class="media-list-item__name dw-mod" onclick="@(settings.OnClick)">@settings.Title</span>
2435 }
2436 else
2437 {
2438 <span class="media-list-item__name media-list-item__name--no-link dw-mod">@settings.Title</span>
2439 }
2440 }
2441
2442 @if (!string.IsNullOrEmpty(settings.Status))
2443 {
2444 <div class="media-list-item__state dw-mod">@settings.Status</div>
2445 }
2446 </div>
2447 @{
2448 settings.InfoTable.CssClass += " media-list-item__parameters-table";
2449 }
2450
2451 @Render(settings.InfoTable)
2452 </div>
2453 <div class="media-list-item__actions dw-mod">
2454 <div class="media-list-item__actions-list dw-mod">
2455 @{
2456 var actions = settings.GetActions();
2457
2458 foreach (ButtonBase action in actions)
2459 {
2460 action.ButtonLayout = ButtonLayout.None;
2461 action.CssClass += " media-list-item__action link";
2462
2463 @Render(action)
2464 }
2465 }
2466 </div>
2467
2468 @if (settings.SelectButton != null && !string.IsNullOrEmpty(settings.SelectButton.Title))
2469 {
2470 settings.SelectButton.CssClass += " u-no-margin";
2471
2472 <div class="media-list-item__action-button">
2473 @Render(settings.SelectButton)
2474 </div>
2475 }
2476 </div>
2477 </div>
2478 </div>
2479 }
2480 @using Dynamicweb.Rapido.Blocks.Components.General
2481 @using Dynamicweb.Rapido.Blocks.Components
2482
2483 @helper RenderTable(Table settings)
2484 {
2485 Dictionary<string, string> attributes = new Dictionary<string, string>();
2486 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2487
2488 var enumToClasses = new Dictionary<TableDesign, string>
2489 {
2490 { TableDesign.Clean, "table--clean" },
2491 { TableDesign.Bordered, "table--bordered" },
2492 { TableDesign.Striped, "table--striped" },
2493 { TableDesign.Hover, "table--hover" },
2494 { TableDesign.Compact, "table--compact" },
2495 { TableDesign.Condensed, "table--condensed" },
2496 { TableDesign.NoTopBorder, "table--no-top-border" }
2497 };
2498 string tableDesignClass = "";
2499 if (settings.Design != TableDesign.None)
2500 {
2501 tableDesignClass = enumToClasses[settings.Design];
2502 }
2503
2504 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableDesign.None) { attributes.Add("class", "table " + tableDesignClass + " " + settings.CssClass + " dw-mod"); }
2505
2506 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2507
2508 <table @ComponentMethods.AddAttributes(resultAttributes)>
2509 @if (settings.Header != null)
2510 {
2511 <thead>
2512 @Render(settings.Header)
2513 </thead>
2514 }
2515 <tbody>
2516 @foreach (var row in settings.Rows)
2517 {
2518 @Render(row)
2519 }
2520 </tbody>
2521 @if (settings.Footer != null)
2522 {
2523 <tfoot>
2524 @Render(settings.Footer)
2525 </tfoot>
2526 }
2527 </table>
2528 }
2529 @using Dynamicweb.Rapido.Blocks.Components.General
2530 @using Dynamicweb.Rapido.Blocks.Components
2531
2532 @helper RenderTableRow(TableRow settings)
2533 {
2534 Dictionary<string, string> attributes = new Dictionary<string, string>();
2535 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2536
2537 var enumToClasses = new Dictionary<TableRowDesign, string>
2538 {
2539 { TableRowDesign.NoBorder, "table__row--no-border" },
2540 { TableRowDesign.Border, "table__row--border" },
2541 { TableRowDesign.TopBorder, "table__row--top-line" },
2542 { TableRowDesign.BottomBorder, "table__row--bottom-line" },
2543 { TableRowDesign.Solid, "table__row--solid" }
2544 };
2545
2546 string tableRowDesignClass = "";
2547 if (settings.Design != TableRowDesign.None)
2548 {
2549 tableRowDesignClass = enumToClasses[settings.Design];
2550 }
2551
2552 if (!string.IsNullOrEmpty(settings.CssClass) || settings.Design != TableRowDesign.None) { attributes.Add("class", "table__row " + tableRowDesignClass + " " + settings.CssClass + " dw-mod"); }
2553
2554 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2555
2556 <tr @ComponentMethods.AddAttributes(resultAttributes)>
2557 @foreach (var cell in settings.Cells)
2558 {
2559 if (settings.IsHeaderRow)
2560 {
2561 cell.IsHeader = true;
2562 }
2563 @Render(cell)
2564 }
2565 </tr>
2566 }
2567 @using Dynamicweb.Rapido.Blocks.Components.General
2568 @using Dynamicweb.Rapido.Blocks.Components
2569 @using Dynamicweb.Core
2570
2571 @helper RenderTableCell(TableCell settings)
2572 {
2573 Dictionary<string, string> attributes = new Dictionary<string, string>();
2574 if (!string.IsNullOrEmpty(settings.Id)) { attributes.Add("id", settings.Id); }
2575 if (settings.Colspan != 0) { attributes.Add("colspan", Converter.ToString(settings.Colspan)); }
2576 if (settings.Rowspan != 0) { attributes.Add("rowspan", Converter.ToString(settings.Rowspan)); }
2577 if (!string.IsNullOrEmpty(settings.CssClass)) { attributes.Add("class", settings.CssClass + " dw-mod"); }
2578
2579 var resultAttributes = attributes.Concat(settings.ExtraAttributes).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.Last().Value);
2580
2581 string tagName = settings.IsHeader ? "th" : "td";
2582
2583 @("<" + tagName + " " + ComponentMethods.AddAttributes(resultAttributes) + ">")
2584 @settings.Content
2585 @("</" + tagName + ">");
2586 }
2587 @using System.Linq
2588 @using Dynamicweb.Rapido.Blocks.Components.General
2589
2590 @* Component *@
2591
2592 @helper RenderPagination(Dynamicweb.Rapido.Blocks.Components.General.Pagination settings)
2593 {
2594 var pageNumberQueryStringName = Dynamicweb.Rapido.Services.Pagination.GetPageNumberQueryStringName(settings); // Get the proper 'page number' query string parameter
2595 var queryParameters = Dynamicweb.Rapido.Services.Url.GetQueryParameters(pageNumberQueryStringName); // Get the NameValueCollection from the querystring
2596
2597 if (settings.NumberOfPages > 1)
2598 {
2599 string url = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + "/Default.aspx";
2600 string ariaLabel = !string.IsNullOrWhiteSpace(settings.AriaLabel) ? settings.AriaLabel : Translate("Page navigation");
2601 Dictionary<string, int> startAndEndPageNumber = Dynamicweb.Rapido.Services.Pagination.GetStartAndEndPageNumber(settings);
2602
2603 <div class="pager u-margin-top dw-mod @settings.CssClass" aria-label="@ariaLabel">
2604 @if (settings.ShowPagingInfo)
2605 {
2606 <div class="pager__info dw-mod">
2607 @Translate("Page") @settings.CurrentPageNumber @Translate("of") @settings.NumberOfPages
2608 </div>
2609 }
2610 <ul class="pager__list dw-mod">
2611 @if (!string.IsNullOrWhiteSpace(settings.FirstPageUrl) && settings.ShowFirstAndLastControls)
2612 {
2613 @Render(new PaginationItem { Link = settings.FirstPageUrl, Icon = settings.FirstIcon })
2614 }
2615 @if (!string.IsNullOrWhiteSpace(settings.PreviousPageUrl) && settings.ShowNextAndPrevControls)
2616 {
2617 @Render(new PaginationItem { Link = settings.PreviousPageUrl, Icon = settings.PrevIcon })
2618 }
2619 @if (settings.GetPages().Any())
2620 {
2621 foreach (var page in settings.GetPages())
2622 {
2623 @Render(page)
2624 }
2625 }
2626 else
2627 {
2628 for (var page = startAndEndPageNumber["StartPage"]; page <= startAndEndPageNumber["EndPage"]; page++)
2629 {
2630 queryParameters = Dynamicweb.Rapido.Services.Url.UpdateQueryStringParameter(queryParameters, pageNumberQueryStringName, page.ToString());
2631 @Render(new PaginationItem { Label = page.ToString(), Link = Dynamicweb.Rapido.Services.Url.BuildUri(url, queryParameters).PathAndQuery, IsActive = (settings.CurrentPageNumber == page) });
2632 }
2633 }
2634 @if (!string.IsNullOrWhiteSpace(settings.NextPageUrl) && settings.ShowNextAndPrevControls)
2635 {
2636 @Render(new PaginationItem { Link = settings.NextPageUrl, Icon = settings.NextIcon })
2637 }
2638 @if (!string.IsNullOrWhiteSpace(settings.LastPageUrl) && settings.ShowFirstAndLastControls)
2639 {
2640 @Render(new PaginationItem { Link = settings.LastPageUrl, Icon = settings.LastIcon })
2641 }
2642 </ul>
2643 </div>
2644 }
2645 }
2646
2647 @helper RenderPaginationItem(PaginationItem settings)
2648 {
2649 if (settings.Icon == null)
2650 {
2651 settings.Icon = new Icon();
2652 }
2653
2654 settings.Icon.Label = settings.Label;
2655 <li class="pager__btn dw-mod">
2656 @if (settings.IsActive)
2657 {
2658 <span class="pager__num pager__num--current dw-mod">
2659 @Render(settings.Icon)
2660 </span>
2661 }
2662 else
2663 {
2664 <a href="@settings.Link" class="pager__num dw-mod">
2665 @Render(settings.Icon)
2666 </a>
2667 }
2668 </li>
2669 }
2670
2671
2672 @using Dynamicweb.Rapido.Blocks.Components.General
2673 @using Dynamicweb.Rapido.Blocks.Components.Ecommerce
2674
2675
2676 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2677 @using System.Web;
2678 @using Dynamicweb.Rapido.Blocks;
2679
2680 @RenderBlockList(createAccountPage.BlocksRoot.BlocksList)
2681
2682