1. JavaScript / Говнокод #25317

    +2

    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
    (function(_){
    _.mixin({makeCarouselWidget: function (container, el, width, height, tmpl) {
        var list_of_rows = _(container).groupBy(function(e, index){
            return Math.floor(index / (width * height));
        });                                             // transform collection to list by 'num_of_cols' chunks
        _(list_of_rows).each(function(row){
            var list_of_chunks = _(row).groupBy(function(e, index){
                return Math.floor(index/width);
            });
            var li = $('<li>').appendTo(el);
            _.each(list_of_chunks, function(chunk){
                var r = $('<div>').attr('class','row fooitem')
                    .attr('style', "margin-right:50px;").appendTo(li);
                _.each(chunk, function(item){
                    r.append(
                        tmpl.render(item)
                    );
                });
            })
        });                                             // each list_of_rows
    }});
    })(_);

    Я хочу быть кочегаром, кочегаром, кочегаром.
    Работать сутки-через-трое, через-трое, через-трое...

    Запостил: gueest8, 20 Января 2019

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

    • seo: мракоме
      Ответить
    • Ну а чо, зато модно: миксины, функциональщина, темлейты, замыкания… На смузи автор точно заработал!
      Ответить
      • И люди, которые такое пишут, они обычно смеются на перлом и над С++, и говорят что там сложно и непонятно. А в JavaScript всё хорошо
        Ответить
      • И совместимость не нарушена: никаких стрелок из ES6, всё будет работать и в старых интерпретаторах.
        Ответить
    • Перевёл на "PHP", проверь:
      <?php
      $x = function($_){
          $_->mixin([
              'makeCarouselWidget' => 
                  function ($container, $el, $width, $height, $tmpl) use($_){
                      $list_of_rows = $_($container)->groupBy(function($e, $index) use($width, $height){return floor($index / ($width * $height));}); 
                      // transform collection to list by 'num_of_cols' chunks
                      $_($list_of_rows)->each(function($row) use($_, $width, $tmpl, $el){
                          $list_of_chunks = $_($row)->groupBy(function($e, $index) use($width){return floor($index/$width);});
                          $li = jQuery('<li>')->appendTo($el);
                          $_->each($list_of_chunks, function($chunk) use($_, $li, $tmpl){
                              $r = jQuery('<div>')->attr('class','row fooitem')->attr('style', "margin-right:50px;")->appendTo($li);
                              $_->each($chunk, function($item) use($r, $tmpl){$r->append($tmpl->render($item));});
                          });
                      }); // each list_of_rows
                  }
          ]);
      };
      
      $x($_);
      Ответить
      • >jQuery('<li>')
        new jQuery('<li>')
        Ответить
        • Точно! А ещё можно перегрузить метод __invoke и вызвать $jQuery('<li>'):
          http://php.net/manual/ru/language.oop5.magic.php

          Но с new будет идиоматичнее, мы же должны работать со свежим экземпляром.
          Ответить
          • > свежим экземпляром
            new jQuery скачивает новую версию jQuery?
            Ответить
            • А old jQuery('<li>') скачивает старую версию. Очень полезно, если новая по какой-то причине не запустилась.
              Ответить
    • Тест.
      Ответить

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