Added tests for helpers and components. All react components are now ES5.
This commit is contained in:
@@ -1,6 +1,4 @@
|
|||||||
var React = require('react');
|
var React = require('react');
|
||||||
var ReactAddons = require('react/addons');
|
|
||||||
var ReactCSSTransitionGroup = ReactAddons.addons.CSSTransitionGroup;
|
|
||||||
var classNames = require('classnames');
|
var classNames = require('classnames');
|
||||||
|
|
||||||
var Alert = React.createClass({
|
var Alert = React.createClass({
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
//jshint esnext:true
|
|
||||||
|
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
|
|
||||||
class MainList extends React.Component {
|
var MainList = React.createClass({
|
||||||
componentDidMount() {
|
|
||||||
|
|
||||||
}
|
_openOptionsPage: function() {
|
||||||
|
|
||||||
_openOptionsPage() {
|
|
||||||
if (chrome.runtime.openOptionsPage) {
|
if (chrome.runtime.openOptionsPage) {
|
||||||
// New way to open options pages, if supported (Chrome 42+).
|
// New way to open options pages, if supported (Chrome 42+).
|
||||||
chrome.runtime.openOptionsPage();
|
chrome.runtime.openOptionsPage();
|
||||||
@@ -15,14 +10,17 @@ class MainList extends React.Component {
|
|||||||
// Reasonable fallback.
|
// Reasonable fallback.
|
||||||
window.open(chrome.runtime.getURL('options.html'));
|
window.open(chrome.runtime.getURL('options.html'));
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
render() {
|
render: function() {
|
||||||
var loginLogoutButton = () => {
|
|
||||||
if (this.props.loggedIn === true) {
|
var that = this;
|
||||||
|
|
||||||
|
var loginLogoutButton = function() {
|
||||||
|
if (that.props.loggedIn === true) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<a href="#" className="list-group-item" onClick={this.props.logoutUser}>
|
<a href="#" className="list-group-item" onClick={that.props.logoutUser}>
|
||||||
<i className="fa fa-fw fa-sign-out"></i>
|
<i className="fa fa-fw fa-sign-out"></i>
|
||||||
Logout
|
Logout
|
||||||
</a>
|
</a>
|
||||||
@@ -39,26 +37,26 @@ class MainList extends React.Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// If logging is enabled, display that info to user
|
// If logging is enabled, display that info to user
|
||||||
var loggingStatus = () => {
|
var loggingStatus = function() {
|
||||||
if(this.props.loggingEnabled === true && this.props.loggedIn === true)
|
if(that.props.loggingEnabled === true && that.props.loggedIn === true)
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-xs-12">
|
<div className="col-xs-12">
|
||||||
<p>
|
<p>
|
||||||
<a href="#" onClick={this.props.disableLogging} className="btn btn-danger btn-block">Disable logging</a>
|
<a href="#" onClick={that.props.disableLogging} className="btn btn-danger btn-block">Disable logging</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if(this.props.loggingEnabled === false && this.props.loggedIn === true)
|
else if(that.props.loggingEnabled === false && that.props.loggedIn === true)
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-xs-12">
|
<div className="col-xs-12">
|
||||||
<p>
|
<p>
|
||||||
<a href="#" onClick={this.props.enableLogging} className="btn btn-success btn-block">Enable logging</a>
|
<a href="#" onClick={that.props.enableLogging} className="btn btn-success btn-block">Enable logging</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -66,13 +64,13 @@ class MainList extends React.Component {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var totalTimeLoggedToday = () => {
|
var totalTimeLoggedToday = function() {
|
||||||
if (this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return (
|
return (
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-xs-12">
|
<div className="col-xs-12">
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>{this.props.totalTimeLoggedToday}</p>
|
<p>{that.props.totalTimeLoggedToday}</p>
|
||||||
<small><cite>TOTAL TIME LOGGED TODAY</cite></small>
|
<small><cite>TOTAL TIME LOGGED TODAY</cite></small>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
@@ -100,6 +98,7 @@ class MainList extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export default MainList;
|
});
|
||||||
|
|
||||||
|
module.exports = MainList;
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
//jshint esnext:true
|
|
||||||
|
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
|
|
||||||
class Navbar extends React.Component {
|
var Navbar = React.createClass({
|
||||||
|
|
||||||
render() {
|
render: function() {
|
||||||
|
|
||||||
var signedInAs = () => {
|
var that = this;
|
||||||
if (this.props.loggedIn === true) {
|
|
||||||
|
var signedInAs = function() {
|
||||||
|
if (that.props.loggedIn === true) {
|
||||||
return (
|
return (
|
||||||
<p className="navbar-text">Signed in as <b>{this.props.user.full_name}</b></p>
|
<p className="navbar-text">Signed in as <b>{that.props.user.full_name}</b></p>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var dashboard = () => {
|
var dashboard = function() {
|
||||||
if (this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://wakatime.com/dashboard">
|
<a target="_blank" href="https://wakatime.com/dashboard">
|
||||||
@@ -27,8 +27,8 @@ class Navbar extends React.Component {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var customRules = () => {
|
var customRules = function() {
|
||||||
if (this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://wakatime.com/settings/rules">
|
<a target="_blank" href="https://wakatime.com/settings/rules">
|
||||||
@@ -84,6 +84,6 @@ class Navbar extends React.Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
});
|
||||||
|
|
||||||
export default Navbar;
|
module.exports = Navbar;
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
//jshint esnext:true
|
|
||||||
|
|
||||||
var React = require("react");
|
var React = require("react");
|
||||||
var $ = require('jquery');
|
var $ = require('jquery');
|
||||||
|
|
||||||
@@ -15,13 +13,10 @@ var WakaTimeOriginal = require('../core/WakaTime');
|
|||||||
// Helpers
|
// Helpers
|
||||||
var changeExtensionState = require('../helpers/changeExtensionState');
|
var changeExtensionState = require('../helpers/changeExtensionState');
|
||||||
|
|
||||||
class WakaTime extends React.Component {
|
var WakaTime = React.createClass({
|
||||||
|
|
||||||
constructor(props){
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
super(props);
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
user: {
|
user: {
|
||||||
full_name: null,
|
full_name: null,
|
||||||
email: null,
|
email: null,
|
||||||
@@ -31,21 +26,23 @@ class WakaTime extends React.Component {
|
|||||||
loggingEnabled: config.loggingEnabled,
|
loggingEnabled: config.loggingEnabled,
|
||||||
totalTimeLoggedToday: '0 minutes'
|
totalTimeLoggedToday: '0 minutes'
|
||||||
};
|
};
|
||||||
}
|
},
|
||||||
|
|
||||||
|
componentDidMount: function() {
|
||||||
componentDidMount() {
|
|
||||||
|
|
||||||
var wakatime = new WakaTimeOriginal;
|
var wakatime = new WakaTimeOriginal;
|
||||||
|
|
||||||
wakatime.checkAuth().done(data => {
|
var that = this;
|
||||||
|
|
||||||
|
wakatime.checkAuth().done(function(data) {
|
||||||
|
|
||||||
if (data !== false) {
|
if (data !== false) {
|
||||||
|
|
||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
loggingEnabled: config.loggingEnabled
|
loggingEnabled: config.loggingEnabled
|
||||||
}, (items) => {
|
}, function(items) {
|
||||||
this.setState({loggingEnabled: items.loggingEnabled});
|
that.setState({loggingEnabled: items.loggingEnabled});
|
||||||
|
|
||||||
if (items.loggingEnabled === true) {
|
if (items.loggingEnabled === true) {
|
||||||
changeExtensionState('allGood');
|
changeExtensionState('allGood');
|
||||||
}
|
}
|
||||||
@@ -54,7 +51,7 @@ class WakaTime extends React.Component {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.setState({
|
that.setState({
|
||||||
user: {
|
user: {
|
||||||
full_name: data.full_name,
|
full_name: data.full_name,
|
||||||
email: data.email,
|
email: data.email,
|
||||||
@@ -63,10 +60,10 @@ class WakaTime extends React.Component {
|
|||||||
loggedIn: true
|
loggedIn: true
|
||||||
});
|
});
|
||||||
|
|
||||||
wakatime.getTotalTimeLoggedToday().done((grand_total) => {
|
wakatime.getTotalTimeLoggedToday().done(function(grand_total) {
|
||||||
this.setState({
|
that.setState({
|
||||||
totalTimeLoggedToday: grand_total['text']
|
totalTimeLoggedToday: grand_total['text']
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -74,34 +71,39 @@ class WakaTime extends React.Component {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
},
|
||||||
|
|
||||||
logoutUser() {
|
logoutUser: function() {
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = $.Deferred();
|
||||||
|
|
||||||
|
var that = this;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: config.logoutUserUrl,
|
url: config.logoutUserUrl,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
success: () => {
|
success: function() {
|
||||||
|
|
||||||
deferredObject.resolve(this);
|
deferredObject.resolve(that);
|
||||||
|
|
||||||
},
|
},
|
||||||
error: (xhr, status, err) => {
|
error: (xhr, status, err) => {
|
||||||
|
|
||||||
console.error(config.logoutUserUrl, status, err.toString());
|
console.error(config.logoutUserUrl, status, err.toString());
|
||||||
|
|
||||||
deferredObject.resolve(this);
|
deferredObject.resolve(that);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferredObject.promise();
|
return deferredObject.promise();
|
||||||
}
|
},
|
||||||
|
|
||||||
_logoutUser() {
|
_logoutUser: function() {
|
||||||
this.logoutUser().done(() => {
|
|
||||||
|
|
||||||
this.setState({
|
var that = this;
|
||||||
|
|
||||||
|
this.logoutUser().done(function(){
|
||||||
|
|
||||||
|
that.setState({
|
||||||
user: {
|
user: {
|
||||||
full_name: null,
|
full_name: null,
|
||||||
email: null,
|
email: null,
|
||||||
@@ -114,9 +116,9 @@ class WakaTime extends React.Component {
|
|||||||
changeExtensionState('notSignedIn');
|
changeExtensionState('notSignedIn');
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
_disableLogging() {
|
_disableLogging: function() {
|
||||||
this.setState({
|
this.setState({
|
||||||
loggingEnabled: false
|
loggingEnabled: false
|
||||||
});
|
});
|
||||||
@@ -126,9 +128,9 @@ class WakaTime extends React.Component {
|
|||||||
chrome.storage.sync.set({
|
chrome.storage.sync.set({
|
||||||
loggingEnabled: false
|
loggingEnabled: false
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
_enableLogging() {
|
_enableLogging: function() {
|
||||||
this.setState({
|
this.setState({
|
||||||
loggingEnabled: true
|
loggingEnabled: true
|
||||||
});
|
});
|
||||||
@@ -138,10 +140,9 @@ class WakaTime extends React.Component {
|
|||||||
chrome.storage.sync.set({
|
chrome.storage.sync.set({
|
||||||
loggingEnabled: true
|
loggingEnabled: true
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
|
render: function() {
|
||||||
render() {
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<NavBar
|
<NavBar
|
||||||
@@ -151,12 +152,12 @@ class WakaTime extends React.Component {
|
|||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-12">
|
<div className="col-md-12">
|
||||||
<MainList
|
<MainList
|
||||||
disableLogging={this._disableLogging.bind(this)}
|
disableLogging={this._disableLogging}
|
||||||
enableLogging={this._enableLogging.bind(this)}
|
enableLogging={this._enableLogging}
|
||||||
loggingEnabled={this.state.loggingEnabled}
|
loggingEnabled={this.state.loggingEnabled}
|
||||||
user={this.state.user}
|
user={this.state.user}
|
||||||
totalTimeLoggedToday={this.state.totalTimeLoggedToday}
|
totalTimeLoggedToday={this.state.totalTimeLoggedToday}
|
||||||
logoutUser={this._logoutUser.bind(this)}
|
logoutUser={this._logoutUser}
|
||||||
loggedIn={this.state.loggedIn} />
|
loggedIn={this.state.loggedIn} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -164,6 +165,7 @@ class WakaTime extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export default WakaTime;
|
});
|
||||||
|
|
||||||
|
module.exports = WakaTime;
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ var config = {
|
|||||||
'blacklisted',
|
'blacklisted',
|
||||||
'whitelisted'
|
'whitelisted'
|
||||||
],
|
],
|
||||||
|
// Predefined alert type and text for success and failure.
|
||||||
alert: {
|
alert: {
|
||||||
success: {
|
success: {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
|
|||||||
@@ -15,39 +15,14 @@ React.render(React.createElement(WakaTime, null), document.getElementById('wakat
|
|||||||
|
|
||||||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||||||
},{"./components/WakaTime.react":4,"bootstrap":13,"jquery":26,"react":183}],2:[function(require,module,exports){
|
},{"./components/WakaTime.react":4,"bootstrap":13,"jquery":26,"react":183}],2:[function(require,module,exports){
|
||||||
//jshint esnext:true
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
Object.defineProperty(exports, '__esModule', {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
|
|
||||||
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
|
||||||
|
|
||||||
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
||||||
|
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
|
|
||||||
var MainList = (function (_React$Component) {
|
var MainList = React.createClass({
|
||||||
function MainList() {
|
displayName: 'MainList',
|
||||||
_classCallCheck(this, MainList);
|
|
||||||
|
|
||||||
if (_React$Component != null) {
|
_openOptionsPage: function _openOptionsPage() {
|
||||||
_React$Component.apply(this, arguments);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_inherits(MainList, _React$Component);
|
|
||||||
|
|
||||||
_createClass(MainList, [{
|
|
||||||
key: 'componentDidMount',
|
|
||||||
value: function componentDidMount() {}
|
|
||||||
}, {
|
|
||||||
key: '_openOptionsPage',
|
|
||||||
value: function _openOptionsPage() {
|
|
||||||
if (chrome.runtime.openOptionsPage) {
|
if (chrome.runtime.openOptionsPage) {
|
||||||
// New way to open options pages, if supported (Chrome 42+).
|
// New way to open options pages, if supported (Chrome 42+).
|
||||||
chrome.runtime.openOptionsPage();
|
chrome.runtime.openOptionsPage();
|
||||||
@@ -55,20 +30,20 @@ var MainList = (function (_React$Component) {
|
|||||||
// Reasonable fallback.
|
// Reasonable fallback.
|
||||||
window.open(chrome.runtime.getURL('options.html'));
|
window.open(chrome.runtime.getURL('options.html'));
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}, {
|
|
||||||
key: 'render',
|
render: function render() {
|
||||||
value: function render() {
|
|
||||||
var _this = this;
|
var that = this;
|
||||||
|
|
||||||
var loginLogoutButton = function loginLogoutButton() {
|
var loginLogoutButton = function loginLogoutButton() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
'div',
|
'div',
|
||||||
null,
|
null,
|
||||||
React.createElement(
|
React.createElement(
|
||||||
'a',
|
'a',
|
||||||
{ href: '#', className: 'list-group-item', onClick: _this.props.logoutUser },
|
{ href: '#', className: 'list-group-item', onClick: that.props.logoutUser },
|
||||||
React.createElement('i', { className: 'fa fa-fw fa-sign-out' }),
|
React.createElement('i', { className: 'fa fa-fw fa-sign-out' }),
|
||||||
'Logout'
|
'Logout'
|
||||||
)
|
)
|
||||||
@@ -85,7 +60,7 @@ var MainList = (function (_React$Component) {
|
|||||||
|
|
||||||
// If logging is enabled, display that info to user
|
// If logging is enabled, display that info to user
|
||||||
var loggingStatus = function loggingStatus() {
|
var loggingStatus = function loggingStatus() {
|
||||||
if (_this.props.loggingEnabled === true && _this.props.loggedIn === true) {
|
if (that.props.loggingEnabled === true && that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'row' },
|
{ className: 'row' },
|
||||||
@@ -97,13 +72,13 @@ var MainList = (function (_React$Component) {
|
|||||||
null,
|
null,
|
||||||
React.createElement(
|
React.createElement(
|
||||||
'a',
|
'a',
|
||||||
{ href: '#', onClick: _this.props.disableLogging, className: 'btn btn-danger btn-block' },
|
{ href: '#', onClick: that.props.disableLogging, className: 'btn btn-danger btn-block' },
|
||||||
'Disable logging'
|
'Disable logging'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else if (_this.props.loggingEnabled === false && _this.props.loggedIn === true) {
|
} else if (that.props.loggingEnabled === false && that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'row' },
|
{ className: 'row' },
|
||||||
@@ -115,7 +90,7 @@ var MainList = (function (_React$Component) {
|
|||||||
null,
|
null,
|
||||||
React.createElement(
|
React.createElement(
|
||||||
'a',
|
'a',
|
||||||
{ href: '#', onClick: _this.props.enableLogging, className: 'btn btn-success btn-block' },
|
{ href: '#', onClick: that.props.enableLogging, className: 'btn btn-success btn-block' },
|
||||||
'Enable logging'
|
'Enable logging'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -125,7 +100,7 @@ var MainList = (function (_React$Component) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var totalTimeLoggedToday = function totalTimeLoggedToday() {
|
var totalTimeLoggedToday = function totalTimeLoggedToday() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'row' },
|
{ className: 'row' },
|
||||||
@@ -138,7 +113,7 @@ var MainList = (function (_React$Component) {
|
|||||||
React.createElement(
|
React.createElement(
|
||||||
'p',
|
'p',
|
||||||
null,
|
null,
|
||||||
_this.props.totalTimeLoggedToday
|
that.props.totalTimeLoggedToday
|
||||||
),
|
),
|
||||||
React.createElement(
|
React.createElement(
|
||||||
'small',
|
'small',
|
||||||
@@ -173,49 +148,25 @@ var MainList = (function (_React$Component) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}]);
|
|
||||||
|
|
||||||
return MainList;
|
|
||||||
})(React.Component);
|
|
||||||
|
|
||||||
exports['default'] = MainList;
|
|
||||||
module.exports = exports['default'];
|
|
||||||
|
|
||||||
},{"react":183}],3:[function(require,module,exports){
|
|
||||||
//jshint esnext:true
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
module.exports = MainList;
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
},{"react":183}],3:[function(require,module,exports){
|
||||||
|
"use strict";
|
||||||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
||||||
|
|
||||||
var React = require("react");
|
var React = require("react");
|
||||||
|
|
||||||
var Navbar = (function (_React$Component) {
|
var Navbar = React.createClass({
|
||||||
function Navbar() {
|
displayName: "Navbar",
|
||||||
_classCallCheck(this, Navbar);
|
|
||||||
|
|
||||||
if (_React$Component != null) {
|
render: function render() {
|
||||||
_React$Component.apply(this, arguments);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_inherits(Navbar, _React$Component);
|
var that = this;
|
||||||
|
|
||||||
_createClass(Navbar, [{
|
|
||||||
key: "render",
|
|
||||||
value: function render() {
|
|
||||||
var _this = this;
|
|
||||||
|
|
||||||
var signedInAs = function signedInAs() {
|
var signedInAs = function signedInAs() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
"p",
|
"p",
|
||||||
{ className: "navbar-text" },
|
{ className: "navbar-text" },
|
||||||
@@ -223,14 +174,14 @@ var Navbar = (function (_React$Component) {
|
|||||||
React.createElement(
|
React.createElement(
|
||||||
"b",
|
"b",
|
||||||
null,
|
null,
|
||||||
_this.props.user.full_name
|
that.props.user.full_name
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var dashboard = function dashboard() {
|
var dashboard = function dashboard() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
"li",
|
"li",
|
||||||
null,
|
null,
|
||||||
@@ -245,7 +196,7 @@ var Navbar = (function (_React$Component) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var customRules = function customRules() {
|
var customRules = function customRules() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (that.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
"li",
|
"li",
|
||||||
null,
|
null,
|
||||||
@@ -334,30 +285,13 @@ var Navbar = (function (_React$Component) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}]);
|
|
||||||
|
|
||||||
return Navbar;
|
|
||||||
})(React.Component);
|
|
||||||
|
|
||||||
exports["default"] = Navbar;
|
|
||||||
module.exports = exports["default"];
|
|
||||||
|
|
||||||
},{"react":183}],4:[function(require,module,exports){
|
|
||||||
//jshint esnext:true
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
Object.defineProperty(exports, '__esModule', {
|
|
||||||
value: true
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
module.exports = Navbar;
|
||||||
|
|
||||||
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
},{"react":183}],4:[function(require,module,exports){
|
||||||
|
'use strict';
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
|
||||||
|
|
||||||
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
||||||
|
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
var $ = require('jquery');
|
var $ = require('jquery');
|
||||||
@@ -374,13 +308,11 @@ var WakaTimeOriginal = require('../core/WakaTime');
|
|||||||
// Helpers
|
// Helpers
|
||||||
var changeExtensionState = require('../helpers/changeExtensionState');
|
var changeExtensionState = require('../helpers/changeExtensionState');
|
||||||
|
|
||||||
var WakaTime = (function (_React$Component) {
|
var WakaTime = React.createClass({
|
||||||
function WakaTime(props) {
|
displayName: 'WakaTime',
|
||||||
_classCallCheck(this, WakaTime);
|
|
||||||
|
|
||||||
_get(Object.getPrototypeOf(WakaTime.prototype), 'constructor', this).call(this, props);
|
getInitialState: function getInitialState() {
|
||||||
|
return {
|
||||||
this.state = {
|
|
||||||
user: {
|
user: {
|
||||||
full_name: null,
|
full_name: null,
|
||||||
email: null,
|
email: null,
|
||||||
@@ -390,17 +322,14 @@ var WakaTime = (function (_React$Component) {
|
|||||||
loggingEnabled: config.loggingEnabled,
|
loggingEnabled: config.loggingEnabled,
|
||||||
totalTimeLoggedToday: '0 minutes'
|
totalTimeLoggedToday: '0 minutes'
|
||||||
};
|
};
|
||||||
}
|
},
|
||||||
|
|
||||||
_inherits(WakaTime, _React$Component);
|
componentDidMount: function componentDidMount() {
|
||||||
|
|
||||||
_createClass(WakaTime, [{
|
|
||||||
key: 'componentDidMount',
|
|
||||||
value: function componentDidMount() {
|
|
||||||
var _this = this;
|
|
||||||
|
|
||||||
var wakatime = new WakaTimeOriginal();
|
var wakatime = new WakaTimeOriginal();
|
||||||
|
|
||||||
|
var that = this;
|
||||||
|
|
||||||
wakatime.checkAuth().done(function (data) {
|
wakatime.checkAuth().done(function (data) {
|
||||||
|
|
||||||
if (data !== false) {
|
if (data !== false) {
|
||||||
@@ -408,7 +337,8 @@ var WakaTime = (function (_React$Component) {
|
|||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
loggingEnabled: config.loggingEnabled
|
loggingEnabled: config.loggingEnabled
|
||||||
}, function (items) {
|
}, function (items) {
|
||||||
_this.setState({ loggingEnabled: items.loggingEnabled });
|
that.setState({ loggingEnabled: items.loggingEnabled });
|
||||||
|
|
||||||
if (items.loggingEnabled === true) {
|
if (items.loggingEnabled === true) {
|
||||||
changeExtensionState('allGood');
|
changeExtensionState('allGood');
|
||||||
} else {
|
} else {
|
||||||
@@ -416,7 +346,7 @@ var WakaTime = (function (_React$Component) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_this.setState({
|
that.setState({
|
||||||
user: {
|
user: {
|
||||||
full_name: data.full_name,
|
full_name: data.full_name,
|
||||||
email: data.email,
|
email: data.email,
|
||||||
@@ -426,7 +356,7 @@ var WakaTime = (function (_React$Component) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
wakatime.getTotalTimeLoggedToday().done(function (grand_total) {
|
wakatime.getTotalTimeLoggedToday().done(function (grand_total) {
|
||||||
_this.setState({
|
that.setState({
|
||||||
totalTimeLoggedToday: grand_total['text']
|
totalTimeLoggedToday: grand_total['text']
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -434,39 +364,38 @@ var WakaTime = (function (_React$Component) {
|
|||||||
changeExtensionState('notSignedIn');
|
changeExtensionState('notSignedIn');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}, {
|
|
||||||
key: 'logoutUser',
|
|
||||||
value: function logoutUser() {
|
|
||||||
var _this2 = this;
|
|
||||||
|
|
||||||
|
logoutUser: function logoutUser() {
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = $.Deferred();
|
||||||
|
|
||||||
|
var that = this;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: config.logoutUserUrl,
|
url: config.logoutUserUrl,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
success: function success() {
|
success: function success() {
|
||||||
|
|
||||||
deferredObject.resolve(_this2);
|
deferredObject.resolve(that);
|
||||||
},
|
},
|
||||||
error: function error(xhr, status, err) {
|
error: function error(xhr, status, err) {
|
||||||
|
|
||||||
console.error(config.logoutUserUrl, status, err.toString());
|
console.error(config.logoutUserUrl, status, err.toString());
|
||||||
|
|
||||||
deferredObject.resolve(_this2);
|
deferredObject.resolve(that);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferredObject.promise();
|
return deferredObject.promise();
|
||||||
}
|
},
|
||||||
}, {
|
|
||||||
key: '_logoutUser',
|
_logoutUser: function _logoutUser() {
|
||||||
value: function _logoutUser() {
|
|
||||||
var _this3 = this;
|
var that = this;
|
||||||
|
|
||||||
this.logoutUser().done(function () {
|
this.logoutUser().done(function () {
|
||||||
|
|
||||||
_this3.setState({
|
that.setState({
|
||||||
user: {
|
user: {
|
||||||
full_name: null,
|
full_name: null,
|
||||||
email: null,
|
email: null,
|
||||||
@@ -478,10 +407,9 @@ var WakaTime = (function (_React$Component) {
|
|||||||
|
|
||||||
changeExtensionState('notSignedIn');
|
changeExtensionState('notSignedIn');
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}, {
|
|
||||||
key: '_disableLogging',
|
_disableLogging: function _disableLogging() {
|
||||||
value: function _disableLogging() {
|
|
||||||
this.setState({
|
this.setState({
|
||||||
loggingEnabled: false
|
loggingEnabled: false
|
||||||
});
|
});
|
||||||
@@ -491,10 +419,9 @@ var WakaTime = (function (_React$Component) {
|
|||||||
chrome.storage.sync.set({
|
chrome.storage.sync.set({
|
||||||
loggingEnabled: false
|
loggingEnabled: false
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}, {
|
|
||||||
key: '_enableLogging',
|
_enableLogging: function _enableLogging() {
|
||||||
value: function _enableLogging() {
|
|
||||||
this.setState({
|
this.setState({
|
||||||
loggingEnabled: true
|
loggingEnabled: true
|
||||||
});
|
});
|
||||||
@@ -504,10 +431,9 @@ var WakaTime = (function (_React$Component) {
|
|||||||
chrome.storage.sync.set({
|
chrome.storage.sync.set({
|
||||||
loggingEnabled: true
|
loggingEnabled: true
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}, {
|
|
||||||
key: 'render',
|
render: function render() {
|
||||||
value: function render() {
|
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
'div',
|
'div',
|
||||||
null,
|
null,
|
||||||
@@ -524,25 +450,22 @@ var WakaTime = (function (_React$Component) {
|
|||||||
'div',
|
'div',
|
||||||
{ className: 'col-md-12' },
|
{ className: 'col-md-12' },
|
||||||
React.createElement(MainList, {
|
React.createElement(MainList, {
|
||||||
disableLogging: this._disableLogging.bind(this),
|
disableLogging: this._disableLogging,
|
||||||
enableLogging: this._enableLogging.bind(this),
|
enableLogging: this._enableLogging,
|
||||||
loggingEnabled: this.state.loggingEnabled,
|
loggingEnabled: this.state.loggingEnabled,
|
||||||
user: this.state.user,
|
user: this.state.user,
|
||||||
totalTimeLoggedToday: this.state.totalTimeLoggedToday,
|
totalTimeLoggedToday: this.state.totalTimeLoggedToday,
|
||||||
logoutUser: this._logoutUser.bind(this),
|
logoutUser: this._logoutUser,
|
||||||
loggedIn: this.state.loggedIn })
|
loggedIn: this.state.loggedIn })
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}]);
|
|
||||||
|
|
||||||
return WakaTime;
|
});
|
||||||
})(React.Component);
|
|
||||||
|
|
||||||
exports['default'] = WakaTime;
|
module.exports = WakaTime;
|
||||||
module.exports = exports['default'];
|
|
||||||
|
|
||||||
},{"../config":5,"../core/WakaTime":6,"../helpers/changeExtensionState":8,"./MainList.react":2,"./NavBar.react":3,"jquery":26,"react":183}],5:[function(require,module,exports){
|
},{"../config":5,"../core/WakaTime":6,"../helpers/changeExtensionState":8,"./MainList.react":2,"./NavBar.react":3,"jquery":26,"react":183}],5:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
@@ -590,6 +513,7 @@ var config = {
|
|||||||
theme: 'light',
|
theme: 'light',
|
||||||
// Valid extension states
|
// Valid extension states
|
||||||
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
||||||
|
// Predefined alert type and text for success and failure.
|
||||||
alert: {
|
alert: {
|
||||||
success: {
|
success: {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ var config = {
|
|||||||
theme: 'light',
|
theme: 'light',
|
||||||
// Valid extension states
|
// Valid extension states
|
||||||
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
||||||
|
// Predefined alert type and text for success and failure.
|
||||||
alert: {
|
alert: {
|
||||||
success: {
|
success: {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ React.render(React.createElement(Options, null), document.getElementById('wakati
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
var ReactAddons = require('react/addons');
|
|
||||||
var ReactCSSTransitionGroup = ReactAddons.addons.CSSTransitionGroup;
|
|
||||||
var classNames = require('classnames');
|
var classNames = require('classnames');
|
||||||
|
|
||||||
var Alert = React.createClass({
|
var Alert = React.createClass({
|
||||||
@@ -42,7 +40,7 @@ var Alert = React.createClass({
|
|||||||
|
|
||||||
module.exports = Alert;
|
module.exports = Alert;
|
||||||
|
|
||||||
},{"classnames":18,"react":193,"react/addons":21}],3:[function(require,module,exports){
|
},{"classnames":18,"react":193}],3:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
@@ -407,6 +405,7 @@ var config = {
|
|||||||
theme: 'light',
|
theme: 'light',
|
||||||
// Valid extension states
|
// Valid extension states
|
||||||
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
||||||
|
// Predefined alert type and text for success and failure.
|
||||||
alert: {
|
alert: {
|
||||||
success: {
|
success: {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
|
|||||||
17
tests/components/Alert.react.jest.js
Normal file
17
tests/components/Alert.react.jest.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
jest.dontMock('../../assets/js/components/Alert.react.js');
|
||||||
|
|
||||||
|
describe('Wakatime', function() {
|
||||||
|
var React, Alert, TestUtils, Component;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
// Setup our tools
|
||||||
|
React = require('react/addons');
|
||||||
|
Alert = require('../../assets/js/components/Alert.react.js');
|
||||||
|
TestUtils = React.addons.TestUtils;
|
||||||
|
// Create the React component here using TestUtils and store into Component
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work', function() {
|
||||||
|
expect(2 + 2).toEqual(4);
|
||||||
|
});
|
||||||
|
});
|
||||||
17
tests/components/Options.react.jest.js
Normal file
17
tests/components/Options.react.jest.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
jest.dontMock('../../assets/js/components/Options.react.js');
|
||||||
|
|
||||||
|
describe('Wakatime', function() {
|
||||||
|
var React, Options, TestUtils, Component;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
// Setup our tools
|
||||||
|
React = require('react/addons');
|
||||||
|
Options = require('../../assets/js/components/Options.react.js');
|
||||||
|
TestUtils = React.addons.TestUtils;
|
||||||
|
// Create the React component here using TestUtils and store into Component
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work', function() {
|
||||||
|
expect(2 + 2).toEqual(4);
|
||||||
|
});
|
||||||
|
});
|
||||||
10
tests/helpers/changeExtensionState.spec.js
Normal file
10
tests/helpers/changeExtensionState.spec.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
var chai = require('chai');
|
||||||
|
var expect = chai.expect;
|
||||||
|
|
||||||
|
import changeExtensionState from '../../assets/js/helpers/changeExtensionState';
|
||||||
|
|
||||||
|
describe('changeExtensionState', function() {
|
||||||
|
it('should be a function', function() {
|
||||||
|
expect(changeExtensionState).to.be.a('function');
|
||||||
|
});
|
||||||
|
});
|
||||||
10
tests/helpers/changeExtensionTooltip.spec.js
Normal file
10
tests/helpers/changeExtensionTooltip.spec.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
var chai = require('chai');
|
||||||
|
var expect = chai.expect;
|
||||||
|
|
||||||
|
import changeExtensionTooltip from '../../assets/js/helpers/changeExtensionTooltip';
|
||||||
|
|
||||||
|
describe('changeExtensionTooltip', function() {
|
||||||
|
it('should be a function', function() {
|
||||||
|
expect(changeExtensionTooltip).to.be.a('function');
|
||||||
|
});
|
||||||
|
});
|
||||||
10
tests/helpers/getDomainFromUrl.spec.js
Normal file
10
tests/helpers/getDomainFromUrl.spec.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
var chai = require('chai');
|
||||||
|
var expect = chai.expect;
|
||||||
|
|
||||||
|
import getDomainFromUrl from '../../assets/js/helpers/getDomainFromUrl';
|
||||||
|
|
||||||
|
describe('getDomainFromUrl', function() {
|
||||||
|
it('should be a function', function() {
|
||||||
|
expect(getDomainFromUrl).to.be.a('function');
|
||||||
|
});
|
||||||
|
});
|
||||||
10
tests/helpers/in_array.spec.js
Normal file
10
tests/helpers/in_array.spec.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
var chai = require('chai');
|
||||||
|
var expect = chai.expect;
|
||||||
|
|
||||||
|
import in_array from '../../assets/js/helpers/in_array';
|
||||||
|
|
||||||
|
describe('in_array', function() {
|
||||||
|
it('should be a function', function() {
|
||||||
|
expect(in_array).to.be.a('function');
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user