🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

react-speed-reader

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-speed-reader - npm Package Compare versions

Comparing version

to
1.2.0

.babelrc

40

package.json
{
"name": "react-speed-reader",
"version": "1.1.0",
"version": "1.2.0",
"description": "Speed Reader component for React",
"author": "Reslav Hollos <reslav.hollos@gmail.com> (https://twitter.com/Radivarig)",
"author": "Reslav Hollos <reslav.hollos@gmail.com> (http://radivarig.github.io)",
"license": "MIT",
"main": "./exports.js",
"main": "./dist/main.js",
"scripts": {
"dev": "./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.config.js --progress --colors"
"start": "webpack-dev-server --mode development --open",
"build": "webpack --mode production"
},

@@ -23,22 +24,19 @@ "repository": {

"devDependencies": {
"babel": "^5.8.23",
"babel-loader": "^5.3.2",
"babel-plugin-typecheck": "^1.3.0",
"css-loader": "^0.19.0",
"flowcheck": "^0.2.7",
"flowcheck-loader": "^1.0.0",
"history": "^1.13.0",
"react-router": "^1.0.0-rc3",
"style-loader": "^0.12.4",
"webpack": "^1.8.11",
"webpack-dev-server": "^1.8.2"
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.10",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.0.6",
"react-dom": "^16.2.0",
"style-loader": "^0.20.2",
"webpack": "^4.1.0",
"webpack-cli": "^2.0.10",
"webpack-dev-server": "^3.1.0"
},
"peerDependencies": {
"react": ">=0.14.1",
"react-dom": ">=0.14.1"
},
"dependencies": {
"jsx-loader": "^0.13.2",
"react-timer-mixin": "^0.13.3"
"react": "^16.2.0"
}
}

@@ -9,6 +9,4 @@ # react-speed-reader

`npm install react-speed-reader` (peer dependencies: `react react-dom`)
`npm install react-speed-reader`
for React **v0.13.3** `npm install react-speed-reader@1.0.3`
### Demo

@@ -20,5 +18,4 @@

npm install
npm run dev
npm start
```
open `localhost:8080`

@@ -25,0 +22,0 @@ ### Updates

@@ -1,22 +0,27 @@

var React = require('react')
var TimerMixin = require('react-timer-mixin')
import React from 'react'
import PropTypes from 'prop-types'
var SpeedReader = React.createClass({
mixins: [ TimerMixin ]
, propTypes: {
inputText: React.PropTypes.string.isRequired
, renderReader: React.PropTypes.func.isRequired
, isPlaying: React.PropTypes.bool.isRequired
, speed: React.PropTypes.number.isRequired
, chunk: React.PropTypes.number
class SpeedReader extends React.Component {
static propTypes = {
inputText: PropTypes.string.isRequired,
renderReader: PropTypes.func.isRequired,
isPlaying: PropTypes.bool.isRequired,
speed: PropTypes.number.isRequired,
chunk: PropTypes.number,
}
, getDefaultProps: function() {
return {
chunk: 1
}
static defaultProps = {
chunk: 1,
}
, getInitialState: function() {
var words = this.getWords(this.props.inputText)
var currentText = words.slice(0, this.props.chunk).join(' ')
constructor (props) {
super (props)
this.state = this.getDefaultState (props)
}
getDefaultState = (props) => {
var words = this.getWords(props.inputText)
var currentText = words.slice(0, props.chunk).join(' ')
return Object.assign(this.getWordParts(currentText), {

@@ -28,3 +33,4 @@ current: 0

}
, componentWillReceiveProps: function(nextProps) {
componentWillReceiveProps = (nextProps) => {
if (!this.props.isPlaying && nextProps.isPlaying)

@@ -39,3 +45,3 @@ this.loop()

if(this.props.reset !== nextProps.reset) {
this.setState(this.getInitialState)
this.setState(this.getDefaultState(nextProps))

@@ -51,3 +57,4 @@ if (this.props.progressCallback)

}
, handleSetProgress: function(setProgress) {
handleSetProgress = (setProgress) => {
var l = this.state.words.length -1

@@ -76,12 +83,18 @@ if (setProgress.skipFor) {

}
, getWords: function(sentence) {
getWords = (sentence) => {
return sentence.split(/\s+/).filter(Boolean)
}
, componentDidMount: function() {
componentDidMount = () => {
this.loop()
}
, offset: 0
, blank: 0
, lastLoopId: undefined
, getWordParts: function(currentText) {
offset: 0
blank: 0
lastLoopId: undefined
getWordParts = (currentText) => {
var word = currentText.split('')

@@ -95,3 +108,4 @@ var pivot = this.pivot(currentText)

}
, loop: function(opts) {
loop = (opts) => {
opts = opts || {}

@@ -101,3 +115,3 @@ var self = this

clearTimeout(this.lastLoopId)
this.lastLoopId = this.setTimeout(function() {
this.lastLoopId = setTimeout(function() {
if( !opts.skip &&!opts.skipFor && !self.props.isPlaying ) return

@@ -163,11 +177,13 @@

}
, pivot: function(x) {
pivot = (x) => {
return (x.length != 1) ? Math.floor(x.length/7 +1) : 0
}
, render: function() {
render = () => {
return this.props.renderReader(this.props, this.state)
}
})
}
module.exports = SpeedReader
export default SpeedReader

@@ -1,7 +0,6 @@

var React = require('react')
import React from 'react'
import SpeedReader from './SpeedReader.jsx'
var SpeedReader = require('./SpeedReader.jsx')
var SpeedReaderViewer = React.createClass({
getInitialState: function() {
class SpeedReaderViewer extends React.Component {
getDefaultState = (props) => {
return {

@@ -16,3 +15,6 @@ inputText: 'Science, what is it all about?\nTechmology, what is that all about?\nIs it good?\nIs it wacked?\nIs it good, is it wacked?\nWhat is it all about?\n'

}
, toggleIsPlaying: function() {
state = this.getDefaultState()
toggleIsPlaying = () => {
document.activeElement.blur()

@@ -22,3 +24,4 @@ var isPlaying = this.state.isPlaying

}
, reset: function(opts) {
reset = (opts) => {
if ( !(opts || {}).skipBlur )

@@ -31,9 +34,12 @@ document.activeElement.blur()

}
, increaseChunk: function() {
increaseChunk = () => {
this.alterChunk(1)
}
, decreaseChunk: function() {
decreaseChunk = () => {
this.alterChunk(-1)
}
, setInputText: function(e) {
setInputText = (e) => {
var self = this

@@ -43,8 +49,10 @@ this.setState({inputText: e.target.value},

}
, setSpeed: function(e) {
setSpeed = (e) => {
var v = e.target ? e.target.value : e
if(isNaN(v) || v < 0) return
this.setState({speed: parseInt(v || 0)}, this.reset)
this.setState({speed: parseInt(v || 0)}, ()=>this.reset ({skipBlur:true}))
}
, alterChunk: function(x) {
alterChunk = (x) => {
document.activeElement.blur()

@@ -54,3 +62,4 @@ var chunk = this.clamp(this.state.chunk +x, 1, 3)

}
, clamp: function(x, min, max) {
clamp = (x, min, max) => {
if(x < min) return min

@@ -60,7 +69,10 @@ if(x > max) return max

}
, progress: function(x) {
progress = (x) => {
this.setState({progress: x})
}
, dragTarget: undefined
, setProgressPercent: function(e) {
dragTarget: undefined
setProgressPercent = (e) => {
if (this.dragTarget) {

@@ -77,3 +89,4 @@ window.getSelection().removeAllRanges()

}
, setProgressSkipFor: function(x) {
setProgressSkipFor = (x) => {
var setProgress = {

@@ -85,3 +98,4 @@ skipFor: x

}
, progressBar: function(progress) {
progressBar = (progress) => {
var chunks = 25

@@ -97,3 +111,4 @@ var ratio = progress ? progress.at/progress.of : 0

}
, componentDidMount: function() {
componentDidMount = () => {
document.addEventListener('mousemove', this.setProgressPercent)

@@ -103,3 +118,4 @@ document.addEventListener('click', this.removeDragTarget)

}
, componentWillUnmount: function() {
componentWillUnmount = () => {
document.removeEventListener('mousemove', this.setProgressPercent)

@@ -109,3 +125,4 @@ document.removeEventListener('click', this.removeDragTarget)

}
, handleShortcuts: function(e) {
handleShortcuts = (e) => {
if (document.activeElement.tagName !== 'BODY') return

@@ -132,10 +149,13 @@

}
, removeDragTarget: function() {
removeDragTarget = () => {
this.dragTarget = undefined
}
, setDragTarget: function(e) {
setDragTarget = (e) => {
this.dragTarget = e.target
this.setProgressPercent(e)
}
, renderReader: function(props, state) {
renderReader = (props, state) => {
if ( !state.currentText )

@@ -161,3 +181,4 @@ return <span>&nbsp;</span>

}
, render: function() {
render = () => {
var self = this

@@ -196,3 +217,3 @@

inputText={this.state.inputText}
speed={this.state.speed || this.getInitialState().speed}
speed={this.state.speed || this.getDefaultState().speed}
isPlaying={this.state.isPlaying}

@@ -232,3 +253,3 @@ setProgress={this.state.setProgress}

value={this.state.speed || ''}
placeholder={this.getInitialState().speed}
placeholder={this.getDefaultState().speed}
onChange={this.setSpeed}

@@ -254,4 +275,4 @@ />

}
})
}
module.exports = SpeedReaderViewer
export default SpeedReaderViewer

@@ -0,14 +1,45 @@

const HtmlWebPackPlugin = require("html-webpack-plugin")
module.exports = {
entry: "./src/entry.js",
entry: {
main: __dirname + "/src/SpeedReader.jsx",
viewer: __dirname + "/src/index.js",
},
output: {
path: "./",
filename: "bundle.js"
filename: "[name].js",
path: __dirname + "/dist",
library: "react-speed-reader",
libraryTarget: "umd",
},
devtool: "source-map",
module: {
loaders: [
{ test: /\.jsx?$/, loaders: ['babel', 'flowcheck', 'babel?blacklist=flow'], exclude: /node_modules/ }
, { test: /\.css$/, loaders: ['style-loader', 'css-loader'], exclude: /node_modules/ }
]
}
rules: [
{
test: /\.jsx?$/,
exclude: [/node_modules/],
use: {
loader: "babel-loader",
}
},
{
test: /\.html$/,
use: [
{
loader: "html-loader",
options: { minimize: true },
}
]
},
],
},
plugins: [
new HtmlWebPackPlugin({
template: "./src/index.html",
filename: "./index.html",
})
],
}

Sorry, the diff of this file is not supported yet