Setup CI tests (#100)
* use @xarc/xrun to streamline tasks in an imperative manner * add lint-staged/husky for git hook tasks * run prettier across all files * fixing tests * add ci test workflow * add a ci workflow * remove precommit in favor of husky * add .prettierrc.js * reformat with prettier
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
/* This is a fix for Bootstrap requiring jQuery */
|
||||
global.jQuery = require('jquery');
|
||||
require('bootstrap');
|
||||
@@ -9,7 +8,4 @@ var ReactDOM = require('react-dom');
|
||||
// React components
|
||||
var WakaTime = require('./components/WakaTime.jsx');
|
||||
|
||||
ReactDOM.render(
|
||||
<WakaTime />,
|
||||
document.getElementById('wakatime')
|
||||
);
|
||||
ReactDOM.render(<WakaTime />, document.getElementById('wakatime'));
|
||||
|
||||
@@ -3,13 +3,9 @@ var reactCreateClass = require('create-react-class');
|
||||
var classNames = require('classnames');
|
||||
|
||||
var Alert = reactCreateClass({
|
||||
|
||||
render: function() {
|
||||
return(
|
||||
<div className={classNames('alert', 'alert-' + this.props.type)}>{this.props.text}</div>
|
||||
);
|
||||
}
|
||||
|
||||
render: function () {
|
||||
return <div className={classNames('alert', 'alert-' + this.props.type)}>{this.props.text}</div>;
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = Alert;
|
||||
|
||||
@@ -2,106 +2,111 @@
|
||||
|
||||
var React = require('react');
|
||||
var reactCreateClass = require('create-react-class');
|
||||
|
||||
var MainList = reactCreateClass({
|
||||
|
||||
_openOptionsPage: function() {
|
||||
if (browser.runtime.openOptionsPage) {
|
||||
// New way to open options pages, if supported (Chrome 42+).
|
||||
browser.runtime.openOptionsPage();
|
||||
} else {
|
||||
// Reasonable fallback.
|
||||
window.open(browser.runtime.getURL('options.html'));
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
|
||||
var that = this;
|
||||
|
||||
var loginLogoutButton = function() {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<div>
|
||||
<a href="#" className="list-group-item" onClick={that.props.logoutUser}>
|
||||
<i className="fa fa-fw fa-sign-out"></i>
|
||||
Logout
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<a target="_blank" href="https://wakatime.com/login" className="list-group-item">
|
||||
<i className="fa fa-fw fa-sign-in"></i>
|
||||
Login
|
||||
</a>
|
||||
);
|
||||
};
|
||||
|
||||
// If logging is enabled, display that info to user
|
||||
var loggingStatus = function() {
|
||||
if(that.props.loggingEnabled === true && that.props.loggedIn === true)
|
||||
{
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<p>
|
||||
<a href="#" onClick={that.props.disableLogging} className="btn btn-danger btn-block">Disable logging</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
else if(that.props.loggingEnabled === false && that.props.loggedIn === true)
|
||||
{
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<p>
|
||||
<a href="#" onClick={that.props.enableLogging} className="btn btn-success btn-block">Enable logging</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var totalTimeLoggedToday = function() {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<blockquote>
|
||||
<p>{that.props.totalTimeLoggedToday}</p>
|
||||
<small><cite>TOTAL TIME LOGGED TODAY</cite></small>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
|
||||
{totalTimeLoggedToday()}
|
||||
|
||||
{loggingStatus()}
|
||||
|
||||
<div className="list-group">
|
||||
<a href="#" className="list-group-item" onClick={this._openOptionsPage}>
|
||||
<i className="fa fa-fw fa-cogs"></i>
|
||||
Options
|
||||
</a>
|
||||
|
||||
{loginLogoutButton()}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
_openOptionsPage: function () {
|
||||
if (browser.runtime.openOptionsPage) {
|
||||
// New way to open options pages, if supported (Chrome 42+).
|
||||
browser.runtime.openOptionsPage();
|
||||
} else {
|
||||
// Reasonable fallback.
|
||||
window.open(browser.runtime.getURL('options.html'));
|
||||
}
|
||||
},
|
||||
|
||||
render: function () {
|
||||
var that = this;
|
||||
|
||||
var loginLogoutButton = function () {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<div>
|
||||
<a href="#" className="list-group-item" onClick={that.props.logoutUser}>
|
||||
<i className="fa fa-fw fa-sign-out"></i>
|
||||
Logout
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<a target="_blank" href="https://wakatime.com/login" className="list-group-item">
|
||||
<i className="fa fa-fw fa-sign-in"></i>
|
||||
Login
|
||||
</a>
|
||||
);
|
||||
};
|
||||
|
||||
// If logging is enabled, display that info to user
|
||||
var loggingStatus = function () {
|
||||
if (that.props.loggingEnabled === true && that.props.loggedIn === true) {
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<p>
|
||||
<a
|
||||
href="#"
|
||||
onClick={that.props.disableLogging}
|
||||
className="btn btn-danger btn-block"
|
||||
>
|
||||
Disable logging
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
} else if (that.props.loggingEnabled === false && that.props.loggedIn === true) {
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<p>
|
||||
<a
|
||||
href="#"
|
||||
onClick={that.props.enableLogging}
|
||||
className="btn btn-success btn-block"
|
||||
>
|
||||
Enable logging
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var totalTimeLoggedToday = function () {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<blockquote>
|
||||
<p>{that.props.totalTimeLoggedToday}</p>
|
||||
<small>
|
||||
<cite>TOTAL TIME LOGGED TODAY</cite>
|
||||
</small>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
{totalTimeLoggedToday()}
|
||||
|
||||
{loggingStatus()}
|
||||
|
||||
<div className="list-group">
|
||||
<a href="#" className="list-group-item" onClick={this._openOptionsPage}>
|
||||
<i className="fa fa-fw fa-cogs"></i>
|
||||
Options
|
||||
</a>
|
||||
|
||||
{loginLogoutButton()}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = MainList;
|
||||
|
||||
@@ -2,89 +2,101 @@ var React = require('react');
|
||||
var reactCreateClass = require('create-react-class');
|
||||
|
||||
var NavBar = reactCreateClass({
|
||||
render: function () {
|
||||
var that = this;
|
||||
|
||||
render: function() {
|
||||
|
||||
var that = this;
|
||||
|
||||
var signedInAs = function() {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<p className="navbar-text">Signed in as <b>{that.props.user.full_name}</b></p>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var dashboard = function() {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<li>
|
||||
<a target="_blank" href="https://wakatime.com/dashboard">
|
||||
<i className="fa fa-fw fa-tachometer"></i>
|
||||
Dashboard
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var customRules = function() {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<li>
|
||||
<a target="_blank" href="https://wakatime.com/settings/rules">
|
||||
<i className="fa fa-fw fa-filter"></i>
|
||||
Custom Rules
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var signedInAs = function () {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<nav className="navbar navbar-default" role="navigation">
|
||||
<div className="container-fluid">
|
||||
<div className="navbar-header">
|
||||
<button type="button" className="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span className="sr-only">Toggle navigation</span>
|
||||
<i className="fa fa-fw fa-cogs"></i>
|
||||
</button>
|
||||
<a target="_blank" className="navbar-brand" href="https://wakatime.com">
|
||||
WakaTime
|
||||
<img src="graphics/wakatime-logo-48.png" />
|
||||
</a>
|
||||
</div>
|
||||
<div className="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
{signedInAs()}
|
||||
<ul className="nav navbar-nav">
|
||||
{customRules()}
|
||||
{dashboard()}
|
||||
<li className="dropdown">
|
||||
<a href="#" className="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
|
||||
<i className="fa fa-fw fa-info"></i>
|
||||
About
|
||||
<span className="caret"></span>
|
||||
</a>
|
||||
<ul className="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a target="_blank" href="https://github.com/wakatime/chrome-wakatime/issues">
|
||||
<i className="fa fa-fw fa-bug"></i>
|
||||
Report an Issue</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" href="https://github.com/wakatime/chrome-wakatime">
|
||||
<i className="fa fa-fw fa-github"></i>
|
||||
View on GitHub</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<p className="navbar-text">
|
||||
Signed in as <b>{that.props.user.full_name}</b>
|
||||
</p>
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var dashboard = function () {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<li>
|
||||
<a target="_blank" href="https://wakatime.com/dashboard">
|
||||
<i className="fa fa-fw fa-tachometer"></i>
|
||||
Dashboard
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var customRules = function () {
|
||||
if (that.props.loggedIn === true) {
|
||||
return (
|
||||
<li>
|
||||
<a target="_blank" href="https://wakatime.com/settings/rules">
|
||||
<i className="fa fa-fw fa-filter"></i>
|
||||
Custom Rules
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<nav className="navbar navbar-default" role="navigation">
|
||||
<div className="container-fluid">
|
||||
<div className="navbar-header">
|
||||
<button
|
||||
type="button"
|
||||
className="navbar-toggle collapsed"
|
||||
data-toggle="collapse"
|
||||
data-target="#bs-example-navbar-collapse-1"
|
||||
>
|
||||
<span className="sr-only">Toggle navigation</span>
|
||||
<i className="fa fa-fw fa-cogs"></i>
|
||||
</button>
|
||||
<a target="_blank" className="navbar-brand" href="https://wakatime.com">
|
||||
WakaTime
|
||||
<img src="graphics/wakatime-logo-48.png" />
|
||||
</a>
|
||||
</div>
|
||||
<div className="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
{signedInAs()}
|
||||
<ul className="nav navbar-nav">
|
||||
{customRules()}
|
||||
{dashboard()}
|
||||
<li className="dropdown">
|
||||
<a
|
||||
href="#"
|
||||
className="dropdown-toggle"
|
||||
data-toggle="dropdown"
|
||||
role="button"
|
||||
aria-expanded="false"
|
||||
>
|
||||
<i className="fa fa-fw fa-info"></i>
|
||||
About
|
||||
<span className="caret"></span>
|
||||
</a>
|
||||
<ul className="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a target="_blank" href="https://github.com/wakatime/chrome-wakatime/issues">
|
||||
<i className="fa fa-fw fa-bug"></i>
|
||||
Report an Issue
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" href="https://github.com/wakatime/chrome-wakatime">
|
||||
<i className="fa fa-fw fa-github"></i>
|
||||
View on GitHub
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = NavBar;
|
||||
|
||||
@@ -17,200 +17,215 @@ var SitesList = require('./SitesList.jsx');
|
||||
* @type {*|Function}
|
||||
*/
|
||||
var Options = reactCreateClass({
|
||||
getInitialState: function () {
|
||||
return {
|
||||
theme: config.theme,
|
||||
blacklist: '',
|
||||
whitelist: '',
|
||||
loggingType: config.loggingType,
|
||||
loggingStyle: config.loggingStyle,
|
||||
displayAlert: false,
|
||||
alertType: config.alert.success.type,
|
||||
alertText: config.alert.success.text,
|
||||
};
|
||||
},
|
||||
|
||||
getInitialState: function () {
|
||||
return {
|
||||
theme: config.theme,
|
||||
blacklist: '',
|
||||
whitelist: '',
|
||||
loggingType: config.loggingType,
|
||||
loggingStyle: config.loggingStyle,
|
||||
displayAlert: false,
|
||||
alertType: config.alert.success.type,
|
||||
alertText: config.alert.success.text
|
||||
};
|
||||
},
|
||||
componentDidMount: function () {
|
||||
this.restoreSettings();
|
||||
},
|
||||
|
||||
componentDidMount: function () {
|
||||
this.restoreSettings();
|
||||
},
|
||||
restoreSettings: function () {
|
||||
var that = this;
|
||||
|
||||
restoreSettings: function () {
|
||||
var that = this;
|
||||
|
||||
browser.storage.sync.get({
|
||||
theme: config.theme,
|
||||
blacklist: '',
|
||||
whitelist: '',
|
||||
loggingType: config.loggingType,
|
||||
loggingStyle: config.loggingStyle
|
||||
}).then(function (items) {
|
||||
that.setState({
|
||||
theme: items.theme,
|
||||
blacklist: items.blacklist,
|
||||
whitelist: items.whitelist,
|
||||
loggingType: items.loggingType,
|
||||
loggingStyle: items.loggingStyle
|
||||
});
|
||||
|
||||
that.refs.theme.value = items.theme;
|
||||
that.refs.loggingType.value = items.loggingType;
|
||||
that.refs.loggingStyle.value = items.loggingStyle;
|
||||
browser.storage.sync
|
||||
.get({
|
||||
theme: config.theme,
|
||||
blacklist: '',
|
||||
whitelist: '',
|
||||
loggingType: config.loggingType,
|
||||
loggingStyle: config.loggingStyle,
|
||||
})
|
||||
.then(function (items) {
|
||||
that.setState({
|
||||
theme: items.theme,
|
||||
blacklist: items.blacklist,
|
||||
whitelist: items.whitelist,
|
||||
loggingType: items.loggingType,
|
||||
loggingStyle: items.loggingStyle,
|
||||
});
|
||||
},
|
||||
|
||||
_handleSubmit: function (e) {
|
||||
e.preventDefault();
|
||||
that.refs.theme.value = items.theme;
|
||||
that.refs.loggingType.value = items.loggingType;
|
||||
that.refs.loggingStyle.value = items.loggingStyle;
|
||||
});
|
||||
},
|
||||
|
||||
this.saveSettings();
|
||||
},
|
||||
_handleSubmit: function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
saveSettings: function () {
|
||||
var that = this;
|
||||
this.saveSettings();
|
||||
},
|
||||
|
||||
var theme = this.refs.theme.value.trim();
|
||||
var loggingType = this.refs.loggingType.value.trim();
|
||||
var loggingStyle = this.refs.loggingStyle.value.trim();
|
||||
// Trimming blacklist and whitelist removes blank lines and spaces.
|
||||
var blacklist = that.state.blacklist.trim();
|
||||
var whitelist = that.state.whitelist.trim();
|
||||
saveSettings: function () {
|
||||
var that = this;
|
||||
|
||||
// Sync options with google storage.
|
||||
browser.storage.sync.set({
|
||||
theme: theme,
|
||||
blacklist: blacklist,
|
||||
whitelist: whitelist,
|
||||
loggingType: loggingType,
|
||||
loggingStyle: loggingStyle
|
||||
}).then(function () {
|
||||
// Set state to be newly entered values.
|
||||
that.setState({
|
||||
theme: theme,
|
||||
blacklist: blacklist,
|
||||
whitelist: whitelist,
|
||||
loggingType: loggingType,
|
||||
loggingStyle: loggingStyle,
|
||||
displayAlert: true
|
||||
});
|
||||
var theme = this.refs.theme.value.trim();
|
||||
var loggingType = this.refs.loggingType.value.trim();
|
||||
var loggingStyle = this.refs.loggingStyle.value.trim();
|
||||
// Trimming blacklist and whitelist removes blank lines and spaces.
|
||||
var blacklist = that.state.blacklist.trim();
|
||||
var whitelist = that.state.whitelist.trim();
|
||||
|
||||
// Sync options with google storage.
|
||||
browser.storage.sync
|
||||
.set({
|
||||
theme: theme,
|
||||
blacklist: blacklist,
|
||||
whitelist: whitelist,
|
||||
loggingType: loggingType,
|
||||
loggingStyle: loggingStyle,
|
||||
})
|
||||
.then(function () {
|
||||
// Set state to be newly entered values.
|
||||
that.setState({
|
||||
theme: theme,
|
||||
blacklist: blacklist,
|
||||
whitelist: whitelist,
|
||||
loggingType: loggingType,
|
||||
loggingStyle: loggingStyle,
|
||||
displayAlert: true,
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
_displayBlackOrWhiteList: function () {
|
||||
var loggingStyle = this.refs.loggingStyle.value.trim();
|
||||
_displayBlackOrWhiteList: function () {
|
||||
var loggingStyle = this.refs.loggingStyle.value.trim();
|
||||
|
||||
this.setState({loggingStyle: loggingStyle});
|
||||
},
|
||||
this.setState({ loggingStyle: loggingStyle });
|
||||
},
|
||||
|
||||
_updateBlacklistState: function(sites){
|
||||
this.setState({
|
||||
blacklist: sites
|
||||
});
|
||||
},
|
||||
_updateBlacklistState: function (sites) {
|
||||
this.setState({
|
||||
blacklist: sites,
|
||||
});
|
||||
},
|
||||
|
||||
_updateWhitelistState: function(sites){
|
||||
this.setState({
|
||||
whitelist: sites
|
||||
});
|
||||
},
|
||||
_updateWhitelistState: function (sites) {
|
||||
this.setState({
|
||||
whitelist: sites,
|
||||
});
|
||||
},
|
||||
|
||||
render: function () {
|
||||
render: function () {
|
||||
var that = this;
|
||||
|
||||
var that = this;
|
||||
|
||||
var alert = function() {
|
||||
if(that.state.displayAlert === true){
|
||||
|
||||
setTimeout(function () {
|
||||
that.setState({displayAlert:false});
|
||||
}, 2000);
|
||||
|
||||
return(
|
||||
<Alert key={that.state.alertText} type={that.state.alertType} text={that.state.alertText} />
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
var loggingStyle = function () {
|
||||
|
||||
if (that.state.loggingStyle == 'blacklist') {
|
||||
return (
|
||||
<SitesList
|
||||
handleChange={that._updateBlacklistState}
|
||||
label="Blacklist"
|
||||
sites={that.state.blacklist}
|
||||
helpText="Sites that you don't want to show in your reports." />
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<SitesList
|
||||
handleChange={that._updateWhitelistState}
|
||||
label="Whitelist"
|
||||
sites={that.state.whitelist}
|
||||
placeholder="http://google.com http://myproject.com@@MyProject"
|
||||
helpText="Sites that you want to show in your reports. You can assign URL to project by adding @@YourProject at the end of line." />
|
||||
);
|
||||
|
||||
};
|
||||
var alert = function () {
|
||||
if (that.state.displayAlert === true) {
|
||||
setTimeout(function () {
|
||||
that.setState({ displayAlert: false });
|
||||
}, 2000);
|
||||
|
||||
return (
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-md-12">
|
||||
|
||||
<ReactCSSTransitionGroup transitionName="alert" transitionEnterTimeout={500} transitionLeaveTimeout={300}>
|
||||
{alert()}
|
||||
</ReactCSSTransitionGroup>
|
||||
|
||||
<form className="form-horizontal" onSubmit={this._handleSubmit}>
|
||||
|
||||
<div className="form-group">
|
||||
<label className="col-lg-2 control-label">Logging style</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<select className="form-control" ref="loggingStyle" defaultValue="blacklist" onChange={this._displayBlackOrWhiteList}>
|
||||
<option value="blacklist">All except blacklisted sites</option>
|
||||
<option value="whitelist">Only whitelisted sites</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{loggingStyle()}
|
||||
|
||||
<div className="form-group">
|
||||
<label className="col-lg-2 control-label">Logging type</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<select className="form-control" ref="loggingType" defaultValue="domain">
|
||||
<option value="domain">Only the domain</option>
|
||||
<option value="url">Entire URL</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
<label htmlFor="theme" className="col-lg-2 control-label">Theme</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<select className="form-control" ref="theme" defaultValue="light">
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
<div className="col-lg-10 col-lg-offset-2">
|
||||
<button type="submit" className="btn btn-primary">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Alert
|
||||
key={that.state.alertText}
|
||||
type={that.state.alertType}
|
||||
text={that.state.alertText}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var loggingStyle = function () {
|
||||
if (that.state.loggingStyle == 'blacklist') {
|
||||
return (
|
||||
<SitesList
|
||||
handleChange={that._updateBlacklistState}
|
||||
label="Blacklist"
|
||||
sites={that.state.blacklist}
|
||||
helpText="Sites that you don't want to show in your reports."
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<SitesList
|
||||
handleChange={that._updateWhitelistState}
|
||||
label="Whitelist"
|
||||
sites={that.state.whitelist}
|
||||
placeholder="http://google.com http://myproject.com@@MyProject"
|
||||
helpText="Sites that you want to show in your reports. You can assign URL to project by adding @@YourProject at the end of line."
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-md-12">
|
||||
<ReactCSSTransitionGroup
|
||||
transitionName="alert"
|
||||
transitionEnterTimeout={500}
|
||||
transitionLeaveTimeout={300}
|
||||
>
|
||||
{alert()}
|
||||
</ReactCSSTransitionGroup>
|
||||
|
||||
<form className="form-horizontal" onSubmit={this._handleSubmit}>
|
||||
<div className="form-group">
|
||||
<label className="col-lg-2 control-label">Logging style</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<select
|
||||
className="form-control"
|
||||
ref="loggingStyle"
|
||||
defaultValue="blacklist"
|
||||
onChange={this._displayBlackOrWhiteList}
|
||||
>
|
||||
<option value="blacklist">All except blacklisted sites</option>
|
||||
<option value="whitelist">Only whitelisted sites</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{loggingStyle()}
|
||||
|
||||
<div className="form-group">
|
||||
<label className="col-lg-2 control-label">Logging type</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<select className="form-control" ref="loggingType" defaultValue="domain">
|
||||
<option value="domain">Only the domain</option>
|
||||
<option value="url">Entire URL</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
<label htmlFor="theme" className="col-lg-2 control-label">
|
||||
Theme
|
||||
</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<select className="form-control" ref="theme" defaultValue="light">
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
<div className="col-lg-10 col-lg-offset-2">
|
||||
<button type="submit" className="btn btn-primary">
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = Options;
|
||||
|
||||
@@ -2,35 +2,43 @@ var React = require('react');
|
||||
var reactCreateClass = require('create-react-class');
|
||||
|
||||
var SitesList = reactCreateClass({
|
||||
getDefaultProps: function () {
|
||||
return {
|
||||
placeholder: 'http://google.com',
|
||||
};
|
||||
},
|
||||
|
||||
getDefaultProps: function () {
|
||||
return {
|
||||
placeholder: 'http://google.com'
|
||||
};
|
||||
},
|
||||
_handleChange: function (event) {
|
||||
var sites = event.target.value;
|
||||
|
||||
_handleChange: function (event) {
|
||||
var sites = event.target.value;
|
||||
this.props.handleChange(sites);
|
||||
},
|
||||
|
||||
this.props.handleChange(sites);
|
||||
},
|
||||
render: function () {
|
||||
return (
|
||||
<div className="form-group">
|
||||
<label htmlFor="sites" className="col-lg-2 control-label">
|
||||
{this.props.label}
|
||||
</label>
|
||||
|
||||
render: function () {
|
||||
|
||||
return (
|
||||
<div className="form-group">
|
||||
<label htmlFor="sites" className="col-lg-2 control-label">{this.props.label}</label>
|
||||
|
||||
<div className="col-lg-10">
|
||||
<textarea className="form-control" rows="3" ref="sites" onChange={this._handleChange}
|
||||
placeholder={this.props.placeholder} value={this.props.sites}></textarea>
|
||||
<span className="help-block">{this.props.helpText}
|
||||
<br/>
|
||||
One line per site.</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
<div className="col-lg-10">
|
||||
<textarea
|
||||
className="form-control"
|
||||
rows="3"
|
||||
ref="sites"
|
||||
onChange={this._handleChange}
|
||||
placeholder={this.props.placeholder}
|
||||
value={this.props.sites}
|
||||
></textarea>
|
||||
<span className="help-block">
|
||||
{this.props.helpText}
|
||||
<br />
|
||||
One line per site.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = SitesList;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* global browser */
|
||||
|
||||
var React = require("react");
|
||||
var React = require('react');
|
||||
var reactCreateClass = require('create-react-class');
|
||||
var $ = require('jquery');
|
||||
|
||||
@@ -17,160 +17,147 @@ var WakaTimeCore = require('../core/WakaTimeCore').default;
|
||||
var changeExtensionState = require('../helpers/changeExtensionState');
|
||||
|
||||
var Wakatime = reactCreateClass({
|
||||
getInitialState: function () {
|
||||
return {
|
||||
user: {
|
||||
full_name: null,
|
||||
email: null,
|
||||
photo: null,
|
||||
},
|
||||
loggedIn: false,
|
||||
loggingEnabled: config.loggingEnabled,
|
||||
totalTimeLoggedToday: '0 minutes',
|
||||
};
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
user: {
|
||||
full_name: null,
|
||||
email: null,
|
||||
photo: null
|
||||
},
|
||||
loggedIn: false,
|
||||
componentDidMount: function () {
|
||||
var wakatime = new WakaTimeCore();
|
||||
|
||||
var that = this;
|
||||
|
||||
wakatime.checkAuth().done(function (data) {
|
||||
if (data !== false) {
|
||||
browser.storage.sync
|
||||
.get({
|
||||
loggingEnabled: config.loggingEnabled,
|
||||
totalTimeLoggedToday: '0 minutes'
|
||||
};
|
||||
},
|
||||
})
|
||||
.then(function (items) {
|
||||
that.setState({ loggingEnabled: items.loggingEnabled });
|
||||
|
||||
componentDidMount: function() {
|
||||
|
||||
var wakatime = new WakaTimeCore();
|
||||
|
||||
var that = this;
|
||||
|
||||
wakatime.checkAuth().done(function(data) {
|
||||
|
||||
if (data !== false) {
|
||||
|
||||
browser.storage.sync.get({
|
||||
loggingEnabled: config.loggingEnabled
|
||||
}).then(function(items) {
|
||||
that.setState({loggingEnabled: items.loggingEnabled});
|
||||
|
||||
if (items.loggingEnabled === true) {
|
||||
changeExtensionState('allGood');
|
||||
}
|
||||
else {
|
||||
changeExtensionState('notLogging');
|
||||
}
|
||||
});
|
||||
|
||||
that.setState({
|
||||
user: {
|
||||
full_name: data.full_name,
|
||||
email: data.email,
|
||||
photo: data.photo
|
||||
},
|
||||
loggedIn: true
|
||||
});
|
||||
|
||||
wakatime.getTotalTimeLoggedToday().done(function(grand_total) {
|
||||
that.setState({
|
||||
totalTimeLoggedToday: grand_total.text
|
||||
});
|
||||
});
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
else {
|
||||
changeExtensionState('notSignedIn');
|
||||
if (items.loggingEnabled === true) {
|
||||
changeExtensionState('allGood');
|
||||
} else {
|
||||
changeExtensionState('notLogging');
|
||||
}
|
||||
});
|
||||
|
||||
that.setState({
|
||||
user: {
|
||||
full_name: data.full_name,
|
||||
email: data.email,
|
||||
photo: data.photo,
|
||||
},
|
||||
loggedIn: true,
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
logoutUser: function() {
|
||||
var deferredObject = $.Deferred();
|
||||
|
||||
var that = this;
|
||||
|
||||
$.ajax({
|
||||
url: config.logoutUserUrl,
|
||||
method: 'GET',
|
||||
success: function() {
|
||||
|
||||
deferredObject.resolve(that);
|
||||
|
||||
},
|
||||
error: function(xhr, status, err) {
|
||||
|
||||
console.error(config.logoutUserUrl, status, err.toString());
|
||||
|
||||
deferredObject.resolve(that);
|
||||
}
|
||||
wakatime.getTotalTimeLoggedToday().done(function (grand_total) {
|
||||
that.setState({
|
||||
totalTimeLoggedToday: grand_total.text,
|
||||
});
|
||||
});
|
||||
|
||||
return deferredObject.promise();
|
||||
},
|
||||
wakatime.recordHeartbeat();
|
||||
} else {
|
||||
changeExtensionState('notSignedIn');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_logoutUser: function() {
|
||||
logoutUser: function () {
|
||||
var deferredObject = $.Deferred();
|
||||
|
||||
var that = this;
|
||||
var that = this;
|
||||
|
||||
this.logoutUser().done(function(){
|
||||
$.ajax({
|
||||
url: config.logoutUserUrl,
|
||||
method: 'GET',
|
||||
success: function () {
|
||||
deferredObject.resolve(that);
|
||||
},
|
||||
error: function (xhr, status, err) {
|
||||
console.error(config.logoutUserUrl, status, err.toString());
|
||||
|
||||
that.setState({
|
||||
user: {
|
||||
full_name: null,
|
||||
email: null,
|
||||
photo: null
|
||||
},
|
||||
loggedIn: false,
|
||||
loggingEnabled: false
|
||||
});
|
||||
deferredObject.resolve(that);
|
||||
},
|
||||
});
|
||||
|
||||
changeExtensionState('notSignedIn');
|
||||
return deferredObject.promise();
|
||||
},
|
||||
|
||||
});
|
||||
},
|
||||
_logoutUser: function () {
|
||||
var that = this;
|
||||
|
||||
_disableLogging: function() {
|
||||
this.setState({
|
||||
loggingEnabled: false
|
||||
});
|
||||
this.logoutUser().done(function () {
|
||||
that.setState({
|
||||
user: {
|
||||
full_name: null,
|
||||
email: null,
|
||||
photo: null,
|
||||
},
|
||||
loggedIn: false,
|
||||
loggingEnabled: false,
|
||||
});
|
||||
|
||||
changeExtensionState('notLogging');
|
||||
changeExtensionState('notSignedIn');
|
||||
});
|
||||
},
|
||||
|
||||
browser.storage.sync.set({
|
||||
loggingEnabled: false
|
||||
});
|
||||
},
|
||||
_disableLogging: function () {
|
||||
this.setState({
|
||||
loggingEnabled: false,
|
||||
});
|
||||
|
||||
_enableLogging: function() {
|
||||
this.setState({
|
||||
loggingEnabled: true
|
||||
});
|
||||
changeExtensionState('notLogging');
|
||||
|
||||
changeExtensionState('allGood');
|
||||
browser.storage.sync.set({
|
||||
loggingEnabled: false,
|
||||
});
|
||||
},
|
||||
|
||||
browser.storage.sync.set({
|
||||
loggingEnabled: true
|
||||
});
|
||||
},
|
||||
_enableLogging: function () {
|
||||
this.setState({
|
||||
loggingEnabled: true,
|
||||
});
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div>
|
||||
<NavBar
|
||||
user={this.state.user}
|
||||
loggedIn={this.state.loggedIn} />
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-md-12">
|
||||
<MainList
|
||||
disableLogging={this._disableLogging}
|
||||
enableLogging={this._enableLogging}
|
||||
loggingEnabled={this.state.loggingEnabled}
|
||||
user={this.state.user}
|
||||
totalTimeLoggedToday={this.state.totalTimeLoggedToday}
|
||||
logoutUser={this._logoutUser}
|
||||
loggedIn={this.state.loggedIn} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
changeExtensionState('allGood');
|
||||
|
||||
browser.storage.sync.set({
|
||||
loggingEnabled: true,
|
||||
});
|
||||
},
|
||||
|
||||
render: function () {
|
||||
return (
|
||||
<div>
|
||||
<NavBar user={this.state.user} loggedIn={this.state.loggedIn} />
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-md-12">
|
||||
<MainList
|
||||
disableLogging={this._disableLogging}
|
||||
enableLogging={this._enableLogging}
|
||||
loggingEnabled={this.state.loggingEnabled}
|
||||
user={this.state.user}
|
||||
totalTimeLoggedToday={this.state.totalTimeLoggedToday}
|
||||
logoutUser={this._logoutUser}
|
||||
loggedIn={this.state.loggedIn}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = Wakatime;
|
||||
|
||||
@@ -1,67 +1,60 @@
|
||||
/* global browser */
|
||||
//jshint esnext:true
|
||||
|
||||
var config = {
|
||||
// Extension name
|
||||
name: 'WakaTime',
|
||||
// Extension version
|
||||
version: browser.runtime.getManifest().version,
|
||||
// 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 style
|
||||
// Log all except blacklisted sites
|
||||
// or log only the white listed sites.
|
||||
loggingStyle: 'blacklist',
|
||||
// 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',
|
||||
// Gets stats from the WakaTime API
|
||||
summariesApiUrl: 'https://wakatime.com/api/v1/users/current/summaries',
|
||||
// Different colors for different states of the extension
|
||||
colors: {
|
||||
allGood: '',
|
||||
notLogging: 'gray',
|
||||
notSignedIn: 'red',
|
||||
lightTheme: 'white'
|
||||
// Extension name
|
||||
name: 'WakaTime',
|
||||
// Extension version
|
||||
version: process.env.NODE_ENV === 'test' ? 'test' : browser.runtime.getManifest().version,
|
||||
// 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 style
|
||||
// Log all except blacklisted sites
|
||||
// or log only the white listed sites.
|
||||
loggingStyle: 'blacklist',
|
||||
// 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',
|
||||
// Gets stats from the WakaTime API
|
||||
summariesApiUrl: 'https://wakatime.com/api/v1/users/current/summaries',
|
||||
// Different colors for different states of the extension
|
||||
colors: {
|
||||
allGood: '',
|
||||
notLogging: 'gray',
|
||||
notSignedIn: 'red',
|
||||
lightTheme: 'white',
|
||||
},
|
||||
// Tooltips for each of the extension states
|
||||
tooltips: {
|
||||
allGood: '',
|
||||
notLogging: 'Not logging',
|
||||
notSignedIn: 'Not signed In',
|
||||
blacklisted: 'This URL is blacklisted',
|
||||
whitelisted: 'This URL is not on your whitelist',
|
||||
},
|
||||
// Default theme
|
||||
theme: 'light',
|
||||
// Valid extension states
|
||||
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],
|
||||
// Predefined alert type and text for success and failure.
|
||||
alert: {
|
||||
success: {
|
||||
type: 'success',
|
||||
text: 'Options have been saved!',
|
||||
},
|
||||
// Tooltips for each of the extension states
|
||||
tooltips: {
|
||||
allGood: '',
|
||||
notLogging: 'Not logging',
|
||||
notSignedIn: 'Not signed In',
|
||||
blacklisted: 'This URL is blacklisted',
|
||||
whitelisted: 'This URL is not on your whitelist'
|
||||
failure: {
|
||||
type: 'danger',
|
||||
text: 'There was an error while saving the options!',
|
||||
},
|
||||
// Default theme
|
||||
theme: 'light',
|
||||
// Valid extension states
|
||||
states: [
|
||||
'allGood',
|
||||
'notLogging',
|
||||
'notSignedIn',
|
||||
'blacklisted',
|
||||
'whitelisted'
|
||||
],
|
||||
// Predefined alert type and text for success and failure.
|
||||
alert: {
|
||||
success: {
|
||||
type: 'success',
|
||||
text: 'Options have been saved!'
|
||||
},
|
||||
failure: {
|
||||
type: 'danger',
|
||||
text: 'There was an error while saving the options!'
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
|
||||
@@ -32,7 +32,7 @@ class WakaTimeCore {
|
||||
$.ajax({
|
||||
url: config.summariesApiUrl + '?start=' + today + '&end=' + today,
|
||||
dataType: 'json',
|
||||
success: data => {
|
||||
success: (data) => {
|
||||
deferredObject.resolve(data.data[0].grand_total);
|
||||
},
|
||||
error: (xhr, status, err) => {
|
||||
@@ -56,7 +56,7 @@ class WakaTimeCore {
|
||||
$.ajax({
|
||||
url: config.currentUserApiUrl,
|
||||
dataType: 'json',
|
||||
success: data => {
|
||||
success: (data) => {
|
||||
deferredObject.resolve(data.data);
|
||||
},
|
||||
error: (xhr, status, err) => {
|
||||
@@ -80,14 +80,14 @@ class WakaTimeCore {
|
||||
blacklist: '',
|
||||
whitelist: '',
|
||||
})
|
||||
.then(items => {
|
||||
.then((items) => {
|
||||
if (items.loggingEnabled === true) {
|
||||
changeExtensionState('allGood');
|
||||
|
||||
browser.idle.queryState(config.detectionIntervalInSeconds).then(newState => {
|
||||
browser.idle.queryState(config.detectionIntervalInSeconds).then((newState) => {
|
||||
if (newState === 'active') {
|
||||
// Get current tab URL.
|
||||
browser.tabs.query({ currentWindow: true, active: true }).then(tabs => {
|
||||
browser.tabs.query({ currentWindow: true, active: true }).then((tabs) => {
|
||||
if (tabs.length == 0) return;
|
||||
|
||||
var currentActiveTab = tabs[0];
|
||||
@@ -141,9 +141,9 @@ class WakaTimeCore {
|
||||
* @returns {object}
|
||||
*/
|
||||
getHeartbeat(url, list) {
|
||||
const projectIndicatorCharacters = '@@';
|
||||
var projectIndicatorCharacters = '@@';
|
||||
|
||||
const lines = list.split('\n');
|
||||
var lines = list.split('\n');
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
// strip (http:// or https://) and trailing (`/` or `@@`)
|
||||
var cleanLine = lines[i]
|
||||
@@ -241,7 +241,7 @@ class WakaTimeCore {
|
||||
sendHeartbeat(heartbeat, debug) {
|
||||
var payload = null;
|
||||
|
||||
this._getLoggingType().done(loggingType => {
|
||||
this._getLoggingType().done((loggingType) => {
|
||||
// Get only the domain from the entity.
|
||||
// And send that in heartbeat
|
||||
if (loggingType == 'domain') {
|
||||
@@ -283,7 +283,7 @@ class WakaTimeCore {
|
||||
// nothing to do here
|
||||
},
|
||||
},
|
||||
success: response => {
|
||||
success: (response) => {
|
||||
deferredObject.resolve(this);
|
||||
},
|
||||
error: (xhr, status, err) => {
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
// Create a connection to the background page
|
||||
var backgroundPageConnection = browser.runtime.connect({
|
||||
name: "devtools-page"
|
||||
name: 'devtools-page',
|
||||
});
|
||||
|
||||
// Send a message to background page with the current active tabId
|
||||
backgroundPageConnection.postMessage({
|
||||
name: 'init',
|
||||
tabId: browser.devtools.inspectedWindow.tabId
|
||||
name: 'init',
|
||||
tabId: browser.devtools.inspectedWindow.tabId,
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* global browser */
|
||||
|
||||
// Core
|
||||
var WakaTimeCore = require("./core/WakaTimeCore").default;
|
||||
var WakaTimeCore = require('./core/WakaTimeCore').default;
|
||||
|
||||
// initialize class
|
||||
var wakatime = new WakaTimeCore();
|
||||
@@ -12,46 +12,40 @@ var connections = {};
|
||||
|
||||
// Add a listener to resolve alarms
|
||||
browser.alarms.onAlarm.addListener(function (alarm) {
|
||||
// |alarm| can be undefined because onAlarm also gets called from
|
||||
// window.setTimeout on old chrome versions.
|
||||
if (alarm && alarm.name == 'heartbeatAlarm') {
|
||||
// |alarm| can be undefined because onAlarm also gets called from
|
||||
// window.setTimeout on old chrome versions.
|
||||
if (alarm && alarm.name == 'heartbeatAlarm') {
|
||||
console.log('recording a heartbeat - alarm triggered');
|
||||
|
||||
console.log('recording a heartbeat - alarm triggered');
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
});
|
||||
|
||||
// Create a new alarm for heartbeats.
|
||||
browser.alarms.create('heartbeatAlarm', {periodInMinutes: 2});
|
||||
browser.alarms.create('heartbeatAlarm', { periodInMinutes: 2 });
|
||||
|
||||
/**
|
||||
* Whenever a active tab is changed it records a heartbeat with that tab url.
|
||||
*/
|
||||
browser.tabs.onActivated.addListener(function (activeInfo) {
|
||||
browser.tabs.get(activeInfo.tabId).then(function (tab) {
|
||||
console.log('recording a heartbeat - active tab changed');
|
||||
|
||||
browser.tabs.get(activeInfo.tabId).then(function (tab) {
|
||||
|
||||
console.log('recording a heartbeat - active tab changed');
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
});
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Whenever a active window is changed it records a heartbeat with the active tab url.
|
||||
*/
|
||||
browser.windows.onFocusChanged.addListener(function (windowId) {
|
||||
if (windowId != browser.windows.WINDOW_ID_NONE) {
|
||||
console.log('recording a heartbeat - active window changed');
|
||||
|
||||
if (windowId != browser.windows.WINDOW_ID_NONE) {
|
||||
console.log('recording a heartbeat - active window changed');
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
} else {
|
||||
console.log('lost focus');
|
||||
}
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
} else {
|
||||
console.log('lost focus');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -59,57 +53,49 @@ browser.windows.onFocusChanged.addListener(function (windowId) {
|
||||
* currently active and if it is, then it records a heartbeat.
|
||||
*/
|
||||
browser.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
|
||||
if (changeInfo.status === 'complete') {
|
||||
// Get current tab URL.
|
||||
browser.tabs.query({ currentWindow: true, active: true }).then(function (tabs) {
|
||||
// If tab updated is the same as active tab
|
||||
if (tabId == tabs[0].id) {
|
||||
console.log('recording a heartbeat - tab updated');
|
||||
|
||||
if (changeInfo.status === 'complete') {
|
||||
// Get current tab URL.
|
||||
browser.tabs.query({currentWindow: true, active: true}).then(function(tabs) {
|
||||
// If tab updated is the same as active tab
|
||||
if (tabId == tabs[0].id) {
|
||||
console.log('recording a heartbeat - tab updated');
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* This is in charge of detecting if devtools are opened or closed
|
||||
* and sending a heartbeat depending on that.
|
||||
*/
|
||||
browser.runtime.onConnect.addListener(function (port) {
|
||||
if (port.name == 'devtools-page') {
|
||||
// Listen to messages sent from the DevTools page
|
||||
port.onMessage.addListener(function (message, sender, sendResponse) {
|
||||
if (message.name == 'init') {
|
||||
connections[message.tabId] = port;
|
||||
|
||||
if (port.name == "devtools-page") {
|
||||
wakatime.setTabsWithDevtoolsOpen(Object.keys(connections));
|
||||
|
||||
// Listen to messages sent from the DevTools page
|
||||
port.onMessage.addListener(function (message, sender, sendResponse) {
|
||||
if (message.name == "init") {
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
});
|
||||
|
||||
connections[message.tabId] = port;
|
||||
port.onDisconnect.addListener(function (port) {
|
||||
var tabs = Object.keys(connections);
|
||||
|
||||
wakatime.setTabsWithDevtoolsOpen(Object.keys(connections));
|
||||
for (var i = 0, len = tabs.length; i < len; i++) {
|
||||
if (connections[tabs[i]] == port) {
|
||||
delete connections[tabs[i]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
}
|
||||
});
|
||||
wakatime.setTabsWithDevtoolsOpen(Object.keys(connections));
|
||||
|
||||
port.onDisconnect.addListener(function (port) {
|
||||
|
||||
var tabs = Object.keys(connections);
|
||||
|
||||
for (var i = 0, len = tabs.length; i < len; i ++) {
|
||||
if (connections[tabs[i]] == port) {
|
||||
delete connections[tabs[i]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
wakatime.setTabsWithDevtoolsOpen(Object.keys(connections));
|
||||
|
||||
wakatime.recordHeartbeat();
|
||||
});
|
||||
|
||||
}
|
||||
wakatime.recordHeartbeat();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -9,42 +9,41 @@ var config = require('../config');
|
||||
* @param color
|
||||
*/
|
||||
function changeExtensionIcon(color) {
|
||||
color = color ? color : '';
|
||||
|
||||
color = color ? color : '';
|
||||
var path = null;
|
||||
|
||||
var path = null;
|
||||
if (color !== '') {
|
||||
color = '-' + color;
|
||||
|
||||
if (color !== '') {
|
||||
color = '-' + color;
|
||||
path = './graphics/wakatime-logo-38' + color + '.png';
|
||||
|
||||
path = './graphics/wakatime-logo-38' + color + '.png';
|
||||
browser.browserAction.setIcon({
|
||||
path: path,
|
||||
});
|
||||
}
|
||||
|
||||
browser.browserAction.setIcon({
|
||||
path: path
|
||||
});
|
||||
}
|
||||
if (color === '') {
|
||||
browser.storage.sync
|
||||
.get({
|
||||
theme: config.theme,
|
||||
})
|
||||
.then(function (items) {
|
||||
if (items.theme == config.theme) {
|
||||
path = './graphics/wakatime-logo-38.png';
|
||||
|
||||
if (color === '') {
|
||||
browser.storage.sync.get({
|
||||
theme: config.theme
|
||||
}).then(function (items) {
|
||||
if (items.theme == config.theme) {
|
||||
path = './graphics/wakatime-logo-38.png';
|
||||
|
||||
browser.browserAction.setIcon({
|
||||
path: path
|
||||
});
|
||||
}
|
||||
else {
|
||||
path = './graphics/wakatime-logo-38-white.png';
|
||||
|
||||
browser.browserAction.setIcon({
|
||||
path: path
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
browser.browserAction.setIcon({
|
||||
path: path,
|
||||
});
|
||||
} else {
|
||||
path = './graphics/wakatime-logo-38-white.png';
|
||||
|
||||
browser.browserAction.setIcon({
|
||||
path: path,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = changeExtensionIcon;
|
||||
|
||||
@@ -11,32 +11,32 @@ var in_array = require('./in_array');
|
||||
* @param state
|
||||
*/
|
||||
function changeExtensionState(state) {
|
||||
if (! in_array(state, config.states)) {
|
||||
throw new Error('Not a valid state!');
|
||||
}
|
||||
if (!in_array(state, config.states)) {
|
||||
throw new Error('Not a valid state!');
|
||||
}
|
||||
|
||||
switch (state) {
|
||||
case 'allGood':
|
||||
changeExtensionIcon(config.colors.allGood);
|
||||
changeExtensionTooltip(config.tooltips.allGood);
|
||||
break;
|
||||
case 'notLogging':
|
||||
changeExtensionIcon(config.colors.notLogging);
|
||||
changeExtensionTooltip(config.tooltips.notLogging);
|
||||
break;
|
||||
case 'notSignedIn':
|
||||
changeExtensionIcon(config.colors.notSignedIn);
|
||||
changeExtensionTooltip(config.tooltips.notSignedIn);
|
||||
break;
|
||||
case 'blacklisted':
|
||||
changeExtensionIcon(config.colors.notLogging);
|
||||
changeExtensionTooltip(config.tooltips.blacklisted);
|
||||
break;
|
||||
case 'whitelisted':
|
||||
changeExtensionIcon(config.colors.notLogging);
|
||||
changeExtensionTooltip(config.tooltips.whitelisted);
|
||||
break;
|
||||
}
|
||||
switch (state) {
|
||||
case 'allGood':
|
||||
changeExtensionIcon(config.colors.allGood);
|
||||
changeExtensionTooltip(config.tooltips.allGood);
|
||||
break;
|
||||
case 'notLogging':
|
||||
changeExtensionIcon(config.colors.notLogging);
|
||||
changeExtensionTooltip(config.tooltips.notLogging);
|
||||
break;
|
||||
case 'notSignedIn':
|
||||
changeExtensionIcon(config.colors.notSignedIn);
|
||||
changeExtensionTooltip(config.tooltips.notSignedIn);
|
||||
break;
|
||||
case 'blacklisted':
|
||||
changeExtensionIcon(config.colors.notLogging);
|
||||
changeExtensionTooltip(config.tooltips.blacklisted);
|
||||
break;
|
||||
case 'whitelisted':
|
||||
changeExtensionIcon(config.colors.notLogging);
|
||||
changeExtensionTooltip(config.tooltips.whitelisted);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = changeExtensionState;
|
||||
module.exports = changeExtensionState;
|
||||
|
||||
@@ -8,15 +8,13 @@ var config = require('../config');
|
||||
* @param text
|
||||
*/
|
||||
function changeExtensionTooltip(text) {
|
||||
if (text === '') {
|
||||
text = config.name;
|
||||
} else {
|
||||
text = config.name + ' - ' + text;
|
||||
}
|
||||
|
||||
if (text === '') {
|
||||
text = config.name;
|
||||
}
|
||||
else {
|
||||
text = config.name + ' - ' + text;
|
||||
}
|
||||
|
||||
browser.browserAction.setTitle({title: text});
|
||||
browser.browserAction.setTitle({ title: text });
|
||||
}
|
||||
|
||||
module.exports = changeExtensionTooltip;
|
||||
module.exports = changeExtensionTooltip;
|
||||
|
||||
@@ -7,25 +7,24 @@
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function contains(url, list) {
|
||||
var lines = list.split('\n');
|
||||
var lines = list.split('\n');
|
||||
|
||||
for (var i = 0; i < lines.length; i ++) {
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
// Trim all lines from the list one by one
|
||||
var cleanLine = lines[i].trim();
|
||||
|
||||
// Trim all lines from the list one by one
|
||||
var cleanLine = lines[i].trim();
|
||||
// If by any chance one line in the list is empty, ignore it
|
||||
if (cleanLine === '') continue;
|
||||
|
||||
// If by any chance one line in the list is empty, ignore it
|
||||
if(cleanLine === '') continue;
|
||||
var lineRe = new RegExp(cleanLine.replace('.', '.').replace('*', '.*'));
|
||||
|
||||
var lineRe = new RegExp(cleanLine.replace('.', '\.').replace('*', '.*'));
|
||||
|
||||
// If url matches the current line return true
|
||||
if (lineRe.test(url)) {
|
||||
return true;
|
||||
}
|
||||
// If url matches the current line return true
|
||||
if (lineRe.test(url)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = contains;
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
* @returns {string}
|
||||
*/
|
||||
function getDomainFromUrl(url) {
|
||||
var parts = url.split('/');
|
||||
var parts = url.split('/');
|
||||
|
||||
return parts[0] + "//" + parts[2];
|
||||
return parts[0] + '//' + parts[2];
|
||||
}
|
||||
|
||||
module.exports = getDomainFromUrl;
|
||||
module.exports = getDomainFromUrl;
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function in_array(needle, haystack) {
|
||||
for (var i = 0; i < haystack.length; i ++) {
|
||||
if (needle == haystack[i]) {
|
||||
return true;
|
||||
}
|
||||
for (var i = 0; i < haystack.length; i++) {
|
||||
if (needle == haystack[i]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = in_array;
|
||||
module.exports = in_array;
|
||||
|
||||
@@ -10,7 +10,4 @@ var ReactDOM = require('react-dom');
|
||||
// React components
|
||||
var Options = require('./components/Options.jsx');
|
||||
|
||||
ReactDOM.render(
|
||||
<Options />,
|
||||
document.getElementById('wakatime-options')
|
||||
);
|
||||
ReactDOM.render(<Options />, document.getElementById('wakatime-options'));
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
@import "bootstrap/bootstrap";
|
||||
@import "font-awesome/font-awesome";
|
||||
@import "bootswatch/paper/bootswatch";
|
||||
@import "bootswatch/paper/variables";
|
||||
@import "variables";
|
||||
@import "partials/_animations";
|
||||
@import 'bootstrap/bootstrap';
|
||||
@import 'font-awesome/font-awesome';
|
||||
@import 'bootswatch/paper/bootswatch';
|
||||
@import 'bootswatch/paper/variables';
|
||||
@import 'variables';
|
||||
@import 'partials/_animations';
|
||||
|
||||
body {
|
||||
min-width: 357px;
|
||||
@@ -18,11 +18,11 @@ a.navbar-brand {
|
||||
}
|
||||
|
||||
div.container {
|
||||
margin-top: 20px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
canvas#icon {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div#status {
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Alerts
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base styles
|
||||
// -------------------------
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Badges
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base class
|
||||
.badge {
|
||||
display: inline-block;
|
||||
|
||||
82
assets/less/bootstrap/bootstrap.less
vendored
82
assets/less/bootstrap/bootstrap.less
vendored
@@ -1,56 +1,56 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.6 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
// Core variables and mixins
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
@import 'variables.less';
|
||||
@import 'mixins.less';
|
||||
|
||||
// Reset and dependencies
|
||||
@import "normalize.less";
|
||||
@import "print.less";
|
||||
@import "glyphicons.less";
|
||||
@import 'normalize.less';
|
||||
@import 'print.less';
|
||||
@import 'glyphicons.less';
|
||||
|
||||
// Core CSS
|
||||
@import "scaffolding.less";
|
||||
@import "type.less";
|
||||
@import "code.less";
|
||||
@import "grid.less";
|
||||
@import "tables.less";
|
||||
@import "forms.less";
|
||||
@import "buttons.less";
|
||||
@import 'scaffolding.less';
|
||||
@import 'type.less';
|
||||
@import 'code.less';
|
||||
@import 'grid.less';
|
||||
@import 'tables.less';
|
||||
@import 'forms.less';
|
||||
@import 'buttons.less';
|
||||
|
||||
// Components
|
||||
@import "component-animations.less";
|
||||
@import "dropdowns.less";
|
||||
@import "button-groups.less";
|
||||
@import "input-groups.less";
|
||||
@import "navs.less";
|
||||
@import "navbar.less";
|
||||
@import "breadcrumbs.less";
|
||||
@import "pagination.less";
|
||||
@import "pager.less";
|
||||
@import "labels.less";
|
||||
@import "badges.less";
|
||||
@import "jumbotron.less";
|
||||
@import "thumbnails.less";
|
||||
@import "alerts.less";
|
||||
@import "progress-bars.less";
|
||||
@import "media.less";
|
||||
@import "list-group.less";
|
||||
@import "panels.less";
|
||||
@import "responsive-embed.less";
|
||||
@import "wells.less";
|
||||
@import "close.less";
|
||||
@import 'component-animations.less';
|
||||
@import 'dropdowns.less';
|
||||
@import 'button-groups.less';
|
||||
@import 'input-groups.less';
|
||||
@import 'navs.less';
|
||||
@import 'navbar.less';
|
||||
@import 'breadcrumbs.less';
|
||||
@import 'pagination.less';
|
||||
@import 'pager.less';
|
||||
@import 'labels.less';
|
||||
@import 'badges.less';
|
||||
@import 'jumbotron.less';
|
||||
@import 'thumbnails.less';
|
||||
@import 'alerts.less';
|
||||
@import 'progress-bars.less';
|
||||
@import 'media.less';
|
||||
@import 'list-group.less';
|
||||
@import 'panels.less';
|
||||
@import 'responsive-embed.less';
|
||||
@import 'wells.less';
|
||||
@import 'close.less';
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "modals.less";
|
||||
@import "tooltip.less";
|
||||
@import "popovers.less";
|
||||
@import "carousel.less";
|
||||
@import 'modals.less';
|
||||
@import 'tooltip.less';
|
||||
@import 'popovers.less';
|
||||
@import 'carousel.less';
|
||||
|
||||
// Utility classes
|
||||
@import "utilities.less";
|
||||
@import "responsive-utilities.less";
|
||||
@import 'utilities.less';
|
||||
@import 'responsive-utilities.less';
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Breadcrumbs
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.breadcrumb {
|
||||
padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
|
||||
margin-bottom: @line-height-computed;
|
||||
@@ -14,7 +13,7 @@
|
||||
display: inline-block;
|
||||
|
||||
+ li:before {
|
||||
content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
|
||||
content: '@{breadcrumb-separator}\00a0'; // Unicode space added since inline-block means non-collapsing white-space
|
||||
padding: 0 5px;
|
||||
color: @breadcrumb-color;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
.border-right-radius(0);
|
||||
}
|
||||
}
|
||||
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
|
||||
// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
|
||||
.btn-group > .btn:last-child:not(:first-child),
|
||||
.btn-group > .dropdown-toggle:not(:first-child) {
|
||||
.border-left-radius(0);
|
||||
@@ -88,15 +88,19 @@
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
|
||||
// Sizing
|
||||
//
|
||||
// Remix the default button sizing classes into new ones for easier manipulation.
|
||||
|
||||
.btn-group-xs > .btn { &:extend(.btn-xs); }
|
||||
.btn-group-sm > .btn { &:extend(.btn-sm); }
|
||||
.btn-group-lg > .btn { &:extend(.btn-lg); }
|
||||
|
||||
.btn-group-xs > .btn {
|
||||
&:extend(.btn-xs);
|
||||
}
|
||||
.btn-group-sm > .btn {
|
||||
&:extend(.btn-sm);
|
||||
}
|
||||
.btn-group-lg > .btn {
|
||||
&:extend(.btn-lg);
|
||||
}
|
||||
|
||||
// Split button dropdowns
|
||||
// ----------------------
|
||||
@@ -114,7 +118,7 @@
|
||||
// The clickable button for toggling the menu
|
||||
// Remove the gradient and set the same inset shadow as the :active state
|
||||
.btn-group.open .dropdown-toggle {
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,0.125));
|
||||
|
||||
// Show no shadow for `.btn-link` since it has no other button styles.
|
||||
&.btn-link {
|
||||
@@ -122,7 +126,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Reposition the caret
|
||||
.btn .caret {
|
||||
margin-left: 0;
|
||||
@@ -137,7 +140,6 @@
|
||||
border-width: 0 @caret-width-large @caret-width-large;
|
||||
}
|
||||
|
||||
|
||||
// Vertical button groups
|
||||
// ----------------------
|
||||
|
||||
@@ -194,7 +196,6 @@
|
||||
.border-top-radius(0);
|
||||
}
|
||||
|
||||
|
||||
// Justified button groups
|
||||
// ----------------------
|
||||
|
||||
@@ -218,7 +219,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Checkbox and radio options
|
||||
//
|
||||
// In order to support the browser's form validation feedback, powered by the
|
||||
@@ -231,13 +231,13 @@
|
||||
// See https://github.com/twbs/bootstrap/pull/12794 and
|
||||
// https://github.com/twbs/bootstrap/pull/14559 for more information.
|
||||
|
||||
[data-toggle="buttons"] {
|
||||
[data-toggle='buttons'] {
|
||||
> .btn,
|
||||
> .btn-group > .btn {
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
input[type='radio'],
|
||||
input[type='checkbox'] {
|
||||
position: absolute;
|
||||
clip: rect(0,0,0,0);
|
||||
clip: rect(0, 0, 0, 0);
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base styles
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -40,14 +39,14 @@
|
||||
&.active {
|
||||
outline: 0;
|
||||
background-image: none;
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,0.125));
|
||||
}
|
||||
|
||||
&.disabled,
|
||||
&[disabled],
|
||||
fieldset[disabled] & {
|
||||
cursor: @cursor-disabled;
|
||||
.opacity(.65);
|
||||
.opacity(0.65);
|
||||
.box-shadow(none);
|
||||
}
|
||||
|
||||
@@ -59,7 +58,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alternate buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -86,7 +84,6 @@
|
||||
.button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
|
||||
}
|
||||
|
||||
|
||||
// Link buttons
|
||||
// -------------------------
|
||||
|
||||
@@ -126,7 +123,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Button Sizes
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -142,7 +138,6 @@
|
||||
.button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
|
||||
}
|
||||
|
||||
|
||||
// Block button
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -157,9 +152,9 @@
|
||||
}
|
||||
|
||||
// Specificity overrides
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"] {
|
||||
input[type='submit'],
|
||||
input[type='reset'],
|
||||
input[type='button'] {
|
||||
&.btn-block {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Carousel
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Wrapper for the slide container and indicators
|
||||
.carousel {
|
||||
position: relative;
|
||||
@@ -16,7 +15,7 @@
|
||||
> .item {
|
||||
display: none;
|
||||
position: relative;
|
||||
.transition(.6s ease-in-out left);
|
||||
.transition(0.6s ease-in-out left);
|
||||
|
||||
// Account for jankitude on images
|
||||
> img,
|
||||
@@ -84,7 +83,6 @@
|
||||
> .active.right {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Left/right controls for nav
|
||||
@@ -107,12 +105,12 @@
|
||||
|
||||
// Set gradients for backgrounds
|
||||
&.left {
|
||||
#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
|
||||
#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));;
|
||||
}
|
||||
&.right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
|
||||
#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));;
|
||||
}
|
||||
|
||||
// Hover/focus state
|
||||
@@ -121,7 +119,7 @@
|
||||
outline: 0;
|
||||
color: @carousel-control-color;
|
||||
text-decoration: none;
|
||||
.opacity(.9);
|
||||
.opacity(0.9);
|
||||
}
|
||||
|
||||
// Toggles
|
||||
@@ -147,21 +145,20 @@
|
||||
}
|
||||
.icon-prev,
|
||||
.icon-next {
|
||||
width: 20px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
line-height: 1;
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
|
||||
.icon-prev {
|
||||
&:before {
|
||||
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
|
||||
content: '\2039'; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
|
||||
}
|
||||
}
|
||||
.icon-next {
|
||||
&:before {
|
||||
content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
|
||||
content: '\203a'; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -184,7 +181,7 @@
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
width: 10px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin: 1px;
|
||||
text-indent: -999px;
|
||||
@@ -202,11 +199,11 @@
|
||||
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
|
||||
// set alpha transparency for the best results possible.
|
||||
background-color: #000 \9; // IE8
|
||||
background-color: rgba(0,0,0,0); // IE9
|
||||
background-color: rgba(0, 0, 0, 0); // IE9
|
||||
}
|
||||
.active {
|
||||
margin: 0;
|
||||
width: 12px;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background-color: @carousel-indicator-active-bg;
|
||||
}
|
||||
@@ -231,10 +228,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Scale up controls for tablets and up
|
||||
@media screen and (min-width: @screen-sm-min) {
|
||||
|
||||
// Scale up the controls a smidge
|
||||
.carousel-control {
|
||||
.glyphicon-chevron-left,
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Close icons
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.close {
|
||||
float: right;
|
||||
font-size: (@font-size-base * 1.5);
|
||||
@@ -10,14 +9,14 @@
|
||||
line-height: 1;
|
||||
color: @close-color;
|
||||
text-shadow: @close-text-shadow;
|
||||
.opacity(.2);
|
||||
.opacity(0.2);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @close-color;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
.opacity(.5);
|
||||
.opacity(0.5);
|
||||
}
|
||||
|
||||
// Additional properties for button version
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Code (inline and block)
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Inline and block code styles
|
||||
code,
|
||||
kbd,
|
||||
@@ -27,7 +26,7 @@ kbd {
|
||||
color: @kbd-color;
|
||||
background-color: @kbd-bg;
|
||||
border-radius: @border-radius-small;
|
||||
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
|
||||
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
|
||||
kbd {
|
||||
padding: 0;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
.fade {
|
||||
opacity: 0;
|
||||
.transition(opacity .15s linear);
|
||||
.transition(opacity 0.15s linear);
|
||||
&.in {
|
||||
opacity: 1;
|
||||
}
|
||||
@@ -18,16 +18,22 @@
|
||||
.collapse {
|
||||
display: none;
|
||||
|
||||
&.in { display: block; }
|
||||
tr&.in { display: table-row; }
|
||||
tbody&.in { display: table-row-group; }
|
||||
&.in {
|
||||
display: block;
|
||||
}
|
||||
tr&.in {
|
||||
display: table-row;
|
||||
}
|
||||
tbody&.in {
|
||||
display: table-row-group;
|
||||
}
|
||||
}
|
||||
|
||||
.collapsing {
|
||||
position: relative;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
.transition-property(~"height, visibility");
|
||||
.transition-duration(.35s);
|
||||
.transition-property(~'height, visibility');
|
||||
.transition-duration(0.35s);
|
||||
.transition-timing-function(ease);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Dropdown menus
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Dropdown arrow/caret
|
||||
.caret {
|
||||
display: inline-block;
|
||||
@@ -10,10 +9,10 @@
|
||||
height: 0;
|
||||
margin-left: 2px;
|
||||
vertical-align: middle;
|
||||
border-top: @caret-width-base dashed;
|
||||
border-top: @caret-width-base solid ~"\9"; // IE8
|
||||
border-top: @caret-width-base dashed;
|
||||
border-top: @caret-width-base solid ~'\9'; // IE8
|
||||
border-right: @caret-width-base solid transparent;
|
||||
border-left: @caret-width-base solid transparent;
|
||||
border-left: @caret-width-base solid transparent;
|
||||
}
|
||||
|
||||
// The dropdown wrapper (div)
|
||||
@@ -45,7 +44,7 @@
|
||||
border: 1px solid @dropdown-fallback-border; // IE8 fallback
|
||||
border: 1px solid @dropdown-border;
|
||||
border-radius: @border-radius-base;
|
||||
.box-shadow(0 6px 12px rgba(0,0,0,.175));
|
||||
.box-shadow(0 6px 12px rgba(0,0,0,0.175));
|
||||
background-clip: padding-box;
|
||||
|
||||
// Aligns the dropdown menu to right
|
||||
@@ -186,8 +185,8 @@
|
||||
.caret {
|
||||
border-top: 0;
|
||||
border-bottom: @caret-width-base dashed;
|
||||
border-bottom: @caret-width-base solid ~"\9"; // IE8
|
||||
content: "";
|
||||
border-bottom: @caret-width-base solid ~'\9'; // IE8
|
||||
content: '';
|
||||
}
|
||||
// Different positioning for bottom up menu
|
||||
.dropdown-menu {
|
||||
@@ -197,7 +196,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Component alignment
|
||||
//
|
||||
// Reiterate per navbar.less and the modified component alignment there.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Forms
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Normalize non-controls
|
||||
//
|
||||
// Restyle and baseline non-control form elements.
|
||||
@@ -36,7 +35,6 @@ label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
// Normalize form controls
|
||||
//
|
||||
// While most of our form styles require extra classes, some basic normalization
|
||||
@@ -44,24 +42,24 @@ label {
|
||||
// address browser inconsistencies.
|
||||
|
||||
// Override content-box in Normalize (* isn't specific enough)
|
||||
input[type="search"] {
|
||||
input[type='search'] {
|
||||
.box-sizing(border-box);
|
||||
}
|
||||
|
||||
// Position radios and checkboxes better
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
input[type='radio'],
|
||||
input[type='checkbox'] {
|
||||
margin: 4px 0 0;
|
||||
margin-top: 1px \9; // IE8-9
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
input[type='file'] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Make range inputs behave like textual form controls
|
||||
input[type="range"] {
|
||||
input[type='range'] {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
@@ -73,9 +71,9 @@ select[size] {
|
||||
}
|
||||
|
||||
// Focus for file, radio, and checkbox
|
||||
input[type="file"]:focus,
|
||||
input[type="radio"]:focus,
|
||||
input[type="checkbox"]:focus {
|
||||
input[type='file']:focus,
|
||||
input[type='radio']:focus,
|
||||
input[type='checkbox']:focus {
|
||||
.tab-focus();
|
||||
}
|
||||
|
||||
@@ -88,7 +86,6 @@ output {
|
||||
color: @input-color;
|
||||
}
|
||||
|
||||
|
||||
// Common form controls
|
||||
//
|
||||
// Shared size and type resets for form controls. Apply `.form-control` to any
|
||||
@@ -123,8 +120,8 @@ output {
|
||||
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||
border: 1px solid @input-border;
|
||||
border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
|
||||
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,0.075));
|
||||
.transition(~'border-color ease-in-out .15s, box-shadow ease-in-out .15s');
|
||||
|
||||
// Customize the `:focus` state to imitate native WebKit styles.
|
||||
.form-control-focus();
|
||||
@@ -161,7 +158,6 @@ output {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Search inputs in iOS
|
||||
//
|
||||
// This overrides the extra rounded corners on search inputs in iOS so that our
|
||||
@@ -169,11 +165,10 @@ output {
|
||||
// be added to `.form-control` as it's not specific enough. For details, see
|
||||
// https://github.com/twbs/bootstrap/issues/11586.
|
||||
|
||||
input[type="search"] {
|
||||
input[type='search'] {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
|
||||
// Special styles for iOS temporal inputs
|
||||
//
|
||||
// In Mobile Safari, setting `display: block` on temporal inputs causes the
|
||||
@@ -181,13 +176,13 @@ input[type="search"] {
|
||||
// set a pixel line-height that matches the given height of the input, but only
|
||||
// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
|
||||
//
|
||||
// Note that as of 8.3, iOS doesn't support `datetime` or `week`.
|
||||
// Note that as of 9.3, iOS doesn't support `week`.
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
||||
input[type="date"],
|
||||
input[type="time"],
|
||||
input[type="datetime-local"],
|
||||
input[type="month"] {
|
||||
input[type='date'],
|
||||
input[type='time'],
|
||||
input[type='datetime-local'],
|
||||
input[type='month'] {
|
||||
&.form-control {
|
||||
line-height: @input-height-base;
|
||||
}
|
||||
@@ -204,7 +199,6 @@ input[type="search"] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form groups
|
||||
//
|
||||
// Designed to help with the organization and spacing of vertical forms. For
|
||||
@@ -214,7 +208,6 @@ input[type="search"] {
|
||||
margin-bottom: @form-group-margin-bottom;
|
||||
}
|
||||
|
||||
|
||||
// Checkboxes and radios
|
||||
//
|
||||
// Indent the labels to position radios/checkboxes as hanging controls.
|
||||
@@ -234,10 +227,10 @@ input[type="search"] {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.radio input[type="radio"],
|
||||
.radio-inline input[type="radio"],
|
||||
.checkbox input[type="checkbox"],
|
||||
.checkbox-inline input[type="checkbox"] {
|
||||
.radio input[type='radio'],
|
||||
.radio-inline input[type='radio'],
|
||||
.checkbox input[type='checkbox'],
|
||||
.checkbox-inline input[type='checkbox'] {
|
||||
position: absolute;
|
||||
margin-left: -20px;
|
||||
margin-top: 4px \9;
|
||||
@@ -269,8 +262,8 @@ input[type="search"] {
|
||||
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
|
||||
//
|
||||
// Note: Neither radios nor checkboxes can be readonly.
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
input[type='radio'],
|
||||
input[type='checkbox'] {
|
||||
&[disabled],
|
||||
&.disabled,
|
||||
fieldset[disabled] & {
|
||||
@@ -296,7 +289,6 @@ input[type="checkbox"] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Static form control text
|
||||
//
|
||||
// Apply class to a `p` element to make any string of text align with labels in
|
||||
@@ -317,7 +309,6 @@ input[type="checkbox"] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form control sizing
|
||||
//
|
||||
// Build on `.form-control` with modifier classes to decrease or increase the
|
||||
@@ -382,7 +373,6 @@ input[type="checkbox"] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form control feedback states
|
||||
//
|
||||
// Apply contextual and semantic states to individual form controls.
|
||||
@@ -437,7 +427,6 @@ input[type="checkbox"] {
|
||||
|
||||
// Reposition feedback icon if input has visible label above
|
||||
.has-feedback label {
|
||||
|
||||
& ~ .form-control-feedback {
|
||||
top: (@line-height-computed + 5); // Height of the `label` and its margin
|
||||
}
|
||||
@@ -446,7 +435,6 @@ input[type="checkbox"] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Help text
|
||||
//
|
||||
// Apply to any element you wish to create light text for placement immediately
|
||||
@@ -459,7 +447,6 @@ input[type="checkbox"] {
|
||||
color: lighten(@text-color, 25%); // lighten the text some for contrast
|
||||
}
|
||||
|
||||
|
||||
// Inline forms
|
||||
//
|
||||
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
|
||||
@@ -472,7 +459,6 @@ input[type="checkbox"] {
|
||||
// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
|
||||
|
||||
.form-inline {
|
||||
|
||||
// Kick in the inline
|
||||
@media (min-width: @screen-sm-min) {
|
||||
// Inline-block all the things for "inline"
|
||||
@@ -528,8 +514,8 @@ input[type="checkbox"] {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
.radio input[type="radio"],
|
||||
.checkbox input[type="checkbox"] {
|
||||
.radio input[type='radio'],
|
||||
.checkbox input[type='checkbox'] {
|
||||
position: relative;
|
||||
margin-left: 0;
|
||||
}
|
||||
@@ -541,14 +527,12 @@ input[type="checkbox"] {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Horizontal forms
|
||||
//
|
||||
// Horizontal forms are built on grid classes and allow you to create forms with
|
||||
// labels on the left and inputs on the right.
|
||||
|
||||
.form-horizontal {
|
||||
|
||||
// Consistent vertical alignment of radios and checkboxes
|
||||
//
|
||||
// Labels also get some reset styles, but that is scoped to a media query below.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,6 @@
|
||||
// Grid system
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Container widths
|
||||
//
|
||||
// Set the container width, and override it for fixed navbars in media queries.
|
||||
@@ -21,7 +20,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Fluid container
|
||||
//
|
||||
// Utilizes the mixin meant for fixed width containers, but without any defined
|
||||
@@ -31,7 +29,6 @@
|
||||
.container-fixed();
|
||||
}
|
||||
|
||||
|
||||
// Row
|
||||
//
|
||||
// Rows contain and clear the floats of your columns.
|
||||
@@ -40,14 +37,12 @@
|
||||
.make-row();
|
||||
}
|
||||
|
||||
|
||||
// Columns
|
||||
//
|
||||
// Common styles for small and large grid columns
|
||||
|
||||
.make-grid-columns();
|
||||
|
||||
|
||||
// Extra small grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for extra small devices like
|
||||
@@ -55,7 +50,6 @@
|
||||
|
||||
.make-grid(xs);
|
||||
|
||||
|
||||
// Small grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the small device range, from phones
|
||||
@@ -65,7 +59,6 @@
|
||||
.make-grid(sm);
|
||||
}
|
||||
|
||||
|
||||
// Medium grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the desktop device range.
|
||||
@@ -74,7 +67,6 @@
|
||||
.make-grid(md);
|
||||
}
|
||||
|
||||
|
||||
// Large grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the large desktop device range.
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
|
||||
|
||||
// Undo padding and float of grid classes
|
||||
&[class*="col-"] {
|
||||
&[class*='col-'] {
|
||||
float: none;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
|
||||
|
||||
&:focus {
|
||||
z-index: 3;
|
||||
}
|
||||
@@ -52,7 +52,6 @@
|
||||
.input-sm();
|
||||
}
|
||||
|
||||
|
||||
// Display as table-cell
|
||||
// -------------------------
|
||||
.input-group-addon,
|
||||
@@ -98,8 +97,8 @@
|
||||
}
|
||||
|
||||
// Nuke default margins from checkboxes and radios to vertically center within.
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
input[type='radio'],
|
||||
input[type='checkbox'] {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
// Jumbotron
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.jumbotron {
|
||||
padding-top: @jumbotron-padding;
|
||||
padding-top: @jumbotron-padding;
|
||||
padding-bottom: @jumbotron-padding;
|
||||
margin-bottom: @jumbotron-padding;
|
||||
color: @jumbotron-color;
|
||||
@@ -28,7 +27,7 @@
|
||||
.container &,
|
||||
.container-fluid & {
|
||||
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
|
||||
padding-left: (@grid-gutter-width / 2);
|
||||
padding-left: (@grid-gutter-width / 2);
|
||||
padding-right: (@grid-gutter-width / 2);
|
||||
}
|
||||
|
||||
@@ -37,12 +36,12 @@
|
||||
}
|
||||
|
||||
@media screen and (min-width: @screen-sm-min) {
|
||||
padding-top: (@jumbotron-padding * 1.6);
|
||||
padding-top: (@jumbotron-padding * 1.6);
|
||||
padding-bottom: (@jumbotron-padding * 1.6);
|
||||
|
||||
.container &,
|
||||
.container-fluid & {
|
||||
padding-left: (@jumbotron-padding * 2);
|
||||
padding-left: (@jumbotron-padding * 2);
|
||||
padding-right: (@jumbotron-padding * 2);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
.label {
|
||||
display: inline;
|
||||
padding: .2em .6em .3em;
|
||||
padding: 0.2em 0.6em 0.3em;
|
||||
font-size: 75%;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
@@ -12,7 +12,7 @@
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: baseline;
|
||||
border-radius: .25em;
|
||||
border-radius: 0.25em;
|
||||
|
||||
// Add hover effects, but only for links
|
||||
a& {
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// List groups
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base class
|
||||
//
|
||||
// Easily usable on <ul>, <ol>, or <div>.
|
||||
@@ -13,7 +12,6 @@
|
||||
padding-left: 0; // reset padding because ul and ol
|
||||
}
|
||||
|
||||
|
||||
// Individual list items
|
||||
//
|
||||
// Use on `li`s or `div`s within the `.list-group` parent.
|
||||
@@ -37,7 +35,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Interactive list items
|
||||
//
|
||||
// Use anchor or button elements instead of `li`s or `div`s to create interactive items.
|
||||
@@ -104,7 +101,6 @@ button.list-group-item {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Contextual variants
|
||||
//
|
||||
// Add modifier classes to change text and background color on individual items.
|
||||
@@ -115,7 +111,6 @@ button.list-group-item {
|
||||
.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
|
||||
.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
|
||||
|
||||
|
||||
// Custom content options
|
||||
//
|
||||
// Extra classes for creating well-formatted content within `.list-group-item`s.
|
||||
|
||||
@@ -2,39 +2,39 @@
|
||||
// --------------------------------------------------
|
||||
|
||||
// Utilities
|
||||
@import "mixins/hide-text.less";
|
||||
@import "mixins/opacity.less";
|
||||
@import "mixins/image.less";
|
||||
@import "mixins/labels.less";
|
||||
@import "mixins/reset-filter.less";
|
||||
@import "mixins/resize.less";
|
||||
@import "mixins/responsive-visibility.less";
|
||||
@import "mixins/size.less";
|
||||
@import "mixins/tab-focus.less";
|
||||
@import "mixins/reset-text.less";
|
||||
@import "mixins/text-emphasis.less";
|
||||
@import "mixins/text-overflow.less";
|
||||
@import "mixins/vendor-prefixes.less";
|
||||
@import 'mixins/hide-text.less';
|
||||
@import 'mixins/opacity.less';
|
||||
@import 'mixins/image.less';
|
||||
@import 'mixins/labels.less';
|
||||
@import 'mixins/reset-filter.less';
|
||||
@import 'mixins/resize.less';
|
||||
@import 'mixins/responsive-visibility.less';
|
||||
@import 'mixins/size.less';
|
||||
@import 'mixins/tab-focus.less';
|
||||
@import 'mixins/reset-text.less';
|
||||
@import 'mixins/text-emphasis.less';
|
||||
@import 'mixins/text-overflow.less';
|
||||
@import 'mixins/vendor-prefixes.less';
|
||||
|
||||
// Components
|
||||
@import "mixins/alerts.less";
|
||||
@import "mixins/buttons.less";
|
||||
@import "mixins/panels.less";
|
||||
@import "mixins/pagination.less";
|
||||
@import "mixins/list-group.less";
|
||||
@import "mixins/nav-divider.less";
|
||||
@import "mixins/forms.less";
|
||||
@import "mixins/progress-bar.less";
|
||||
@import "mixins/table-row.less";
|
||||
@import 'mixins/alerts.less';
|
||||
@import 'mixins/buttons.less';
|
||||
@import 'mixins/panels.less';
|
||||
@import 'mixins/pagination.less';
|
||||
@import 'mixins/list-group.less';
|
||||
@import 'mixins/nav-divider.less';
|
||||
@import 'mixins/forms.less';
|
||||
@import 'mixins/progress-bar.less';
|
||||
@import 'mixins/table-row.less';
|
||||
|
||||
// Skins
|
||||
@import "mixins/background-variant.less";
|
||||
@import "mixins/border-radius.less";
|
||||
@import "mixins/gradients.less";
|
||||
@import 'mixins/background-variant.less';
|
||||
@import 'mixins/border-radius.less';
|
||||
@import 'mixins/gradients.less';
|
||||
|
||||
// Layout
|
||||
@import "mixins/clearfix.less";
|
||||
@import "mixins/center-block.less";
|
||||
@import "mixins/nav-vertical-align.less";
|
||||
@import "mixins/grid-framework.less";
|
||||
@import "mixins/grid.less";
|
||||
@import 'mixins/clearfix.less';
|
||||
@import 'mixins/center-block.less';
|
||||
@import 'mixins/nav-vertical-align.less';
|
||||
@import 'mixins/grid-framework.less';
|
||||
@import 'mixins/grid.less';
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
|
||||
.border-top-radius(@radius) {
|
||||
border-top-right-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
.border-right-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
}
|
||||
.border-bottom-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
}
|
||||
.border-left-radius(@radius) {
|
||||
border-bottom-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
|
||||
@@ -12,26 +12,26 @@
|
||||
&.focus {
|
||||
color: @color;
|
||||
background-color: darken(@background, 10%);
|
||||
border-color: darken(@border, 25%);
|
||||
border-color: darken(@border, 25%);
|
||||
}
|
||||
&:hover {
|
||||
color: @color;
|
||||
background-color: darken(@background, 10%);
|
||||
border-color: darken(@border, 12%);
|
||||
border-color: darken(@border, 12%);
|
||||
}
|
||||
&:active,
|
||||
&.active,
|
||||
.open > .dropdown-toggle& {
|
||||
color: @color;
|
||||
background-color: darken(@background, 10%);
|
||||
border-color: darken(@border, 12%);
|
||||
border-color: darken(@border, 12%);
|
||||
|
||||
&:hover,
|
||||
&:focus,
|
||||
&.focus {
|
||||
color: @color;
|
||||
background-color: darken(@background, 17%);
|
||||
border-color: darken(@border, 25%);
|
||||
border-color: darken(@border, 25%);
|
||||
}
|
||||
}
|
||||
&:active,
|
||||
@@ -46,7 +46,7 @@
|
||||
&:focus,
|
||||
&.focus {
|
||||
background-color: @background;
|
||||
border-color: @border;
|
||||
border-color: @border;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
.clearfix() {
|
||||
&:before,
|
||||
&:after {
|
||||
content: " "; // 1
|
||||
content: ' '; // 1
|
||||
display: table; // 2
|
||||
}
|
||||
&:after {
|
||||
|
||||
@@ -14,16 +14,16 @@
|
||||
&.radio label,
|
||||
&.checkbox label,
|
||||
&.radio-inline label,
|
||||
&.checkbox-inline label {
|
||||
&.checkbox-inline label {
|
||||
color: @text-color;
|
||||
}
|
||||
// Set the border and box shadow on specific inputs to match
|
||||
.form-control {
|
||||
border-color: @border-color;
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,0.075)); // Redeclare so transitions work
|
||||
&:focus {
|
||||
border-color: darken(@border-color, 10%);
|
||||
@shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
|
||||
@shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px lighten(@border-color, 20%);
|
||||
.box-shadow(@shadow);
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form control focus state
|
||||
//
|
||||
// Generate a customized focus state and for any input with the specified color,
|
||||
@@ -53,11 +52,11 @@
|
||||
// Example usage: change the default blue border and shadow to white for better
|
||||
// contrast against a dark gray background.
|
||||
.form-control-focus(@color: @input-border-focus) {
|
||||
@color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
|
||||
@color-rgba: rgba(red(@color), green(@color), blue(@color), 0.6);
|
||||
&:focus {
|
||||
border-color: @color;
|
||||
outline: 0;
|
||||
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
|
||||
.box-shadow(~'inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,34 @@
|
||||
// Gradients
|
||||
|
||||
#gradient {
|
||||
|
||||
// Horizontal gradient, from left to right
|
||||
//
|
||||
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
||||
// Color stops are not available in IE9 and below.
|
||||
.horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
|
||||
background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
|
||||
background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12
|
||||
background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
||||
background-image: -webkit-linear-gradient(
|
||||
left,
|
||||
@start-color @start-percent,
|
||||
@end-color @end-percent
|
||||
); // Safari 5.1-6, Chrome 10+
|
||||
background-image: -o-linear-gradient(
|
||||
left,
|
||||
@start-color @start-percent,
|
||||
@end-color @end-percent
|
||||
); // Opera 12
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
@start-color @start-percent,
|
||||
@end-color @end-percent
|
||||
); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
||||
background-repeat: repeat-x;
|
||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down
|
||||
filter: e(
|
||||
%(
|
||||
"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",
|
||||
argb(@start-color),
|
||||
argb(@end-color)
|
||||
)
|
||||
); // IE9 and down
|
||||
}
|
||||
|
||||
// Vertical gradient, from top to bottom
|
||||
@@ -19,41 +36,111 @@
|
||||
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
||||
// Color stops are not available in IE9 and below.
|
||||
.vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
|
||||
background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
|
||||
background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12
|
||||
background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
||||
background-image: -webkit-linear-gradient(
|
||||
top,
|
||||
@start-color @start-percent,
|
||||
@end-color @end-percent
|
||||
); // Safari 5.1-6, Chrome 10+
|
||||
background-image: -o-linear-gradient(
|
||||
top,
|
||||
@start-color @start-percent,
|
||||
@end-color @end-percent
|
||||
); // Opera 12
|
||||
background-image: linear-gradient(
|
||||
to bottom,
|
||||
@start-color @start-percent,
|
||||
@end-color @end-percent
|
||||
); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
||||
background-repeat: repeat-x;
|
||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down
|
||||
filter: e(
|
||||
%(
|
||||
"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",
|
||||
argb(@start-color),
|
||||
argb(@end-color)
|
||||
)
|
||||
); // IE9 and down
|
||||
}
|
||||
|
||||
.directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
|
||||
background-repeat: repeat-x;
|
||||
background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+
|
||||
background-image: -webkit-linear-gradient(
|
||||
@deg,
|
||||
@start-color,
|
||||
@end-color
|
||||
); // Safari 5.1-6, Chrome 10+
|
||||
background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12
|
||||
background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
||||
background-image: linear-gradient(
|
||||
@deg,
|
||||
@start-color,
|
||||
@end-color
|
||||
); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
||||
}
|
||||
.horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
|
||||
background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
|
||||
background-image: -webkit-linear-gradient(
|
||||
left,
|
||||
@start-color,
|
||||
@mid-color @color-stop,
|
||||
@end-color
|
||||
);
|
||||
background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
|
||||
background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
|
||||
background-repeat: no-repeat;
|
||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
|
||||
filter: e(
|
||||
%(
|
||||
"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",
|
||||
argb(@start-color),
|
||||
argb(@end-color)
|
||||
)
|
||||
); // IE9 and down, gets no color-stop at all for proper fallback
|
||||
}
|
||||
.vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
|
||||
background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
|
||||
background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
|
||||
background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
|
||||
background-repeat: no-repeat;
|
||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
|
||||
filter: e(
|
||||
%(
|
||||
"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",
|
||||
argb(@start-color),
|
||||
argb(@end-color)
|
||||
)
|
||||
); // IE9 and down, gets no color-stop at all for proper fallback
|
||||
}
|
||||
.radial(@inner-color: #555; @outer-color: #333) {
|
||||
background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
|
||||
background-image: radial-gradient(circle, @inner-color, @outer-color);
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.striped(@color: rgba(255,255,255,.15); @angle: 45deg) {
|
||||
background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
|
||||
background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
|
||||
background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
|
||||
.striped(@color: rgba(255,255,255,0.15); @angle: 45deg) {
|
||||
background-image: -webkit-linear-gradient(
|
||||
@angle,
|
||||
@color 25%,
|
||||
transparent 25%,
|
||||
transparent 50%,
|
||||
@color 50%,
|
||||
@color 75%,
|
||||
transparent 75%,
|
||||
transparent
|
||||
);
|
||||
background-image: -o-linear-gradient(
|
||||
@angle,
|
||||
@color 25%,
|
||||
transparent 25%,
|
||||
transparent 50%,
|
||||
@color 50%,
|
||||
@color 75%,
|
||||
transparent 75%,
|
||||
transparent
|
||||
);
|
||||
background-image: linear-gradient(
|
||||
@angle,
|
||||
@color 25%,
|
||||
transparent 25%,
|
||||
transparent 50%,
|
||||
@color 50%,
|
||||
@color 75%,
|
||||
transparent 75%,
|
||||
transparent
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,21 +5,24 @@
|
||||
|
||||
.make-grid-columns() {
|
||||
// Common styles for all sizes of grid columns, widths 1-12
|
||||
.col(@index) { // initial
|
||||
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
|
||||
.col(@index) {
|
||||
// initial
|
||||
@item: ~'.col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}';
|
||||
.col((@index + 1), @item);
|
||||
}
|
||||
.col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
|
||||
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
|
||||
.col((@index + 1), ~"@{list}, @{item}");
|
||||
.col(@index, @list) when (@index =< @grid-columns) {
|
||||
// general; "=<" isn't a typo
|
||||
@item: ~'.col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}';
|
||||
.col((@index + 1), ~'@{list}, @{item}');
|
||||
}
|
||||
.col(@index, @list) when (@index > @grid-columns) { // terminal
|
||||
.col(@index, @list) when (@index > @grid-columns) {
|
||||
// terminal
|
||||
@{list} {
|
||||
position: relative;
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px;
|
||||
// Inner gutter via padding
|
||||
padding-left: ceil((@grid-gutter-width / 2));
|
||||
padding-left: ceil((@grid-gutter-width / 2));
|
||||
padding-right: floor((@grid-gutter-width / 2));
|
||||
}
|
||||
}
|
||||
@@ -27,15 +30,18 @@
|
||||
}
|
||||
|
||||
.float-grid-columns(@class) {
|
||||
.col(@index) { // initial
|
||||
@item: ~".col-@{class}-@{index}";
|
||||
.col(@index) {
|
||||
// initial
|
||||
@item: ~'.col-@{class}-@{index}';
|
||||
.col((@index + 1), @item);
|
||||
}
|
||||
.col(@index, @list) when (@index =< @grid-columns) { // general
|
||||
@item: ~".col-@{class}-@{index}";
|
||||
.col((@index + 1), ~"@{list}, @{item}");
|
||||
.col(@index, @list) when (@index =< @grid-columns) {
|
||||
// general
|
||||
@item: ~'.col-@{class}-@{index}';
|
||||
.col((@index + 1), ~'@{list}, @{item}');
|
||||
}
|
||||
.col(@index, @list) when (@index > @grid-columns) { // terminal
|
||||
.col(@index, @list) when (@index > @grid-columns) {
|
||||
// terminal
|
||||
@{list} {
|
||||
float: left;
|
||||
}
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
.container-fixed(@gutter: @grid-gutter-width) {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-left: floor((@gutter / 2));
|
||||
padding-left: floor((@gutter / 2));
|
||||
padding-right: ceil((@gutter / 2));
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
|
||||
// Creates a wrapper for a series of columns
|
||||
.make-row(@gutter: @grid-gutter-width) {
|
||||
margin-left: ceil((@gutter / -2));
|
||||
margin-left: ceil((@gutter / -2));
|
||||
margin-right: floor((@gutter / -2));
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
@@ -24,7 +24,7 @@
|
||||
float: left;
|
||||
width: percentage((@columns / @grid-columns));
|
||||
min-height: 1px;
|
||||
padding-left: (@gutter / 2);
|
||||
padding-left: (@gutter / 2);
|
||||
padding-right: (@gutter / 2);
|
||||
}
|
||||
.make-xs-column-offset(@columns) {
|
||||
@@ -41,7 +41,7 @@
|
||||
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: (@gutter / 2);
|
||||
padding-left: (@gutter / 2);
|
||||
padding-right: (@gutter / 2);
|
||||
|
||||
@media (min-width: @screen-sm-min) {
|
||||
@@ -69,7 +69,7 @@
|
||||
.make-md-column(@columns; @gutter: @grid-gutter-width) {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: (@gutter / 2);
|
||||
padding-left: (@gutter / 2);
|
||||
padding-right: (@gutter / 2);
|
||||
|
||||
@media (min-width: @screen-md-min) {
|
||||
@@ -97,7 +97,7 @@
|
||||
.make-lg-column(@columns; @gutter: @grid-gutter-width) {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: (@gutter / 2);
|
||||
padding-left: (@gutter / 2);
|
||||
padding-right: (@gutter / 2);
|
||||
|
||||
@media (min-width: @screen-lg-min) {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
// Deprecated as of v3.0.1 (has been removed in v4)
|
||||
.hide-text() {
|
||||
font: ~"0/0" a;
|
||||
font: ~'0/0' a;
|
||||
color: transparent;
|
||||
text-shadow: none;
|
||||
background-color: transparent;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// - Responsive image
|
||||
// - Retina image
|
||||
|
||||
|
||||
// Responsive image
|
||||
//
|
||||
// Keep images from scaling beyond the width of their parents.
|
||||
@@ -12,22 +11,20 @@
|
||||
height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
|
||||
}
|
||||
|
||||
|
||||
// Retina image
|
||||
//
|
||||
// Short retina mixin for setting background-image and -size. Note that the
|
||||
// spelling of `min--moz-device-pixel-ratio` is intentional.
|
||||
.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
|
||||
background-image: url("@{file-1x}");
|
||||
background-image: url('@{file-1x}');
|
||||
|
||||
@media
|
||||
only screen and (-webkit-min-device-pixel-ratio: 2),
|
||||
only screen and ( min--moz-device-pixel-ratio: 2),
|
||||
only screen and ( -o-min-device-pixel-ratio: 2/1),
|
||||
only screen and ( min-device-pixel-ratio: 2),
|
||||
only screen and ( min-resolution: 192dpi),
|
||||
only screen and ( min-resolution: 2dppx) {
|
||||
background-image: url("@{file-2x}");
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 2),
|
||||
only screen and (min--moz-device-pixel-ratio: 2),
|
||||
only screen and (-o-min-device-pixel-ratio: 2/1),
|
||||
only screen and (min-device-pixel-ratio: 2),
|
||||
only screen and (min-resolution: 192dpi),
|
||||
only screen and (min-resolution: 2dppx) {
|
||||
background-image: url('@{file-2x}');
|
||||
background-size: @width-1x @height-1x;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
opacity: @opacity;
|
||||
// IE8 filter
|
||||
@opacity-ie: (@opacity * 100);
|
||||
filter: ~"alpha(opacity=@{opacity-ie})";
|
||||
filter: ~'alpha(opacity=@{opacity-ie})';
|
||||
}
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
// the IE filter for IE9 and below.
|
||||
|
||||
.reset-filter() {
|
||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
|
||||
filter: e(%('progid:DXImageTransform.Microsoft.gradient(enabled = false)'));
|
||||
}
|
||||
|
||||
@@ -4,10 +4,16 @@
|
||||
// More easily include all the states for responsive-utilities.less.
|
||||
.responsive-visibility() {
|
||||
display: block !important;
|
||||
table& { display: table !important; }
|
||||
tr& { display: table-row !important; }
|
||||
table& {
|
||||
display: table !important;
|
||||
}
|
||||
tr& {
|
||||
display: table-row !important;
|
||||
}
|
||||
th&,
|
||||
td& { display: table-cell !important; }
|
||||
td& {
|
||||
display: table-cell !important;
|
||||
}
|
||||
}
|
||||
|
||||
.responsive-invisibility() {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// WebKit-style focus
|
||||
|
||||
.tab-focus() {
|
||||
// Default
|
||||
outline: thin dotted;
|
||||
// WebKit
|
||||
// WebKit-specific. Other browsers will keep their default outline style.
|
||||
// (Initially tried to also force default via `outline: initial`,
|
||||
// but that seems to erroneously remove the outline in Firefox altogether.)
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
@@ -14,40 +14,39 @@
|
||||
// - Transitions
|
||||
// - User Select
|
||||
|
||||
|
||||
// Animations
|
||||
.animation(@animation) {
|
||||
-webkit-animation: @animation;
|
||||
-o-animation: @animation;
|
||||
animation: @animation;
|
||||
-o-animation: @animation;
|
||||
animation: @animation;
|
||||
}
|
||||
.animation-name(@name) {
|
||||
-webkit-animation-name: @name;
|
||||
animation-name: @name;
|
||||
animation-name: @name;
|
||||
}
|
||||
.animation-duration(@duration) {
|
||||
-webkit-animation-duration: @duration;
|
||||
animation-duration: @duration;
|
||||
animation-duration: @duration;
|
||||
}
|
||||
.animation-timing-function(@timing-function) {
|
||||
-webkit-animation-timing-function: @timing-function;
|
||||
animation-timing-function: @timing-function;
|
||||
animation-timing-function: @timing-function;
|
||||
}
|
||||
.animation-delay(@delay) {
|
||||
-webkit-animation-delay: @delay;
|
||||
animation-delay: @delay;
|
||||
animation-delay: @delay;
|
||||
}
|
||||
.animation-iteration-count(@iteration-count) {
|
||||
-webkit-animation-iteration-count: @iteration-count;
|
||||
animation-iteration-count: @iteration-count;
|
||||
animation-iteration-count: @iteration-count;
|
||||
}
|
||||
.animation-direction(@direction) {
|
||||
-webkit-animation-direction: @direction;
|
||||
animation-direction: @direction;
|
||||
animation-direction: @direction;
|
||||
}
|
||||
.animation-fill-mode(@fill-mode) {
|
||||
-webkit-animation-fill-mode: @fill-mode;
|
||||
animation-fill-mode: @fill-mode;
|
||||
animation-fill-mode: @fill-mode;
|
||||
}
|
||||
|
||||
// Backface visibility
|
||||
@@ -56,8 +55,8 @@
|
||||
|
||||
.backface-visibility(@visibility) {
|
||||
-webkit-backface-visibility: @visibility;
|
||||
-moz-backface-visibility: @visibility;
|
||||
backface-visibility: @visibility;
|
||||
-moz-backface-visibility: @visibility;
|
||||
backface-visibility: @visibility;
|
||||
}
|
||||
|
||||
// Drop shadows
|
||||
@@ -67,34 +66,34 @@
|
||||
|
||||
.box-shadow(@shadow) {
|
||||
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
|
||||
box-shadow: @shadow;
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
|
||||
// Box sizing
|
||||
.box-sizing(@boxmodel) {
|
||||
-webkit-box-sizing: @boxmodel;
|
||||
-moz-box-sizing: @boxmodel;
|
||||
box-sizing: @boxmodel;
|
||||
-moz-box-sizing: @boxmodel;
|
||||
box-sizing: @boxmodel;
|
||||
}
|
||||
|
||||
// CSS3 Content Columns
|
||||
.content-columns(@column-count; @column-gap: @grid-gutter-width) {
|
||||
-webkit-column-count: @column-count;
|
||||
-moz-column-count: @column-count;
|
||||
column-count: @column-count;
|
||||
-moz-column-count: @column-count;
|
||||
column-count: @column-count;
|
||||
-webkit-column-gap: @column-gap;
|
||||
-moz-column-gap: @column-gap;
|
||||
column-gap: @column-gap;
|
||||
-moz-column-gap: @column-gap;
|
||||
column-gap: @column-gap;
|
||||
}
|
||||
|
||||
// Optional hyphenation
|
||||
.hyphens(@mode: auto) {
|
||||
word-wrap: break-word;
|
||||
-webkit-hyphens: @mode;
|
||||
-moz-hyphens: @mode;
|
||||
-ms-hyphens: @mode; // IE10+
|
||||
-o-hyphens: @mode;
|
||||
hyphens: @mode;
|
||||
-moz-hyphens: @mode;
|
||||
-ms-hyphens: @mode; // IE10+
|
||||
-o-hyphens: @mode;
|
||||
hyphens: @mode;
|
||||
}
|
||||
|
||||
// Placeholder text
|
||||
@@ -104,124 +103,126 @@
|
||||
color: @color;
|
||||
opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
|
||||
}
|
||||
&:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
|
||||
&::-webkit-input-placeholder { color: @color; } // Safari and Chrome
|
||||
&:-ms-input-placeholder {
|
||||
color: @color;
|
||||
} // Internet Explorer 10+
|
||||
&::-webkit-input-placeholder {
|
||||
color: @color;
|
||||
} // Safari and Chrome
|
||||
}
|
||||
|
||||
// Transformations
|
||||
.scale(@ratio) {
|
||||
-webkit-transform: scale(@ratio);
|
||||
-ms-transform: scale(@ratio); // IE9 only
|
||||
-o-transform: scale(@ratio);
|
||||
transform: scale(@ratio);
|
||||
-ms-transform: scale(@ratio); // IE9 only
|
||||
-o-transform: scale(@ratio);
|
||||
transform: scale(@ratio);
|
||||
}
|
||||
.scale(@ratioX; @ratioY) {
|
||||
-webkit-transform: scale(@ratioX, @ratioY);
|
||||
-ms-transform: scale(@ratioX, @ratioY); // IE9 only
|
||||
-o-transform: scale(@ratioX, @ratioY);
|
||||
transform: scale(@ratioX, @ratioY);
|
||||
-ms-transform: scale(@ratioX, @ratioY); // IE9 only
|
||||
-o-transform: scale(@ratioX, @ratioY);
|
||||
transform: scale(@ratioX, @ratioY);
|
||||
}
|
||||
.scaleX(@ratio) {
|
||||
-webkit-transform: scaleX(@ratio);
|
||||
-ms-transform: scaleX(@ratio); // IE9 only
|
||||
-o-transform: scaleX(@ratio);
|
||||
transform: scaleX(@ratio);
|
||||
-ms-transform: scaleX(@ratio); // IE9 only
|
||||
-o-transform: scaleX(@ratio);
|
||||
transform: scaleX(@ratio);
|
||||
}
|
||||
.scaleY(@ratio) {
|
||||
-webkit-transform: scaleY(@ratio);
|
||||
-ms-transform: scaleY(@ratio); // IE9 only
|
||||
-o-transform: scaleY(@ratio);
|
||||
transform: scaleY(@ratio);
|
||||
-ms-transform: scaleY(@ratio); // IE9 only
|
||||
-o-transform: scaleY(@ratio);
|
||||
transform: scaleY(@ratio);
|
||||
}
|
||||
.skew(@x; @y) {
|
||||
-webkit-transform: skewX(@x) skewY(@y);
|
||||
-ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
|
||||
-o-transform: skewX(@x) skewY(@y);
|
||||
transform: skewX(@x) skewY(@y);
|
||||
-ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
|
||||
-o-transform: skewX(@x) skewY(@y);
|
||||
transform: skewX(@x) skewY(@y);
|
||||
}
|
||||
.translate(@x; @y) {
|
||||
-webkit-transform: translate(@x, @y);
|
||||
-ms-transform: translate(@x, @y); // IE9 only
|
||||
-o-transform: translate(@x, @y);
|
||||
transform: translate(@x, @y);
|
||||
-ms-transform: translate(@x, @y); // IE9 only
|
||||
-o-transform: translate(@x, @y);
|
||||
transform: translate(@x, @y);
|
||||
}
|
||||
.translate3d(@x; @y; @z) {
|
||||
-webkit-transform: translate3d(@x, @y, @z);
|
||||
transform: translate3d(@x, @y, @z);
|
||||
transform: translate3d(@x, @y, @z);
|
||||
}
|
||||
.rotate(@degrees) {
|
||||
-webkit-transform: rotate(@degrees);
|
||||
-ms-transform: rotate(@degrees); // IE9 only
|
||||
-o-transform: rotate(@degrees);
|
||||
transform: rotate(@degrees);
|
||||
-ms-transform: rotate(@degrees); // IE9 only
|
||||
-o-transform: rotate(@degrees);
|
||||
transform: rotate(@degrees);
|
||||
}
|
||||
.rotateX(@degrees) {
|
||||
-webkit-transform: rotateX(@degrees);
|
||||
-ms-transform: rotateX(@degrees); // IE9 only
|
||||
-o-transform: rotateX(@degrees);
|
||||
transform: rotateX(@degrees);
|
||||
-ms-transform: rotateX(@degrees); // IE9 only
|
||||
-o-transform: rotateX(@degrees);
|
||||
transform: rotateX(@degrees);
|
||||
}
|
||||
.rotateY(@degrees) {
|
||||
-webkit-transform: rotateY(@degrees);
|
||||
-ms-transform: rotateY(@degrees); // IE9 only
|
||||
-o-transform: rotateY(@degrees);
|
||||
transform: rotateY(@degrees);
|
||||
-ms-transform: rotateY(@degrees); // IE9 only
|
||||
-o-transform: rotateY(@degrees);
|
||||
transform: rotateY(@degrees);
|
||||
}
|
||||
.perspective(@perspective) {
|
||||
-webkit-perspective: @perspective;
|
||||
-moz-perspective: @perspective;
|
||||
perspective: @perspective;
|
||||
-moz-perspective: @perspective;
|
||||
perspective: @perspective;
|
||||
}
|
||||
.perspective-origin(@perspective) {
|
||||
-webkit-perspective-origin: @perspective;
|
||||
-moz-perspective-origin: @perspective;
|
||||
perspective-origin: @perspective;
|
||||
-moz-perspective-origin: @perspective;
|
||||
perspective-origin: @perspective;
|
||||
}
|
||||
.transform-origin(@origin) {
|
||||
-webkit-transform-origin: @origin;
|
||||
-moz-transform-origin: @origin;
|
||||
-ms-transform-origin: @origin; // IE9 only
|
||||
transform-origin: @origin;
|
||||
-moz-transform-origin: @origin;
|
||||
-ms-transform-origin: @origin; // IE9 only
|
||||
transform-origin: @origin;
|
||||
}
|
||||
|
||||
|
||||
// Transitions
|
||||
|
||||
.transition(@transition) {
|
||||
-webkit-transition: @transition;
|
||||
-o-transition: @transition;
|
||||
transition: @transition;
|
||||
-o-transition: @transition;
|
||||
transition: @transition;
|
||||
}
|
||||
.transition-property(@transition-property) {
|
||||
-webkit-transition-property: @transition-property;
|
||||
transition-property: @transition-property;
|
||||
transition-property: @transition-property;
|
||||
}
|
||||
.transition-delay(@transition-delay) {
|
||||
-webkit-transition-delay: @transition-delay;
|
||||
transition-delay: @transition-delay;
|
||||
transition-delay: @transition-delay;
|
||||
}
|
||||
.transition-duration(@transition-duration) {
|
||||
-webkit-transition-duration: @transition-duration;
|
||||
transition-duration: @transition-duration;
|
||||
transition-duration: @transition-duration;
|
||||
}
|
||||
.transition-timing-function(@timing-function) {
|
||||
-webkit-transition-timing-function: @timing-function;
|
||||
transition-timing-function: @timing-function;
|
||||
transition-timing-function: @timing-function;
|
||||
}
|
||||
.transition-transform(@transition) {
|
||||
-webkit-transition: -webkit-transform @transition;
|
||||
-moz-transition: -moz-transform @transition;
|
||||
-o-transition: -o-transform @transition;
|
||||
transition: transform @transition;
|
||||
-moz-transition: -moz-transform @transition;
|
||||
-o-transition: -o-transform @transition;
|
||||
transition: transform @transition;
|
||||
}
|
||||
|
||||
|
||||
// User select
|
||||
// For selecting text on the page
|
||||
|
||||
.user-select(@select) {
|
||||
-webkit-user-select: @select;
|
||||
-moz-user-select: @select;
|
||||
-ms-user-select: @select; // IE10+
|
||||
user-select: @select;
|
||||
-moz-user-select: @select;
|
||||
-ms-user-select: @select; // IE10+
|
||||
user-select: @select;
|
||||
}
|
||||
|
||||
@@ -31,9 +31,11 @@
|
||||
// When fading in the modal, animate it to slide down
|
||||
&.fade .modal-dialog {
|
||||
.translate(0, -25%);
|
||||
.transition-transform(~"0.3s ease-out");
|
||||
.transition-transform(~'0.3s ease-out');
|
||||
}
|
||||
&.in .modal-dialog {
|
||||
.translate(0, 0);
|
||||
}
|
||||
&.in .modal-dialog { .translate(0, 0) }
|
||||
}
|
||||
.modal-open .modal {
|
||||
overflow-x: hidden;
|
||||
@@ -54,7 +56,7 @@
|
||||
border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
|
||||
border: 1px solid @modal-content-border-color;
|
||||
border-radius: @border-radius-large;
|
||||
.box-shadow(0 3px 9px rgba(0,0,0,.5));
|
||||
.box-shadow(0 3px 9px rgba(0,0,0,0.5));
|
||||
background-clip: padding-box;
|
||||
// Remove focus outline from opened modal
|
||||
outline: 0;
|
||||
@@ -70,8 +72,12 @@
|
||||
z-index: @zindex-modal-background;
|
||||
background-color: @modal-backdrop-bg;
|
||||
// Fade for backdrop
|
||||
&.fade { .opacity(0); }
|
||||
&.in { .opacity(@modal-backdrop-opacity); }
|
||||
&.fade {
|
||||
.opacity(0);
|
||||
}
|
||||
&.in {
|
||||
.opacity(@modal-backdrop-opacity);
|
||||
}
|
||||
}
|
||||
|
||||
// Modal header
|
||||
@@ -138,13 +144,17 @@
|
||||
margin: 30px auto;
|
||||
}
|
||||
.modal-content {
|
||||
.box-shadow(0 5px 15px rgba(0,0,0,.5));
|
||||
.box-shadow(0 5px 15px rgba(0,0,0,0.5));
|
||||
}
|
||||
|
||||
// Modal sizes
|
||||
.modal-sm { width: @modal-sm; }
|
||||
.modal-sm {
|
||||
width: @modal-sm;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: @screen-md-min) {
|
||||
.modal-lg { width: @modal-lg; }
|
||||
.modal-lg {
|
||||
width: @modal-lg;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Navbars
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Wrapper and base class
|
||||
//
|
||||
// Provide a static navbar from which we expand to create full-width, fixed, and
|
||||
@@ -22,7 +21,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar heading
|
||||
//
|
||||
// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
|
||||
@@ -36,7 +34,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar collapse (body)
|
||||
//
|
||||
// Group your navbar content into this for easy collapsing and expanding across
|
||||
@@ -50,9 +47,9 @@
|
||||
.navbar-collapse {
|
||||
overflow-x: visible;
|
||||
padding-right: @navbar-padding-horizontal;
|
||||
padding-left: @navbar-padding-horizontal;
|
||||
padding-left: @navbar-padding-horizontal;
|
||||
border-top: 1px solid transparent;
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||
&:extend(.clearfix all);
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
@@ -98,7 +95,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Both navbar header and collapse
|
||||
//
|
||||
// When a container is present, change the behavior of the header and collapse.
|
||||
@@ -108,16 +104,15 @@
|
||||
> .navbar-header,
|
||||
> .navbar-collapse {
|
||||
margin-right: -@navbar-padding-horizontal;
|
||||
margin-left: -@navbar-padding-horizontal;
|
||||
margin-left: -@navbar-padding-horizontal;
|
||||
|
||||
@media (min-width: @grid-float-breakpoint) {
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Navbar alignment options
|
||||
//
|
||||
@@ -157,7 +152,6 @@
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
|
||||
|
||||
// Brand/project name
|
||||
|
||||
.navbar-brand {
|
||||
@@ -184,7 +178,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar toggle
|
||||
//
|
||||
// Custom button for toggling the `.navbar-collapse`, powered by the collapse
|
||||
@@ -223,7 +216,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar nav links
|
||||
//
|
||||
// Builds on top of the `.nav` components with its own modifier class to make
|
||||
@@ -233,7 +225,7 @@
|
||||
margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;
|
||||
|
||||
> li > a {
|
||||
padding-top: 10px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
line-height: @line-height-computed;
|
||||
}
|
||||
@@ -270,14 +262,13 @@
|
||||
> li {
|
||||
float: left;
|
||||
> a {
|
||||
padding-top: @navbar-padding-vertical;
|
||||
padding-top: @navbar-padding-vertical;
|
||||
padding-bottom: @navbar-padding-vertical;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar form
|
||||
//
|
||||
// Extension of the `.form-inline` with some extra flavor for optimum display in
|
||||
@@ -289,7 +280,7 @@
|
||||
padding: 10px @navbar-padding-horizontal;
|
||||
border-top: 1px solid transparent;
|
||||
border-bottom: 1px solid transparent;
|
||||
@shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
|
||||
@shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||
.box-shadow(@shadow);
|
||||
|
||||
// Mixin behavior for optimum display
|
||||
@@ -320,7 +311,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Dropdown menus
|
||||
|
||||
// Menu position and menu carets
|
||||
@@ -335,7 +325,6 @@
|
||||
.border-bottom-radius(0);
|
||||
}
|
||||
|
||||
|
||||
// Buttons in navbars
|
||||
//
|
||||
// Vertically center a button within a navbar (when *not* in a form).
|
||||
@@ -351,7 +340,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Text in navbars
|
||||
//
|
||||
// Add a class to make any element properly align itself vertically within the navbars.
|
||||
@@ -366,7 +354,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Component alignment
|
||||
//
|
||||
// Repurpose the pull utilities as their own navbar utilities to avoid specificity
|
||||
@@ -376,7 +363,9 @@
|
||||
// Declared after the navbar components to ensure more specificity on the margins.
|
||||
|
||||
@media (min-width: @grid-float-breakpoint) {
|
||||
.navbar-left { .pull-left(); }
|
||||
.navbar-left {
|
||||
.pull-left();
|
||||
}
|
||||
.navbar-right {
|
||||
.pull-right();
|
||||
margin-right: -@navbar-padding-horizontal;
|
||||
@@ -387,7 +376,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alternate navbars
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -496,7 +484,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Links in navbars
|
||||
//
|
||||
// Add a class to ensure links outside the navbar nav are colored correctly.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Navs
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base class
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -68,7 +67,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Tabs
|
||||
// -------------------------
|
||||
|
||||
@@ -87,7 +85,8 @@
|
||||
border: 1px solid transparent;
|
||||
border-radius: @border-radius-base @border-radius-base 0 0;
|
||||
&:hover {
|
||||
border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
|
||||
border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color
|
||||
@nav-tabs-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +110,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Pills
|
||||
// -------------------------
|
||||
.nav-pills {
|
||||
@@ -138,7 +136,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Stacked pills
|
||||
.nav-stacked {
|
||||
> li {
|
||||
@@ -150,7 +147,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Nav variations
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -215,7 +211,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Tabbable tabs
|
||||
// -------------------------
|
||||
|
||||
@@ -229,7 +224,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Dropdowns
|
||||
// -------------------------
|
||||
|
||||
|
||||
14
assets/less/bootstrap/normalize.less
vendored
14
assets/less/bootstrap/normalize.less
vendored
@@ -331,8 +331,8 @@ input {
|
||||
// 2. Remove excess padding in IE 8/9/10.
|
||||
//
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
input[type='checkbox'],
|
||||
input[type='radio'] {
|
||||
box-sizing: border-box; // 1
|
||||
padding: 0; // 2
|
||||
}
|
||||
@@ -343,8 +343,8 @@ input[type="radio"] {
|
||||
// decrement button to change from `default` to `text`.
|
||||
//
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
input[type='number']::-webkit-inner-spin-button,
|
||||
input[type='number']::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ input[type="number"]::-webkit-outer-spin-button {
|
||||
// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
|
||||
//
|
||||
|
||||
input[type="search"] {
|
||||
input[type='search'] {
|
||||
-webkit-appearance: textfield; // 1
|
||||
box-sizing: content-box; //2
|
||||
}
|
||||
@@ -364,8 +364,8 @@ input[type="search"] {
|
||||
// padding (and `textfield` appearance).
|
||||
//
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
input[type='search']::-webkit-search-cancel-button,
|
||||
input[type='search']::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Pager pagination
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.pager {
|
||||
padding-left: 0;
|
||||
margin: @line-height-computed 0;
|
||||
|
||||
@@ -2,14 +2,13 @@
|
||||
// Panels
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base class
|
||||
.panel {
|
||||
margin-bottom: @line-height-computed;
|
||||
background-color: @panel-bg;
|
||||
border: 1px solid transparent;
|
||||
border-radius: @panel-border-radius;
|
||||
.box-shadow(0 1px 1px rgba(0,0,0,.05));
|
||||
.box-shadow(0 1px 1px rgba(0,0,0,0.05));
|
||||
}
|
||||
|
||||
// Panel contents
|
||||
@@ -53,7 +52,6 @@
|
||||
.border-bottom-radius((@panel-border-radius - 1));
|
||||
}
|
||||
|
||||
|
||||
// List groups in panels
|
||||
//
|
||||
// By default, space out list group content from panel headings to account for
|
||||
@@ -213,8 +211,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Collapsable panels (aka, accordion)
|
||||
// Collapsible panels (aka, accordion)
|
||||
//
|
||||
// Wrap a series of panels in `.panel-group` to turn them into an accordion with
|
||||
// the help of our collapse JavaScript plugin.
|
||||
@@ -249,7 +246,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Contextual variations
|
||||
.panel-default {
|
||||
.panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Popovers
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.popover {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
@@ -21,13 +20,21 @@
|
||||
border: 1px solid @popover-fallback-border-color;
|
||||
border: 1px solid @popover-border-color;
|
||||
border-radius: @border-radius-large;
|
||||
.box-shadow(0 5px 10px rgba(0,0,0,.2));
|
||||
.box-shadow(0 5px 10px rgba(0,0,0,0.2));
|
||||
|
||||
// Offset the popover to account for the popover arrow
|
||||
&.top { margin-top: -@popover-arrow-width; }
|
||||
&.right { margin-left: @popover-arrow-width; }
|
||||
&.bottom { margin-top: @popover-arrow-width; }
|
||||
&.left { margin-left: -@popover-arrow-width; }
|
||||
&.top {
|
||||
margin-top: -@popover-arrow-width;
|
||||
}
|
||||
&.right {
|
||||
margin-left: @popover-arrow-width;
|
||||
}
|
||||
&.bottom {
|
||||
margin-top: @popover-arrow-width;
|
||||
}
|
||||
&.left {
|
||||
margin-left: -@popover-arrow-width;
|
||||
}
|
||||
}
|
||||
|
||||
.popover-title {
|
||||
@@ -63,7 +70,7 @@
|
||||
}
|
||||
.popover > .arrow:after {
|
||||
border-width: @popover-arrow-width;
|
||||
content: "";
|
||||
content: '';
|
||||
}
|
||||
|
||||
.popover {
|
||||
@@ -75,7 +82,7 @@
|
||||
border-top-color: @popover-arrow-outer-color;
|
||||
bottom: -@popover-arrow-outer-width;
|
||||
&:after {
|
||||
content: " ";
|
||||
content: ' ';
|
||||
bottom: 1px;
|
||||
margin-left: -@popover-arrow-width;
|
||||
border-bottom-width: 0;
|
||||
@@ -90,7 +97,7 @@
|
||||
border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
|
||||
border-right-color: @popover-arrow-outer-color;
|
||||
&:after {
|
||||
content: " ";
|
||||
content: ' ';
|
||||
left: 1px;
|
||||
bottom: -@popover-arrow-width;
|
||||
border-left-width: 0;
|
||||
@@ -105,7 +112,7 @@
|
||||
border-bottom-color: @popover-arrow-outer-color;
|
||||
top: -@popover-arrow-outer-width;
|
||||
&:after {
|
||||
content: " ";
|
||||
content: ' ';
|
||||
top: 1px;
|
||||
margin-left: -@popover-arrow-width;
|
||||
border-top-width: 0;
|
||||
@@ -121,7 +128,7 @@
|
||||
border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
|
||||
border-left-color: @popover-arrow-outer-color;
|
||||
&:after {
|
||||
content: " ";
|
||||
content: ' ';
|
||||
right: 1px;
|
||||
border-right-width: 0;
|
||||
border-left-color: @popover-arrow-color;
|
||||
|
||||
@@ -6,96 +6,96 @@
|
||||
// ==========================================================================
|
||||
|
||||
@media print {
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
background: transparent !important;
|
||||
color: #000 !important; // Black prints faster: h5bp.com/s
|
||||
box-shadow: none !important;
|
||||
text-shadow: none !important;
|
||||
}
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
background: transparent !important;
|
||||
color: #000 !important; // Black prints faster: h5bp.com/s
|
||||
box-shadow: none !important;
|
||||
text-shadow: none !important;
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
a,
|
||||
a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a[href]:after {
|
||||
content: " (" attr(href) ")";
|
||||
}
|
||||
a[href]:after {
|
||||
content: ' (' attr(href) ')';
|
||||
}
|
||||
|
||||
abbr[title]:after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
abbr[title]:after {
|
||||
content: ' (' attr(title) ')';
|
||||
}
|
||||
|
||||
// Don't show links that are fragment identifiers,
|
||||
// or use the `javascript:` pseudo protocol
|
||||
a[href^="#"]:after,
|
||||
a[href^="javascript:"]:after {
|
||||
content: "";
|
||||
}
|
||||
// Don't show links that are fragment identifiers,
|
||||
// or use the `javascript:` pseudo protocol
|
||||
a[href^='#']:after,
|
||||
a[href^='javascript:']:after {
|
||||
content: '';
|
||||
}
|
||||
|
||||
pre,
|
||||
blockquote {
|
||||
border: 1px solid #999;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
pre,
|
||||
blockquote {
|
||||
border: 1px solid #999;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
thead {
|
||||
display: table-header-group; // h5bp.com/t
|
||||
}
|
||||
thead {
|
||||
display: table-header-group; // h5bp.com/t
|
||||
}
|
||||
|
||||
tr,
|
||||
img {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
tr,
|
||||
img {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
p,
|
||||
h2,
|
||||
h3 {
|
||||
orphans: 3;
|
||||
widows: 3;
|
||||
}
|
||||
p,
|
||||
h2,
|
||||
h3 {
|
||||
orphans: 3;
|
||||
widows: 3;
|
||||
}
|
||||
|
||||
h2,
|
||||
h3 {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
h2,
|
||||
h3 {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
// Bootstrap specific changes start
|
||||
// Bootstrap specific changes start
|
||||
|
||||
// Bootstrap components
|
||||
.navbar {
|
||||
display: none;
|
||||
}
|
||||
.btn,
|
||||
.dropup > .btn {
|
||||
> .caret {
|
||||
border-top-color: #000 !important;
|
||||
}
|
||||
}
|
||||
.label {
|
||||
border: 1px solid #000;
|
||||
// Bootstrap components
|
||||
.navbar {
|
||||
display: none;
|
||||
}
|
||||
.btn,
|
||||
.dropup > .btn {
|
||||
> .caret {
|
||||
border-top-color: #000 !important;
|
||||
}
|
||||
}
|
||||
.label {
|
||||
border: 1px solid #000;
|
||||
}
|
||||
|
||||
.table {
|
||||
border-collapse: collapse !important;
|
||||
.table {
|
||||
border-collapse: collapse !important;
|
||||
|
||||
td,
|
||||
th {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
td,
|
||||
th {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
.table-bordered {
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ddd !important;
|
||||
}
|
||||
}
|
||||
.table-bordered {
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ddd !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Bootstrap specific changes end
|
||||
// Bootstrap specific changes end
|
||||
}
|
||||
|
||||
@@ -2,23 +2,29 @@
|
||||
// Progress bars
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Bar animations
|
||||
// -------------------------
|
||||
|
||||
// WebKit
|
||||
@-webkit-keyframes progress-bar-stripes {
|
||||
from { background-position: 40px 0; }
|
||||
to { background-position: 0 0; }
|
||||
from {
|
||||
background-position: 40px 0;
|
||||
}
|
||||
to {
|
||||
background-position: 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Spec and IE10+
|
||||
@keyframes progress-bar-stripes {
|
||||
from { background-position: 40px 0; }
|
||||
to { background-position: 0 0; }
|
||||
from {
|
||||
background-position: 40px 0;
|
||||
}
|
||||
to {
|
||||
background-position: 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Bar itself
|
||||
// -------------------------
|
||||
|
||||
@@ -29,7 +35,7 @@
|
||||
margin-bottom: @line-height-computed;
|
||||
background-color: @progress-bg;
|
||||
border-radius: @progress-border-radius;
|
||||
.box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
|
||||
.box-shadow(inset 0 1px 2px rgba(0,0,0,0.1));
|
||||
}
|
||||
|
||||
// Bar of progress
|
||||
@@ -42,8 +48,8 @@
|
||||
color: @progress-bar-color;
|
||||
text-align: center;
|
||||
background-color: @progress-bar-bg;
|
||||
.box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
|
||||
.transition(width .6s ease);
|
||||
.box-shadow(inset 0 -1px 0 rgba(0,0,0,0.15));
|
||||
.transition(width 0.6s ease);
|
||||
}
|
||||
|
||||
// Striped bars
|
||||
@@ -66,7 +72,6 @@
|
||||
.animation(progress-bar-stripes 2s linear infinite);
|
||||
}
|
||||
|
||||
|
||||
// Variations
|
||||
// -------------------------
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Responsive: Utility classes
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// IE10 in Windows (Phone) 8
|
||||
//
|
||||
// Support for responsive views via media queries is kind of borked in IE10, for
|
||||
@@ -22,7 +21,6 @@
|
||||
width: device-width;
|
||||
}
|
||||
|
||||
|
||||
// Visibility utilities
|
||||
// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0
|
||||
.visible-xs,
|
||||
@@ -152,7 +150,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Print utilities
|
||||
//
|
||||
// Media queries are placed on the inside to be mixin-friendly.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Scaffolding
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Reset the box-sizing
|
||||
//
|
||||
// Heads up! This reset may cause conflicts with some third-party widgets.
|
||||
@@ -16,12 +15,11 @@
|
||||
.box-sizing(border-box);
|
||||
}
|
||||
|
||||
|
||||
// Body reset
|
||||
|
||||
html {
|
||||
font-size: 10px;
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
body {
|
||||
@@ -42,7 +40,6 @@ textarea {
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
|
||||
// Links
|
||||
|
||||
a {
|
||||
@@ -60,7 +57,6 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Figures
|
||||
//
|
||||
// We reset this here because previously Normalize had no `figure` margins. This
|
||||
@@ -70,7 +66,6 @@ figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
||||
// Images
|
||||
|
||||
img {
|
||||
@@ -96,7 +91,7 @@ img {
|
||||
background-color: @thumbnail-bg;
|
||||
border: 1px solid @thumbnail-border;
|
||||
border-radius: @thumbnail-border-radius;
|
||||
.transition(all .2s ease-in-out);
|
||||
.transition(all 0.2s ease-in-out);
|
||||
|
||||
// Keep them at most 100% wide
|
||||
.img-responsive(inline-block);
|
||||
@@ -107,20 +102,18 @@ img {
|
||||
border-radius: 50%; // set radius in percents
|
||||
}
|
||||
|
||||
|
||||
// Horizontal rules
|
||||
|
||||
hr {
|
||||
margin-top: @line-height-computed;
|
||||
margin-top: @line-height-computed;
|
||||
margin-bottom: @line-height-computed;
|
||||
border: 0;
|
||||
border-top: 1px solid @hr-border;
|
||||
}
|
||||
|
||||
|
||||
// Only display content to screen readers
|
||||
//
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content
|
||||
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
@@ -129,7 +122,7 @@ hr {
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0,0,0,0);
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
@@ -149,13 +142,12 @@ hr {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// iOS "clickable elements" fix for role="button"
|
||||
//
|
||||
// Fixes "clickability" issue (and more generally, the firing of events such as focus as well)
|
||||
// for traditionally non-focusable elements with role="button"
|
||||
// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
|
||||
|
||||
[role="button"] {
|
||||
[role='button'] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Tables
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
table {
|
||||
background-color: @table-bg;
|
||||
}
|
||||
@@ -16,7 +15,6 @@ th {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
|
||||
// Baseline styles
|
||||
|
||||
.table {
|
||||
@@ -64,7 +62,6 @@ th {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Condensed table w/ half padding
|
||||
|
||||
.table-condensed {
|
||||
@@ -80,7 +77,6 @@ th {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Bordered version
|
||||
//
|
||||
// Add borders all around the table and between all the columns.
|
||||
@@ -105,7 +101,6 @@ th {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Zebra-striping
|
||||
//
|
||||
// Default zebra-stripe styles (alternating gray and transparent backgrounds)
|
||||
@@ -116,7 +111,6 @@ th {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Hover effect
|
||||
//
|
||||
// Placed here since it has to come after the potential zebra striping
|
||||
@@ -127,12 +121,11 @@ th {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Table cell sizing
|
||||
//
|
||||
// Reset default table behavior
|
||||
|
||||
table col[class*="col-"] {
|
||||
table col[class*='col-'] {
|
||||
position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
|
||||
float: none;
|
||||
display: table-column;
|
||||
@@ -140,7 +133,7 @@ table col[class*="col-"] {
|
||||
table {
|
||||
td,
|
||||
th {
|
||||
&[class*="col-"] {
|
||||
&[class*='col-'] {
|
||||
position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
|
||||
float: none;
|
||||
display: table-cell;
|
||||
@@ -148,7 +141,6 @@ table {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Table backgrounds
|
||||
//
|
||||
// Exact selectors below required to override `.table-striped` and prevent
|
||||
@@ -161,7 +153,6 @@ table {
|
||||
.table-row-variant(warning; @state-warning-bg);
|
||||
.table-row-variant(danger; @state-danger-bg);
|
||||
|
||||
|
||||
// Responsive tables
|
||||
//
|
||||
// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
|
||||
@@ -228,7 +219,6 @@ table {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.6 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
// Load core variables and mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
|
||||
@import 'variables.less';
|
||||
@import 'mixins.less';
|
||||
|
||||
//
|
||||
// Buttons
|
||||
@@ -23,14 +22,14 @@
|
||||
.btn-info,
|
||||
.btn-warning,
|
||||
.btn-danger {
|
||||
text-shadow: 0 -1px 0 rgba(0,0,0,.2);
|
||||
@shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
|
||||
@shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
.box-shadow(@shadow);
|
||||
|
||||
// Reset the shadow
|
||||
&:active,
|
||||
&.active {
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,0.125));
|
||||
}
|
||||
|
||||
&.disabled,
|
||||
@@ -46,13 +45,13 @@
|
||||
|
||||
// Mixin for generating new styles
|
||||
.btn-styles(@btn-color: #555) {
|
||||
#gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));
|
||||
#gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));;
|
||||
.reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620
|
||||
background-repeat: repeat-x;
|
||||
border-color: darken(@btn-color, 14%);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
&:focus {
|
||||
background-color: darken(@btn-color, 12%);
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
@@ -88,13 +87,26 @@
|
||||
}
|
||||
|
||||
// Apply the mixin to the buttons
|
||||
.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }
|
||||
.btn-primary { .btn-styles(@btn-primary-bg); }
|
||||
.btn-success { .btn-styles(@btn-success-bg); }
|
||||
.btn-info { .btn-styles(@btn-info-bg); }
|
||||
.btn-warning { .btn-styles(@btn-warning-bg); }
|
||||
.btn-danger { .btn-styles(@btn-danger-bg); }
|
||||
|
||||
.btn-default {
|
||||
.btn-styles(@btn-default-bg);
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
border-color: #ccc;
|
||||
}
|
||||
.btn-primary {
|
||||
.btn-styles(@btn-primary-bg);
|
||||
}
|
||||
.btn-success {
|
||||
.btn-styles(@btn-success-bg);
|
||||
}
|
||||
.btn-info {
|
||||
.btn-styles(@btn-info-bg);
|
||||
}
|
||||
.btn-warning {
|
||||
.btn-styles(@btn-warning-bg);
|
||||
}
|
||||
.btn-danger {
|
||||
.btn-styles(@btn-danger-bg);
|
||||
}
|
||||
|
||||
//
|
||||
// Images
|
||||
@@ -102,64 +114,62 @@
|
||||
|
||||
.thumbnail,
|
||||
.img-thumbnail {
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,.075));
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,0.075));
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Dropdowns
|
||||
// --------------------------------------------------
|
||||
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus {
|
||||
#gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));
|
||||
#gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));;
|
||||
background-color: darken(@dropdown-link-hover-bg, 5%);
|
||||
}
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus {
|
||||
#gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));
|
||||
#gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));;
|
||||
background-color: darken(@dropdown-link-active-bg, 5%);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Navbar
|
||||
// --------------------------------------------------
|
||||
|
||||
// Default navbar
|
||||
.navbar-default {
|
||||
#gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);
|
||||
#gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);;
|
||||
.reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
|
||||
border-radius: @navbar-border-radius;
|
||||
@shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);
|
||||
@shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
||||
.box-shadow(@shadow);
|
||||
|
||||
.navbar-nav > .open > a,
|
||||
.navbar-nav > .active > a {
|
||||
#gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));
|
||||
.box-shadow(inset 0 3px 9px rgba(0,0,0,.075));
|
||||
#gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));;
|
||||
.box-shadow(inset 0 3px 9px rgba(0,0,0,0.075));
|
||||
}
|
||||
}
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a {
|
||||
text-shadow: 0 1px 0 rgba(255,255,255,.25);
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
|
||||
}
|
||||
|
||||
// Inverted navbar
|
||||
.navbar-inverse {
|
||||
#gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);
|
||||
#gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);;
|
||||
.reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257
|
||||
border-radius: @navbar-border-radius;
|
||||
.navbar-nav > .open > a,
|
||||
.navbar-nav > .active > a {
|
||||
#gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));
|
||||
.box-shadow(inset 0 3px 9px rgba(0,0,0,.25));
|
||||
#gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));;
|
||||
.box-shadow(inset 0 3px 9px rgba(0,0,0,0.25));
|
||||
}
|
||||
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a {
|
||||
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,35 +187,41 @@
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: #fff;
|
||||
#gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));
|
||||
#gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Alerts
|
||||
// --------------------------------------------------
|
||||
|
||||
// Common styles
|
||||
.alert {
|
||||
text-shadow: 0 1px 0 rgba(255,255,255,.2);
|
||||
@shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
|
||||
@shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
.box-shadow(@shadow);
|
||||
}
|
||||
|
||||
// Mixin for generating new styles
|
||||
.alert-styles(@color) {
|
||||
#gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));
|
||||
#gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));;
|
||||
border-color: darken(@color, 15%);
|
||||
}
|
||||
|
||||
// Apply the mixin to the alerts
|
||||
.alert-success { .alert-styles(@alert-success-bg); }
|
||||
.alert-info { .alert-styles(@alert-info-bg); }
|
||||
.alert-warning { .alert-styles(@alert-warning-bg); }
|
||||
.alert-danger { .alert-styles(@alert-danger-bg); }
|
||||
|
||||
.alert-success {
|
||||
.alert-styles(@alert-success-bg);
|
||||
}
|
||||
.alert-info {
|
||||
.alert-styles(@alert-info-bg);
|
||||
}
|
||||
.alert-warning {
|
||||
.alert-styles(@alert-warning-bg);
|
||||
}
|
||||
.alert-danger {
|
||||
.alert-styles(@alert-danger-bg);
|
||||
}
|
||||
|
||||
//
|
||||
// Progress bars
|
||||
@@ -213,20 +229,30 @@
|
||||
|
||||
// Give the progress background some depth
|
||||
.progress {
|
||||
#gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)
|
||||
#gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg);;
|
||||
}
|
||||
|
||||
// Mixin for generating new styles
|
||||
.progress-bar-styles(@color) {
|
||||
#gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));
|
||||
#gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));;
|
||||
}
|
||||
|
||||
// Apply the mixin to the progress bars
|
||||
.progress-bar { .progress-bar-styles(@progress-bar-bg); }
|
||||
.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }
|
||||
.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }
|
||||
.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }
|
||||
.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }
|
||||
.progress-bar {
|
||||
.progress-bar-styles(@progress-bar-bg);
|
||||
}
|
||||
.progress-bar-success {
|
||||
.progress-bar-styles(@progress-bar-success-bg);
|
||||
}
|
||||
.progress-bar-info {
|
||||
.progress-bar-styles(@progress-bar-info-bg);
|
||||
}
|
||||
.progress-bar-warning {
|
||||
.progress-bar-styles(@progress-bar-warning-bg);
|
||||
}
|
||||
.progress-bar-danger {
|
||||
.progress-bar-styles(@progress-bar-danger-bg);
|
||||
}
|
||||
|
||||
// Reset the striped class because our mixins don't do multiple gradients and
|
||||
// the above custom styles override the new `.progress-bar-striped` in v3.2.0.
|
||||
@@ -234,20 +260,19 @@
|
||||
#gradient > .striped();
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// List groups
|
||||
// --------------------------------------------------
|
||||
|
||||
.list-group {
|
||||
border-radius: @border-radius-base;
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,.075));
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,0.075));
|
||||
}
|
||||
.list-group-item.active,
|
||||
.list-group-item.active:hover,
|
||||
.list-group-item.active:focus {
|
||||
text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);
|
||||
#gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));
|
||||
#gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));;
|
||||
border-color: darken(@list-group-active-border, 7.5%);
|
||||
|
||||
.badge {
|
||||
@@ -255,37 +280,47 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Panels
|
||||
// --------------------------------------------------
|
||||
|
||||
// Common styles
|
||||
.panel {
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,.05));
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,0.05));
|
||||
}
|
||||
|
||||
// Mixin for generating new styles
|
||||
.panel-heading-styles(@color) {
|
||||
#gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));
|
||||
#gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));;
|
||||
}
|
||||
|
||||
// Apply the mixin to the panel headings only
|
||||
.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }
|
||||
.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }
|
||||
.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }
|
||||
.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }
|
||||
.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }
|
||||
.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }
|
||||
|
||||
.panel-default > .panel-heading {
|
||||
.panel-heading-styles(@panel-default-heading-bg);
|
||||
}
|
||||
.panel-primary > .panel-heading {
|
||||
.panel-heading-styles(@panel-primary-heading-bg);
|
||||
}
|
||||
.panel-success > .panel-heading {
|
||||
.panel-heading-styles(@panel-success-heading-bg);
|
||||
}
|
||||
.panel-info > .panel-heading {
|
||||
.panel-heading-styles(@panel-info-heading-bg);
|
||||
}
|
||||
.panel-warning > .panel-heading {
|
||||
.panel-heading-styles(@panel-warning-heading-bg);
|
||||
}
|
||||
.panel-danger > .panel-heading {
|
||||
.panel-heading-styles(@panel-danger-heading-bg);
|
||||
}
|
||||
|
||||
//
|
||||
// Wells
|
||||
// --------------------------------------------------
|
||||
|
||||
.well {
|
||||
#gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);
|
||||
#gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);;
|
||||
border-color: darken(@well-bg, 10%);
|
||||
@shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
|
||||
@shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||
.box-shadow(@shadow);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Thumbnails
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Mixin and adjust the regular image class
|
||||
.thumbnail {
|
||||
display: block;
|
||||
@@ -12,7 +11,7 @@
|
||||
background-color: @thumbnail-bg;
|
||||
border: 1px solid @thumbnail-border;
|
||||
border-radius: @thumbnail-border-radius;
|
||||
.transition(border .2s ease-in-out);
|
||||
.transition(border 0.2s ease-in-out);
|
||||
|
||||
> img,
|
||||
a > img {
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Tooltips
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base class
|
||||
.tooltip {
|
||||
position: absolute;
|
||||
@@ -15,11 +14,25 @@
|
||||
|
||||
.opacity(0);
|
||||
|
||||
&.in { .opacity(@tooltip-opacity); }
|
||||
&.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }
|
||||
&.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }
|
||||
&.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }
|
||||
&.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }
|
||||
&.in {
|
||||
.opacity(@tooltip-opacity);
|
||||
}
|
||||
&.top {
|
||||
margin-top: -3px;
|
||||
padding: @tooltip-arrow-width 0;
|
||||
}
|
||||
&.right {
|
||||
margin-left: 3px;
|
||||
padding: 0 @tooltip-arrow-width;
|
||||
}
|
||||
&.bottom {
|
||||
margin-top: 3px;
|
||||
padding: @tooltip-arrow-width 0;
|
||||
}
|
||||
&.left {
|
||||
margin-left: -3px;
|
||||
padding: 0 @tooltip-arrow-width;
|
||||
}
|
||||
}
|
||||
|
||||
// Wrapper for the tooltip content
|
||||
|
||||
@@ -2,12 +2,21 @@
|
||||
// Typography
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Headings
|
||||
// -------------------------
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.h1,
|
||||
.h2,
|
||||
.h3,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
font-family: @headings-font-family;
|
||||
font-weight: @headings-font-weight;
|
||||
line-height: @headings-line-height;
|
||||
@@ -21,9 +30,12 @@ h1, h2, h3, h4, h5, h6,
|
||||
}
|
||||
}
|
||||
|
||||
h1, .h1,
|
||||
h2, .h2,
|
||||
h3, .h3 {
|
||||
h1,
|
||||
.h1,
|
||||
h2,
|
||||
.h2,
|
||||
h3,
|
||||
.h3 {
|
||||
margin-top: @line-height-computed;
|
||||
margin-bottom: (@line-height-computed / 2);
|
||||
|
||||
@@ -32,9 +44,12 @@ h3, .h3 {
|
||||
font-size: 65%;
|
||||
}
|
||||
}
|
||||
h4, .h4,
|
||||
h5, .h5,
|
||||
h6, .h6 {
|
||||
h4,
|
||||
.h4,
|
||||
h5,
|
||||
.h5,
|
||||
h6,
|
||||
.h6 {
|
||||
margin-top: (@line-height-computed / 2);
|
||||
margin-bottom: (@line-height-computed / 2);
|
||||
|
||||
@@ -44,13 +59,30 @@ h6, .h6 {
|
||||
}
|
||||
}
|
||||
|
||||
h1, .h1 { font-size: @font-size-h1; }
|
||||
h2, .h2 { font-size: @font-size-h2; }
|
||||
h3, .h3 { font-size: @font-size-h3; }
|
||||
h4, .h4 { font-size: @font-size-h4; }
|
||||
h5, .h5 { font-size: @font-size-h5; }
|
||||
h6, .h6 { font-size: @font-size-h6; }
|
||||
|
||||
h1,
|
||||
.h1 {
|
||||
font-size: @font-size-h1;
|
||||
}
|
||||
h2,
|
||||
.h2 {
|
||||
font-size: @font-size-h2;
|
||||
}
|
||||
h3,
|
||||
.h3 {
|
||||
font-size: @font-size-h3;
|
||||
}
|
||||
h4,
|
||||
.h4 {
|
||||
font-size: @font-size-h4;
|
||||
}
|
||||
h5,
|
||||
.h5 {
|
||||
font-size: @font-size-h5;
|
||||
}
|
||||
h6,
|
||||
.h6 {
|
||||
font-size: @font-size-h6;
|
||||
}
|
||||
|
||||
// Body text
|
||||
// -------------------------
|
||||
@@ -70,7 +102,6 @@ p {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Emphasis & misc
|
||||
// -------------------------
|
||||
|
||||
@@ -83,20 +114,36 @@ small,
|
||||
mark,
|
||||
.mark {
|
||||
background-color: @state-warning-bg;
|
||||
padding: .2em;
|
||||
padding: 0.2em;
|
||||
}
|
||||
|
||||
// Alignment
|
||||
.text-left { text-align: left; }
|
||||
.text-right { text-align: right; }
|
||||
.text-center { text-align: center; }
|
||||
.text-justify { text-align: justify; }
|
||||
.text-nowrap { white-space: nowrap; }
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
.text-justify {
|
||||
text-align: justify;
|
||||
}
|
||||
.text-nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
// Transformation
|
||||
.text-lowercase { text-transform: lowercase; }
|
||||
.text-uppercase { text-transform: uppercase; }
|
||||
.text-capitalize { text-transform: capitalize; }
|
||||
.text-lowercase {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
.text-uppercase {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.text-capitalize {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
// Contextual colors
|
||||
.text-muted {
|
||||
@@ -140,7 +187,6 @@ mark,
|
||||
.bg-variant(@state-danger-bg);
|
||||
}
|
||||
|
||||
|
||||
// Page header
|
||||
// -------------------------
|
||||
|
||||
@@ -150,7 +196,6 @@ mark,
|
||||
border-bottom: 1px solid @page-header-border-color;
|
||||
}
|
||||
|
||||
|
||||
// Lists
|
||||
// -------------------------
|
||||
|
||||
@@ -225,7 +270,6 @@ dd {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Misc
|
||||
// -------------------------
|
||||
|
||||
@@ -287,7 +331,9 @@ blockquote.pull-right {
|
||||
footer,
|
||||
small,
|
||||
.small {
|
||||
&:before { content: ''; }
|
||||
&:before {
|
||||
content: '';
|
||||
}
|
||||
&:after {
|
||||
content: '\00A0 \2014'; // nbsp, em dash
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Utility classes
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Floats
|
||||
// -------------------------
|
||||
|
||||
@@ -19,7 +18,6 @@
|
||||
float: left !important;
|
||||
}
|
||||
|
||||
|
||||
// Toggling content
|
||||
// -------------------------
|
||||
|
||||
@@ -37,7 +35,6 @@
|
||||
.text-hide();
|
||||
}
|
||||
|
||||
|
||||
// Hide from screenreaders and browsers
|
||||
//
|
||||
// Credit: HTML5 Boilerplate
|
||||
@@ -46,7 +43,6 @@
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
// For Affix plugin
|
||||
// -------------------------
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,6 @@
|
||||
// Wells
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base class
|
||||
.well {
|
||||
min-height: 20px;
|
||||
@@ -11,10 +10,10 @@
|
||||
background-color: @well-bg;
|
||||
border: 1px solid @well-border;
|
||||
border-radius: @border-radius-base;
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,0.05));
|
||||
blockquote {
|
||||
border-color: #ddd;
|
||||
border-color: rgba(0,0,0,.15);
|
||||
border-color: rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
// Bootswatch
|
||||
// -----------------------------------------------------
|
||||
|
||||
@import url("http://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
|
||||
@import url('http://fonts.googleapis.com/css?family=Roboto:300,400,500,700');
|
||||
|
||||
// Navbar =====================================================================
|
||||
|
||||
.navbar {
|
||||
border: none;
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,.3));
|
||||
.box-shadow(0 1px 2px rgba(0,0,0,0.3));
|
||||
|
||||
&-brand {
|
||||
font-size: 24px;
|
||||
@@ -19,7 +19,7 @@
|
||||
color: #fff;
|
||||
.placeholder(@navbar-inverse-link-color);
|
||||
|
||||
&[type=text] {
|
||||
&[type='text'] {
|
||||
.box-shadow(inset 0 -1px 0 @navbar-inverse-link-color);
|
||||
|
||||
&:focus {
|
||||
@@ -49,9 +49,9 @@
|
||||
|
||||
&:active {
|
||||
background-color: darken(@bg, 6%);
|
||||
#gradient > .radial(darken(@bg, 6%) 10%, @bg 11%);
|
||||
#gradient > .radial(darken(@bg, 6%) 10%, @bg 11%);;
|
||||
background-size: 1000%;
|
||||
.box-shadow(2px 2px 2px rgba(0,0,0,.3));
|
||||
.box-shadow(2px 2px 2px rgba(0,0,0,0.3));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -67,7 +67,7 @@
|
||||
text-transform: uppercase;
|
||||
border-right: none;
|
||||
border-bottom: none;
|
||||
.box-shadow(1px 1px 2px rgba(0,0,0,.3));
|
||||
.box-shadow(1px 1px 2px rgba(0,0,0,0.3));
|
||||
.transition(all 0.2s);
|
||||
|
||||
&-link {
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
letter-spacing: .1px;
|
||||
letter-spacing: 0.1px;
|
||||
text-rendering: optimizeLegibility;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ p {
|
||||
input,
|
||||
button {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
letter-spacing: .1px;
|
||||
letter-spacing: 0.1px;
|
||||
text-rendering: optimizeLegibility;
|
||||
}
|
||||
|
||||
@@ -137,14 +137,14 @@ label {
|
||||
textarea,
|
||||
textarea.form-control,
|
||||
input.form-control,
|
||||
input[type=text],
|
||||
input[type=password],
|
||||
input[type=email],
|
||||
input[type=number],
|
||||
[type=text].form-control,
|
||||
[type=password].form-control,
|
||||
[type=email].form-control,
|
||||
[type=tel].form-control,
|
||||
input[type='text'],
|
||||
input[type='password'],
|
||||
input[type='email'],
|
||||
input[type='number'],
|
||||
[type='text'].form-control,
|
||||
[type='password'].form-control,
|
||||
[type='email'].form-control,
|
||||
[type='tel'].form-control,
|
||||
[contenteditable].form-control {
|
||||
padding: 0;
|
||||
border: none;
|
||||
@@ -223,15 +223,15 @@ select.form-control {
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
input[type='radio'],
|
||||
input[type='checkbox'] {
|
||||
margin-left: -25px;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="radio"],
|
||||
.radio input[type="radio"],
|
||||
.radio-inline input[type="radio"] {
|
||||
input[type='radio'],
|
||||
.radio input[type='radio'],
|
||||
.radio-inline input[type='radio'] {
|
||||
position: relative;
|
||||
margin-top: 5px;
|
||||
margin-right: 4px;
|
||||
@@ -248,7 +248,7 @@ input[type="radio"],
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
content: "";
|
||||
content: '';
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
@@ -287,9 +287,9 @@ input[type="radio"],
|
||||
}
|
||||
}
|
||||
|
||||
input[type="checkbox"],
|
||||
.checkbox input[type="checkbox"],
|
||||
.checkbox-inline input[type="checkbox"] {
|
||||
input[type='checkbox'],
|
||||
.checkbox input[type='checkbox'],
|
||||
.checkbox-inline input[type='checkbox'] {
|
||||
position: relative;
|
||||
vertical-align: -4px;
|
||||
border: none;
|
||||
@@ -302,7 +302,7 @@ input[type="checkbox"],
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: "";
|
||||
content: '';
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
@@ -314,7 +314,7 @@ input[type="checkbox"],
|
||||
}
|
||||
|
||||
&:checked:before {
|
||||
content: "";
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 6px;
|
||||
@@ -343,27 +343,27 @@ input[type="checkbox"],
|
||||
}
|
||||
|
||||
.has-warning {
|
||||
input:not([type=checkbox]),
|
||||
input:not([type='checkbox']),
|
||||
.form-control,
|
||||
input:not([type=checkbox]):focus,
|
||||
input:not([type='checkbox']):focus,
|
||||
.form-control:focus {
|
||||
.box-shadow(inset 0 -2px 0 @brand-warning);
|
||||
}
|
||||
}
|
||||
|
||||
.has-error {
|
||||
input:not([type=checkbox]),
|
||||
input:not([type='checkbox']),
|
||||
.form-control,
|
||||
input:not([type=checkbox]):focus,
|
||||
input:not([type='checkbox']):focus,
|
||||
.form-control:focus {
|
||||
.box-shadow(inset 0 -2px 0 @brand-danger);
|
||||
}
|
||||
}
|
||||
|
||||
.has-success {
|
||||
input:not([type=checkbox]),
|
||||
input:not([type='checkbox']),
|
||||
.form-control,
|
||||
input:not([type=checkbox]):focus,
|
||||
input:not([type='checkbox']):focus,
|
||||
.form-control:focus {
|
||||
.box-shadow(inset 0 -2px 0 @brand-success);
|
||||
}
|
||||
@@ -405,7 +405,6 @@ input[type="checkbox"],
|
||||
}
|
||||
|
||||
&.nav-justified {
|
||||
|
||||
& > li > a,
|
||||
& > li > a:hover,
|
||||
& > .active > a,
|
||||
@@ -421,7 +420,7 @@ input[type="checkbox"],
|
||||
|
||||
.dropdown-menu {
|
||||
border: none;
|
||||
.box-shadow(0 1px 4px rgba(0,0,0,.3));
|
||||
.box-shadow(0 1px 4px rgba(0,0,0,0.3));
|
||||
}
|
||||
|
||||
// Indicators =================================================================
|
||||
@@ -479,7 +478,7 @@ input[type="checkbox"],
|
||||
&:last-child {
|
||||
&:before {
|
||||
display: block;
|
||||
content: "";
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -523,7 +522,6 @@ input[type="checkbox"],
|
||||
}
|
||||
|
||||
.list-group {
|
||||
|
||||
&-item {
|
||||
padding: 15px;
|
||||
}
|
||||
@@ -541,7 +539,7 @@ input[type="checkbox"],
|
||||
.panel {
|
||||
border: none;
|
||||
border-radius: 2px;
|
||||
.box-shadow(0 1px 4px rgba(0,0,0,.3));
|
||||
.box-shadow(0 1px 4px rgba(0,0,0,0.3));
|
||||
|
||||
&-heading {
|
||||
border-bottom: none;
|
||||
@@ -554,14 +552,18 @@ input[type="checkbox"],
|
||||
|
||||
.popover {
|
||||
border: none;
|
||||
.box-shadow(0 1px 4px rgba(0,0,0,.3));
|
||||
.box-shadow(0 1px 4px rgba(0,0,0,0.3));
|
||||
}
|
||||
|
||||
.carousel {
|
||||
&-caption {
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
12
assets/less/font-awesome/animated.less
vendored
12
assets/less/font-awesome/animated.less
vendored
@@ -3,32 +3,32 @@
|
||||
|
||||
.@{fa-css-prefix}-spin {
|
||||
-webkit-animation: fa-spin 2s infinite linear;
|
||||
animation: fa-spin 2s infinite linear;
|
||||
animation: fa-spin 2s infinite linear;
|
||||
}
|
||||
|
||||
.@{fa-css-prefix}-pulse {
|
||||
-webkit-animation: fa-spin 1s infinite steps(8);
|
||||
animation: fa-spin 1s infinite steps(8);
|
||||
animation: fa-spin 1s infinite steps(8);
|
||||
}
|
||||
|
||||
@-webkit-keyframes fa-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fa-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
|
||||
38
assets/less/font-awesome/bordered-pulled.less
vendored
38
assets/less/font-awesome/bordered-pulled.less
vendored
@@ -2,24 +2,40 @@
|
||||
// -------------------------
|
||||
|
||||
.@{fa-css-prefix}-border {
|
||||
padding: .2em .25em .15em;
|
||||
border: solid .08em @fa-border-color;
|
||||
border-radius: .1em;
|
||||
padding: 0.2em 0.25em 0.15em;
|
||||
border: solid 0.08em @fa-border-color;
|
||||
border-radius: 0.1em;
|
||||
}
|
||||
|
||||
.@{fa-css-prefix}-pull-left { float: left; }
|
||||
.@{fa-css-prefix}-pull-right { float: right; }
|
||||
.@{fa-css-prefix}-pull-left {
|
||||
float: left;
|
||||
}
|
||||
.@{fa-css-prefix}-pull-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.@{fa-css-prefix} {
|
||||
&.@{fa-css-prefix}-pull-left { margin-right: .3em; }
|
||||
&.@{fa-css-prefix}-pull-right { margin-left: .3em; }
|
||||
&.@{fa-css-prefix}-pull-left {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
&.@{fa-css-prefix}-pull-right {
|
||||
margin-left: 0.3em;
|
||||
}
|
||||
}
|
||||
|
||||
/* Deprecated as of 4.4.0 */
|
||||
.pull-right { float: right; }
|
||||
.pull-left { float: left; }
|
||||
.pull-right {
|
||||
float: right;
|
||||
}
|
||||
.pull-left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.@{fa-css-prefix} {
|
||||
&.pull-left { margin-right: .3em; }
|
||||
&.pull-right { margin-left: .3em; }
|
||||
&.pull-left {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
&.pull-right {
|
||||
margin-left: 0.3em;
|
||||
}
|
||||
}
|
||||
|
||||
3
assets/less/font-awesome/core.less
vendored
3
assets/less/font-awesome/core.less
vendored
@@ -3,10 +3,9 @@
|
||||
|
||||
.@{fa-css-prefix} {
|
||||
display: inline-block;
|
||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
||||
font: normal normal normal @fa-font-size-base / @fa-line-height-base FontAwesome; // shortening font declaration
|
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
}
|
||||
|
||||
26
assets/less/font-awesome/font-awesome.less
vendored
26
assets/less/font-awesome/font-awesome.less
vendored
@@ -3,16 +3,16 @@
|
||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
||||
*/
|
||||
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
@import "path.less";
|
||||
@import "core.less";
|
||||
@import "larger.less";
|
||||
@import "fixed-width.less";
|
||||
@import "list.less";
|
||||
@import "bordered-pulled.less";
|
||||
@import "animated.less";
|
||||
@import "rotated-flipped.less";
|
||||
@import "stacked.less";
|
||||
@import "icons.less";
|
||||
@import "screen-reader.less";
|
||||
@import 'variables.less';
|
||||
@import 'mixins.less';
|
||||
@import 'path.less';
|
||||
@import 'core.less';
|
||||
@import 'larger.less';
|
||||
@import 'fixed-width.less';
|
||||
@import 'list.less';
|
||||
@import 'bordered-pulled.less';
|
||||
@import 'animated.less';
|
||||
@import 'rotated-flipped.less';
|
||||
@import 'stacked.less';
|
||||
@import 'icons.less';
|
||||
@import 'screen-reader.less';
|
||||
|
||||
2536
assets/less/font-awesome/icons.less
vendored
2536
assets/less/font-awesome/icons.less
vendored
File diff suppressed because it is too large
Load Diff
16
assets/less/font-awesome/larger.less
vendored
16
assets/less/font-awesome/larger.less
vendored
@@ -7,7 +7,15 @@
|
||||
line-height: (3em / 4);
|
||||
vertical-align: -15%;
|
||||
}
|
||||
.@{fa-css-prefix}-2x { font-size: 2em; }
|
||||
.@{fa-css-prefix}-3x { font-size: 3em; }
|
||||
.@{fa-css-prefix}-4x { font-size: 4em; }
|
||||
.@{fa-css-prefix}-5x { font-size: 5em; }
|
||||
.@{fa-css-prefix}-2x {
|
||||
font-size: 2em;
|
||||
}
|
||||
.@{fa-css-prefix}-3x {
|
||||
font-size: 3em;
|
||||
}
|
||||
.@{fa-css-prefix}-4x {
|
||||
font-size: 4em;
|
||||
}
|
||||
.@{fa-css-prefix}-5x {
|
||||
font-size: 5em;
|
||||
}
|
||||
|
||||
4
assets/less/font-awesome/list.less
vendored
4
assets/less/font-awesome/list.less
vendored
@@ -5,7 +5,9 @@
|
||||
padding-left: 0;
|
||||
margin-left: @fa-li-width;
|
||||
list-style-type: none;
|
||||
> li { position: relative; }
|
||||
> li {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
.@{fa-css-prefix}-li {
|
||||
position: absolute;
|
||||
|
||||
18
assets/less/font-awesome/mixins.less
vendored
18
assets/less/font-awesome/mixins.less
vendored
@@ -3,29 +3,27 @@
|
||||
|
||||
.fa-icon() {
|
||||
display: inline-block;
|
||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
||||
font: normal normal normal @fa-font-size-base / @fa-line-height-base FontAwesome; // shortening font declaration
|
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
}
|
||||
|
||||
.fa-icon-rotate(@degrees, @rotation) {
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})';
|
||||
-webkit-transform: rotate(@degrees);
|
||||
-ms-transform: rotate(@degrees);
|
||||
transform: rotate(@degrees);
|
||||
-ms-transform: rotate(@degrees);
|
||||
transform: rotate(@degrees);
|
||||
}
|
||||
|
||||
.fa-icon-flip(@horiz, @vert, @rotation) {
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)';
|
||||
-webkit-transform: scale(@horiz, @vert);
|
||||
-ms-transform: scale(@horiz, @vert);
|
||||
transform: scale(@horiz, @vert);
|
||||
-ms-transform: scale(@horiz, @vert);
|
||||
transform: scale(@horiz, @vert);
|
||||
}
|
||||
|
||||
|
||||
// Only display content to screen readers. A la Bootstrap 4.
|
||||
//
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
||||
@@ -37,7 +35,7 @@
|
||||
padding: 0;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0,0,0,0);
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
|
||||
3
assets/less/font-awesome/path.less
vendored
3
assets/less/font-awesome/path.less
vendored
@@ -4,7 +4,8 @@
|
||||
@font-face {
|
||||
font-family: 'FontAwesome';
|
||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
|
||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
|
||||
src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}')
|
||||
format('embedded-opentype'),
|
||||
url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
|
||||
url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
|
||||
url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
|
||||
|
||||
20
assets/less/font-awesome/rotated-flipped.less
vendored
20
assets/less/font-awesome/rotated-flipped.less
vendored
@@ -1,12 +1,22 @@
|
||||
// Rotated & Flipped Icons
|
||||
// -------------------------
|
||||
|
||||
.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
|
||||
.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
|
||||
.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
|
||||
.@{fa-css-prefix}-rotate-90 {
|
||||
.fa-icon-rotate(90deg, 1);
|
||||
}
|
||||
.@{fa-css-prefix}-rotate-180 {
|
||||
.fa-icon-rotate(180deg, 2);
|
||||
}
|
||||
.@{fa-css-prefix}-rotate-270 {
|
||||
.fa-icon-rotate(270deg, 3);
|
||||
}
|
||||
|
||||
.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
|
||||
.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
|
||||
.@{fa-css-prefix}-flip-horizontal {
|
||||
.fa-icon-flip(-1, 1, 0);
|
||||
}
|
||||
.@{fa-css-prefix}-flip-vertical {
|
||||
.fa-icon-flip(1, -1, 2);
|
||||
}
|
||||
|
||||
// Hook for IE8-9
|
||||
// -------------------------
|
||||
|
||||
8
assets/less/font-awesome/screen-reader.less
vendored
8
assets/less/font-awesome/screen-reader.less
vendored
@@ -1,5 +1,9 @@
|
||||
// Screen Readers
|
||||
// -------------------------
|
||||
|
||||
.sr-only { .sr-only(); }
|
||||
.sr-only-focusable { .sr-only-focusable(); }
|
||||
.sr-only {
|
||||
.sr-only();
|
||||
}
|
||||
.sr-only-focusable {
|
||||
.sr-only-focusable();
|
||||
}
|
||||
|
||||
15
assets/less/font-awesome/stacked.less
vendored
15
assets/less/font-awesome/stacked.less
vendored
@@ -9,12 +9,19 @@
|
||||
line-height: 2em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
|
||||
.@{fa-css-prefix}-stack-1x,
|
||||
.@{fa-css-prefix}-stack-2x {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.@{fa-css-prefix}-stack-1x { line-height: inherit; }
|
||||
.@{fa-css-prefix}-stack-2x { font-size: 2em; }
|
||||
.@{fa-css-prefix}-inverse { color: @fa-inverse; }
|
||||
.@{fa-css-prefix}-stack-1x {
|
||||
line-height: inherit;
|
||||
}
|
||||
.@{fa-css-prefix}-stack-2x {
|
||||
font-size: 2em;
|
||||
}
|
||||
.@{fa-css-prefix}-inverse {
|
||||
color: @fa-inverse;
|
||||
}
|
||||
|
||||
1475
assets/less/font-awesome/variables.less
vendored
1475
assets/less/font-awesome/variables.less
vendored
File diff suppressed because it is too large
Load Diff
@@ -14,4 +14,4 @@
|
||||
|
||||
.alert-leave.alert-leave-active {
|
||||
opacity: 0.01;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user