{"id":13403565,"url":"https://github.com/rpocklin/ui-router-tabs","last_synced_at":"2026-02-19T21:02:42.702Z","repository":{"id":20542469,"uuid":"23821961","full_name":"rpocklin/ui-router-tabs","owner":"rpocklin","description":"Idiot-proof tab panes with route support using Angular.js + Bootstrap 3 + UI Router","archived":false,"fork":false,"pushed_at":"2017-07-05T02:25:59.000Z","size":2847,"stargazers_count":243,"open_issues_count":13,"forks_count":57,"subscribers_count":12,"default_branch":"master","last_synced_at":"2026-01-24T04:06:24.835Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rpocklin.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":"2014-09-09T06:25:29.000Z","updated_at":"2025-09-12T19:36:36.000Z","dependencies_parsed_at":"2022-09-10T20:00:59.389Z","dependency_job_id":null,"html_url":"https://github.com/rpocklin/ui-router-tabs","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/rpocklin/ui-router-tabs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpocklin%2Fui-router-tabs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpocklin%2Fui-router-tabs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpocklin%2Fui-router-tabs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpocklin%2Fui-router-tabs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rpocklin","download_url":"https://codeload.github.com/rpocklin/ui-router-tabs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpocklin%2Fui-router-tabs/sbom","scorecard":{"id":786340,"data":{"date":"2025-08-11","repo":{"name":"github.com/rpocklin/ui-router-tabs","commit":"db413f40779fe93895a1c611c121f3e1de92cfbe"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"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":"Code-Review","score":1,"reason":"Found 3/29 approved changesets -- score normalized to 1","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":"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":"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":"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":"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":"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":"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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T06:12:49.322Z","repository_id":20542469,"created_at":"2025-08-23T06:12:49.322Z","updated_at":"2025-08-23T06:12:49.322Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29632708,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T18:02:07.722Z","status":"ssl_error","status_checked_at":"2026-02-19T18:01:46.144Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-07-30T19:01:31.676Z","updated_at":"2026-02-19T21:02:42.667Z","avatar_url":"https://github.com/rpocklin.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Routing"],"sub_categories":[],"readme":"# UI Router Tabs\n\nLeverages [UI Bootstrap](http://angular-ui.github.io/bootstrap/) and [UI Router](https://github.com/angular-ui/ui-router) to give you full-strength route-driven tabs in Angular.js.\n\n[![Build Status](https://secure.travis-ci.org/rpocklin/ui-router-tabs.svg)](http:/travis-ci.org/rpocklin/ui-router-tabs)\n[![Coverage Status](https://coveralls.io/repos/rpocklin/ui-router-tabs/badge.svg)](https://coveralls.io/r/rpocklin/ui-router-tabs)\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\n[![Gratipay](https://img.shields.io/gratipay/rpocklin.svg)](https://gratipay.com/rpocklin/)\n\n\n## Example / Demo\n[Link](http://rpocklin.github.io/ui-router-tabs/example/index.html)\n\n## How to Install / Usage\n\n1. Install the plugin into your Angular.js project, manually or via `bower install angular-ui-router-tabs`\n1. Add `ui.router.tabs` as a new module dependency in your angular app.\n\n1. Define your routes in a hierarchy that makes sense for a tabbed layout, Eg:\n  ```javascript\n      $stateProvider.state('user', {\n        url:         '',\n        controller: 'UserCtrl',\n        templateUrl: 'example.html'\n      }).state('user.settings', {\n        url:         '/user/settings',\n        templateUrl: 'user/settings.html'\n      }).state('user.accounts', {\n        url:         '/user/accounts',\n        templateUrl: 'user/accounts.html'\n      });\n  ```\n\n1. Define your `tabData` (or similiar variable) in the root view controller of your tabs (ie. `UserCtrl` in the case above) Eg:\n  ```javascript\n      $scope.tabData   = [\n        {\n          heading: 'Settings',\n          route:   'user.settings'\n        },\n        {\n          heading: 'Accounts',\n          route:   'user.accounts',\n          disable: true\n        }\n      ];\n  ```\n\n  NOTE: You can also specify `params` and `options` to pass special parameters or options for the target route to UI Router, Eg:\n  ```javascript\n      {\n        heading: 'Accounts',\n        route:   'user.accounts',\n        params:  {\n                   accountId: account.id\n                 },\n        options: {}\n      }\n  ```\n\n1. Declare the following in your the parent HTML view template `\u003ctabs data=\"tabData\" type=\"tabs\"\u003e\u003c/tabs\u003e`.\n\n  Optional attributes for the `\u003ctabs\u003e` (which are passed on to the UI Bootstrap component) are:\n\n  * `type: [ 'tabs' | 'pills' ]`\n  * `vertical: boolean`\n  * `justified: boolean`\n  * `class: string`\n  * `templateUrl: \u003ctemplate url name\u003e`\n\n  NOTE: If you use a custom template, you may need to define a `ui-view` placeholder for the child content panes in the same HTML view template eg. `\u003cui-view\u003e\u003c/ui-view\u003e`.\n\n## Tips\n\n* UI Bootstrap Tabs will not select a tab by default.  If you want it to, specify the target sub-route when you\n  show the tabs (ie. link the `ui-view` containing the tabs with the default (first) element as the sub-route `example/#/user/settings` in the example.)\n* You can override the default directive template by specifying `template-url=\"my_template.html\"` on the `\u003ctabs\u003e` element.\n* You can enable / disable tabs by specifying `disable: true` in the `tabData` (can be dynamically set).\n* You can use `\u003ctab-heading\u003e` in a custom directive template to add any HTML into the tab title (eg. icons)\n* You can update the `tabData` variable dynamically, if you want to.\n* You can move the `\u003ctabs\u003e` tag around to wherever you want the tab listing to appear.  (left-positioned is the best spot to enable responsive design.).\n* Each tab will have a default class of `tab`, an active tab will have the `active` class.\n\n\n## Running Locally\n\n1. Checkout git repository locally: `git clone git@github.com:rpocklin/ui-router-tabs.git`\n1. `npm install`\n1. `bower install`\n1. `grunt serve`\n1. View `http://localhost:9000/example/` in your browser to see the example.\n\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Added some feature'`) - please consider adding tests!\n4. Push to the branch (`git push origin my-new-feature`)\n5. Run `grunt` and ensure there are no errors.\n6. Create a new Pull Request\n\n\n## History\n* 2.0.2 Fixed invalid `\u003cui-view\u003e` placement in default template.\n* 2.0.1 Fixed invalid html in default template (missing `\u003cdiv\u003e`).\n* 2.0.0 Added `class` and `template-url` attributes on `uib-tab` and began using `\u003cuib-tab-heading\u003e` tag.\n* 1.8.0 Added inline template by default (as requested) and allowed customer classes parameter.\n* 1.7.0 Added `uib` prefix for UI Bootstrap elements (as per v0.14.0).  See [#47](/../../pull/47).  \u003cbr/\u003eUpgraded angular-bootstrap to v14.0.\n* 1.6.0 Renamed `disabled` attribute to `disable` in line with UI Bootstrap `\u003ctab\u003e`.  See [#39](/../../issues/39).\n* 1.5.1 Removed `bower_components` from repository.  See [#40](/../../pull/40).\n* 1.5.0 Bumped `angular-bootstrap` dependency to v0.13.0 (fixes default tab being auto-selected).\n* 1.4.3 Added handling of `$stateChangeCancel`, `$stateChangeError` and `$stateNotFound` to reset active tab.\n* 1.4.2 Added feature to update tabs if state change event is cancelled.  See [#19](/../../pull/19).\n* 1.4.1 Bumped angular-bootstrap dependency to v0.12.1.\n* 1.4.0 Removed default `$state.go(..)` route option, added `disabled` option and updated jsbeautifier.  See [#16](/../../pull/16).\n* 1.3.0 Improved state equality checking to include params and options.\n* 1.2.0 Prevented reload of current state again.  See [#11](/../../pull/11).\n* 1.1.4 Added support for `strict-di` mode.\n* 1.1.3 Fixed tab switching when using `ngTouch`.  See [#2](/../../issues/2).\n* 1.1.2 Added `$stateChangeSuccess` watcher to update parent tab(s) when using \u003cbr/\u003e`ui-sref` or `$state.go()`.  See [#1](/../../issues/1).\n* 1.1.0 Added nested tab support (tabs within tabs)\n* 1.0.0 Initial release\n\n## License\n\nReleased under the MIT License. See the [LICENSE][license] file for further details.\n\n[license]: https://github.com/rpocklin/ui-router-tabs/blob/master/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frpocklin%2Fui-router-tabs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frpocklin%2Fui-router-tabs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frpocklin%2Fui-router-tabs/lists"}