v1.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace zin;
  3. class roadMap extends wg
  4. {
  5. /**
  6. * @var mixed[]
  7. */
  8. protected static $defineProps = array(
  9. 'releases: array'
  10. );
  11. public static function getPageJS()
  12. {
  13. return file_get_contents(__DIR__ . DS . 'js' . DS . 'v1.js');
  14. }
  15. public static function getPageCSS()
  16. {
  17. return file_get_contents(__DIR__ . DS . 'css' . DS . 'v1.css');
  18. }
  19. /**
  20. * @param string|int $title
  21. * @param string $subtitle
  22. */
  23. private function releaseHead($title, $subtitle)
  24. {
  25. return div
  26. (
  27. setClass('release-head shrink-0 py-1 px-2 text-center'),
  28. div
  29. (
  30. setClass('title text-primary text-xl'),
  31. $title
  32. ),
  33. div
  34. (
  35. setClass('subtitle text-gray text-base'),
  36. $subtitle
  37. )
  38. );
  39. }
  40. /**
  41. * @param mixed[] $releases
  42. */
  43. private function releaseLine($releases)
  44. {
  45. $releaseVersions = array();
  46. foreach($releases as $release)
  47. {
  48. $releaseVersions[] = $this->releaseVersion($release);
  49. }
  50. return ul
  51. (
  52. setClass('release-line flex py-3'),
  53. $releaseVersions
  54. );
  55. }
  56. /**
  57. * @param mixed[] $release
  58. */
  59. private function releaseVersion($release)
  60. {
  61. return li
  62. (
  63. setClass('flex grow'),
  64. a
  65. (
  66. setClass('inline-block w-full relative'),
  67. set::href($release['href']),
  68. $release['marker'] ? icon('flag', setClass('absolute text-primary')) : null,
  69. div
  70. (
  71. div(setClass('title ellipsis text-lg text-dark'), set::title($release['version']), $release['version']),
  72. div(setClass('date ellipsis text-sm text-gray'), $release['date'])
  73. )
  74. )
  75. );
  76. }
  77. /**
  78. * @param string|int $year
  79. * @param mixed[] $yearReleases
  80. */
  81. private function releasePath($year, $yearReleases)
  82. {
  83. $releaseLines = array();
  84. $count = 0;
  85. foreach($yearReleases as $releases)
  86. {
  87. $count += count($releases);
  88. $releaseLines[] = $this->releaseLine($releases);
  89. }
  90. global $lang;
  91. if(!isset($lang->execution->iterationInfo))
  92. {
  93. global $app;
  94. $app->loadLang('execution');
  95. }
  96. $iterationInfo = $lang->execution->iterationInfo;
  97. return div
  98. (
  99. setClass('release-path flex gap-6 items-end'),
  100. $this->releaseHead($year, sprintf($iterationInfo, (string)$count)),
  101. div
  102. (
  103. setClass('grow'),
  104. $releaseLines
  105. )
  106. );
  107. }
  108. protected function build()
  109. {
  110. $releases = $this->prop('releases');
  111. $releasePaths = array();
  112. foreach($releases as $year => $yearReleases)
  113. {
  114. $releasePaths[] = $this->releasePath($year, $yearReleases);
  115. }
  116. return div
  117. (
  118. setClass('release-paths bg-white relative'),
  119. $releasePaths
  120. );
  121. }
  122. }