<!DOCTYPE html>
<html ng-app="myApp">
    <head lang="en">
        <meta charset="utf-8">
        <title>Custom Plunker</title>  
        <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="http://angular-ui.github.com/ng-grid/css/ng-grid.css" />
        <link rel="stylesheet" type="text/css" href="style.css" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
        <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
        <script type="text/javascript" src="http://angular-ui.github.com/ng-grid/lib/ng-grid.debug.js"></script>
        <script type="text/javascript" src="main.js"></script>
    </head>
    <body ng-controller="MyCtrl">
    <div class="input-append btn-block btn-flat">
           Cells with red background need to be changed to contain only 40 characters.
        </div>
      <div class="gridStyle" ng-grid="gridOptions"></div>
    </body>
</html>
// main.js
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', function($scope) {
  $scope.filterOptions = {
    filterText: ''
  };
    
  $scope.myData = [
    {
        "name": "ANADA",
        "abbrev": "ANADA",
        "isValid": "Valid"
    },
    {
        "name": "ANDA",
        "abbrev": "ANDA",
        "isValid": "Valid"
    },
    {
        "name": "APPROV DRUG PROD MAN FOR PRIV LABEL DIST",
        "abbrev": "APPROV DRUG PROD MAN FOR PRIV LABEL DIST",
        "isValid": "INVALID"
    },
    {
        "name": "APPROVED DRUG PRODUCT MANUFACTURED EXCLUSIVE",
        "abbrev": "APPROVED DRUG PRODUCT MANUFACTURED EXCLUSIVE",
        "isValid": "INVALID"
    },
    {
        "name": "BLA",
        "abbrev": "BLA",
        "isValid": "VALID"
    },
    {
        "name": "BULKING FOR HUMAN PRESCRIP CMPD",
        "abbrev": "BULKING FOR HUMAN PRESCRIP CMPD",
        "isValid": "VALID"
    },
    {
        "name": "BULK INGREDIENT",
        "abbrev": "BULK INGREDIENT",
        "isValid": "VALID"
    },
    {
        "name": "BULK INGREDIENT FOR DRUG COMPOUNDING",
        "abbrev": "",
        "isValid": "INVALID"
    },
    {
        "name": "BULK INGREDIENT FOR ANIMAL PRESCRIPTION COMPOUNDING",
        "abbrev": "",
        "isValid": "INVALID"
    },
    {
        "name": "BULK INGREDIENT FOR HUMAN PRESCRIPTION COMPOUNDING",
        "abbrev": "BULK INGREDIENT FOR HUMAN PRESCRIPTION COMPOUNDING",
        "isValid": "INVALID"
    },
    {
        "name": "COSMETIC",
        "abbrev": "COSMETIC",
        "isValid": "VALID"
    },
    {
        "name": "DIETARY SUPPLEMENT",
        "abbrev": "DIETARY SUPPLEMENT",
        "isValid": "VALID"
    },
    {
        "name": "DRUG FOR FURTHER PROCESSING",
        "abbrev": "DRUG FOR FURTHER PROCESSING",
        "isValid": "VALID"
    },
    {
        "name": "DRUG FOR FURTHER PROCESSING",
        "abbrev": "DRUG FOR FURTHER PROCESSING",
        "isValid": "VALID"
    },
    {
        "name": "DRUG FOR FURTHER PROCCESSING",
        "abbrev": "DRUG FOR FURTHER PROCCESSING",
        "isValid": "VALID"
    },
    {
        "name": "DRUG FOR FURTHER PROCCESSING",
        "abbrev": "DRUG FOR FURTHER PROCCESSING",
        "isValid": "VALID"
    },
    {
        "name": "EXEMPT DEVICE",
        "abbrev": "EXEMTP DEVICE",
        "isValid": "VALID"
    },
    {
        "name": "EXPORT ONLY",
        "abbrev": "EXPORT ONLY",
        "isValid": "VALID"
    },
    {
        "name": "IND",
        "abbrev": "IND",
        "isValid": "VALID"
    },
    {
        "name": "LEGALLY MARKETED UNAPPROVED NEW ANIMAL DRUGS",
        "abbrev": "LEGALLY MARKETED UNAPPROVED NEW ANIMAL DRUGS",
        "isValid": "INVALID"
    },
    {
        "name": "MEDICAL FOOD",
        "abbrev": "MEDICAL FOOD",
        "isValid": "VALID"
    },
    {
        "name": "NADA",
        "abbrev": "NADA",
        "isValid": "INVALID"
    }
]

var cellTemp = "<div class=\"ngCellText\" ng-class=\"col.colIndex()\"><span ng-cell-text update-fda-on-blur ng-model='someVals'>{{row.getProperty(col.field)}}<\/span><\/div>";
    var cellTempValid = "<div class=\"ngCellText\" ng-class=\"col.colIndex()\"><span ng-cell-text update-fda-on-blur ng-model='someVals'>{{row.getProperty(col.field)}}<\/span><\/div>";
    var cellTempAbbrev = '<div ng-class="{errorRed: row.getProperty(col.field).length > 40}"><div class="ngCellText"><span  ng-cell-text update-fda-on-blur ng-model="someVals">{{row.getProperty(col.field)}} <span style="float:right;" ng-show="row.getProperty(col.field).length > 40" class="cellInstrText">(40 Char. Max. Click to abbreviate.)</span><\/span></div></div>';

                   
  $scope.gridOptions = {
            columnDefs: [
            {
                field: 'name',
                displayName: 'Market Category Name',
                cellTemplate: cellTemp,
                enableCellEdit: false
            },
            {
                field: 'abbrev',
                displayName: 'Market Category Abbr',
                cellTemplate: cellTempAbbrev,
                width: 750,
                editableCellTemplate:  '<input ng-class="\'colt\' + col.index" ng-input="COL_FIELD" value= "{{row.getProperty(col.field)}}" data-ng-maxlength="40" maxlength = "40"/>'
            },
            {
                field: 'isValid',
                displayName: 'Valid / InValid',
                cellTemplate: cellTempValid,
                enableCellEdit: true
            }

        ],
        data: 'myData',
        showFilter: true,
        multiSelect: false,
        enableRowSelection: false,
        headerRowHeight: 55,
        rowHeight: 50,
        enableCellSelection: true,
        enableCellEdit: true,
        enableColumnResize: true,
        enableCellEditOnFocus: true
  };
    
});
/*style.css*/
body {
  margin: 15px;
}

.gridStyle {
    border: 1px solid rgb(212,212,212);
    height: 1200px;
    margin-top: 10px;
}

.errorRed {
    color: #b94a48;
    background-color: #f2dede;
    border-color: #eed3d7;
    height: 50px;
}

.cellInstrText {
	font-size: 11px;
}