1. Ruby / Говнокод #11643

    −160

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    <div class="comment-content">
      		<% if comment.body.include?('[/quote]') %>
      			<% @text = Array.new %>
      			<% summ = '' %>
      			<% @text = simple_format(comment.body).split(' ') %>
      			<% namecheck = false %>
      			<% contentcheck = false %>
      			<% quotestart = false %>
      			<% donothing = true %>
      			<% quotecount = 0 %>
      			<% count_quotes = 0 %>
      			<% @text.each do |t| %>
      				<% if t.include?('[/quote]') %>
      					<% count_quotes ||= 0 %>
      					<% count_quotes += 1 %>
      				<% end %>
      			<% end %>
      			<% @text.each do |t| %>
      				<% if t.include?('[/quote]') %>
      					<% contentcheck = false %>
      					<% namecheck = false %>
      					<% t = t.gsub('[/quote]', '</div></div>') %>
      				<% elsif t.include?('[quote=') %>
      					<% namecheck = true %>
      					<% donothing = false %>
      					<% t = t.gsub('[quote=', '') %>
      				<% elsif t.include?(']') %>
      					<% t = t.gsub(']', '') %>
      				<% end %>
      				<% if donothing == false %>
      					<% if contentcheck == true and namecheck == true and t != '' and t != '<p>' and t != '</p>' %>
      						<% t = '<div class=quotecontent>' + '<div class=quotestart>' + '<div class=quotename>' + 'Цитата - ' + t + '</div>' %>
      						<% contentcheck = true %>
      						<% namecheck = false %>
      					<% elsif contentcheck == true and t != '' and t != '<p>' and t != '</p>' %>
      						<% t = '<div class=quotecontent>' + t %>
      						<% contentcheck = false %>
      					<% elsif namecheck == true and t != '' and t != '<p>' and t != '</p>' %>
      						<% t = '<div class=quotestart>' + '<div class=quotename>' + 'Цитата - ' + t + '</div>' %>
      						<% namecheck = false %>
      						<% contentcheck = true %>
      					<% end %>
      				<% end %>
      				<% summ = summ + t + ' ' %>
      			<% end %>
      		<% else %>
      			<% summ = comment.body %>
      		<% end %>
        	<%=raw simple_format(summ) %>
        </div>

    Вьюха списка комментариев. Когда это попало к верстальщику - он был мягко говоря шокирован.

    Запостил: ruby-code, 24 Августа 2012

    Комментарии (21) RSS

    • показать все, что скрытоНе понимаю, зачем такой шаблонизатор вообще было придумывать, лучше бы на голом PHP вывод сделали и не заморачивались с этим "чудо языком".
      Ответить
      • где здесь PHP, @alex322?
        диагноз: PHP головного мозга
        Ответить
        • показать все, что скрытоя написал "лучше бы на PHP"
          Ответить
          • с какого перепугу?
            руби - это искусство.
            Ответить
            • Извиняюсь, не обратил внимания что раздел ruby.

              Подумал очередной самопальный шаблонизатор для РНР. Просто с руби никогда не работал и синтаксиса его не знаю.
              Ответить
              • > не обратил внимания что раздел ruby
                Даже после вопроса "Где здесь %language%, %username%?"
                Ответить
      • Нормальный в рубирельсах шаблонизатор. Вполне вменяемый.

        Просто один чудак на букву М втащил половину бизнес-логики во вьюху (хотя стоило бы запилить хелперы), поналепил кучу лишних открывающих и закрывающих тегов (видимо редактор бажный и не может подсветить многострочные), и умудрился куски HTML описать как строковые литералы (привет похапешникам).

        Если все это устранить - получится приличная вьюха, удобная для доработки верстальщиком.
        Ответить
        • > один чудак на букву М
          На букву "М" у меня подобралась отличная коллекция. Морган, отравитель; Меридью, оставивший о себе жуткую память в виде коллекции скальпов; Мортимер, кокаинист и убийца...
          Ответить
        • Да нет, ERB и правда говно, но проблема конечно в высирании логики в шаблон. В хороших шаблонизаторах сделать это сложнее (попробуй сделать это в Zope или Angular), но и там эта проблема может случиться.

          Долбоёбы срут бизнес логикой в убогих тагах посреди HTMLя на всем пространстве веб-параши от Jinja до Blazor
          Ответить
    • Самые годные темплейты с точки зрения дизайнера а Lift. Вот, к примеру, реальный темплейт
      http://tinyurl.com/9bu8oda
      Ответить
      • Эм, это же чистый HTML. А как в него набивать значения?
        Ответить
        • Я ждал этого вопроса. А вот так (scala-код осуществляющий привязку значений по css-селекторам):
          private def defaultBindings(comment: Comment): CssSel = {
              ".comment-text *" #> bindCommentContent(comment) &
                ".author" #> comment.author.map(_.nickName.get).openOr("Guest") &
                ".date" #> TimeSpanFormatter(comment.createdAt) &
                ".comment-rating *" #> RateBinder(comment)(ratingTemplate) &
                ".avatar [src]" #> Avatar(comment.author, comment.ipAddress) &
                ".author-link [href]" #> comment.author.map(_.link).openOr("#") &
                ".comment-link [href]" #> comment.link &
                ".parent-link [href]" #> comment.responseTo.map(_.link).openOr("#") &
                bindDelete(comment) &
                ".unseen [class]" #> unseen(comment) &
                ".replies [id]" #> comment.repliesAnchor &
                ".comment [id]" #> comment.anchor
            }

          > Эм, это же чистый HTML
          В этом как раз весь профит для дизайнера ;)
          Ответить
          • блоки без контента могут вести себя иначе чем с контентом.
            Ответить
            • (if (!models.isEmpty) ".models *" #> bindAllTheItems(models)
              else ".models *" #> <div class="sorry">Nothing here today :[</div>)
              Ответить
              • Прикольно, но реализация самого биндинга неприятна (субъективно).
                Ответить
          • CSS-подобное развешивание значений. Интересная идея.
            Ответить
      • > Самые годные темплейты с точки зрения дизайнера а Lift
        поглядел. Все же отсутствие плейсхолдеров запутывает, и, например, в визивиге не видно что где.
        Ответить
        • >Все же отсутствие плейсхолдеров запутывает, и, например, в визивиге не видно что где.

          Никто не запрещает их понатыкать.
          Ответить
    • %>
      Косит под С++, диграфы?
      Ответить
    • Хелпер, не, не слышал
      Ответить

    Добавить комментарий