Minor optimizations.
2
.gitignore
vendored
@@ -27,3 +27,5 @@ node_modules
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
vendor/
|
vendor/
|
||||||
|
|
||||||
|
.idea
|
||||||
15
README.md
@@ -19,11 +19,11 @@ Installation
|
|||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Development instructions
|
## Development instructions
|
||||||
|
|
||||||
@@ -55,10 +55,11 @@ gulp watch
|
|||||||
|
|
||||||
### Load unpacked in Chrome
|
### Load unpacked in Chrome
|
||||||
|
|
||||||
1. Go to `Settings` -> `Extensions`
|
1. Clone repository to disk
|
||||||
2. Enable `Developer mode`
|
2. Go to `Settings` -> `Extensions`
|
||||||
3. Click `Load unpacked extension...`
|
3. Enable `Developer mode`
|
||||||
4. Select repository directory
|
4. Click `Load unpacked extension...`
|
||||||
|
5. Select repository directory
|
||||||
|
|
||||||
### Issues
|
### Issues
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
class UrlHelper {
|
class UrlHelper {
|
||||||
|
|
||||||
static getDomainFromUrl(url)
|
static getDomainFromUrl(url) {
|
||||||
{
|
|
||||||
var parts = url.split('/');
|
var parts = url.split('/');
|
||||||
|
|
||||||
return parts[0] + "//" + parts[2];
|
return parts[0] + "//" + parts[2];
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
var UrlHelper = require('./UrlHelper');
|
import UrlHelper from './UrlHelper.js';
|
||||||
|
import $ from 'jquery';
|
||||||
var $ = require('jquery');
|
import currentTimestamp from './helpers/currentTimestamp.js';
|
||||||
|
import changeExtensionIcon from './helpers/changeExtensionIcon.js';
|
||||||
var currentTimestamp = require('./helpers/currentTimestamp');
|
|
||||||
var changeExtensionIcon = require('./helpers/changeExtensionIcon');
|
|
||||||
|
|
||||||
class WakaTime {
|
class WakaTime {
|
||||||
|
|
||||||
@@ -18,10 +16,9 @@ class WakaTime {
|
|||||||
/**
|
/**
|
||||||
* Checks if the user is logged in.
|
* Checks if the user is logged in.
|
||||||
*
|
*
|
||||||
* @return $.promise()
|
* @returns {*}
|
||||||
*/
|
*/
|
||||||
checkAuth()
|
checkAuth() {
|
||||||
{
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = $.Deferred();
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@@ -46,14 +43,11 @@ class WakaTime {
|
|||||||
/**
|
/**
|
||||||
* Depending on various factors detects the current active tab URL or domain,
|
* Depending on various factors detects the current active tab URL or domain,
|
||||||
* and sends it to WakaTime for logging.
|
* and sends it to WakaTime for logging.
|
||||||
*
|
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
recordHeartbeat()
|
recordHeartbeat() {
|
||||||
{
|
|
||||||
this.checkAuth().done(data => {
|
this.checkAuth().done(data => {
|
||||||
|
|
||||||
if(data !== false){
|
if (data !== false) {
|
||||||
|
|
||||||
// User is logged in.
|
// User is logged in.
|
||||||
// Change extension icon to default color.
|
// Change extension icon to default color.
|
||||||
@@ -61,8 +55,7 @@ class WakaTime {
|
|||||||
|
|
||||||
chrome.idle.queryState(this.detectionIntervalInSeconds, (newState) => {
|
chrome.idle.queryState(this.detectionIntervalInSeconds, (newState) => {
|
||||||
|
|
||||||
if(newState === 'active')
|
if (newState === 'active') {
|
||||||
{
|
|
||||||
// Get current tab URL.
|
// Get current tab URL.
|
||||||
chrome.tabs.query({active: true}, (tabs) => {
|
chrome.tabs.query({active: true}, (tabs) => {
|
||||||
this.sendHeartbeat(tabs[0].url);
|
this.sendHeartbeat(tabs[0].url);
|
||||||
@@ -83,13 +76,13 @@ class WakaTime {
|
|||||||
/**
|
/**
|
||||||
* Creates payload for the heartbeat and returns it as JSON.
|
* Creates payload for the heartbeat and returns it as JSON.
|
||||||
*
|
*
|
||||||
* @param string entity
|
* @param entity
|
||||||
* @param string type 'domain' or 'url'
|
* @param type
|
||||||
* @param boolean debug = false
|
* @param debug
|
||||||
* @return JSON
|
* @returns {*}
|
||||||
|
* @private
|
||||||
*/
|
*/
|
||||||
_preparePayload(entity, type, debug = false)
|
_preparePayload(entity, type, debug = false) {
|
||||||
{
|
|
||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
entity: entity,
|
entity: entity,
|
||||||
type: type,
|
type: type,
|
||||||
@@ -98,18 +91,19 @@ class WakaTime {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a promise with logging type variable.
|
* Returns a promise with logging type variable.
|
||||||
*
|
*
|
||||||
* @return $.promise
|
* @returns {*}
|
||||||
|
* @private
|
||||||
*/
|
*/
|
||||||
_getLoggingType()
|
_getLoggingType() {
|
||||||
{
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = $.Deferred();
|
||||||
|
|
||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
loggingType: this.loggingType
|
loggingType: this.loggingType
|
||||||
}, function(items) {
|
}, function (items) {
|
||||||
deferredObject.resolve(items.loggingType);
|
deferredObject.resolve(items.loggingType);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -120,20 +114,21 @@ class WakaTime {
|
|||||||
* Given the entity and logging type it creates a payload and
|
* Given the entity and logging type it creates a payload and
|
||||||
* sends an ajax post request to the API.
|
* sends an ajax post request to the API.
|
||||||
*
|
*
|
||||||
* @param string entity
|
* @param entity
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
sendHeartbeat(entity)
|
sendHeartbeat(entity) {
|
||||||
{
|
|
||||||
|
var payload = null;
|
||||||
|
|
||||||
this._getLoggingType().done((loggingType) => {
|
this._getLoggingType().done((loggingType) => {
|
||||||
|
|
||||||
// Get only the domain from the entity.
|
// Get only the domain from the entity.
|
||||||
// And send that in heartbeat
|
// And send that in heartbeat
|
||||||
if(loggingType == 'domain') {
|
if (loggingType == 'domain') {
|
||||||
|
|
||||||
var domain = UrlHelper.getDomainFromUrl(entity);
|
var domain = UrlHelper.getDomainFromUrl(entity);
|
||||||
|
|
||||||
var payload = this._preparePayload(domain, 'domain');
|
payload = this._preparePayload(domain, 'domain');
|
||||||
|
|
||||||
console.log(payload);
|
console.log(payload);
|
||||||
|
|
||||||
@@ -142,7 +137,7 @@ class WakaTime {
|
|||||||
}
|
}
|
||||||
// Send entity in heartbeat
|
// Send entity in heartbeat
|
||||||
else if (loggingType == 'url') {
|
else if (loggingType == 'url') {
|
||||||
var payload = this._preparePayload(entity, 'url');
|
payload = this._preparePayload(entity, 'url');
|
||||||
|
|
||||||
console.log(payload);
|
console.log(payload);
|
||||||
|
|
||||||
@@ -155,9 +150,9 @@ class WakaTime {
|
|||||||
/**
|
/**
|
||||||
* Sends AJAX request with payload to the heartbeat API as JSON.
|
* Sends AJAX request with payload to the heartbeat API as JSON.
|
||||||
*
|
*
|
||||||
* @param JSON payload
|
* @param payload
|
||||||
* @param string method = 'POST'
|
* @param method
|
||||||
* @return $.promise
|
* @returns {*}
|
||||||
*/
|
*/
|
||||||
sendAjaxRequestToApi(payload, method = 'POST') {
|
sendAjaxRequestToApi(payload, method = 'POST') {
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
global.jQuery = require('jquery');
|
global.jQuery = require('jquery');
|
||||||
require('bootstrap');
|
require('bootstrap');
|
||||||
|
|
||||||
var React = require('react');
|
import React from 'react';
|
||||||
var WakaTime = require('./components/WakaTime.react');
|
import WakaTime from './components/WakaTime.react.js';
|
||||||
|
|
||||||
React.render(
|
React.render(
|
||||||
<WakaTime />,
|
<WakaTime />,
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
var React = require('react');
|
import React from 'react';
|
||||||
|
|
||||||
class MainList extends React.Component
|
class MainList extends React.Component {
|
||||||
{
|
componentDidMount() {
|
||||||
componentDidMount()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_openOptionsPage()
|
_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();
|
||||||
@@ -18,21 +15,22 @@ class MainList extends React.Component
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render()
|
render() {
|
||||||
{
|
|
||||||
var loginLogoutButton = () => {
|
var loginLogoutButton = () => {
|
||||||
if(this.props.loggedIn === true)
|
if (this.props.loggedIn === true) {
|
||||||
{
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<a target="_blank" href="https://wakatime.com/settings/rules" className="list-group-item">
|
<a target="_blank" href="https://wakatime.com/settings/rules" className="list-group-item">
|
||||||
<i className="fa fa-fw fa-filter"></i> Custom Rules
|
<i className="fa fa-fw fa-filter"></i>
|
||||||
|
Custom Rules
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" href="https://wakatime.com/dashboard" className="list-group-item">
|
<a target="_blank" href="https://wakatime.com/dashboard" className="list-group-item">
|
||||||
<i className="fa fa-fw fa-tachometer"></i> Dashboard
|
<i className="fa fa-fw fa-tachometer"></i>
|
||||||
|
Dashboard
|
||||||
</a>
|
</a>
|
||||||
<a href="#" className="list-group-item" onClick={this.props.logoutUser}>
|
<a href="#" className="list-group-item" onClick={this.props.logoutUser}>
|
||||||
<i className="fa fa-fw fa-sign-out"></i> Logout
|
<i className="fa fa-fw fa-sign-out"></i>
|
||||||
|
Logout
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -40,14 +38,14 @@ class MainList extends React.Component
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<a target="_blank" href="https://wakatime.com/login" className="list-group-item">
|
<a target="_blank" href="https://wakatime.com/login" className="list-group-item">
|
||||||
<i className="fa fa-fw fa-sign-in"></i> Login
|
<i className="fa fa-fw fa-sign-in"></i>
|
||||||
|
Login
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
var signedInAs = () => {
|
var signedInAs = () => {
|
||||||
if(this.props.loggedIn === true)
|
if (this.props.loggedIn === true) {
|
||||||
{
|
|
||||||
return (
|
return (
|
||||||
<div className="panel panel-default">
|
<div className="panel panel-default">
|
||||||
<div className="panel-body">
|
<div className="panel-body">
|
||||||
@@ -56,7 +54,9 @@ class MainList extends React.Component
|
|||||||
<img className="img-circle" width="48" height="48" src={this.props.user.photo} />
|
<img className="img-circle" width="48" height="48" src={this.props.user.photo} />
|
||||||
</div>
|
</div>
|
||||||
<div className="col-xs-10">
|
<div className="col-xs-10">
|
||||||
Signed in as <b>{this.props.user.full_name}</b><br />
|
Signed in as
|
||||||
|
<b>{this.props.user.full_name}</b>
|
||||||
|
<br />
|
||||||
{this.props.user.email}
|
{this.props.user.email}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -66,14 +66,15 @@ class MainList extends React.Component
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return(
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
{signedInAs()}
|
{signedInAs()}
|
||||||
|
|
||||||
<div className="list-group">
|
<div className="list-group">
|
||||||
<a href="#" className="list-group-item" onClick={this._openOptionsPage}>
|
<a href="#" className="list-group-item" onClick={this._openOptionsPage}>
|
||||||
<i className="fa fa-fw fa-cogs"></i> Options
|
<i className="fa fa-fw fa-cogs"></i>
|
||||||
|
Options
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
{loginLogoutButton()}
|
{loginLogoutButton()}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
var React = require('react');
|
import React from 'react';
|
||||||
|
|
||||||
class Navbar extends React.Component{
|
class Navbar extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
var React = require("react");
|
import React from "react";
|
||||||
var $ = require('jquery');
|
import $ from 'jquery';
|
||||||
|
import NavBar from './NavBar.react.js';
|
||||||
|
import MainList from './MainList.react.js';
|
||||||
|
import changeExtensionIcon from '../helpers/changeExtensionIcon.js';
|
||||||
|
import WakaTimeOriginal from '../WakaTime.js';
|
||||||
|
|
||||||
var NavBar = require('./NavBar.react');
|
class WakaTime extends React.Component {
|
||||||
var MainList = require('./MainList.react');
|
|
||||||
|
|
||||||
var changeExtensionIcon = require('../helpers/changeExtensionIcon');
|
|
||||||
|
|
||||||
var WakaTimeOriginal = require('../WakaTime');
|
|
||||||
|
|
||||||
class WakaTime extends React.Component
|
|
||||||
{
|
|
||||||
logoutUserUrl = 'https://wakatime.com/logout';
|
logoutUserUrl = 'https://wakatime.com/logout';
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
@@ -21,12 +17,11 @@ class WakaTime extends React.Component
|
|||||||
loggedIn: false
|
loggedIn: false
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount()
|
componentDidMount() {
|
||||||
{
|
|
||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
theme: 'light'
|
theme: 'light'
|
||||||
}, function(items) {
|
}, function (items) {
|
||||||
if(items.theme == 'light') {
|
if (items.theme == 'light') {
|
||||||
changeExtensionIcon();
|
changeExtensionIcon();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -38,7 +33,7 @@ class WakaTime extends React.Component
|
|||||||
|
|
||||||
wakatime.checkAuth().done(data => {
|
wakatime.checkAuth().done(data => {
|
||||||
|
|
||||||
if(data !== false){
|
if (data !== false) {
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
user: {
|
user: {
|
||||||
@@ -50,21 +45,15 @@ class WakaTime extends React.Component
|
|||||||
});
|
});
|
||||||
|
|
||||||
changeExtensionIcon();
|
changeExtensionIcon();
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
changeExtensionIcon('red');
|
changeExtensionIcon('red');
|
||||||
|
|
||||||
//TODO: Redirect user to wakatime login page.
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logoutUser()
|
logoutUser() {
|
||||||
{
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = $.Deferred();
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@@ -86,8 +75,7 @@ class WakaTime extends React.Component
|
|||||||
return deferredObject.promise();
|
return deferredObject.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
_logoutUser()
|
_logoutUser() {
|
||||||
{
|
|
||||||
this.logoutUser().done(() => {
|
this.logoutUser().done(() => {
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
@@ -104,9 +92,8 @@ class WakaTime extends React.Component
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
render()
|
render() {
|
||||||
{
|
return (
|
||||||
return(
|
|
||||||
<div>
|
<div>
|
||||||
<NavBar />
|
<NavBar />
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
var WakaTime = require('./WakaTime');
|
import WakaTime from "./WakaTime.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whenever an alarms sets off, this function
|
* Whenever an alarms sets off, this function
|
||||||
@@ -29,9 +29,9 @@ chrome.alarms.create('heartbeatAlarm', {periodInMinutes: 2});
|
|||||||
/**
|
/**
|
||||||
* Whenever a active tab is changed it records a heartbeat with that tab url.
|
* Whenever a active tab is changed it records a heartbeat with that tab url.
|
||||||
*/
|
*/
|
||||||
chrome.tabs.onActivated.addListener(function(activeInfo) {
|
chrome.tabs.onActivated.addListener(function (activeInfo) {
|
||||||
|
|
||||||
chrome.tabs.get(activeInfo.tabId, function(tab) {
|
chrome.tabs.get(activeInfo.tabId, function (tab) {
|
||||||
|
|
||||||
console.log('recording a heartbeat - active tab changed');
|
console.log('recording a heartbeat - active tab changed');
|
||||||
|
|
||||||
@@ -46,15 +46,13 @@ chrome.tabs.onActivated.addListener(function(activeInfo) {
|
|||||||
* Whenever any tab is updated it checks if the updated tab is the tab that is
|
* Whenever any tab is updated it checks if the updated tab is the tab that is
|
||||||
* currently active and if it is, then it records a heartbeat.
|
* currently active and if it is, then it records a heartbeat.
|
||||||
*/
|
*/
|
||||||
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
|
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
|
||||||
|
|
||||||
if(changeInfo.status === 'complete')
|
if (changeInfo.status === 'complete') {
|
||||||
{
|
|
||||||
// Get current tab URL.
|
// Get current tab URL.
|
||||||
chrome.tabs.query({active: true}, (tabs) => {
|
chrome.tabs.query({active: true}, (tabs) => {
|
||||||
// If tab updated is the same as active tab
|
// If tab updated is the same as active tab
|
||||||
if(tabId == tabs[0].id)
|
if (tabId == tabs[0].id) {
|
||||||
{
|
|
||||||
console.log('recording a heartbeat - tab updated');
|
console.log('recording a heartbeat - tab updated');
|
||||||
|
|
||||||
var wakatime = new WakaTime;
|
var wakatime = new WakaTime;
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
/**
|
/**
|
||||||
* It changes the extension icon color.
|
* It changes the extension icon color.
|
||||||
* Supported values are: 'red', 'white' and ''.
|
* Supported values are: 'red', 'white' and ''.
|
||||||
*
|
|
||||||
* @param string color = ''
|
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
export default function changeExtensionIcon(color = '') {
|
export default function changeExtensionIcon(color = '') {
|
||||||
|
|
||||||
if(color !== ''){
|
if (color !== '') {
|
||||||
color = '-' + color;
|
color = '-' + color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Returns UNIX timestamp
|
* Returns UNIX timestamp
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
*/
|
||||||
export default function(){
|
export default function(){
|
||||||
return Math.round((new Date()).getTime() / 1000);
|
return Math.round((new Date()).getTime() / 1000);
|
||||||
|
|||||||
@@ -2,16 +2,13 @@
|
|||||||
global.jQuery = require('jquery');
|
global.jQuery = require('jquery');
|
||||||
require('bootstrap');
|
require('bootstrap');
|
||||||
|
|
||||||
var $ = require('jquery');
|
import $ from "jquery";
|
||||||
|
|
||||||
function detectCheckedRadio(name)
|
function detectCheckedRadio(name) {
|
||||||
{
|
for (var i = 0; i < document.getElementsByName(name).length; i ++) {
|
||||||
for(var i = 0; i < document.getElementsByName(name).length; i++)
|
|
||||||
{
|
|
||||||
var button = document.getElementsByName(name)[i];
|
var button = document.getElementsByName(name)[i];
|
||||||
|
|
||||||
if(button.checked === true)
|
if (button.checked === true) {
|
||||||
{
|
|
||||||
return button.value;
|
return button.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,14 +26,14 @@ function save_options(e) {
|
|||||||
theme: theme,
|
theme: theme,
|
||||||
blacklist: blacklist,
|
blacklist: blacklist,
|
||||||
loggingType: loggingType
|
loggingType: loggingType
|
||||||
}, function() {
|
}, function () {
|
||||||
// Update status to let user know options were saved.
|
// Update status to let user know options were saved.
|
||||||
var status = $('#status');
|
var status = $('#status');
|
||||||
status.html('<strong>Well done!</strong> Options have been saved.');
|
status.html('<strong>Well done!</strong> Options have been saved.');
|
||||||
|
|
||||||
status.fadeIn(1500, function() {
|
status.fadeIn(1500, function () {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
status.fadeOut(1500, function() {
|
status.fadeOut(1500, function () {
|
||||||
status.html('');
|
status.html('');
|
||||||
});
|
});
|
||||||
}, 750);
|
}, 750);
|
||||||
@@ -53,7 +50,7 @@ function restore_options() {
|
|||||||
theme: 'light',
|
theme: 'light',
|
||||||
blacklist: '',
|
blacklist: '',
|
||||||
loggingType: 'domain'
|
loggingType: 'domain'
|
||||||
}, function(items) {
|
}, function (items) {
|
||||||
document.getElementById('theme').value = items.theme;
|
document.getElementById('theme').value = items.theme;
|
||||||
document.getElementById('blacklist').value = items.blacklist;
|
document.getElementById('blacklist').value = items.blacklist;
|
||||||
document.getElementById(items.loggingType + 'Type').checked = true;
|
document.getElementById(items.loggingType + 'Type').checked = true;
|
||||||
|
|||||||
@@ -3,16 +3,23 @@
|
|||||||
/* This is a fix for Bootstrap requiring jQuery */
|
/* This is a fix for Bootstrap requiring jQuery */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
|
var _react = require('react');
|
||||||
|
|
||||||
|
var _react2 = _interopRequireDefault(_react);
|
||||||
|
|
||||||
|
var _componentsWakaTimeReactJs = require('./components/WakaTime.react.js');
|
||||||
|
|
||||||
|
var _componentsWakaTimeReactJs2 = _interopRequireDefault(_componentsWakaTimeReactJs);
|
||||||
|
|
||||||
global.jQuery = require('jquery');
|
global.jQuery = require('jquery');
|
||||||
require('bootstrap');
|
require('bootstrap');
|
||||||
|
|
||||||
var React = require('react');
|
_react2['default'].render(_react2['default'].createElement(_componentsWakaTimeReactJs2['default'], null), document.getElementById('wakatime'));
|
||||||
var WakaTime = require('./components/WakaTime.react');
|
|
||||||
|
|
||||||
React.render(React.createElement(WakaTime, null), document.getElementById('wakatime'));
|
|
||||||
|
|
||||||
}).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":6,"bootstrap":9,"jquery":22,"react":178}],2:[function(require,module,exports){
|
},{"./components/WakaTime.react.js":6,"bootstrap":9,"jquery":22,"react":178}],2:[function(require,module,exports){
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
Object.defineProperty(exports, "__esModule", {
|
||||||
@@ -52,14 +59,25 @@ Object.defineProperty(exports, '__esModule', {
|
|||||||
|
|
||||||
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; }; })();
|
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||||
|
|
||||||
var UrlHelper = require('./UrlHelper');
|
var _UrlHelperJs = require('./UrlHelper.js');
|
||||||
|
|
||||||
var $ = require('jquery');
|
var _UrlHelperJs2 = _interopRequireDefault(_UrlHelperJs);
|
||||||
|
|
||||||
var currentTimestamp = require('./helpers/currentTimestamp');
|
var _jquery = require('jquery');
|
||||||
var changeExtensionIcon = require('./helpers/changeExtensionIcon');
|
|
||||||
|
var _jquery2 = _interopRequireDefault(_jquery);
|
||||||
|
|
||||||
|
var _helpersCurrentTimestampJs = require('./helpers/currentTimestamp.js');
|
||||||
|
|
||||||
|
var _helpersCurrentTimestampJs2 = _interopRequireDefault(_helpersCurrentTimestampJs);
|
||||||
|
|
||||||
|
var _helpersChangeExtensionIconJs = require('./helpers/changeExtensionIcon.js');
|
||||||
|
|
||||||
|
var _helpersChangeExtensionIconJs2 = _interopRequireDefault(_helpersChangeExtensionIconJs);
|
||||||
|
|
||||||
var WakaTime = (function () {
|
var WakaTime = (function () {
|
||||||
function WakaTime() {
|
function WakaTime() {
|
||||||
@@ -73,12 +91,18 @@ var WakaTime = (function () {
|
|||||||
|
|
||||||
_createClass(WakaTime, [{
|
_createClass(WakaTime, [{
|
||||||
key: 'checkAuth',
|
key: 'checkAuth',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the user is logged in.
|
||||||
|
*
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
value: function checkAuth() {
|
value: function checkAuth() {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
$.ajax({
|
_jquery2['default'].ajax({
|
||||||
url: this.currentUserApiUrl,
|
url: this.currentUserApiUrl,
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function success(data) {
|
success: function success(data) {
|
||||||
@@ -97,6 +121,11 @@ var WakaTime = (function () {
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'recordHeartbeat',
|
key: 'recordHeartbeat',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Depending on various factors detects the current active tab URL or domain,
|
||||||
|
* and sends it to WakaTime for logging.
|
||||||
|
*/
|
||||||
value: function recordHeartbeat() {
|
value: function recordHeartbeat() {
|
||||||
var _this2 = this;
|
var _this2 = this;
|
||||||
|
|
||||||
@@ -104,22 +133,15 @@ var WakaTime = (function () {
|
|||||||
|
|
||||||
if (data !== false) {
|
if (data !== false) {
|
||||||
|
|
||||||
console.log('user is logged id.');
|
|
||||||
// User is logged in.
|
// User is logged in.
|
||||||
changeExtensionIcon();
|
// Change extension icon to default color.
|
||||||
|
(0, _helpersChangeExtensionIconJs2['default'])();
|
||||||
console.log('recording heartbeat.');
|
|
||||||
|
|
||||||
chrome.idle.queryState(_this2.detectionIntervalInSeconds, function (newState) {
|
chrome.idle.queryState(_this2.detectionIntervalInSeconds, function (newState) {
|
||||||
|
|
||||||
console.log(newState);
|
|
||||||
|
|
||||||
if (newState === 'active') {
|
if (newState === 'active') {
|
||||||
|
|
||||||
// Get current tab URL.
|
// Get current tab URL.
|
||||||
chrome.tabs.query({ active: true }, function (tabs) {
|
chrome.tabs.query({ active: true }, function (tabs) {
|
||||||
console.log(tabs[0].url);
|
|
||||||
|
|
||||||
_this2.sendHeartbeat(tabs[0].url);
|
_this2.sendHeartbeat(tabs[0].url);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -127,31 +149,44 @@ var WakaTime = (function () {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// User is not logged in.
|
// User is not logged in.
|
||||||
changeExtensionIcon('red');
|
// Change extension icon to red color.
|
||||||
|
(0, _helpersChangeExtensionIconJs2['default'])('red');
|
||||||
console.log('user is not logged id.');
|
|
||||||
|
|
||||||
//TODO: Redirect user to wakatime login page.
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: '_preparePayload',
|
key: '_preparePayload',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates payload for the heartbeat and returns it as JSON.
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
* @param type
|
||||||
|
* @param debug
|
||||||
|
* @returns {*}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
value: function _preparePayload(entity, type) {
|
value: function _preparePayload(entity, type) {
|
||||||
var debug = arguments[2] === undefined ? false : arguments[2];
|
var debug = arguments[2] === undefined ? false : arguments[2];
|
||||||
|
|
||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
entity: entity,
|
entity: entity,
|
||||||
type: type,
|
type: type,
|
||||||
time: currentTimestamp(),
|
time: (0, _helpersCurrentTimestampJs2['default'])(),
|
||||||
is_debugging: debug
|
is_debugging: debug
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: '_getLoggingType',
|
key: '_getLoggingType',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a promise with logging type variable.
|
||||||
|
*
|
||||||
|
* @returns {*}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
value: function _getLoggingType() {
|
value: function _getLoggingType() {
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
loggingType: this.loggingType
|
loggingType: this.loggingType
|
||||||
@@ -163,48 +198,60 @@ var WakaTime = (function () {
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'sendHeartbeat',
|
key: 'sendHeartbeat',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given the entity and logging type it creates a payload and
|
||||||
|
* sends an ajax post request to the API.
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
*/
|
||||||
value: function sendHeartbeat(entity) {
|
value: function sendHeartbeat(entity) {
|
||||||
var _this3 = this;
|
var _this3 = this;
|
||||||
|
|
||||||
this._getLoggingType().done(function (loggingType) {
|
var payload = null;
|
||||||
|
|
||||||
if (loggingType == 'domain') {
|
this._getLoggingType().done(function (loggingType) {
|
||||||
console.log('sending entity with type domain');
|
|
||||||
|
|
||||||
// Get only the domain from the entity.
|
// Get only the domain from the entity.
|
||||||
// And send that in heartbeat
|
// And send that in heartbeat
|
||||||
console.log(UrlHelper.getDomainFromUrl(entity));
|
if (loggingType == 'domain') {
|
||||||
|
|
||||||
var domain = UrlHelper.getDomainFromUrl(entity);
|
var domain = _UrlHelperJs2['default'].getDomainFromUrl(entity);
|
||||||
|
|
||||||
var payload = _this3._preparePayload(domain, 'domain');
|
payload = _this3._preparePayload(domain, 'domain');
|
||||||
|
|
||||||
console.log(payload);
|
console.log(payload);
|
||||||
|
|
||||||
//this.sendAjaxRequestToApi(payload);
|
_this3.sendAjaxRequestToApi(payload);
|
||||||
} else if (loggingType == 'url') {
|
}
|
||||||
console.log('sending entity with type url');
|
|
||||||
|
|
||||||
// Send entity in heartbeat
|
// Send entity in heartbeat
|
||||||
|
else if (loggingType == 'url') {
|
||||||
var payload = _this3._preparePayload(entity, 'url');
|
payload = _this3._preparePayload(entity, 'url');
|
||||||
|
|
||||||
console.log(payload);
|
console.log(payload);
|
||||||
|
|
||||||
//this.sendAjaxRequestToApi(payload);
|
_this3.sendAjaxRequestToApi(payload);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'sendAjaxRequestToApi',
|
key: 'sendAjaxRequestToApi',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends AJAX request with payload to the heartbeat API as JSON.
|
||||||
|
*
|
||||||
|
* @param payload
|
||||||
|
* @param method
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
value: function sendAjaxRequestToApi(payload) {
|
value: function sendAjaxRequestToApi(payload) {
|
||||||
var _this4 = this;
|
var _this4 = this;
|
||||||
|
|
||||||
var method = arguments[1] === undefined ? 'POST' : arguments[1];
|
var method = arguments[1] === undefined ? 'POST' : arguments[1];
|
||||||
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
$.ajax({
|
_jquery2['default'].ajax({
|
||||||
url: this.heartbeatApiUrl,
|
url: this.heartbeatApiUrl,
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
@@ -235,7 +282,7 @@ module.exports = exports['default'];
|
|||||||
|
|
||||||
//default
|
//default
|
||||||
|
|
||||||
},{"./UrlHelper":2,"./helpers/changeExtensionIcon":7,"./helpers/currentTimestamp":8,"jquery":22}],4:[function(require,module,exports){
|
},{"./UrlHelper.js":2,"./helpers/changeExtensionIcon.js":7,"./helpers/currentTimestamp.js":8,"jquery":22}],4:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
Object.defineProperty(exports, '__esModule', {
|
Object.defineProperty(exports, '__esModule', {
|
||||||
@@ -244,11 +291,15 @@ Object.defineProperty(exports, '__esModule', {
|
|||||||
|
|
||||||
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; }; })();
|
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
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; }
|
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 _react2 = _interopRequireDefault(_react);
|
||||||
|
|
||||||
var MainList = (function (_React$Component) {
|
var MainList = (function (_React$Component) {
|
||||||
function MainList() {
|
function MainList() {
|
||||||
@@ -282,64 +333,64 @@ var MainList = (function (_React$Component) {
|
|||||||
|
|
||||||
var loginLogoutButton = function loginLogoutButton() {
|
var loginLogoutButton = function loginLogoutButton() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (_this.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return _react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
null,
|
null,
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'a',
|
'a',
|
||||||
{ target: '_blank', href: 'https://wakatime.com/settings/rules', className: 'list-group-item' },
|
{ target: '_blank', href: 'https://wakatime.com/settings/rules', className: 'list-group-item' },
|
||||||
React.createElement('i', { className: 'fa fa-fw fa-filter' }),
|
_react2['default'].createElement('i', { className: 'fa fa-fw fa-filter' }),
|
||||||
' Custom Rules'
|
'Custom Rules'
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'a',
|
'a',
|
||||||
{ target: '_blank', href: 'https://wakatime.com/dashboard', className: 'list-group-item' },
|
{ target: '_blank', href: 'https://wakatime.com/dashboard', className: 'list-group-item' },
|
||||||
React.createElement('i', { className: 'fa fa-fw fa-tachometer' }),
|
_react2['default'].createElement('i', { className: 'fa fa-fw fa-tachometer' }),
|
||||||
' Dashboard'
|
'Dashboard'
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'a',
|
'a',
|
||||||
{ href: '#', className: 'list-group-item', onClick: _this.props.logoutUser },
|
{ href: '#', className: 'list-group-item', onClick: _this.props.logoutUser },
|
||||||
React.createElement('i', { className: 'fa fa-fw fa-sign-out' }),
|
_react2['default'].createElement('i', { className: 'fa fa-fw fa-sign-out' }),
|
||||||
' Logout'
|
'Logout'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return React.createElement(
|
return _react2['default'].createElement(
|
||||||
'a',
|
'a',
|
||||||
{ target: '_blank', href: 'https://wakatime.com/login', className: 'list-group-item' },
|
{ target: '_blank', href: 'https://wakatime.com/login', className: 'list-group-item' },
|
||||||
React.createElement('i', { className: 'fa fa-fw fa-sign-in' }),
|
_react2['default'].createElement('i', { className: 'fa fa-fw fa-sign-in' }),
|
||||||
' Login'
|
'Login'
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
var signedInAs = function signedInAs() {
|
var signedInAs = function signedInAs() {
|
||||||
if (_this.props.loggedIn === true) {
|
if (_this.props.loggedIn === true) {
|
||||||
return React.createElement(
|
return _react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'panel panel-default' },
|
{ className: 'panel panel-default' },
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'panel-body' },
|
{ className: 'panel-body' },
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'row' },
|
{ className: 'row' },
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'col-xs-2' },
|
{ className: 'col-xs-2' },
|
||||||
React.createElement('img', { className: 'img-circle', width: '48', height: '48', src: _this.props.user.photo })
|
_react2['default'].createElement('img', { className: 'img-circle', width: '48', height: '48', src: _this.props.user.photo })
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'col-xs-10' },
|
{ className: 'col-xs-10' },
|
||||||
'Signed in as ',
|
'Signed in as',
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'b',
|
'b',
|
||||||
null,
|
null,
|
||||||
_this.props.user.full_name
|
_this.props.user.full_name
|
||||||
),
|
),
|
||||||
React.createElement('br', null),
|
_react2['default'].createElement('br', null),
|
||||||
_this.props.user.email
|
_this.props.user.email
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -348,18 +399,18 @@ var MainList = (function (_React$Component) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return React.createElement(
|
return _react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
null,
|
null,
|
||||||
signedInAs(),
|
signedInAs(),
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'list-group' },
|
{ className: 'list-group' },
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'a',
|
'a',
|
||||||
{ href: '#', className: 'list-group-item', onClick: this._openOptionsPage },
|
{ href: '#', className: 'list-group-item', onClick: this._openOptionsPage },
|
||||||
React.createElement('i', { className: 'fa fa-fw fa-cogs' }),
|
_react2['default'].createElement('i', { className: 'fa fa-fw fa-cogs' }),
|
||||||
' Options'
|
'Options'
|
||||||
),
|
),
|
||||||
loginLogoutButton()
|
loginLogoutButton()
|
||||||
)
|
)
|
||||||
@@ -368,7 +419,7 @@ var MainList = (function (_React$Component) {
|
|||||||
}]);
|
}]);
|
||||||
|
|
||||||
return MainList;
|
return MainList;
|
||||||
})(React.Component);
|
})(_react2['default'].Component);
|
||||||
|
|
||||||
exports['default'] = MainList;
|
exports['default'] = MainList;
|
||||||
module.exports = exports['default'];
|
module.exports = exports['default'];
|
||||||
@@ -382,11 +433,15 @@ Object.defineProperty(exports, "__esModule", {
|
|||||||
|
|
||||||
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; }; })();
|
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
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; }
|
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 _react2 = _interopRequireDefault(_react);
|
||||||
|
|
||||||
var Navbar = (function (_React$Component) {
|
var Navbar = (function (_React$Component) {
|
||||||
function Navbar() {
|
function Navbar() {
|
||||||
@@ -402,68 +457,68 @@ var Navbar = (function (_React$Component) {
|
|||||||
_createClass(Navbar, [{
|
_createClass(Navbar, [{
|
||||||
key: "render",
|
key: "render",
|
||||||
value: function render() {
|
value: function render() {
|
||||||
return React.createElement(
|
return _react2["default"].createElement(
|
||||||
"nav",
|
"nav",
|
||||||
{ className: "navbar navbar-default", role: "navigation" },
|
{ className: "navbar navbar-default", role: "navigation" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"div",
|
"div",
|
||||||
{ className: "container-fluid" },
|
{ className: "container-fluid" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"div",
|
"div",
|
||||||
{ className: "navbar-header" },
|
{ className: "navbar-header" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"button",
|
"button",
|
||||||
{ type: "button", className: "navbar-toggle collapsed", "data-toggle": "collapse", "data-target": "#bs-example-navbar-collapse-1" },
|
{ type: "button", className: "navbar-toggle collapsed", "data-toggle": "collapse", "data-target": "#bs-example-navbar-collapse-1" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"span",
|
"span",
|
||||||
{ className: "sr-only" },
|
{ className: "sr-only" },
|
||||||
"Toggle navigation"
|
"Toggle navigation"
|
||||||
),
|
),
|
||||||
React.createElement("i", { className: "fa fa-fw fa-cogs" })
|
_react2["default"].createElement("i", { className: "fa fa-fw fa-cogs" })
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"a",
|
"a",
|
||||||
{ target: "_blank", className: "navbar-brand", href: "https://wakatime.com" },
|
{ target: "_blank", className: "navbar-brand", href: "https://wakatime.com" },
|
||||||
"WakaTime",
|
"WakaTime",
|
||||||
React.createElement("img", { src: "graphics/wakatime-logo-48.png" })
|
_react2["default"].createElement("img", { src: "graphics/wakatime-logo-48.png" })
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"div",
|
"div",
|
||||||
{ className: "collapse navbar-collapse", id: "bs-example-navbar-collapse-1" },
|
{ className: "collapse navbar-collapse", id: "bs-example-navbar-collapse-1" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"ul",
|
"ul",
|
||||||
{ className: "nav navbar-nav" },
|
{ className: "nav navbar-nav" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"li",
|
"li",
|
||||||
{ className: "dropdown" },
|
{ className: "dropdown" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"a",
|
"a",
|
||||||
{ href: "#", className: "dropdown-toggle", "data-toggle": "dropdown", role: "button", "aria-expanded": "false" },
|
{ href: "#", className: "dropdown-toggle", "data-toggle": "dropdown", role: "button", "aria-expanded": "false" },
|
||||||
React.createElement("i", { className: "fa fa-fw fa-info" }),
|
_react2["default"].createElement("i", { className: "fa fa-fw fa-info" }),
|
||||||
"About",
|
"About",
|
||||||
React.createElement("span", { className: "caret" })
|
_react2["default"].createElement("span", { className: "caret" })
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"ul",
|
"ul",
|
||||||
{ className: "dropdown-menu", role: "menu" },
|
{ className: "dropdown-menu", role: "menu" },
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"li",
|
"li",
|
||||||
null,
|
null,
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"a",
|
"a",
|
||||||
{ target: "_blank", href: "https://github.com/wakatime/chrome-wakatime/issues" },
|
{ target: "_blank", href: "https://github.com/wakatime/chrome-wakatime/issues" },
|
||||||
React.createElement("i", { className: "fa fa-fw fa-bug" }),
|
_react2["default"].createElement("i", { className: "fa fa-fw fa-bug" }),
|
||||||
"Report an Issue"
|
"Report an Issue"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"li",
|
"li",
|
||||||
null,
|
null,
|
||||||
React.createElement(
|
_react2["default"].createElement(
|
||||||
"a",
|
"a",
|
||||||
{ target: "_blank", href: "https://github.com/wakatime/chrome-wakatime" },
|
{ target: "_blank", href: "https://github.com/wakatime/chrome-wakatime" },
|
||||||
React.createElement("i", { className: "fa fa-fw fa-github" }),
|
_react2["default"].createElement("i", { className: "fa fa-fw fa-github" }),
|
||||||
"View on GitHub"
|
"View on GitHub"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -477,7 +532,7 @@ var Navbar = (function (_React$Component) {
|
|||||||
}]);
|
}]);
|
||||||
|
|
||||||
return Navbar;
|
return Navbar;
|
||||||
})(React.Component);
|
})(_react2["default"].Component);
|
||||||
|
|
||||||
exports["default"] = Navbar;
|
exports["default"] = Navbar;
|
||||||
module.exports = exports["default"];
|
module.exports = exports["default"];
|
||||||
@@ -491,19 +546,35 @@ Object.defineProperty(exports, '__esModule', {
|
|||||||
|
|
||||||
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; }; })();
|
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
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; }
|
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 NavBar = require('./NavBar.react');
|
var _react2 = _interopRequireDefault(_react);
|
||||||
var MainList = require('./MainList.react');
|
|
||||||
|
|
||||||
var changeExtensionIcon = require('../helpers/changeExtensionIcon');
|
var _jquery = require('jquery');
|
||||||
|
|
||||||
var WakaTimeOriginal = require('../WakaTime');
|
var _jquery2 = _interopRequireDefault(_jquery);
|
||||||
|
|
||||||
|
var _NavBarReactJs = require('./NavBar.react.js');
|
||||||
|
|
||||||
|
var _NavBarReactJs2 = _interopRequireDefault(_NavBarReactJs);
|
||||||
|
|
||||||
|
var _MainListReactJs = require('./MainList.react.js');
|
||||||
|
|
||||||
|
var _MainListReactJs2 = _interopRequireDefault(_MainListReactJs);
|
||||||
|
|
||||||
|
var _helpersChangeExtensionIconJs = require('../helpers/changeExtensionIcon.js');
|
||||||
|
|
||||||
|
var _helpersChangeExtensionIconJs2 = _interopRequireDefault(_helpersChangeExtensionIconJs);
|
||||||
|
|
||||||
|
var _WakaTimeJs = require('../WakaTime.js');
|
||||||
|
|
||||||
|
var _WakaTimeJs2 = _interopRequireDefault(_WakaTimeJs);
|
||||||
|
|
||||||
var WakaTime = (function (_React$Component) {
|
var WakaTime = (function (_React$Component) {
|
||||||
function WakaTime() {
|
function WakaTime() {
|
||||||
@@ -535,13 +606,13 @@ var WakaTime = (function (_React$Component) {
|
|||||||
theme: 'light'
|
theme: 'light'
|
||||||
}, function (items) {
|
}, function (items) {
|
||||||
if (items.theme == 'light') {
|
if (items.theme == 'light') {
|
||||||
changeExtensionIcon();
|
(0, _helpersChangeExtensionIconJs2['default'])();
|
||||||
} else {
|
} else {
|
||||||
changeExtensionIcon('white');
|
(0, _helpersChangeExtensionIconJs2['default'])('white');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var wakatime = new WakaTimeOriginal();
|
var wakatime = new _WakaTimeJs2['default']();
|
||||||
|
|
||||||
wakatime.checkAuth().done(function (data) {
|
wakatime.checkAuth().done(function (data) {
|
||||||
|
|
||||||
@@ -556,13 +627,9 @@ var WakaTime = (function (_React$Component) {
|
|||||||
loggedIn: true
|
loggedIn: true
|
||||||
});
|
});
|
||||||
|
|
||||||
changeExtensionIcon();
|
(0, _helpersChangeExtensionIconJs2['default'])();
|
||||||
} else {
|
} else {
|
||||||
|
(0, _helpersChangeExtensionIconJs2['default'])('red');
|
||||||
changeExtensionIcon('red');
|
|
||||||
|
|
||||||
//TODO: Redirect user to wakatime login page.
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -571,9 +638,9 @@ var WakaTime = (function (_React$Component) {
|
|||||||
value: function logoutUser() {
|
value: function logoutUser() {
|
||||||
var _this2 = this;
|
var _this2 = this;
|
||||||
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
$.ajax({
|
_jquery2['default'].ajax({
|
||||||
url: this.logoutUserUrl,
|
url: this.logoutUserUrl,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
success: function success() {
|
success: function success() {
|
||||||
@@ -606,26 +673,26 @@ var WakaTime = (function (_React$Component) {
|
|||||||
loggedIn: false
|
loggedIn: false
|
||||||
});
|
});
|
||||||
|
|
||||||
changeExtensionIcon('red');
|
(0, _helpersChangeExtensionIconJs2['default'])('red');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'render',
|
key: 'render',
|
||||||
value: function render() {
|
value: function render() {
|
||||||
return React.createElement(
|
return _react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
null,
|
null,
|
||||||
React.createElement(NavBar, null),
|
_react2['default'].createElement(_NavBarReactJs2['default'], null),
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'container' },
|
{ className: 'container' },
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'row' },
|
{ className: 'row' },
|
||||||
React.createElement(
|
_react2['default'].createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'col-md-12' },
|
{ className: 'col-md-12' },
|
||||||
React.createElement(MainList, { user: this.state.user, logoutUser: this._logoutUser.bind(this), loggedIn: this.state.loggedIn })
|
_react2['default'].createElement(_MainListReactJs2['default'], { user: this.state.user, logoutUser: this._logoutUser.bind(this), loggedIn: this.state.loggedIn })
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -634,18 +701,15 @@ var WakaTime = (function (_React$Component) {
|
|||||||
}]);
|
}]);
|
||||||
|
|
||||||
return WakaTime;
|
return WakaTime;
|
||||||
})(React.Component);
|
})(_react2['default'].Component);
|
||||||
|
|
||||||
exports['default'] = WakaTime;
|
exports['default'] = WakaTime;
|
||||||
module.exports = exports['default'];
|
module.exports = exports['default'];
|
||||||
|
|
||||||
},{"../WakaTime":3,"../helpers/changeExtensionIcon":7,"./MainList.react":4,"./NavBar.react":5,"jquery":22,"react":178}],7:[function(require,module,exports){
|
},{"../WakaTime.js":3,"../helpers/changeExtensionIcon.js":7,"./MainList.react.js":4,"./NavBar.react.js":5,"jquery":22,"react":178}],7:[function(require,module,exports){
|
||||||
/**
|
/**
|
||||||
* It changes the extension icon color.
|
* It changes the extension icon color.
|
||||||
* Supported values are: 'red', 'white' and ''.
|
* Supported values are: 'red', 'white' and ''.
|
||||||
*
|
|
||||||
* @param string color = ''
|
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
@@ -671,6 +735,9 @@ function changeExtensionIcon() {
|
|||||||
module.exports = exports['default'];
|
module.exports = exports['default'];
|
||||||
|
|
||||||
},{}],8:[function(require,module,exports){
|
},{}],8:[function(require,module,exports){
|
||||||
|
/**
|
||||||
|
* Returns UNIX timestamp
|
||||||
|
*/
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var WakaTime = require('./WakaTime');
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
|
var _WakaTimeJs = require('./WakaTime.js');
|
||||||
|
|
||||||
|
var _WakaTimeJs2 = _interopRequireDefault(_WakaTimeJs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whenever an alarms sets off, this function
|
* Whenever an alarms sets off, this function
|
||||||
@@ -17,7 +21,7 @@ function resolveAlarm(alarm) {
|
|||||||
|
|
||||||
console.log('recording a heartbeat - alarm triggered');
|
console.log('recording a heartbeat - alarm triggered');
|
||||||
|
|
||||||
var wakatime = new WakaTime();
|
var wakatime = new _WakaTimeJs2['default']();
|
||||||
|
|
||||||
wakatime.recordHeartbeat();
|
wakatime.recordHeartbeat();
|
||||||
}
|
}
|
||||||
@@ -38,7 +42,7 @@ chrome.tabs.onActivated.addListener(function (activeInfo) {
|
|||||||
|
|
||||||
console.log('recording a heartbeat - active tab changed');
|
console.log('recording a heartbeat - active tab changed');
|
||||||
|
|
||||||
var wakatime = new WakaTime();
|
var wakatime = new _WakaTimeJs2['default']();
|
||||||
|
|
||||||
wakatime.recordHeartbeat();
|
wakatime.recordHeartbeat();
|
||||||
});
|
});
|
||||||
@@ -57,7 +61,7 @@ chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
|
|||||||
if (tabId == tabs[0].id) {
|
if (tabId == tabs[0].id) {
|
||||||
console.log('recording a heartbeat - tab updated');
|
console.log('recording a heartbeat - tab updated');
|
||||||
|
|
||||||
var wakatime = new WakaTime();
|
var wakatime = new _WakaTimeJs2['default']();
|
||||||
|
|
||||||
wakatime.recordHeartbeat();
|
wakatime.recordHeartbeat();
|
||||||
}
|
}
|
||||||
@@ -65,7 +69,7 @@ chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
},{"./WakaTime":3}],2:[function(require,module,exports){
|
},{"./WakaTime.js":3}],2:[function(require,module,exports){
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
Object.defineProperty(exports, "__esModule", {
|
||||||
@@ -105,14 +109,25 @@ Object.defineProperty(exports, '__esModule', {
|
|||||||
|
|
||||||
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; }; })();
|
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||||
|
|
||||||
var UrlHelper = require('./UrlHelper');
|
var _UrlHelperJs = require('./UrlHelper.js');
|
||||||
|
|
||||||
var $ = require('jquery');
|
var _UrlHelperJs2 = _interopRequireDefault(_UrlHelperJs);
|
||||||
|
|
||||||
var currentTimestamp = require('./helpers/currentTimestamp');
|
var _jquery = require('jquery');
|
||||||
var changeExtensionIcon = require('./helpers/changeExtensionIcon');
|
|
||||||
|
var _jquery2 = _interopRequireDefault(_jquery);
|
||||||
|
|
||||||
|
var _helpersCurrentTimestampJs = require('./helpers/currentTimestamp.js');
|
||||||
|
|
||||||
|
var _helpersCurrentTimestampJs2 = _interopRequireDefault(_helpersCurrentTimestampJs);
|
||||||
|
|
||||||
|
var _helpersChangeExtensionIconJs = require('./helpers/changeExtensionIcon.js');
|
||||||
|
|
||||||
|
var _helpersChangeExtensionIconJs2 = _interopRequireDefault(_helpersChangeExtensionIconJs);
|
||||||
|
|
||||||
var WakaTime = (function () {
|
var WakaTime = (function () {
|
||||||
function WakaTime() {
|
function WakaTime() {
|
||||||
@@ -130,14 +145,14 @@ var WakaTime = (function () {
|
|||||||
/**
|
/**
|
||||||
* Checks if the user is logged in.
|
* Checks if the user is logged in.
|
||||||
*
|
*
|
||||||
* @return $.promise()
|
* @returns {*}
|
||||||
*/
|
*/
|
||||||
value: function checkAuth() {
|
value: function checkAuth() {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
$.ajax({
|
_jquery2['default'].ajax({
|
||||||
url: this.currentUserApiUrl,
|
url: this.currentUserApiUrl,
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function success(data) {
|
success: function success(data) {
|
||||||
@@ -160,8 +175,6 @@ var WakaTime = (function () {
|
|||||||
/**
|
/**
|
||||||
* Depending on various factors detects the current active tab URL or domain,
|
* Depending on various factors detects the current active tab URL or domain,
|
||||||
* and sends it to WakaTime for logging.
|
* and sends it to WakaTime for logging.
|
||||||
*
|
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
value: function recordHeartbeat() {
|
value: function recordHeartbeat() {
|
||||||
var _this2 = this;
|
var _this2 = this;
|
||||||
@@ -172,7 +185,7 @@ var WakaTime = (function () {
|
|||||||
|
|
||||||
// User is logged in.
|
// User is logged in.
|
||||||
// Change extension icon to default color.
|
// Change extension icon to default color.
|
||||||
changeExtensionIcon();
|
(0, _helpersChangeExtensionIconJs2['default'])();
|
||||||
|
|
||||||
chrome.idle.queryState(_this2.detectionIntervalInSeconds, function (newState) {
|
chrome.idle.queryState(_this2.detectionIntervalInSeconds, function (newState) {
|
||||||
|
|
||||||
@@ -187,7 +200,7 @@ var WakaTime = (function () {
|
|||||||
|
|
||||||
// User is not logged in.
|
// User is not logged in.
|
||||||
// Change extension icon to red color.
|
// Change extension icon to red color.
|
||||||
changeExtensionIcon('red');
|
(0, _helpersChangeExtensionIconJs2['default'])('red');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -197,10 +210,11 @@ var WakaTime = (function () {
|
|||||||
/**
|
/**
|
||||||
* Creates payload for the heartbeat and returns it as JSON.
|
* Creates payload for the heartbeat and returns it as JSON.
|
||||||
*
|
*
|
||||||
* @param string entity
|
* @param entity
|
||||||
* @param string type 'domain' or 'url'
|
* @param type
|
||||||
* @param boolean debug = false
|
* @param debug
|
||||||
* @return JSON
|
* @returns {*}
|
||||||
|
* @private
|
||||||
*/
|
*/
|
||||||
value: function _preparePayload(entity, type) {
|
value: function _preparePayload(entity, type) {
|
||||||
var debug = arguments[2] === undefined ? false : arguments[2];
|
var debug = arguments[2] === undefined ? false : arguments[2];
|
||||||
@@ -208,7 +222,7 @@ var WakaTime = (function () {
|
|||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
entity: entity,
|
entity: entity,
|
||||||
type: type,
|
type: type,
|
||||||
time: currentTimestamp(),
|
time: (0, _helpersCurrentTimestampJs2['default'])(),
|
||||||
is_debugging: debug
|
is_debugging: debug
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -218,10 +232,11 @@ var WakaTime = (function () {
|
|||||||
/**
|
/**
|
||||||
* Returns a promise with logging type variable.
|
* Returns a promise with logging type variable.
|
||||||
*
|
*
|
||||||
* @return $.promise
|
* @returns {*}
|
||||||
|
* @private
|
||||||
*/
|
*/
|
||||||
value: function _getLoggingType() {
|
value: function _getLoggingType() {
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
loggingType: this.loggingType
|
loggingType: this.loggingType
|
||||||
@@ -238,21 +253,22 @@ var WakaTime = (function () {
|
|||||||
* Given the entity and logging type it creates a payload and
|
* Given the entity and logging type it creates a payload and
|
||||||
* sends an ajax post request to the API.
|
* sends an ajax post request to the API.
|
||||||
*
|
*
|
||||||
* @param string entity
|
* @param entity
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
value: function sendHeartbeat(entity) {
|
value: function sendHeartbeat(entity) {
|
||||||
var _this3 = this;
|
var _this3 = this;
|
||||||
|
|
||||||
|
var payload = null;
|
||||||
|
|
||||||
this._getLoggingType().done(function (loggingType) {
|
this._getLoggingType().done(function (loggingType) {
|
||||||
|
|
||||||
// Get only the domain from the entity.
|
// Get only the domain from the entity.
|
||||||
// And send that in heartbeat
|
// And send that in heartbeat
|
||||||
if (loggingType == 'domain') {
|
if (loggingType == 'domain') {
|
||||||
|
|
||||||
var domain = UrlHelper.getDomainFromUrl(entity);
|
var domain = _UrlHelperJs2['default'].getDomainFromUrl(entity);
|
||||||
|
|
||||||
var payload = _this3._preparePayload(domain, 'domain');
|
payload = _this3._preparePayload(domain, 'domain');
|
||||||
|
|
||||||
console.log(payload);
|
console.log(payload);
|
||||||
|
|
||||||
@@ -260,7 +276,7 @@ var WakaTime = (function () {
|
|||||||
}
|
}
|
||||||
// Send entity in heartbeat
|
// Send entity in heartbeat
|
||||||
else if (loggingType == 'url') {
|
else if (loggingType == 'url') {
|
||||||
var payload = _this3._preparePayload(entity, 'url');
|
payload = _this3._preparePayload(entity, 'url');
|
||||||
|
|
||||||
console.log(payload);
|
console.log(payload);
|
||||||
|
|
||||||
@@ -274,18 +290,18 @@ var WakaTime = (function () {
|
|||||||
/**
|
/**
|
||||||
* Sends AJAX request with payload to the heartbeat API as JSON.
|
* Sends AJAX request with payload to the heartbeat API as JSON.
|
||||||
*
|
*
|
||||||
* @param JSON payload
|
* @param payload
|
||||||
* @param string method = 'POST'
|
* @param method
|
||||||
* @return $.promise
|
* @returns {*}
|
||||||
*/
|
*/
|
||||||
value: function sendAjaxRequestToApi(payload) {
|
value: function sendAjaxRequestToApi(payload) {
|
||||||
var _this4 = this;
|
var _this4 = this;
|
||||||
|
|
||||||
var method = arguments[1] === undefined ? 'POST' : arguments[1];
|
var method = arguments[1] === undefined ? 'POST' : arguments[1];
|
||||||
|
|
||||||
var deferredObject = $.Deferred();
|
var deferredObject = _jquery2['default'].Deferred();
|
||||||
|
|
||||||
$.ajax({
|
_jquery2['default'].ajax({
|
||||||
url: this.heartbeatApiUrl,
|
url: this.heartbeatApiUrl,
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
@@ -316,13 +332,10 @@ module.exports = exports['default'];
|
|||||||
|
|
||||||
//default
|
//default
|
||||||
|
|
||||||
},{"./UrlHelper":2,"./helpers/changeExtensionIcon":4,"./helpers/currentTimestamp":5,"jquery":6}],4:[function(require,module,exports){
|
},{"./UrlHelper.js":2,"./helpers/changeExtensionIcon.js":4,"./helpers/currentTimestamp.js":5,"jquery":6}],4:[function(require,module,exports){
|
||||||
/**
|
/**
|
||||||
* It changes the extension icon color.
|
* It changes the extension icon color.
|
||||||
* Supported values are: 'red', 'white' and ''.
|
* Supported values are: 'red', 'white' and ''.
|
||||||
*
|
|
||||||
* @param string color = ''
|
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
@@ -350,8 +363,6 @@ module.exports = exports['default'];
|
|||||||
},{}],5:[function(require,module,exports){
|
},{}],5:[function(require,module,exports){
|
||||||
/**
|
/**
|
||||||
* Returns UNIX timestamp
|
* Returns UNIX timestamp
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
*/
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,15 @@
|
|||||||
/* This is a fix for Bootstrap requiring jQuery */
|
/* This is a fix for Bootstrap requiring jQuery */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
|
var _jquery = require('jquery');
|
||||||
|
|
||||||
|
var _jquery2 = _interopRequireDefault(_jquery);
|
||||||
|
|
||||||
global.jQuery = require('jquery');
|
global.jQuery = require('jquery');
|
||||||
require('bootstrap');
|
require('bootstrap');
|
||||||
|
|
||||||
var $ = require('jquery');
|
|
||||||
|
|
||||||
function detectCheckedRadio(name) {
|
function detectCheckedRadio(name) {
|
||||||
for (var i = 0; i < document.getElementsByName(name).length; i++) {
|
for (var i = 0; i < document.getElementsByName(name).length; i++) {
|
||||||
var button = document.getElementsByName(name)[i];
|
var button = document.getElementsByName(name)[i];
|
||||||
@@ -32,7 +36,7 @@ function save_options(e) {
|
|||||||
loggingType: loggingType
|
loggingType: loggingType
|
||||||
}, function () {
|
}, function () {
|
||||||
// Update status to let user know options were saved.
|
// Update status to let user know options were saved.
|
||||||
var status = $('#status');
|
var status = (0, _jquery2['default'])('#status');
|
||||||
status.html('<strong>Well done!</strong> Options have been saved.');
|
status.html('<strong>Well done!</strong> Options have been saved.');
|
||||||
|
|
||||||
status.fadeIn(1500, function () {
|
status.fadeIn(1500, function () {
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
BIN
screenshots/sc_4-options.png
Normal file
|
After Width: | Height: | Size: 19 KiB |