1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <title>Attendee Check-In</title> 6 7 <meta name="apple-mobile-web-app-capable" content="yes" /> 8 <meta name="HandheldFriendly" content="True"> 9 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" > 10 <meta http-equiv="cleartype" content="on"> 11 <link href="https://staticcdn.eventscloud.com/css/fonts/fontawesome-pro-6.7.1/css/all.css" rel="stylesheet"> 12 <style type="text/css"> 13 body:not(.legacy_ui) { 14 margin: 0; 15 position: relative; 16 font-family: helvetica, arial, sans-serif; 17} 18body:not(.legacy_ui)::placeholder { 19 color: #888888; 20} 21body:not(.legacy_ui) #page-content { 22 margin: 0; 23 font-size: 16px; 24 min-height: 400px; 25} 26body:not(.legacy_ui) #page-content header { 27 padding: 0.7em 0; 28 text-align: center; 29 font: 16px/16px Arial, sans-serif; 30 font-weight: bold; 31 color: #ffffff; 32 background-color: var(--primary-theme-color); 33} 34body:not(.legacy_ui) #page-content header .main-menu-button { 35 float: left; 36 width: 60px; 37 position: relative; 38 height: 30px; 39} 40body:not(.legacy_ui) #page-content header .icon-checkin { 41 color: #fff; 42 position: absolute; 43 top: -5px; 44 left: 20px; 45 width: 30px; 46 cursor: pointer; 47 font-size: 25px; 48} 49body:not(.legacy_ui) #page-content header .icon-checkin:hover { 50 color: var(--secondary-theme-color); 51 cursor: pointer; 52} 53body:not(.legacy_ui) #page-content header span { 54 display: inline-block; 55} 56body:not(.legacy_ui) #page-content .search-box { 57 position: relative; 58 background: #fff; 59} 60body:not(.legacy_ui) #page-content .search-box:not(.attendees-search-box) { 61 padding-right: 5px; 62} 63body:not(.legacy_ui) #page-content .search-box .search-elements { 64 position: relative; 65 height: 50px; 66 padding: 5px 48px 5px 10px; 67 white-space: nowrap; 68} 69body:not(.legacy_ui) #page-content .search-box .search-elements input[type="text"] { 70 width: 100%; 71 height: 48px; 72 padding-left: 30px; 73 border: 2px solid #D3D3D3; 74 border-right: none; 75 font-size: 18px; 76 line-height: 16px; 77 -moz-border-radius: 12px 0 0 12px; 78 -webkit-border-radius: 12px 0 0 12px; 79 border-radius: 12px 0 0 12px; 80 border-top-right-radius: 0; 81 border-bottom-right-radius: 0; 82} 83body:not(.legacy_ui) #page-content .search-box .search-elements input[type="text"]:focus { 84 border: 2px solid var(--primary-theme-color); 85 border-right: none; 86} 87body:not(.legacy_ui) #page-content .search-box .search-elements .search-button { 88 position: absolute; 89 float: right; 90 right: 0; 91 top: 5px; 92 width: 48px; 93 height: 48px; 94 background: var(--primary-theme-color); 95 cursor: pointer; 96 color: #fff; 97 font-size: 18px; 98 text-align: center; 99 line-height: 16px; 100 align-content: center; 101 -moz-border-radius: 0 12px 12px 0; 102 -webkit-border-radius: 0 12px 12px 0; 103 border-radius: 0 12px 12px 0; 104} 105body:not(.legacy_ui) #page-content .search-box .search-elements .search-button .icon-search { 106 color: #fff; 107 margin-left: 5px; 108} 109body:not(.legacy_ui) #page-content .search-box .search-elements .search-button:hover { 110 background: var(--secondary-theme-color); 111} 112body:not(.legacy_ui) #page-content .search-box .search-elements .icon-calendar, 113body:not(.legacy_ui) #page-content .search-box .search-elements .icon-user { 114 position: absolute; 115 top: 20px; 116 left: 20px; 117 color: var(--primary-theme-color); 118} 119body:not(.legacy_ui) #page-content .attendees-search-box .search-elements { 120 margin-right: 55px; 121} 122body:not(.legacy_ui) #page-content .attendees-search-box .register-attendee-button { 123 position: absolute; 124 right: -40px; 125 top: 15px; 126 width: 35px; 127 height: 31px; 128 background: var(--primary-theme-color); 129 cursor: pointer; 130 color: #fff; 131 font-size: 22px; 132 text-align: center; 133 line-height: 31px; 134 -moz-border-radius: 4px; 135 -webkit-border-radius: 4px; 136 border-radius: 4px; 137} 138body:not(.legacy_ui) #page-content .attendees-search-box .register-attendee-button:hover { 139 background: var(--secondary-theme-color); 140} 141body:not(.legacy_ui) #page-content .title-box { 142 padding: 10px 20px; 143 border: 1px solid var(--primary-theme-color); 144 background: var(--primary-theme-color); 145 color: #fff; 146 font-weight: bold; 147 font-size: 16px; 148 position: relative; 149 text-align: left; 150 line-height: 30px; 151} 152body:not(.legacy_ui) #page-content .title-box .title-button { 153 display: inline-block;
154 width: 20px; 155 position: relative; 156 margin: 0 20px 0 0; 157} 158body:not(.legacy_ui) #page-content .title-box .title-button .icon-arrow-left, 159body:not(.legacy_ui) #page-content .title-box .title-button .icon-cancel-circle { 160 position: absolute; 161 left: 0; 162 top: -18px; 163} 164body:not(.legacy_ui) #page-content .title-box .title-button .icon-arrow-left { 165 cursor: pointer; 166 font-size: 14px; 167 color: var(--primary-theme-color); 168 background: #fff; 169 border: 1px solid var(--primary-theme-color); 170 -moz-border-radius: 20px; 171 -webkit-border-radius: 20px; 172 border-radius: 20px; 173 padding: 5px; 174 margin-right: 20px; 175} 176body:not(.legacy_ui) #page-content .title-box .title-button .icon-arrow-left:hover { 177 color: #fff; 178 background: var(--secondary-theme-color); 179 border: 1px solid var(--secondary-theme-color); 180} 181body:not(.legacy_ui) #page-content .title-box .title-button .icon-cancel-circle { 182 cursor: pointer; 183 font-size: 24px; 184 color: #fff; 185 padding: 5px; 186 margin-right: 20px; 187 top: -23px; 188} 189body:not(.legacy_ui) #page-content .title-box .title-button .icon-cancel-circle:hover {
190 color: var(--secondary-theme-color); 191} 192body:not(.legacy_ui) #page-content .page-body { 193 width: 100%; 194 text-align: center; 195 color: #333; 196} 197body:not(.legacy_ui) #page-content .page-body ul { 198 list-style: none; 199 margin: 0; 200 padding: 0; 201 text-align: left; 202} 203body:not(.legacy_ui) #page-content .page-body img.etouches-logo { 204 margin: 20px 0; 205 width: 203px; 206} 207body:not(.legacy_ui) #page-content .page-body p.help-text { 208 margin: 0 20px; 209} 210body:not(.legacy_ui) #page-content .page-body .event-name { 211 font-size: 25px; 212} 213body:not(.legacy_ui) #page-content .page-body .error-message { 214 color: #f00; 215 padding: 5px 20px; 216} 217body:not(.legacy_ui) #page-content .page-body .blue-button, 218body:not(.legacy_ui) #page-content .page-body .white-button { 219 height: 50px; 220 width: 100%; 221 padding: 0 10px; 222 display: block; 223 line-height: 30px; 224 border: none; 225 font-size: 16px; 226 font-weight: bold; 227 text-shadow: none; 228 color: #fff; 229 background: var(--primary-theme-color); 230 -moz-border-radius: 12px; 231 -webkit-border-radius: 12px; 232 border-radius: 12px; 233} 234body:not(.legacy_ui) #page-content .page-body .blue-button [class^="icon-"], 235body:not(.legacy_ui) #page-content .page-body .blue-button [class*=" icon-"], 236body:not(.legacy_ui) #page-content .page-body .white-button [class^="icon-"], 237body:not(.legacy_ui) #page-content .page-body .white-button [class*=" icon-"] { 238 color: #fff; 239} 240body:not(.legacy_ui) #page-content .page-body .blue-button:hover, 241body:not(.legacy_ui) #page-content .page-body .white-button:hover { 242 background: var(--secondary-theme-color); 243 border-color: var(--secondary-theme-color); 244 cursor: pointer; 245} 246body:not(.legacy_ui) #page-content .page-body .blue-button:active, 247body:not(.legacy_ui) #page-content .page-body .white-button:active { 248 position: relative; 249 top: 1px; 250} 251body:not(.legacy_ui) #page-content .page-body .white-button { 252 background: #fff; 253 border: 1px solid var(--primary-theme-color); 254 color: var(--primary-theme-color); 255} 256body:not(.legacy_ui) #page-content .page-body .white-button:hover { 257 background: var(--secondary-theme-color); 258 border-color: var(--secondary-theme-color); 259 color: #fff; 260} 261body:not(.legacy_ui) #page-content .page-body input, 262body:not(.legacy_ui) #page-content .page-body textarea, 263body:not(.legacy_ui) #page-content .page-body select { 264 height: 48px; 265 width: 100%; 266 font-size: 15px; 267 line-height: 16px; 268 padding: 5px 16px 5px 16px; 269 margin-bottom: 10px; 270 border: 2px solid #D3D3D3; 271 -moz-border-radius: 12px; 272 -webkit-border-radius: 12px; 273 border-radius: 12px; 274 -webkit-box-sizing: border-box; 275 -moz-box-sizing: border-box; 276 box-sizing: border-box; 277} 278body:not(.legacy_ui) #page-content .page-body input:focus-visible, 279body:not(.legacy_ui) #page-content .page-body textarea:focus-visible, 280body:not(.legacy_ui) #page-content .page-body select:focus-visible { 281 outline: 0; 282} 283body:not(.legacy_ui) #page-content .page-body input:focus, 284body:not(.legacy_ui) #page-content .page-body textarea:focus, 285body:not(.legacy_ui) #page-content .page-body select:focus { 286 border: 2px solid var(--primary-theme-color); 287} 288body:not(.legacy_ui) #page-content .page-body form.login-from { 289 margin: 20px; 290 text-align: left; 291} 292body:not(.legacy_ui) #page-content .page-body form.login-from label { 293 font-weight: bold; 294} 295body:not(.legacy_ui) #page-content .page-body ul.event-list { 296 border-top: 1px solid #D3D3D3; 297} 298body:not(.legacy_ui) #page-content .page-body ul.event-list li { 299 position: relative; 300 padding: 10px 0px 10px 20px; 301 border-bottom: 1px solid #D3D3D3; 302 cursor: pointer; 303 color: var(--primary-theme-color); 304} 305body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon { 306 font-size: 22px; 307 padding-right: 20px; 308} 309body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon-folder { 310 color: var(--primary-theme-color); 311} 312body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon-calendar { 313 color: var(--primary-theme-color); 314} 315body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon-arrow-right { 316 color: var(--primary-theme-color); 317 font-size: 16px; 318 float: right; 319 padding-top: 5px; 320} 321body:not(.legacy_ui) #page-content .page-body ul.event-list li .event-id-label { 322 display: block; 323 color: var(--primary-theme-color); 324 font-size: 14px; 325 margin-left: 45px; 326} 327body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-name { 328 width: 35%; 329 display: inline-block; 330} 331body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info { 332 border-top: 1px solid #c6c6c6; 333 margin-left: 45px; 334 margin-top: 7px; 335 margin-right: 30px; 336 padding-top: 5px; 337 color: #000; 338 font-size: 14px; 339} 340body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part { 341 display: inline-block; 342 padding-right: 2px; 343} 344body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) { 345 border-left: 1px solid #c6c6c6; 346 padding-left: 5px; 347} 348body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty), 349body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child { 350 border-left: none; 351 padding-left: 0; 352} 353body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):not(:empty) + :empty ~ :not(:empty):last-child, 354body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child { 355 border-left: 1px solid #c6c6c6; 356 padding-left: 5px; 357 margin-left: -5px; 358} 359body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty) { 360 margin-left: -5px; 361} 362body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child { 363 margin-left: -10px; 364} 365body:not(.legacy_ui) #page-content .page-body ul.event-list li:hover { 366 background: var(--secondary-theme-color); 367 color: #fff !important; 368} 369body:not(.legacy_ui) #page-content .page-body ul.event-list li:hover i, 370body:not(.legacy_ui) #page-content .page-body ul.event-list li:hover .event-item-extra-info { 371 color: #fff; 372} 373body:not(.legacy_ui) #page-content .page-body ul.event-data li { 374 padding: 10px 20px; 375} 376body:not(.legacy_ui) #page-content .page-body ul.event-data li b { 377 padding-right: 10px; 378} 379body:not(.legacy_ui) #page-content .page-body ul.menu li, 380body:not(.legacy_ui) #page-content .page-body ul.logout-confirmation li { 381 padding: 10px 20px; 382} 383body:not(.legacy_ui) #page-content .page-body ul.menu .logout-name, 384body:not(.legacy_ui) #page-content .page-body ul.logout-confirmation .logout-name { 385 font-weight: normal; 386 font-style: italic; 387} 388body:not(.legacy_ui) #page-content .page-body ul.attendees-list li { 389 cursor: pointer; 390 position: relative; 391 border-bottom: 1px solid #D3D3D3; 392 padding: 10px 0; 393} 394body:not(.legacy_ui) #page-content .page-body ul.attendees-list li table { 395 width: 100%; 396 border-collapse: collapse; 397 table-layout: fixed; 398} 399body:not(.legacy_ui) #page-content .page-body ul.attendees-list li table td { 400 position: relative; 401 padding: 0 10px; 402 vertical-align: top; 403 word-wrap: break-word; 404} 405body:not(.legacy_ui) #page-content .page-body ul.attendees-list li table tr.info td { 406 padding-top: 0; 407} 408body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon { 409 width: 40px; 410 padding: 0; 411} 412body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon .icon-user, 413body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon .icon-blankperson, 414body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon .icon-dashedperson { 415 font-size: 26px; 416 color: var(--primary-theme-color); 417 width: 30px; 418 margin-left: 10px; 419} 420body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .name { 421 color: var(--primary-theme-color); 422 text-align: left; 423} 424body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .name .company { 425 width: 100%; 426 max-width: 100%; 427 text-align: left; 428 color: #838383; 429} 430body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .email { 431 color: #787878; 432 font-size: 14px; 433} 434body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .buttons { 435 margin: 10px 0 0 0; 436} 437body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .buttons button { 438 width: auto; 439 display: inline-block; 440 margin-right: 10px; 441} 442body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .buttons button i { 443 margin-right: 10px; 444} 445body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .company { 446 width: 100px; 447 max-width: 100px; 448 text-align: right; 449 color: #838383; 450 padding-right: 10px; 451} 452body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .info { 453 display: none; 454} 455body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active { 456 font-weight: bold; 457 color: var(--primary-theme-color) !important; 458 border: 1px solid var(--primary-theme-color); 459} 460body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active > :not(button) > i, 461body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active td, 462body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active .icon-user, 463body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active .icon-blankperson, 464body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active .icon-dashedperson { 465 font-weight: bold; 466} 467body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover { 468 background: var(--secondary-theme-color); 469 color: #fff !important; 470} 471body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover i, 472body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover td, 473body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .icon-user, 474body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .company, 475body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .icon-blankperson, 476body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .visibleSubFields, 477body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .icon-dashedperson { 478 color: #fff; 479} 480body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .visibleSubFields { 481 color: #787878; 482 cursor: auto; 483 font-size: 14px; 484} 485body:not(.legacy_ui) #page-content .page-body .register-attendee-header { 486 -moz-border-radius: 5px; 487 -webkit-border-radius: 5px; 488 border-radius: 5px; 489 background: var(--primary-theme-color); 490 padding: 10px 10px 10px 60px; 491 margin: 20px; 492 color: #FFFFFF; 493 text-align: left; 494 font-size: 16px; 495 font-weight: bold; 496 position: relative; 497} 498body:not(.legacy_ui) #page-content .page-body .register-attendee-header i { 499 font-size: 24px; 500 position: absolute; 501 top: 9px; 502 left: 20px; 503} 504body:not(.legacy_ui) #page-content .page-body ul.register-attendee { 505 margin-bottom: 0; 506} 507body:not(.legacy_ui) #page-content .page-body ul.register-attendee li { 508 padding: 5px 20px; 509} 510body:not(.legacy_ui) #page-content .page-body ul.register-attendee li label { 511 font-weight: bold; 512 color: #2D2D2D; 513 display: block; 514 margin-bottom: 5px; 515} 516body:not(.legacy_ui) #page-content .page-body .register-attendee-questions { 517 margin: 0 auto !important; 518 padding: 0 20px !important; 519} 520body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container { 521 width: 100%; 522 margin-bottom: 10px; 523} 524body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-label { 525 font-weight: bold; 526 color: #2D2D2D; 527 display: block; 528 margin-bottom: 5px; 529 text-align: left; 530} 531body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-label .required-indicator { 532 color: #f00; 533 margin-left: 2px; 534} 535body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input { 536 height: 48px; 537 width: 100%; 538 font-size: 15px; 539 line-height: 16px; 540 padding: 5px 16px 5px 16px; 541 margin-bottom: 10px; 542 border: 2px solid #D3D3D3; 543 -moz-border-radius: 12px; 544 -webkit-border-radius: 12px; 545 border-radius: 12px; 546 -webkit-box-sizing: border-box; 547 -moz-box-sizing: border-box; 548 box-sizing: border-box; 549} 550body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input:focus-visible { 551 outline: 0; 552} 553body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input:focus { 554 border: 2px solid var(--primary-theme-color); 555} 556body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input::placeholder { 557 color: #888888; 558} 559body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer { 560 width: 100% !important; 561 border: none !important; 562 background: transparent !important; 563 margin-bottom: 10px !important; 564} 565body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer tbody, 566body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer tr { 567 display: block !important; 568 width: 100% !important; 569} 570body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] tr, 571body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] tr { 572 display: flex !important; 573 flex-direction: column !important; 574} 575body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionLabel, 576body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionLabel { 577 width: 100% !important; 578 text-align: left !important; 579 padding: 0 0 5px 0 !important; 580 display: block !important; 581 font-weight: bold !important; 582 color: #2D2D2D !important; 583} 584body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput, 585body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput { 586 width: 100% !important; 587 display: block !important; 588} 589body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="text"], 590body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="email"], 591body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="text"], 592body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="email"] { 593 height: 48px !important; 594 width: 100% !important; 595 font-size: 15px !important; 596 line-height: 16px !important; 597 padding: 5px 16px 5px 16px !important; 598 margin-bottom: 10px !important; 599 border: 2px solid #D3D3D3 !important; 600 -moz-border-radius: 12px; 601 -webkit-border-radius: 12px; 602 border-radius: 12px; 603 -webkit-box-sizing: border-box; 604 -moz-box-sizing: border-box; 605 box-sizing: border-box; 606} 607body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="text"]:focus-visible, 608body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="email"]:focus-visible, 609body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="text"]:focus-visible, 610body:not(.legacy_
610ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="email"]:focus-visible { 611 outline: 0 !important; 612} 613body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="text"]:focus, 614body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="email"]:focus, 615body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="text"]:focus, 616body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="email"]:focus { 617 border: 2px solid var(--primary-theme-color) !important; 618} 619body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput textarea, 620body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput textarea { 621 width: 100% !important; 622 font-size: 15px !important; 623 line-height: 16px !important; 624 padding: 5px 16px 5px 16px !important; 625 margin-bottom: 10px !important; 626 border: 2px solid #D3D3D3 !important; 627 -moz-border-radius: 12px; 628 -webkit-border-radius: 12px; 629 border-radius: 12px; 630 -webkit-box-sizing: border-box; 631 -moz-box-sizing: border-box; 632 box-sizing: border-box; 633 min-height: 80px !important; 634 resize: vertical !important; 635} 636body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput textarea:focus-visible, 637body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput textarea:focus-visible { 638 outline: 0 !important; 639} 640body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput textarea:focus, 641body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput textarea:focus { 642 border: 2px solid var(--primary-theme-color) !important; 643} 644body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] tr { 645 display: flex !important; 646 flex-direction: row !important; 647 align-items: center !important; 648} 649body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionLabel { 650 flex-shrink: 0 !important; 651 padding-right: 10px !important; 652 display: inline-block !important; 653 text-align: left !important; 654 font-weight: bold !important; 655 color: #2D2D2D !important; 656} 657body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionInput { 658 display: inline-block !important; 659 padding: 0 !important; 660} 661body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="4"] tr, 662body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="17"] tr, 663body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] tr { 664 display: flex !important; 665 flex-direction: column !important; 666 align-items: flex-start !important; 667} 668body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="4"] .questionLabel, 669body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="17"] .questionLabel, 670body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionLabel { 671 width: 100% !important; 672 padding-bottom: 5px !important; 673 display: block !important; 674 text-align: left !important; 675 font-weight: bold !important; 676 color: #2D2D2D !important; 677} 678body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="4"] .questionInput, 679body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="17"] .questionInput, 680body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionInput { 681 width: 100% !important; 682 display: block !important; 683 padding: 0 !important; 684} 685body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox, 686body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] { 687 width: 100% !important; 688 border: none !important; 689 background: transparent !important; 690 margin: 0 !important; 691 text-align: left !important; 692} 693body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td[role="group"], 694body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td.standard, 695body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td[role="group"], 696body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td.standard { 697 padding: 0 0 0 20px !important; 698 text-align: left !important; 699} 700body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td[role="group"], 701body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td[role="group"] { 702 vertical-align: top !important; 703} 704body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td.standard, 705body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td.standard { 706 display: block !important; 707} 708body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox hr, 709body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] hr { 710 display: none !important; 711} 712body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox br, 713body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] br { 714 display: none !important; 715} 716body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox input[type="checkbox"], 717body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox input[type="radio"], 718body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] input[type="checkbox"], 719body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] input[type="radio"] { 720 display: inline-block !important; 721 vertical-align: middle !important; 722 margin-right: 8px !important; 723 margin-left: 0 !important; 724 margin-top: 0 !important; 725 margin-bottom: 0 !important; 726 width: auto !important; 727 height: auto !important; 728 accent-color: var(--primary-theme-color); 729} 730body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox label, 731body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] label { 732 display: inline !important; 733 vertical-align: middle !important; 734 margin: 0 !important; 735 cursor: pointer !important; 736 line-height: 1.6 !important; 737 text-align: left !important; 738} 739body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox label::after, 740body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] label::after {
741 content: "" !important; 742 display: block !important; 743 margin-bottom: 8px !important; 744} 745body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] input[type="radio"] { 746 border: none !important; 747 border-radius: 0 !important; 748 padding: 0 !important; 749 cursor: pointer !important; 750 accent-color: var(--primary-theme-color); 751 -webkit-box-sizing: content-box; 752 -moz-box-sizing: content-box; 753 box-sizing: content-box; 754} 755body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] input[type="radio"]:focus { 756 border: none !important; 757} 758body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .clear-selection-label { 759 float: left !important; 760 padding-left: 20px !important; 761 padding-bottom: 5px !important; 762} 763body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] tr { 764 display: flex !important; 765 flex-direction: column !important; 766} 767body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionLabel { 768 width: 100% !important; 769 text-align: left !important; 770 padding: 0 0 5px 0 !important; 771 display: block !important; 772 font-weight: bold !important; 773 color: #2D2D2D !important; 774} 775body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionInput { 776 width: 100% !important; 777 display: block !important; 778} 779body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionInput select { 780 height: 48px !important; 781 width: 350px !important; 782 font-size: 15px !important; 783 padding: 5px 16px !important; 784 border: 2px solid #D3D3D3 !important; 785 -moz-border-radius: 12px; 786 -webkit-border-radius: 12px; 787 border-radius: 12px; 788 -webkit-box-sizing: border-box; 789 -moz-box-sizing: border-box; 790 box-sizing: border-box; 791 background-color: #fff; 792 appearance: auto; 793 float: left !important; 794 accent-color: var(--primary-theme-color); 795} 796body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionInput input[type="checkbox"] { 797 width: auto !important; 798 height: auto !important; 799 margin: 0 !important; 800 vertical-align: middle !important; 801 accent-color: var(--primary-theme-color); 802} 803body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionInput .checkbox-container { 804 display: inline-flex !important; 805 align-items: center !important; 806 width: auto !important; 807 margin: 0 !important; 808 padding: 0 !important; 809} 810body:not(.legacy_ui) #page-content .attendees-filter { 811 border-top: 1px solid var(--primary-theme-color); 812 border-bottom: 2px solid var(--primary-theme-color); 813} 814body:not(.legacy_ui) #page-content .attendees-filter table { 815 width: 100%; 816} 817body:not(.legacy_ui) #page-content .attendees-filter table tr { 818 list-style: none; 819 padding: 0; 820 margin: 0; 821 background: #fff; 822 height: 41px; 823 border: 2px solid var(--primary-theme-color); 824} 825body:not(.legacy_ui) #page-content .attendees-filter table tr td { 826 width: 33%; 827 text-align: center; 828 vertical-align: center; 829 color: var(--primary-theme-color); 830 font-weight: bold; 831 cursor: pointer; 832 border-left: 2px solid var(--primary-theme-color); 833} 834body:not(.legacy_ui) #page-content .attendees-filter table tr td div { 835 padding: 10px 0; 836} 837body:not(.legacy_ui) #page-content .attendees-filter table tr td:hover { 838 background: var(--secondary-theme-color); 839 color: #fff; 840} 841body:not(.legacy_ui) #page-content .attendees-filter table tr td:hover i { 842 color: #fff; 843} 844body:not(.legacy_ui) #page-content .attendees-filter table tr td:first-child div { 845 border-left: none; 846} 847body:not(.legacy_ui) #page-content .attendees-filter table tr td.active { 848 background: var(--primary-theme-color); 849 color: #fff; 850} 851body:not(.legacy_ui) #page-content .attendees-filter table.with-pre-load tr td { 852 width: 20%; 853} 854body:not(.legacy_ui) #page-content .attendees-filter table.with-cancel tr td { 855 width: 20%; 856} 857body:not(.legacy_ui) #page-content .help-info { 858 bottom: 0; 859 width: 100%; 860 padding: 0 20px 20px 20px; 861 text-align: center; 862 font-weight: bold; 863 -webkit-box-sizing: border-box; 864 -moz-box-sizing: border-box; 865 box-sizing: border-box; 866} 867body:not(.legacy_ui) #page-content .help-info.left { 868 text-align: left; 869} 870body:not(.legacy_ui) #page-content .help-info.left a span:last-child { 871 margin-left: 15px; 872} 873body:not(.legacy_ui) #page-content .help-info a { 874 color: var(--secondary-theme-color); 875 text-decoration: underline; 876 cursor: pointer; 877 position: relative; 878} 879body:not(.legacy_ui) #page-content .help-info a span.icon-arrow-right, 880body:not(.legacy_ui) #page-content .help-info a span.icon-arrow-left { 881 position: absolute; 882 top: 4px; 883 font-size: 12px; 884} 885body:not(.legacy_ui) #page-content .help-info a span.icon-arrow-right { 886 right: -15px; 887} 888body:not(.legacy_ui) #page-content .help-info a:hover {
889 color: var(--primary-theme-color); 890} 891body:not(.legacy_ui) #page-content .checkin-location-name { 892 float: right; 893 margin-right: 15px; 894 color: #aaaaaa; 895} 896.filter-container { 897 position: fixed; 898 top: 90px; 899 left: 0px; 900 width: 300px; 901 background: white; 902 border: 1px solid #ccc; 903 box-shadow: 2px 2px 10px rgba(0,0,0,0.2); 904 padding: 15px 15px 15px 10px; 905 border-radius: 5px; 906 display: none; 907 z-index: 10000; 908} 909.filter-icon { 910 position: relative; 911 z-index: 10001; 912} 913.filter-text { 914 display: flex; 915 justify-content: space-between; 916 align-items: center; 917 cursor: pointer; 918 padding: 5px 0; 919 margin-bottom: 10px; 920 border-bottom: 1px solid #ddd; 921 font-size: 15px; 922 color: var(--primary-theme-color); 923} 924.filter-container input[type="checkbox"] { 925 width: auto !important; 926 box-shadow: 1px 1px 1px 0px #DDDDDD !important; 927 margin-bottom: 0 !important; 928 padding: 0 !important; 929} 930.filter-header { 931 display: flex; 932 justify-content: space-between; 933 align-items: center; 934 font-weight: bold; 935 cursor: pointer; 936 padding: 5px 0; 937} 938.filter-title { 939 display: flex; 940 align-items: center; 941 gap: 6px; 942 color: var(--primary-theme-color); 943} 944.filter-buttons { 945 display: flex; 946 justify-content: space-between; 947 margin-bottom: 10px; 948} 949.filter-buttons button { 950 padding: 8px 12px; 951 border: none; 952 cursor: pointer; 953 border-radius: 3px; 954 font-size: 14px; 955} 956.clear-btn { 957 background: none; 958 border: 1px solid var(--primary-theme-color) !important; 959 color: var(--primary-theme-color); 960} 961.clear-btn:hover { 962 background: none; 963 border-color: var(--primary-theme-color); 964 color: var(--primary-theme-color); 965} 966.apply-btn { 967 width: 30%; 968 background: var(--primary-theme-color); 969 font-size: 16px; 970 font-weight: bold; 971 text-shadow: none; 972 color: #f7f7f7; 973} 974.apply-btn:hover { 975 background: var(--secondary-theme-color); 976 color: #fff; 977 cursor: pointer; 978} 979.apply-btn:active { 980 position: relative; 981 top: 1px; 982} 983.category { 984 margin-top: 10px; 985 display: none; 986 overflow-y: auto; 987 height: 250px; 988} 989.category label { 990 display: flex; 991 align-items: flex-start; 992 padding: 5px 0; 993 width: 100%; 994 color: var(--primary-theme-color); 995} 996.category label span { 997 display: inline-block; 998 white-space: nowrap; 999 overflow: hidden; 1000 text-overflow: ellipsis; 1001 max-width: 290px; 1002} 1003.category input[type='checkbox'] { 1004 margin-right: 8px; 1005 height: 13px !important; 1006} 1007.category input[type='checkbox']:checked, 1008.exclude-preload input[type='checkbox']:checked { 1009 accent-color: var(--primary-theme-color); 1010} 1011.category input[type='checkbox']:hover, 1012.exclude-preload input[type='checkbox']:hover { 1013 accent-color: var(--secondary-theme-color); 1014} 1015#filter-options { 1016 background: none; 1017 border: none; 1018 font-size: 20px; 1019 cursor: pointer; 1020 color: var(--primary-theme-color); 1021} 1022#filter-options:hover { 1023 color: var(--secondary-theme-color); 1024} 1025.exclude-preload { 1026 display: flex; 1027 padding-bottom: 15px; 1028} 1029.checkbox-preload { 1030 width: 10%; 1031 text-align: left; 1032} 1033.text-preload { 1034 text-align: left; 1035 text-wrap: auto; 1036 color: var(--primary-theme-color); 1037} 1038.exclude-preload input[type='checkbox'] { 1039 margin-right: 8px; 1040 height: 13px !important; 1041} 1042.left-adjusted { 1043 left: 60px !important; 1044} 1045@media only screen and (min-device-width: 767px) and (max-device-width: 1025px),only screen and (min-device-height: 767px) and (max-device-height: 1025px) and (orientation: landscape),only screen and (min-device-width: 383px) and (max-device-width: 513px) and (-webkit-device-pixel-ratio: 2),only screen and (min-device-width: 511px) and (max-device-width: 683px) and (-webkit-device-pixel-ratio: 1.5) { 1046 body:not(.legacy_ui) #page-content .page-body .blue-button, 1047 body:not(.legacy_ui) #page-content .page-body .white-button { 1048 margin: 0 auto; 1049 } 1050 body:not(.legacy_ui) #page-content .page-body .blue-button .logout-name, 1051 body:not(.legacy_ui) #page-content .page-body .white-button .logout-name { 1052 display: none; 1053 } 1054 body:not(.legacy_ui) #page-content .page-body form.login-from, 1055 body:not(.legacy_ui) #page-content .page-body .logout-confirmation, 1056 body:not(.legacy_ui) #page-content .page-body .menu { 1057 margin: 20px auto; 1058 width: 30%; 1059 min-width: 250px; 1060 } 1061 body:not(.legacy_ui) #page-content .page-body .event-data .blue-button, 1062 body:not(.legacy_ui) #page-content .page-body .event-data .white-button { 1063 width: 30%; 1064 min-width: 250px; 1065 } 1066 body:not(.legacy_ui) #page-content .page-body .menu { 1067 margin: 20px auto; 1068 width: 30%; 1069 min-width: 250px; 1070 } 1071 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-name { 1072 width: 80%; 1073 } 1074 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info { 1075 border-top: none; 1076 width: 80%; 1077 margin-left: 0; 1078 margin-top: 0; 1079 margin-right: 0; 1080 padding-top: 0; 1081 font-size: 16px; 1082 display: inline-block; 1083 } 1084 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part { 1085 width: 30%; 1086 } 1087 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) { 1088 border-left: none; 1089 padding-left: 0; 1090 } 1091 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty), 1092 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child, 1093 body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child { 1094 margin-left: 0; 1095 padding-left: 0; 1096 border-left: none; 1097 } 1098 body:not(.legacy_ui) #page-content .page-body ul.register-attendee { 1099 margin: 0 auto; 1100 width: 50%; 1101 } 1102 body:not(.legacy_ui) #page-content .page-body ul.register-attendee li { 1103 padding: 5px 0; 1104 } 1105 body:not(.legacy_ui) #page-content .page-body ul.register-attendee li.register-button { 1106 width: 60%; 1107 min-width: 170px; 1108 margin: 0 auto; 1109 } 1110 body:not(.legacy_ui) #page-content .page-body .register-attendee-questions { 1111 margin: 0 auto; 1112 width: 50%; 1113 } 1114} 1115body.legacy_ui { 1116 margin: 0; 1117 position: relative; 1118 font-family: helvetica, arial, sans-serif; 1119} 1120body.legacy_ui #page-content { 1121 margin: 0; 1122 font-size: 16px; 1123 min-height: 400px; 1124} 1125body.legacy_ui #page-content header { 1126 padding: 0.7em 0; 1127 text-align: center; 1128 font: 16px/16px Arial, sans-serif; 1129 font-weight: bold; 1130 color: #ffffff; 1131 text-shadow: 0.04em 0.04em #707070; 1132 background: -moz-linear-gradient(top,#c75300 0%,#b33f00 100%); 1133 background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#c75300),color-stop(100%,#b33f00)); 1134 background: -webkit-linear-gradient(top,#c75300 0%,#b33f00 100%); 1135 background: -o-linear-gradient(top,#c75300 0%,#b33f00 100%); 1136 background: -ms-linear-gradient(top,#c75300 0%,#b33f00 100%); 1137 background: linear-gradient(to bottom,#c75300 0%,#b33f00 100%); 1138 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@gradient-top', endColorstr='@gradient-bottom',GradientType=0 ); 1139} 1140body.legacy_ui #page-content header .main-menu-button { 1141 float: left; 1142 width: 60px; 1143 position: relative; 1144 height: 30px; 1145} 1146body.legacy_ui #page-content header .icon-checkin { 1147 position: absolute; 1148 top: -8px; 1149 left: 20px; 1150 width: 30px; 1151 cursor: pointer; 1152 font-size: 32px; 1153} 1154body.legacy_ui #page-content header span { 1155 display: inline-block; 1156} 1157body.legacy_ui #page-content .search-box { 1158 position: relative; 1159 border-bottom: 1px solid #ccc; 1160 background: #f2f2f2; 1161} 1162body.legacy_ui #page-content .search-box .search-elements { 1163 position: relative; 1164 height: 30px; 1165 padding: 5px 55px 5px 20px; 1166} 1167body.legacy_ui #page-content .search-box .search-elements input[type="text"] { 1168 height: 31px; 1169 width: 100%; 1170 padding: 5px 5px 5px 30px; 1171 border: 1px solid #ccc;
1172 border-right: none; 1173 box-shadow: inset 1px 1px 1px 0px #dddddd; 1174 font-size: 16px; 1175 -moz-border-radius: 4px 0 0 4px; 1176 -webkit-border-radius: 4px 0 0 4px; 1177 border-radius: 4px 0 0 4px; 1178 -webkit-box-sizing: border-box; 1179 -moz-box-sizing: border-box; 1180 box-sizing: border-box; 1181} 1182body.legacy_ui #page-content .search-box .search-elements .search-button { 1183 position: absolute; 1184 right: 20px; 1185 top: 5px; 1186 width: 35px; 1187 height: 31px; 1188 background: #c75300; 1189 cursor: pointer; 1190 color: #fff; 1191 font-size: 20px; 1192 text-align: center; 1193 line-height: 31px; 1194 -moz-border-radius: 0 4px 4px 0; 1195 -webkit-border-radius: 0 4px 4px 0; 1196 border-radius: 0 4px 4px 0; 1197} 1198body.legacy_ui #page-content .search-box .search-elements .search-button:active { 1199 background: #b35300; 1200} 1201body.legacy_ui #page-content .search-box .search-elements .icon-calendar, 1202body.legacy_ui #page-content .search-box .search-elements .icon-user { 1203 position: absolute; 1204 top: 12px; 1205 left: 30px; 1206 color: #9F9F9F; 1207} 1208body.legacy_ui #page-content .attendees-search-box .search-elements { 1209 margin-right: 55px; 1210} 1211body.legacy_ui #page-content .attendees-search-box .register-attendee-button { 1212 position: absolute; 1213 right: -40px; 1214 top: 5px; 1215 width: 35px; 1216 height: 31px; 1217 background: #006599; 1218 cursor: pointer; 1219 color: #fff; 1220 font-size: 22px; 1221 text-align: center; 1222 line-height: 31px; 1223 -moz-border-radius: 4px; 1224 -webkit-border-radius: 4px; 1225 border-radius: 4px; 1226} 1227body.legacy_ui #page-content .attendees-search-box .register-attendee-button:active { 1228 background: #b35300; 1229} 1230body.legacy_ui #page-content .title-box { 1231 padding: 10px 20px; 1232 border: 1px solid #fff; 1233 background: #c75300; 1234 color: #fff; 1235 font-weight: bold; 1236 font-size: 16px; 1237 position: relative; 1238 text-align: left; 1239 line-height: 30px; 1240} 1241body.legacy_ui #page-content .title-box .title-button { 1242 display: inline-block; 1243 width: 20px; 1244 position: relative; 1245 margin: 0 20px 0 0; 1246} 1247body.legacy_ui #page-content .title-box .title-button .icon-arrow-left, 1248body.legacy_ui #page-content .title-box .title-button .icon-cancel-circle { 1249 position: absolute; 1250 left: 0; 1251 top: -18px; 1252} 1253body.legacy_ui #page-content .title-box .title-button .icon-arrow-left { 1254 cursor: pointer; 1255 font-size: 14px; 1256 color: #c75300; 1257 background: #fff; 1258 border: 1px solid #c75300; 1259 -moz-border-radius: 20px; 1260 -webkit-border-radius: 20px; 1261 border-radius: 20px; 1262 padding: 5px; 1263 margin-right: 20px; 1264} 1265body.legacy_ui #page-content .title-box .title-button .icon-cancel-circle { 1266 cursor: pointer; 1267 font-size: 24px; 1268 color: #fff; 1269 padding: 5px; 1270 margin-right: 20px; 1271 top: -23px; 1272} 1273body.legacy_ui #page-content .page-body { 1274 width: 100%; 1275 text-align: center; 1276 color: #333; 1277} 1278body.legacy_ui #page-content .page-body ul { 1279 list-style: none; 1280 margin: 0; 1281 padding: 0; 1282 text-align: left; 1283} 1284body.legacy_ui #page-content .page-body img.etouches-logo { 1285 margin: 20px 0; 1286 width: 203px; 1287} 1288body.legacy_ui #page-content .page-body p.help-text { 1289 margin: 0 20px; 1290} 1291body.legacy_ui #page-content .page-body .event-name { 1292 font-size: 25px; 1293} 1294body.legacy_ui #page-content .page-body .error-message { 1295 color: #f00; 1296 padding: 5px 20px; 1297} 1298body.legacy_ui #page-content .page-body .blue-button, 1299body.legacy_ui #page-content .page-body .white-button { 1300 height: 30px; 1301 width: 100%; 1302 padding: 0 10px; 1303 display: block; 1304 line-height: 30px; 1305 border: none; 1306 font-size: 16px; 1307 font-weight: bold; 1308 text-shadow: none; 1309 color: #f7f7f7; 1310 -moz-border-radius: 4px; 1311 -webkit-border-radius: 4px; 1312 border-radius: 4px; 1313 background: -moz-linear-gradient(top,#09c 0%,#007BA5 100%); 1314 background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#09c),color-stop(100%,#007BA5)); 1315 background: -webkit-linear-gradient(top,#09c 0%,#007BA5 100%); 1316 background: -o-linear-gradient(top,#09c 0%,#007BA5 100%); 1317 background: -ms-linear-gradient(top,#09c 0%,#007BA5 100%); 1318 background: linear-gradient(to bottom,#09c 0%,#007BA5 100%); 1319 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@gradient-top', endColorstr='@gradient-bottom',GradientType=0 ); 1320} 1321body.legacy_ui #page-content .page-body .blue-button:hover, 1322body.legacy_ui #page-content .page-body .white-button:hover { 1323 background: #069; 1324 color: #fff; 1325 cursor: pointer; 1326} 1327body.legacy_ui #page-content .page-body .blue-button:active, 1328body.legacy_ui #page-content .page-body .white-button:active { 1329 position: relative; 1330 top: 1px; 1331} 1332body.legacy_ui #page-content .page-body .white-button { 1333 background: none; 1334 border: 1px solid #7E9FAE; 1335 color: #4381AA; 1336} 1337body.legacy_ui #page-content .page-body .white-button:hover { 1338 background: none; 1339 border-color: #069; 1340 color: #069; 1341} 1342body.legacy_ui #page-content .page-body input, 1343body.legacy_ui #page-content .page-body textarea { 1344 width: 100%; 1345 padding: 5px; 1346 margin-bottom: 10px; 1347 border: 1px solid #ccc; 1348 box-shadow: inset 1px 1px 1px 0px #dddddd; 1349 font-size: 16px; 1350 -moz-border-radius: 4px; 1351 -webkit-border-radius: 4px; 1352 border-radius: 4px; 1353 -webkit-box-sizing: border-box; 1354 -moz-box-sizing: border-box; 1355 box-sizing: border-box; 1356} 1357body.legacy_ui #page-content .page-body form.login-from { 1358 margin: 20px; 1359 text-align: left; 1360} 1361body.legacy_ui #page-content .page-body form.login-from label { 1362 font-weight: bold; 1363} 1364body.legacy_ui #page-content .page-body ul.event-list { 1365 border-top: 1px solid #ccc; 1366} 1367body.legacy_ui #page-content .page-body ul.event-list li { 1368 position: relative; 1369 padding: 10px 0px 10px 20px; 1370 border-bottom: 1px solid #ccc; 1371 cursor: pointer;
1372 color: #c75300; 1373} 1374body.legacy_ui #page-content .page-body ul.event-list li .icon { 1375 font-size: 22px; 1376 padding-right: 20px; 1377} 1378body.legacy_ui #page-content .page-body ul.event-list li .icon-folder { 1379 color: #D8B012; 1380} 1381body.legacy_ui #page-content .page-body ul.event-list li .icon-calendar { 1382 color: #006696; 1383} 1384body.legacy_ui #page-content .page-body ul.event-list li .icon-arrow-right { 1385 color: #C6C6C6; 1386 font-size: 16px; 1387 float: right; 1388 padding-top: 5px; 1389} 1390body.legacy_ui #page-content .page-body ul.event-list li .event-id-label { 1391 display: block; 1392 color: #6A6A6A; 1393 font-size: 14px; 1394 margin-left: 45px; 1395} 1396body.legacy_ui #page-content .page-body ul.event-list li.event { 1397 background: #F5F5F5; 1398} 1399body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-name { 1400 width: 35%; 1401 display: inline-block; 1402} 1403body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info { 1404 border-top: 1px solid #c6c6c6; 1405 margin-left: 45px; 1406 margin-top: 7px; 1407 margin-right: 30px; 1408 padding-top: 5px; 1409 color: #000; 1410 font-size: 14px; 1411} 1412body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part { 1413 display: inline-block; 1414 padding-right: 2px; 1415} 1416body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) { 1417 border-left: 1px solid #c6c6c6; 1418 padding-left: 5px; 1419} 1420body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty), 1421body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child { 1422 border-left: none; 1423 padding-left: 0; 1424} 1425body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):not(:empty) + :empty ~ :not(:empty):last-child, 1426body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child { 1427 border-left: 1px solid #c6c6c6; 1428 padding-left: 5px; 1429 margin-left: -5px; 1430} 1431body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty) { 1432 margin-left: -5px; 1433} 1434body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child { 1435 margin-left: -10px; 1436} 1437body.legacy_ui #page-content .page-body ul.event-list li:hover { 1438 background: #e0e0e0; 1439} 1440body.legacy_ui #page-content .page-body ul.event-data li { 1441 padding: 10px 20px; 1442} 1443body.legacy_ui #page-content .page-body ul.event-data li b { 1444 padding-right: 10px; 1445} 1446body.legacy_ui #page-content .page-body ul.menu li, 1447body.legacy_ui #page-content .page-body ul.logout-confirmation li { 1448 padding: 10px 20px; 1449} 1450body.legacy_ui #page-content .page-body ul.menu .logout-name, 1451body.legacy_ui #page-content .page-body ul.logout-confirmation .logout-name { 1452 font-weight: normal; 1453 font-style: italic; 1454} 1455body.legacy_ui #page-content .page-body ul.attendees-list li { 1456 cursor: pointer; 1457 position: relative; 1458 border-bottom: 1px solid #ccc; 1459 padding: 10px 0; 1460} 1461body.legacy_ui #page-content .page-body ul.attendees-list li table { 1462 width: 100%; 1463 border-collapse: collapse; 1464 table-layout: fixed; 1465} 1466body.legacy_ui #page-content .page-body ul.attendees-list li table td { 1467 position: relative; 1468 padding: 0 10px; 1469 vertical-align: top; 1470 word-wrap: break-word; 1471} 1472body.legacy_ui #page-content .page-body ul.attendees-list li table tr.info td { 1473 padding-top: 0; 1474} 1475body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon { 1476 width: 40px; 1477 padding: 0; 1478} 1479body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon .icon-user, 1480body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon .icon-blankperson, 1481body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon .icon-dashedperson { 1482 font-size: 26px; 1483 color: #016798; 1484 width: 30px; 1485 margin-left: 10px; 1486} 1487body.legacy_ui #page-content .page-body ul.attendees-list li .name { 1488 color: #c75300; 1489 text-align: left; 1490} 1491body.legacy_ui #page-content .page-body ul.attendees-list li .name .company { 1492 width: 100%; 1493 max-width: 100%; 1494 text-align: left; 1495 color: #838383; 1496} 1497body.legacy_ui #page-content .page-body ul.attendees-list li .email { 1498 color: #787878; 1499 font-size: 14px; 1500} 1501body.legacy_ui #page-content .page-body ul.attendees-list li .buttons { 1502 margin: 10px 0 0 0; 1503} 1504body.legacy_ui #page-content .page-body ul.attendees-list li .buttons button { 1505 width: auto; 1506 display: inline-block; 1507 margin-right: 10px; 1508} 1509body.legacy_ui #page-content .page-body ul.attendees-list li .buttons button i { 1510 margin-right: 10px; 1511} 1512body.legacy_ui #page-content .page-body ul.attendees-list li .buttons button.white-button { 1513 height: 32px; 1514} 1515body.legacy_ui #page-content .page-body ul.attendees-list li .company { 1516 width: 100px; 1517 max-width: 100px; 1518 text-align: right; 1519 color: #838383; 1520 padding-right: 10px; 1521} 1522body.legacy_ui #page-content .page-body ul.attendees-list li .info { 1523 display: none; 1524} 1525body.legacy_ui #page-content .page-body ul.attendees-list li:hover { 1526 background: #e0e0e0; 1527} 1528body.legacy_ui #page-content .page-body .register-attendee-header { 1529 -moz-border-radius: 5px; 1530 -webkit-border-radius: 5px; 1531 border-radius: 5px; 1532 background: #006599; 1533 padding: 10px 10px 10px 60px; 1534 margin: 20px; 1535 color: #FFFFFF; 1536 text-align: left; 1537 font-size: 16px; 1538 font-weight: bold; 1539 position: relative; 1540} 1541body.legacy_ui #page-content .page-body .register-attendee-header i { 1542 font-size: 24px; 1543 position: absolute; 1544 top: 9px; 1545 left: 20px; 1546} 1547body.legacy_ui #page-content .page-body ul.register-attendee { 1548 margin-bottom: 0; 1549} 1550body.legacy_ui #page-content .page-body ul.register-attendee li { 1551 padding: 5px 20px; 1552} 1553body.legacy_ui #page-content .page-body ul.register-attendee li label { 1554 font-weight: bold; 1555 color: #2D2D2D; 1556 display: block; 1557 margin-bottom: 5px; 1558} 1559body.legacy_ui #page-content .attendees-filter { 1560 border-top: 1px solid #CFCFCF; 1561 border-bottom: 2px solid #c75300; 1562} 1563body.legacy_ui #page-content .attendees-filter table { 1564 width: 100%; 1565} 1566body.legacy_ui #page-content .attendees-filter table tr { 1567 list-style: none; 1568 padding: 0; 1569 margin: 0; 1570 background: #D9D9D9; 1571 height: 41px; 1572 border-top: 2px solid #fff; 1573 border-bottom: 2px solid #fff; 1574} 1575body.legacy_ui #page-content .attendees-filter table tr td { 1576 width: 33%; 1577 text-align: center; 1578 vertical-align: center; 1579 color: #6E6E6E; 1580 font-weight: bold; 1581 cursor: pointer; 1582 border-left: 2px solid #F9F9F9; 1583} 1584body.legacy_ui #page-content .attendees-filter table tr td div { 1585 padding: 10px 0; 1586} 1587body.legacy_ui #page-content .attendees-filter table tr td:first-child div { 1588 border-left: none; 1589} 1590body.legacy_ui #page-content .attendees-filter table tr td.active { 1591 background: #c75300; 1592 color: #fff; 1593} 1594body.legacy_ui #page-content .attendees-filter table.with-pre-load tr td { 1595 width: 20%; 1596} 1597body.legacy_ui #page-content .attendees-filter table.with-cancel tr td { 1598 width: 20%; 1599} 1600body.legacy_ui #page-content .help-info { 1601 position: absolute; 1602 bottom: 0; 1603 width: 100%; 1604 padding: 0 20px 20px 20px; 1605 text-align: center; 1606 font-weight: bold; 1607 -webkit-box-sizing: border-box; 1608 -moz-box-sizing: border-box; 1609 box-sizing: border-box; 1610} 1611body.legacy_ui #page-content .help-info.left { 1612 text-align: left; 1613} 1614body.legacy_ui #page-content .help-info.left a span:last-child { 1615 margin-left: 15px; 1616} 1617body.legacy_ui #page-content .help-info a { 1618 color: #09c; 1619 text-decoration: none; 1620 cursor: pointer; 1621 position: relative; 1622} 1623body.legacy_ui #page-content .help-info a span.icon-arrow-right, 1624body.legacy_ui #page-content .help-info a span.icon-arrow-left { 1625 position: absolute; 1626 top: 4px; 1627 font-size: 12px; 1628} 1629body.legacy_ui #page-content .help-info a span.icon-arrow-right { 1630 right: -15px; 1631} 1632body.legacy_ui #page-content .checkin-location-name { 1633 float: right; 1634 margin-right: 15px; 1635 color: #aaaaaa; 1636} 1637body.legacy_ui .search-box { 1638 position: relative; 1639 border-bottom: 1px solid #ccc; 1640 background: #f2f2f2; 1641} 1642body.legacy_ui .search-box .search-elements { 1643 position: relative; 1644 height: 30px; 1645 padding: 5px 55px 5px 20px; 1646 white-space: nowrap; 1647} 1648body.legacy_ui .search-box .search-elements input[type="text"] { 1649 height: 31px; 1650 width: 100%; 1651 padding: 5px 5px 5px 30px; 1652 border: 1px solid #ccc;
1653 border-right: none; 1654 box-shadow: inset 1px 1px 1px 0px #dddddd; 1655 font-size: 16px; 1656 -moz-border-radius: 4px 0 0 4px; 1657 -webkit-border-radius: 4px 0 0 4px; 1658 border-radius: 4px 0 0 4px; 1659 -webkit-box-sizing: border-box; 1660 -moz-box-sizing: border-box; 1661 box-sizing: border-box; 1662} 1663body.legacy_ui .search-box .search-elements .search-button { 1664 position: absolute; 1665 right: 20px; 1666 top: 5px; 1667 width: 35px; 1668 height: 31px; 1669 background: #c75300; 1670 cursor: pointer; 1671 color: #fff; 1672 font-size: 20px; 1673 text-align: center; 1674 line-height: 31px; 1675 -moz-border-radius: 0 4px 4px 0; 1676 -webkit-border-radius: 0 4px 4px 0; 1677 border-radius: 0 4px 4px 0; 1678} 1679body.legacy_ui .search-box .search-elements .search-button:active { 1680 background: #b35300; 1681} 1682body.legacy_ui .search-box .search-elements .icon-calendar, 1683body.legacy_ui .search-box .search-elements .icon-user { 1684 position: absolute; 1685 top: 12px; 1686 left: 30px; 1687 color: #9F9F9F; 1688} 1689body.legacy_ui .filter-container { 1690 position: fixed; 1691 top: 75px; 1692 left: 0px; 1693 width: 300px; 1694 background: white; 1695 border: 1px solid #ccc; 1696 box-shadow: 2px 2px 10px rgba(0,0,0,0.2); 1697 padding: 15px; 1698 border-radius: 5px; 1699 display: none; 1700 z-index: 10000; 1701} 1702body.legacy_ui .filter-icon { 1703 position: relative; 1704 z-index: 10001; 1705} 1706body.legacy_ui .filter-text { 1707 display: flex; 1708 justify-content: space-between; 1709 align-items: center; 1710 cursor: pointer; 1711 padding: 5px 0; 1712 margin-bottom: 10px; 1713 border-bottom: 1px solid #ddd; 1714 font-size: 15px; 1715 color: #6A6A6A; 1716} 1717body.legacy_ui .filter-container input[type="checkbox"] { 1718 width: auto !important; 1719 box-shadow: 1px 1px 1px 0px #DDDDDD !important; 1720 margin-bottom: 0 !important; 1721 padding: 0 !important; 1722} 1723body.legacy_ui .filter-header { 1724 display: flex; 1725 justify-content: space-between; 1726 align-items: center; 1727 font-weight: bold; 1728 cursor: pointer; 1729 padding: 5px 0; 1730} 1731body.legacy_ui .filter-title { 1732 display: flex; 1733 align-items: center; 1734 gap: 6px; 1735 color: #6A6A6A; 1736} 1737body.legacy_ui .filter-buttons { 1738 display: flex; 1739 justify-content: space-between; 1740 margin-bottom: 10px; 1741} 1742body.legacy_ui .filter-buttons button { 1743 padding: 8px 12px; 1744 border: none; 1745 cursor: pointer; 1746 border-radius: 3px; 1747 font-size: 14px; 1748} 1749body.legacy_ui .clear-btn { 1750 background: none; 1751 border: 1px solid #5ea1bf !important; 1752 color: #4381AA; 1753} 1754body.legacy_ui .clear-btn:hover { 1755 background: none; 1756 border-color: #069; 1757 color: #069; 1758} 1759body.legacy_ui .apply-btn { 1760 width: 30%; 1761 background: #007BA5; 1762 font-size: 16px; 1763 font-weight: bold; 1764 text-shadow: none; 1765 color: #f7f7f7; 1766} 1767body.legacy_ui .apply-btn:hover { 1768 background: #069; 1769 color: #fff; 1770 cursor: pointer; 1771} 1772body.legacy_ui .apply-btn:active { 1773 position: relative; 1774 top: 1px; 1775} 1776body.legacy_ui .category { 1777 margin-top: 10px; 1778 display: none; 1779 overflow-y: auto; 1780 height: 250px; 1781} 1782body.legacy_ui .category label { 1783 display: flex; 1784 align-items: flex-start; 1785 padding: 5px 0; 1786 width: 100%; 1787 color: #6A6A6A; 1788} 1789body.legacy_ui .category label span { 1790 display: inline-block; 1791 white-space: nowrap; 1792 overflow: hidden; 1793 text-overflow: ellipsis; 1794 max-width: 290px; 1795} 1796body.legacy_ui .category input[type='checkbox'] { 1797 margin-right: 8px; 1798} 1799body.legacy_ui .category input[type='checkbox']:checked, 1800body.legacy_ui .exclude-preload input[type='checkbox']:checked { 1801 accent-color: #007BA5; 1802} 1803body.legacy_ui .category input[type='checkbox']:hover, 1804body.legacy_ui .exclude-preload input[type='checkbox']:hover { 1805 accent-color: #069; 1806} 1807body.legacy_ui #filter-options { 1808 background: none; 1809 border: none; 1810 font-size: 20px; 1811 cursor: pointer; 1812 color: #007BA5; 1813} 1814body.legacy_ui #filter-options:hover { 1815 color: #069; 1816} 1817body.legacy_ui .exclude-preload { 1818 display: flex; 1819 padding-bottom: 15px; 1820} 1821body.legacy_ui .checkbox-preload { 1822 width: 10%; 1823 text-align: left; 1824} 1825body.legacy_ui .text-preload { 1826 text-align: left; 1827 text-wrap: auto; 1828 color: #6A6A6A; 1829} 1830body.legacy_ui .exclude-preload input[type='checkbox'] { 1831 margin-right: 8px; 1832 height: 13px !important; 1833} 1834body.legacy_ui .left-adjusted { 1835 left: 65px !important; 1836} 1837@media only screen and (min-device-width: 767px) and (max-device-width: 1025px),only screen and (min-device-height: 767px) and (max-device-height: 1025px) and (orientation: landscape),only screen and (min-device-width: 383px) and (max-device-width: 513px) and (-webkit-device-pixel-ratio: 2),only screen and (min-device-width: 511px) and (max-device-width: 683px) and (-webkit-device-pixel-ratio: 1.5) { 1838 body.legacy_ui #page-content .page-body .blue-button, 1839 body.legacy_ui #page-content .page-body .white-button { 1840 margin: 0 auto; 1841 } 1842 body.legacy_ui #page-content .page-body .blue-button .logout-name, 1843 body.legacy_ui #page-content .page-body .white-button .logout-name { 1844 display: none; 1845 } 1846 body.legacy_ui #page-content .page-body form.login-from, 1847 body.legacy_ui #page-content .page-body .logout-confirmation, 1848 body.legacy_ui #page-content .page-body .menu { 1849 margin: 20px auto; 1850 width: 30%; 1851 min-width: 250px; 1852 } 1853 body.legacy_ui #page-content .page-body .event-data .blue-button, 1854 body.legacy_ui #page-content .page-body .event-data .white-button { 1855 width: 30%; 1856 min-width: 250px; 1857 } 1858 body.legacy_ui #page-content .page-body .menu { 1859 margin: 20px auto; 1860 width: 30%; 1861 min-width: 250px; 1862 } 1863 body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info { 1864 border-top: none; 1865 width: 50%; 1866 margin-left: 0; 1867 margin-top: 0; 1868 margin-right: 0; 1869 padding-top: 0; 1870 font-size: 16px; 1871 display: inline-block; 1872 } 1873 body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part { 1874 width: 30%; 1875 } 1876 body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) { 1877 border-left: none; 1878 padding-left: 0; 1879 } 1880 body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty), 1881 body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child, 1882 body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child { 1883 margin-left: 0; 1884 padding-left: 0; 1885 border-left: none; 1886 } 1887 body.legacy_ui #page-content .page-body ul.register-attendee { 1888 margin: 0 auto; 1889 width: 50%; 1890 } 1891 body.legacy_ui #page-content .page-body ul.register-attendee li { 1892 padding: 5px 0; 1893 } 1894 body.legacy_ui #page-content .page-body ul.register-attendee li.register-button { 1895 width: 60%; 1896 min-width: 170px; 1897 margin: 0 auto; 1898 } 1899} 1900[class^="icon-"], 1901[class*=" icon-"] { 1902 font-family: "Font Awesome 6 Pro" !important; 1903 speak: none; 1904 font-style: normal; 1905 font-weight: normal; 1906 font-variant: normal; 1907 text-transform: none; 1908 line-height: 1; 1909 -webkit-font-smoothing: antialiased; 1910 -moz-osx-font-smoothing: grayscale; 1911} 1912.icon-cancel-circle:before { 1913 content: "\f057" !important; 1914} 1915.icon-checkin:before { 1916 content: "\f4fc" !important; 1917 font-weight: 900; 1918} 1919.icon-search:before { 1920 content: "\f002" !important; 1921} 1922.icon-calendar:before { 1923 content: "\f073" !important; 1924} 1925.icon-folder:before { 1926 content: "\f07b" !important; 1927} 1928.icon-folder-open:before { 1929 content: "\f07c" !important; 1930 font-style: normal; 1931} 1932.icon-arrow-right:before { 1933 content: "\f105" !important; 1934 font-style: normal; 1935 font-weight: 900; 1936} 1937.icon-arrow-left:before { 1938 content: "\f104" !important; 1939 font-style: normal; 1940 font-weight: 900; 1941 padding: 5px; 1942} 1943.icon-blankperson:before { 1944 content: "\f007" !important; 1945 font-style: normal; 1946 font-weight: normal; 1947} 1948.icon-dashedperson:before { 1949 content: "\f007" !important; 1950 font-size: 24px; 1951 font-style: normal; 1952 font-weight: normal; 1953 border-radius: 50%; 1954 border: 1px dashed; 1955 padding: 5px; 1956} 1957.icon-user:before { 1958 content: "\f007" !important; 1959 font-style: normal; 1960 font-weight: 900; 1961} 1962.icon-user-plus:before { 1963 content: "\f234" !important; 1964 font-style: normal; 1965 font-weight: 900; 1966} 1967.icon-checkmark:before { 1968 content: "\f00c" !important; 1969 font-style: normal; 1970 font-weight: 900; 1971} 1972.clear { 1973 clear: both; 1974} 1975 1976 </style> 1977 <link href="/application/themes/mobile-attendee/creator-icons.css" type="text/css" rel="stylesheet" /> 1978</head> 1979<body> 1980 <link href="/application/themes/mobile-attendee/attendee-info.css" rel="stylesheet" type="text/css" /> 1981 <style> 1982 .button-container-checkin { 1983 display: flex; 1984 flex-wrap: nowrap; /* prevents wrapping on wider screens */ 1985 gap: 8px; 1986 justify-content: space-between; 1987 margin-top: 10px; 1988 } 1989 .button-container-checkin button { 1990 flex: 1 0 auto; /* grow, no shrink, auto basis */ 1991 padding: 10px 12px; 1992 font-size: 14px; 1993 min-width: 100px; 1994 border: none; 1995 border-radius: 4px; 1996 cursor: pointer; 1997 white-space: nowrap; 1998 width: auto !important; 1999 margin: 0 auto; 2000 } 2001 2002 /* See more/less link styling */ 2003 .see-more-link { 2004 color: #007bff; 2005 text-decoration: none; 2006 font-size: 0.9em; 2007 margin-left: 4px; 2008 cursor: pointer; 2009 white-space: nowrap; 2010 } 2011 .see-more-link:hover { 2012 text-decoration: underline; 2013 color: #0056b3; 2014 } 2015 .field-content { 2016 white-space: pre-wrap; 2017 word-wrap: break-word; 2018 } 2019 2020 @media (max-width: 480px) { 2021 .button-container-checkin { 2022 flex-direction: column; 2023 } 2024 } 2025 </style> 2026<div id="page-content"> 2027</div> 2028
2029<script type="text/html" id="page-template"> 2030 <header> 2031 <div class="main-menu-button" data-bind="visible: showMenuButton"> 2032 <i class="icon-checkin" data-bind="click: onMainMenuClick"></i> 2033 </div> 2034 <span data-bind="text : headerText">Attendee Check-In</span> 2035 <span class="checkin-location-name" data-bind="text: checkinLocation"></span> 2036 </header> 2037 2038 <div class="page-body"> 2039 <img class="etouches-logo" data-bind="visible: logoUrl, attr: { src: logoUrl }"> 2040 2041 <p class="error-message" data-bind="visible : errorMessage, text:errorMessage"></p> 2042 2043 <div class="search-box" data-bind="visible: showSearchPanel, css : customButtonsClass"> 2044 <div class="search-elements"> 2045 <button id="filter-options" class="filter-button" onclick="toggleFilterDropdown()" data-bind="visible :showFilterPanel"> 2046 <i id="category-filter" class="fa-regular fa-filter"></i> 2047 </button> 2048 <div class="filter-container" id="filter-menu" data-bind="visible :showFilterPanel" > 2049 <div class="filter-buttons"> 2050 <button class="clear-btn" data-bind="click: onClearFiltersClick">Clear</button> 2051 <button class="apply-btn" data-bind="click: onApplyFiltersClick">Apply</button> 2052 </div> 2053 <div class="filter-text">Filter by</div> 2054 2055 <div class="exclude-preload" data-bind ="visible :showPreLoadAttendees"> 2056 <div class="checkbox-preload"><input type="checkbox" class="category-checkbox" name="exclude_preload" id="exclude_preload"></div> 2057 <div class="text-preload"><span class="category-text">Exclude Pre-load records from All Attendees Tab</span></div> 2058 </div> 2059 2060 <div class="filter-header" onclick="toggleCategory()"> 2061 <div class="filter-title"> 2062 Category <span id="selected-count"></span> 2063 </div> 2064 <div class="filter-toggle" id="category-toggle">-</div> 2065 2066 </div> 2067 <div class="category" id="category-section" style="display: block" data-bind="foreach: categories"> 2068 <label> 2069 <span data-bind="style: { display: parentid != 0 ? 'inline-block' : 'none', width: '16px' }"></span> 2070 2071 <input type="checkbox" 2072 class="category-checkbox" 2073 data-bind=" 2074 attr: { 2075 'data-categoryid': categoryid, 2076 'data-parentid': parentid || 0, 2077 'value': categoryid + (parentid && parentid != 0 ? '|' + parentid : '') 2078 }, 2079 checked: $root.selectedCategories, 2080 click: function() { 2081 setupCategoryCheckboxLogic(); 2082 return true; 2083 }"> 2084 <span class="category-text" data-bind="text: name, attr: { title: name }"></span> 2085 </label> 2086 </div> 2087 </div> 2088 2089 2090 <i data-bind="visible: searchIcon, css: searchIcon"></i> 2091 <input type="text" data-bind="value: searchText, attr : { placeholder : searchPlaceholder }"/> 2092 <div class="search-button"> 2093 <i class="icon-search" data-bind="click: onSearchButtonClick"></i> 2094 </div> 2095 <div class="custom-buttons register-attendee-button" data-bind="visible: showCustomButtons"> 2096 <i class="icon-user-plus" data-bind="click: onRegisterAttendeeClick"></i> 2097 </div> 2098 </div> 2099 </div> 2100 2101 <div class="title-box" data-bind="visible: showTitleBox">
2102 <span class="title-button" data-bind="visible: titleButtonIcon"> 2103 <i data-bind="css: titleButtonIcon, click: onTitleBoxButtonClick"></i> 2104 </span> 2105 <i class="title-icon" data-bind="click: onTitleBoxButtonClick, visible: titleIcon, css: titleIcon"></i> 2106 <span class="title-text" data-bind="text: titleText"></span> 2107 </div> 2108 2109 <div id="content"></div> 2110 </div> 2111</script>
2111 2112
2113<script type="text/html" id="login-page-template"> 2114 <form class="login-from" data-bind="submit: login"> 2115 <label>Username</label><br> 2116 <input type="text" class="email" data-bind="value: username"><br> 2117 2118 <label>Password</label><br> 2119 <input type="password" class="password" data-bind="value: password"><br> 2120 2121 <input class="blue-button" type="submit" value="Login"> 2122 </form> 2123 2124 <div class="help-info"> 2125 <a data-bind="click: goToResetPasswordPage">Can't access your account? </a> 2126 </div> 2127</script>
2127 2128
2129<script type="text/html" id="login-by-link-page-template"> 2130 <p class="help-text event-name" data-bind="text: eventName"></p> 2131 2132 <form class="login-from" data-bind="submit: login"> 2133 <label data-bind="visible: showPasswordField">Password</label><br> 2134 <input type="password" class="password" data-bind="visible: showPasswordField, value: password"><br> 2135 2136 <input class="blue-button" type="submit" value="Login"> 2137 </form> 2138</script>
2138 2139
2140<script type="text/html" id="reset-password-page-template"> 2141 <p class="help-text">Enter your user name below and we will send you a password reset email.</p> 2142 2143 <form class="login-from" data-bind="submit: send"> 2144 <label>User name:</label><br> 2145 <input type="text" class="email" data-bind="value: username"><br> 2146 <label>Captcha</label><br> 2147 <span style="display: inline-block;height: 50px;"> 2148 <img id="refresh_captcha" src="/mobileadmin/loginAPI/generateCaptcha" style="width: 270px;display: inline-block;" /> 2149 <span><i class="fa fa-solid fa-arrow-rotate-left fa-fw fa-xl" style="cursor: pointer;position: relative;top: -15px;" onclick="loadCaptcha()"></i></span> 2150 </span> 2151 <span style="display: block;"> 2152 <input id="captcha" type="text" data-bind="value: captcha" autocomplete="off" size="40" placeholder="Captcha"> 2153 </span> 2154 <input class="blue-button" type="submit" value="Send Password"> 2155 </form> 2156 2157 <div class="help-info left"> 2158 <a data-bind="click: goToLoginPage"> 2159 <span class="icon-arrow-left"></span> 2160 <span>Login</span> 2161 </a> 2162 </div> 2163</script>
2163 2164
2165<script type="text/html" id="events-page-template"> 2166 <ul class="event-list" data-bind="foreach: events, visible: events"> 2167 <li class="event-item" data-bind="click: $parent.select, css : type"> 2168 <i class="icon" data-bind="css: cssClass"></i> 2169 <i class="icon icon-arrow-right"></i> 2170 <span class="event-item-name" data-bind="text: name"></span> 2171 <div class="event-item-extra-info" data-bind="visible: (startDate || location || programManager)"> 2172 <span class="event-item-part" data-bind="text: startDate"></span> 2173 <span class="event-item-part" data-bind="text: location"></span> 2174 <span class="event-item-part" data-bind="text: programManager"></span> 2175 </div> 2176 <span class="event-id-label" data-bind="visible: showId"> 2177 <b>event ID:</b> 2178 <span data-bind="text: id, visible: showId"></span> 2179 </span> 2180 </li> 2181 </ul> 2182</script>
2182 2183
2184<script type="text/html" id="event-page-template"> 2185 <ul class="event-data"> 2186 <li data-bind="with: eventData"> 2187 <b>event ID:</b><span data-bind="text: eventId"></span> 2188 </li> 2189 <li data-bind="with: eventData"> 2190 <b>start date:</b><span data-bind="text: startDate"></span> 2191 </li> 2192 <li data-bind="with: eventData"> 2193 <b>end date:</b><span data-bind="text: endDate"></span> 2194 </li> 2195 <li data-bind="with: eventData"> 2196 <b>event status:</b><span data-bind="text: status"></span> 2197 </li> 2198 2199 <li data-bind="with: eventData, visible: showCheckinLocations || 0"> 2200 <b>Check-in Location:<b> 2201 <select id="checkin-location" data-bind="html: checkinLocations"> 2202 </select> 2203 </li> 2204 2205 <li> 2206 <button class="blue-button" data-bind="click: startCheckingButtonClick">start checking attendees in</button> 2207 </li> 2208 <li data-bind="ifnot: isLoggedInByLink"> 2209 <button class="white-button" data-bind="click: onCloseButtonClick">close</button> 2210 </li> 2211 </ul> 2212</script>
2212 2213
2214<script type="text/html" id="menu-page-template"> 2215 <ul class="menu" data-bind="ifnot: showLogoutConfirmation"> 2216 <li data-bind="visible: showGoToEventsPageButton"> 2217 <button class="blue-button" data-bind="click: goToEventsPage">go to event browser</button> 2218 </li> 2219 <li> 2220 <button class="blue-button" data-bind="click: showLogoutConfirmationDialog">log out <span class="logout-name" data-bind="text: userName"></span></button> 2221 </li> 2222 <li> 2223 <button class="white-button" data-bind="click: cancel">cancel</button> 2224 </li> 2225 </ul> 2226 2227 <ul class="logout-confirmation" data-bind="visible: showLogoutConfirmation"> 2228 <li> 2229 <p>Do you want to log out?</p> 2230 </li> 2231 2232 <li> 2233 <button class="blue-button" data-bind="click: logout">Yes</button> 2234 </li> 2235 <li> 2236 <button class="white-button" data-bind="click: cancelLogout">No</button> 2237 </li> 2238 </ul> 2239</script>
2239 2240
2241<script type="text/html" id="attendees-page-template"> 2242 <div class="attendees-filter" data-bind="visible: showAttendeesFilter"> 2243 <table data-bind="css : { 'with-pre-load' : showPreLoadAttendees, 'with-cancel' : showCancelAttendees}"> 2244 <tr data-bind="foreach: filters"> 2245 <td data-bind="click: $parent.changeFilter, css : { active : id == $parent.filterType() }"> 2246 <span data-bind="text: name"></span> 2247 (<span data-bind="text: total"></span>) 2248 </td> 2249 </tr> 2250 </table> 2251 </div> 2252 <ul class="attendees-list" data-bind="foreach: attendees"> 2253 <li data-bind="click: $parent.select"> 2254 <table> 2255 <tbody> 2256 <tr> 2257 <td class="checked-icon"> 2258 <div data-bind="css : { 'icon-user' : isCheckedIn == true, 'icon-blankperson' : isCheckedIn == false, 'icon-dashedperson' : isCheckedIn == null }"></div> 2259 </td> 2260 <td class="name"> 2261 <div class="extra-fields-section" data-bind="foreach: $root.eventData.attendeeVisibleTopTwoFields"> 2262 <span style="float: left"> 2263 <span data-bind="text: $index() === 0 ? $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName]) : ', ' + $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName])" class="field-content"></span> 2264 <!-- ko if: $parents[1].needsTruncation(fieldName, $parent[fieldName]) --> 2265 <a href="#" class="see-more-link" data-bind="click: function(data, event) { return $parents[1].toggleFieldExpansion($parent.attendeeId, fieldName, event); }, text: $parents[1].isFieldExpanded($parent.attendeeId, fieldName) ? ' See less' : '...See more'"></a> 2266 <!-- /ko --> 2267 </span> 2268 </div> 2269 <div class="clear"></div> 2270 <div class="extra-fields-section visibleSubFields" data-bind="foreach: $root.eventData.attendeeVisibleSubFields"> 2271 <span class="extra-field"> 2272 <span data-bind="text: $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName])" class="field-content"></span> 2273 <!-- ko if: $parents[1].needsTruncation(fieldName, $parent[fieldName]) --> 2274 <a href="#" class="see-more-link" data-bind="click: function(data, event) { return $parents[1].toggleFieldExpansion($parent.attendeeId, fieldName, event); }, text: $parents[1].isFieldExpanded($parent.attendeeId, fieldName) ? ' See less' : '...See more'"></a> 2275 <!-- /ko --> 2276 </span> 2277 <div class="clear"></div> 2278 </div> 2279 </td> 2280 <td> 2281 <span style="margin-right: 0px" data-bind="text: groupCount ,css: { 'group-count': +groupCount > 0 }"></span> 2282 </td> 2283 </tr> 2284 </tbody> 2285 </table> 2286 2287 <table id="attendee_new_info" class="info" > 2288 <tbody data-bind="foreach: $root.eventData.attendeeHiddenFields"> 2289 <tr> 2290 <td class="visibleSubFields"> 2291 <span data-bind="text: $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName])" class="field-content"></span> 2292 <!-- ko if: $parents[1].needsTruncation(fieldName, $parent[fieldName]) --> 2293 <a href="#" class="see-more-link" data-bind="click: function(data, event) { return $parents[1].toggleFieldExpansion($parent.attendeeId, fieldName, event); }, text: $parents[1].isFieldExpanded($parent.attendeeId, fieldName) ? ' See less' : '...See more'"></a> 2294 <!-- /ko --> 2295 </td> 2296 </tr> 2297 </tbody> 2298 <tbody> 2299 <tr data-bind="if: groupMembers !== ''"> 2300 <td class="visibleSubFields" data-bind="text: 'Group: ' + groupMembers">Group:</td> 2301 </tr> 2302 <tr data-bind="if: guest !== ''"> 2303 <td class="visibleSubFields" data-bind="text: guest"></td> 2304 </tr> 2305 </tbody> 2306 </table> 2307 2308 2309 2310 <div style="display: flex; justify-content: center;" > 2311 <table class="new-attendee-info" > 2312 <tbody> 2313 <tr class="info"> 2314 <td style="padding-left: 40px;"> 2315 <div class="button-container-checkin"> 2316 <button class="blue-button check-in" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn == false, click : $parent.checkInAttendee">Check-In</button> 2317 <button class="blue-button checked-in" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn == true, click : $parent.unCheckAttendee"><i class="icon-checkmark"></i>Checked-In</button> 2318 <button class="blue-button check-in-group" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus == 'Confirmed' && isGroupCheckIn == true, click : $parent.groupCheckInAttendee">Check-In Group</button> 2319 <button class="blue-button register" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn == null, click : $parent.registerPreLoadAttendee"><i class="icon-user-plus"></i>Register</button> 2320 <button class="white-button" data-bind="click: $parent.cancel">Close</button> 2321 <button class="blue-button no-show" 2322 data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && noShow == false, click : $parent.noShowAttendee"> 2323 Mark as No Show 2324 </button> 2325 <button class="blue-button no-showed" 2326 data-bind="visible : noShow == true, click : $parent.undoNoShowAttendee"> 2327 <i class="icon-checkmark"></i>No Show 2328 </button> 2329 </div> 2330 </td> 2331 <td align="right" style="padding-right: 40px;"> 2332 <div class="buttons"> 2333 <button class="white-button attendee_cancel" disabled="disabled" style="color:white; background:gray;" 2334 data-bind="visible: $root.eventData.mobileCancelRegistrationSetting == 1 && typeof registrationstatus !== 'undefined' && registrationstatus == 'Cancelled', 2335 click : $parent.cancelAttendeeRegistration">Attendee Cancelled</button> 2336 <button class="blue-button cancel_reg" 2337 data-bind="visible: $root.eventData.mobileCancelRegistrationSetting == 1 && typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn != null, 2338 click : $parent.cancelAttendeeRegistration">Cancel Registration</button> 2339 </div> 2340 </td> 2341 </tr> 2342 </tbody> 2343 </table> 2344 </div> 2345 2346 </li> 2347 </ul> 2348 2349 <p id="loading" data-bind="visible: isLoading">
2350 <span style="padding:0.5em; background:#2a2a2a; display:inline-block; border-radius:0.5em;"> 2351 <img src="/images/loading_circle.gif" alt="Loading" /> 2352 </span> 2353 </p> 2354 2355 2356</script>
2356 2357
2358<script type="text/html" id="register-attendee-page-template"> 2359 <div class="register-attendee-header"> 2360 <i class="icon-user-plus "></i> 2361 Register new attendee 2362 </div> 2363 2364 <!-- Container for dynamically rendered questions HTML --> 2365 <div class="register-attendee-questions" data-bind="html: $root.eventData.questionsHtml"></div> 2366 2367 <ul class="register-attendee register-attendee-buttons"> 2368 <li> 2369 <label for="notes">Notes</label> 2370 <textarea id="notes" data-bind="value: notes"></textarea> 2371 </li> 2372 <li class="register-button"> 2373 <input type="submit" class="blue-button" data-bind="click: register" value="register and check-in"> 2374 </li> 2375 <li class="register-button"> 2376 <button class="white-button" data-bind="click: cancel">cancel</button> 2377 </li> 2378 </ul> 2379</script>
2379 2380 2381 2382 <div id="overlay" style="display: none;"></div> 2383 <div id="alertWindow" style="display: none;"> 2384 <div id="alertText"></div> 2385 <div id="alertBtn"></div> 2386 </div> 2387 2388
2388<script type="text/javascript" src="https://staticcdn.eventscloud.com/libs/js/jquery/3.6.4/jquery-3.6.4.min.js"></script>
2388 2389
2389<script type="text/javascript" src="https://code.jquery.com/jquery-migrate-3.4.0.js"></script>
2389 2390
2390<script type="text/javascript" src="https://staticcdn.eventscloud.com/libs/js/knockout-3.5.1.js"></script>
2390 2391 2392 <!-- Registration helper functions for question rendering --> 2393
2393<script type="text/javascript" src="/ereg/include/scripts.js"></script>
2393 2394 2395 <!-- include mobile/index_js.tpl --> 2396
2396<script type="text/javascript"> 2397 var _csrf = "2ed17d80efeac74c092b5cb1a382b3e346d650c171619ef88", 2398 _isLoggedIn = "", 2399 _isLoggedInByLink = "", 2400 _loginCode = "", 2401 _showPreLoadApplicants = "0", 2402 _eventData = null, 2403 _defaultLogoUrl = "/application/themes/mobile-attendee/img/logo.png", 2404 _logoUrl = (_eventData && _eventData.eventLogo) ? _eventData.eventLogo : _defaultLogoUrl, 2405 _errorMessage = "", 2406 _loggedUserName = "", 2407 _passwordRequired = "1", 2408 _isNewPlatformThemeEnabled = "0", 2409 _newPlatformThemeColors = '0'; 2410 2411var checkinLocation; 2412 2413function loadCaptcha() { 2414 document.getElementById('refresh_captcha').src = "/mobileadmin/loginAPI/generateCaptcha?t=" + new Date().getTime(); 2415 document.getElementById('captcha').value=""; 2416} 2417var renderAccountThemeColors = function (isLoggedIn, newPlatformThemeColors, isNewPlatformThemeEnabled) { 2418 // Create a new style element or find an existing one 2419 let style = document.createElement('style'); 2420 document.head.appendChild(style); 2421 2422 // Dynamically set CSS rules using the variables 2423 if (!isLoggedIn) { 2424 style.innerHTML = ` 2425 :root { 2426 --primary-theme-color: #223651; 2427 --secondary-theme-color: #435A6C; 2428 --highlight-theme-color: #DDE5EA; 2429 }`; 2430 $("body").removeClass('legacy_ui'); 2431 } else { 2432 if (!isNewPlatformThemeEnabled) { 2433 $("body").addClass('legacy_ui'); 2434 } else { 2435 $("body").removeClass('legacy_ui'); 2436 } 2437 style.innerHTML = ` 2438 :root { 2439 --primary-theme-color: ` + newPlatformThemeColors.primarycolor + `; 2440 --secondary-theme-color: ` + newPlatformThemeColors.secondarycolor + `; 2441 --highlight-theme-color: ` + newPlatformThemeColors.highlightcolor + `; 2442 }`; 2443 } 2444}; 2445 2446var _mobilePreloadFieldValues = null; 2447 2448function setMobilePreloadFieldValues(itemData) { 2449 _mobilePreloadFieldValues = itemData || null; 2450} 2451 2452// ET-83452: Suppress ereg inline handlers that reference DOM elements absent in mobile. 2453// toggleVisibilityChkBox — emitted inside
2453<script> tags in questionsHtml; KO's html 2454// binding does not execute those scripts so the function is never defined. 2455// loadselectdescription — defined in scripts.js but relies on a selectdescription 2456// element that does not exist in the mobile check-in layout; calling it throws 2457// "Cannot read properties of undefined (reading 'display')". 2458// Both are replaced with no-ops here; our mobileEvaluateConditional engine handles 2459// all show/hide logic via jQuery event delegation instead. 2460window.toggleVisibilityChkBox = function () { return; }; 2461window.loadselectdescription = function () { return; }; 2462 2463/** 2464 * ET-83452: Mobile Conditional Question Engine 2465 * 2466 * KnockoutJS's html binding does NOT execute
2466<script> tags inside injected HTML, 2467 * so the inline togglevisibilityN() functions that regfunctions.php emits are 2468 * never defined. This engine uses a server-generated conditional map (passed via 2469 * eventData.conditionalMap) to drive show/hide logic via jQuery event delegation. 2470 * 2471 * The map is built in EventAPI.php using regQuestionDisplay::getRequiredResponse() 2472 * so trigger values are normalised the same way as desktop ereg. 2473 * 2474 * Supported parent input types: 2475 * Type 16 — Dropdown (select element) 2476 * Type 17 — Radio Button (input[type=radio]) 2477 * Type 4 — Multi-checkbox (input[type=checkbox]) 2478 */ 2479 2480// Module-level store populated by initMobileConditionalQuestions(). 2481// Shape: { "parentQuestionId": [{ childId, trigger, operator }, ...], ... } 2482var _mobileConditionalMap = {}; 2483 2484function restoreMobilePreloadFields($container) { 2485 if (!_mobilePreloadFieldValues || !$container || !$container.length) { 2486 return; 2487 } 2488 $container.find('input[name^="input["], textarea[name^="input["], select[name^="input["]').each(function() { 2489 var name = $(this).attr('name') || ''; 2490 var match = name.match(/^input\[([^\]]+)\]/); 2491 if (!match) { 2492 return; 2493 } 2494 var fieldName = match[1]; 2495 if (/_(value|values)$/.test(fieldName)) { 2496 return; 2497 } 2498 var fieldValue = _mobilePreloadFieldValues[fieldName]; 2499 var choiceKey = _mobilePreloadFieldValues[fieldName + '_value']; 2500 if (fieldValue === undefined || fieldValue === null || fieldValue === '') { 2501 return; 2502 } 2503 var $el = $(this); 2504 if ($el.is('select')) { 2505 if (choiceKey) { 2506 $el.val(String(choiceKey)); 2507 } else if (!$el.val(fieldValue)) { 2508 $el.find('option').each(function() { 2509 var $opt = $(this), optVal = $opt.val(); 2510 if (!optVal) { 2511 return; 2512 } 2513 if ($.trim($opt.text()) === fieldValue || $opt.attr('data-eng') === fieldValue) { 2514 $el.val(optVal); 2515 return false; 2516 } 2517 }); 2518 } 2519 } else if ($el.is('input[type="radio"]')) { 2520 if (choiceKey) { 2521 $container.find('input[type="radio"][name="' + name + '"][value="' + choiceKey + '"]').prop('checked', true); 2522 } else { 2523 $container.find('input[type="radio"][name="' + name + '"][value="' + fieldValue + '"]').prop('checked', true); 2524 } 2525 } else if ($el.is('input[type="checkbox"]')) { 2526 if (name.indexOf('][') !== -1) { 2527 return; 2528 } 2529 if (fieldValue === 'Checked') { 2530 $el.prop('checked', true); 2531 } 2532 } else if ($el.attr('type') !== 'hidden') { 2533 $el.val(fieldValue); 2534 } 2535 }); 2536 Object.keys(_mobilePreloadFieldValues).forEach(function(fieldName) { 2537 if (/_(value|values)$/.test(fieldName)) { 2538 return; 2539 } 2540 var numericValues = _mobilePreloadFieldValues[fieldName + '_values']; 2541 if (!numericValues) { 2542 return; 2543 } 2544 $.each(numericValues, function(i, numericValue) { 2545 if (numericValue) { 2546 $container.find('input[type="checkbox"][name^="input[' + fieldName + ']"][value="' + numericValue + '"]').prop('checked', true); 2547 } 2548 }); 2549 }); 2550} 2551 2552/** 2553 * Show or hide conditional child question tables for a given parent. 2554 * Primary path: uses _mobileConditionalMap (server-generated, reliable). 2555 * Fallback path: reads data-conditional-parent DOM attributes. 2556 * 2557 * @param parentId string|number The parent question's questionid 2558 * @param currentVal string|Array Current value(s) from the parent input 2559 * @param inputType string 'dropdown' | 'radio' | 'checkbox' 2560 */ 2561function mobileEvaluateConditional(parentId, currentVal, inputType) { 2562 var entries = _mobileConditionalMap[String(parentId)] || []; 2563 2564 function applyVisibility($child, trigger, operator) { 2565 var shouldShow = false;
2566 if (inputType === 'checkbox') { 2567 var values = Array.isArray(currentVal) ? currentVal : [currentVal]; 2568 shouldShow = values.map(String).indexOf(String(trigger)) !== -1; 2569 } else { 2570 switch (operator) { 2571 case '==': shouldShow = String(currentVal) === String(trigger); break; 2572 case '!=': shouldShow = String(currentVal) !== String(trigger) && String(currentVal) !== ''; break; 2573 case '>': shouldShow = parseFloat(currentVal) > parseFloat(trigger); break; 2574 case '<': shouldShow = parseFloat(currentVal) < parseFloat(trigger); break; 2575 default: shouldShow = String(currentVal) === String(trigger); 2576 } 2577 } 2578 if (shouldShow) { 2579 $child.show(); 2580 restoreMobilePreloadFields($child); 2581 } else { 2582 $child.hide(); 2583 } 2584 } 2585 2586 if (entries.length) { 2587 // Primary: use the server-generated map (most reliable) 2588 entries.forEach(function (entry) { 2589 var $child = $('#q' + entry.childId); 2590 if ($child.length) { 2591 applyVisibility($child, entry.trigger, entry.operator || '=='); 2592 } 2593 }); 2594 } else { 2595 // Fallback: scan DOM data-conditional-parent attributes 2596 $('[data-conditional-parent="' + parentId + '"]').each(function () { 2597 var $child = $(this); 2598 var trigger = $child.data('conditionalTrigger'); 2599 var operator = String($child.data('conditionalOperator') || '=='); 2600 applyVisibility($child, trigger, operator); 2601 }); 2602 } 2603} 2604 2605/** 2606 * Initialise conditional visibility after KO has injected questionsHtml into the DOM. 2607 * 2608 * @param conditionalMap object eventData.conditionalMap from the API response. 2609 * Maps parentQuestionId => [{ childId, trigger, operator }]. 2610 * 2611 * 1. Stores the map and hides ALL conditional child tables. 2612 * 2. Creates no-op window.togglevisibilityN() stubs so legacy inline handlers 2613 * on parent questions do not throw ReferenceError. 2614 * 3. Attaches namespaced jQuery event delegation for Dropdown, Radio, Checkbox. 2615 * 4. Evaluates initial state for pre-filled / edit-attendee scenarios. 2616 */ 2617function initMobileConditionalQuestions(conditionalMap) { 2618 _mobileConditionalMap = conditionalMap || {}; 2619 2620 // 1. Hide all conditional children using the server-generated map 2621 Object.keys(_mobileConditionalMap).forEach(function (parentId) { 2622 (_mobileConditionalMap[parentId] || []).forEach(function (entry) { 2623 $('#q' + entry.childId).hide(); 2624 }); 2625 }); 2626 // Belt-and-suspenders: also hide any tables marked with data-conditional-parent 2627 $('[data-conditional-parent]').hide(); 2628 2629 // 2. Suppress legacy inline togglevisibility* calls 2630 $('.register-attendee-questions [onchange], .register-attendee-questions [onclick]').each(function () { 2631 var attrs = ($(this).attr('onchange') || '') + ' ' + ($(this).attr('onclick') || ''); 2632 var re = /togglevisibility(\d+)/g; 2633 var m; 2634 while ((m = re.exec(attrs)) !== null) { 2635 var fnName = 'togglevisibility' + m[1]; 2636 if (typeof window[fnName] === 'undefined') { 2637 window[fnName] = function () { return; }; 2638 } 2639 } 2640 }); 2641 2642 // 3. Event delegation — .mobileConditional namespace prevents duplicate handlers 2643 // on re-render (cancel → register again clears and re-attaches cleanly). 2644 $(document) 2645 .off('.mobileConditional') 2646 // --- Dropdown (Type 16) --- 2647 .on('change.mobileConditional', 2648 '.register-attendee-questions select', 2649 function () { 2650 var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', ''); 2651 if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'dropdown'); } 2652 } 2653 ) 2654 // --- Radio Button (Type 17) --- 2655 .on('change.mobileConditional', 2656 '.register-attendee-questions input[type="radio"]', 2657 function () { 2658 var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', ''); 2659 if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'radio'); } 2660 } 2661 ) 2662 // --- Multi-checkbox (Type 4) --- 2663 .on('change.mobileConditional', 2664 '.register-attendee-questions input[type="checkbox"]', 2665 function () { 2666 var $table = $(this).closest('table[id^="q"]'); 2667 var parentId = ($table.attr('id') || '').replace('q', ''); 2668 if (parentId) { 2669 var checkedVals = []; 2670 $table.find('input[type="checkbox"]:checked').each(function () { 2671 checkedVals.push(String($(this).val())); 2672 }); 2673 mobileEvaluateConditional(parentId, checkedVals, 'checkbox'); 2674 } 2675 } 2676 ) 2677 // --- Clear Selection (radio buttons) --- 2678 // The inline onclick handler unchecks radio buttons without firing a change 2679 // event, so the conditional engine is never notified. Intercept the click 2680 // and evaluate with an empty value to hide all children of the parent. 2681 .on('click.mobileConditional', 2682 '.register-attendee-questions .clear-selection-label', 2683 function () { 2684 var $table = $(this).closest('table[id^="q"]'); 2685 var parentId = ($table.attr('id') || '').replace('q', ''); 2686 if (parentId) { 2687 setTimeout(function () { 2688 mobileEvaluateConditional(parentId, '', 'radio'); 2689 }, 0); 2690 } 2691 } 2692 ); 2693 2694 // 4. Evaluate initial state for pre-filled values (edit / pre-load attendee) 2695 $('.register-attendee-questions select').each(function () { 2696 var val = $(this).val(); 2697 if (val) { 2698 var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', ''); 2699 if (parentId) { mobileEvaluateConditional(parentId, val, 'dropdown'); } 2700 } 2701 }); 2702 $('.register-attendee-questions input[type="radio"]:checked').each(function () { 2703 var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', ''); 2704 if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'radio'); } 2705 }); 2706 var seenParents = {}; 2707 $('.register-attendee-questions input[type="checkbox"]').each(function () { 2708 var $table = $(this).closest('table[id^="q"]'); 2709 var parentId = ($table.attr('id') || '').replace('q', ''); 2710 if (parentId && !seenParents[parentId]) { 2711 seenParents[parentId] = true; 2712 var vals = []; 2713 $table.find('input[type="checkbox"]:checked').each(function () { 2714 vals.push(String($(this).val())); 2715 }); 2716 if (vals.length) { mobileEvaluateConditional(parentId, vals, 'checkbox'); } 2717 } 2718 }); 2719} 2720 2721$(function () { 2722 if (!_isLoggedIn) { 2723 renderAccountThemeColors(false, [], true); 2724 } 2725 var pageViewModel = new PageViewModel(); 2726 2727 ko.renderTemplate($('#page-template').attr('id'), pageViewModel, { 2728 templateEngine: ko.nativeTemplateEngine.instance 2729 }, $('#page-content')[0]); 2730 2731 2732 if (_errorMessage) { 2733 pageViewModel.hideAllPageElements(); 2734 pageViewModel.logoUrl(_logoUrl); 2735 pageViewModel.errorMessage(_errorMessage); 2736 2737 return false;
2738 } 2739 2740 if (_isLoggedIn && _loginCode.length == 0) { 2741 var eventsViewModel = new EventsListViewModel(); 2742 pageViewModel.render(eventsViewModel, $('#events-page-template')); 2743 eventsViewModel.loadEventsList(0); 2744 } else if (_isLoggedIn && _loginCode.length != 0) { 2745 var eventViewModel = new EventViewModel(); 2746 pageViewModel.render(eventViewModel, $('#event-page-template')); 2747 eventViewModel.loadEventData(_eventData.eventId); 2748 } else if (_loginCode.length != 0) { 2749 var loginByLinkViewModel = new LoginByLinkViewModel(); 2750 loginByLinkViewModel.eventName(_eventData.eventName); 2751 loginByLinkViewModel.eventLogo(_logoUrl); 2752 pageViewModel.showMenuButton(false); 2753 pageViewModel.render(loginByLinkViewModel, $('#login-by-link-page-template')); 2754 } else { 2755 var loginViewModel = new LoginViewModel(); 2756 pageViewModel.showMenuButton(false); 2757 pageViewModel.render(loginViewModel, $('#login-page-template')); 2758 } 2759}); 2760 2761 2762/*! A fix for the iOS orientationchange zoom bug. Script by @scottjehl, rebound by @wilto.MIT License.*/(function(m){if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1)){return}var l=m.document;if(!l.querySelector){return}var n=l.querySelector("meta[name=viewport]"),a=n&&n.getAttribute("content"),k=a+",maximum-scale=1",d=a+",maximum-scale=10",g=true,j,i,h,c;if(!n){return}function f(){n.setAttribute("content",d);g=true}function b(){n.setAttribute("content",k);g=false}function e(o){c=o.accelerationIncludingGravity;j=Math.abs(c.x);i=Math.abs(c.y);h=Math.abs(c.z);if(!m.orientation&&(j>7||((h>6&&i<8||h<8&&i>6)&&j>5))){if(g){b()}}else{if(!g){f()}}}m.addEventListener("orientationchange",f,false);m.addEventListener("devicemotion",e,false)})(this); 2763 2764 2765var PageViewModel = function() { 2766 var self = this; 2767 2768 self.errorMessage = ko.observable(null); 2769 2770 self.logoUrl = ko.observable(null); 2771 2772 self.headerText = ko.observable(null); 2773 self.checkinLocation = ko.observable(null); 2774 self.showMenuButton = ko.observable(true); 2775 2776 self.showSearchPanel = ko.observable(false); 2777 self.showFilterPanel = ko.observable(false); 2778 self.searchIcon = ko.observable(null); 2779 self.searchPlaceholder = ko.observable(null); 2780 self.searchText = ko.observable(null); 2781 2782 self.showCustomButtons = ko.observable(false); 2783 self.customButtonsClass = ko.observable(null); 2784 2785 self.categories = ko.observableArray([]); 2786 2787 self.showTitleBox = ko.observable(null); 2788 self.titleText = ko.observable(null); 2789 2790 self.titleButtonIcon = ko.observable(false); 2791 2792 self.titleIcon = ko.observable(false); 2793 2794 self.showPreLoadAttendees = ko.observable(false); 2795 2796 self.model = null; 2797 self.template = null; 2798 2799 self.onSearchButtonClickCallback = function() { 2800 return false; 2801 }; 2802 self.onTitleBoxButtonClickCallback = function() { 2803 return false; 2804 };
2805 self.onRegisterAttendeeClickCallback = function() { 2806 return false; 2807 }; 2808 2809 self.onClearFiltersClickCallback = function () { 2810 return false; 2811 }; 2812 2813 2814 self.hideAllPageElements = function() { 2815 self.errorMessage(false); 2816 self.logoUrl(false); 2817 self.searchText(null); 2818 self.showSearchPanel(false); 2819 self.showFilterPanel(false); 2820 self.showCustomButtons(false); 2821 self.customButtonsClass(null); 2822 $('.attendees-search-box').removeClass('attendees-search-box'); 2823 self.showTitleBox(false); 2824 self.titleText(null); 2825 self.titleButtonIcon(null); 2826 self.titleIcon(null); 2827 self.headerText('Attendee Check-In'); 2828 2829 self.onTitleBoxButtonClickCallback = function() { 2830 return false; 2831 }; 2832 2833 self.onSearchButtonClickCallback = function() { 2834 return false; 2835 }; 2836 2837 self.onRegisterAttendeeClickCallback = function() { 2838 return false; 2839 }; 2840 }; 2841 2842 self.onMainMenuClick = function() { 2843 var menuViewModel = new MenuViewModel(); 2844 2845 menuViewModel.previousModel = self.model; 2846 menuViewModel.previousTemplate = self.template; 2847 2848 menuViewModel.userName(_loggedUserName); 2849 if (_isLoggedInByLink) { 2850 menuViewModel.showGoToEventsPageButton(false); 2851 } 2852 2853 self.render(menuViewModel, $('#menu-page-template')); 2854 }; 2855 2856 self.onTitleBoxButtonClick = function() { 2857 return self.onTitleBoxButtonClickCallback(); 2858 }; 2859 2860 self.onSearchButtonClick = function() { 2861 var searchText = self.searchText(); 2862 if (!searchText) { 2863 self.showNotificationMessage('You must enter some text to search'); 2864 2865 return false; 2866 } 2867 2868 return self.onSearchButtonClickCallback(); 2869 }; 2870
2871 self.onRegisterAttendeeClick = function() { 2872 return self.onRegisterAttendeeClickCallback(); 2873 }; 2874 2875 self.loadCategories = function(eventId) { 2876 self.startApiCall( 2877 '/mobileadmin/attendeeAPI/loadCategories', 2878 { eventId: eventId }, // params object 2879 function(response) { 2880 // Ensure we always have an array, even if empty 2881 self.categories(Array.isArray(response.categories) ? response.categories : []); 2882 // Initialize checkbox logic after DOM update 2883 setTimeout(setupCategoryCheckboxLogic, 0); 2884 } 2885 ); 2886 }; 2887 2888 self.onApplyFiltersClick = function() { 2889 return self.onApplyFiltersClickCallback(); 2890 }; 2891 self.onClearFiltersClick = function() { 2892 return self.onClearFiltersClickCallback(); 2893 }; 2894 2895 self.render = function(model, template) { 2896 self.model = model; 2897 self.model.isLoggedInByLink = +_isLoggedInByLink; 2898 self.template = template; 2899 2900 self.model.init(self); 2901 2902 self.renderContent(model, template); 2903 }; 2904 2905 self.renderContent = function(model, template) { 2906 ko.renderTemplate(template.attr('id'), model, { 2907 templateEngine: ko.nativeTemplateEngine.instance 2908 }, $('#content')[0]); 2909 }; 2910 2911 self.startApiCall = function(url, params, callback, onError) { 2912 $.post( 2913 url, 2914 { 2915 csrf: _csrf, 2916 params : ko.toJSON(params) 2917 }, 2918 function(response) { 2919 if (response.error) { 2920 var errorMessage = response.error; 2921 if (errorMessage && typeof errorMessage === 'object' && errorMessage.message) { 2922 errorMessage = errorMessage.message; 2923 } 2924 self.showNotificationMessage(errorMessage); 2925 if (onError) { 2926 onError(); 2927 } 2928 } else { 2929 callback(response); 2930 } 2931 }, 2932 'json' 2933 ).fail(function() { 2934 self.showNotificationMessage('Request failed. Please try again.'); 2935 if (onError) { 2936 onError(); 2937 } 2938 }); 2939 }; 2940 2941 self.showNotificationMessage = function(message) { 2942 alert(message); 2943 }; 2944}; 2945 2946var MenuViewModel = function () { 2947 var self = this; 2948 2949 self.pageModel; 2950 2951 self.previousModel; 2952 self.previousTemplate; 2953 2954 self.userName = ko.observable(null); 2955 self.showLogoutConfirmation = ko.observable(false); 2956 self.showGoToEventsPageButton = ko.observable(true); 2957 2958 self.init = function(pageModel) { 2959 self.pageModel = pageModel; 2960 2961 pageModel.hideAllPageElements(); 2962 pageModel.logoUrl(_logoUrl); 2963 }; 2964 2965 self.goToEventsPage = function() { 2966 var eventsViewModel = new EventsListViewModel(); 2967 self.pageModel.render(eventsViewModel, $('#events-page-template')); 2968 eventsViewModel.loadEventsList(0); 2969 }; 2970 2971 self.showLogoutConfirmationDialog = function() { 2972 self.showLogoutConfirmation(true); 2973 }; 2974 2975 self.logout = function() { 2976 self.pageModel.startApiCall( 2977 '/mobileadmin/loginAPI/logout', 2978 {}, 2979 function(response) { 2980 renderAccountThemeColors(false, [], true); 2981 _isLoggedIn = false; 2982 if (_isLoggedInByLink) { 2983 _isLoggedInByLink = false; 2984 var loginByLinkViewModel = new LoginByLinkViewModel(); 2985 loginByLinkViewModel.eventName(_eventData.eventName); 2986 loginByLinkViewModel.eventLogo(_logoUrl); 2987 2988 self.pageModel.render(loginByLinkViewModel, $('#login-by-link-page-template')); 2989 self.pageModel.showMenuButton(false); 2990 } else { 2991 var loginViewModel = new LoginViewModel(); 2992 2993 self.pageModel.render(loginViewModel, $('#login-page-template')); 2994 } 2995 } 2996 ); 2997 }; 2998 2999 self.cancelLogout = function() { 3000 self.showLogoutConfirmation(false); 3001 }; 3002 3003 self.cancel = function() { 3004 self.pageModel.render(self.previousModel, self.previousTemplate, false); 3005 }; 3006}; 3007 3008var LoginViewModel = function () { 3009 var self = this; 3010 3011 self.pageModel; 3012 3013 self.username = ko.observable(null); 3014 self.password = ko.observable(null); 3015 3016 self.init = function(pageModel) { 3017 self.pageModel = pageModel; 3018 3019 self.pageModel.hideAllPageElements(); 3020 3021 self.pageModel.showMenuButton(false); 3022 self.pageModel.logoUrl(_logoUrl); 3023 }; 3024 3025 self.goToEventsPage = function () { 3026 var eventsViewModel = new EventsListViewModel(); 3027 self.pageModel.render(eventsViewModel, $('#events-page-template')); 3028 eventsViewModel.loadEventsList(0); 3029 }; 3030 3031 self.login = function () { 3032 if (self.username() && self.password()) { 3033 self.username(self.username().toLowerCase()); 3034 3035 self.pageModel.startApiCall( 3036 '/mobileadmin/loginAPI/login', 3037 { 3038 username: self.username(), 3039 password: self.password() 3040 }, 3041 function(response) { 3042 _isLoggedIn = true; 3043 _loggedUserName = response.loggedUserName; 3044 self.goToEventsPage(); 3045 self.pageModel.showMenuButton(true); 3046 renderAccountThemeColors(true, response.new_account_level_theme_color, response.is_new_platform_theme_enabled); 3047 } 3048 ); 3049 } else { 3050 self.pageModel.showNotificationMessage('You must specify all fields'); 3051 } 3052 }; 3053 3054 self.goToResetPasswordPage = function () { 3055 self.pageModel.render(new ResetPasswordViewModel(), $('#reset-password-page-template')); 3056 }; 3057}; 3058 3059var ResetPasswordViewModel = function () { 3060 var self = this; 3061 3062 self.pageModel; 3063 3064 self.username = ko.observable(null); 3065 self.captcha = ko.observable(null); 3066 self.logoUrl = ko.observable(_logoUrl); 3067 3068 self.init = function(pageModel) { 3069 self.pageModel = pageModel; 3070 3071 self.pageModel.hideAllPageElements(); 3072 self.pageModel.logoUrl(_logoUrl); 3073 } 3074 3075 self.send = function () { 3076 if (self.username() && self.captcha()) { 3077 self.username(self.username()); 3078 self.captcha(self.captcha()); 3079 3080 self.pageModel.startApiCall( 3081 '/mobileadmin/loginAPI/sendResetPasswordEmail', 3082 { 3083 username: self.username(), 3084 captcha: self.captcha(), 3085 }, 3086 function(response) { 3087 self.pageModel.showNotificationMessage('If that username exists you have been emailed your password.'); 3088 self.goToLoginPage(); 3089 } 3090 ); 3091 } else { 3092 self.pageModel.showNotificationMessage('You must specify all the fields'); 3093 } 3094 }; 3095 3096 self.goToLoginPage = function () { 3097 var loginViewModel = new LoginViewModel(); 3098 self.pageModel.render(loginViewModel, $('#login-page-template')); 3099 }; 3100}; 3101 3102var LoginByLinkViewModel = function () { 3103 var self = this; 3104 3105 self.pageModel; 3106 3107 self.password = ko.observable(null); 3108 self.eventLogo = ko.observable(null); 3109 self.eventName = ko.observable(null); 3110 3111 self.init = function (pageModel) { 3112 self.pageModel = pageModel; 3113 3114 self.pageModel.hideAllPageElements(); 3115 self.pageModel.logoUrl(_logoUrl); 3116 }; 3117 3118 self.showPasswordField =_passwordRequired ; 3119 3120 self.login = function () { 3121 if (self.showPasswordField && !self.password()) { 3122 self.pageModel.showNotificationMessage('You must specify password'); 3123 } else { 3124 self.pageModel.startApiCall( 3125 '/mobileadmin/loginAPI/loginByLink', 3126 { 3127 code: _loginCode, 3128 password: self.password() 3129 3130 }, 3131 function(response) { 3132 self.pageModel.showMenuButton(true); 3133 _isLoggedIn = true; 3134 _isLoggedInByLink = true; 3135 self.goToEventPage(_eventData.eventId); 3136 } 3137 ); 3138 } 3139 }; 3140 3141 self.goToEventPage = function(eventId) { 3142 var eventViewModel = new EventViewModel(); 3143 self.pageModel.render(eventViewModel, $('#event-page-template')); 3144 eventViewModel.loadEventData(eventId); 3145 }; 3146}; 3147 3148var EventsListViewModel = function () { 3149 var self = this; 3150 3151 self.pageModel;
3152 self.currentFolderName; 3153 3154 self.events = ko.observableArray(null); 3155 3156 self.eventId = ko.observable(null); 3157 self.titleText = ko.observable(null); 3158 self.backFolderId = ko.observable(null); 3159 self.eventData = ko.observable(null); 3160 self.searchText = ko.observable(null); 3161 self.titleIcon = ko.observable(null); 3162 3163 self.init = function (pageModel) { 3164 self.pageModel = pageModel; 3165 3166 pageModel.hideAllPageElements(); 3167 pageModel.showSearchPanel(true); 3168 pageModel.showFilterPanel(false); 3169 pageModel.searchPlaceholder('search events by name or #'); 3170 pageModel.searchIcon('icon-calendar'); 3171 3172 pageModel.showTitleBox(true); 3173 if (self.currentFolderName) { 3174 pageModel.titleText(self.currentFolderName); 3175 } 3176 3177 pageModel.onTitleBoxButtonClickCallback = function() { 3178 self.pageModel.searchText(null); 3179 self.loadEventsList(self.backFolderId()); 3180 }; 3181 3182 pageModel.onSearchButtonClickCallback = function() { 3183 self.backFolderId(0); 3184 self.searchText(self.pageModel.searchText()); 3185 3186 self.pageModel.startApiCall( 3187 '/mobileadmin/eventAPI/searchEvents', 3188 { 3189 searchText: self.pageModel.searchText() 3190 }, 3191 function(response) { 3192 self.events(response.eventsList); 3193 self.pageModel.titleText('Results for: ' + self.pageModel.searchText()); 3194 self.pageModel.titleIcon('icon-search'); 3195 self.pageModel.titleButtonIcon('icon-cancel-circle'); 3196 } 3197 ); 3198 }; 3199 }; 3200 3201 self.loadEventsList = function(parentFolderId) { 3202 self.pageModel.startApiCall( 3203 '/mobileadmin/eventAPI/loadEventsList', 3204 { 3205 parentFolderId: parentFolderId 3206 }, 3207 function(response) { 3208 renderAccountThemeColors(true, response.new_account_level_theme_color, response.is_new_platform_theme_enabled); 3209 self.events(response.eventsList); 3210 3211 self.backFolderId(response.backFolderId); 3212 if (parentFolderId == 0) { 3213 self.pageModel.titleButtonIcon(false); 3214 self.pageModel.titleIcon(false); 3215 self.pageModel.titleText('My events and folders'); 3216 } else { 3217 self.pageModel.titleButtonIcon('icon-arrow-left'); 3218 self.pageModel.titleIcon('icon-folder-open'); 3219 self.pageModel.titleText(response.currentFolderName); 3220 self.currentFolderName = response.currentFolderName; 3221 } 3222 } 3223 ); 3224 }; 3225 3226 self.select = function (item) { 3227 if (item.type == 'folder') { 3228 self.loadEventsList(item.id); 3229 } else { 3230 var eventViewModel = new EventViewModel(); 3231 3232 self.pageModel.render(eventViewModel, $('#event-page-template')); 3233 eventViewModel.loadEventData(item.id); 3234 } 3235 }; 3236 3237 self.close = function(item, e) { 3238 self.searchText(null); 3239 self.titleText(null); 3240 self.titleIcon(null); 3241 self.loadEventsList(self.backFolderId()); 3242 e.preventDefault(); 3243 }; 3244}; 3245 3246var EventViewModel = function () { 3247 var self = this; 3248 3249 self.pageModel; 3250 3251 self.eventData = ko.observable(null); 3252 self.showCheckinLocations = ko.observable(null); 3253 3254 self.init = function (pageModel) { 3255 self.pageModel = pageModel; 3256 3257 pageModel.hideAllPageElements(); 3258 if (!_isLoggedInByLink) { 3259 pageModel.showSearchPanel(true); 3260 pageModel.searchPlaceholder('search events by name or #'); 3261 pageModel.showFilterPanel(false); 3262 pageModel.searchIcon('icon-calendar'); 3263 pageModel.showTitleBox(true); 3264 } else { 3265 pageModel.headerText(_eventData.eventName); 3266 pageModel.logoUrl(_logoUrl); 3267 } 3268 3269 pageModel.onTitleBoxButtonClickCallback = function() { 3270 self.onCloseButtonClick(); 3271 }; 3272 3273 pageModel.onSearchButtonClickCallback = function() { 3274 var searchText = self.pageModel.searchText(); 3275 3276 var eventsViewModel = new EventsListViewModel(); 3277 self.pageModel.render(eventsViewModel, $('#events-page-template')); 3278 3279 eventsViewModel.backFolderId(0); 3280 eventsViewModel.searchText(searchText); 3281 3282 self.pageModel.startApiCall( 3283 '/mobileadmin/eventAPI/searchEvents', 3284 { 3285 searchText: searchText 3286 }, 3287 function(response) { 3288 eventsViewModel.events(response.eventsList); 3289 eventsViewModel.pageModel.titleText('Results for: ' + searchText); 3290 eventsViewModel.pageModel.titleIcon('icon-search'); 3291 eventsViewModel.pageModel.titleButtonIcon('icon-cancel-circle'); 3292 } 3293 ); 3294 }; 3295 }; 3296 3297 self.loadEventData = function(eventId) { 3298 self.pageModel.startApiCall( 3299 '/mobileadmin/eventAPI/loadEventData', 3300 { 3301 eventId: eventId 3302 }, 3303 function(response) { 3304 renderAccountThemeColors(true, response.new_account_level_theme_color, response.is_new_platform_theme_enabled); 3305 self.eventData(response.eventData); 3306 self.pageModel.titleText(response.eventData.eventName); 3307 self.pageModel.titleIcon('icon-calendar'); 3308 self.pageModel.titleButtonIcon('icon-arrow-left'); 3309 self.showCheckinLocations(response.eventData.checkinLocations && response.eventData.checkinLocations.length > 0); 3310 self.pageModel.searchText(null); 3311 } 3312 ); 3313 }; 3314 3315 self.onCloseButtonClick = function() { 3316 eventsListModel = new EventsListViewModel(); 3317 self.pageModel.render(eventsListModel, $('#events-page-template')); 3318 eventsListModel.loadEventsList(self.eventData().folderId); 3319 }; 3320 3321 self.startCheckingButtonClick = function(item, e) { 3322 checkinLocation = $('#checkin-location:visible'); 3323 var attendeesViewModel = new AttendeesViewModel(); 3324 attendeesViewModel.checkinLocationsEnabled = checkinLocation.length > 0; 3325 3326 if (attendeesViewModel.checkinLocationsEnabled) { 3327 attendeesViewModel.currentCheckinLocation = checkinLocation.val(); 3328 attendeesViewModel.currentCheclinLocationName = checkinLocation.find('option:selected').html(); 3329 3330 if (!attendeesViewModel.currentCheckinLocation) { 3331 alert('Please select Check-in Location'); 3332 return; 3333 } 3334 } 3335 3336 attendeesViewModel.eventData = item.eventData(); 3337 self.pageModel.render(attendeesViewModel, $('#attendees-page-template')); 3338 self.pageModel.loadCategories(item.eventData().eventId); 3339 if(item.eventData().isAllowedPreLoad){ 3340 self.pageModel.showPreLoadAttendees(true); 3341 } 3342 attendeesViewModel.loadAttendeesList(); 3343 }; 3344}; 3345 3346var AttendeesViewModel = function () { 3347 var self = this; 3348 3349 const SEARCH_ATTENDEES_ENDPOINT = '/mobileadmin/attendeeAPI/searchAttendees'; 3350 const LOAD_ATTENDEES_LIST_ENDPOINT = '/mobileadmin/attendeeAPI/loadAttendeesList'; 3351 const TRUNCATE_LENGTH = 100; // Characters to show before truncation 3352 3353 self.pageModel; 3354 self.eventData; 3355 3356 self.attendees = ko.observableArray(null); 3357 self.filterType = ko.observable(1); 3358 self.showPreLoadAttendees = ko.observable(null); 3359 self.showCancelAttendees = ko.observable(null); 3360 self.showAttendeesFilter = ko.observable(true); 3361 self.selectedCategories = ko.observableArray([]); 3362 self.excludePreload = ko.observable(null); 3363 self.multilineFields = ko.observableArray([]); 3364 self.expandedFields = {}; // Track expanded state for each attendee/field 3365 3366 // Pagination + search state 3367 self.currentPage = 1; 3368 self.isLoading = ko.observable(false); 3369 self.hasMore = true; 3370 self.scrollHandler = null; 3371 self.isSearchMode = ko.observable(false); 3372 self.searchQuery = ko.observable(''); 3373 3374 self.filters = ko.observableArray([ 3375 { id : 1, name: 'All Attendees', total: ko.observable(0) }, 3376 { id : 2, name: 'Not Checked In', total: ko.observable(0) }, 3377 { id : 3, name: 'Checked In', total: ko.observable(0) } 3378 ]); 3379 3380 // Helper function to check if field needs truncation 3381 self.needsTruncation = function(fieldName, fieldValue) { 3382 if (!fieldValue || typeof fieldValue !== 'string') return false;
3383 if (self.multilineFields().indexOf(fieldName) === -1) return false; 3384 return fieldValue.length > TRUNCATE_LENGTH || fieldValue.indexOf('\n') !== -1; 3385 }; 3386 3387 // Helper function to get display value (truncated or full) 3388 self.getFieldDisplayValue = function(attendeeId, fieldName, fieldValue) { 3389 if (!self.needsTruncation(fieldName, fieldValue)) { 3390 return fieldValue; 3391 } 3392 3393 var expandKey = attendeeId + '_' + fieldName; 3394 if (self.expandedFields[expandKey]) { 3395 return fieldValue; // Show full content 3396 } 3397 3398 // Truncate: take first line or first TRUNCATE_LENGTH chars, whichever is shorter 3399 var firstNewLine = fieldValue.indexOf('\n'); 3400 var truncateAt = firstNewLine > 0 && firstNewLine < TRUNCATE_LENGTH ? firstNewLine : TRUNCATE_LENGTH; 3401 return fieldValue.substring(0, truncateAt); 3402 }; 3403 3404 // Helper function to check if field is expanded 3405 self.isFieldExpanded = function(attendeeId, fieldName) { 3406 var expandKey = attendeeId + '_' + fieldName; 3407 return self.expandedFields[expandKey] || false; 3408 }; 3409 3410 // Toggle field expansion 3411 self.toggleFieldExpansion = function(attendeeId, fieldName, event) { 3412 var expandKey = attendeeId + '_' + fieldName; 3413 self.expandedFields[expandKey] = !self.expandedFields[expandKey]; 3414 3415 // Update only the specific field's display instead of re-rendering the entire list 3416 if (event && event.target) { 3417 var $link = $(event.target); 3418 var $fieldContent = $link.siblings('.field-content'); 3419 var attendee = self.attendees().find(function(a) { return a.attendeeId === attendeeId; }); 3420 if (attendee && $fieldContent.length > 0) { 3421 var fieldValue = attendee[fieldName]; 3422 var displayValue = self.getFieldDisplayValue(attendeeId, fieldName, fieldValue); 3423 $fieldContent.text(displayValue); 3424 3425 // Update the link text 3426 var isExpanded = self.expandedFields[expandKey]; 3427 $link.text(isExpanded ? ' See less' : '...See more'); 3428 } 3429 } 3430 3431 // Prevent event bubbling 3432 if (event && event.stopPropagation) { 3433 event.stopPropagation(); 3434 } 3435 return false; 3436 }; 3437 3438 self.init = function (pageModel) { 3439 self.pageModel = pageModel; 3440 if ((_isLoggedInByLink && _showPreLoadApplicants) 3441 || self.eventData.isAllowedPreLoad) { 3442 const alreadyExists = self.filters().some(filter => filter.id === 4); 3443 if (!alreadyExists) { 3444 self.filters.push( 3445 { 3446 id : 4, 3447 name: 'Pre-loaded', 3448 total: ko.observable(0) 3449 } 3450 ); 3451} 3452 self.showPreLoadAttendees(true); 3453 } 3454 3455 3456 if(self.eventData.enable_mobile_attendee_cancel_registration == 1){ 3457 if ((self.eventData.mobileCancelRegistrationSetting == 1) || (self.eventData.isAllowedCancel)) 3458 { 3459 self.filters.push( 3460 { 3461 id : 5, 3462 name: 'Cancelled', 3463 total: ko.observable(0) 3464 } 3465 ); 3466 self.showCancelAttendees(true); 3467 } 3468 } 3469 3470 pageModel.hideAllPageElements(); 3471 pageModel.showSearchPanel(true); 3472 pageModel.showCustomButtons(true); 3473 pageModel.showFilterPanel(true); 3474 pageModel.customButtonsClass('attendees-search-box'); 3475 pageModel.searchPlaceholder('search attendees'); 3476 pageModel.searchIcon('icon-user left-adjusted'); 3477 pageModel.headerText(self.eventData.eventName); 3478 3479 if (self.currentCheckinLocation) { 3480 pageModel.checkinLocation('Check-in Location: ' + self.currentCheclinLocationName); 3481 } else { 3482 pageModel.checkinLocation(''); 3483 } 3484 3485 self.filterType = ko.observable(1); 3486 if(self.eventData.default_home_tab != 0){ 3487 self.filterType(self.eventData.default_home_tab); 3488 } 3489 3490 pageModel.onSearchButtonClickCallback = function() { 3491 const searchText = self.pageModel.searchText(); 3492 3493 self.isSearchMode(true); 3494 self.searchQuery(searchText); 3495 3496 self.pageModel.showTitleBox(true); 3497 self.showAttendeesFilter(false); 3498 3499 self.pageModel.onTitleBoxButtonClickCallback = function() { 3500 // Clear search 3501 self.isSearchMode(false); 3502 self.searchQuery(''); 3503 self.pageModel.showTitleBox(false); 3504 self.showAttendeesFilter(true); 3505 self.pageModel.searchText(null); 3506 self.isLoading(false); 3507 self.loadAttendeesList(); 3508 }; 3509 3510 self.isLoading(false); 3511 self.currentPage = 1; 3512 self.hasMore = true; 3513 self.attendees([]); 3514 3515 self.pageModel.titleText('Results for: ' + searchText); 3516 self.pageModel.titleIcon('icon-search'); 3517 self.pageModel.titleButtonIcon('icon-cancel-circle'); 3518 3519 self.loadNextPage(true); 3520 return false;
3521 }; 3522 3523 pageModel.onRegisterAttendeeClickCallback = function() { 3524 var registerAttendeeViewModel = new RegisterAttendeeViewModel(); 3525 registerAttendeeViewModel.eventData = self.eventData; 3526 self.pageModel.render(registerAttendeeViewModel, $('#register-attendee-page-template')); 3527 }; 3528 pageModel.onApplyFiltersClickCallback = function () { 3529 const filterIcon = document.getElementById('category-filter'); 3530 // Collect selected category IDs from checked checkboxes 3531 let checkboxes = document.querySelectorAll("#category-section input[type='checkbox']:checked"); 3532 let excludeCheckbox = document.querySelector(".exclude-preload input[type='checkbox']"); 3533 let isChecked = excludeCheckbox?.checked; 3534 3535 let selected = Array.from(checkboxes).map(cb => (cb.value)); 3536 3537 self.selectedCategories(selected); // Save selected categories 3538 self.excludePreload(isChecked); 3539 self.loadAttendeesList(); 3540 3541 3542 document.getElementById("filter-menu").style.display = "none"; 3543 if (selected.length > 0 || isChecked == true) { 3544 filterIcon.classList.remove('fa-regular'); 3545 filterIcon.classList.add('fa-solid'); 3546 }else{ 3547 filterIcon.classList.remove('fa-solid'); 3548 filterIcon.classList.add('fa-regular'); 3549 } 3550 }; 3551 pageModel.onClearFiltersClickCallback = function () { 3552 3553 const filterIcon = document.getElementById('category-filter'); 3554 document.querySelectorAll("#category-section input[type='checkbox']").forEach(function(cb) { 3555 cb.checked = false; 3556 cb.disabled = false; 3557 }); 3558 let excludeCheckbox = document.querySelector(".exclude-preload input[type='checkbox']"); 3559 if (excludeCheckbox) { 3560 excludeCheckbox.checked = false; 3561 } 3562 filterIcon.classList.remove('fa-solid'); 3563 filterIcon.classList.add('fa-regular');// Uncheck all checkboxes 3564 self.selectedCategories(null); // Save selected categories 3565 self.excludePreload(null); 3566 self.loadAttendeesList(); 3567 // Optionally hide the filter menu 3568 updateSelectedCategoryCount(); 3569 3570 document.getElementById("filter-menu").style.display = "none"; 3571 }; 3572 3573 self.scrollHandler = function() { 3574 if (self.isLoading() || !self.hasMore) { 3575 return; 3576 } 3577 3578 const scrollPos = $(window).scrollTop() + $(window).height(); 3579 const threshold = $(document).height() - 150; // 150px from bottom 3580 3581 if (scrollPos >= threshold) { 3582 self.loadNextPage(false); 3583 } 3584 }; 3585 3586 $(window).off('scroll.attendees').on('scroll.attendees', self.scrollHandler); 3587 3588 self.isSearchMode(false); 3589 self.searchQuery(''); 3590 self.currentPage = 1; 3591 self.hasMore = true; 3592 self.attendees([]); 3593 self.loadNextPage(true); 3594 }; 3595 3596 //detach scroll when leaving this view 3597 self.dispose = function() { 3598 $(window).off('scroll.attendees'); 3599 }; 3600 3601 self.changeFilter = function(item) { 3602 self.filterType(item.id); 3603 self.loadAttendeesList(); 3604 }; 3605 3606 self.loadAttendeesList = function() { 3607 self.isLoading(false); 3608 self.currentPage = 1; 3609 self.hasMore = true; 3610 self.attendees([]); 3611 self.loadNextPage(true); 3612 }; 3613 3614 self.loadNextPage = function(isFirstLoad) { 3615 if (!self.hasMore && !isFirstLoad) { 3616 return; 3617 } 3618 if (self.isLoading() && !isFirstLoad) { 3619 return; 3620 } 3621 3622 self.isLoading(true); 3623 3624 const params = { 3625 eventId: self.eventData.eventId, 3626 filterType: self.filterType(), 3627 page: self.currentPage 3628 } 3629 3630 let attendeeListEndpoints = ''; 3631 3632 if (self.isSearchMode()) { 3633 params.searchText = self.searchQuery(); 3634 attendeeListEndpoints = SEARCH_ATTENDEES_ENDPOINT; 3635 } else { 3636 params.selectedCategories = self.selectedCategories(); 3637 params.excludePreload = self.excludePreload(); 3638 attendeeListEndpoints = LOAD_ATTENDEES_LIST_ENDPOINT; 3639 } 3640 3641 self.pageModel.startApiCall( 3642 attendeeListEndpoints, 3643 params, 3644 function(response) { 3645 const newList = response.attendeesList || []; 3646 3647 if (isFirstLoad) { 3648 self.attendees(newList); 3649 // Store multiline fields metadata on first load 3650 if (response.multilineFields) { 3651 self.multilineFields(response.multilineFields); 3652 } 3653 } else { 3654 self.attendees(self.attendees().concat(newList)); 3655 } 3656 3657 if (response.totalAttendeesList) { 3658 ko.utils.arrayMap(self.filters(), function(filter) { 3659 if (response.totalAttendeesList[filter.id] !== undefined) { 3660 filter.total(response.totalAttendeesList[filter.id]); 3661 } 3662 }); 3663 } 3664 3665 self.hasMore = response.hasMore; 3666 3667 if (self.hasMore) { 3668 self.currentPage += 1; 3669 } 3670 3671 self.isLoading(false); 3672 }, 3673 function() { 3674 self.isLoading(false); 3675 } 3676 ); 3677 }; 3678 3679 self.checkInAttendee = function(item, e) { 3680 self.pageModel.startApiCall( 3681 '/mobileadmin/attendeeAPI/checkInAttendee', 3682 { 3683 attendeeId: item.attendeeId, 3684 locationId: self.checkinLocationsEnabled ? self.currentCheckinLocation : 0 3685 }, 3686 function(response) { 3687 var filters = self.filters(), 3688 checkInButton = $(e.currentTarget); 3689 3690 filters[1].total(parseInt(filters[1].total()) - 1); 3691 filters[2].total(parseInt(filters[2].total()) + 1); 3692 3693 item.isCheckedIn = true; 3694 checkInButton.closest('li').find('.checked-in').show(); 3695 checkInButton.hide(); 3696 checkInButton.closest('li').find('.icon-blankperson').removeClass('icon-blankperson').addClass('icon-user'); 3697 self.reRenderAttendeeRowButtons(response, e, item); 3698 } 3699 ); 3700 }; 3701 3702 self.cancelAttendeeRegistration = function(item, e) { 3703 if (!confirm("You are about to cancel " + item.fname + " " + item.lname + " \nAre you sure you want to cancel the attendee?")) { 3704 return; 3705 } 3706 3707 self.pageModel.startApiCall( 3708 '/mobileadmin/attendeeAPI/cancelAttendeeRegistration', 3709 { 3710 eventId : self.eventData.eventId, 3711 attendeeId: item.attendeeId, 3712 email: item.email, 3713 }, 3714 function(response) { 3715 self.loadAttendeesList(); 3716 } 3717 ); 3718 }; 3719 3720 self.groupCheckInAttendee = function(item, e) { 3721 3722 self.pageModel.startApiCall( 3723 '/mobileadmin/attendeeAPI/checkInAttendeeGroup', 3724 { 3725 attendeeId: item.attendeeId, 3726 parentId : item.parentid, 3727 locationId: self.checkinLocationsEnabled ? self.currentCheckinLocation : 0 3728 }, 3729 function(response) { 3730 self.loadAttendeesList(); 3731 } 3732 ); 3733 }; 3734 3735 self.unCheckAttendee = function(item, e) { 3736 self.pageModel.startApiCall( 3737 '/mobileadmin/attendeeAPI/checkInAttendee', 3738 { 3739 attendeeId: item.attendeeId, 3740 uncheck: true 3741 }, 3742 function(response) { 3743 var filters = self.filters(), 3744 checkInButton = $(e.currentTarget); 3745 3746 filters[1].total(parseInt(filters[1].total()) + 1); 3747 filters[2].total(parseInt(filters[2].total()) - 1); 3748 3749 item.isCheckedIn = false;
3750 checkInButton.closest('li').find('.check-in').show(); 3751 checkInButton.hide(); 3752 checkInButton.closest('li').find('.icon-user').removeClass('icon-user').addClass('icon-blankperson'); 3753 self.reRenderAttendeeRowButtons(response, e, item); 3754 } 3755 ); 3756 }; 3757 3758 self.noShowAttendee = function(item, e) { 3759 self.pageModel.startApiCall( 3760 '/mobileadmin/attendeeAPI/noShowAttendee', 3761 { 3762 attendeeId: item.attendeeId, 3763 noshow: 1 3764 }, 3765 function(response) { 3766 var filters = self.filters(); 3767 if (item.isCheckedIn) { 3768 // Move from Checked In -> Not Checked In when marking No Show 3769 filters[2].total(Math.max(0, parseInt(filters[2].total()) - 1)); 3770 filters[1].total(parseInt(filters[1].total()) + 1); 3771 item.isCheckedIn = false; 3772 3773 // Reset user icon with unchecked user 3774 var checkInButton = $(e.currentTarget); 3775 checkInButton.closest('li').find('.icon-user').removeClass('icon-user').addClass('icon-blankperson'); 3776 } 3777 self.reRenderAttendeeRowButtons(response, e, item); 3778 e.stopPropagation(); 3779 } 3780 ); 3781 }; 3782 3783 self.undoNoShowAttendee = function(item, e) { 3784 self.pageModel.startApiCall( 3785 '/mobileadmin/attendeeAPI/noShowAttendee', 3786 { 3787 attendeeId: item.attendeeId, 3788 noshow: 0 3789 }, 3790 function(response) { 3791 self.reRenderAttendeeRowButtons(response, e, item); 3792 e.stopPropagation(); 3793 } 3794 ); 3795 }; 3796 3797 self.select = function(item, e) { 3798 $(e.currentTarget).addClass('active'); 3799 $(e.currentTarget).find('.info').show(); 3800 }; 3801 3802 self.cancel = function(item, e) { 3803 $(e.currentTarget).closest('li').removeClass('active'); 3804 $(e.currentTarget).closest('li').find('.info').hide(); 3805 3806 e.stopPropagation(); 3807 }; 3808 3809 self.registerPreLoadAttendee = function(item, e) { 3810 var registerAttendeeViewModel = new RegisterAttendeeViewModel(); 3811 3812 registerAttendeeViewModel.eventData = self.eventData; 3813 registerAttendeeViewModel.preLoadId = item.attendeeId; 3814 registerAttendeeViewModel.itemData = item; 3815 3816 self.pageModel.render(registerAttendeeViewModel, $('#register-attendee-page-template')); 3817 3818 e.stopPropagation(); 3819 }; 3820 3821 self.reRenderAttendeeRowButtons = function(response, e, item) { 3822 if(response && response.updatedAttendeeData && response.updatedAttendeeData.registrationstatus != '') { 3823 let ele = $(e.currentTarget) 3824 switch(response.updatedAttendeeData.registrationstatus) { 3825 case 'Attended': 3826 ele.closest('li').find('.no-show').show(); 3827 ele.closest('li').find('.no-showed').hide(); 3828 if(item.isGroupCheckIn) { 3829 ele.closest('li').find('.check-in-group').hide(); 3830 } 3831 break; 3832 case 'Confirmed': 3833 ele.closest('li').find('.no-showed').hide(); 3834 ele.closest('li').find('.no-show').show(); 3835 if(item.isGroupCheckIn) { 3836 ele.closest('li').find('.check-in-group').show(); 3837 } 3838 break; 3839 case 'No Show': 3840 ele.closest('li').find('.no-showed').show(); 3841 ele.closest('li').find('.check-in').show(); 3842 ele.closest('li').find('.no-show').hide(); 3843 ele.closest('li').find('.checked-in').hide(); 3844 if(item.isGroupCheckIn) { 3845 ele.closest('li').find('.check-in-group').hide(); 3846 } 3847 break; 3848 } 3849 } 3850 }; 3851 3852}; 3853 3854var RegisterAttendeeViewModel = function () { 3855 var self = this; 3856 3857 self.pageModel; 3858 self.eventData; 3859 self.preLoadId; 3860 self.itemData = null; 3861 3862 self.formFields = ko.observableArray([]); 3863 self.notes = ko.observable(null); 3864 3865 self.init = function(pageModel) { 3866 var formFields = [], 3867 i, j, 3868 fieldKey, 3869 fieldName, 3870 value, 3871 fields = self.getFields(); 3872 3873 self.pageModel = pageModel; 3874 3875 pageModel.hideAllPageElements(); 3876 pageModel.headerText(self.eventData.eventName); 3877 3878 for (i in fields) { 3879 for (j in self.eventData.attendeeVisibleFields) { 3880 fieldKey = self.eventData.attendeeVisibleFields[j].fieldName; 3881 fieldName = self.eventData.attendeeVisibleFields[j].reportName; 3882 3883 if (fieldKey != fields[i]) { 3884 continue; 3885 } 3886 3887 formFields[i] = { 3888 key: fieldKey, 3889 name: fieldName, 3890 value: '' 3891 }; 3892 } 3893 } 3894 3895 var fieldLength = (self.itemData != null ? Object.values(self.itemData).length : 0); 3896 formFields.forEach((obj, i) => { 3897 if(self.itemData != null && self.itemData[obj.key] != undefined) { 3898 formFields[i].value = self.itemData[obj.key]; 3899 } 3900 }); 3901 self.formFields(formFields); 3902 3903 // Populate form fields with pre-loaded data after DOM is ready 3904 if (self.itemData != null && self.preLoadId) { 3905 setTimeout(function() { 3906 initMobileConditionalQuestions(self.eventData ? self.eventData.conditionalMap : null); 3907 self.populateFormFieldsFromItemData(); 3908 }, 100); 3909 } else { 3910 setMobilePreloadFieldValues(null); 3911 setTimeout(function () { 3912 initMobileConditionalQuestions(self.eventData ? self.eventData.conditionalMap : null); 3913 }, 50); 3914 } 3915 }; 3916 3917 self.getFields = function() { 3918 var fieldKeys = [], 3919 attendeeVisibleFields = self.eventData.attendeeVisibleFields, 3920 i, 3921 customKeys = [], 3922 key; 3923 3924 for (i in attendeeVisibleFields) { 3925 key = attendeeVisibleFields[i].fieldName; 3926 if (['fname', 'lname'].indexOf(key) == -1) { 3927 customKeys.push(key); 3928 } 3929 } 3930 3931 for (i in attendeeVisibleFields) { 3932 switch (attendeeVisibleFields[i]['fieldName']) { 3933 case 'fname': 3934 fieldKeys[0] = 'fname'; 3935 break; 3936 case 'lname': 3937 fieldKeys[1] = 'lname'; 3938 break; 3939 } 3940 } 3941 3942 for (i = 0; i < 10; i++) { 3943 if (fieldKeys[i] == undefined && customKeys.length != 0) { 3944 fieldKeys[i] = customKeys.shift(); 3945 } 3946 } 3947 3948 return fieldKeys; 3949 }; 3950 3951 self.populateFormFieldsFromItemData = function() { 3952 if (!self.itemData) { 3953 return; 3954 } 3955 3956 setMobilePreloadFieldValues(self.itemData); 3957
3958 Object.keys(self.itemData).forEach(function(fieldName) { 3959 if (/^(attendeeId|isCheckedIn|noShow|groupCount|groupMembers|guest|isGroupCheckIn|registrationstatus)$/.test(fieldName) || /_(value|values)$/.test(fieldName)) { 3960 return; 3961 } 3962 var fieldValue = self.itemData[fieldName]; 3963 var choiceKey = self.itemData[fieldName + '_value']; 3964 3965 if (fieldValue === undefined || fieldValue === null || fieldValue === '') { 3966 return; 3967 } 3968 3969 var $select = $('.register-attendee-questions select[name="input[' + fieldName + ']"]'); 3970 if ($select.length) { 3971 if (choiceKey) { 3972 $select.val(String(choiceKey)); 3973 } else if (!$select.val(fieldValue)) { 3974 $select.find('option').each(function() { 3975 var $opt = $(this), optVal = $opt.val(); 3976 if (!optVal) { 3977 return; 3978 } 3979 if ($.trim($opt.text()) === fieldValue || $opt.attr('data-eng') === fieldValue) { 3980 $select.val(optVal); 3981 return false; 3982 } 3983 }); 3984 } 3985 return; 3986 } 3987 3988 var $radios = $('.register-attendee-questions input[type="radio"][name="input[' + fieldName + ']"]'); 3989 if ($radios.length) { 3990 if (choiceKey) { 3991 $radios.filter('[value="' + choiceKey + '"]').prop('checked', true); 3992 } else { 3993 $radios.filter('[value="' + fieldValue + '"]').prop('checked', true); 3994 if (!$radios.filter(':checked').length) { 3995 $radios.each(function() { 3996 if ($(this).attr('alt') === fieldValue) { 3997 $(this).prop('checked', true); 3998 } 3999 }); 4000 } 4001 } 4002 return; 4003 } 4004 4005 var inputSelector = 'input[name="input[' + fieldName + ']"], textarea[name="input[' + fieldName + ']"]'; 4006 var $field = $(inputSelector); 4007 4008 if ($field.length > 0) { 4009 if ($field.is('input[type="checkbox"]')) { 4010 if (fieldValue === 'Checked') { 4011 $field.prop('checked', true); 4012 } else { 4013 $field.each(function() { 4014 if ($(this).val() == fieldValue) { 4015 $(this).prop('checked', true); 4016 } 4017 }); 4018 } 4019 } else { 4020 $field.val(fieldValue); 4021 } 4022 } 4023 4024 var numericValuesField = fieldName + '_values'; 4025 if (numericValuesField in self.itemData && self.itemData[numericValuesField]) { 4026 $.each(self.itemData[numericValuesField], function(i, numericValue) { 4027 if (numericValue) { 4028 $('input[type="checkbox"][name^="input[' + fieldName + ']"][value="' + numericValue + '"]').prop('checked', true); 4029 } 4030 }); 4031 } else if (typeof fieldValue === 'string' && fieldValue.indexOf(',') > -1) { 4032 var values = fieldValue.split(','); 4033 values.forEach(function(val) { 4034 var trimmedVal = val.trim(); 4035 $('.register-attendee-questions input[type="checkbox"]').each(function() { 4036 var $checkbox = $(this); 4037 var checkboxName = $checkbox.attr('name'); 4038 var checkboxAlt = $checkbox.attr('alt'); 4039 if (checkboxName && checkboxName.indexOf('input[' + fieldName + ']') === 0 && checkboxAlt == trimmedVal) { 4040 $checkbox.prop('checked', true); 4041 } 4042 }); 4043 }); 4044 } 4045 }); 4046 $('.register-attendee-questions select').each(function () { 4047 var val = $(this).val(); 4048 if (val) { 4049 var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', ''); 4050 if (parentId) { mobileEvaluateConditional(parentId, val, 'dropdown'); } 4051 } 4052 }); 4053 $('.register-attendee-questions input[type="radio"]:checked').each(function () { 4054 var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', ''); 4055 if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'radio'); } 4056 }); 4057 var seen = {}; 4058 $('.register-attendee-questions input[type="checkbox"]').each(function () { 4059 var $table = $(this).closest('table[id^="q"]'); 4060 var parentId = ($table.attr('id') || '').replace('q', ''); 4061 if (parentId && !seen[parentId]) { 4062 seen[parentId] = true; 4063 var vals = []; 4064 $table.find('input[type="checkbox"]:checked').each(function () { 4065 vals.push(String($(this).val())); 4066 }); 4067 if (vals.length) { mobileEvaluateConditional(parentId, vals, 'checkbox'); } 4068 } 4069 }); 4070 }; 4071 4072 self.register = function() { 4073 var values = {}, 4074 hasEmptyFields = false;
4075 4076 // Collect all input values from the rendered questions HTML 4077 $.each($('.register-attendee-questions input, .register-attendee-questions textarea, .register-attendee-questions select'), function(k, v) { 4078 var name = $(v).attr('name'), 4079 value = $(v).val(), 4080 fieldType = $(v).attr('type') || $(v).prop('tagName').toLowerCase(); 4081 4082 // Skip hidden inputs and inputs without names 4083 if ($(v).attr('type') === 'hidden' || !name) { 4084 return; 4085 } 4086 4087 // ET-83452: Skip any input that lives inside a hidden conditional child table. 4088 // These questions are not visible to the attendee and must not be submitted, 4089 // otherwise stale or invalid values may overwrite existing attendee data. 4090 var $conditionalTable = $(v).closest('table[data-conditional-parent]'); 4091 if ($conditionalTable.length > 0 && $conditionalTable.is(':hidden')) { 4092 return; 4093 } 4094 4095 // Handle radio buttons - only capture the checked radio's value. 4096 // $(v).val() returns the value attribute regardless of :checked state, 4097 // so without this guard the last radio in the DOM always overwrites the result. 4098 if ($(v).attr('type') === 'radio') { 4099 if ($(v).is(':checked')) { 4100 values[name] = value; 4101 } 4102 // Validate required radio groups: check if at least one in the group is selected. 4103 // PHP places aria-required on the wrapper <div role="radiogroup"> / <td>, not on 4104 // individual <input type="radio"> elements, so we look up the container. 4105 if (!values[name]) { 4106 var $radioGroup = $(v).closest('div[role="radiogroup"], td[aria-required]'); 4107 var isRadioRequired = $radioGroup.attr('aria-required') === 'true'; 4108 if (isRadioRequired) { 4109 var anyChecked = $('.register-attendee-questions input[type="radio"][name="' + name + '"]:checked').length > 0; 4110 if (!anyChecked) { 4111 hasEmptyFields = true; 4112 } 4113 } 4114 } 4115 return; 4116 } 4117 4118 // Handle checkboxes specially (multiple checkboxes with same name) 4119 if ($(v).attr('type') === 'checkbox') { 4120 // Parse the name format: input[fieldname][key] 4121 var match = name.match(/input\[([^\]]+)\](?:\[([^\]]+)\])?/); 4122 if (match) { 4123 var fieldName = match[1]; 4124 var fullFieldName = 'input[' + fieldName + ']'; // Keep the input[] prefix 4125 if (!values[fullFieldName]) { 4126 values[fullFieldName] = []; 4127 } 4128 if ($(v).is(':checked')) { 4129 values[fullFieldName].push($(v).val()); 4130 } 4131 } 4132 // Validate required multi-checkbox groups: PHP places aria-required on the 4133 // group <td role="group">, so walk up to that container and verify at least 4134 // one checkbox in the group is checked. 4135 var $checkboxGroup = $(v).closest('td[role="group"][aria-required]'); 4136 if ($checkboxGroup.length > 0 && $checkboxGroup.attr('aria-required') === 'true') { 4137 if ($checkboxGroup.find('input[type="checkbox"]:checked').length === 0) { 4138 hasEmptyFields = true; 4139 } 4140 } 4141 return; 4142 } else { 4143 values[name] = value; 4144 } 4145 4146 // Validate required text inputs and textareas 4147 if ((fieldType === 'text' || fieldType === 'textarea') && (!value || value.trim().length === 0)) { 4148 if ($(v).attr('aria-required') === 'true' || $(v).prop('required')) { 4149 hasEmptyFields = true; 4150 } 4151 } 4152 4153 // Validate required <select> elements (dropdown questions, inputtype=16) when native 4154 // input types are enabled. Selects always have a value in jQuery (.val()), so we check 4155 // whether the empty placeholder option (value="") is still selected. 4156 if (fieldType === 'select' && (!value || value === '')) { 4157 // Only flag as empty if the field is marked required (aria-required or required attr) 4158 if ($(v).attr('aria-required') === 'true' || $(v).prop('required')) { 4159 hasEmptyFields = true; 4160 } 4161 } 4162 }); 4163 4164 if (hasEmptyFields) { 4165 self.pageModel.showNotificationMessage('Please fill all fields'); 4166 } else { 4167 self.pageModel.startApiCall( 4168 '/mobileadmin/attendeeAPI/registerAttendee', 4169 { 4170 eventId : self.eventData.eventId, 4171 preLoadId : self.preLoadId, 4172 values : values, 4173 notes: self.notes(), 4174 locationId: (checkinLocation.length > 0 ? checkinLocation.val() : 0) 4175 }, 4176 function(response) { 4177 var name = []; 4178 if (values['input[fname]'] != undefined) { 4179 name.push(values['input[fname]']); 4180 } 4181 if (values['input[lname]'] != undefined) { 4182 name.push(values['input[lname]']); 4183 } 4184 if (name.length != 0) { 4185 name = name.join(' '); 4186 } else { 4187 name = 'attendee'; 4188 } 4189 4190 self.pageModel.showNotificationMessage('Registration has been created for '+ name); 4191 self.pageModel.onClearFiltersClick(); 4192 self.cancel(); 4193 } 4194 ); 4195 } 4196 }; 4197 4198 self.cancel = function() { 4199 var attendeesViewModel = new AttendeesViewModel(); 4200 attendeesViewModel.eventData = self.eventData; 4201 self.pageModel.render(attendeesViewModel, $('#attendees-page-template')); 4202 attendeesViewModel.loadAttendeesList(); 4203 }; 4204}; 4205 4206function toggleFilterDropdown() { 4207 let dropdown = document.getElementById("filter-menu"); 4208 dropdown.style.display = (dropdown.style.display === "block") ? "none" : "block"; 4209} 4210 4211// Close dropdown when clicking outside 4212document.addEventListener("click", function(event) { 4213 let dropdown = document.getElementById("filter-menu"); 4214 let button = document.getElementById("filter-options"); 4215 4216 if (dropdown && button && !dropdown.contains(event.target) && !button.contains(event.target)) { 4217 dropdown.style.display = "none"; 4218 } 4219}); 4220 4221function toggleCategory() {
4222 let categorySection = document.getElementById("category-section"); 4223 let toggleIcon = document.getElementById("category-toggle"); 4224 if (categorySection.style.display === "none" || categorySection.style.display === "") { 4225 categorySection.style.display = "block"; 4226 toggleIcon.textContent = "-"; 4227 } else { 4228 categorySection.style.display = "none"; 4229 toggleIcon.textContent = "+"; 4230 } 4231} 4232 4233 4234function setupCategoryCheckboxLogic() { 4235 const checkboxes = document.querySelectorAll('.category-checkbox'); 4236 4237 checkboxes.forEach(function (checkbox) { 4238 checkbox.addEventListener('change', function () { 4239 4240 const categoryId = this.dataset.categoryid; 4241 const parentId = this.dataset.parentid; 4242 4243 if (this.checked) { 4244 // If it's a parent, check and disable all children 4245 checkAndDisableChildren(categoryId, true); 4246 4247 // If it's a child, check if all siblings are checked, enable parent 4248 if (parentId && parentId !== "0") { 4249 const siblingCheckboxes = document.querySelectorAll('.category-checkbox[data-parentid="' + parentId + '"]'); 4250 const allSiblingsChecked = Array.from(siblingCheckboxes).every(cb => cb.checked); 4251 const parentCheckbox = document.querySelector('.category-checkbox[data-categoryid="' + parentId + '"]'); 4252 4253 if (allSiblingsChecked && parentCheckbox) { 4254 parentCheckbox.disabled = false; 4255 parentCheckbox.checked = true; 4256 } else if (parentCheckbox) { 4257 parentCheckbox.disabled = true; 4258 parentCheckbox.checked = false; 4259 } 4260 } 4261 4262 } else { 4263 // If it's a parent, uncheck and enable all children 4264 checkAndDisableChildren(categoryId, false); 4265 4266 // If it's a child, and no siblings are checked, enable the parent 4267 if (parentId && parentId !== "0") { 4268 const siblingCheckboxes = document.querySelectorAll('.category-checkbox[data-parentid="' + parentId + '"]'); 4269 const anyChecked = Array.from(siblingCheckboxes).some(cb => cb.checked); 4270 const allChecked = Array.from(siblingCheckboxes).every(cb => cb.checked); 4271 const parentCheckbox = document.querySelector('.category-checkbox[data-categoryid="' + parentId + '"]'); 4272 4273 if (!anyChecked && parentCheckbox) { 4274 parentCheckbox.disabled = false; 4275 parentCheckbox.checked = false; 4276 }else{ 4277 if(parentCheckbox){ 4278 parentCheckbox.disabled = true; 4279 parentCheckbox.checked = false; 4280 } 4281 } 4282 4283 } 4284 } 4285updateSelectedCategoryCount(); 4286 }); 4287}); 4288updateSelectedCategoryCount(); 4289 function checkAndDisableChildren(parentId, state) { 4290 const children = document.querySelectorAll('.category-checkbox[data-parentid="' + parentId + '"]'); 4291 children.forEach(function (child) { 4292 child.checked = state; 4293 child.disabled = state; 4294 }); 4295 } 4296 4297} 4298 4299function updateSelectedCategoryCount() { 4300 const selectedCount = document.querySelectorAll('.category .category-checkbox:checked').length; 4301 const countSpan = document.getElementById('selected-count'); 4302 if(!countSpan) return; 4303 if(selectedCount > 0){ 4304 document.getElementById('selected-count').innerText = '('+selectedCount+')'; 4305 countSpan.style.display = 'inline-block'; 4306 }else{ 4307 countSpan.style.display = 'none'; 4308 } 4309 4310} 4311 4312 </script>
4312 4313 4314 <!-- include any page-specific scripts. ex: views/pages/menu_js.tpl --> 4315 </body> 4316</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.