{"id":45127195,"url":"https://github.com/aniruddhanath/jquery-hotspot","last_synced_at":"2026-02-19T23:21:20.883Z","repository":{"id":23149764,"uuid":"26505125","full_name":"aniruddhanath/jquery-hotspot","owner":"aniruddhanath","description":"A responsive jQuery plugin for creating and displaying Hotspots in an HTML element.","archived":false,"fork":false,"pushed_at":"2022-03-13T06:21:30.000Z","size":191,"stargazers_count":60,"open_issues_count":9,"forks_count":23,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-01-14T11:03:04.860Z","etag":null,"topics":["hotspot","javascript","jquery","jquery-plugin","responsive-plugin"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aniruddhanath.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-11T21:22:48.000Z","updated_at":"2025-11-23T08:49:55.000Z","dependencies_parsed_at":"2022-07-31T06:48:03.699Z","dependency_job_id":null,"html_url":"https://github.com/aniruddhanath/jquery-hotspot","commit_stats":null,"previous_names":["anhee/jquery-hotspot","aniruddha22/jquery-hotspot"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/aniruddhanath/jquery-hotspot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aniruddhanath%2Fjquery-hotspot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aniruddhanath%2Fjquery-hotspot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aniruddhanath%2Fjquery-hotspot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aniruddhanath%2Fjquery-hotspot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aniruddhanath","download_url":"https://codeload.github.com/aniruddhanath/jquery-hotspot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aniruddhanath%2Fjquery-hotspot/sbom","scorecard":{"id":196599,"data":{"date":"2025-08-11","repo":{"name":"github.com/aniruddhanath/jquery-hotspot","commit":"001d4829318d17b9c79d245c0aef5eca01c92bde"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"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":"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":"Code-Review","score":0,"reason":"Found 1/24 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":"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":"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":"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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 11 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-16T21:56:00.911Z","repository_id":23149764,"created_at":"2025-08-16T21:56:00.911Z","updated_at":"2025-08-16T21:56:00.911Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29636299,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"ssl_error","status_checked_at":"2026-02-19T22:32:38.330Z","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":["hotspot","javascript","jquery","jquery-plugin","responsive-plugin"],"created_at":"2026-02-19T23:21:20.368Z","updated_at":"2026-02-19T23:21:20.878Z","avatar_url":"https://github.com/aniruddhanath.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"jQuery - Hotspot\n===\n\nA [jQuery](http://www.jquery.com) plugin for creating *Hotspots* in an HTML element. This plugin operates in two modes, `admin` and `display`. The **admin mode** enables user to create hotspots on desired HTML elements. The **display mode** is used for only displaying the hotspots to the end user. The design of the hotspot created are fully customizable. User can add their own CSS class to style the hotspots.\n\n### [View Demo](http://aniruddhanath.github.io/jquery-hotspot/)\n\nNote: Ensures responsiveness with the latest update.\n\nThe Setup\n---------\n\n```\nnpm install jquery-hotspot\n```\n\nInclude `jquery.hotspot.js` at the bottom of the HTML page before the closing body tag. Wrap the HTML element for which the hotspot is to be obtained with another element. Also include the `jquery.hotspot.css` file to go with some of the default design decisions.\n```\n\u003cdiv id=\"theElement\"\u003e\n  \u003cimg src=\"theImage.jpg\" /\u003e\n\u003c/div\u003e\n```\nThe plugin instance will be called with `theElement`.\n\u003e **Note:** The CSS property, *position* for this element should be kept as *relative*.\n```\n#theElement {\n  position: relative;\n}\n```\n\n\nUsage - Display mode\n--------------------\n\nThe data associated with the hotspots can be passed in directly to the plugin. The data can also be fetched from a backend server by enabling `ajax` option.\n\nThere are three options given for hotspot-interactivity - hover, click and none.\n- **hover** : The data associated with the hotspot will show up on *hovering* over spot.\n- **click** : The data associated will show up on *clicking* the spot.\n- **none** : The data will be static and would not be affected by any events.\n\n### Basic call with known coordinates:\n```\n$('#theElement').hotspot({\n  data: [\n    { \"x\":18, \"y\":38, \"Title\":\"The Title\",\"Message\":\"Create the Message here\" },\n    { \"x\":43, \"y\":40, \"Title\":\"jQuery Hotspot\",\"Message\":\"This jQuery Plugin lets you create hotspot to any HTML element.\" }\n  ],\n  tag: 'img', //optional (default is img)\n  interactivity: \"hover\", // options : click, none (default is hover)\n  hotspotClass: 'Hotspot'\n});\n```\nThe `data` object above can be populated with any number of properties and can be designed with appropriate CSS. The `tag` variable passed to the plugin determines the type of HTML tag for which the hotspot is obtained. The `hotspotClass` is class of the hotspots created. One can change the look of the  hotspot by applying some CSS to this class.\n\nBy default in display mode, repositioning of hotspots on window resize is enabled. To disable this, a parameter can be passed in the plugin options.\n```\nlistenOnResize: false\n```\n\n### Fetching data via AJAX call\n```\n$(\"#theElement\").hotspot({\n  ajax: true, // Switching on the ajax\n  ajaxOptions: {\n    url: '/hotspots',\n    type: 'GET',\n    ...\n  },\n  interactivity: \"hover\" // options : click, none (default is hover)\n});\n```\nThe data coming from the server-side is expected to be JSON encoded. The object `ajaxOptions` can be utilized to change the http headers, etc.\n\n\nUsage - Admin mode\n--------------------\n### Standard call\n```\n$(\"#theElement\").hotspot({\n  mode: \"admin\", // Switching to admin mode\n  ajax: true, // Turn on ajax\n  ajaxOptions: {\n    url: '/hotspots',\n    type: 'POST',\n    ...\n  },\n  interactivity: \"hover\" // options : click, none (default is hover)\n});\n```\n`ajax` and `ajaxOptions` are required here so that the hotspot that are being created in the admin mode get stored in the server. However if someone turn off the ajax, then the hotspots data gets stored in the browser's LocalStorage.\n\nKey Features \n------------\n\n1. Any number of *messages/nodes* can be stuffed in a single hotspot. To do so the `schema` parameter is passed to the plugin. By default there are two nodes (Title and Message)\n\n```\n$(\"#theElement\").hotspot({\n  mode: \"admin\", // Switching to admin mode\n  ajax: true, // Turn on ajax\n  ajaxOptions: {\n    url: '/hotspots',\n    type: 'POST',\n    ...\n  },\n  schema: [\n    {\n      'property': 'Time',\n      'default': '5:40am'\n    },\n    {\n      'property': 'Date',\n      'default': '12/11/2018'\n    },\n    {\n      'property': 'Place',\n      'default': 'Siberia'\n    },\n  ]\n});\n```\nThe `default` property in the `schema` object above will be overwritten everytime a new hotspot is created.\n\n2. The plugin also provides some basic functions that can be invoked after certain events in the process of creation of hotspots.\n\n```\n$(\"#theElement\").hotspot({\n  mode: \"admin\", // Switching to admin mode\n  ajax: true, // Turn on ajax\n  ajaxOptions: {\n    url: '/hotspots',\n    type: 'POST',\n    ...\n  },\n  afterSave: function(err, data) {\n    // hotspots `data` in json format can be stored\n    //  \u0026 passed in `display` mode for the image\n  },\n  afterRemove: function(err, message) {\n    // `message` from the plugin\n  },\n  afterSend: function(error, message) {\n    // check if any `error` has occurred\n  }\n});\n```\nThese functions can be utilized to keep track of the flow of hotspot creation.\n\n3. The plugin can be used with any number of HTML elements in a page. However to do so, the `LS_Variable` passed to the plugin should be named uniquely for every instance. This helps plugin to avoid conflicts and while using HTML5 LocalStorage. \n\nHTML : \n```\n\u003cdiv id=\"theElement-a\"\u003e\n  \u003cimg src=\"theImage-a.jpg\" /\u003e\n\u003c/div\u003e\n\u003cdiv id=\"theElement-b\"\u003e\n  \u003cimg src=\"theImage-b.jpg\" /\u003e\n\u003c/div\u003e\n```\n\nJavaScript :\n\n```\n$(\"#theElement-a\").hotspot({\n  mode: \"admin\",\n  ...\n  LS_Variable: \"HotspotPlugin-a\"\n});\n\n$(\"#theElement-b\").hotspot({\n  mode: \"admin\",\n    ...\n  LS_Variable: \"HotspotPlugin-b\"\n});\n```\n\nFor better clarity the examples folder can be checked\n\n\nFetch data via AJAX Request\n------------\n\nInclude jquery and hotspot plugin in the html code.\n\n```\n\u003cscript type=\"text/javascript\"\u003e\n$.ajax({url: \"mytest.aspx/GetHotSpotData\", success: function (result) {\n  $(\"#HotspotPlugin_image\").hotspot({\n    data: result,\n    interactivity: \"click\",\n  });\n}});\n\u003c/script\u003e\n```\n\nAlso make sure `result` passed as `data` in the plugin should be an array of objects.\n```\n[\n  { \"x\":18, \"y\":29, \"Title\":\"The Title\",\"Message\":\"Create the Message here\" },\n  { \"x\":14, \"y\":40, \"Title\":\"jQuery Hotspot\",\"Message\":\"This jQuery Plugin lets you create hotspot to any HTML element.\" }\n]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faniruddhanath%2Fjquery-hotspot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faniruddhanath%2Fjquery-hotspot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faniruddhanath%2Fjquery-hotspot/lists"}