{"id":31893735,"url":"https://github.com/saulsluz/angular-minimal-grid","last_synced_at":"2026-05-07T13:02:10.489Z","repository":{"id":57178758,"uuid":"96141991","full_name":"saulsluz/angular-minimal-grid","owner":"saulsluz","description":"Simple data grid using bootstrap for angularjs applications","archived":false,"fork":false,"pushed_at":"2017-08-21T14:14:39.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-30T05:21:24.916Z","etag":null,"topics":["angularjs","bootstrap","grid-data"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saulsluz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-07-03T19:02:53.000Z","updated_at":"2017-08-08T20:24:35.000Z","dependencies_parsed_at":"2022-09-09T17:11:36.551Z","dependency_job_id":null,"html_url":"https://github.com/saulsluz/angular-minimal-grid","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/saulsluz/angular-minimal-grid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saulsluz%2Fangular-minimal-grid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saulsluz%2Fangular-minimal-grid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saulsluz%2Fangular-minimal-grid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saulsluz%2Fangular-minimal-grid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saulsluz","download_url":"https://codeload.github.com/saulsluz/angular-minimal-grid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saulsluz%2Fangular-minimal-grid/sbom","scorecard":{"id":801807,"data":{"date":"2025-08-11","repo":{"name":"github.com/saulsluz/angular-minimal-grid","commit":"e00deb4a89cd6042804d6d1b243be35b366a2ae3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-23T10:42:13.436Z","repository_id":57178758,"created_at":"2025-08-23T10:42:13.437Z","updated_at":"2025-08-23T10:42:13.437Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011190,"owners_count":26084900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angularjs","bootstrap","grid-data"],"created_at":"2025-10-13T09:21:57.666Z","updated_at":"2025-10-13T09:22:03.003Z","avatar_url":"https://github.com/saulsluz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# angular-minimal-grid\n\nImplementation of data grid using bootstrap (^3.x.x) for angular applications (^1.x.x).\n\nUses custom style of [dataTable](https://github.com/DataTables/DataTables).\n\n### Installation\n\n#### Bower\n\n`$ bower install angular-minimal-grid`\n\nEmbed it in your HTML:\n\n```html\n\u003clink href=\"./bower_components/angular-minimal-grid/css/minimal-grid.css\" rel=\"stylesheet\"\u003e\n\u003cscript src=\"./bower_components/angular-minimal-grid/js/minimal-grid.js\"\u003e\u003c/script\u003e\n```\n\n#### NPM\n\n`$ npm install angular-minimal-grid`\n\nEmbed it in your HTML:\n\n```html\n\u003clink href=\"./node_modules/angular-minimal-grid/css/minimal-grid.css\" rel=\"stylesheet\"\u003e\n\u003cscript src=\"./node_modules/angular-minimal-grid/js/minimal-grid.js\"\u003e\u003c/script\u003e\n```\n\n#### Dependency injection\n\nInject `angular-minimal-grid` module as a dependency into your app:\n\n```js\nvar app = angular.module('app', [\n  'ngMinimalGrid'\n])\n```\n\n### Usage\n\nExample of minimum usage:\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\u003e\u003c/minimal-grid\u003e\n```\n\nIn controller:\n\n```js\n$scope.myColumns = [\n  { key: 'name', title: 'Name' },\n  { key: 'lastName', title: 'Last Name' },\n  { key: 'age', title: 'Age' }\n]\n$scope.myRows = [\n  { name: 'John ', lastName: 'Doe', age: 30 },\n  { name: 'Marie ', lastName: 'Doe', age: 28 }\n]\n```\n\n![image](https://user-images.githubusercontent.com/2475044/27923800-08b6465e-6256-11e7-8319-c32bc53e0dd3.png)\n\nThat's all.\n\n### Customization\n\n#### Custom labels\n\nIt's suportted custom labels by Provider methods:\n\n|           method          |   property       |          default value             |\n| ------------------------- | ---------------- | ---------------------------------- |\n| setStatsMessage(`String`) | statsMessage     | `'Showing %1 to %2 of %3 results'` |\n| setFirstLabel(`String`)   | firstButtonLabel | `First`                            |\n| setLastLabel(`String`)    | lastButtonLabel  | `Last`                             |\n\n```js\napp.config(function(minimalGridConfigProvider){\n  minimalGridConfigProvider\n    .setStatsMessage('Mostrando %1 à %2 de %3 resultados')\n    .setFirstLabel('Primeiro')\n    .setLastLabel('Último')\n})\n```\n\n#### Custom rendering\n\nIt's suportted custom rendering of cell value: uses `onRender`\n\n```js\n$scope.myColumns = [\n  { key: 'name', title: 'Name' },\n  { key: 'lastName', title: 'Last Name' },\n  { key: 'age', title: 'Age', onRender: function(val){\n    if (val%2 == 0)\n      return '\u003cb\u003e'+val+'\u003c/b\u003e' // HTML allowed\n    else\n      return val\n  } }\n]\n$scope.myRows = [\n  { name: 'John ', lastName: 'Doe', age: 30 },\n  { name: 'Marie ', lastName: 'Doe', age: 28 }\n]\n```\n\n#### Max limit per page\n\nSet the max rows peer page. Default is `10`.\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  pagination-max=\"15\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\n##### Max limit of pagination\n\nSet the range of number's page to show. Default is `5`.\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  pagination-range=\"3\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\n#### Nested objects\n\nIt's suportted nested objects: uses [angular's parse](https://docs.angularjs.org/api/ng/service/$parse).\n\n```js\n$scope.myColumns = [\n  { key: 'person.user.name', title: 'Name' },\n  { key: 'lastName', title: 'Last Name' },\n  { key: 'age', title: 'Age' }\n]\n$scope.myRows = [\n  { person: { user: { name: 'John ' } }, lastName: 'Doe', age: 30 },\n  { person: { user: { name: 'Marie ' } }, lastName: 'Doe', age: 28 }\n]\n```\n\n### Getting the control\n\nKeep in mind: this implementation uses the power of callbacks to do anything by out of the grid directive.\n\nThe isolated scope binding:\n\n|          property      |   type   | required |\n| ---------------------- | -------- | -------- |\n| columns                | array    | yes      |\n| rows                   | array    | yes      |\n| fake                   | bool     |          |\n| totalRows              | integer  |          |\n| pagination-max         | integer  |          |\n| pagination-range       | integer  |          |\n| on-change-order-by     | function |          |\n| on-change-paginate     | function |          |\n| on-click-row           | function |          |\n\n##### on-click-row\n\nIf you want to do somenthing when the user clicks on a row just add a binding on a click:\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  on-click-row=\"myCallbackClick(row)\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\n`row` will be something like this:\n\n```js\n{\n  name: \"John\", \n  lastName: \"Doe\", \n  age: 30\n}\n```\n\nIt's important to pass \"row\" as parameter: Uses [angular's parameter by reference](https://docs.angularjs.org/guide/directive).\n\n##### on-change-paginate\n\nIf you want to do somenthing when the user clicks on a page number (previous or next) just add a binding on a paginate:\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  on-change-paginate=\"myCallbackPaginate(pages)\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\n`pages` will be something like this:\n\n```js\n{\n  current: 2,\n  first: 1, \n  last: 10, \n  max: 10, \n  next: 3, \n  pagination: 1, \n  previous: 1, \n  range: 5, \n  total: Array(10) \n}\n```\n\nIt's important to pass \"pages\" as parameter: Uses [angular's parameter by reference](https://docs.angularjs.org/guide/directive).\n\n##### on-change-order-by\n\nIf you want to do somenthing when the user clicks on a header (to change the order by) just add a binding on a order by:\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  on-change-order-by=\"myCallbackOrderBy(orderBy)\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\n`orderBy` will be something like this:\n\n```js\n{\n  orderdirection: \"asc\", \n  orderby: \"name\"\n}\n```\n\nIt's important to pass \"orderby\" as parameter: Uses [angular's parameter by reference](https://docs.angularjs.org/guide/directive).\n\n##### fake mode\n\nHere's the trick! Setting `fake=\"true\"` makes the grid perform ordernation and pagination just visualy. This way it's possible to perform yourself ordenation or pagination or whatever you want. Perfect to make async calls and server things.\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  fake=\"true\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\nUsing this mode you will need to set the row's length by setting `totalRows`\n\n```html\n\u003cminimal-grid columns=\"myColumns\" rows=\"myRows\"\n  fake=\"true\"\n  total-rows=\"myRowsLenght\"\n  \u003e\u003c/minimal-grid\u003e\n```\n\nCombine with callbacks and feel the power.\n\n### Tests\n\nTo run the package's test, first install the dependencies, then run `npm test`:\n\n```bash\n$ npm install --only=dev\n$ bower install\n```\n\nor \n\n```bash\n$ npm install\n```\n\n### License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaulsluz%2Fangular-minimal-grid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaulsluz%2Fangular-minimal-grid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaulsluz%2Fangular-minimal-grid/lists"}