Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

NOT MAINTAINED

This repository is not maintened anymore (and since a long time).

Sorry about all unanswered issues, I don't have time to maintain this package. If I had chance, I would rewrite this from scratch (maybe using a more typed and native approach).

Feel free to fork and enhance that libray if you need.

react-image-mapper

React Component to highlight interactive zones in images

Demo & Examples

Live demo: coldiary.github.io/react-image-mapper

To build the example locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-image-mapper is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-image-mapper.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-image-mapper --save

Usage

Import the component as you normally do, and add it wherever you like in your JSX views as below:

// ES5 requirevarImageMapper=require('react-image-mapper');// ES6 importimportImageMapperfrom'react-image-mapper';<ImageMappersrc={IMAGE_URL}map={AREAS_MAP}/>

Properties

PropstypeDescriptiondefault
srcstringImage source urlrequired
mapstringMapping description{ name: generated, areas: [ ] }
(see below)
fillColorstringFill color of the highlighted zonergba(255, 255, 255, 0.5)
strokeColorstringBorder color of the highlighted zonergba(0, 0, 0, 0.5)
lineWidthnumberBorder thickness of the highlighted zone1
widthnumberImage widthDisplayed width
heightnumberImage heightDisplayed height
activeboolEnable/Disable highlightingtrue
imgWidthnumberOriginal image widthnull
Props callbacksCalled onsignature
onLoadImage loading and canvas initialization completed(): void
onMouseEnterHovering a zone in image(area: obj, index: num, event): void
onMouseLeaveLeaving a zone in image(area: obj, index: num, event): void
onMouseMoveMoving mouse on a zone in image(area: obj, index: num, event): void
onClickClick on a zone in image(area: obj, index: num, event): void
onImageClickClick outside of a zone in image(event): void
onImageMouseMoveMoving mouse on the image itself(event): void

Map is an object describing highlighted areas in the image.

Its structure is similar to the HTML syntax of mapping:

  • map: (object) Object to describe highlighted zones
    • name: (string) Name of the map, used to bind to the image.
    • areas: (array) Array of area objects
      • area: (object) Shaped like below :
PropertytypeDescription
_idstringUniquely identify an area. Index in array is used if this value is not provided.
shapestringEither rect, circle or poly
coordsarray of numberCoordinates delimiting the zone according to the specified shape:
  • rect: top-left-X,top-left-Y,bottom-right-X,bottom-right-Y
  • circle: center-X,center-Y,radius
  • poly: Every point in the polygon path as point-X,point-Y,...
hrefstringTarget link for a click in the zone (note that if you provide a onClick prop, href will be prevented)

When received from an event handler, an area is extended with the following properties:

PropertytypeDescription
scaledCoordsarray of numberScaled coordinates (see Dynamic Scaling below)
centerarray of numberCoordinates positionning the center or centroid of the area: [X, Y]

Dynamic scaling

When a parent component updates the width prop on <ImageMapper>, the area coordinates also have to be scaled. This can be accomplied by specifying both the new width and a constant imgWidth. imgWidth is the width of the original image. <ImageMapper> will calculate the new coordinates for each area. For example:

/* assume that image is actually 1500px wide */// this will be a 1:1 scale, areas will be 3x bigger than they should be<ImageMapperwidth={500}/>// this will be the same 1:1 scale, same problem with areas being too big<ImageMapperwidth={500} imgWidth={500}/>// this will scale the areas to 1/3rd, they will now fit the 500px image on the screen<ImageMapperwidth={500}imgWidth={1500}/>

Development (src, lib and the build process)

NOTE: The source code for the component is in src. A transpiled CommonJS version (generated with Babel) is available in lib for use with node.js, browserify and webpack. A UMD bundle is also built to dist, which can be included without the need for any build system.

To build, watch and serve the examples (which will also watch the component source), run npm start. If you just want to watch changes to src and rebuild lib, run npm run watch (this is useful if you are working with npm link).

Notes & Contributions

See header.

License

Distributed with an MIT License. See LICENSE.txt for more details

Copyright (c) 2017 Coldiary.

About

React Component to highlight interactive zones in images

Resources

Stars

196 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages