Added config for extension, updated a lot of things to use config. Updated icons.

This commit is contained in:
Mario Basic
2015-06-13 19:27:35 +02:00
parent 1a2bac7cc3
commit 3331d187b6
11 changed files with 433 additions and 337 deletions

View File

@@ -3,20 +3,11 @@ import $ from 'jquery';
import currentTimestamp from './helpers/currentTimestamp.js'; import currentTimestamp from './helpers/currentTimestamp.js';
import changeExtensionIcon from './helpers/changeExtensionIcon.js'; import changeExtensionIcon from './helpers/changeExtensionIcon.js';
var in_array = require('./helpers/in_array'); var in_array = require('./helpers/in_array');
var config = require('./config.js');
class WakaTime { class WakaTime {
tabsWithDevtoolsOpen = [];
constructor(props) { constructor(props) {
this.detectionIntervalInSeconds = 60; //default
this.loggingType = 'domain'; //default
this.heartbeatApiUrl = 'https://wakatime.com/api/v1/users/current/heartbeats';
this.currentUserApiUrl = 'https://wakatime.com/api/v1/users/current';
this.tabsWithDevtoolsOpen = []; this.tabsWithDevtoolsOpen = [];
} }
@@ -33,7 +24,7 @@ class WakaTime {
var deferredObject = $.Deferred(); var deferredObject = $.Deferred();
$.ajax({ $.ajax({
url: this.currentUserApiUrl, url: config.currentUserApiUrl,
dataType: 'json', dataType: 'json',
success: (data) => { success: (data) => {
@@ -42,7 +33,7 @@ class WakaTime {
}, },
error: (xhr, status, err) => { error: (xhr, status, err) => {
console.error(this.currentUserApiUrl, status, err.toString()); console.error(config.currentUserApiUrl, status, err.toString());
deferredObject.resolve(false); deferredObject.resolve(false);
} }
@@ -61,12 +52,12 @@ class WakaTime {
if (data !== false) { if (data !== false) {
chrome.storage.sync.get({ chrome.storage.sync.get({
loggingEnabled: true loggingEnabled: config.loggingEnabled
}, (items) => { }, (items) => {
if (items.loggingEnabled === true) { if (items.loggingEnabled === true) {
changeExtensionIcon(); changeExtensionIcon(config.colors.allGood);
chrome.idle.queryState(this.detectionIntervalInSeconds, (newState) => { chrome.idle.queryState(config.detectionIntervalInSeconds, (newState) => {
if (newState === 'active') { if (newState === 'active') {
// Get current tab URL. // Get current tab URL.
@@ -81,7 +72,7 @@ class WakaTime {
}); });
} }
else { else {
changeExtensionIcon('red'); changeExtensionIcon(config.colors.notLogging);
} }
}); });
} }
@@ -89,7 +80,7 @@ class WakaTime {
// User is not logged in. // User is not logged in.
// Change extension icon to red color. // Change extension icon to red color.
changeExtensionIcon('red'); changeExtensionIcon(config.colors.notSignedIn);
} }
}); });
} }
@@ -123,7 +114,7 @@ class WakaTime {
var deferredObject = $.Deferred(); var deferredObject = $.Deferred();
chrome.storage.sync.get({ chrome.storage.sync.get({
loggingType: this.loggingType loggingType: config.loggingType
}, function (items) { }, function (items) {
deferredObject.resolve(items.loggingType); deferredObject.resolve(items.loggingType);
}); });
@@ -181,7 +172,7 @@ class WakaTime {
var deferredObject = $.Deferred(); var deferredObject = $.Deferred();
$.ajax({ $.ajax({
url: this.heartbeatApiUrl, url: config.heartbeatApiUrl,
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
method: method, method: method,
@@ -193,7 +184,7 @@ class WakaTime {
}, },
error: (xhr, status, err) => { error: (xhr, status, err) => {
console.error(this.heartbeatApiUrl, status, err.toString()); console.error(config.heartbeatApiUrl, status, err.toString());
deferredObject.resolve(this); deferredObject.resolve(this);

View File

@@ -62,7 +62,7 @@ class MainList extends React.Component {
</div> </div>
); );
} }
else else if(this.props.loggingEnabled === false && this.props.loggedIn === true)
{ {
return ( return (
<div className="panel panel-default"> <div className="panel panel-default">

View File

@@ -6,22 +6,19 @@ import NavBar from './NavBar.react.js';
import MainList from './MainList.react.js'; import MainList from './MainList.react.js';
import changeExtensionIcon from '../helpers/changeExtensionIcon.js'; import changeExtensionIcon from '../helpers/changeExtensionIcon.js';
import WakaTimeOriginal from '../WakaTime.js'; import WakaTimeOriginal from '../WakaTime.js';
var config = require('../config.js');
class WakaTime extends React.Component { class WakaTime extends React.Component {
constructor(props) { state = {
super(props);
this.logoutUserUrl = 'https://wakatime.com/logout';
this.state = {
user: { user: {
full_name: null, full_name: null,
email: null, email: null,
photo: null photo: null
}, },
loggedIn: false, loggedIn: false,
loggingEnabled: false loggingEnabled: config.loggingEnabled
}; };
}
componentDidMount() { componentDidMount() {
@@ -32,14 +29,14 @@ class WakaTime extends React.Component {
if (data !== false) { if (data !== false) {
chrome.storage.sync.get({ chrome.storage.sync.get({
loggingEnabled: false loggingEnabled: config.loggingEnabled
}, (items) => { }, (items) => {
this.setState({loggingEnabled: items.loggingEnabled}); this.setState({loggingEnabled: items.loggingEnabled});
if (items.loggingEnabled === true) { if (items.loggingEnabled === true) {
changeExtensionIcon(); changeExtensionIcon(config.colors.allGood);
} }
else { else {
changeExtensionIcon('red'); changeExtensionIcon(config.colors.notLogging);
} }
}); });
@@ -53,7 +50,7 @@ class WakaTime extends React.Component {
}); });
} }
else { else {
changeExtensionIcon('red'); changeExtensionIcon(config.colors.notSignedIn);
} }
}); });
@@ -63,7 +60,7 @@ class WakaTime extends React.Component {
var deferredObject = $.Deferred(); var deferredObject = $.Deferred();
$.ajax({ $.ajax({
url: this.logoutUserUrl, url: config.logoutUserUrl,
method: 'GET', method: 'GET',
success: () => { success: () => {
@@ -72,7 +69,7 @@ class WakaTime extends React.Component {
}, },
error: (xhr, status, err) => { error: (xhr, status, err) => {
console.error(this.logoutUserUrl, status, err.toString()); console.error(config.logoutUserUrl, status, err.toString());
deferredObject.resolve(this); deferredObject.resolve(this);
} }
@@ -94,7 +91,7 @@ class WakaTime extends React.Component {
loggingEnabled: false loggingEnabled: false
}); });
changeExtensionIcon('red'); changeExtensionIcon(config.colors.notSignedIn);
}); });
} }
@@ -104,7 +101,7 @@ class WakaTime extends React.Component {
loggingEnabled: false loggingEnabled: false
}); });
changeExtensionIcon('red'); changeExtensionIcon(config.colors.notLogging);
chrome.storage.sync.set({ chrome.storage.sync.set({
loggingEnabled: false loggingEnabled: false
@@ -116,7 +113,7 @@ class WakaTime extends React.Component {
loggingEnabled: true loggingEnabled: true
}); });
changeExtensionIcon(); changeExtensionIcon(config.colors.allGood);
chrome.storage.sync.set({ chrome.storage.sync.set({
loggingEnabled: true loggingEnabled: true

25
assets/js/config.js Normal file
View File

@@ -0,0 +1,25 @@
export default {
// Time for idle state of the browser
// The user is considered idle if there was
// no activity in the browser for x seconds
detectionIntervalInSeconds: 60,
//default logging type
loggingType: 'domain',
// By default logging is enabled
loggingEnabled: true,
// Url to which to send the heartbeat
heartbeatApiUrl: 'https://wakatime.com/api/v1/users/current/heartbeats',
// Url from which to detect if the user is logged in
currentUserApiUrl: 'https://wakatime.com/api/v1/users/current',
// The url to logout the user from wakatime
logoutUserUrl: 'https://wakatime.com/logout',
// Different colors for different states of the extension
colors: {
allGood: '',
notLogging: 'gray',
notSignedIn: 'red',
lightTheme: 'white'
},
// Default theme
theme: 'light'
};

View File

@@ -1,6 +1,6 @@
/** /**
* It changes the extension icon color. * It changes the extension icon color.
* Supported values are: 'red', 'white' and ''. * Supported values are: 'red', 'white', 'gray' and ''.
*/ */
export default function changeExtensionIcon(color = '') { export default function changeExtensionIcon(color = '') {
@@ -9,7 +9,7 @@ export default function changeExtensionIcon(color = '') {
if (color !== '') { if (color !== '') {
color = '-' + color; color = '-' + color;
path = './graphics/wakatime-logo-48' + color + '.png'; path = './graphics/wakatime-logo-38' + color + '.png';
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: path path: path
@@ -21,14 +21,14 @@ export default function changeExtensionIcon(color = '') {
theme: 'light' theme: 'light'
}, function (items) { }, function (items) {
if (items.theme == 'light') { if (items.theme == 'light') {
path = './graphics/wakatime-logo-48.png'; path = './graphics/wakatime-logo-38.png';
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: path path: path
}); });
} }
else { else {
path = './graphics/wakatime-logo-48-white.png'; path = './graphics/wakatime-logo-38-white.png';
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: path path: path

View File

@@ -2,6 +2,8 @@
global.jQuery = require('jquery'); global.jQuery = require('jquery');
require('bootstrap'); require('bootstrap');
var config = require('./config');
import $ from "jquery"; import $ from "jquery";
function detectCheckedRadio(name) { function detectCheckedRadio(name) {
@@ -47,9 +49,9 @@ function save_options(e) {
function restore_options() { function restore_options() {
// Use default value color = 'red' and likesColor = true. // Use default value color = 'red' and likesColor = true.
chrome.storage.sync.get({ chrome.storage.sync.get({
theme: 'light', theme: config.theme,
blacklist: '', blacklist: '',
loggingType: 'domain' loggingType: config.loggingType
}, 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;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -164,22 +164,13 @@ var _helpersChangeExtensionIconJs = require('./helpers/changeExtensionIcon.js');
var _helpersChangeExtensionIconJs2 = _interopRequireDefault(_helpersChangeExtensionIconJs); var _helpersChangeExtensionIconJs2 = _interopRequireDefault(_helpersChangeExtensionIconJs);
var in_array = require('./helpers/in_array'); var in_array = require('./helpers/in_array');
var config = require('./config.js');
var WakaTime = (function () { var WakaTime = (function () {
function WakaTime(props) { function WakaTime(props) {
_classCallCheck(this, WakaTime); _classCallCheck(this, WakaTime);
this.tabsWithDevtoolsOpen = []; this.tabsWithDevtoolsOpen = [];
this.detectionIntervalInSeconds = 60; //default
this.loggingType = 'domain'; //default
this.heartbeatApiUrl = 'https://wakatime.com/api/v1/users/current/heartbeats';
this.currentUserApiUrl = 'https://wakatime.com/api/v1/users/current';
this.tabsWithDevtoolsOpen = [];
} }
_createClass(WakaTime, [{ _createClass(WakaTime, [{
@@ -196,12 +187,10 @@ var WakaTime = (function () {
* @returns {*} * @returns {*}
*/ */
value: function checkAuth() { value: function checkAuth() {
var _this = this;
var deferredObject = _jquery2['default'].Deferred(); var deferredObject = _jquery2['default'].Deferred();
_jquery2['default'].ajax({ _jquery2['default'].ajax({
url: this.currentUserApiUrl, url: config.currentUserApiUrl,
dataType: 'json', dataType: 'json',
success: function success(data) { success: function success(data) {
@@ -209,7 +198,7 @@ var WakaTime = (function () {
}, },
error: function error(xhr, status, err) { error: function error(xhr, status, err) {
console.error(_this.currentUserApiUrl, status, err.toString()); console.error(config.currentUserApiUrl, status, err.toString());
deferredObject.resolve(false); deferredObject.resolve(false);
} }
@@ -225,40 +214,40 @@ var WakaTime = (function () {
* and sends it to WakaTime for logging. * and sends it to WakaTime for logging.
*/ */
value: function recordHeartbeat() { value: function recordHeartbeat() {
var _this2 = this; var _this = this;
this.checkAuth().done(function (data) { this.checkAuth().done(function (data) {
if (data !== false) { if (data !== false) {
chrome.storage.sync.get({ chrome.storage.sync.get({
loggingEnabled: true loggingEnabled: config.loggingEnabled
}, function (items) { }, function (items) {
if (items.loggingEnabled === true) { if (items.loggingEnabled === true) {
(0, _helpersChangeExtensionIconJs2['default'])(); (0, _helpersChangeExtensionIconJs2['default'])(config.colors.allGood);
chrome.idle.queryState(_this2.detectionIntervalInSeconds, function (newState) { chrome.idle.queryState(config.detectionIntervalInSeconds, function (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) {
var debug = false; var debug = false;
// If the current active tab has devtools open // If the current active tab has devtools open
if (in_array(tabs[0].id, _this2.tabsWithDevtoolsOpen)) debug = true; if (in_array(tabs[0].id, _this.tabsWithDevtoolsOpen)) debug = true;
_this2.sendHeartbeat(tabs[0].url, debug); _this.sendHeartbeat(tabs[0].url, debug);
}); });
} }
}); });
} else { } else {
(0, _helpersChangeExtensionIconJs2['default'])('red'); (0, _helpersChangeExtensionIconJs2['default'])(config.colors.notLogging);
} }
}); });
} else { } else {
// User is not logged in. // User is not logged in.
// Change extension icon to red color. // Change extension icon to red color.
(0, _helpersChangeExtensionIconJs2['default'])('red'); (0, _helpersChangeExtensionIconJs2['default'])(config.colors.notSignedIn);
} }
}); });
} }
@@ -297,7 +286,7 @@ var WakaTime = (function () {
var deferredObject = _jquery2['default'].Deferred(); var deferredObject = _jquery2['default'].Deferred();
chrome.storage.sync.get({ chrome.storage.sync.get({
loggingType: this.loggingType loggingType: config.loggingType
}, function (items) { }, function (items) {
deferredObject.resolve(items.loggingType); deferredObject.resolve(items.loggingType);
}); });
@@ -315,7 +304,7 @@ var WakaTime = (function () {
* @param debug * @param debug
*/ */
value: function sendHeartbeat(entity, debug) { value: function sendHeartbeat(entity, debug) {
var _this3 = this; var _this2 = this;
var payload = null; var payload = null;
@@ -327,19 +316,19 @@ var WakaTime = (function () {
var domain = _UrlHelperJs2['default'].getDomainFromUrl(entity); var domain = _UrlHelperJs2['default'].getDomainFromUrl(entity);
payload = _this3._preparePayload(domain, 'domain', debug); payload = _this2._preparePayload(domain, 'domain', debug);
console.log(payload); console.log(payload);
_this3.sendAjaxRequestToApi(payload); _this2.sendAjaxRequestToApi(payload);
} }
// Send entity in heartbeat // Send entity in heartbeat
else if (loggingType == 'url') { else if (loggingType == 'url') {
payload = _this3._preparePayload(entity, 'url', debug); payload = _this2._preparePayload(entity, 'url', debug);
console.log(payload); console.log(payload);
_this3.sendAjaxRequestToApi(payload); _this2.sendAjaxRequestToApi(payload);
} }
}); });
} }
@@ -354,27 +343,27 @@ var WakaTime = (function () {
* @returns {*} * @returns {*}
*/ */
value: function sendAjaxRequestToApi(payload) { value: function sendAjaxRequestToApi(payload) {
var _this4 = this; var _this3 = this;
var method = arguments[1] === undefined ? 'POST' : arguments[1]; var method = arguments[1] === undefined ? 'POST' : arguments[1];
var deferredObject = _jquery2['default'].Deferred(); var deferredObject = _jquery2['default'].Deferred();
_jquery2['default'].ajax({ _jquery2['default'].ajax({
url: this.heartbeatApiUrl, url: config.heartbeatApiUrl,
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
method: method, method: method,
data: payload, data: payload,
success: function success(response) { success: function success(response) {
deferredObject.resolve(_this4); deferredObject.resolve(_this3);
}, },
error: function error(xhr, status, err) { error: function error(xhr, status, err) {
console.error(_this4.heartbeatApiUrl, status, err.toString()); console.error(config.heartbeatApiUrl, status, err.toString());
deferredObject.resolve(_this4); deferredObject.resolve(_this3);
} }
}); });
@@ -388,10 +377,43 @@ var WakaTime = (function () {
exports['default'] = WakaTime; exports['default'] = WakaTime;
module.exports = exports['default']; module.exports = exports['default'];
},{"./UrlHelper.js":2,"./helpers/changeExtensionIcon.js":4,"./helpers/currentTimestamp.js":5,"./helpers/in_array":6,"jquery":7}],4:[function(require,module,exports){ },{"./UrlHelper.js":2,"./config.js":4,"./helpers/changeExtensionIcon.js":5,"./helpers/currentTimestamp.js":6,"./helpers/in_array":7,"jquery":8}],4:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = {
// Time for idle state of the browser
// The user is considered idle if there was
// no activity in the browser for x seconds
detectionIntervalInSeconds: 60,
//default logging type
loggingType: 'domain',
// By default logging is enabled
loggingEnabled: true,
// Url to which to send the heartbeat
heartbeatApiUrl: 'https://wakatime.com/api/v1/users/current/heartbeats',
// Url from which to detect if the user is logged in
currentUserApiUrl: 'https://wakatime.com/api/v1/users/current',
// The url to logout the user from wakatime
logoutUserUrl: 'https://wakatime.com/logout',
// Different colors for different states of the extension
colors: {
allGood: '',
notLogging: 'gray',
notSignedIn: 'red',
lightTheme: 'white'
},
// Default theme
theme: 'light'
};
module.exports = exports['default'];
},{}],5:[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', 'gray' and ''.
*/ */
'use strict'; 'use strict';
@@ -408,7 +430,7 @@ function changeExtensionIcon() {
if (color !== '') { if (color !== '') {
color = '-' + color; color = '-' + color;
path = './graphics/wakatime-logo-48' + color + '.png'; path = './graphics/wakatime-logo-38' + color + '.png';
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: path path: path
@@ -420,13 +442,13 @@ function changeExtensionIcon() {
theme: 'light' theme: 'light'
}, function (items) { }, function (items) {
if (items.theme == 'light') { if (items.theme == 'light') {
path = './graphics/wakatime-logo-48.png'; path = './graphics/wakatime-logo-38.png';
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: path path: path
}); });
} else { } else {
path = './graphics/wakatime-logo-48-white.png'; path = './graphics/wakatime-logo-38-white.png';
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: path path: path
@@ -438,7 +460,7 @@ function changeExtensionIcon() {
module.exports = exports['default']; module.exports = exports['default'];
},{}],5:[function(require,module,exports){ },{}],6:[function(require,module,exports){
/** /**
* Returns UNIX timestamp * Returns UNIX timestamp
*/ */
@@ -454,7 +476,7 @@ exports["default"] = function () {
module.exports = exports["default"]; module.exports = exports["default"];
},{}],6:[function(require,module,exports){ },{}],7:[function(require,module,exports){
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { Object.defineProperty(exports, "__esModule", {
@@ -474,7 +496,7 @@ function in_array(needle, haystack) {
exports["default"] = in_array; exports["default"] = in_array;
module.exports = exports["default"]; module.exports = exports["default"];
},{}],7:[function(require,module,exports){ },{}],8:[function(require,module,exports){
/*! /*!
* jQuery JavaScript Library v2.1.4 * jQuery JavaScript Library v2.1.4
* http://jquery.com/ * http://jquery.com/

View File

@@ -12,6 +12,8 @@ var _jquery2 = _interopRequireDefault(_jquery);
global.jQuery = require('jquery'); global.jQuery = require('jquery');
require('bootstrap'); require('bootstrap');
var config = require('./config');
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];
@@ -54,9 +56,9 @@ function save_options(e) {
function restore_options() { function restore_options() {
// Use default value color = 'red' and likesColor = true. // Use default value color = 'red' and likesColor = true.
chrome.storage.sync.get({ chrome.storage.sync.get({
theme: 'light', theme: config.theme,
blacklist: '', blacklist: '',
loggingType: 'domain' loggingType: config.loggingType
}, 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;
@@ -68,7 +70,40 @@ document.addEventListener('DOMContentLoaded', restore_options);
document.getElementById('save').addEventListener('click', save_options); document.getElementById('save').addEventListener('click', save_options);
}).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 : {})
},{"bootstrap":2,"jquery":15}],2:[function(require,module,exports){ },{"./config":2,"bootstrap":3,"jquery":16}],2:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = {
// Time for idle state of the browser
// The user is considered idle if there was
// no activity in the browser for x seconds
detectionIntervalInSeconds: 60,
//default logging type
loggingType: 'domain',
// By default logging is enabled
loggingEnabled: true,
// Url to which to send the heartbeat
heartbeatApiUrl: 'https://wakatime.com/api/v1/users/current/heartbeats',
// Url from which to detect if the user is logged in
currentUserApiUrl: 'https://wakatime.com/api/v1/users/current',
// The url to logout the user from wakatime
logoutUserUrl: 'https://wakatime.com/logout',
// Different colors for different states of the extension
colors: {
allGood: '',
notLogging: 'gray',
notSignedIn: 'red',
lightTheme: 'white'
},
// Default theme
theme: 'light'
};
module.exports = exports['default'];
},{}],3:[function(require,module,exports){
// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
require('../../js/transition.js') require('../../js/transition.js')
require('../../js/alert.js') require('../../js/alert.js')
@@ -82,7 +117,7 @@ require('../../js/popover.js')
require('../../js/scrollspy.js') require('../../js/scrollspy.js')
require('../../js/tab.js') require('../../js/tab.js')
require('../../js/affix.js') require('../../js/affix.js')
},{"../../js/affix.js":3,"../../js/alert.js":4,"../../js/button.js":5,"../../js/carousel.js":6,"../../js/collapse.js":7,"../../js/dropdown.js":8,"../../js/modal.js":9,"../../js/popover.js":10,"../../js/scrollspy.js":11,"../../js/tab.js":12,"../../js/tooltip.js":13,"../../js/transition.js":14}],3:[function(require,module,exports){ },{"../../js/affix.js":4,"../../js/alert.js":5,"../../js/button.js":6,"../../js/carousel.js":7,"../../js/collapse.js":8,"../../js/dropdown.js":9,"../../js/modal.js":10,"../../js/popover.js":11,"../../js/scrollspy.js":12,"../../js/tab.js":13,"../../js/tooltip.js":14,"../../js/transition.js":15}],4:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: affix.js v3.3.4 * Bootstrap: affix.js v3.3.4
* http://getbootstrap.com/javascript/#affix * http://getbootstrap.com/javascript/#affix
@@ -246,7 +281,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],4:[function(require,module,exports){ },{}],5:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: alert.js v3.3.4 * Bootstrap: alert.js v3.3.4
* http://getbootstrap.com/javascript/#alerts * http://getbootstrap.com/javascript/#alerts
@@ -342,7 +377,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],5:[function(require,module,exports){ },{}],6:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: button.js v3.3.4 * Bootstrap: button.js v3.3.4
* http://getbootstrap.com/javascript/#buttons * http://getbootstrap.com/javascript/#buttons
@@ -460,7 +495,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],6:[function(require,module,exports){ },{}],7:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: carousel.js v3.3.4 * Bootstrap: carousel.js v3.3.4
* http://getbootstrap.com/javascript/#carousel * http://getbootstrap.com/javascript/#carousel
@@ -699,7 +734,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],7:[function(require,module,exports){ },{}],8:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: collapse.js v3.3.4 * Bootstrap: collapse.js v3.3.4
* http://getbootstrap.com/javascript/#collapse * http://getbootstrap.com/javascript/#collapse
@@ -912,7 +947,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],8:[function(require,module,exports){ },{}],9:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: dropdown.js v3.3.4 * Bootstrap: dropdown.js v3.3.4
* http://getbootstrap.com/javascript/#dropdowns * http://getbootstrap.com/javascript/#dropdowns
@@ -1075,7 +1110,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],9:[function(require,module,exports){ },{}],10:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: modal.js v3.3.4 * Bootstrap: modal.js v3.3.4
* http://getbootstrap.com/javascript/#modals * http://getbootstrap.com/javascript/#modals
@@ -1416,7 +1451,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],10:[function(require,module,exports){ },{}],11:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: popover.js v3.3.4 * Bootstrap: popover.js v3.3.4
* http://getbootstrap.com/javascript/#popovers * http://getbootstrap.com/javascript/#popovers
@@ -1526,7 +1561,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],11:[function(require,module,exports){ },{}],12:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: scrollspy.js v3.3.4 * Bootstrap: scrollspy.js v3.3.4
* http://getbootstrap.com/javascript/#scrollspy * http://getbootstrap.com/javascript/#scrollspy
@@ -1700,7 +1735,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],12:[function(require,module,exports){ },{}],13:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: tab.js v3.3.4 * Bootstrap: tab.js v3.3.4
* http://getbootstrap.com/javascript/#tabs * http://getbootstrap.com/javascript/#tabs
@@ -1855,7 +1890,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],13:[function(require,module,exports){ },{}],14:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: tooltip.js v3.3.4 * Bootstrap: tooltip.js v3.3.4
* http://getbootstrap.com/javascript/#tooltip * http://getbootstrap.com/javascript/#tooltip
@@ -2333,7 +2368,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],14:[function(require,module,exports){ },{}],15:[function(require,module,exports){
/* ======================================================================== /* ========================================================================
* Bootstrap: transition.js v3.3.4 * Bootstrap: transition.js v3.3.4
* http://getbootstrap.com/javascript/#transitions * http://getbootstrap.com/javascript/#transitions
@@ -2394,7 +2429,7 @@ require('../../js/affix.js')
}(jQuery); }(jQuery);
},{}],15:[function(require,module,exports){ },{}],16:[function(require,module,exports){
/*! /*!
* jQuery JavaScript Library v2.1.4 * jQuery JavaScript Library v2.1.4
* http://jquery.com/ * http://jquery.com/