Ng-table: рдЧреНрд░рдВрдЯ рдмрд┐рд▓реНрдб рдХреЗ рдмрд╛рдж рдЫрдБрдЯрд╛рдИ рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдорд╛рд░реНрдЪ 2014  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: esvit/ng-table

'рдЧреНрд░рдВрдЯ рдмрд┐рд▓реНрдб' рдХреЗ рдмрд╛рдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕-рдорд┐рдирд┐рдлрд╛рдИ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕реЗ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдХрд┐рд╕реА рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ рдХрд┐ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдирд┐рд░реНрджреЗрд╢ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ

controller: ['$scope', '$filter', 'ScoresAPI', 'ngTableParams', function($scope, $filter, ScoresAPI, ngTableParams)
{
    ScoresAPI.getLeagueStandings($scope.leagueId)
        .success(function(data)
        {
            $scope.tableParams = new ngTableParams({
                page: 1,
                count: data.length,
                sorting: false
            }, {
                total: data.length,
                counts: [],
                getData: function($defer, params)
                {
                    var orderedData = params.sorting() ? $filter('orderBy')(data, params.orderBy()) : data;
                    $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                }
            });
        });
}]

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ jsminify рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди htmlmin рд▓рдХреНрд╖реНрдп рдерд╛ред рдореИрдВрдиреЗ collapseBooleanAttributes рдХреЛ рдЧрд▓рдд рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред рдпрд╣рд╛рдБ рд▓рдХреНрд╖реНрдп рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

htmlmin: {
      dist: {
        options: {
          collapseWhitespace: true,
          collapseBooleanAttributes: false,
          removeCommentsFromCDATA: true,
          removeOptionalTags: true
        },
        files: [{
          expand: true,
          cwd: '<%= yeoman.dist %>',
          src: ['*.html', 'views/{,*/}*.html', 'app_components/{,**/}*.html'],
          dest: '<%= yeoman.dist %>'
        }]
      }
    }

рд╕рднреА 29 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ jsminify рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди htmlmin рд▓рдХреНрд╖реНрдп рдерд╛ред рдореИрдВрдиреЗ collapseBooleanAttributes рдХреЛ рдЧрд▓рдд рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред рдпрд╣рд╛рдБ рд▓рдХреНрд╖реНрдп рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

htmlmin: {
      dist: {
        options: {
          collapseWhitespace: true,
          collapseBooleanAttributes: false,
          removeCommentsFromCDATA: true,
          removeOptionalTags: true
        },
        files: [{
          expand: true,
          cwd: '<%= yeoman.dist %>',
          src: ['*.html', 'views/{,*/}*.html', 'app_components/{,**/}*.html'],
          dest: '<%= yeoman.dist %>'
        }]
      }
    }

рдмрдврд╝рд┐рдпрд╛, рдЗрд╕рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рднреА рд╣рд▓ рд╣реЛ рдЧрдИред рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рдЖрдЬ рдЗрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред Gruntfile.js рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рдХреА рд╕рдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдирдЬреА-рдЯреЗрдмрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рдкрд░реЗ рд╣реИред

рдлрд┐рдХреНрд╕ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реАрдбрдореА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдлрд┐рдХреНрд╕ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдмреЛрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:
src: ['_.html', 'views/{,_/}_.html', 'bower_components/{,__/}_.html'],

рдпрд╣ рдореЗрд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж html рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рд╣реИред

$ls -la bower_components/**/*.html
-rw-rw-r-- 1 andrei andrei 1585 iun  7  2013 bower_components/es5-shim/tests/index.html
-rw-rw-r-- 1 andrei andrei 1546 iun  7  2013 bower_components/es5-shim/tests/index.min.html

рдпрд╣ рдлрд┐рдХреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореВрд▓ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ AngularJS рд╕рдВрд╕реНрдХрд░рдг 1.2.15 рд╣реИ

рд╢реБрдХреНрд░рд┐рдпрд╛!ред

рд╣рдордо... рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ $templateCache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд "*.html" рдкреИрдЯрд░реНрди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ

    $templateCache.put('ng-table/header.html', '<tr> <th ng-repeat="column in $columns" ng-class="{ \'sortable\': parse(column.sortable), \'sort-asc\': params.sorting()[parse(column.sortable)]==\'asc\', \'sort-desc\': params.sorting()[parse(column.sortable)]==\'desc\' }" ng-click="sortBy(column, $event)" ng-show="column.show(this)" ng-init="template=column.headerTemplateURL(this)" class="header {{column.class}}"> <div ng-if="!template" ng-show="!template" ng-bind="parse(column.title)"></div> <div ng-if="template" ng-show="template"><div ng-include="template"></div></div> </th> </tr> <tr ng-show="show_filter" class="ng-table-filters"> <th ng-repeat="column in $columns" ng-show="column.show(this)" class="filter"> <div ng-repeat="(name, filter) in column.filter"> <div ng-if="column.filterTemplateURL" ng-show="column.filterTemplateURL"> <div ng-include="column.filterTemplateURL"></div> </div> <div ng-if="!column.filterTemplateURL" ng-show="!column.filterTemplateURL"> <div ng-include="\'ng-table/filters/\' + filter + \'.html\'"></div> </div> </div> </th> </tr>'),

рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдорд╕рд▓рд╛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ред рдореИрдВрдиреЗ 'рд╕реЙрд░реНрдЯреЗрдмрд▓ =" 'рдирд╛рдо'"" рдХреЛ 'рдбреЗрдЯрд╛-рд╕реЙрд░реНрдЯреЗрдмрд▓ =" 'рдирд╛рдо'"" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:
http://bit.ly/1BgfqTu

@faisalferoz рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред рдПрдЪрдЯреАрдПрдордПрд▓рдорд┐рди рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП, рдкрддрди рдмреВрд▓рд┐рдпрди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЛ рдЧрд▓рдд рдореЗрдВ рдмрджрд▓рдирд╛ред

рдлрд┐рд░ рд╕реЗ @esvit рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реАрдбрдореА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдорд╛рдирдХ рдФрд░ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рд╕реЗ рдЯреВрдЯрддреА рд╣реИ

@andreicristianpetcu рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛ (рдЯреАрдо рдЙрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реА рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЕрднреА рднреА рдХрд╣реАрдВ рдФрд░ gulp-htmlmin рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХреЗрдВ)ред

рдЖрдк рдореЗрд░реЗ рдирд╛рдпрдХ рд╣реИрдВ, рдЕрдЧрд░ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реЛрддрд╛ рддреЛ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╢реЗрд╖ рд╢рд╛рдо рдЗрд╕реА рдкрд░ рдмрд┐рддрд╛рддрд╛ред

рдзрдиреНрдпрд╡рд╛рдж!!! рдпрд╣ рдореБрдЭреЗ рдкрд╛рдЧрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛

Gruntfile рдореЗрдВ collapseBooleanAttributes рдХреЛ рдЕрд╕рддреНрдп рдореЗрдВ рдмрджрд▓рдирд╛ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

+1 рд╕реЗ @faisalferoz рдХрд╛ рд╕рдорд╛рдзрд╛рдиред

рдЖрдЬ рдпрд╣ рдореБрджреНрджрд╛ рдерд╛ред

рдЧреНрд░рдВрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ collapseBooleanAttributes: true

рдЗрд╕рдиреЗ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛: sortable => data-sortable

рдореИрдВрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЗ htmlmin.dist.options collapseBooleanAttributes: рдХреЛ false рдореЗрдВ рдмрджрд▓рдХрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдХрд╛рдо рдХрд░рдиреЗ рдереЗ... collapseBooleanAttributes: рдХреЛ false рдмрджрд▓реЗрдВ рдФрд░ рдХреЛрдб рдХреЛ <td data-title="'App score'" sortable="'gender'" >{{content.gender}}</td> рд╕реЗ <td sortable="'gender'" data-title="'App score'" >{{content.gender}}</td> рдмрджрд▓реЗрдВ, рдЕрдХреЗрд▓реЗ рдбреЗрдЯрд╛-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ ...

@ рдЬреЙрдиреА-рд╡рд╛рдИ рдпрд╣ рдЕрдЬреАрдм рд╣реИред рддреЛ рдЖрдкрдХреЛ <td> рддрддреНрд╡реЛрдВ рдореЗрдВ ngTable рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛?

рдмрдврд╝рд┐рдпрд╛, рдЗрд╕рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рднреА рд╣рд▓ рд╣реЛ рдЧрдИред рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ collapseBooleanAttributes: true рд╕реЗ false рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдВ, рдЫрдБрдЯрд╛рдИ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж

рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕реАрдПрд╕рдПрд╕ рд╕рдорд╕реНрдпрд╛ рднреА рдереА (рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдо рдкрд░ 2 рдКрдкрд░ рддреАрд░ рджреЗрдЦреЗрдВ):
ng-table-css-min

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ:

        cssmin: {
            options: {
                advanced: false
            }
        },


@andreicristianpetcu +1 рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛!

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛: D

рдмрджрд▓рддреЗ рдкрддрди рдмреВрд▓рд┐рдпрди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреА, thx

рдбреЗрдЯрд╛-рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЧреНрд░рдВрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ рдкрддрдирдмреВрд▓рд┐рдпрди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕: рд╕рдЪ рдиреЗ рдЗрд╕реЗ рдПрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рджрд┐рдпрд╛ред

рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реА: рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп => рдбреЗрдЯрд╛-рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп

рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП thx рджреЛрд╕реНрддреЛрдВ ...

рдПрдЪрдЯреАрдПрдордПрд▓рдорд┐рдирдЯ

рдореЗрд░реЗ рд▓рд┐рдП рд╣рд▓ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕