{"id":21261514,"url":"https://github.com/chenasraf/ng-qtip2","last_synced_at":"2026-02-27T11:02:59.137Z","repository":{"id":34620264,"uuid":"38569281","full_name":"chenasraf/ng-qtip2","owner":"chenasraf","description":"qTip 2 directive for AngularJS (v1.5) ","archived":false,"fork":false,"pushed_at":"2017-05-24T09:25:08.000Z","size":64,"stargazers_count":13,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-02-11T11:16:09.894Z","etag":null,"topics":["angularjs","coffeescript","directive","javascript","qtip"],"latest_commit_sha":null,"homepage":"","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chenasraf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-05T13:02:57.000Z","updated_at":"2022-05-23T22:35:05.000Z","dependencies_parsed_at":"2022-08-29T09:30:30.644Z","dependency_job_id":null,"html_url":"https://github.com/chenasraf/ng-qtip2","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/chenasraf/ng-qtip2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Fng-qtip2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Fng-qtip2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Fng-qtip2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Fng-qtip2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chenasraf","download_url":"https://codeload.github.com/chenasraf/ng-qtip2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenasraf%2Fng-qtip2/sbom","scorecard":{"id":275975,"data":{"date":"2025-08-11","repo":{"name":"github.com/chenasraf/ng-qtip2","commit":"6a09d76902fe9c033901c72acd2493e0057c3a0f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/24 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":"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":"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":"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":"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":"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":"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":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.md:0"],"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 10 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-17T14:24:08.091Z","repository_id":34620264,"created_at":"2025-08-17T14:24:08.095Z","updated_at":"2025-08-17T14:24:08.095Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29892063,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T09:48:51.284Z","status":"ssl_error","status_checked_at":"2026-02-27T09:48:43.992Z","response_time":57,"last_error":"SSL_read: 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":["angularjs","coffeescript","directive","javascript","qtip"],"created_at":"2024-11-21T04:43:37.933Z","updated_at":"2026-02-27T11:02:59.118Z","avatar_url":"https://github.com/chenasraf.png","language":"CoffeeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ng-qtip2\n\nqTip 2 wrapper directive for AngularJS.\n\n## Features\n* Two way bind support for content and title\n* Remote template file support\n* Customizable delay, trigger types, position, CSS classes and tip position\n\n## How to use\n### Manually include\n\n1. Make sure the file is included in your HTML:  \n\n  ```html\n  \u003cscript type=\"text/javascript\" src=\"ng-qtip2.js\"\u003e\u003c/script\u003e\n  ```\n2. Load the `ngQtip2` module in your `app.js`'s configuration\n  ```javascript\n  angular.module('myApp', ['ngQtip2'])\n  ```\n\n### Using bower\n\n1. Install with bower\n  ```sh\n  bower install ng-qtip2\n  ```\n2. Make sure the file is included in your HTML:\n  ```html\n  \u003cscript type=\"text/javascript\" src=\"bower_components/ng-qtip2/ng-qtip2.js\"\u003e\u003c/script\u003e\n  ```\n\n### Overriding default options\n\nYou may override any options for qTip tips globally in your module.  \nDo this by injecting `qtipDefaultsProvider` inside your app's `config` stage, and using the `setDefaults` method.  \nExample config stage:\n\n```javascript\nangular.module('myApp', ['ngQtip2']).config(function(qtipDefaultsProvider) {\n  qtipDefaultsProvider.setDefaults({\n    position: {\n      my: 'bottom center',\n      at: 'top center'\n    }\n  });\n});\n```\n\n## Reference\n\n| Option | Type | Default | Description |\n|---|---|---|---|\n| qtip | string (required) | | The qTip content. This can be left blank and overridden with other properties such as `qtip-content`, `qtip-title`, `qtip-selector`, and `qtip-template`. |\n| qtip-content | string | | The qTip content. Overrides `qtip`. |\n| qtip-title | string | | When specified, puts the value in qTip's built-in title option. |\n| qtip-visible | boolean | false | Whether the qTip is visible immediately. |\n| qtip-disable | boolean | false | Whether the qTip is disabled completely. Useful with `ng-repeat` and conditions inside the repeater, for example. |\n| qtip-fixed | boolean | true | Whether the qTip sticks around after the mouse leaves it (up until a certain `qtip-delay` is reached |\n| qtip-delay | int | 100 | How long to wait before the qTip disappears after it becomes inactive when the `mouseleave` hide event is used (i.e, by default), in ms. |\n| qtip-adjust-x | int | 1 | Position the qTip more to the left or right, relatively, in pixels. Use a negative value to move it left. |\n| qtip-adjust-y | int | 1 | Position the qTip more to the top or bottom, relatively, in pixels. Use a negative value to move it up. |\n| qtip-show-effect | boolean | true | If `false`, will disable animating the showing effect of qTip (this is useful when the dynamic positioning shows a flicker and animates the qTip from the side of the element or screen before positioning it correctly). |\n| qtip-hide-effect | boolean | true | If `false`, will disable animating the hiding effect of qTip (this is useful when the dynamic positioning shows a flicker and animates the qTip from the side of the element or screen before positioning it correctly). |\n| qtip-modal-style | object | | Set inline style for the qTip. This should be a JS object that contains the JS-esque style properties (such as `{maxHeight: '100vh'}`) |\n| qtip-tip-style | object | | Set inline style for the qTip's tip. This should be a JS object that contains the JS-esque style properties (such as `{maxHeight: '100vh'}`), and may also contain tip specific implementations (such as `mimic`, and `corner`). |\n| qtip-class | string | | Classes to use for the qTip, you can use these to style the qTip easier with CSS. |\n| qtip-selector | string | | CSS selector for element to use. When specified, the element found using the selector and jQuery will override any other content specified. |\n| qtip-template | string | | Remote template to use for qTip. When specified, the template will be used for the qTip content and will override any other content specified. Use in conjuction with `qtip-template-object` |\n| qtip-template-object | object | | Will assign a model to the qTip template for use inside the template's content. You can reference this using `{{object}}` inside the template. |\n| qtip-event | string | mouseover | What event triggers the qTip to show up. |\n| qtip-event-out | string | mouseout | What event triggers the qTip to hide after being shown. |\n| qtip-show | object | | Object for the qtip 'show' option (see qTip docs). Will override `qtip-event` |\n| qtip-hide | object | | Object for the qtip 'hide' option (see qTip docs). Will override `qtip-event-out` |\n| qtip-my | string | bottom center | qTip bubble tip position relative to the qTip. \"Put **my** tip **at** the qTip's...\" |\n| qtip-at | string | top center | qTip bubble tip position relative to the qTip. \"Put **my** tip **at** the qTip's...\" |\n| qtip-persistent | boolean | true | If `false`, qTip will be re-rendered next time it is open. |\n| qtip-options | object | | Object for the entire qtip initializer. This will merge itself into the other options specified in this table, overriding any existing keys. This is to explicitly override any options that are not handled the way you expect within these options, or to use options that are not yet implemented. |\n| qtip-api | object | | An empty object to hold the API reference object. [See reference below](#api-object) |\n\n### API Object\nAccess the api by adding a scope object to `qtip-api`:\n\n```html\n\u003cspan qtip=\"Hi!\" qtip-api=\"tip\"\u003e\u003c/span\u003e\n```\n\nAnd then access it in your code:\n\n```js\n$scope.tip.api().get(\"position.my\")\n```\n\nBecause of the way qtip2 works, *the API will not be available until you first render it*.\nThis means that it won't be ready until the user showed it (hovered on the associated directive), or you've passed to the options `qtip-options=\"{prerender: true}\"` which will force qtip2 to render the qtip on page load.\n\n#### ngQtip API methods\n\n| Name | Description | Returns |\n|---|---|---|\n| isReady( | Returns true if the API object is ready for use, false otherwise | boolean |\n| api( | Returns a qTip2 API object. [See official documentation][qtip-docs]. | object |\n| apiPromise( | Returns a `$q` promise holding the api object upon resolve. [See example below](#5-api-promise | object |\n\n## Examples\n#### 1. Regular qTip\n\n  ```html\n  \u003cspan qtip=\"Hi there, {{name}}!\"\u003e{{name}}\u003c/span\u003e\n  ```\n\n#### 2. Immediately visible qTip\n\n  ```html\n  \u003cspan qtip=\"Woah!\" qtip-visible=\"true\"\u003eKeanu\u003c/span\u003e\n  ```\n\n#### 3. qTip from template, with multiple objects\n\n  ```html\n  \u003cspan qtip qtip-template=\"my_remote_template.html\"\n        qtip-template-object=\"{person: myPerson, callback: myCallback}\"\u003e\n      {{person.name}}\n  \u003c/span\u003e\n  ```\n\n##### my_remote_template.html\n\n  ```html\n  \u003cspan ng-click=\"object.callback(person)\"\u003e\n      Hi {{object.person.name}}, you are {{object.person.age | pluralize:'year'}} old!\n  \u003c/span\u003e\n  ```\n\n#### 4. Dynamic qTip position\n\n  ```html\n  \u003cul\u003e\n      \u003cli ng-repeat=\"person in people track by $index\"\n          qtip=\"{{$index}}\"\n          qtip-my=\"{{getQtipMy($index)}}\"\n          qtip-at=\"top {{$index \u003e 15 ? 'center' : 'bottom'}}\"\u003e\n          {{person.name}}\n      \u003c/li\u003e\n  \u003c/ul\u003e\n  ```\n    \n#### 5. API Promise\n\n  ```js\n  $scope.tip.apiPromise().then(function(api) {\n    console.log(api.get(\"content\"));\n  });\n  ```\n\n## Contributing\n\n1. Fork this repository\n1. Make the desired changes\n1. Test your implementations, and that nothing was broken\n1. To auto-compile JS from Coffee, copy `pre-commit.hook` to `.git/hooks`\n1. Commit \u0026 Push to your fork (auto-compile should do its magic during commit)\n1. Create a pull request\n\n[qtip-docs]: http://qtip2.com/api\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenasraf%2Fng-qtip2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchenasraf%2Fng-qtip2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenasraf%2Fng-qtip2/lists"}