Changeset 5cbc4a0 in OpenWorkouts-current
- Timestamp:
- Jan 18, 2019, 5:46:48 PM (5 years ago)
- Branches:
- current, feature/docs, master
- Children:
- 2d2eb0d
- Parents:
- 55e98e4
- Location:
- ow
- Files:
-
- 11 added
- 2 edited
- 11 moved
Legend:
- Unmodified
- Added
- Removed
-
ow/static/css/main.css
r55e98e4 r5cbc4a0 1 /* google fonts */ 2 @import "http://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,700,700italic,800"; 3 4 /* normalize */ 5 @import "vendors/normalize.css"; 6 7 /* Variables */ 8 @import "variables.css"; 9 10 /* UI */ 11 @import "ui/form.css"; 12 @import "ui/buttons.css"; 13 14 /* Common styles */ 15 @import "common.css"; 16 17 /* Modules */ 18 @import "modules/header.css"; 19 20 /* Pages */ 21 @import "pages/login.css"; 1 @font-face { 2 font-family: 'Open Sans'; 3 font-style: italic; 4 font-weight: 300; 5 src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(http://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hrIqY.ttf) format('truetype'); 6 } 7 @font-face { 8 font-family: 'Open Sans'; 9 font-style: italic; 10 font-weight: 400; 11 src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0Zdcg.ttf) format('truetype'); 12 } 13 @font-face { 14 font-family: 'Open Sans'; 15 font-style: italic; 16 font-weight: 700; 17 src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhrIqY.ttf) format('truetype'); 18 } 19 @font-face { 20 font-family: 'Open Sans'; 21 font-style: normal; 22 font-weight: 300; 23 src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUuhs.ttf) format('truetype'); 24 } 25 @font-face { 26 font-family: 'Open Sans'; 27 font-style: normal; 28 font-weight: 400; 29 src: local('Open Sans Regular'), local('OpenSans-Regular'), url(http://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVZ0e.ttf) format('truetype'); 30 } 31 @font-face { 32 font-family: 'Open Sans'; 33 font-style: normal; 34 font-weight: 700; 35 src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOUuhs.ttf) format('truetype'); 36 } 37 @font-face { 38 font-family: 'Open Sans'; 39 font-style: normal; 40 font-weight: 800; 41 src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(http://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOUuhs.ttf) format('truetype'); 42 } 43 /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 44 /* Document 45 ========================================================================== */ 46 /** 47 * 1. Correct the line height in all browsers. 48 * 2. Prevent adjustments of font size after orientation changes in iOS. 49 */ 50 html { 51 line-height: 1.15; 52 /* 1 */ 53 -webkit-text-size-adjust: 100%; 54 /* 2 */ 55 } 56 /* Sections 57 ========================================================================== */ 58 /** 59 * Remove the margin in all browsers. 60 */ 61 body { 62 margin: 0; 63 } 64 /** 65 * Render the `main` element consistently in IE. 66 */ 67 main { 68 display: block; 69 } 70 /** 71 * Correct the font size and margin on `h1` elements within `section` and 72 * `article` contexts in Chrome, Firefox, and Safari. 73 */ 74 h1 { 75 font-size: 2em; 76 margin: 0.67em 0; 77 } 78 /* Grouping content 79 ========================================================================== */ 80 /** 81 * 1. Add the correct box sizing in Firefox. 82 * 2. Show the overflow in Edge and IE. 83 */ 84 hr { 85 box-sizing: content-box; 86 /* 1 */ 87 height: 0; 88 /* 1 */ 89 overflow: visible; 90 /* 2 */ 91 } 92 /** 93 * 1. Correct the inheritance and scaling of font size in all browsers. 94 * 2. Correct the odd `em` font sizing in all browsers. 95 */ 96 pre { 97 font-family: monospace, monospace; 98 /* 1 */ 99 font-size: 1em; 100 /* 2 */ 101 } 102 /* Text-level semantics 103 ========================================================================== */ 104 /** 105 * Remove the gray background on active links in IE 10. 106 */ 107 a { 108 background-color: transparent; 109 } 110 /** 111 * 1. Remove the bottom border in Chrome 57- 112 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 113 */ 114 abbr[title] { 115 border-bottom: none; 116 /* 1 */ 117 text-decoration: underline; 118 /* 2 */ 119 text-decoration: underline dotted; 120 /* 2 */ 121 } 122 /** 123 * Add the correct font weight in Chrome, Edge, and Safari. 124 */ 125 b, 126 strong { 127 font-weight: bolder; 128 } 129 /** 130 * 1. Correct the inheritance and scaling of font size in all browsers. 131 * 2. Correct the odd `em` font sizing in all browsers. 132 */ 133 code, 134 kbd, 135 samp { 136 font-family: monospace, monospace; 137 /* 1 */ 138 font-size: 1em; 139 /* 2 */ 140 } 141 /** 142 * Add the correct font size in all browsers. 143 */ 144 small { 145 font-size: 80%; 146 } 147 /** 148 * Prevent `sub` and `sup` elements from affecting the line height in 149 * all browsers. 150 */ 151 sub, 152 sup { 153 font-size: 75%; 154 line-height: 0; 155 position: relative; 156 vertical-align: baseline; 157 } 158 sub { 159 bottom: -0.25em; 160 } 161 sup { 162 top: -0.5em; 163 } 164 /* Embedded content 165 ========================================================================== */ 166 /** 167 * Remove the border on images inside links in IE 10. 168 */ 169 img { 170 border-style: none; 171 } 172 /* Forms 173 ========================================================================== */ 174 /** 175 * 1. Change the font styles in all browsers. 176 * 2. Remove the margin in Firefox and Safari. 177 */ 178 button, 179 input, 180 optgroup, 181 select, 182 textarea { 183 font-family: inherit; 184 /* 1 */ 185 font-size: 100%; 186 /* 1 */ 187 line-height: 1.15; 188 /* 1 */ 189 margin: 0; 190 /* 2 */ 191 } 192 /** 193 * Show the overflow in IE. 194 * 1. Show the overflow in Edge. 195 */ 196 button, 197 input { 198 /* 1 */ 199 overflow: visible; 200 } 201 /** 202 * Remove the inheritance of text transform in Edge, Firefox, and IE. 203 * 1. Remove the inheritance of text transform in Firefox. 204 */ 205 button, 206 select { 207 /* 1 */ 208 text-transform: none; 209 } 210 /** 211 * Correct the inability to style clickable types in iOS and Safari. 212 */ 213 button, 214 [type="button"], 215 [type="reset"], 216 [type="submit"] { 217 -webkit-appearance: button; 218 } 219 /** 220 * Remove the inner border and padding in Firefox. 221 */ 222 button::-moz-focus-inner, 223 [type="button"]::-moz-focus-inner, 224 [type="reset"]::-moz-focus-inner, 225 [type="submit"]::-moz-focus-inner { 226 border-style: none; 227 padding: 0; 228 } 229 /** 230 * Restore the focus styles unset by the previous rule. 231 */ 232 button:-moz-focusring, 233 [type="button"]:-moz-focusring, 234 [type="reset"]:-moz-focusring, 235 [type="submit"]:-moz-focusring { 236 outline: 1px dotted ButtonText; 237 } 238 /** 239 * Correct the padding in Firefox. 240 */ 241 fieldset { 242 padding: 0.35em 0.75em 0.625em; 243 } 244 /** 245 * 1. Correct the text wrapping in Edge and IE. 246 * 2. Correct the color inheritance from `fieldset` elements in IE. 247 * 3. Remove the padding so developers are not caught out when they zero out 248 * `fieldset` elements in all browsers. 249 */ 250 legend { 251 box-sizing: border-box; 252 /* 1 */ 253 color: inherit; 254 /* 2 */ 255 display: table; 256 /* 1 */ 257 max-width: 100%; 258 /* 1 */ 259 padding: 0; 260 /* 3 */ 261 white-space: normal; 262 /* 1 */ 263 } 264 /** 265 * Add the correct vertical alignment in Chrome, Firefox, and Opera. 266 */ 267 progress { 268 vertical-align: baseline; 269 } 270 /** 271 * Remove the default vertical scrollbar in IE 10+. 272 */ 273 textarea { 274 overflow: auto; 275 } 276 /** 277 * 1. Add the correct box sizing in IE 10. 278 * 2. Remove the padding in IE 10. 279 */ 280 [type="checkbox"], 281 [type="radio"] { 282 box-sizing: border-box; 283 /* 1 */ 284 padding: 0; 285 /* 2 */ 286 } 287 /** 288 * Correct the cursor style of increment and decrement buttons in Chrome. 289 */ 290 [type="number"]::-webkit-inner-spin-button, 291 [type="number"]::-webkit-outer-spin-button { 292 height: auto; 293 } 294 /** 295 * 1. Correct the odd appearance in Chrome and Safari. 296 * 2. Correct the outline style in Safari. 297 */ 298 [type="search"] { 299 -webkit-appearance: textfield; 300 /* 1 */ 301 outline-offset: -2px; 302 /* 2 */ 303 } 304 /** 305 * Remove the inner padding in Chrome and Safari on macOS. 306 */ 307 [type="search"]::-webkit-search-decoration { 308 -webkit-appearance: none; 309 } 310 /** 311 * 1. Correct the inability to style clickable types in iOS and Safari. 312 * 2. Change font properties to `inherit` in Safari. 313 */ 314 ::-webkit-file-upload-button { 315 -webkit-appearance: button; 316 /* 1 */ 317 font: inherit; 318 /* 2 */ 319 } 320 /* Interactive 321 ========================================================================== */ 322 /* 323 * Add the correct display in Edge, IE 10+, and Firefox. 324 */ 325 details { 326 display: block; 327 } 328 /* 329 * Add the correct display in all browsers. 330 */ 331 summary { 332 display: list-item; 333 } 334 /* Misc 335 ========================================================================== */ 336 /** 337 * Add the correct display in IE 10+. 338 */ 339 template { 340 display: none; 341 } 342 /** 343 * Add the correct display in IE 10. 344 */ 345 [hidden] { 346 display: none; 347 } 348 .hidden, 349 .hide { 350 display: none; 351 } 352 body { 353 font-family: 'Open Sans', sans-serif; 354 } 355 html { 356 box-sizing: border-box; 357 } 358 *, 359 *:before, 360 *:after { 361 box-sizing: inherit; 362 } 363 /* Generic default forms */ 364 form { 365 width: 100%; 366 } 367 legend { 368 display: none; 369 } 370 fieldset { 371 border: none; 372 padding: 0; 373 } 374 fieldset > div { 375 margin-bottom: 1.5em; 376 } 377 label { 378 display: block; 379 font-size: 13px; 380 margin-bottom: 0.25em; 381 } 382 input { 383 width: 100%; 384 padding: 0.5em 0.75em; 385 border: 1px solid transparent; 386 border-radius: 2px; 387 } 388 /* Generic button */ 389 .button { 390 box-sizing: border-box; 391 display: inline-block; 392 text-align: center; 393 vertical-align: middle; 394 cursor: pointer; 395 border: 1px solid transparent; 396 text-decoration: none; 397 font-style: normal; 398 white-space: nowrap; 399 text-overflow: ellipsis; 400 padding: 0.3em 1em; 401 margin: 0; 402 position: relative; 403 overflow: hidden; 404 background: #e1e1e1; 405 color: #151515; 406 font-size: 1em; 407 line-height: 1.25; 408 max-width: 100%; 409 } 410 .login-content { 411 background-image: url("../media/img/back-01.jpg"); 412 background-size: cover; 413 display: flex; 414 justify-content: center; 415 align-items: center; 416 min-height: calc(100vh - 98px); 417 padding: 1em 0; 418 } 419 .login-content form { 420 max-width: 380px; 421 background-color: rgba(21, 21, 21, 0.6); 422 border-radius: 6px; 423 padding: 2em 1.5em; 424 } 425 .login-content form div { 426 margin-bottom: 1.5em; 427 } 428 .login-content label { 429 color: #e1e1e1; 430 } 431 .login-content a { 432 color: #e1e1e1; 433 font-size: 13px; 434 text-decoration: none; 435 margin-right: 0.75em; 436 } 437 .login-content a:hover { 438 color: white; 439 } 440 .login-content .button { 441 transition: all 500ms ease-in-out; 442 background-color: #EE4056; 443 color: white; 444 text-transform: uppercase; 445 } 446 .login-content .button:hover { 447 background-color: #e6152f; 448 } 449 .login-content .message { 450 padding: 0.5em; 451 margin: 0; 452 text-align: center; 453 font-size: 13px; 454 font-size: 0.8125rem; 455 } 456 .login-content .message.message-error { 457 color: white; 458 background-color: red; 459 } 460 /* 461 .login-remember { 462 color: @color-main-medium; 463 .font-size(14); 464 text-decoration: none; 465 font-weight: 300; 466 &:hover{ 467 color: @color-main-light; 468 } 469 } 470 <a class="login-remember" href="#">Forgot your password?</a> 471 */ 472 .header-content { 473 padding: 1em 1.5em; 474 } 475 .header-content a { 476 text-decoration: none; 477 } 478 .header-content .description { 479 margin: 0; 480 } 481 /* logo ----------------------------------------------------------------------*/ 482 .logo { 483 font-size: 24px; 484 font-size: 1.5rem; 485 line-height: 1em; 486 font-weight: 800; 487 text-transform: uppercase; 488 margin: 0; 489 display: inline-block; 490 } 491 .logo span { 492 transition: all 250ms ease-in-out; 493 } 494 .logo:hover span { 495 color: #EE4056; 496 } 497 .logo-open { 498 display: block; 499 color: #EE4056; 500 } 501 .logo-work, 502 .logo-outs { 503 color: #f8b5be; 504 } 505 /* menu navigation -----------------------------------------------------------*/ 506 .nav-site { 507 font-size: 13px; 508 font-size: 0.8125rem; 509 } 510 .nav-site ul { 511 list-style-type: none; 512 padding: 0; 513 margin: 0; 514 display: flex; 515 flex-direction: row; 516 justify-content: space-between; 517 } 518 .nav-site li { 519 border-left: 1px solid #e1e1e1; 520 flex-grow: 1; 521 text-align: center; 522 } 523 .nav-site a { 524 color: #959595; 525 padding: 1.25em; 526 display: block; 527 } 528 .nav-site a:hover { 529 color: #151515; 530 } 531 .nav-site .is-active a { 532 color: #151515; 533 } 534 /* Add workout button with submenu -------------------------------------------*/ 535 .add-workout { 536 position: relative; 537 /* submenu -------------------------------------------------------------- */ 538 } 539 .add-workout > a { 540 color: #EE4056; 541 } 542 .add-workout > a:before { 543 content: "+"; 544 font-weight: 800; 545 font-size: 32px; 546 font-size: 2rem; 547 line-height: 0; 548 position: relative; 549 top: 8px; 550 } 551 .add-workout > a span { 552 display: none; 553 } 554 .add-workout > a:hover { 555 background-color: #EE4056; 556 color: white; 557 } 558 .add-workout:hover:after { 559 content: ""; 560 position: absolute; 561 background-color: white; 562 bottom: -1px; 563 width: 100%; 564 height: 1px; 565 display: block; 566 z-index: 20; 567 } 568 .add-workout:hover ul { 569 display: inline-block; 570 } 571 .add-workout ul { 572 display: none; 573 flex-direction: column; 574 position: absolute; 575 background-color: rgba(255, 255, 255, 0.95); 576 right: -1px; 577 border: 1px solid #e1e1e1; 578 width: 153px; 579 } 580 .add-workout ul li { 581 border-left: transparent; 582 text-align: left; 583 } 584 .add-workout ul a:hover { 585 background-color: #fbfbfb; 586 } 587 /* description ---------------------------------------------------------------*/ 588 .description { 589 font-size: 14px; 590 font-size: 0.875rem; 591 font-weight: 300; 592 letter-spacing: 0.025em; 593 color: #959595; 594 } 595 /* ------------------------------ STATES ------------------------------------ */ 596 /* when user is login --------------------------------------------------------*/ 597 .is-login .header-content { 598 border-bottom: 1px solid #e1e1e1; 599 display: flex; 600 padding: 0em 1.5em; 601 justify-content: space-between; 602 align-items: center; 603 } 604 .is-login .description { 605 display: none; 606 } 607 .is-login .logo-open { 608 display: inline-block; 609 } 610 .workout-content { 611 padding: 2em 1em; 612 } 613 @media (min-width: 480px) { 614 .workout-content { 615 padding: 2em 6em; 616 } 617 } 618 @media (min-width: 800px) { 619 .workout-content { 620 display: flex; 621 justify-content: space-between; 622 } 623 } 624 /* list mode */ 625 .workout-list { 626 margin-right: 2em; 627 width: 100%; 628 /* provisional layout, replace this with grid layout system based on final content */ 629 } 630 .workout-list > h2 { 631 font-weight: 300; 632 margin: 0 0 1.5em; 633 } 634 /* Module resume on dashboard workouts */ 635 .workout-resume { 636 padding: 1.5em 0; 637 position: relative; 638 max-width: 700px; 639 } 640 @media (min-width: 800px) { 641 .workout-resume { 642 padding-left: 2em; 643 border-left: 1px solid #e1e1e1; 644 transition: all 250ms ease-in-out; 645 } 646 } 647 .workout-resume:hover { 648 border-color: #151515; 649 } 650 .workout-resume:hover .workout-title:before { 651 color: #151515; 652 } 653 .workout-resume ul { 654 padding: 0; 655 list-style-type: none; 656 font-size: 13px; 657 font-size: 0.8125rem; 658 } 659 .workout-resume ul a { 660 display: block; 661 text-decoration: none; 662 } 663 .bike:before { 664 display: block; 665 content: ""; 666 width: 30px; 667 height: 30px; 668 background-image: url('../media/img/bike.svg'); 669 background-size: 100%; 670 } 671 .workout-title { 672 font-size: 14px; 673 font-size: 0.875rem; 674 margin: 0 0 0em 0; 675 position: relative; 676 } 677 .workout-title:before { 678 transition: all 250ms ease-in-out; 679 content: "▶"; 680 position: absolute; 681 left: -3.25em; 682 top: 0.35em; 683 color: #e1e1e1; 684 font-size: 10px; 685 font-size: 0.625rem; 686 } 687 .workout-title a { 688 color: #151515; 689 text-decoration: none; 690 } 691 .workout-title a:hover { 692 color: #EE4056; 693 } 694 .workout-info { 695 display: flex; 696 align-items: center; 697 margin: 0.25em 0; 698 } 699 .workout-info li { 700 color: #959595; 701 } 702 .workout-info li:after { 703 content: "|"; 704 margin: 0 0.5em; 705 } 706 .workout-info li:last-child:after { 707 content: ""; 708 margin: 0; 709 } 710 .workout-intro { 711 font-size: 13px; 712 font-size: 0.8125rem; 713 color: #151515; 714 } 715 .workout-options { 716 display: inline-block; 717 border: 1px solid #e1e1e1; 718 margin-bottom: 0; 719 border-radius: 4px; 720 } 721 .workout-options li { 722 display: inline-block; 723 border-right: 1px solid #e1e1e1; 724 } 725 .workout-options li:last-child { 726 border-right: none; 727 } 728 .workout-options a { 729 color: #959595; 730 padding: 0.5em 0.75em; 731 } 732 .workout-options a:hover { 733 color: #151515; 734 } 735 .owo-del a:hover { 736 color: red; 737 } 738 .workout-aside { 739 width: 100%; 740 } 741 @media (min-width: 800px) { 742 .workout-aside { 743 max-width: 300px; 744 padding-left: 1.5em; 745 border-left: 1px solid #e1e1e1; 746 } 747 } 748 .aside-profile { 749 margin-bottom: 2em; 750 } 751 .aside-profile img { 752 width: 80px; 753 height: 80px; 754 object-fit: cover; 755 border-radius: 50%; 756 } 757 .aside-profile h2 { 758 font-weight: 400; 759 font-size: 18px; 760 font-size: 1.125rem; 761 margin: 0 0 0.5em 0; 762 } 763 .aside-profile ul { 764 list-style-type: none; 765 margin: 0; 766 padding: 0; 767 font-size: 13px; 768 font-size: 0.8125rem; 769 color: #555555; 770 } 771 .workout-activity-tree { 772 list-style-type: none; 773 padding: 0; 774 margin: 0; 775 transition: all 250ms ease-in-out; 776 font-size: 13px; 777 font-size: 0.8125rem; 778 } 779 .workout-activity-tree > li { 780 margin-bottom: 0.5em; 781 padding-bottom: 0.5em; 782 border-bottom: 1px solid #e1e1e1; 783 } 784 .workout-activity-tree a { 785 text-decoration: none; 786 display: block; 787 color: #EE4056; 788 } 789 .workout-activity-tree a:hover { 790 color: #151515; 791 } 792 .workout-activity-tree a.viewing-year { 793 color: #151515; 794 font-weight: 700; 795 margin-bottom: 0.5em; 796 } 797 .workout-activity-tree a.viewing-month { 798 background-color: #e1e1e1; 799 color: #151515; 800 font-weight: 700; 801 } 802 .workout-activity-tree-year { 803 list-style-type: none; 804 padding: 0; 805 margin: 0; 806 } 807 .workout-activity-tree-year > li { 808 display: block; 809 margin-bottom: 0.5em; 810 } 811 .workout-activity-tree-year a { 812 display: flex; 813 justify-content: space-between; 814 padding: 0.5em; 815 background-color: #fbfbfb; 816 color: #555555; 817 } 818 .workout-activity-tree-year a:hover { 819 background-color: #e1e1e1; 820 } -
ow/templates/dashboard.pt
r55e98e4 r5cbc4a0 25 25 <section class="workout-list"> 26 26 27 <h2 tal:content="context.fullname"></h2>28 29 27 <h3> 30 (<tal:n tal:content="len(workouts)"></tal:n>/<tal:n tal:content="context.num_workouts"></tal:n>) <tal:t i18n:translate="">workouts</tal:t>28 <tal:n tal:content="len(workouts)"></tal:n> <tal:t i18n:translate="">Activities</tal:t> 31 29 </h3> 32 30 … … 103 101 104 102 <aside class="workout-aside"> 103 <div class="aside-profile"> 104 <tal:c tal:condition="getattr(context, 'picture', None)"> 105 <img tal:attributes="src request.resource_path(context, 'picture')" 106 width="450" /> 107 </tal:c> 108 <h2 tal:content="context.fullname"></h2> 109 <ul> 110 <Li> 111 <tal:n tal:content="context.num_workouts"></tal:n> <tal:t i18n:translate="">workouts</tal:t> 112 </Li> 113 </ul> 114 </div> 105 115 <tal:activity_tree tal:condition="context.num_workouts > 0"> 106 116 <ul class="workout-activity-tree" tal:define="tree context.activity_dates_tree"> … … 115 125 <tal:months tal:repeat="month sorted(tree[year].keys())"> 116 126 <li tal:define="is_viewing_month is_viewing_year and month == viewing_month"> 117 <a href="" tal:content="month_name[month]"127 <a href="" 118 128 tal:attributes="href request.resource_url(context, query={'year': year, 'month': month}); 119 129 class 'viewing-month' if is_viewing_month else ''"> 130 <span tal:content="month_name[month]"></span> 131 <span tal:content="sum([tree[year][month][sport] for sport in tree[year][month]])"></span> 120 132 </a> 121 <ul class="workout-activity-tree-month">122 <tal:sports tal:repeat="sport sorted(tree[year][month].keys())">123 <li>124 <a href="#">125 <tal:sport tal:content="sport"></tal:sport> (<tal:workouts tal:content="tree[year][month][sport]"></tal:workouts>)126 </a>127 </li>128 </tal:sports>129 </ul>130 133 </li> 131 134 </tal:months>
Note: See TracChangeset
for help on using the changeset viewer.