react-speed-reader
Advanced tools
Comparing version
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["react-speed-reader"]=t():e["react-speed-reader"]=t()}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";function n(e){return function(){return e}}var o=function(){};o.thatReturns=n,o.thatReturnsFalse=n(!1),o.thatReturnsTrue=n(!0),o.thatReturnsNull=n(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,r){"use strict";e.exports=r(8)},function(e,t,r){"use strict";e.exports={}},function(e,t,r){"use strict";var n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(e){n[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var r,i,u=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),a=1;a<arguments.length;a++){for(var c in r=Object(arguments[a]))o.call(r,c)&&(u[c]=r[c]);if(n){i=n(r);for(var p=0;p<i.length;p++)s.call(r,i[p])&&(u[i[p]]=r[i[p]])}}return u}},function(e,t,r){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,r){"use strict";var n=function(e){};e.exports=function(e,t,r,o,s,i,u,a){if(n(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var p=[r,o,s,i,u,a],l=0;(c=new Error(t.replace(/%s/g,function(){return p[l++]}))).name="Invariant Violation"}throw c.framesToPop=1,c}}},function(e,t,r){"use strict";var n=r(0),o=r(5),s=r(4);e.exports=function(){function e(e,t,r,n,i,u){u!==s&&o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var r={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return r.checkPropTypes=n,r.PropTypes=r,r}},function(e,t,r){e.exports=r(6)()},function(e,t,r){"use strict";var n=r(3),o=r(2),s=r(0),i="function"==typeof Symbol&&Symbol.for,u=i?Symbol.for("react.element"):60103,a=i?Symbol.for("react.call"):60104,c=i?Symbol.for("react.return"):60105,p=i?Symbol.for("react.portal"):60106,l=i?Symbol.for("react.fragment"):60107,f="function"==typeof Symbol&&Symbol.iterator;function d(e){for(var t=arguments.length-1,r="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,n=0;n<t;n++)r+="&args[]="+encodeURIComponent(arguments[n+1]);throw(t=Error(r+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.")).name="Invariant Violation",t.framesToPop=1,t}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};function h(e,t,r){this.props=e,this.context=t,this.refs=o,this.updater=r||y}function b(e,t,r){this.props=e,this.context=t,this.refs=o,this.updater=r||y}function v(){}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&d("85"),this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=h.prototype;var g=b.prototype=new v;function m(e,t,r){this.props=e,this.context=t,this.refs=o,this.updater=r||y}g.constructor=b,n(g,h.prototype),g.isPureReactComponent=!0;var k=m.prototype=new v;k.constructor=m,n(k,h.prototype),k.unstable_isAsyncReactComponent=!0,k.render=function(){return this.props.children};var O={current:null},P=Object.prototype.hasOwnProperty,_={key:!0,ref:!0,__self:!0,__source:!0};function j(e,t,r){var n,o={},s=null,i=null;if(null!=t)for(n in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)P.call(t,n)&&!_.hasOwnProperty(n)&&(o[n]=t[n]);var a=arguments.length-2;if(1===a)o.children=r;else if(1<a){for(var c=Array(a),p=0;p<a;p++)c[p]=arguments[p+2];o.children=c}if(e&&e.defaultProps)for(n in a=e.defaultProps)void 0===o[n]&&(o[n]=a[n]);return{$$typeof:u,type:e,key:s,ref:i,props:o,_owner:O.current}}function w(e){return"object"==typeof e&&null!==e&&e.$$typeof===u}var x=/\/+/g,S=[];function R(e,t,r,n){if(S.length){var o=S.pop();return o.result=e,o.keyPrefix=t,o.func=r,o.context=n,o.count=0,o}return{result:e,keyPrefix:t,func:r,context:n,count:0}}function T(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>S.length&&S.push(e)}function E(e,t,r,n){var o=typeof e;"undefined"!==o&&"boolean"!==o||(e=null);var s=!1;if(null===e)s=!0;else switch(o){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case u:case a:case c:case p:s=!0}}if(s)return r(n,e,""===t?"."+C(e,0):t),1;if(s=0,t=""===t?".":t+":",Array.isArray(e))for(var i=0;i<e.length;i++){var l=t+C(o=e[i],i);s+=E(o,l,r,n)}else if(null===e||void 0===e?l=null:l="function"==typeof(l=f&&e[f]||e["@@iterator"])?l:null,"function"==typeof l)for(e=l.call(e),i=0;!(o=e.next()).done;)s+=E(o=o.value,l=t+C(o,i++),r,n);else"object"===o&&d("31","[object Object]"===(r=""+e)?"object with keys {"+Object.keys(e).join(", ")+"}":r,"");return s}function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function A(e,t){e.func.call(e.context,t,e.count++)}function F(e,t,r){var n=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?$(e,n,r,s.thatReturnsArgument):null!=e&&(w(e)&&(t=o+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(x,"$&/")+"/")+r,e={$$typeof:u,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}),n.push(e))}function $(e,t,r,n,o){var s="";null!=r&&(s=(""+r).replace(x,"$&/")+"/"),t=R(t,s,n,o),null==e||E(e,"",F,t),T(t)}var q={Children:{map:function(e,t,r){if(null==e)return e;var n=[];return $(e,n,null,t,r),n},forEach:function(e,t,r){if(null==e)return e;t=R(null,null,t,r),null==e||E(e,"",A,t),T(t)},count:function(e){return null==e?0:E(e,"",s.thatReturnsNull,null)},toArray:function(e){var t=[];return $(e,t,null,s.thatReturnsArgument),t},only:function(e){return w(e)||d("143"),e}},Component:h,PureComponent:b,unstable_AsyncComponent:m,Fragment:l,createElement:j,cloneElement:function(e,t,r){var o=n({},e.props),s=e.key,i=e.ref,a=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,a=O.current),void 0!==t.key&&(s=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(p in t)P.call(t,p)&&!_.hasOwnProperty(p)&&(o[p]=void 0===t[p]&&void 0!==c?c[p]:t[p])}var p=arguments.length-2;if(1===p)o.children=r;else if(1<p){c=Array(p);for(var l=0;l<p;l++)c[l]=arguments[l+2];o.children=c}return{$$typeof:u,type:e.type,key:s,ref:i,props:o,_owner:a}},createFactory:function(e){var t=j.bind(null,e);return t.type=e,t},isValidElement:w,version:"16.2.0",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:O,assign:n}},I=Object.freeze({default:q}),M=I&&q||I;e.exports=M.default?M.default:M},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s(r(1)),o=s(r(7));function s(e){return e&&e.__esModule?e:{default:e}}var i=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.call(r),r.state=r.getDefaultState(e),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,n.default.Component),t}();i.propTypes={inputText:o.default.string.isRequired,renderReader:o.default.func.isRequired,isPlaying:o.default.bool.isRequired,speed:o.default.number.isRequired,chunk:o.default.number},i.defaultProps={chunk:1};var u=function(){var e=this;this.getDefaultState=function(t){var r=e.getWords(t.inputText),n=r.slice(0,t.chunk).join(" ");return Object.assign(e.getWordParts(n),{current:0,words:r,currentText:n})},this.componentWillReceiveProps=function(t){!e.props.isPlaying&&t.isPlaying&&e.loop(),e.props.setProgress&&e.props.setProgress.timestamp!==t.setProgress.timestamp&&e.handleSetProgress(t.setProgress),e.props.reset!==t.reset&&(e.setState(e.getDefaultState(t)),e.props.progressCallback&&e.props.progressCallback({at:0,of:e.state.words.length||1}),e.loop())},this.handleSetProgress=function(t){var r=e.state.words.length-1;if(t.skipFor){var n=e.state.current+t.skipFor;n<0&&(n=0),n>r&&(n=r),e.setState({current:n})}else{if(!t.percent)return;var o=t.percent;o<0&&(o=0),o>100&&(o=100),e.setState({current:Math.floor(o/100*r)})}e.offset=0,e.blank=0,e.loop({skip:!0,skipFor:void 0!==t.skipFor,skipPercent:0==o||0==n})},this.getWords=function(e){return e.split(/\s+/).filter(Boolean)},this.componentDidMount=function(){e.loop()},this.getWordParts=function(t){var r=t.split(""),n=e.pivot(t);return{pre:r.slice(0,n),mid:r[n],post:r.slice(n+1)}},this.loop=function(t){var r=e,n=(t=t||{}).skip?0:6e4/e.props.speed;clearTimeout(e.lastLoopId),e.lastLoopId=setTimeout(function(){if(t.skip||t.skipFor||r.props.isPlaying){if(r.blank)return r.setState({currentText:"",pre:"",mid:"",post:""}),r.offset=r.blank-n,r.blank=0,r.loop();var e=r.props.chunk,o=r.state.current+e,s=r.state.words,i=s.length-1,u=o-(e<i?e:i),a=s.slice(u,o);if(r.props.trim)for(var c=0;c<a.length;++c){if(-1!=a[c].search(r.props.trim.regex)){var p=c+1;a=a.slice(0,p),o=r.state.current+p;break}}var l=a.join(" ");r.props.offset&&r.props.offset.regex.test(l)?r.offset=(r.props.offset.duration||1)*n:r.offset=0,r.props.blank&&r.props.blank.regex.test(l)&&(r.blank=(r.props.blank.duration||1)*n),r.setState(Object.assign(r.getWordParts(l),{currentText:l,current:t.skip?r.state.current:o})),u+=t.skipPercent?0:e;var f=i+1;r.props.progressCallback&&r.props.progressCallback({at:u>f?f:u,of:f||1}),u<f?t.skip&&!t.skipFor||r.loop():r.props.hasEndedCallback&&r.props.hasEndedCallback()}},n+e.offset)},this.pivot=function(e){return 1!=e.length?Math.floor(e.length/7+1):0},this.render=function(){return e.props.renderReader(e.props,e.state)}};t.default=i}])}); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("prop-types"),require("react")):"function"==typeof define&&define.amd?define(["prop-types","react"],t):"object"==typeof exports?exports.SpeedReader=t(require("prop-types"),require("react")):e.SpeedReader=t(e["prop-types"],e.react)}(window,function(e,t){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=2)}([function(t,r){t.exports=e},function(e,r){e.exports=t},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(r(1)),n=s(r(0));function s(e){return e&&e.__esModule?e:{default:e}}var p=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.getDefaultState=function(){var e=r.getWords(r.props.inputText),t=e.slice(0,r.props.chunk).join(" ");return Object.assign(r.getWordParts(t),{current:0,words:e,currentText:t})},r.componentWillReceiveProps=function(e){!r.props.isPlaying&&e.isPlaying&&r.loop(),r.props.setProgress&&r.props.setProgress.timestamp!==e.setProgress.timestamp&&r.handleSetProgress(e.setProgress),r.props.reset!==e.reset&&(r.setState(r.getDefaultState(e)),r.props.progressCallback&&r.props.progressCallback({at:0,of:r.state.words.length||1}),r.loop())},r.handleSetProgress=function(e){var t=r.state.words.length-1,o=void 0,n=void 0;if(e.skipFor)(o=r.state.current+e.skipFor)<0&&(o=0),o>t&&(o=t),r.setState({current:o});else{if(!e.percent)return;(n=e.percent)<0&&(n=0),n>100&&(n=100),r.setState({current:Math.floor(n/100*t)})}r.offset=0,r.blank=0,r.loop({skip:!0,skipFor:void 0!==e.skipFor,skipPercent:0===n||0===o})},r.getWords=function(e){return e.split(/\s+/).filter(Boolean)},r.componentDidMount=function(){r.loop()},r.getWordParts=function(e){var t=e.split(""),o=r.pivot(e);return{pre:t.slice(0,o),mid:t[o],post:t.slice(o+1)}},r.loop=function(e){var t=(e=e||{}).skip?0:6e4/r.props.speed;clearTimeout(r.lastLoopId),r.lastLoopId=setTimeout(function(){if(e.skip||e.skipFor||r.props.isPlaying){if(r.blank)return r.setState({currentText:"",pre:"",mid:"",post:""}),r.offset=r.blank-t,r.blank=0,r.loop();var o=r.props.chunk,n=r.state.current+o,s=r.state.words,p=s.length-1,i=n-(o<p?o:p),a=s.slice(i,n);if(r.props.trim)for(var u=0;u<a.length;++u){if(-1!==a[u].search(r.props.trim.regex)){var c=u+1;a=a.slice(0,c),n=r.state.current+c;break}}var l=a.join(" ");r.props.offset&&r.props.offset.regex.test(l)?r.offset=(r.props.offset.duration||1)*t:r.offset=0,r.props.blank&&r.props.blank.regex.test(l)&&(r.blank=(r.props.blank.duration||1)*t),r.setState(Object.assign(r.getWordParts(l),{currentText:l,current:e.skip?r.state.current:n})),i+=e.skipPercent?0:o;var f=p+1;r.props.progressCallback&&r.props.progressCallback({at:i>f?f:i,of:f||1}),i<f?e.skip&&!e.skipFor||r.loop():r.props.hasEndedCallback&&r.props.hasEndedCallback()}},t+r.offset)},r.pivot=function(e){return 1!==e.length?Math.floor(e.length/7+1):0},r.render=function(){return r.props.renderReader(r.props,r.state)},r.state=r.getDefaultState(),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.default.Component),t}();p.propTypes={inputText:n.default.string.isRequired,renderReader:n.default.func.isRequired,isPlaying:n.default.bool.isRequired,speed:n.default.number.isRequired,chunk:n.default.number},p.defaultProps={chunk:1},t.default=p}])}); | ||
//# sourceMappingURL=main.js.map |
{ | ||
"name": "react-speed-reader", | ||
"version": "1.2.1", | ||
"version": "1.3.0", | ||
"description": "Speed Reader component for React", | ||
@@ -9,3 +9,4 @@ "author": "Reslav Hollos <reslav.hollos@gmail.com> (http://radivarig.github.io)", | ||
"scripts": { | ||
"start": "webpack-dev-server --mode development --open", | ||
"prepublish": "npm run build", | ||
"dev": "NODE_ENV=development webpack-dev-server --mode development ./src/viewer.js", | ||
"build": "webpack --mode production" | ||
@@ -26,2 +27,3 @@ }, | ||
"babel-core": "^6.26.0", | ||
"babel-eslint": "^8.2.2", | ||
"babel-loader": "^7.1.4", | ||
@@ -32,5 +34,8 @@ "babel-plugin-transform-class-properties": "^6.24.1", | ||
"css-loader": "^0.28.10", | ||
"eslint": "^4.18.2", | ||
"eslint-loader": "^2.0.0", | ||
"eslint-plugin-jsx-control-statements": "^2.2.0", | ||
"eslint-plugin-react": "^7.7.0", | ||
"html-loader": "^0.5.5", | ||
"html-webpack-plugin": "^3.0.6", | ||
"react-dom": "^16.2.0", | ||
"style-loader": "^0.20.2", | ||
@@ -42,4 +47,6 @@ "webpack": "^4.1.0", | ||
"peerDependencies": { | ||
"react": "^16.2.0" | ||
"prop-types": "^15.5.0", | ||
"react-dom": "^15.5.0", | ||
"react": "^15.5.0" | ||
} | ||
} |
@@ -17,3 +17,3 @@ # react-speed-reader | ||
npm install | ||
npm start | ||
npm run dev | ||
``` | ||
@@ -20,0 +20,0 @@ |
@@ -1,15 +0,15 @@ | ||
import React from 'react' | ||
import PropTypes from 'prop-types' | ||
import React from "react" | ||
import PropTypes from "prop-types" | ||
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, | ||
"inputText": PropTypes.string.isRequired, | ||
"renderReader": PropTypes.func.isRequired, | ||
"isPlaying": PropTypes.bool.isRequired, | ||
"speed": PropTypes.number.isRequired, | ||
"chunk": PropTypes.number, | ||
} | ||
static defaultProps = { | ||
chunk: 1, | ||
"chunk": 1, | ||
} | ||
@@ -20,13 +20,13 @@ | ||
this.state = this.getDefaultState (props) | ||
this.state = this.getDefaultState () | ||
} | ||
getDefaultState = (props) => { | ||
var words = this.getWords(props.inputText) | ||
var currentText = words.slice(0, props.chunk).join(' ') | ||
getDefaultState = () => { | ||
const words = this.getWords (this.props.inputText) | ||
const currentText = words.slice (0, this.props.chunk).join (" ") | ||
return Object.assign(this.getWordParts(currentText), { | ||
current: 0 | ||
, words: words | ||
, currentText: currentText | ||
return Object.assign (this.getWordParts (currentText), { | ||
"current": 0, | ||
words, | ||
currentText, | ||
}) | ||
@@ -37,3 +37,3 @@ } | ||
if (!this.props.isPlaying && nextProps.isPlaying) | ||
this.loop() | ||
this.loop () | ||
@@ -43,14 +43,14 @@ if (this.props.setProgress && | ||
nextProps.setProgress.timestamp) | ||
this.handleSetProgress(nextProps.setProgress) | ||
this.handleSetProgress (nextProps.setProgress) | ||
if(this.props.reset !== nextProps.reset) { | ||
this.setState(this.getDefaultState(nextProps)) | ||
this.setState (this.getDefaultState (nextProps)) | ||
if (this.props.progressCallback) | ||
this.props.progressCallback({ | ||
at: 0 | ||
, of: this.state.words.length || 1 | ||
this.props.progressCallback ({ | ||
"at": 0, | ||
"of": this.state.words.length || 1, | ||
}) | ||
this.loop() | ||
this.loop () | ||
} | ||
@@ -60,14 +60,15 @@ } | ||
handleSetProgress = (setProgress) => { | ||
var l = this.state.words.length -1 | ||
const l = this.state.words.length - 1 | ||
let current, percent | ||
if (setProgress.skipFor) { | ||
var current = this.state.current +setProgress.skipFor | ||
current = this.state.current + setProgress.skipFor | ||
if (current < 0) current = 0 | ||
if (current > l) current = l | ||
this.setState({current: current}) | ||
this.setState ({ current }) | ||
} | ||
else if (setProgress.percent) { | ||
var percent = setProgress.percent | ||
percent = setProgress.percent | ||
if (percent < 0) percent = 0 | ||
if (percent > 100) percent = 100 | ||
this.setState({current: Math.floor(percent/100*l)}) | ||
this.setState ({ "current": Math.floor (percent / 100 * l) }) | ||
} | ||
@@ -78,15 +79,13 @@ else return | ||
this.blank = 0 | ||
this.loop({ | ||
skip: true | ||
, skipFor: setProgress.skipFor !== undefined | ||
, skipPercent: percent == 0 || current == 0 | ||
this.loop ({ | ||
"skip": true, | ||
"skipFor": setProgress.skipFor !== undefined, | ||
"skipPercent": percent === 0 || current === 0, | ||
}) | ||
} | ||
getWords = (sentence) => { | ||
return sentence.split(/\s+/).filter(Boolean) | ||
} | ||
getWords = (sentence) => sentence.split (/\s+/).filter (Boolean) | ||
componentDidMount = () => { | ||
this.loop() | ||
this.loop () | ||
} | ||
@@ -101,8 +100,8 @@ | ||
getWordParts = (currentText) => { | ||
var word = currentText.split('') | ||
var pivot = this.pivot(currentText) | ||
const word = currentText.split ("") | ||
const pivot = this.pivot (currentText) | ||
return { | ||
pre: word.slice(0, pivot) | ||
, mid: word[pivot] | ||
, post: word.slice(pivot +1) | ||
"pre": word.slice (0, pivot), | ||
"mid": word[pivot], | ||
"post": word.slice (pivot + 1), | ||
} | ||
@@ -113,30 +112,29 @@ } | ||
opts = opts || {} | ||
var self = this | ||
var ms = opts.skip ? 0 : 60000/this.props.speed | ||
clearTimeout(this.lastLoopId) | ||
this.lastLoopId = setTimeout(function() { | ||
if( !opts.skip &&!opts.skipFor && !self.props.isPlaying ) return | ||
const ms = opts.skip ? 0 : 60000 / this.props.speed | ||
clearTimeout (this.lastLoopId) | ||
this.lastLoopId = setTimeout (() => { | ||
if(!opts.skip && !opts.skipFor && !this.props.isPlaying) return | ||
if (self.blank) { | ||
self.setState({currentText: '', pre: '', mid: '', post: ''}) | ||
self.offset = self.blank -ms | ||
self.blank = 0 | ||
return self.loop() | ||
if (this.blank) { | ||
this.setState ({ "currentText": "", "pre": "", "mid": "", "post": "" }) | ||
this.offset = this.blank - ms | ||
this.blank = 0 | ||
return this.loop () | ||
} | ||
var chunk = self.props.chunk | ||
var current = self.state.current +chunk | ||
var words = self.state.words | ||
var l = words.length -1 | ||
const chunk = this.props.chunk | ||
let current = this.state.current + chunk | ||
const words = this.state.words | ||
const l = words.length - 1 | ||
var currentStart = current -(chunk < l ? chunk : l) | ||
var currentTextWords = words.slice(currentStart, current) | ||
let currentStart = current - (chunk < l ? chunk : l) | ||
let currentTextWords = words.slice (currentStart, current) | ||
if(self.props.trim) { | ||
for(var i = 0; i < currentTextWords.length; ++i) { | ||
var w = currentTextWords[i] | ||
if(w.search(self.props.trim.regex) != -1) { | ||
var cnt = i +1 | ||
currentTextWords = currentTextWords.slice(0, cnt) | ||
current = self.state.current +cnt | ||
if(this.props.trim) { | ||
for(let i = 0; i < currentTextWords.length; ++i) { | ||
const w = currentTextWords[i] | ||
if(w.search (this.props.trim.regex) !== -1) { | ||
const cnt = i + 1 | ||
currentTextWords = currentTextWords.slice (0, cnt) | ||
current = this.state.current + cnt | ||
break | ||
@@ -146,14 +144,14 @@ } | ||
} | ||
var currentText = currentTextWords.join(' ') | ||
const currentText = currentTextWords.join (" ") | ||
if (self.props.offset && self.props.offset.regex.test(currentText)) | ||
self.offset = (self.props.offset.duration || 1)*ms | ||
else self.offset = 0 | ||
if (this.props.offset && this.props.offset.regex.test (currentText)) | ||
this.offset = (this.props.offset.duration || 1) * ms | ||
else this.offset = 0 | ||
if (self.props.blank && self.props.blank.regex.test(currentText)) | ||
self.blank = (self.props.blank.duration || 1)*ms | ||
if (this.props.blank && this.props.blank.regex.test (currentText)) | ||
this.blank = (this.props.blank.duration || 1) * ms | ||
self.setState(Object.assign(self.getWordParts(currentText), { | ||
currentText: currentText | ||
, current: opts.skip ? self.state.current : current | ||
this.setState (Object.assign (this.getWordParts (currentText), { | ||
currentText, | ||
"current": opts.skip ? this.state.current : current, | ||
})) | ||
@@ -163,26 +161,21 @@ | ||
var wordsCount = l +1 | ||
if (self.props.progressCallback) | ||
self.props.progressCallback({ | ||
at: currentStart > wordsCount ? wordsCount : currentStart | ||
, of: wordsCount || 1 | ||
const wordsCount = l + 1 | ||
if (this.props.progressCallback) | ||
this.props.progressCallback ({ | ||
"at": currentStart > wordsCount ? wordsCount : currentStart, | ||
"of": wordsCount || 1, | ||
}) | ||
if(currentStart < wordsCount) { | ||
if ( !opts.skip || opts.skipFor) self.loop() | ||
if (!opts.skip || opts.skipFor) this.loop () | ||
} | ||
else { | ||
if (self.props.hasEndedCallback) | ||
self.props.hasEndedCallback() | ||
} | ||
}, ms +this.offset) | ||
else if (this.props.hasEndedCallback) | ||
this.props.hasEndedCallback () | ||
}, ms + this.offset) | ||
} | ||
pivot = (x) => { | ||
return (x.length != 1) ? Math.floor(x.length/7 +1) : 0 | ||
} | ||
//eslint-disable-next-line | ||
pivot = (x) => (x.length !== 1) ? Math.floor ((x.length / 7) + 1) : 0 | ||
render = () => { | ||
return this.props.renderReader(this.props, this.state) | ||
} | ||
render = () => this.props.renderReader (this.props, this.state) | ||
@@ -189,0 +182,0 @@ } |
@@ -0,7 +1,10 @@ | ||
const path = require('path') | ||
const packageJson = require(path.resolve(__dirname, "package.json")) | ||
const HtmlWebPackPlugin = require("html-webpack-plugin") | ||
const mainFile = "SpeedReader.jsx" | ||
module.exports = { | ||
entry: { | ||
main: __dirname + "/src/SpeedReader.jsx", | ||
viewer: __dirname + "/src/index.js", | ||
main: path.resolve(__dirname, "src", mainFile), | ||
}, | ||
@@ -11,7 +14,9 @@ | ||
filename: "[name].js", | ||
path: __dirname + "/dist", | ||
library: "react-speed-reader", | ||
library: mainFile.substring (0, mainFile.indexOf(".")), | ||
libraryTarget: "umd", | ||
}, | ||
externals: process.env.NODE_ENV == "development" ? [] : | ||
Object.keys(packageJson.peerDependencies), | ||
devtool: "source-map", | ||
@@ -26,3 +31,3 @@ | ||
loader: "babel-loader", | ||
} | ||
}, | ||
}, | ||
@@ -35,5 +40,16 @@ { | ||
options: { minimize: true }, | ||
} | ||
] | ||
}, | ||
], | ||
}, | ||
{ | ||
enforce: "pre", | ||
test: /\.jsx?$/, | ||
exclude: /node_modules/, | ||
use: [ | ||
{ | ||
loader: "eslint-loader", | ||
options: { fix: true } | ||
}, | ||
], | ||
}, | ||
], | ||
@@ -44,6 +60,5 @@ }, | ||
new HtmlWebPackPlugin({ | ||
template: "./src/index.html", | ||
filename: "./index.html", | ||
template: path.resolve (__dirname, "src", "index.html"), | ||
}) | ||
], | ||
} |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
41186
39.24%14
16.67%3
200%17
30.77%434
-5.45%2
100%2
Infinity%1
Infinity%