Repository files navigation

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 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

react-upvote

Note: This is a very new project not ready for production use. It's API will change frequently until v1.0.0.

Reusable upvote component for React applications.

Todo

  • Thorough testing
  • Improved props API

Demo & Examples

Live demo: echenley.github.io/react-upvote

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use react-upvote 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-upvote.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-upvote --save

Usage

varUpvote=require('react-upvote');<UpvotevoteStatus={user.votes[postData.id]||0}upvoteContent={<iclassName="upvote-icon fa fa-arrow-up"></i>}downvoteContent={<iclassName="downvote-icon fa fa-arrow-down"></i>}afterContent={<spanclassName="upvote-count">{postData.upvotes}</span>}shouldAllow={()=>user.isLoggedIn}onDisallowed={()=>this.errorMessage('You have to log in!')}onUpvote={()=>this.upvotePost(postData.id)}onDownvote={()=>this.downvotePost(postData.id)}onRemoveVote={()=>this.removeVote(postData.id)}/>

Properties

PropertyTypeDefault ValueDescription
classNameString'react-upvote'Class given to the upvote container
voteStatusInteger0Current user's vote status. Can be -1 (downvoted) 0 (no vote) or 1 (upvoted)
upvoteCountInteger0The component's current upvote count
shouldAllowFunctionnullFunction returning a boolean which determines whether to allow the current user to vote.
onDisallowedFunctionnullFunction called when shouldAllow returns false
onUpvoteFunctionnullFunction called when an upvote is registered
onDownvoteFunctionnullFunction called when a downvote is registered
onRemoveVoteFunctionnullFunction called when undoing a previous vote
upvoteContentComponentnull
downvoteContentComponentnull

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).

License

MIT Licensed. Copyright (c) Evan Henley 2015.

About

Reusable Upvote Component for React Apps

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages