From 361e9c629ed45b8caf77e74486a0ba226bc451d4 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Mon, 6 Jul 2015 02:03:40 +0900 Subject: [PATCH 01/79] switch Angular -> React(half done) --- .bowerrc | 3 + bower.json | 8 + browser/index.html | 11 ++ .../main/Containers/BlueprintContainer.jsx | 11 ++ .../main/Containers/DashboardContainer.jsx | 52 +++++++ browser/main/Containers/LoginContainer.jsx | 44 ++++++ browser/main/Containers/MainContainer.jsx | 18 +++ browser/main/Containers/PlanetContainer.jsx | 138 ++++++++++++++++++ browser/main/Containers/RegisterContainer.jsx | 55 +++++++ browser/main/Containers/SnippetContainer.jsx | 110 ++++++++++++++ browser/main/Services/Auth.js | 40 +++++ browser/main/Services/Snippet.js | 38 +++++ browser/main/index.electron.html | 16 ++ browser/main/index.html | 16 ++ browser/main/index.jsx | 34 +++++ .../styles/main/components/SideNavigator.styl | 50 +++++++ .../main/containers/DashboardContainer.styl | 15 ++ .../main/containers/SnippetContainer.styl | 53 +++++++ browser/styles/main/index.styl | 104 +++++++++++++ browser/styles/mixins/circle.styl | 3 + browser/styles/mixins/fullsize.styl | 6 + browser/styles/shared/btn.styl | 44 ++++++ browser/styles/vars.styl | 15 ++ main.js | 38 +++++ npm-debug.log | 36 +++++ package.json | 64 +++----- webpack.config.js | 33 +++++ 27 files changed, 1012 insertions(+), 43 deletions(-) create mode 100644 .bowerrc create mode 100644 bower.json create mode 100644 browser/index.html create mode 100644 browser/main/Containers/BlueprintContainer.jsx create mode 100644 browser/main/Containers/DashboardContainer.jsx create mode 100644 browser/main/Containers/LoginContainer.jsx create mode 100644 browser/main/Containers/MainContainer.jsx create mode 100644 browser/main/Containers/PlanetContainer.jsx create mode 100644 browser/main/Containers/RegisterContainer.jsx create mode 100644 browser/main/Containers/SnippetContainer.jsx create mode 100644 browser/main/Services/Auth.js create mode 100644 browser/main/Services/Snippet.js create mode 100644 browser/main/index.electron.html create mode 100644 browser/main/index.html create mode 100644 browser/main/index.jsx create mode 100644 browser/styles/main/components/SideNavigator.styl create mode 100644 browser/styles/main/containers/DashboardContainer.styl create mode 100644 browser/styles/main/containers/SnippetContainer.styl create mode 100644 browser/styles/main/index.styl create mode 100644 browser/styles/mixins/circle.styl create mode 100644 browser/styles/mixins/fullsize.styl create mode 100644 browser/styles/shared/btn.styl create mode 100644 browser/styles/vars.styl create mode 100644 main.js create mode 100644 npm-debug.log create mode 100644 webpack.config.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 00000000..0c16bd5a --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "browser/vendor/" +} diff --git a/bower.json b/bower.json new file mode 100644 index 00000000..d3bad4c6 --- /dev/null +++ b/bower.json @@ -0,0 +1,8 @@ +{ + "name": "codexen-app", + "dependencies": { + "react": "~0.13.3", + "fontawesome": "~4.3.0", + "react-router": "~0.13.3" + } +} diff --git a/browser/index.html b/browser/index.html new file mode 100644 index 00000000..cbb53cad --- /dev/null +++ b/browser/index.html @@ -0,0 +1,11 @@ + + + + + + + + Go Main + Go Popup + + diff --git a/browser/main/Containers/BlueprintContainer.jsx b/browser/main/Containers/BlueprintContainer.jsx new file mode 100644 index 00000000..bf2c36d2 --- /dev/null +++ b/browser/main/Containers/BlueprintContainer.jsx @@ -0,0 +1,11 @@ +var React = require('react/addons') + +module.exports = React.createClass({ + render: function () { + return ( +
+ Blueprint Container +
+ ) + } +}) diff --git a/browser/main/Containers/DashboardContainer.jsx b/browser/main/Containers/DashboardContainer.jsx new file mode 100644 index 00000000..6f04754e --- /dev/null +++ b/browser/main/Containers/DashboardContainer.jsx @@ -0,0 +1,52 @@ +var React = require('react/addons') + +module.exports = React.createClass({ + render: function () { + return ( +
+

Codexen App v0.2.0

+ +

About CodeXen

+ +

+ CodeXen is short code storage tool make coding more stressless. If you use CodeXen, then you will be disentangled from troublesome organizing a large number of snippets and googling same code many times. +

+ +
    +
  1. +

    Post your code

    +

    + Post your commonly used code with description,category,and tags. +

    +
  2. +
  3. +

    Save on cloud

    +

    + From short snippet to long complex code,CodeXen saves any code simply. +

    +
  4. +
  5. +

    + Use code like a magic +

    +

    + CodeXen call code you posted whereever you are.Type [shift+control+tab] simultaneously. +

    +
  6. +
  7. +

    + Code Elegantly +

    +

    + That's all! + You must be loved with CodeXen. Enjoy coding;) +

    +
  8. +
+

+ © 2015 MAISIN&CO.,Inc. +

+
+ ) + } +}) diff --git a/browser/main/Containers/LoginContainer.jsx b/browser/main/Containers/LoginContainer.jsx new file mode 100644 index 00000000..6fc39c3c --- /dev/null +++ b/browser/main/Containers/LoginContainer.jsx @@ -0,0 +1,44 @@ +var React = require('react/addons') +var ReactRouter = require('react-router') +var Link = ReactRouter.Link +var Auth = require('../Services/Auth') + +module.exports = React.createClass({ + mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation], + getInitialState: function () { + return { + email: '', + password: '' + } + }, + handleSubmit: function (e) { + console.log(this.state) + Auth.attempt() + // TODO: request user data + .then(function (user) { + this.transitionTo('dashboard', {planetName: user.name}) + }.bind(this)) + e.preventDefault() + }, + render: function () { + return ( +
+

CodeXen

+

Log In | Register

+
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + } +}) diff --git a/browser/main/Containers/MainContainer.jsx b/browser/main/Containers/MainContainer.jsx new file mode 100644 index 00000000..3bdf2202 --- /dev/null +++ b/browser/main/Containers/MainContainer.jsx @@ -0,0 +1,18 @@ +var React = require('react/addons') +var ReactRouter = require('react-router') +var RouteHandler = ReactRouter.RouteHandler + +module.exports = React.createClass({ + mixins: [ReactRouter.Navigation, ReactRouter.State], + render: function () { + // Redirect Login state + if (this.getPath() === '/') { + this.transitionTo('/login') + } + return ( +
+ +
+ ) + } +}) diff --git a/browser/main/Containers/PlanetContainer.jsx b/browser/main/Containers/PlanetContainer.jsx new file mode 100644 index 00000000..e2557d5f --- /dev/null +++ b/browser/main/Containers/PlanetContainer.jsx @@ -0,0 +1,138 @@ +var React = require('react/addons') +var RouteHandler = require('react-router').RouteHandler +var ReactRouter = require('react-router') +var Link = ReactRouter.Link + +var userPlanets = [ + { + id: 1, + name: 'testcat', + profileName: 'TestCat' + }, + { + id: 2, + name: 'group1', + profileName: 'Some Group#1' + }, + { + id: 3, + name: 'group2', + profileName: 'Some Group#1' + } +] + +var PlanetNavigator = React.createClass({ + propTypes: { + currentPlanet: React.PropTypes.object + }, + render: function () { + var planets = userPlanets.map(function (planet) { + return ( +
  • {planet.profileName[0]}
  • + ) + }.bind(this)) + + return ( +
    + +
    + ) + } +}) + +var PlanetMain = React.createClass({ + propTypes: { + currentPlanet: React.PropTypes.object + }, + render: function () { + return ( +
    + + +
    + ) + } +}) + +var SideNavigator = React.createClass({ + propTypes: { + currentPlanet: React.PropTypes.shape({ + name: React.PropTypes.string + }) + }, + render: function () { + var currentPlanetName = this.props.currentPlanet.name + + return ( +
    +
    +

    {currentPlanetName}

    + +
    + + +
    + ) + } +}) + +var Screen = React.createClass({ + render: function () { + return ( +
    + +
    + ) + } +}) + +module.exports = React.createClass({ + mixins: [ReactRouter.Navigation], + propTypes: { + params: React.PropTypes.object, + planetName: React.PropTypes.string + }, + render: function () { + var currentPlanetName = this.props.params.planetName + var currentPlanet = null + userPlanets.some(function (planet) { + if (planet.name === currentPlanetName) { + currentPlanet = planet + return true + } + return false + }) + if (currentPlanet == null) { + var redirectTo = userPlanets[0].name + this.transitionTo('planet', {planetName: redirectTo}) + return ( +
    + Redirecting... +
    + ) + } + + return ( +
    + + +
    + ) + } +}) diff --git a/browser/main/Containers/RegisterContainer.jsx b/browser/main/Containers/RegisterContainer.jsx new file mode 100644 index 00000000..a09ec0e2 --- /dev/null +++ b/browser/main/Containers/RegisterContainer.jsx @@ -0,0 +1,55 @@ +var React = require('react/addons') +var ReactRouter = require('react-router') +var Link = ReactRouter.Link +var Auth = require('../Services/Auth') + +module.exports = React.createClass({ + mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation], + getInitialState: function () { + return { + email: '', + password: '', + name: '', + profileName: '' + } + }, + handleSubmit: function (e) { + Auth.register() + // TODO: request user data + .then(function (user) { + this.transitionTo('dashboard', {planetName: user.name}) + }.bind(this)) + + e.preventDefault() + }, + render: function () { + return ( +
    +

    CodeXen

    +

    Log In | Register

    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + ) + } +}) diff --git a/browser/main/Containers/SnippetContainer.jsx b/browser/main/Containers/SnippetContainer.jsx new file mode 100644 index 00000000..57356a93 --- /dev/null +++ b/browser/main/Containers/SnippetContainer.jsx @@ -0,0 +1,110 @@ +var React = require('react/addons') +var Snippet = require('../Services/Snippet') + +var SnippetList = React.createClass({ + propTypes: { + snippets: React.PropTypes.array, + selectSnippet: React.PropTypes.func + }, + itemClickHandlerFactory: function (snippet) { + return function () { + console.log(this.props.selectSnippet) + this.props.selectSnippet(snippet) + }.bind(this) + }, + render: function () { + var snippets = this.props.snippets.map(function (snippet) { + var tags = snippet.Tags.map(function (tag) { + return ( + #{tag.name} + ) + }) + return ( +
  • +
    {snippet.callSign}
    +
    {snippet.description}
    +
    {snippet.updatedAt}
    +
    {tags}
    +
  • + ) + }.bind(this)) + + return ( +
    +
    +
      + {snippets} +
    +
    + ) + } +}) + +var SnippetViewer = React.createClass({ + propTypes: { + snippet: React.PropTypes.object + }, + render: function () { + var snippet = this.props.snippet + var content + if (snippet != null) { + var tags = snippet.Tags.map(function (tag) { + return ( + #{tag.name} + ) + }) + content = ( +
    +
    {snippet.callSign} {snippet.updatedAt}
    +
    +
    +
    {snippet.description}
    +
    {tags}
    +
    +
    {snippet.content}
    +
    +
    + ) + } else { + content = ( +
    + Not selected +
    + ) + } + return content + } +}) + +var SnippetContainer = React.createClass({ + propTypes: { + params: React.PropTypes.shape({ + planetName: React.PropTypes.string + }) + }, + getInitialState: function () { + return { + snippets: [], + curentSnippet: {} + } + }, + componentDidMount: function () { + Snippet.getByPlanet(this.props.params.planetName) + .then(function (snippets) { + this.setState({snippets: snippets, currentSnippet: snippets.length > 0 ? snippets[0] : null}) + }.bind(this)) + }, + selectSnippet: function (snippet) { + this.setState({currentSnippet: snippet}) + }, + render: function () { + return ( +
    + + +
    + ) + } +}) + +module.exports = SnippetContainer diff --git a/browser/main/Services/Auth.js b/browser/main/Services/Auth.js new file mode 100644 index 00000000..f8af1ad3 --- /dev/null +++ b/browser/main/Services/Auth.js @@ -0,0 +1,40 @@ +/* global localStorage */ +var Auth = {} + +var currentUser = null +Auth.attempt = function (params) { + return new Promise(function (resolve, reject) { + var token = 'some token' + var user = { + name: 'testcat', + email: 'testcat@example.com', + profileName: 'Test Cat' + } + localStorage.setItem('token', token) + + resolve(user) + }) +} + +Auth.register = function (params) { + return new Promise(function (resolve, reject) { + var token = 'some token' + var user = { + name: 'testcat', + email: 'testcat@example.com', + profileName: 'Test Cat' + } + localStorage.setItem('token', token) + + resolve(user) + }) +} + +Auth.getUser = function () { + return new Promise(function (resolve, reject) { + + resolve(currentUser) + }) +} + +module.exports = Auth diff --git a/browser/main/Services/Snippet.js b/browser/main/Services/Snippet.js new file mode 100644 index 00000000..716ddb3e --- /dev/null +++ b/browser/main/Services/Snippet.js @@ -0,0 +1,38 @@ +var Snippet = {} + +var snippets = { + testcat: [ + { + id: 1, + callSign: 'alert', + description: 'yolo', + content: '
    ', + mode: 'html', + createdAt: '2015-06-26T15:10:59.000Z', + updatedAt: '2015-06-26T15:10:59.000Z', + UserId: 1, + Tags: [{'id': 18, 'name': 'bootstrap', 'color': null}, {'id': 19, 'name': 'alert', 'color': null}] + }, + { + id: 2, + callSign: 'log', + description: 'javascript log', + content: 'console.log(\'yolo\')', + mode: 'js', + createdAt: '2015-06-26T15:10:59.000Z', + updatedAt: '2015-06-26T15:10:59.000Z', + UserId: 1, + Tags: [{'id': 20, 'name': 'log', 'color': null}, {'id': 1, 'name': 'js', 'color': null}] + } + ], + group1: [], + group2: [] +} + +Snippet.getByPlanet = function (planetName) { + return new Promise(function (resolve, reject) { + resolve(snippets[planetName]) + }) +} + +module.exports = Snippet diff --git a/browser/main/index.electron.html b/browser/main/index.electron.html new file mode 100644 index 00000000..0b416d2a --- /dev/null +++ b/browser/main/index.electron.html @@ -0,0 +1,16 @@ + + + + CodeXen + + + + + +
    + + + diff --git a/browser/main/index.html b/browser/main/index.html new file mode 100644 index 00000000..6ee43383 --- /dev/null +++ b/browser/main/index.html @@ -0,0 +1,16 @@ + + + + CodeXen + + + + + + + +
    + + + + diff --git a/browser/main/index.jsx b/browser/main/index.jsx new file mode 100644 index 00000000..3950996b --- /dev/null +++ b/browser/main/index.jsx @@ -0,0 +1,34 @@ +require('../styles/main/index.styl') + +var React = require('react/addons') + +var ReactRouter = require('react-router') +var Route = ReactRouter.Route +var DefaultRoute = ReactRouter.DefaultRoute + +var MainContainer = require('./Containers/MainContainer.jsx') + +var LoginContainer = require('./Containers/LoginContainer.jsx') +var RegisterContainer = require('./Containers/RegisterContainer.jsx') + +var PlanetContainer = require('./Containers/PlanetContainer.jsx') + +var Dashboard = require('./Containers/DashboardContainer.jsx') +var SnippetContainer = require('./Containers/SnippetContainer.jsx') +var BlueprintContainer = require('./Containers/BlueprintContainer.jsx') + +var routes = ( + + + + + + + + + +) + +ReactRouter.run(routes, ReactRouter.HashLocation, function (Root) { + React.render(, document.getElementById('content')) +}) diff --git a/browser/styles/main/components/SideNavigator.styl b/browser/styles/main/components/SideNavigator.styl new file mode 100644 index 00000000..c06e6383 --- /dev/null +++ b/browser/styles/main/components/SideNavigator.styl @@ -0,0 +1,50 @@ +.SideNavigator + absolute top bottom left + width 200px + border-right solid 2px brandColor + padding 10px + box-sizing border-box + .nav-header + clearfix() + margin-bottom 15px + .planet-name + float left + line-height 30px + font-size 1.1em + .menu-btn + float right + display block + font-size 0.8em + color lightButtonColor + border solid 2px lightButtonColor + box-sizing border-box + circle() + background-image none + background-color transparent + width 30px + height 30px + text-align center + cursor pointer + transform scale(0.8) + &:active, &.active, &:hover, &.hover + background-color lightButtonColor + color white + nav + a + display block + position relative + right 0px + box-sizing border-box + width 190px + padding 15px 15px + margin 10px 0 + text-decoration none + border-radius left 10px + background-color transparent + color textColor + transition 0.1s + &:hover, &.hover + background-color hoverBackgroundColor + &:active, &.active + background-color brandColor + color white diff --git a/browser/styles/main/containers/DashboardContainer.styl b/browser/styles/main/containers/DashboardContainer.styl new file mode 100644 index 00000000..38b7de09 --- /dev/null +++ b/browser/styles/main/containers/DashboardContainer.styl @@ -0,0 +1,15 @@ +.DashboardContainer + fullsize() + box-sizing border-box + overflow-y auto + padding 10px + .jumbotron + background-color brandColor + color white + padding 65px 20px + font-size 3.5em + margin-bottom 25px + h2, h3 + margin-bottom 15px + p + margin-bottom 25px diff --git a/browser/styles/main/containers/SnippetContainer.styl b/browser/styles/main/containers/SnippetContainer.styl new file mode 100644 index 00000000..607a6173 --- /dev/null +++ b/browser/styles/main/containers/SnippetContainer.styl @@ -0,0 +1,53 @@ +.SnippetContainer + fullsize() + .tags + a + margin 0 2px + .SnippetList + absolute top bottom left + width 250px + border-right solid 1px highlightenBorderColor + .search + border-bottom solid 1px borderColor + padding 5px + margin 0 + + &>ul + absolute bottom left right + top 44px + overflow-y auto + li + border-bottom solid 1px borderColor + padding 10px + cursor pointer + .callSign + margin-bottom 5px + font-weight 600 + .description + margin-bottom 5px + .updatedAt + margin-bottom 5px + color lighten(textColor, 25%) + font-size 0.8em + &:hover, &.hover + background-color hoverBackgroundColor + + .SnippetViewer + absolute top bottom right + left 250px + .viewer-header + height 44px + line-height 44px + padding 0 15px + border-bottom solid 1px borderColor + box-sizing border-box + small + font-size 0.5em + .viewer-body + absolute bottom left right + top 44px + .viewer-detail + border-bottom solid 1px borderColor + padding 10px + .description + margin-bottom 15px diff --git a/browser/styles/main/index.styl b/browser/styles/main/index.styl new file mode 100644 index 00000000..7816e88a --- /dev/null +++ b/browser/styles/main/index.styl @@ -0,0 +1,104 @@ +@import '../../../node_modules/nib/lib/nib' +@import '../vars' +@import '../mixins/*' +global-reset() +@import '../shared/*' +@import './components/*' +@import './containers/*' + +body + font-family "Lato" + color textColor + +h1 + font-size 2em +h2 + font-size 1.5em +h3 + font-size 1.3em +h4 + font-size 1.15em +a + color brandColor + &:visited{ + color brandColor + } + +hr + border-top none + border-bottom solid 1px borderColor + margin 25px 0 + +.text-center + text-align center + +.form-group + margin-bottom 15px + &>label + display block + margin-bottom 5px + &>input[type='text'], &>input[type='password'] + display block + border solid 2px borderColor + padding 0 15px + font-size 1em + height 33px + border-radius 16.5px + box-sizing border-box + width 100% + + +#content + fullsize() + +.LoginContainer, .RegisterContainer + width 400px + margin 15px auto + padding 25px 15px + box-sizing border-box + h1, h2 + margin 5px auto 25px + +.PlanetNavigator + background-color #032B35 + color white + absolute left top bottom + width 50px + text-align center + box-sizing border-box + ul>li + padding 10px 3px + border-bottom solid 1px invBorderColor + &.active + background-color brandColor + a + background-color white + a + display block + width 44px + height 44px + text-align center + background-color #4D4D4D + color black + line-height 44px + font-size 1.1em + cursor pointer + circle() + transition 0.1s + &:hover, &:active + background-color white + img + circle() + width 44px + height 44px + +.PlanetContainer + fullsize() +.PlanetMain + absolute top bottom right + left 50px + + +.Screen + absolute top bottom right + left 200px diff --git a/browser/styles/mixins/circle.styl b/browser/styles/mixins/circle.styl new file mode 100644 index 00000000..b20e891b --- /dev/null +++ b/browser/styles/mixins/circle.styl @@ -0,0 +1,3 @@ +circle() + border-radius 50% + overflow hidden diff --git a/browser/styles/mixins/fullsize.styl b/browser/styles/mixins/fullsize.styl new file mode 100644 index 00000000..98866c01 --- /dev/null +++ b/browser/styles/mixins/fullsize.styl @@ -0,0 +1,6 @@ +fullsize() + position absolute + top 0 + left 0 + right 0 + bottom 0 diff --git a/browser/styles/shared/btn.styl b/browser/styles/shared/btn.styl new file mode 100644 index 00000000..90ba009b --- /dev/null +++ b/browser/styles/shared/btn.styl @@ -0,0 +1,44 @@ +.btn-primary, .btn-default + border-style solid + border-width 2px + background-image none + height 44px + padding 0 15px + border-radius 22px + box-sizing border-box + font-size 1.1em + font-weight 600 + transition 0.1s + cursor pointer + +.btn-block + display block + width 100% + margin 0 auto + +.btn-square + display inline-block + width 44px + padding 0 + +.btn-sm + height 32px + border-radius 16px + &.btn-square + width 32px + +.btn-primary + border-color brandBorderColor + background-color transparent + color brandColor + &:hover, &.hover, &:active, &.active + color white + background-color brandColor + +.btn-default + border-color invBorderColor + background-color transparent + color invBorderColor + &:hover, &.hover, &:active, &.active + color white + background-color invBorderColor diff --git a/browser/styles/vars.styl b/browser/styles/vars.styl new file mode 100644 index 00000000..83a41293 --- /dev/null +++ b/browser/styles/vars.styl @@ -0,0 +1,15 @@ +borderColor = #E8E8E8 +highlightenBorderColor = darken(borderColor, 20%) +invBorderColor = #404849 +brandBorderColor = #3FB399 + +buttonBorderColor = #4C4C4C + +lightButtonColor = #898989 + +brandColor = #2BAC8F + +textColor = #434343 + +backgroundColor= white +hoverBackgroundColor= transparentify(#444, 7%) diff --git a/main.js b/main.js new file mode 100644 index 00000000..12b2165e --- /dev/null +++ b/main.js @@ -0,0 +1,38 @@ +var app = require('app') // Module to control application life. +var BrowserWindow = require('browser-window') // Module to create native browser window. + +// Report crashes to our server. +require('crash-reporter').start() + +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the javascript object is GCed. +var mainWindow = null + +// app.on('window-all-closed', function () { +// if (process.platform !== 'darwin') app.quit() +// }) + + +app.on('ready', function () { + makeNewMainWindow() + + function makeNewMainWindow () { + console.log('new Window!') + mainWindow = new BrowserWindow({ + width: 920, + height: 640, + 'web-preferences': { + 'overlay-scrollbars': true + } + }) + + mainWindow.loadUrl('file://' + __dirname + '/browser/main/index.electron.html') + + mainWindow.on('closed', function () { + console.log('main closed') + mainWindow = null + app.dock.hide() + }) + app.dock.show() + } +}) diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 00000000..5704df8c --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,36 @@ +0 info it worked if it ends with ok +1 verbose cli [ 'node', '/usr/local/bin/npm', 'start' ] +2 info using npm@2.11.2 +3 info using node@v0.12.4 +4 verbose node symlink /usr/local/bin/node +5 verbose run-script [ 'prestart', 'start', 'poststart' ] +6 info prestart codexen-app-builder@0.2.0 +7 info start codexen-app-builder@0.2.0 +8 verbose unsafe-perm in lifecycle true +9 info codexen-app-builder@0.2.0 Failed to exec start script +10 verbose stack Error: codexen-app-builder@0.2.0 start: `npm run serve | npm run dev` +10 verbose stack Exit status 1 +10 verbose stack at EventEmitter. (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:213:16) +10 verbose stack at EventEmitter.emit (events.js:110:17) +10 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14) +10 verbose stack at ChildProcess.emit (events.js:110:17) +10 verbose stack at maybeClose (child_process.js:1015:16) +10 verbose stack at Process.ChildProcess._handle.onexit (child_process.js:1087:5) +11 verbose pkgid codexen-app-builder@0.2.0 +12 verbose cwd /Users/dickchoi/codexen/codexen-app +13 error Darwin 14.3.0 +14 error argv "node" "/usr/local/bin/npm" "start" +15 error node v0.12.4 +16 error npm v2.11.2 +17 error code ELIFECYCLE +18 error codexen-app-builder@0.2.0 start: `npm run serve | npm run dev` +18 error Exit status 1 +19 error Failed at the codexen-app-builder@0.2.0 start script 'npm run serve | npm run dev'. +19 error This is most likely a problem with the codexen-app-builder package, +19 error not with npm itself. +19 error Tell the author that this fails on your system: +19 error npm run serve | npm run dev +19 error You can get their info via: +19 error npm owner ls codexen-app-builder +19 error There is likely additional logging output above. +20 verbose exit [ 1, true ] diff --git a/package.json b/package.json index 752fdafc..c15875c6 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "0.2.0", "description": "CodeXen App Builder", "scripts": { - "install": "gulp build", - "start": "http-server build", - "test": "echo \"Error: no test specified\" && exit 1" + "start": "npm run serve | npm run dev", + "serve": "./node_modules/.bin/http-server ./browser -p 8080", + "dev": "webpack-dev-server --progress --colors --port 8090" }, "repository": { "type": "git", @@ -30,48 +30,26 @@ }, "homepage": "https://github.com/Rokt33r/codexen-app#readme", "dependencies": { + "@rokt33r/ace-builds": "^1.1.9", + "del": "^1.2.0", "dotenv": "^1.1.0", - "robotjs": "^0.1.2", - "node-notifier": "^4.2.1" + "marked": "^0.3.3", + "moment": "^2.10.3", + "node-jsx": "^0.13.3", + "node-notifier": "^4.2.1", + "react": "^0.13.3", + "react-router": "^0.13.3", + "react-tooltip": "^0.3.3" }, "devDependencies": { - "@rokt33r/ace-builds": "^1.1.9", - "@rokt33r/angular-ui-ace": "^0.2.3", - "angular": "^1.3.15", - "angular-bootstrap": "^0.12.0", - "angular-hotkeys": "^1.4.5", - "angular-md5": "^0.1.7", - "angular-sanitize": "^1.3.15", - "angular-ui-router": "^0.2.15", - "bootstrap-styl": "^4.0.4", - "del": "^1.2.0", - "font-awesome": "^4.3.0", - "globby": "^2.0.0", - "gulp": "^3.8.11", - "gulp-angular-templatecache": "^1.6.0", - "gulp-autoprefixer": "^2.3.0", - "gulp-cached": "^1.1.0", - "gulp-changed": "^1.2.1", - "gulp-concat": "^2.5.2", - "gulp-inject": "^1.3.1", - "gulp-livereload": "^3.8.0", - "gulp-minify-css": "^1.1.1", - "gulp-minify-html": "^1.0.3", - "gulp-ng-annotate": "^0.5.3", - "gulp-notify": "^2.2.0", - "gulp-plumber": "^1.0.1", - "gulp-remember": "^0.3.0", - "gulp-rename": "^1.2.2", - "gulp-rev": "^4.0.0", - "gulp-stylus": "^2.0.3", - "gulp-template": "^3.0.0", - "gulp-uglify": "^1.2.0", - "marked": "^0.3.3", - "merge-stream": "^0.1.7", - "moment": "^2.10.3", - "run-sequence": "^1.1.0", - "satellizer": "^0.10.1", - "streamqueue": "^1.1.0", - "ui-select": "^0.11.2" + "css-loader": "^0.15.1", + "http-server": "^0.8.0", + "jsx-loader": "^0.13.2", + "nib": "^1.1.0", + "node-libs-browser": "^0.5.2", + "style-loader": "^0.12.3", + "stylus-loader": "^1.2.1", + "webpack": "^1.10.0", + "webpack-dev-server": "^1.10.1" } } diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..5185ad65 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,33 @@ +module.exports = { + entry: { + main: './browser/main/index.jsx' + }, + output: { + filename: '[name].js', //this is the default name, so you can skip it + publicPath: 'http://localhost:8090/assets' + }, + devtool: "#inline-source-map", // Sourcemap + module: { + loaders: [ + { + //tell webpack to use jsx-loader for all *.jsx files + test: /\.jsx$/, + loader: 'jsx-loader?insertPragma=React.DOM&harmony' + }, + { + test: /\.styl$/, + loader: 'style-loader!css-loader!stylus-loader' + } + ] + }, + externals: { + //don't bundle the 'react' npm package with our bundle.js + //but get it from a global 'React' variable + 'react': 'React', + 'react/addons': 'React', + 'react-router': 'ReactRouter' + }, + resolve: { + extensions: ['', '.js', '.jsx'] + } +} From c74de88ca337a20565af1cd837a0ba3cfaae036f Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Tue, 7 Jul 2015 03:55:52 +0900 Subject: [PATCH 02/79] embed ace --- .gitmodules | 3 ++ browser/ace | 1 + browser/main/Components/CodeViewer.jsx | 34 ++++++++++++++++++ browser/main/Containers/SnippetContainer.jsx | 14 ++++++-- browser/main/Services/Snippet.js | 2 +- browser/main/index.html | 2 ++ .../main/containers/SnippetContainer.styl | 11 +++++- browser/styles/shared/btn.styl | 7 ++-- npm-debug.log | 36 ------------------- package.json | 2 -- webpack.config.js | 7 +++- 11 files changed, 71 insertions(+), 48 deletions(-) create mode 100644 .gitmodules create mode 160000 browser/ace create mode 100644 browser/main/Components/CodeViewer.jsx delete mode 100644 npm-debug.log diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..548af57f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "browser/ace"] + path = browser/ace + url = https://github.com/ajaxorg/ace-builds.git diff --git a/browser/ace b/browser/ace new file mode 160000 index 00000000..9d128398 --- /dev/null +++ b/browser/ace @@ -0,0 +1 @@ +Subproject commit 9d12839819e8a8b90f4a0aba382cac9a273b5983 diff --git a/browser/main/Components/CodeViewer.jsx b/browser/main/Components/CodeViewer.jsx new file mode 100644 index 00000000..159a0835 --- /dev/null +++ b/browser/main/Components/CodeViewer.jsx @@ -0,0 +1,34 @@ +var React = require('react/addons') + +var ace = require('ace') +var CodeViewer = React.createClass({ + propTypes: { + code: React.PropTypes.string, + mode: React.PropTypes.string + }, + componentDidMount: function () { + var el = React.findDOMNode(this.refs.target) + var editor = ace.edit(el) + editor.setValue(this.props.code) + editor.$blockScrolling = Infinity + editor.renderer.setShowGutter(false) + editor.setReadOnly(true) + + var session = editor.getSession() + session.setMode('ace/mode/' + this.props.mode) + session.setUseSoftTabs(true) + + this.setState({editor: editor}) + }, + componentDidUpdate: function () { + this.state.editor.setValue(this.props.code) + this.state.editor.getSession().setMode('ace/mode/' + this.props.mode) + }, + render: function () { + return ( +
    + ) + } +}) + +module.exports = CodeViewer diff --git a/browser/main/Containers/SnippetContainer.jsx b/browser/main/Containers/SnippetContainer.jsx index 57356a93..14bc2e40 100644 --- a/browser/main/Containers/SnippetContainer.jsx +++ b/browser/main/Containers/SnippetContainer.jsx @@ -1,5 +1,6 @@ var React = require('react/addons') var Snippet = require('../Services/Snippet') +var CodeViewer = require('../Components/CodeViewer') var SnippetList = React.createClass({ propTypes: { @@ -8,7 +9,6 @@ var SnippetList = React.createClass({ }, itemClickHandlerFactory: function (snippet) { return function () { - console.log(this.props.selectSnippet) this.props.selectSnippet(snippet) }.bind(this) }, @@ -55,13 +55,21 @@ var SnippetViewer = React.createClass({ }) content = (
    -
    {snippet.callSign} {snippet.updatedAt}
    +
    + {snippet.callSign} {snippet.updatedAt} + + + + +
    {snippet.description}
    {tags}
    -
    {snippet.content}
    +
    + +
    ) diff --git a/browser/main/Services/Snippet.js b/browser/main/Services/Snippet.js index 716ddb3e..a919549e 100644 --- a/browser/main/Services/Snippet.js +++ b/browser/main/Services/Snippet.js @@ -18,7 +18,7 @@ var snippets = { callSign: 'log', description: 'javascript log', content: 'console.log(\'yolo\')', - mode: 'js', + mode: 'javascript', createdAt: '2015-06-26T15:10:59.000Z', updatedAt: '2015-06-26T15:10:59.000Z', UserId: 1, diff --git a/browser/main/index.html b/browser/main/index.html index 6ee43383..5c9a5486 100644 --- a/browser/main/index.html +++ b/browser/main/index.html @@ -4,8 +4,10 @@ CodeXen + + diff --git a/browser/styles/main/containers/SnippetContainer.styl b/browser/styles/main/containers/SnippetContainer.styl index 607a6173..5ba5594d 100644 --- a/browser/styles/main/containers/SnippetContainer.styl +++ b/browser/styles/main/containers/SnippetContainer.styl @@ -43,11 +43,20 @@ box-sizing border-box small font-size 0.5em + .control-group + float right + button + margin 0 2px .viewer-body - absolute bottom left right + absolute bottom right + left 1px top 44px .viewer-detail border-bottom solid 1px borderColor padding 10px .description margin-bottom 15px + .content + padding 5px 0 + .ace_editor + height 500px diff --git a/browser/styles/shared/btn.styl b/browser/styles/shared/btn.styl index 90ba009b..a3708f0e 100644 --- a/browser/styles/shared/btn.styl +++ b/browser/styles/shared/btn.styl @@ -36,9 +36,8 @@ background-color brandColor .btn-default - border-color invBorderColor + border-color lightButtonColor background-color transparent - color invBorderColor + color lightButtonColor &:hover, &.hover, &:active, &.active - color white - background-color invBorderColor + background-color lighten(lightButtonColor, 75%) diff --git a/npm-debug.log b/npm-debug.log deleted file mode 100644 index 5704df8c..00000000 --- a/npm-debug.log +++ /dev/null @@ -1,36 +0,0 @@ -0 info it worked if it ends with ok -1 verbose cli [ 'node', '/usr/local/bin/npm', 'start' ] -2 info using npm@2.11.2 -3 info using node@v0.12.4 -4 verbose node symlink /usr/local/bin/node -5 verbose run-script [ 'prestart', 'start', 'poststart' ] -6 info prestart codexen-app-builder@0.2.0 -7 info start codexen-app-builder@0.2.0 -8 verbose unsafe-perm in lifecycle true -9 info codexen-app-builder@0.2.0 Failed to exec start script -10 verbose stack Error: codexen-app-builder@0.2.0 start: `npm run serve | npm run dev` -10 verbose stack Exit status 1 -10 verbose stack at EventEmitter. (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:213:16) -10 verbose stack at EventEmitter.emit (events.js:110:17) -10 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14) -10 verbose stack at ChildProcess.emit (events.js:110:17) -10 verbose stack at maybeClose (child_process.js:1015:16) -10 verbose stack at Process.ChildProcess._handle.onexit (child_process.js:1087:5) -11 verbose pkgid codexen-app-builder@0.2.0 -12 verbose cwd /Users/dickchoi/codexen/codexen-app -13 error Darwin 14.3.0 -14 error argv "node" "/usr/local/bin/npm" "start" -15 error node v0.12.4 -16 error npm v2.11.2 -17 error code ELIFECYCLE -18 error codexen-app-builder@0.2.0 start: `npm run serve | npm run dev` -18 error Exit status 1 -19 error Failed at the codexen-app-builder@0.2.0 start script 'npm run serve | npm run dev'. -19 error This is most likely a problem with the codexen-app-builder package, -19 error not with npm itself. -19 error Tell the author that this fails on your system: -19 error npm run serve | npm run dev -19 error You can get their info via: -19 error npm owner ls codexen-app-builder -19 error There is likely additional logging output above. -20 verbose exit [ 1, true ] diff --git a/package.json b/package.json index c15875c6..f8ef70ba 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,6 @@ }, "homepage": "https://github.com/Rokt33r/codexen-app#readme", "dependencies": { - "@rokt33r/ace-builds": "^1.1.9", - "del": "^1.2.0", "dotenv": "^1.1.0", "marked": "^0.3.3", "moment": "^2.10.3", diff --git a/webpack.config.js b/webpack.config.js index 5185ad65..ae96df3e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -17,6 +17,10 @@ module.exports = { { test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' + }, + { + test: /\.css$/, + loader: 'style-loader!css-loader' } ] }, @@ -25,7 +29,8 @@ module.exports = { //but get it from a global 'React' variable 'react': 'React', 'react/addons': 'React', - 'react-router': 'ReactRouter' + 'react-router': 'ReactRouter', + 'ace': 'ace' }, resolve: { extensions: ['', '.js', '.jsx'] From 9e1dcf8b6453d5acfc4a62af3c80e220bf87a287 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Tue, 7 Jul 2015 15:08:57 +0900 Subject: [PATCH 03/79] add highlighting for an active item in the snippet list --- browser/main/Containers/SnippetContainer.jsx | 5 +++-- browser/styles/main/components/SideNavigator.styl | 2 +- browser/styles/main/containers/SnippetContainer.styl | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/browser/main/Containers/SnippetContainer.jsx b/browser/main/Containers/SnippetContainer.jsx index 14bc2e40..6f80548a 100644 --- a/browser/main/Containers/SnippetContainer.jsx +++ b/browser/main/Containers/SnippetContainer.jsx @@ -5,7 +5,8 @@ var CodeViewer = require('../Components/CodeViewer') var SnippetList = React.createClass({ propTypes: { snippets: React.PropTypes.array, - selectSnippet: React.PropTypes.func + selectSnippet: React.PropTypes.func, + currentSnippet: React.PropTypes.object }, itemClickHandlerFactory: function (snippet) { return function () { @@ -20,7 +21,7 @@ var SnippetList = React.createClass({ ) }) return ( -
  • +
  • {snippet.callSign}
    {snippet.description}
    {snippet.updatedAt}
    diff --git a/browser/styles/main/components/SideNavigator.styl b/browser/styles/main/components/SideNavigator.styl index c06e6383..6d4c4a4a 100644 --- a/browser/styles/main/components/SideNavigator.styl +++ b/browser/styles/main/components/SideNavigator.styl @@ -1,7 +1,7 @@ .SideNavigator absolute top bottom left width 200px - border-right solid 2px brandColor + border-right solid 1px highlightenBorderColor padding 10px box-sizing border-box .nav-header diff --git a/browser/styles/main/containers/SnippetContainer.styl b/browser/styles/main/containers/SnippetContainer.styl index 5ba5594d..d8f15b43 100644 --- a/browser/styles/main/containers/SnippetContainer.styl +++ b/browser/styles/main/containers/SnippetContainer.styl @@ -31,6 +31,9 @@ font-size 0.8em &:hover, &.hover background-color hoverBackgroundColor + &:active, &.active + border solid 2px brandBorderColor + padding 9px 9px 8px .SnippetViewer absolute top bottom right From 27701bbe1b7742556f3cea575f51429329d0d9bd Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Wed, 8 Jul 2015 02:22:32 +0900 Subject: [PATCH 04/79] add update log --- update-log.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 update-log.md diff --git a/update-log.md b/update-log.md new file mode 100644 index 00000000..a4d1880e --- /dev/null +++ b/update-log.md @@ -0,0 +1,16 @@ +※ 最近の方が上に来るように書きためていく + +# Update Log + +## v0.1.2 (2015/7/3) + +- 利用規約・プライベートポリシーの追加 + +## v0.1.1 (2015/6/25) + +- バーグ改善 +- Recipe機能追加 + +## v0.1.0 (2015/6/17) + +- Web/OS X app release From 472d79cbf27dfbe130d1ce3a1216a31e8b41c141 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Thu, 9 Jul 2015 01:48:49 +0900 Subject: [PATCH 05/79] add ModalBase, LaunchModal & install Reflux --- bower.json | 3 +- browser/main/Components/CodeEditor.jsx | 48 ++++++ browser/main/Components/CodeViewer.jsx | 14 +- browser/main/Components/LaunchModal.jsx | 148 ++++++++++++++++++ browser/main/Components/ModalBase.jsx | 23 +++ browser/main/Components/ModeSelect.jsx | 7 + browser/main/Containers/LoginContainer.jsx | 4 +- browser/main/Containers/PlanetContainer.jsx | 23 ++- browser/main/Containers/RegisterContainer.jsx | 8 +- browser/main/Containers/SnippetContainer.jsx | 52 +++++- browser/main/Mixins/Catalyst.js | 38 +++++ browser/main/index.html | 1 + browser/main/index.jsx | 1 + browser/styles/main/index.styl | 31 ++-- browser/styles/shared/btn.styl | 1 + browser/styles/shared/modal.styl | 30 ++++ package.json | 4 +- webpack.config.js | 3 +- 18 files changed, 415 insertions(+), 24 deletions(-) create mode 100644 browser/main/Components/CodeEditor.jsx create mode 100644 browser/main/Components/LaunchModal.jsx create mode 100644 browser/main/Components/ModalBase.jsx create mode 100644 browser/main/Components/ModeSelect.jsx create mode 100644 browser/main/Mixins/Catalyst.js create mode 100644 browser/styles/shared/modal.styl diff --git a/bower.json b/bower.json index d3bad4c6..547988d2 100644 --- a/bower.json +++ b/bower.json @@ -3,6 +3,7 @@ "dependencies": { "react": "~0.13.3", "fontawesome": "~4.3.0", - "react-router": "~0.13.3" + "react-router": "~0.13.3", + "reflux": "~0.2.8" } } diff --git a/browser/main/Components/CodeEditor.jsx b/browser/main/Components/CodeEditor.jsx new file mode 100644 index 00000000..089c652f --- /dev/null +++ b/browser/main/Components/CodeEditor.jsx @@ -0,0 +1,48 @@ +var React = require('react/addons') + +var ace = require('ace') +var CodeEditor = React.createClass({ + propTypes: { + code: React.PropTypes.string, + mode: React.PropTypes.string, + onChange: React.PropTypes.func + }, + componentDidMount: function () { + var el = React.findDOMNode(this.refs.target) + var editor = ace.edit(el) + editor.setValue(this.props.code) + editor.$blockScrolling = Infinity + editor.renderer.setShowGutter(true) + editor.setTheme('ace/theme/xcode') + + var session = editor.getSession() + session.setMode('ace/mode/' + this.props.mode) + session.setUseSoftTabs(true) + session.setOption('useWorker', false) + + session.on('change', function (e) { + if (this.props.onChange != null) { + var value = editor.getValue() + this.props.onChange(e, value) + } + }.bind(this)) + + this.setState({editor: editor}) + }, + componentDidUpdate: function (prevProps) { + if (this.state.editor.getValue() !== this.props.code) { + this.state.editor.setValue(this.props.code) + this.state.editor.clearSelection() + } + if (prevProps.mode !== this.props.mode) { + this.state.editor.getSession().setMode('ace/mode/' + this.props.mode) + } + }, + render: function () { + return ( +
    + ) + } +}) + +module.exports = CodeEditor diff --git a/browser/main/Components/CodeViewer.jsx b/browser/main/Components/CodeViewer.jsx index 159a0835..bb04eef5 100644 --- a/browser/main/Components/CodeViewer.jsx +++ b/browser/main/Components/CodeViewer.jsx @@ -13,16 +13,24 @@ var CodeViewer = React.createClass({ editor.$blockScrolling = Infinity editor.renderer.setShowGutter(false) editor.setReadOnly(true) + editor.setTheme('ace/theme/xcode') + editor.setHighlightActiveLine(false) var session = editor.getSession() session.setMode('ace/mode/' + this.props.mode) session.setUseSoftTabs(true) + session.setOption('useWorker', false) this.setState({editor: editor}) }, - componentDidUpdate: function () { - this.state.editor.setValue(this.props.code) - this.state.editor.getSession().setMode('ace/mode/' + this.props.mode) + componentDidUpdate: function (prevProps) { + if (this.state.editor.getValue() !== this.props.code) { + this.state.editor.setValue(this.props.code) + this.state.editor.clearSelection() + } + if (prevProps.mode !== this.props.mode) { + this.state.editor.getSession().setMode('ace/mode/' + this.props.mode) + } }, render: function () { return ( diff --git a/browser/main/Components/LaunchModal.jsx b/browser/main/Components/LaunchModal.jsx new file mode 100644 index 00000000..ea3f72f5 --- /dev/null +++ b/browser/main/Components/LaunchModal.jsx @@ -0,0 +1,148 @@ +var React = require('react/addons') +var CodeEditor = require('./CodeEditor') +var Catalyst = require('../Mixins/Catalyst') + +var Select = require('react-select') + +// TODO: remove +var options = [ + { value: 'one', label: 'One' }, + { value: 'two', label: 'Two' } +] + +var LaunchModal = React.createClass({ + mixins: [Catalyst.LinkedStateMixin], + propTypes: { + submit: React.PropTypes.func, + close: React.PropTypes.func + }, + getInitialState: function () { + return { + snippet: { + description: '', + mode: 'javascript', + content: '', + callSign: '', + tags: [] + }, + blueprint: { + title: '', + content: '', + tags: [] + }, + currentTab: 'snippet' + } + }, + handleClick: function (e) { + e.stopPropagation() + }, + selectSnippetTab: function () { + this.setState({currentTab: 'snippet'}) + }, + selectBlueprintTab: function () { + this.setState({currentTab: 'blueprint'}) + }, + handleSnippetTagsChange: function (selected, all) { + var snippet = this.state.snippet + snippet.tags = all + this.setState({snippet: snippet}) + }, + handleSnippetContentChange: function (e, value) { + var snippet = this.state.snippet + snippet.content = value + this.setState({snippet: snippet}) + }, + handleBlueprintTagsChange: function (selected, all) { + var blueprint = this.state.blueprint + blueprint.tags = all + this.setState({blueprint: blueprint}) + }, + handleBlueprintContentChange: function (e, value) { + var blueprint = this.state.blueprint + blueprint.content = value + this.setState({blueprint: blueprint}) + }, + submit: function () { + // this.props.submit('yolo') + if (this.state.currentTab === 'snippet') { + console.log(this.state.snippet) + } else { + console.log(this.state.blueprint) + } + }, + render: function () { + var form + if (this.state.currentTab === 'snippet') { + form = ( +
    +
    + -
    -
    - - - - {{$select.selected}} - -
    -
    -
    -
    - -
    -
    -
    - -
    - - {{$item.name}} - -
    (new)
    -
    -
    -
    - -
    - - - diff --git a/src/browser/main/tpls/modals/expand-recipe-modal.html b/src/browser/main/tpls/modals/expand-recipe-modal.html deleted file mode 100644 index e2d64a31..00000000 --- a/src/browser/main/tpls/modals/expand-recipe-modal.html +++ /dev/null @@ -1,37 +0,0 @@ -
    - - - -
    diff --git a/src/browser/main/tpls/modals/new-recipe-modal.html b/src/browser/main/tpls/modals/new-recipe-modal.html deleted file mode 100644 index c7fc3211..00000000 --- a/src/browser/main/tpls/modals/new-recipe-modal.html +++ /dev/null @@ -1,60 +0,0 @@ -
    - - - - - -
    diff --git a/src/browser/main/tpls/modals/new-snippet-modal.tpl.html b/src/browser/main/tpls/modals/new-snippet-modal.tpl.html deleted file mode 100644 index 367c2b1f..00000000 --- a/src/browser/main/tpls/modals/new-snippet-modal.tpl.html +++ /dev/null @@ -1,49 +0,0 @@ -
    - - - - - -
    diff --git a/src/browser/main/tpls/modals/select-snippet-modal.html b/src/browser/main/tpls/modals/select-snippet-modal.html deleted file mode 100644 index 2fa0c419..00000000 --- a/src/browser/main/tpls/modals/select-snippet-modal.html +++ /dev/null @@ -1,25 +0,0 @@ -
    - - - -
    diff --git a/src/browser/main/tpls/modals/sign-out-modal.html b/src/browser/main/tpls/modals/sign-out-modal.html deleted file mode 100644 index db967182..00000000 --- a/src/browser/main/tpls/modals/sign-out-modal.html +++ /dev/null @@ -1,16 +0,0 @@ -
    - - - - - -
    diff --git a/src/browser/main/tpls/states/auth.register.tpl.html b/src/browser/main/tpls/states/auth.register.tpl.html deleted file mode 100644 index f34b2f37..00000000 --- a/src/browser/main/tpls/states/auth.register.tpl.html +++ /dev/null @@ -1,54 +0,0 @@ - -
    - - -
    - - - -
    -
    No E-mail given.
    -
    Invalid Address.
    -
    - -
    - - -
    - - - -
    -
    No password given.
    -
    - -
    - -
    - - -
    - - -
    -
    No Username given.
    -
    Username should be ^[A-Za-z0-9\-\_]+$ (only alphanumeric, hyphen, underscore characters)
    -
    -
    - - - -
    - - - -
    -
    No Profile name given.
    -
    -
    - - -
    - -
    -
    diff --git a/src/browser/main/tpls/states/auth.signin.tpl.html b/src/browser/main/tpls/states/auth.signin.tpl.html deleted file mode 100644 index 3cd9ada6..00000000 --- a/src/browser/main/tpls/states/auth.signin.tpl.html +++ /dev/null @@ -1,18 +0,0 @@ -
    -

    - Incorrect email or password entered. Please try again. -

    -
    - - -
    - -
    - - -
    - -
    - -
    -
    diff --git a/src/browser/main/tpls/states/auth.tpl.html b/src/browser/main/tpls/states/auth.tpl.html deleted file mode 100644 index 439fd2e4..00000000 --- a/src/browser/main/tpls/states/auth.tpl.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -
    -
    - -
    - -

    Authentication

    - - - -
    - - - -
    -
    -
    diff --git a/src/browser/main/tpls/states/home.tpl.html b/src/browser/main/tpls/states/home.tpl.html deleted file mode 100644 index 343dacf2..00000000 --- a/src/browser/main/tpls/states/home.tpl.html +++ /dev/null @@ -1,48 +0,0 @@ -
    -

    Codexen App v0.1.1

    - -

    About CodeXen

    - -

    - CodeXen is short code storage tool make coding more stressless. If you use CodeXen, then you will be disentangled from troublesome organizing a large number of snippets and googling same code many times. -

    - -
      -
    1. -

      - Post your code -

      -

      - Post your commonly used code with description,category,and tags. -

      -
    2. -
    3. -

      - Save on cloud -

      -

      - From short snippet to long complex code,CodeXen saves any code simply. -

      -
    4. -
    5. -

      - Use code like a magic -

      -

      - CodeXen call code you posted whereever you are.Type [shift+control+tab] simultaneously. -

      -
    6. -
    7. -

      - Code Elegantly -

      -

      - That's all! - You must be loved with CodeXen. Enjoy coding;) -

      -
    8. -
    -

    - © 2015 MAISIN&CO.,Inc. -

    -
    diff --git a/src/browser/main/tpls/states/recipes.detail.html b/src/browser/main/tpls/states/recipes.detail.html deleted file mode 100644 index cafc6c44..00000000 --- a/src/browser/main/tpls/states/recipes.detail.html +++ /dev/null @@ -1,33 +0,0 @@ -
    - -
    - - callsign - - - - - - - - -
    - -
    - -
    - Loadding -
    - -
    - -
    - -
    -
    -
    -
    -
    -
    -
    -
    diff --git a/src/browser/main/tpls/states/recipes.list.tpl.html b/src/browser/main/tpls/states/recipes.list.tpl.html deleted file mode 100644 index a799929b..00000000 --- a/src/browser/main/tpls/states/recipes.list.tpl.html +++ /dev/null @@ -1,62 +0,0 @@ -
    - -
    - -
      - -
    • -

      - Loading -

      -
    • - -
    • -

      - Empty List -

      - -
    • - -
    • -

      - Sign In to access -

      - Sign In -
    • - -
    • -
      -
      - -
      -
      -

      -

      - -

      -
      -
      -
      -
    • -
    -
    - -
    -
    - No snippet selected. -
    -
    -
    - - -
    diff --git a/src/browser/main/tpls/states/settings.tpl.html b/src/browser/main/tpls/states/settings.tpl.html deleted file mode 100644 index febf471d..00000000 --- a/src/browser/main/tpls/states/settings.tpl.html +++ /dev/null @@ -1,33 +0,0 @@ -
    -
    -
    -

    Settings

    -

    - Some settings... -

    -
    -
    -

    Change Password

    -
    - - Successfully changed!! - - - Request failed!! - -
    - - -
    -
    - - -
    -
    - -
    -
    -
    -
    -
    -
    diff --git a/src/browser/main/tpls/states/snippets.detail.tpl.html b/src/browser/main/tpls/states/snippets.detail.tpl.html deleted file mode 100644 index d696031d..00000000 --- a/src/browser/main/tpls/states/snippets.detail.tpl.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - -
    - - callsign - - - - - - - - -
    - -
    - -
    - Loadding -
    - -
    -

    - -
    - -
    -
    -
    -
    diff --git a/src/browser/main/tpls/states/snippets.list.tpl.html b/src/browser/main/tpls/states/snippets.list.tpl.html deleted file mode 100644 index eed329bc..00000000 --- a/src/browser/main/tpls/states/snippets.list.tpl.html +++ /dev/null @@ -1,64 +0,0 @@ -
    - -
    - -
      - -
    • -

      - Loading -

      -
    • - -
    • -

      - Empty List -

      - -
    • - -
    • -

      - Sign In to access -

      - Sign In -
    • - -
    • -
      -
      - -
      -
      -

      -

      -

      -

      -

      - -

      -
      -
      -
      -
    • -
    -
    - -
    -
    - No snippet selected. -
    -
    -
    - - -
    diff --git a/src/browser/popup/index.html b/src/browser/popup/index.html deleted file mode 100644 index ed7f3c2c..00000000 --- a/src/browser/popup/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - CodeXen App - - - - - - - - - - - - - - - - - -
    - -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - diff --git a/src/browser/popup/index.inject.html b/src/browser/popup/index.inject.html deleted file mode 100644 index 89a28e8b..00000000 --- a/src/browser/popup/index.inject.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - CodeXen App - - - - - - - - - - - - - - - -
    - -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - - - - - - diff --git a/src/browser/popup/popup.js b/src/browser/popup/popup.js deleted file mode 100644 index 76a52fd5..00000000 --- a/src/browser/popup/popup.js +++ /dev/null @@ -1,192 +0,0 @@ -/* global angular */ - -var remote = require('remote') -var ipc = require('ipc') - -var resultList = document.getElementById('result-list') - -angular.module('codexen.popup', [ - 'codexen.shared', - 'ui.ace', - 'satellizer', - 'cfp.hotkeys' -]) -.constant('appName', 'popup') -.controller('PopUpController', function ($scope, Snippet, $auth, $window, hotkeys, $document, $filter) { - // Setup Events - remote.getCurrentWindow().on('focus', function () { - if (!$auth.isAuthenticated()) return hidePopUp() - $scope.$apply(focusSearchInput) - loadSnippets() - }) - - hotkeys.bindTo($scope) - .add('down', function (e) { - nextSnippet() - e.preventDefault() - }) - .add('up', function (e) { - priorSnippet() - e.preventDefault() - }) - .add('right', function (e) { - e.preventDefault() - }) - .add('left', function (e) { - e.preventDefault() - }) - .add('esc', function (e) { - hidePopUp() - }) - .add('shift+tab', function (e) { - e.preventDefault() - }) - .add('tab', function (e) { - e.preventDefault() - }) - .add('enter', function (e) { - writeCode($scope.selectedItem.content) - e.preventDefault() - }) - - $scope.aceLoaded = function (editor) { - editor.commands.addCommand({ - name: 'escape', - bindKey: {win: 'esc', mac: 'esc'}, - exec: function (editor) { - editor.blur() - $scope.$apply() - }, - readOnly: true - }) - } - - $scope.$on('nextSnippetRequested', function (e) { - e.stopPropagation() - nextSnippet() - }) - - $scope.$on('priorSnippetRequested', function (e) { - e.stopPropagation() - priorSnippet() - }) - - $scope.$on('snippetSubmitted', function (e) { - if ($scope.filteredSnippets.length > 0) ipc.send('writeCode', $scope.selectedItem.content) - else console.log('\x07') - e.stopPropagation() - }) - - // Init Data - $scope.snippets = [] - - Snippet.findMine() - .success(function (data) { - $scope.snippets = data - filterList() - }) - - // Result Item control - $scope.selectIndex = 0 - - $scope.selectSnippet = selectSnippet - $scope.filterList = filterList - $scope.writeCode = writeCode - $scope.focusSearchInput = focusSearchInput - - // Search Filter - function loadSnippets () { - Snippet.findMine() - .success(function (data) { - $scope.snippets = data - filterList() - }) - } - - function filterList (needle) { - $scope.filteredSnippets = $filter('filter')($scope.snippets, needle) - firstSnippet() - } - - function selectSnippet (index) { - if (index !== undefined) $scope.selectIndex = index - $scope.selectedItem = $scope.filteredSnippets[$scope.selectIndex] - } - - function firstSnippet () { - $scope.selectIndex = 0 - selectSnippet($scope.selectIndex) - } - - function priorSnippet () { - if ($scope.selectIndex > 0) $scope.selectIndex -= 1 - - if (resultList.children[$scope.selectIndex].offsetTop < resultList.scrollTop) { - resultList.scrollTop -= 33 - } - - selectSnippet() - } - - function nextSnippet () { - if ($scope.selectIndex < $scope.filteredSnippets.length - 1) { - $scope.selectIndex += 1 - } - - if (resultList.clientHeight - 33 < resultList.children[$scope.selectIndex].offsetTop - resultList.scrollTop) { - resultList.scrollTop += 33 - } - - selectSnippet() - } - - function writeCode (code) { - ipc.send('writeCode', code) - } - - // Focusing Search Input - function focusSearchInput () { - document.getElementById('search-input').focus() - } - - function hidePopUp () { - ipc.send('hidePopUp') - } - -}) -.directive('searchInput', function () { - return { - restrict: 'A', - link: function (scope, el, attr) { - el.on('keydown', function (e) { - // Down key => Focus on Result list - if (e.keyCode === 40) { - scope.$emit('nextSnippetRequested') - // e.preventDefault() - } - - // Up key => Focus on Result list - if (e.keyCode === 38) { - scope.$emit('priorSnippetRequested') - // e.preventDefault() - } - - // Up key => Focus on Result list - if (e.keyCode === 13) { - scope.$emit('snippetSubmitted') - } - - // Esc key => Dismiss popup - if (e.keyCode === 27) { - ipc.send('hidePopUp') - e.preventDefault() - } - - // TODO: Tab key => Auto complete - if (e.keyCode === 9) { - e.preventDefault() - } - }) - } - } -}) diff --git a/src/browser/popup/services/snippet.js b/src/browser/popup/services/snippet.js deleted file mode 100644 index d28dfed6..00000000 --- a/src/browser/popup/services/snippet.js +++ /dev/null @@ -1,62 +0,0 @@ -/* global angular */ -angular.module('codexen.popup') - .constant('apiUrl', 'http://codexen-server-dev.elasticbeanstalk.com/') - .config(function ($authProvider, $httpProvider, apiUrl) { - $authProvider.baseUrl = apiUrl - - $httpProvider.defaults.useXDomain = true - delete $httpProvider.defaults.headers.common['X-Requested-With'] - }) - - -angular.module('codexen.popup') - .factory('Snippet', function ($http, $auth, apiUrl) { - var findByUser = function (user) { - var url = apiUrl + 'snippets/search' - - return $http.get(url, { - params: { - user: user - } - }) - } - - var findMine = function (params) { - var url = apiUrl + 'snippets/my' - - return $http.get(url, {params: params}) - } - - var create = function (params) { - var url = apiUrl + 'snippets/create' - - return $http.post(url, params) - } - - var show = function (id, params) { - var url = apiUrl + 'snippets/id/' + id - - return $http.get(url, {params: params}) - } - - var update = function (id, params) { - var url = apiUrl + 'snippets/id/' + id - - return $http.put(url, params) - } - - var destroy = function (id) { - var url = apiUrl + 'snippets/id/' + id - - return $http.delete(url) - } - - return { - findByUser: findByUser, - findMine: findMine, - create: create, - show: show, - delete: destroy, - update: update - } - }) diff --git a/src/browser/popup/styles/_popup.styl b/src/browser/popup/styles/_popup.styl deleted file mode 100644 index 87f2338b..00000000 --- a/src/browser/popup/styles/_popup.styl +++ /dev/null @@ -1,60 +0,0 @@ -.popup-body - .search-block - padding: 5px - height:44px - position:absolute - top: 0 - width: 100% - - .result-block - position:absolute - top: 44px - bottom: 0 - width: 100% - overflow: hidden - .left-pane - margin: 0 - position: absolute - left: 0 - top: 0 - bottom: 0 - width: 40% - overflow-y: auto - overflow-x: hidden - .result-list - list-style:none - padding: 0 - border-right: 1px solid $baseBorderColor - li - white-space nowrap - &:nth-child(even) - background-color $baseBackgroundColor - &:nth-child(odd) - background-color lighten($baseBackgroundColor, 2%) - &.active - color: $textColorSelected - background-color: $btnPrimary - a - display:block - padding: 5px 10px - border-bottom 1px solid $baseBorderColor - - .right-pane - position: absolute - left: 40% - top: 0 - bottom: 0 - width: 60% - overflow-y: auto - overflow-x: hidden - .result-detail-control - position: absolute - top: 0 - width: 100% - height: 34px - - .result-detail-content - position: absolute - top: 34px - bottom: 0 - width: 100% diff --git a/src/browser/popup/styles/app.css b/src/browser/popup/styles/app.css deleted file mode 100644 index 7721a28d..00000000 --- a/src/browser/popup/styles/app.css +++ /dev/null @@ -1,68 +0,0 @@ -.popup-body .search-block { - padding: 5px; - height: 44px; - position: absolute; - top: 0; - width: 100%; -} -.popup-body .result-block { - position: absolute; - top: 44px; - bottom: 0; - width: 100%; - overflow: hidden; -} -.popup-body .result-block .left-pane { - margin: 0; - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 40%; - overflow-y: auto; - overflow-x: hidden; -} -.popup-body .result-block .result-list { - list-style: none; - padding: 0; - border-right: 1px solid #001a20; -} -.popup-body .result-block .result-list li { - white-space: nowrap; -} -.popup-body .result-block .result-list li:nth-child(even) { - background-color: #002b36; -} -.popup-body .result-block .result-list li:nth-child(odd) { - background-color: #00323f; -} -.popup-body .result-block .result-list li.active { - color: #fff; - background-color: #088cff; -} -.popup-body .result-block .result-list li a { - display: block; - padding: 5px 10px; - border-bottom: 1px solid #001a20; -} -.popup-body .result-block .right-pane { - position: absolute; - left: 40%; - top: 0; - bottom: 0; - width: 60%; - overflow-y: auto; - overflow-x: hidden; -} -.popup-body .result-block .result-detail-control { - position: absolute; - top: 0; - width: 100%; - height: 34px; -} -.popup-body .result-block .result-detail-content { - position: absolute; - top: 34px; - bottom: 0; - width: 100%; -} diff --git a/src/browser/popup/styles/app.styl b/src/browser/popup/styles/app.styl deleted file mode 100644 index 090d691f..00000000 --- a/src/browser/popup/styles/app.styl +++ /dev/null @@ -1,4 +0,0 @@ -@import '../../shared/styles/_vars' -@import '../../shared/styles/mixins/*' - -@import '_popup' diff --git a/src/browser/shared/config/ace.js b/src/browser/shared/config/ace.js deleted file mode 100644 index fff0e713..00000000 --- a/src/browser/shared/config/ace.js +++ /dev/null @@ -1,3 +0,0 @@ -/* global angular */ -angular.module('codexen.shared') - .constant('aceModes', ['ABAP', 'ABC', 'ActionScript', 'ADA', 'Apache_Conf', 'AsciiDoc', 'Assembly_x86', 'AutoHotKey', 'BatchFile', 'C9Search', 'C_Cpp', 'Cirru', 'Clojure', 'Cobol', 'coffee', 'ColdFusion', 'CSharp', 'CSS', 'Curly', 'D', 'Dart', 'Diff', 'Dockerfile', 'Dot', 'Dummy', 'DummySyntax', 'Eiffel', 'EJS', 'Elixir', 'Elm', 'Erlang', 'Forth', 'FTL', 'Gcode', 'Gherkin', 'Gitignore', 'Glsl', 'golang', 'Groovy', 'HAML', 'Handlebars', 'Haskell', 'haXe', 'HTML', 'HTML_Ruby', 'INI', 'Io', 'Jack', 'Jade', 'Java', 'JavaScript', 'JSON', 'JSONiq', 'JSP', 'JSX', 'Julia', 'LaTeX', 'Lean', 'LESS', 'Liquid', 'Lisp', 'LiveScript', 'LogiQL', 'LSL', 'Lua', 'LuaPage', 'Lucene', 'Makefile', 'Markdown', 'Mask', 'MATLAB', 'MEL', 'MUSHCode', 'MySQL', 'Nix', 'ObjectiveC', 'OCaml', 'Pascal', 'Perl', 'pgSQL', 'PHP', 'Powershell', 'Praat', 'Prolog', 'Properties', 'Protobuf', 'Python', 'R', 'RDoc', 'RHTML', 'Ruby', 'Rust', 'SASS', 'SCAD', 'Scala', 'Scheme', 'SCSS', 'SH', 'SJS', 'Smarty', 'snippets', 'Soy_Template', 'Space', 'SQL', 'SQLServer', 'Stylus', 'SVG', 'Tcl', 'Tex', 'Text', 'Textile', 'Toml', 'Twig', 'Typescript', 'Vala', 'VBScript', 'Velocity', 'Verilog', 'VHDL', 'XML', 'XQuery', 'YAML', 'Django']) diff --git a/src/browser/shared/config/env.js b/src/browser/shared/config/env.js deleted file mode 100644 index 51fe6bc9..00000000 --- a/src/browser/shared/config/env.js +++ /dev/null @@ -1,4 +0,0 @@ -/* global angular */ -angular.module('codexen.shared') - // .constant('apiUrl', 'http://localhost:8000/') - .constant('apiUrl', 'http://codexen-server-dev.elasticbeanstalk.com/') diff --git a/src/browser/shared/config/satellizer.js b/src/browser/shared/config/satellizer.js deleted file mode 100644 index ca15816a..00000000 --- a/src/browser/shared/config/satellizer.js +++ /dev/null @@ -1,8 +0,0 @@ -/* global angular */ -angular.module('codexen.shared') - .config(function ($authProvider, $httpProvider, apiUrl) { - $authProvider.baseUrl = apiUrl - - $httpProvider.defaults.useXDomain = true - delete $httpProvider.defaults.headers.common['X-Requested-With'] - }) diff --git a/src/browser/shared/directives/ui-ace.js b/src/browser/shared/directives/ui-ace.js deleted file mode 100644 index 72f49e9e..00000000 --- a/src/browser/shared/directives/ui-ace.js +++ /dev/null @@ -1,386 +0,0 @@ -/* global angular */ -'use strict' - -/** - * Binds a ACE Editor widget - */ -angular.module('ui.ace', []) - .constant('uiAceConfig', {}) - .directive('uiAce', ['uiAceConfig', function (uiAceConfig) { - if (angular.isUndefined(window.ace)) { - throw new Error('ui-ace need ace to work... (o rly?)') - } - - /** - * Sets editor options such as the wrapping mode or the syntax checker. - * - * The supported options are: - * - *
      - *
    • showGutter
    • - *
    • useWrapMode
    • - *
    • onLoad
    • - *
    • theme
    • - *
    • mode
    • - *
    - * - * @param acee - * @param session ACE editor session - * @param {object} opts Options to be set - */ - var setOptions = function (acee, session, opts) { - // sets the ace worker path, if running from concatenated - // or minified source - if (angular.isDefined(opts.workerPath)) { - var config = window.ace.require('ace/config') - config.set('workerPath', opts.workerPath) - } - // ace requires loading - if (angular.isDefined(opts.require)) { - opts.require.forEach(function (n) { - window.ace.require(n) - }) - } - // Boolean options - if (angular.isDefined(opts.showGutter)) { - acee.renderer.setShowGutter(opts.showGutter) - } - if (angular.isDefined(opts.useWrapMode)) { - session.setUseWrapMode(opts.useWrapMode) - } - if (angular.isDefined(opts.showInvisibles)) { - acee.renderer.setShowInvisibles(opts.showInvisibles) - } - if (angular.isDefined(opts.showIndentGuides)) { - acee.renderer.setDisplayIndentGuides(opts.showIndentGuides) - } - if (angular.isDefined(opts.useSoftTabs)) { - session.setUseSoftTabs(opts.useSoftTabs) - } - if (angular.isDefined(opts.showPrintMargin)) { - acee.setShowPrintMargin(opts.showPrintMargin) - } - if (angular.isDefined(opts.maxLines)) { - if (opts.maxLines < 0) opts.maxLines = Infinity - acee.setOptions({ - maxLines: opts.maxLines - }) - } - - // commands - if (angular.isDefined(opts.disableSearch) && opts.disableSearch) { - acee.commands.addCommands([ - { - name: 'unfind', - bindKey: { - win: 'Ctrl-F', - mac: 'Command-F' - }, - exec: function () { - return false - }, - readOnly: true - } - ]) - } - - // Basic options - if (angular.isString(opts.theme)) { - acee.setTheme('ace/theme/' + opts.theme) - } - if (angular.isString(opts.mode)) { - session.setMode('ace/mode/' + opts.mode) - } - // Advanced options - if (angular.isDefined(opts.firstLineNumber)) { - if (angular.isNumber(opts.firstLineNumber)) { - session.setOption('firstLineNumber', opts.firstLineNumber) - } else if (angular.isFunction(opts.firstLineNumber)) { - session.setOption('firstLineNumber', opts.firstLineNumber()) - } - } - - // advanced options - var key, obj - if (angular.isDefined(opts.advanced)) { - for (key in opts.advanced) { - // create a javascript object with the key and value - obj = { name: key, value: opts.advanced[key] } - // try to assign the option to the ace editor - acee.setOption(obj.name, obj.value) - } - } - - // advanced options for the renderer - if (angular.isDefined(opts.rendererOptions)) { - for (key in opts.rendererOptions) { - // create a javascript object with the key and value - obj = { name: key, value: opts.rendererOptions[key] } - // try to assign the option to the ace editor - acee.renderer.setOption(obj.name, obj.value) - } - } - - // onLoad callbacks - angular.forEach(opts.callbacks, function (cb) { - if (angular.isFunction(cb)) { - cb(acee) - } - }) - } - - return { - restrict: 'EA', - require: '?ngModel', - link: function (scope, elm, attrs, ngModel) { - /** - * Corresponds the uiAceConfig ACE configuration. - * @type object - */ - var options = uiAceConfig.ace || {} - - /** - * uiAceConfig merged with user options via json in attribute or data binding - * @type object - */ - var opts = angular.extend({}, options, scope.$eval(attrs.uiAce)) - - /** - * ACE editor - * @type object - */ - var acee = window.ace.edit(elm[0]) - acee.$blockScrolling = Infinity - - /** - * ACE editor session. - * @type object - * @see [EditSession]{@link http://ace.c9.io/#nav=api&api=edit_session} - */ - var session = acee.getSession() - - /** - * Reference to a change listener created by the listener factory. - * @function - * @see listenerFactory.onChange - */ - var onChangeListener - - /** - * Reference to a blur listener created by the listener factory. - * @function - * @see listenerFactory.onBlur - */ - var onBlurListener - - /** - * Calls a callback by checking its existing. The argument list - * is variable and thus this function is relying on the arguments - * object. - * @throws {Error} If the callback isn't a function - */ - var executeUserCallback = function () { - /** - * The callback function grabbed from the array-like arguments - * object. The first argument should always be the callback. - * - * @see [arguments]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments} - * @type {*} - */ - var callback = arguments[0] - - /** - * Arguments to be passed to the callback. These are taken - * from the array-like arguments object. The first argument - * is stripped because that should be the callback function. - * - * @see [arguments]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments} - * @type {Array} - */ - var args = Array.prototype.slice.call(arguments, 1) - - if (angular.isDefined(callback)) { - scope.$evalAsync(function () { - if (angular.isFunction(callback)) { - callback(args) - } else { - throw new Error('ui-ace use a function as callback.') - } - }) - } - } - - /** - * Listener factory. Until now only change listeners can be created. - * @type object - */ - var listenerFactory = { - /** - * Creates a change listener which propagates the change event - * and the editor session to the callback from the user option - * onChange. It might be exchanged during runtime, if this - * happens the old listener will be unbound. - * - * @param callback callback function defined in the user options - * @see onChangeListener - */ - onChange: function (callback) { - return function (e) { - var newValue = session.getValue() - - if (ngModel && newValue !== ngModel.$viewValue && - // HACK make sure to only trigger the apply outside of the - // digest loop 'cause ACE is actually using this callback - // for any text transformation ! - !scope.$$phase && !scope.$root.$$phase) { - scope.$evalAsync(function () { - ngModel.$setViewValue(newValue) - }) - } - - executeUserCallback(callback, e, acee) - } - }, - /** - * Creates a blur listener which propagates the editor session - * to the callback from the user option onBlur. It might be - * exchanged during runtime, if this happens the old listener - * will be unbound. - * - * @param callback callback function defined in the user options - * @see onBlurListener - */ - onBlur: function (callback) { - return function () { - executeUserCallback(callback, acee) - } - } - } - - attrs.$observe('readonly', function (value) { - acee.setReadOnly(!!value || value === '') - }) - - // Value Blind - if (ngModel) { - ngModel.$formatters.push(function (value) { - if (angular.isUndefined(value) || value === null) { - return '' - } else if (angular.isObject(value) || angular.isArray(value)) { - throw new Error('ui-ace cannot use an object or an array as a model') - } - return value - }) - - ngModel.$render = function () { - session.setValue(ngModel.$viewValue) - } - } - - // Listen for option updates - var updateOptions = function (current, previous) { - if (current === previous) return - opts = angular.extend({}, options, scope.$eval(attrs.uiAce)) - - opts.callbacks = [ opts.onLoad ] - if (opts.onLoad !== options.onLoad) { - // also call the global onLoad handler - opts.callbacks.unshift(options.onLoad) - } - - // EVENTS - - // unbind old change listener - session.removeListener('change', onChangeListener) - - // bind new change listener - onChangeListener = listenerFactory.onChange(opts.onChange) - session.on('change', onChangeListener) - - // unbind old blur listener - // session.removeListener('blur', onBlurListener) - acee.removeListener('blur', onBlurListener) - - // bind new blur listener - onBlurListener = listenerFactory.onBlur(opts.onBlur) - acee.on('blur', onBlurListener) - - setOptions(acee, session, opts) - } - - scope.$watch(attrs.uiAce, updateOptions, /* deep watch */ true) - - // set the options here, even if we try to watch later, if this - // line is missing things go wrong (and the tests will also fail) - updateOptions(options) - - elm.on('$destroy', function () { - acee.session.$stopWorker() - acee.destroy() - }) - - scope.$watch(function () { - return [elm[0].offsetWidth, elm[0].offsetHeight] - }, function () { - acee.resize() - acee.renderer.updateFull() - }, true) - - scope.Infinity = -1 - - scope.focus = function () { - acee.focus() - } - - scope.addCommand = acee.commands.addCommand - - elm.on('click', function () { - acee.focus() - }) - - scope.$on('insertRequested', function (e, req) { - var cursor = acee.selection.getCursor() - var str = '' - if (cursor.column > 0) str += '\n\n' - - switch (req) { - case 'h1': - acee.insert(str + '# some heading\n\n') - break - case 'ul': - acee.insert(str + '- item1\n- item2\n- item3') - break - case 'ol': - acee.insert(str + '1. item1\n2. item2\n3. item3') - break - case 'a': - acee.insert(str + '[example.com](http://example.com)') - break - case 'table': - acee.insert(str + - 'First Header | Second Header\n' + - '------------- | -------------\n' + - 'Content Cell | Content Cell\n' + - 'Content Cell | Content Cell\n') - } - - scope.$evalAsync(function () { - ngModel.$setViewValue(session.getValue()) - }) - }) - - scope.$on('insertSnippetRequested', function (e, snippet) { - var cursor = acee.selection.getCursor() - var str = '' - if (cursor.column > 0) str += '\n\n' - - acee.insert(str + '```\n' + snippet.content + '\n```\n> [snippet#' + snippet.id + '](#/snippets/' + snippet.id + ')\n\n') - - scope.$evalAsync(function () { - ngModel.$setViewValue(session.getValue()) - }) - }) - - } - } - }]) diff --git a/src/browser/shared/services/Snippet.js b/src/browser/shared/services/Snippet.js deleted file mode 100644 index 218473c2..00000000 --- a/src/browser/shared/services/Snippet.js +++ /dev/null @@ -1,52 +0,0 @@ -/* global angular */ -angular.module('codexen.shared') - .factory('Snippet', function ($http, $auth, apiUrl) { - var findByUser = function (user) { - var url = apiUrl + 'snippets/search' - - return $http.get(url, { - params: { - user: user - } - }) - } - - var findMine = function (params) { - var url = apiUrl + 'snippets/my' - - return $http.get(url, {params: params}) - } - - var create = function (params) { - var url = apiUrl + 'snippets/create' - - return $http.post(url, params) - } - - var show = function (id, params) { - var url = apiUrl + 'snippets/id/' + id - - return $http.get(url, {params: params}) - } - - var update = function (id, params) { - var url = apiUrl + 'snippets/id/' + id - - return $http.put(url, params) - } - - var destroy = function (id) { - var url = apiUrl + 'snippets/id/' + id - - return $http.delete(url) - } - - return { - findByUser: findByUser, - findMine: findMine, - create: create, - show: show, - delete: destroy, - update: update - } - }) diff --git a/src/browser/shared/shared.js b/src/browser/shared/shared.js deleted file mode 100644 index 5fa067c9..00000000 --- a/src/browser/shared/shared.js +++ /dev/null @@ -1,3 +0,0 @@ -angular.module('codexen.shared', [ - 'satellizer' -]) diff --git a/src/browser/shared/styles/_index.styl b/src/browser/shared/styles/_index.styl deleted file mode 100644 index 14aee701..00000000 --- a/src/browser/shared/styles/_index.styl +++ /dev/null @@ -1,24 +0,0 @@ -html - overflow: hidden - height: 100% - -body - height: 100% - overflow: auto - font-family: "Lato", sans-serif - color $textColor - background-color: $appBackgroundColor - -label - font-family: "Lato", sans-serif - color $textColor - -h1, h2, h3, h4, h5 - color $textColorHighlight - margin 0 - -textarea - resize: vertical - -hr - border-color $baseBorderColor diff --git a/src/browser/shared/styles/_shared.styl b/src/browser/shared/styles/_shared.styl deleted file mode 100644 index ecac897d..00000000 --- a/src/browser/shared/styles/_shared.styl +++ /dev/null @@ -1,50 +0,0 @@ -.alert - margin: 5px 0 - -input.form-control, textarea.form-control, input.inline-form-control - &::-webkit-input-placeholder - color $textColor - &:-moz-placeholder /* Firefox 18- */ - color $textColor - &::-moz-placeholder /* Firefox 19+ */ - color $textColor - &:-ms-input-placeholder - color $textColor - - -.inline-form-control - @extend .form-control - width: auto - display: inline-block - -.btn.btn-default - border-style solid - border-width 1px - btn-color($btn-default-color, $btn-default-bg, $btn-default-border) -.btn.btn-primary - btn-color($btn-primary-color, $btn-primary-bg, $btn-primary-border) -.btn.btn-info - btn-color($btn-info-color, $btn-info-bg, $btn-info-border) -.btn.btn-success - btn-color($btn-success-color, $btn-success-bg, $btn-success-border) -.btn.btn-danger - btn-color($btn-danger-color, $btn-danger-bg, $btn-danger-border) -.btn.btn-warning - btn-color($btn-warning-color, $btn-warning-bg, $btn-warning-border) - -textarea.form-control, .ace_editor - border-radius $input-border-radius - -.ace_editor - border solid 1px $input-border - box-shadow inset 0 1px 1px rgba(0, 0, 0, .075) - font-family: 'Lucida Grande' - -.ace_editor.ace_focus - controlGlow() - -.modal-content - background-color $bg - -.jumbotron - padding 48px 10px diff --git a/src/browser/shared/styles/_vars.styl b/src/browser/shared/styles/_vars.styl deleted file mode 100644 index ce0e2591..00000000 --- a/src/browser/shared/styles/_vars.styl +++ /dev/null @@ -1,99 +0,0 @@ -// Basic Vars(MUST BE CAMELCASED ATOM VARS) -$textColor= #99B2B8 -$textColorHighlight= #D5DFE2 -$textColorSelected = #FFFFFF - -$textColorInfo= #6494ED -$textColorSuccess= #73C990 -$textColorWarning= #E2C08D -$textColorError= #FF6347 - -$backgroundColorHighlight= #003B4A -$backgroundColorSelected= #004B5F -$appBackgroundColor= #001F27 - -$baseBackgroundColor= #002B36 -$baseBorderColor= #001A20 - -$inputBackgroundColor= #00222B -$inputBorderColor= #001A20 - -$buttonBackgroundColor= #004355 -$buttonBackgroundColorHover= #004B5F -$buttonBackgroundColorSelected= #52DCFF -$buttonBorderColor= $baseBorderColor - -$block= #00222B - -//buttons -$btnPrimary= #088CFF -$btnInfo= #5BDEFF -$btnSuccess= #22BD89 -$btnWarning= #CD8737 -$btnError= #DA2828 - - -// Bootstrap Overrides(MUST BE BUILT WITH BASIC VALUE ONLY) -$brand-primary= $btnPrimary -$brand-info= $btnInfo -$brand-success= $btnSuccess -$brand-warning= $btnWarning -$brand-danger= $btnError - -$btn-default-bg= $buttonBackgroundColor -$btn-default-color= $textColor -$btn-default-border= $baseBorderColor - -$link-color= $textColorHighlight - -$nav-link-active-link-hover-bg= $backgroundColorHighlight -$nav-pills-active-link-hover-color= $textColorHighlight -$nav-link-hover-bg= $backgroundColorHighlight - -$input-bg= $backgroundColorHighlight -$input-border= $baseBorderColor -$input-border-focus= $buttonBackgroundColorSelected -$input-color= $textColorSelected - -$dropdown-bg= $baseBackgroundColor -$dropdown-border= $baseBorderColor -$dropdown-link-color= $textColor -$dropdown-link-hover-bg= $backgroundColorSelected -$dropdown-link-hover-color= $textColorSelected - -$modal-content-bg= $baseBackgroundColor -$modal-content-border-color= $modal-header-border-color= $modal-footer-border-color= $baseBorderColor - -$jumbotron-bg= $backgroundColorHighlight - -$alert-danger-bg= $textColorError -$alert-danger-border= dark($alert-danger-bg) ? darken($alert-danger-bg, 5%) : lighten($alert-danger-bg, 5%) -$alert-danger-text= $textColorSelected - -$alert-info-bg= $textColorInfo -$alert-info-border= dark($alert-info-bg) ? darken($alert-info-bg, 5%) : lighten($alert-info-bg, 5%) -$alert-info-text= $textColorSelected - -$alert-success-bg= $textColorSuccess -$alert-success-border= dark($alert-success-bg) ? darken($alert-success-bg, 5%) : lighten($alert-success-bg, 5%) -$alert-success-text= $textColorSelected - -$alert-warning-bg= $textColorWarning -$alert-warning-border= dark($alert-warning-bg) ? darken($alert-warning-bg, 5%) : lighten($alert-warning-bg, 5%) -$alert-warning-text= $textColorSelected - -$panel-bg= $baseBackgroundColor -$panel-default-border= $baseBorderColor - - -$nav-tabs-border-color= $baseBorderColor - -$nav-tabs-link-hover-border-color= $baseBorderColor -$nav-tabs-active-link-hover-bg= transparent $backgroundColorSelected -$nav-tabs-active-link-hover-color= $textColorSelected -$nav-tabs-active-link-hover-border-color= $baseBorderColor - -$nav-tabs-justified-link-border-color= $baseBorderColor -$nav-tabs-justified-active-link-border-color= $baseBorderColor - -$table-border-color= $baseBorderColor diff --git a/src/browser/shared/styles/bootstrap.css b/src/browser/shared/styles/bootstrap.css deleted file mode 100644 index e90d2ea8..00000000 --- a/src/browser/shared/styles/bootstrap.css +++ /dev/null @@ -1,5639 +0,0 @@ -.clearfix:before, -.dl-horizontal dd:before, -.container:before, -.container-fluid:before, -.row:before, -.form-horizontal .form-group:before, -.btn-toolbar:before, -.btn-group-vertical > .btn-group:before, -.nav:before, -.navbar:before, -.navbar-header:before, -.navbar-collapse:before, -.panel-body:before, -.modal-footer:before, -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.panel-body:after, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.panel-body:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/* Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - select { - background: #fff !important; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -* { - box-sizing: border-box; -} -*:before, -*:after { - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0,0,0,0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.428571429; - color: #333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #d5dfe2; - text-decoration: none; -} -a:hover, -a:focus { - color: #aec1c7; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.428571429; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: 0.2em; -} -.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-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #088cff; -} -a.text-primary:hover { - color: #007eed; -} -.text-success { - color: #3c763d; -} -a.text-success:hover { - color: #366a37; -} -.text-info { - color: #31708f; -} -a.text-info:hover { - color: #2c6581; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover { - color: #7c6235; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover { - color: #983d3b; -} -.bg-primary { - color: #fff; - background-color: #088cff; -} -a.bg-primary:hover { - background-color: #007eed; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover { - background-color: #c4e3b7; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover { - background-color: #b3dbef; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover { - background-color: #f7edb8; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover { - background-color: #e5bdbd; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-inline, -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.428571429; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.428571429; - color: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eee; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.428571429; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, -.col-sm-1, -.col-md-1, -.col-lg-1, -.col-xs-2, -.col-sm-2, -.col-md-2, -.col-lg-2, -.col-xs-3, -.col-sm-3, -.col-md-3, -.col-lg-3, -.col-xs-4, -.col-sm-4, -.col-md-4, -.col-lg-4, -.col-xs-5, -.col-sm-5, -.col-md-5, -.col-lg-5, -.col-xs-6, -.col-sm-6, -.col-md-6, -.col-lg-6, -.col-xs-7, -.col-sm-7, -.col-md-7, -.col-lg-7, -.col-xs-8, -.col-sm-8, -.col-md-8, -.col-lg-8, -.col-xs-9, -.col-sm-9, -.col-md-9, -.col-lg-9, -.col-xs-10, -.col-sm-10, -.col-md-10, -.col-lg-10, -.col-xs-11, -.col-sm-11, -.col-md-11, -.col-lg-11, -.col-xs-12, -.col-sm-12, -.col-md-12, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666666666666%; -} -.col-xs-10 { - width: 83.33333333333334%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666666666666%; -} -.col-xs-7 { - width: 58.333333333333336%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666666666667%; -} -.col-xs-4 { - width: 33.33333333333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.666666666666664%; -} -.col-xs-1 { - width: 8.333333333333332%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666666666666%; -} -.col-xs-pull-10 { - right: 83.33333333333334%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666666666666%; -} -.col-xs-pull-7 { - right: 58.333333333333336%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666666666667%; -} -.col-xs-pull-4 { - right: 33.33333333333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.666666666666664%; -} -.col-xs-pull-1 { - right: 8.333333333333332%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666666666666%; -} -.col-xs-push-10 { - left: 83.33333333333334%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666666666666%; -} -.col-xs-push-7 { - left: 58.333333333333336%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666666666667%; -} -.col-xs-push-4 { - left: 33.33333333333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.666666666666664%; -} -.col-xs-push-1 { - left: 8.333333333333332%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666666666666%; -} -.col-xs-offset-10 { - margin-left: 83.33333333333334%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666666666666%; -} -.col-xs-offset-7 { - margin-left: 58.333333333333336%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666666666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.666666666666664%; -} -.col-xs-offset-1 { - margin-left: 8.333333333333332%; -} -.col-xs-offset-0 { - margin-left: 0; -} -@media (min-width: 768px) { - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11, - .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666666666666%; - } - .col-sm-10 { - width: 83.33333333333334%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666666666666%; - } - .col-sm-7 { - width: 58.333333333333336%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666666666667%; - } - .col-sm-4 { - width: 33.33333333333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.666666666666664%; - } - .col-sm-1 { - width: 8.333333333333332%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666666666666%; - } - .col-sm-pull-10 { - right: 83.33333333333334%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666666666666%; - } - .col-sm-pull-7 { - right: 58.333333333333336%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666666666667%; - } - .col-sm-pull-4 { - right: 33.33333333333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.666666666666664%; - } - .col-sm-pull-1 { - right: 8.333333333333332%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666666666666%; - } - .col-sm-push-10 { - left: 83.33333333333334%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666666666666%; - } - .col-sm-push-7 { - left: 58.333333333333336%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666666666667%; - } - .col-sm-push-4 { - left: 33.33333333333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.666666666666664%; - } - .col-sm-push-1 { - left: 8.333333333333332%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666666666666%; - } - .col-sm-offset-10 { - margin-left: 83.33333333333334%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666666666666%; - } - .col-sm-offset-7 { - margin-left: 58.333333333333336%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666666666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.666666666666664%; - } - .col-sm-offset-1 { - margin-left: 8.333333333333332%; - } - .col-sm-offset-0 { - margin-left: 0; - } -} -@media (min-width: 992px) { - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11, - .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666666666666%; - } - .col-md-10 { - width: 83.33333333333334%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666666666666%; - } - .col-md-7 { - width: 58.333333333333336%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666666666667%; - } - .col-md-4 { - width: 33.33333333333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.666666666666664%; - } - .col-md-1 { - width: 8.333333333333332%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666666666666%; - } - .col-md-pull-10 { - right: 83.33333333333334%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666666666666%; - } - .col-md-pull-7 { - right: 58.333333333333336%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666666666667%; - } - .col-md-pull-4 { - right: 33.33333333333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.666666666666664%; - } - .col-md-pull-1 { - right: 8.333333333333332%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666666666666%; - } - .col-md-push-10 { - left: 83.33333333333334%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666666666666%; - } - .col-md-push-7 { - left: 58.333333333333336%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666666666667%; - } - .col-md-push-4 { - left: 33.33333333333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.666666666666664%; - } - .col-md-push-1 { - left: 8.333333333333332%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666666666666%; - } - .col-md-offset-10 { - margin-left: 83.33333333333334%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666666666666%; - } - .col-md-offset-7 { - margin-left: 58.333333333333336%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666666666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.666666666666664%; - } - .col-md-offset-1 { - margin-left: 8.333333333333332%; - } - .col-md-offset-0 { - margin-left: 0; - } -} -@media (min-width: 1200px) { - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11, - .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666666666666%; - } - .col-lg-10 { - width: 83.33333333333334%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666666666666%; - } - .col-lg-7 { - width: 58.333333333333336%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666666666667%; - } - .col-lg-4 { - width: 33.33333333333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.666666666666664%; - } - .col-lg-1 { - width: 8.333333333333332%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666666666666%; - } - .col-lg-pull-10 { - right: 83.33333333333334%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666666666666%; - } - .col-lg-pull-7 { - right: 58.333333333333336%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666666666667%; - } - .col-lg-pull-4 { - right: 33.33333333333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.666666666666664%; - } - .col-lg-pull-1 { - right: 8.333333333333332%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666666666666%; - } - .col-lg-push-10 { - left: 83.33333333333334%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666666666666%; - } - .col-lg-push-7 { - left: 58.333333333333336%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666666666667%; - } - .col-lg-push-4 { - left: 33.33333333333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.666666666666664%; - } - .col-lg-push-1 { - left: 8.333333333333332%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666666666666%; - } - .col-lg-offset-10 { - margin-left: 83.33333333333334%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666666666666%; - } - .col-lg-offset-7 { - margin-left: 58.333333333333336%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666666666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.666666666666664%; - } - .col-lg-offset-1 { - margin-left: 8.333333333333332%; - } - .col-lg-offset-0 { - margin-left: 0; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.428571429; - vertical-align: top; - border-top: 1px solid #001a20; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #001a20; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #001a20; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #001a20; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #001a20; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e9e9e9; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d1eac8; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c6e4f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf3cd; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcdcd; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #001a20; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.428571429; - color: #fff; -} -.form-control, -.inline-form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - color: #fff; - background-color: #003b4a; - background-image: none; - border: 1px solid #001a20; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} -.form-control:focus, -.inline-form-control:focus { - border-color: #52dcff; - outline: 0; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 8px rgba(82,220,255,0.6); -} -.form-control::-moz-placeholder, -.inline-form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder, -.inline-form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder, -.inline-form-control::-webkit-input-placeholder { - color: #999; -} -.form-control[disabled], -.inline-form-control[disabled], -.form-control[readonly], -.inline-form-control[readonly], -fieldset[disabled] .form-control, -fieldset[disabled] .inline-form-control { - background-color: #eee; - opacity: 1; -} -.form-control[disabled], -.inline-form-control[disabled], -fieldset[disabled] .form-control, -fieldset[disabled] .inline-form-control { - cursor: not-allowed; -} -textarea.form-control, -textarea.inline-form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"], - input[type="time"], - input[type="datetime-local"], - input[type="month"] { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.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; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 34px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm, -.form-horizontal .form-group-sm .form-control, -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm, -select.form-horizontal .form-group-sm .form-control, -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -textarea.form-horizontal .form-group-sm .form-control, -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-sm, -select[multiple].form-horizontal .form-group-sm .form-control, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.form-group-sm .form-control { - height: 30px; - line-height: 30px; -} -textarea.form-group-sm .form-control, -select[multiple].form-group-sm .form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - min-height: 32px; -} -.input-lg, -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg, -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-lg, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.form-group-lg .form-control { - height: 46px; - line-height: 46px; -} -textarea.form-group-lg .form-control, -select[multiple].form-group-lg .form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - min-height: 38px; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -} -.has-success .form-control:focus { - border-color: #366a37; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #52a254; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -} -.has-warning .form-control:focus { - border-color: #7c6235; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #b48f50; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -} -.has-error .form-control:focus { - border-color: #983d3b; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px #c16361; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #666; -} -@media (min-width: 768px) { - .form-inline .form-group, - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control, - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static, - .navbar-form .form-control-static { - display: inline-block; - } - .form-inline .input-group, - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .navbar-form .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .navbar-form .input-group .input-group-btn, - .form-inline .input-group .form-control, - .navbar-form .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control, - .navbar-form .input-group > .form-control { - width: 100%; - } - .form-inline .control-label, - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .navbar-form .radio, - .form-inline .checkbox, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .navbar-form .radio label, - .form-inline .checkbox label, - .navbar-form .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .navbar-form .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback, - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.333333px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #99b2b8; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - box-shadow: inset 0 3px 5px rgba(0,0,0,0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - pointer-events: none; - opacity: 0.65; - filter: alpha(opacity=65); - box-shadow: none; -} -.btn-default { - color: #99b2b8; - background-color: #004355; - border-color: #001a20; -} -.btn-default:hover, -.btn-default:focus, -.btn-default.focus, -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #99b2b8; - background-color: #003c4d; - border-color: #00171c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #004355; - border-color: #001a20; -} -.btn-default .badge { - color: #004355; - background-color: #99b2b8; -} -.btn-primary { - color: #fff; - background-color: #088cff; - border-color: #0086fa; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary.focus, -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #007eed; - border-color: #0076dc; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #088cff; - border-color: #0086fa; -} -.btn-primary .badge { - color: #088cff; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #22bd89; - border-color: #20b482; -} -.btn-success:hover, -.btn-success:focus, -.btn-success.focus, -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #1faa7b; - border-color: #1c9e72; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #22bd89; - border-color: #20b482; -} -.btn-success .badge { - color: #22bd89; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bdeff; - border-color: #4adbff; -} -.btn-info:hover, -.btn-info:focus, -.btn-info.focus, -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #38d7ff; - border-color: #23d3ff; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bdeff; - border-color: #4adbff; -} -.btn-info .badge { - color: #5bdeff; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #cd8737; - border-color: #c68031; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning.focus, -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #bb7a2f; - border-color: #ae712b; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #cd8737; - border-color: #c68031; -} -.btn-warning .badge { - color: #cd8737; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #da2828; - border-color: #d12424; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger.focus, -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c62222; - border-color: #b82020; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #da2828; - border-color: #d12424; -} -.btn-danger .badge { - color: #da2828; - background-color: #fff; -} -.btn-link { - color: #d5dfe2; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #aec1c7; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #002b36; - border: 1px solid #ccc; - border: 1px solid #001a20; - border-radius: 4px; - box-shadow: 0 6px 12px rgba(0,0,0,0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.428571429; - color: #99b2b8; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #fff; - background-color: #004b5f; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - outline: 0; - background-color: #088cff; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.428571429; - color: #777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - box-shadow: inset 0 3px 5px rgba(0,0,0,0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-bottom-left-radius: 4px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #fff; - text-align: center; - background-color: #eee; - border: 1px solid #001a20; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #003b4a; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #003b4a; - border-color: #d5dfe2; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #001a20; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.428571429; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #001a20 #001a20 #001a20; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #fff; - background-color: transparent #004b5f; - border: 1px solid #001a20; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #d5dfe2; - background-color: #088cff; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified, -.nav-tabs.nav-justified { - width: 100%; -} -.nav-justified > li, -.nav-tabs.nav-justified > li { - float: none; -} -.nav-justified > li > a, -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu, -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li, - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a, - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified, -.nav-tabs.nav-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a, -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs.nav-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #001a20; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a, - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #001a20; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs.nav-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #001a20; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.1); - margin-top: 8px; - margin-bottom: 8px; -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e8e8e8; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #6b6b6b; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e8e8e8; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e8e8e8; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e8e8e8; - color: #555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e8e8e8; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #1f1f1f; -} -.navbar-inverse .navbar-brand { - color: #8b8b8b; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #8b8b8b; -} -.navbar-inverse .navbar-nav > li > a { - color: #8b8b8b; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #1f1f1f; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #202020; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #1f1f1f; - color: #fff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #1f1f1f; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #1f1f1f; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #8b8b8b; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #1f1f1f; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #8b8b8b; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #8b8b8b; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.label { - display: inline; - padding: 0.2em 0.6em 0.3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #6b6b6b; -} -.label-primary { - background-color: #088cff; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #007eed; -} -.label-success { - background-color: #22bd89; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #1faa7b; -} -.label-info { - background-color: #5bdeff; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #38d7ff; -} -.label-warning { - background-color: #cd8737; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #bb7a2f; -} -.label-danger { - background-color: #da2828; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c62222; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #fff; - line-height: 1; - vertical-align: baseline; - white-space: nowrap; - text-align: center; - background-color: #777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #d5dfe2; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding: 30px 15px; - margin-bottom: 30px; - color: inherit; - background-color: #003b4a; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #003543; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding: 48px 0; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.428571429; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #d5dfe2; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #73c990; - border-color: #7acc96; - color: #fff; -} -.alert-success hr { - border-top-color: #6ec78d; -} -.alert-success .alert-link { - color: #e6e6e6; -} -.alert-info { - background-color: #6494ed; - border-color: #6c99ee; - color: #fff; -} -.alert-info hr { - border-top-color: #5c8eec; -} -.alert-info .alert-link { - color: #e6e6e6; -} -.alert-warning { - background-color: #e2c08d; - border-color: #e3c393; - color: #fff; -} -.alert-warning hr { - border-top-color: #dfbb84; -} -.alert-warning .alert-link { - color: #e6e6e6; -} -.alert-danger { - background-color: #ff6347; - border-color: #ff6b50; - color: #fff; -} -.alert-danger hr { - border-top-color: #ff5d3f; -} -.alert-danger .alert-link { - color: #e6e6e6; -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #088cff; - box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #22bd89; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bdeff; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #cd8737; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #da2828; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent); -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - color: #555; - background-color: #f5f5f5; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eee; - color: #777; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #088cff; - border-color: #088cff; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #6bbaff; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -a.list-group-item-success:focus { - color: #3c763d; - background-color: #d1eac8; -} -a.list-group-item-success.active, -a.list-group-item-success.active:hover, -a.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -a.list-group-item-info:focus { - color: #31708f; - background-color: #c6e4f3; -} -a.list-group-item-info.active, -a.list-group-item-info.active:hover, -a.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -a.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf3cd; -} -a.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -a.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcdcd; -} -a.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #002b36; - border: 1px solid transparent; - border-radius: 4px; - box-shadow: 0 1px 1px rgba(0,0,0,0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #001a20; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #001a20; -} -.panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #001a20; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #001a20; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #001a20; -} -.panel-primary { - border-color: #088cff; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #088cff; - border-color: #088cff; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #088cff; -} -.panel-primary > .panel-heading .badge { - color: #088cff; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #088cff; -} -.panel-success { - border-color: #d7eac8; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d7eac8; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d7eac8; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d7eac8; -} -.panel-info { - border-color: #bee9f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bee9f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bee9f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bee9f1; -} -.panel-warning { - border-color: #faeccd; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faeccd; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faeccd; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faeccd; -} -.panel-danger { - border-color: #ebcdd2; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebcdd2; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebcdd2; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebcdd2; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e4e4e4; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #002b36; - border: 1px solid #999; - border: 1px solid #001a20; - border-radius: 6px; - box-shadow: 0 3px 9px rgba(0,0,0,0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #001a20; - min-height: 16.428571429px; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.428571429; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #001a20; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - box-shadow: 0 5px 15px rgba(0,0,0,0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-weight: normal; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - text-decoration: none; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: normal; - line-height: 1.428571429; - text-align: left; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,0.2); - border-radius: 6px; - box-shadow: 0 5px 10px rgba(0,0,0,0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #a3a3a3; - border-top-color: rgba(0,0,0,0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #fff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #a3a3a3; - border-right-color: rgba(0,0,0,0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #fff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #a3a3a3; - border-bottom-color: rgba(0,0,0,0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #a3a3a3; - border-left-color: rgba(0,0,0,0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #fff; - bottom: -10px; -} -.alert { - margin: 5px 0; -} -input.form-control::-webkit-input-placeholder, -textarea.form-control::-webkit-input-placeholder, -input.inline-form-control::-webkit-input-placeholder { - color: #99b2b8; -} -input.form-control:-moz-placeholder, -textarea.form-control:-moz-placeholder, -input.inline-form-control:-moz-placeholder { - color: #99b2b8; -} -input.form-control::-moz-placeholder, -textarea.form-control::-moz-placeholder, -input.inline-form-control::-moz-placeholder { - color: #99b2b8; -} -input.form-control:-ms-input-placeholder, -textarea.form-control:-ms-input-placeholder, -input.inline-form-control:-ms-input-placeholder { - color: #99b2b8; -} -.inline-form-control { - width: auto; - display: inline-block; -} -.btn.btn-default { - border-style: solid; - border-width: 1px; - color: #99b2b8; - background-color: #004355; - border-color: #001a20; -} -.btn.btn-default:hover, -.btn.btn-default:focus, -.btn.btn-default.focus, -.btn.btn-default:active, -.btn.btn-default.active, -.open > .dropdown-toggle.btn.btn-default { - color: #a3babf; - background-color: #006480; - border-color: #004959; -} -.btn.btn-default:active, -.btn.btn-default.active, -.open > .dropdown-toggle.btn.btn-default { - background-image: none; -} -.btn.btn-default.disabled, -.btn.btn-default[disabled], -fieldset[disabled] .btn.btn-default, -.btn.btn-default.disabled:hover, -.btn.btn-default[disabled]:hover, -fieldset[disabled] .btn.btn-default:hover, -.btn.btn-default.disabled:focus, -.btn.btn-default[disabled]:focus, -fieldset[disabled] .btn.btn-default:focus, -.btn.btn-default.disabled.focus, -.btn.btn-default[disabled].focus, -fieldset[disabled] .btn.btn-default.focus, -.btn.btn-default.disabled:active, -.btn.btn-default[disabled]:active, -fieldset[disabled] .btn.btn-default:active, -.btn.btn-default.disabled.active, -.btn.btn-default[disabled].active, -fieldset[disabled] .btn.btn-default.active { - background-color: #004355; - border-color: #001a20; -} -.btn.btn-default .badge { - color: #004355; - background-color: #99b2b8; -} -.btn.btn-primary { - color: #fff; - background-color: #088cff; - border-color: #0086fa; -} -.btn.btn-primary:hover, -.btn.btn-primary:focus, -.btn.btn-primary.focus, -.btn.btn-primary:active, -.btn.btn-primary.active, -.open > .dropdown-toggle.btn.btn-primary { - color: #e6e6e6; - background-color: #007eed; - border-color: #1a95ff; -} -.btn.btn-primary:active, -.btn.btn-primary.active, -.open > .dropdown-toggle.btn.btn-primary { - background-image: none; -} -.btn.btn-primary.disabled, -.btn.btn-primary[disabled], -fieldset[disabled] .btn.btn-primary, -.btn.btn-primary.disabled:hover, -.btn.btn-primary[disabled]:hover, -fieldset[disabled] .btn.btn-primary:hover, -.btn.btn-primary.disabled:focus, -.btn.btn-primary[disabled]:focus, -fieldset[disabled] .btn.btn-primary:focus, -.btn.btn-primary.disabled.focus, -.btn.btn-primary[disabled].focus, -fieldset[disabled] .btn.btn-primary.focus, -.btn.btn-primary.disabled:active, -.btn.btn-primary[disabled]:active, -fieldset[disabled] .btn.btn-primary:active, -.btn.btn-primary.disabled.active, -.btn.btn-primary[disabled].active, -fieldset[disabled] .btn.btn-primary.active { - background-color: #088cff; - border-color: #0086fa; -} -.btn.btn-primary .badge { - color: #088cff; - background-color: #fff; -} -.btn.btn-info { - color: #fff; - background-color: #5bdeff; - border-color: #4adbff; -} -.btn.btn-info:hover, -.btn.btn-info:focus, -.btn.btn-info.focus, -.btn.btn-info:active, -.btn.btn-info.active, -.open > .dropdown-toggle.btn.btn-info { - color: #e6e6e6; - background-color: #38d7ff; - border-color: #23d3ff; -} -.btn.btn-info:active, -.btn.btn-info.active, -.open > .dropdown-toggle.btn.btn-info { - background-image: none; -} -.btn.btn-info.disabled, -.btn.btn-info[disabled], -fieldset[disabled] .btn.btn-info, -.btn.btn-info.disabled:hover, -.btn.btn-info[disabled]:hover, -fieldset[disabled] .btn.btn-info:hover, -.btn.btn-info.disabled:focus, -.btn.btn-info[disabled]:focus, -fieldset[disabled] .btn.btn-info:focus, -.btn.btn-info.disabled.focus, -.btn.btn-info[disabled].focus, -fieldset[disabled] .btn.btn-info.focus, -.btn.btn-info.disabled:active, -.btn.btn-info[disabled]:active, -fieldset[disabled] .btn.btn-info:active, -.btn.btn-info.disabled.active, -.btn.btn-info[disabled].active, -fieldset[disabled] .btn.btn-info.active { - background-color: #5bdeff; - border-color: #4adbff; -} -.btn.btn-info .badge { - color: #5bdeff; - background-color: #fff; -} -.btn.btn-success { - color: #fff; - background-color: #22bd89; - border-color: #20b482; -} -.btn.btn-success:hover, -.btn.btn-success:focus, -.btn.btn-success.focus, -.btn.btn-success:active, -.btn.btn-success.active, -.open > .dropdown-toggle.btn.btn-success { - color: #fff; - background-color: #26d59b; - border-color: #25d298; -} -.btn.btn-success:active, -.btn.btn-success.active, -.open > .dropdown-toggle.btn.btn-success { - background-image: none; -} -.btn.btn-success.disabled, -.btn.btn-success[disabled], -fieldset[disabled] .btn.btn-success, -.btn.btn-success.disabled:hover, -.btn.btn-success[disabled]:hover, -fieldset[disabled] .btn.btn-success:hover, -.btn.btn-success.disabled:focus, -.btn.btn-success[disabled]:focus, -fieldset[disabled] .btn.btn-success:focus, -.btn.btn-success.disabled.focus, -.btn.btn-success[disabled].focus, -fieldset[disabled] .btn.btn-success.focus, -.btn.btn-success.disabled:active, -.btn.btn-success[disabled]:active, -fieldset[disabled] .btn.btn-success:active, -.btn.btn-success.disabled.active, -.btn.btn-success[disabled].active, -fieldset[disabled] .btn.btn-success.active { - background-color: #22bd89; - border-color: #20b482; -} -.btn.btn-success .badge { - color: #22bd89; - background-color: #fff; -} -.btn.btn-danger { - color: #fff; - background-color: #da2828; - border-color: #d12424; -} -.btn.btn-danger:hover, -.btn.btn-danger:focus, -.btn.btn-danger.focus, -.btn.btn-danger:active, -.btn.btn-danger.active, -.open > .dropdown-toggle.btn.btn-danger { - color: #e6e6e6; - background-color: #c62222; - border-color: #dd3838; -} -.btn.btn-danger:active, -.btn.btn-danger.active, -.open > .dropdown-toggle.btn.btn-danger { - background-image: none; -} -.btn.btn-danger.disabled, -.btn.btn-danger[disabled], -fieldset[disabled] .btn.btn-danger, -.btn.btn-danger.disabled:hover, -.btn.btn-danger[disabled]:hover, -fieldset[disabled] .btn.btn-danger:hover, -.btn.btn-danger.disabled:focus, -.btn.btn-danger[disabled]:focus, -fieldset[disabled] .btn.btn-danger:focus, -.btn.btn-danger.disabled.focus, -.btn.btn-danger[disabled].focus, -fieldset[disabled] .btn.btn-danger.focus, -.btn.btn-danger.disabled:active, -.btn.btn-danger[disabled]:active, -fieldset[disabled] .btn.btn-danger:active, -.btn.btn-danger.disabled.active, -.btn.btn-danger[disabled].active, -fieldset[disabled] .btn.btn-danger.active { - background-color: #da2828; - border-color: #d12424; -} -.btn.btn-danger .badge { - color: #da2828; - background-color: #fff; -} -.btn.btn-warning { - color: #fff; - background-color: #cd8737; - border-color: #c68031; -} -.btn.btn-warning:hover, -.btn.btn-warning:focus, -.btn.btn-warning.focus, -.btn.btn-warning:active, -.btn.btn-warning.active, -.open > .dropdown-toggle.btn.btn-warning { - color: #e6e6e6; - background-color: #bb7a2f; - border-color: #d18f45; -} -.btn.btn-warning:active, -.btn.btn-warning.active, -.open > .dropdown-toggle.btn.btn-warning { - background-image: none; -} -.btn.btn-warning.disabled, -.btn.btn-warning[disabled], -fieldset[disabled] .btn.btn-warning, -.btn.btn-warning.disabled:hover, -.btn.btn-warning[disabled]:hover, -fieldset[disabled] .btn.btn-warning:hover, -.btn.btn-warning.disabled:focus, -.btn.btn-warning[disabled]:focus, -fieldset[disabled] .btn.btn-warning:focus, -.btn.btn-warning.disabled.focus, -.btn.btn-warning[disabled].focus, -fieldset[disabled] .btn.btn-warning.focus, -.btn.btn-warning.disabled:active, -.btn.btn-warning[disabled]:active, -fieldset[disabled] .btn.btn-warning:active, -.btn.btn-warning.disabled.active, -.btn.btn-warning[disabled].active, -fieldset[disabled] .btn.btn-warning.active { - background-color: #cd8737; - border-color: #c68031; -} -.btn.btn-warning .badge { - color: #cd8737; - background-color: #fff; -} -textarea.form-control, -.ace_editor { - border-radius: 4px; -} -.ace_editor { - border: solid 1px #001a20; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - font-family: 'Lucida Grande'; -} -.ace_editor.ace_focus { - border-color: #52dcff; - outline: 0; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 8px rgba(82,220,255,0.6); -} -.modal-content { - background-color: $bg; -} -.jumbotron { - padding: 48px 10px; -} -html { - overflow: hidden; - height: 100%; -} -body { - height: 100%; - overflow: auto; - font-family: "Lato", sans-serif; - color: #99b2b8; - background-color: #001f27; -} -label { - font-family: "Lato", sans-serif; - color: #99b2b8; -} -h1, -h2, -h3, -h4, -h5 { - color: #d5dfe2; - margin: 0; -} -textarea { - resize: vertical; -} -hr { - border-color: #001a20; -} diff --git a/src/browser/shared/styles/bootstrap.styl b/src/browser/shared/styles/bootstrap.styl deleted file mode 100644 index 9ae767fb..00000000 --- a/src/browser/shared/styles/bootstrap.styl +++ /dev/null @@ -1,57 +0,0 @@ -// Override vars and mixins -@import '_vars' -@import 'mixins/*' - -// Core variables and mixins -@import '../../../../node_modules/bootstrap-styl/bootstrap/variables' -@import '../../../../node_modules/bootstrap-styl/bootstrap/mixins' - -// Utilities -@import '../../../../node_modules/bootstrap-styl/bootstrap/utilities' -@import '../../../../node_modules/bootstrap-styl/bootstrap/responsive-utilities' - -// Reset and dependencies -@import '../../../../node_modules/bootstrap-styl/bootstrap/normalize' -@import '../../../../node_modules/bootstrap-styl/bootstrap/print' - -// Core CSS -@import '../../../../node_modules/bootstrap-styl/bootstrap/scaffolding' -@import '../../../../node_modules/bootstrap-styl/bootstrap/type' -// @import '../../../../node_modules/bootstrap-styl/bootstrap/code' -@import '../../../../node_modules/bootstrap-styl/bootstrap/grid' -@import '../../../../node_modules/bootstrap-styl/bootstrap/tables' -@import '../../../../node_modules/bootstrap-styl/bootstrap/forms' -@import '../../../../node_modules/bootstrap-styl/bootstrap/buttons' - -// Components -@import '../../../../node_modules/bootstrap-styl/bootstrap/component-animations' -@import '../../../../node_modules/bootstrap-styl/bootstrap/dropdowns' -@import '../../../../node_modules/bootstrap-styl/bootstrap/button-groups' -@import '../../../../node_modules/bootstrap-styl/bootstrap/input-groups' -@import '../../../../node_modules/bootstrap-styl/bootstrap/navs' -@import '../../../../node_modules/bootstrap-styl/bootstrap/navbar' -// @import '../../../../node_modules/bootstrap-styl/bootstrap/breadcrumbs' -// @import '../../../../node_modules/bootstrap-styl/bootstrap/pagination' -// @import '../../../../node_modules/bootstrap-styl/bootstrap/pager' -@import '../../../../node_modules/bootstrap-styl/bootstrap/labels' -@import '../../../../node_modules/bootstrap-styl/bootstrap/badges' -@import '../../../../node_modules/bootstrap-styl/bootstrap/jumbotron' -@import '../../../../node_modules/bootstrap-styl/bootstrap/thumbnails' -@import '../../../../node_modules/bootstrap-styl/bootstrap/alerts' -@import '../../../../node_modules/bootstrap-styl/bootstrap/progress-bars' -@import '../../../../node_modules/bootstrap-styl/bootstrap/media' -@import '../../../../node_modules/bootstrap-styl/bootstrap/list-group' -@import '../../../../node_modules/bootstrap-styl/bootstrap/panels' -@import '../../../../node_modules/bootstrap-styl/bootstrap/responsive-embed' -@import '../../../../node_modules/bootstrap-styl/bootstrap/wells' -@import '../../../../node_modules/bootstrap-styl/bootstrap/close' - -// Components w/ JavaScript -@import '../../../../node_modules/bootstrap-styl/bootstrap/modals' -@import '../../../../node_modules/bootstrap-styl/bootstrap/tooltip' -@import '../../../../node_modules/bootstrap-styl/bootstrap/popovers' -// @import '../../../../node_modules/bootstrap-styl/bootstrap/carousel' - -// Overrides -@import '_shared' -@import '_index' diff --git a/src/browser/shared/styles/mixins/btn-color.styl b/src/browser/shared/styles/mixins/btn-color.styl deleted file mode 100644 index fa5e3053..00000000 --- a/src/browser/shared/styles/mixins/btn-color.styl +++ /dev/null @@ -1,35 +0,0 @@ -btn-color($color, $background, $border) - color $color - background-color $background - border-color $border - - &:hover, - &:focus, - &.focus, - &:active, - &.active, - .open > .dropdown-toggle& - color dark($background) ? lighten($color, 10%) : darken($color, 10%) - background-color dark($background) ? lighten($background, 10%) : darken($background, 10%) - border-color dark($border) ? lighten($border, 12%) : darken($border, 12%) - - &:active, - &.active, - .open > .dropdown-toggle& - background-image none - - &.disabled, - &[disabled], - fieldset[disabled] & - &, - &:hover, - &:focus, - &.focus, - &:active, - &.active - background-color $background - border-color $border - - .badge - color $background - background-color $color diff --git a/src/browser/shared/styles/mixins/control-glow.styl b/src/browser/shared/styles/mixins/control-glow.styl deleted file mode 100644 index 0d981d94..00000000 --- a/src/browser/shared/styles/mixins/control-glow.styl +++ /dev/null @@ -1,5 +0,0 @@ -controlGlow($color = $input-border-focus) - $color-rgba = rgba(red($color), green($color), blue($color), .6) - border-color $color - outline 0 - box-shadow inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px $color-rgba diff --git a/src/main.js b/src/main.js deleted file mode 100644 index 8b76a5b4..00000000 --- a/src/main.js +++ /dev/null @@ -1,247 +0,0 @@ -var app = require('app') // Module to control application life. -var BrowserWindow = require('browser-window') // Module to create native browser window. - -// Report crashes to our server. -require('crash-reporter').start() - -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the javascript object is GCed. -var mainWindow = null - -// app.on('window-all-closed', function () { -// if (process.platform !== 'darwin') app.quit() -// }) - -var clipboard = require('clipboard') -var Tray = require('tray') -var notifier = require('node-notifier') - -var appIcon = null - -app.on('ready', function () { - appIcon = new Tray(__dirname + '/tray-icon.png') - appIcon.setToolTip('This is my application.') - appIcon.on('clicked', function () { - if (mainWindow == null) { - makeNewMainWindow() - } - mainWindow.show() - }) - - makeNewMainWindow() - - var globalShortcut = require('global-shortcut') - - var popUpWindow = new BrowserWindow({ - width: 600, - height: 400, - show: false, - frame: false, - 'web-preferences': { - 'overlay-scrollbars': true, - 'skip-taskbar': true - } - }) - - popUpWindow.loadUrl('file://' + __dirname + '/browser/popup/index.html') - - app.on('activate-with-no-open-windows', function () { - if (mainWindow == null) { - makeNewMainWindow() - } - mainWindow.show() - }) - - popUpWindow.on('blur', function () { - popUpWindow.hide() - }) - popUpWindow.setVisibleOnAllWorkspaces(true) - - var hidePopUp = function () { - if (fromMain) { - - } else { - mainWindow ? mainWindow.hide() : null - Menu.sendActionToFirstResponder('hide:') - } - - popUpWindow.hide() - } - - var ipc = require('ipc') - ipc.on('hidePopUp', function () { - hidePopUp() - }) - - ipc.on('writeCode', function (e, code) { - clipboard.writeText(code) - notifier.notify({ - title: 'Write on clipboard!', - message: 'Ready to paste', - wait: false - }, function (err, res) { - - }) - hidePopUp() - }) - - var fromMain - // Register a 'ctrl+x' shortcut listener. - globalShortcut.register('ctrl+tab+shift', function () { - if (popUpWindow.isVisible()) { - hidePopUp() - return - } - fromMain = mainWindow ? mainWindow.isFocused() : false - popUpWindow.show() - }) - - // MENU - var Menu = require('menu') - var template = [ - { - label: 'Electron', - submenu: [ - { - label: 'About Electron', - selector: 'orderFrontStandardAboutPanel:' - }, - { - type: 'separator' - }, - { - label: 'Services', - submenu: [] - }, - { - type: 'separator' - }, - { - label: 'Hide Electron', - accelerator: 'Command+H', - selector: 'hide:' - }, - { - label: 'Hide Others', - accelerator: 'Command+Shift+H', - selector: 'hideOtherApplications:' - }, - { - label: 'Show All', - selector: 'unhideAllApplications:' - }, - { - type: 'separator' - }, - { - label: 'Quit', - accelerator: 'Command+Q', - click: function () { app.quit() } - } - ] - }, - { - label: 'Edit', - submenu: [ - { - label: 'Undo', - accelerator: 'Command+Z', - selector: 'undo:' - }, - { - label: 'Redo', - accelerator: 'Shift+Command+Z', - selector: 'redo:' - }, - { - type: 'separator' - }, - { - label: 'Cut', - accelerator: 'Command+X', - selector: 'cut:' - }, - { - label: 'Copy', - accelerator: 'Command+C', - selector: 'copy:' - }, - { - label: 'Paste', - accelerator: 'Command+V', - selector: 'paste:' - }, - { - label: 'Select All', - accelerator: 'Command+A', - selector: 'selectAll:' - } - ] - }, - { - label: 'View', - submenu: [ - { - label: 'Reload', - accelerator: 'Command+R', - click: function () { BrowserWindow.getFocusedWindow().reloadIgnoringCache() } - }, - { - label: 'Toggle DevTools', - accelerator: 'Alt+Command+I', - click: function () { BrowserWindow.getFocusedWindow().toggleDevTools() } - } - ] - }, - { - label: 'Window', - submenu: [ - { - label: 'Minimize', - accelerator: 'Command+M', - selector: 'performMiniaturize:' - }, - { - label: 'Close', - accelerator: 'Command+W', - selector: 'performClose:' - }, - { - type: 'separator' - }, - { - label: 'Bring All to Front', - selector: 'arrangeInFront:' - } - ] - }, - { - label: 'Help', - submenu: [] - } - ] - - var menu = Menu.buildFromTemplate(template) - - Menu.setApplicationMenu(menu) - - function makeNewMainWindow () { - console.log('new Window!') - mainWindow = new BrowserWindow({ - width: 920, - height: 640, - 'web-preferences': { - 'overlay-scrollbars': true - } - }) - - mainWindow.loadUrl('file://' + __dirname + '/browser/main/index.html') - - mainWindow.on('closed', function () { - console.log('main closed') - mainWindow = null - app.dock.hide() - }) - app.dock.show() - } -}) diff --git a/src/package.json b/src/package.json deleted file mode 100644 index da0dd095..00000000 --- a/src/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "codexen-app", - "version": "0.2.0", - "description": "CodeXen App", - "main": "main.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "codexen", - "snippet", - "template", - "task", - "runner", - "remote", - "automator", - "code", - "storage", - "short code" - ], - "author": "Dick Choi (http://kazup.co)", - "license": "No License", - "bugs": { - "url": "https://github.com/Rokt33r/codexen-app/issues" - }, - "homepage": "https://codexen.github.io", - "dependencies": { - "dotenv": "^1.1.0", - "robotjs": "^0.1.2", - "node-notifier": "^4.2.1" - }, -} diff --git a/src/tray-icon.png b/src/tray-icon.png deleted file mode 100644 index fde419910f445628567d7dd480cc0a47eb401195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%B60G|+7Uu?i9vk;pwRP54s> z9G;6n$$n24#}J9jrv2SQu8J(Kf~|i2|Nr08E_w5F^g&$g0<-|Cz z&~(T>@WjJ5B;#lGFR?p^eZN+0Ts-BIWpAB3PbTN2pUdtnu<1?7`6Zw|XT{#*Ck`l` zd&#JlsI)rA$b&DAm9>3GVbzLS?_GlD4p$#&y8O$fJ?!Da_^%7yvrfN$P=BX#ljTQd YV{tY{9&K}Dpwk#UUHx3vIVCg!0I+v-LjV8( diff --git a/src/tray-icon@2x.png b/src/tray-icon@2x.png deleted file mode 100644 index c615b96079781508d270d878efa6001e208adfef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaO00(?STeKHGuNe3L+kuQKI2$lr-1v9v+rm^V0<294K(y~0bWXg$6QCERZ zV9fM%aSX9IJvG>I+EE1#VUgCZu=n*h9dqw*-`_nm@u8aGk%n`BHwXPQ`sh?`=--(6E#TBz(<~F8 z12Vr8zT8Wm+H|Dkbi`p6_4#bNZAq;LIk7C+T&rx}`L!)_n=kjV!R diff --git a/src/tray-icon@4x.png b/src/tray-icon@4x.png deleted file mode 100644 index 25c9f14bb51b28856f5b7498266354db7c5b5ffc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1569 zcmV++2HyFJP)Px#Fi=cXMNDaNO-)TrO-)TrO-)TrO-)TrO-)TrO-)Tr zO-)TrO-)TrO-)TrO-)TrO-)TrO`8g%(f|Me4|GyaQve;0+CdIVfNeP{T*B|E@sAQs z000GaNkloI--<;MuO4&Mp83zF%8L< z1~O$$ri1E+q{4X7GF0Z!gy}{#&IFf@hTxwl;=|m=14e_H>&9LdHImRomaOG^|NVZw zzuq5z`mFb<{BjPTd++(4bI$?zf9cEeR*nwtfd2EdEdd_R{2t8_0B$um0OYxH1AwD3 zHvrfs*D>209yS9&LH9Zi%2=qfQvR1YzOTk-21_TO*I5r3jt*b@2t~!Rs13>55-gmvC@YD}IGksX{%7=UiTBf5FI0jB|r%8FZdaNNb4NjDZ~3PKGLl5Wf)<(A9q zwi+COHPx<}zsgNmUc{nOsi?e}??b=9z0~{~HCHCEgqWhbCgoBw1S9yA?-289nlAUf z{(Asah8XIW%k>Q8`zCSnaP#7$K9nAJ{=g77x68E%Yko|%E!=*O{Qbh)Pmr^!g-IT{ zL-Kpz_LFT>^Y-&s=uuYik(f4qi^#>!9^)FebX?(A^$$GD)pxf`esCO3wea)X_9sr zB^dlV;H(u9tMCQ;Q3uw;9ti-kkwypJZwB!*uW1CK_DBF|JJ;wyBBDmmraHh<%Lah` zMAU&q#0_2qDdMCA0A~<8h={&?J&1MSem)xj)}e7b5)kRALnt6GRY+NCISh6rAd;?3 z$w@cvtC8!mhdStpHJ-2JTNNBEmkUP^sc`hEaE39?BKWRG$O zib#{FpzAoPUi37%OnV^bWFg8RQYser4qPJdpMBS3-UH=#YYqglg2nwPPRvr@E&?#? zfh^naK^er4@XBM@@MB++0<@=}weMUe9^C;WRQMc!K9NB66aZG?B^_mb6hw3f#FV2v zmq4jAOr{o58+)Fi-Ad4Q`Rd6mPR;G^{FGBeW+iL(K zwd@u*KL6*i;hM?bGysvB{A^XTKC0k@Cl7QzMZ=u|m<=k9fO2Ng8!5@}pT&ozipl_B zuk1ieC+?%d!w Date: Tue, 28 Jul 2015 23:56:50 +0900 Subject: [PATCH 48/79] add Finder & update main.js & cleanup some old files --- Gulpfile.js | 129 ----------- browser/finder/Components/FinderDetail.jsx | 43 ++++ browser/finder/Components/FinderInput.jsx | 15 ++ browser/finder/Components/FinderList.jsx | 69 ++++++ browser/finder/index.electron.html | 53 +++++ browser/finder/index.html | 0 browser/finder/index.jsx | 188 +++++++++++++++ browser/main/Components/BlueprintForm.jsx | 4 +- .../main/Components/PersonalSettingModal.jsx | 2 +- .../main/Components/PlanetAddUserModal.jsx | 4 +- .../main/Components/PlanetSettingModal.jsx | 4 +- browser/main/Components/SnippetForm.jsx | 6 +- browser/main/Containers/MainContainer.jsx | 114 ++++++--- browser/main/Containers/UserContainer.jsx | 4 +- browser/main/Stores/AuthStore.js | 2 +- browser/main/Stores/PlanetStore.js | 59 ++++- browser/main/index.electron.html | 4 +- browser/styles/finder/index.styl | 77 ++++++ build.config.js | 48 ---- config.js | 4 + docs/events.md | 7 - main.js | 219 ++++++++++++++++-- package.json | 6 +- tray-icon.png | Bin 0 -> 463 bytes tray-icon@2x.png | Bin 0 -> 924 bytes tray-icon@4x.png | Bin 0 -> 2410 bytes 26 files changed, 811 insertions(+), 250 deletions(-) delete mode 100644 Gulpfile.js create mode 100644 browser/finder/Components/FinderDetail.jsx create mode 100644 browser/finder/Components/FinderInput.jsx create mode 100644 browser/finder/Components/FinderList.jsx create mode 100644 browser/finder/index.electron.html create mode 100644 browser/finder/index.html create mode 100644 browser/finder/index.jsx create mode 100644 browser/styles/finder/index.styl delete mode 100644 build.config.js create mode 100644 config.js delete mode 100644 docs/events.md create mode 100644 tray-icon.png create mode 100644 tray-icon@2x.png create mode 100644 tray-icon@4x.png diff --git a/Gulpfile.js b/Gulpfile.js deleted file mode 100644 index 405da03b..00000000 --- a/Gulpfile.js +++ /dev/null @@ -1,129 +0,0 @@ -var gulp = require('gulp') -var styl = require('gulp-stylus') -var autoprefixer = require('gulp-autoprefixer') -var del = require('del') -var runSequence = require('run-sequence') -var plumber = require('gulp-plumber') -var notify = require('gulp-notify') -var rename = require('gulp-rename') -var livereload = require('gulp-livereload') -var inject = require('gulp-inject') - -// for Dist -var rev = require('gulp-rev') -var ngAnnotate = require('gulp-ng-annotate') -var templateCache = require('gulp-angular-templatecache') -var uglify = require('gulp-uglify') -var minifyCss = require('gulp-minify-css') -var merge = require('merge-stream') -var concat = require('gulp-concat') -var minifyHtml = require('gulp-minify-html') - -var config = require('./build.config.js') - -gulp.task('build', function () { - var tpls = gulp.src(['src/browser/main/**/*.html','!src/browser/main/index.html','!src/browser/main/index.inject.html']) - .pipe(templateCache({})) - .pipe(concat('tpls.js')) - .pipe(ngAnnotate()) - .pipe(uglify()) - .pipe(gulp.dest('build')) - var js = gulp.src(['src/browser/main/**/*.js', 'src/browser/shared/**/*.js']) - .pipe(concat('app.js')) - .pipe(ngAnnotate()) - .pipe(uglify()) - .pipe(gulp.dest('build')) - var css = gulp.src(['src/browser/main/**/*.css', 'src/browser/shared/**/*.css']) - .pipe(concat('all.css')) - .pipe(minifyCss()) - .pipe(gulp.dest('build')) - return merge(tpls, js, css) -}) - -gulp.task('vendor', function () { - var vendors = config.vendors - - var vendorFiles = vendors.map(function (vendor) { - return vendor.src - }) - - vendorFiles.push('node_modules/font-awesome/**/font-awesome.css') - vendorFiles.push('node_modules/font-awesome/**/fontawesome-webfont.*') - vendorFiles.push('node_modules/font-awesome/**/FontAwesome.*') - - return gulp.src(vendorFiles) - .pipe(gulp.dest('src/browser/vendor')) -}) - -gulp.task('styl', function () { - return gulp.src('src/browser/main/styles/app.styl') - .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')})) - .pipe(styl()) - .pipe(autoprefixer()) - .pipe(gulp.dest('src/browser/main/styles/')) - .pipe(livereload()) - .pipe(notify('Stylus!!')) -}) - -gulp.task('styl-popup', function () { - return gulp.src('src/browser/popup/styles/app.styl') - .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')})) - .pipe(styl()) - .pipe(autoprefixer()) - .pipe(gulp.dest('src/browser/popup/styles/')) - .pipe(livereload()) - .pipe(notify('Stylus!! @POPUP')) -}) - -gulp.task('bs', function () { - return gulp.src('src/browser/shared/styles/bootstrap.styl') - .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')})) - .pipe(styl()) - .pipe(autoprefixer()) - .pipe(gulp.dest('src/browser/shared/styles')) - .pipe(notify('Bootstrap compiled!!')) - .pipe(livereload()) -}) - -gulp.task('inject', function (cb) { - runSequence(['inject-main', 'inject-popup'], cb) -}) - -gulp.task('inject-main', function () { - return gulp.src('src/browser/main/index.inject.html') - .pipe(inject(gulp.src(['src/browser/main/**/*.js', 'src/browser/main/**/*.css', 'src/browser/shared/**/*.js', 'src/browser/shared/**/*.css'], {read: false}), { - relative: true - })) - .pipe(rename(function (path) { - path.basename = 'index' - })) - .pipe(gulp.dest('src/browser/main/')) -}) - -gulp.task('watch-main', function () { - gulp.watch( - ['src/browser/main/index.inject.html', 'src/browser/main/**/*.js', 'src/browser/main/**/*.css', 'src/browser/shared/**/*.js', 'src/browser/shared/**/*.css'], ['inject-main']) - - gulp.watch('src/browser/main/styles/**/*.styl', ['styl']) - gulp.watch('src/browser/popup/styles/**/*.styl', ['styl-popup']) - gulp.watch('src/browser/shared/styles/**/*.styl', ['bs']) - livereload.listen() -}) -gulp.task('inject-popup', function () { - return gulp.src('src/browser/popup/index.inject.html') - .pipe(inject(gulp.src(['src/browser/popup/**/*.js', 'src/browser/popup/**/*.css', 'src/browser/shared/**/*.js', 'src/browser/shared/**/*.css'], {read: false}), { - relative: true - })) - .pipe(rename(function (path) { - path.basename = 'index' - })) - .pipe(gulp.dest('src/browser/popup/')) -}) - -gulp.task('del', function (cb) { - del(['build/**/*'], cb) -}) - -gulp.task('default', function (cb) { - runSequence('del', 'build', 'watch', cb) -}) diff --git a/browser/finder/Components/FinderDetail.jsx b/browser/finder/Components/FinderDetail.jsx new file mode 100644 index 00000000..7a56f3f0 --- /dev/null +++ b/browser/finder/Components/FinderDetail.jsx @@ -0,0 +1,43 @@ +var React = require('react/addons') + +var CodeViewer = require('../../main/Components/CodeViewer') + +var Markdown = require('../../main/Mixins/Markdown') + +module.exports = React.createClass({ + mixins: [Markdown], + propTypes: { + currentArticle: React.PropTypes.object + }, + render: function () { + var article = this.props.currentArticle + + if (article != null) { + if (article.type === 'snippet') { + return ( +
    +
    {article.callSign}
    +
    + +
    +
    + ) + } else if (article.type === 'blueprint') { + + return ( +
    +
    {article.title}
    +
    +
    +
    +
    + ) + } + } + return ( +
    +
    Nothing selected
    +
    + ) + } +}) diff --git a/browser/finder/Components/FinderInput.jsx b/browser/finder/Components/FinderInput.jsx new file mode 100644 index 00000000..467d5a40 --- /dev/null +++ b/browser/finder/Components/FinderInput.jsx @@ -0,0 +1,15 @@ +var React = require('react/addons') + +module.exports = React.createClass({ + propTypes: { + onChange: React.PropTypes.func, + search: React.PropTypes.string + }, + render: function () { + return ( +
    + +
    + ) + } +}) diff --git a/browser/finder/Components/FinderList.jsx b/browser/finder/Components/FinderList.jsx new file mode 100644 index 00000000..2227f9f1 --- /dev/null +++ b/browser/finder/Components/FinderList.jsx @@ -0,0 +1,69 @@ +var React = require('react/addons') + +module.exports = React.createClass({ + propTypes: { + articles: React.PropTypes.arrayOf, + currentArticle: React.PropTypes.shape({ + id: React.PropTypes.number, + type: React.PropTypes.string + }) + }, + componentDidUpdate: function () { + var index = this.props.articles.indexOf(this.props.currentArticle) + var el = React.findDOMNode(this) + var li = el.querySelectorAll('li')[index] + + var overflowBelow = el.clientHeight + el.scrollTop < li.offsetTop + li.clientHeight + if (overflowBelow) { + el.scrollTop = li.offsetTop + li.clientHeight - el.clientHeight + } + var overflowAbove = el.scrollTop > li.offsetTop + if (overflowAbove) { + el.scrollTop = li.offsetTop + } + }, + render: function () { + var list = this.props.articles.map(function (article) { + if (article == null) { + return ( +
  • +
    Undefined
    +
    +
  • + ) + } + + var isActive = this.props.currentArticle != null && (article.type === this.props.currentArticle.type && article.id === this.props.currentArticle.id) + if (article.type === 'snippet') { + return ( +
  • +
    {article.callSign} / {article.description.substring(0, 10)}
    +
    +
  • + ) + } + if (article.type === 'blueprint') { + return ( +
  • +
    {article.title}
    +
    +
  • + ) + } + return ( +
  • +
    Undefined
    +
    +
  • + ) + }.bind(this)) + + return ( +
    +
      + {list} +
    +
    + ) + } +}) diff --git a/browser/finder/index.electron.html b/browser/finder/index.electron.html new file mode 100644 index 00000000..c20faec7 --- /dev/null +++ b/browser/finder/index.electron.html @@ -0,0 +1,53 @@ + + + + CodeXen Popup + + + + + + +
    + + + + diff --git a/browser/finder/index.html b/browser/finder/index.html new file mode 100644 index 00000000..e69de29b diff --git a/browser/finder/index.jsx b/browser/finder/index.jsx new file mode 100644 index 00000000..2a76d444 --- /dev/null +++ b/browser/finder/index.jsx @@ -0,0 +1,188 @@ +/* global localStorage */ +var remote = require('remote') +var hideFinder = remote.getGlobal('hideFinder') +var clipboard = require('clipboard') + +var React = require('react/addons') + +var FinderInput = require('./Components/FinderInput') +var FinderList = require('./Components/FinderList') +var FinderDetail = require('./Components/FinderDetail') + +// filter start +function basicFilter (keyword, articles) { + if (keyword === '' || keyword == null) return articles + var firstFiltered = articles.filter(function (article) { + + var first = article.type === 'snippet' ? article.callSign : article.title + if (first.match(new RegExp(keyword, 'i'))) return true + + return false + }) + + var secondFiltered = articles.filter(function (article) { + var second = article.type === 'snippet' ? article.description : article.content + if (second.match(new RegExp(keyword, 'i'))) return true + + return false + }) + + var thirdFiltered = articles.filter(function (article) { + if (article.type === 'snippet') { + if (article.content.match(new RegExp(keyword, 'i'))) return true + } + return false + }) + + return firstFiltered.concat(secondFiltered, thirdFiltered).filter(function (value, index, self) { + return self.indexOf(value) === index + }) +} + +function snippetFilter (articles) { + return articles.filter(function (article) { + return article.type === 'snippet' + }) +} + +function blueprintFilter (articles) { + return articles.filter(function (article) { + return article.type === 'blueprint' + }) +} + +function tagFilter (keyword, articles) { + return articles.filter(function (article) { + return article.Tags.some(function (tag) { + return tag.name.match(new RegExp('^' + keyword, 'i')) + }) + }) +} + +function searchArticle (search, articles) { + var keywords = search.split(' ') + + for (var keyword of keywords) { + if (keyword.match(/^\$s/, 'i')) { + articles = snippetFilter(articles) + continue + } else if (keyword.match(/^\$b/, 'i')) { + articles = blueprintFilter(articles) + continue + } else if (keyword.match(/^#[A-Za-z0-9]+/)) { + articles = tagFilter(keyword.substring(1, keyword.length), articles) + continue + } + articles = basicFilter(keyword, articles) + } + + return articles +} +// Filter end + +function fetchArticles () { + var user = JSON.parse(localStorage.getItem('user')) + if (user == null) { + console.log('need to login') + return [] + } + + var articles = [] + user.Planets.forEach(function (planet) { + var _planet = JSON.parse(localStorage.getItem('planet-' + planet.id)) + articles = articles.concat(_planet.Snippets, _planet.Blueprints) + }) + console.log(articles.length + ' articles') + + return articles +} + +var Finder = React.createClass({ + getInitialState: function () { + var articles = fetchArticles() + return { + articles: articles, + currentArticle: articles[0], + search: '' + } + }, + componentDidMount: function () { + document.addEventListener('keydown', this.handleKeyDown) + document.addEventListener('click', this.handleClick) + window.addEventListener('focus', this.handleFinderFocus) + }, + componentWillUnmount: function () { + document.removeEventListener('keydown', this.handleKeyDown) + document.removeEventListener('click', this.handleClick) + window.removeEventListener('focus', this.handleFinderFocus) + }, + handleFinderFocus: function () { + console.log('focusseeddddd') + this.focusInput() + var articles = fetchArticles() + this.setState({ + articles: articles, + currentArticle: articles[0], + search: '' + }) + }, + handleKeyDown: function (e) { + if (e.keyCode === 38) { + this.selectPrevious() + e.preventDefault() + } + + if (e.keyCode === 40) { + this.selectNext() + e.preventDefault() + } + + if (e.keyCode === 13) { + var article = this.state.currentArticle + if (article.type === 'snippet') { + clipboard.writeText(article.content) + hideFinder() + e.preventDefault() + } + } + if (e.keyCode === 27) { + hideFinder() + e.preventDefault() + } + }, + focusInput: function () { + React.findDOMNode(this.refs.finderInput).querySelector('input').focus() + }, + handleClick: function () { + this.focusInput() + }, + selectPrevious: function () { + var index = this.refs.finderList.props.articles.indexOf(this.state.currentArticle) + if (index > 0) { + this.setState({currentArticle: this.refs.finderList.props.articles[index - 1]}) + } + }, + selectNext: function () { + var index = this.refs.finderList.props.articles.indexOf(this.state.currentArticle) + if (index > -1 && index < this.refs.finderList.props.articles.length - 1) { + this.setState({currentArticle: this.refs.finderList.props.articles[index + 1]}) + } + }, + handleChange: function (e) { + this.setState({search: e.target.value}, function () { + this.setState({currentArticle: this.refs.finderList.props.articles[0]}) + }) + }, + render: function () { + var articles = searchArticle(this.state.search, this.state.articles) + return ( +
    + + + +
    + ) + } +}) + +React.render(, document.getElementById('content')) diff --git a/browser/main/Components/BlueprintForm.jsx b/browser/main/Components/BlueprintForm.jsx index 1c1fe04e..72f06505 100644 --- a/browser/main/Components/BlueprintForm.jsx +++ b/browser/main/Components/BlueprintForm.jsx @@ -7,9 +7,11 @@ var Select = require('react-select') var request = require('superagent') var PlanetActions = require('../Actions/PlanetActions') +var apiUrl = require('../../../config').apiUrl + var getOptions = function (input, callback) { request - .get('http://localhost:8000/tags/search') + .get(apiUrl + 'tags/search') .query({name: input}) .send() .end(function (err, res) { diff --git a/browser/main/Components/PersonalSettingModal.jsx b/browser/main/Components/PersonalSettingModal.jsx index 09206ec7..12b032d3 100644 --- a/browser/main/Components/PersonalSettingModal.jsx +++ b/browser/main/Components/PersonalSettingModal.jsx @@ -8,7 +8,7 @@ var AuthActions = require('../Actions/AuthActions') var AuthStore = require('../Stores/AuthStore') -var apiUrl = 'http://localhost:8000/' +var apiUrl = require('../../../config').apiUrl module.exports = React.createClass({ mixins: [Catalyst.LinkedStateMixin], diff --git a/browser/main/Components/PlanetAddUserModal.jsx b/browser/main/Components/PlanetAddUserModal.jsx index 7342edf8..db237df5 100644 --- a/browser/main/Components/PlanetAddUserModal.jsx +++ b/browser/main/Components/PlanetAddUserModal.jsx @@ -7,9 +7,11 @@ var Catalyst = require('../Mixins/Catalyst') var PlanetActions = require('../Actions/PlanetActions') +var apiUrl = require('../../../config').apiUrl + var getOptions = function (input, callback) { request - .get('http://localhost:8000/users/search') + .get(apiUrl + 'users/search') .query({name: input}) .send() .end(function (err, res) { diff --git a/browser/main/Components/PlanetSettingModal.jsx b/browser/main/Components/PlanetSettingModal.jsx index f196811c..d3198f31 100644 --- a/browser/main/Components/PlanetSettingModal.jsx +++ b/browser/main/Components/PlanetSettingModal.jsx @@ -6,9 +6,11 @@ var Catalyst = require('../Mixins/Catalyst') var PlanetActions = require('../Actions/PlanetActions') +var apiUrl = require('../../../config').apiUrl + var getOptions = function (input, callback) { request - .get('http://localhost:8000/users/search') + .get(apiUrl + 'users/search') .query({name: input}) .send() .end(function (err, res) { diff --git a/browser/main/Components/SnippetForm.jsx b/browser/main/Components/SnippetForm.jsx index 384e0026..4a5dca11 100644 --- a/browser/main/Components/SnippetForm.jsx +++ b/browser/main/Components/SnippetForm.jsx @@ -6,9 +6,11 @@ var Select = require('react-select') var request = require('superagent') var PlanetActions = require('../Actions/PlanetActions') +var apiUrl = require('../../../config').apiUrl + var getOptions = function (input, callback) { request - .get('http://localhost:8000/tags/search') + .get(apiUrl + 'tags/search') .query({name: input}) .send() .end(function (err, res) { @@ -22,7 +24,7 @@ var getOptions = function (input, callback) { label: tag.name, value: tag.name } - }), + }), complete: false }) }) diff --git a/browser/main/Containers/MainContainer.jsx b/browser/main/Containers/MainContainer.jsx index 76175980..95ed15b5 100644 --- a/browser/main/Containers/MainContainer.jsx +++ b/browser/main/Containers/MainContainer.jsx @@ -1,47 +1,87 @@ +/* global localStorage */ var React = require('react/addons') var ReactRouter = require('react-router') var RouteHandler = ReactRouter.RouteHandler +var request = require('superagent') var AuthStore = require('../Stores/AuthStore') +var apiUrl = require('../../../config').apiUrl + +function fetchPlanet (planet) { + request + .get(apiUrl + planet.userName + '/' + planet.name) + .send() + .end(function (err, res) { + if (err) { + console.error(err) + return + } + + var _planet = res.body + _planet.userName = planet.userName + + _planet.Snippets = _planet.Snippets.map(function (snippet) { + snippet.type = 'snippet' + return snippet + }) + + _planet.Blueprints = _planet.Blueprints.map(function (blueprint) { + blueprint.type = 'blueprint' + return blueprint + }) + + localStorage.setItem('planet-' + _planet.id, JSON.stringify(_planet)) + console.log('planet-' + _planet.id + ' fetched') + }) +} + module.exports = React.createClass({ - mixins: [ReactRouter.Navigation, ReactRouter.State], - componentDidMount: function () { - this.unsubscribe = AuthStore.listen(this.onListen) - }, - componentWillUnmount: function () { - this.unsubscribe() - }, - onListen: function (res) { - if (res == null || res.status == null) { - return - } + mixins: [ReactRouter.Navigation, ReactRouter.State], + componentDidMount: function () { + this.unsubscribe = AuthStore.listen(this.onListen) - if (res.status === 'loggedIn' || res.status === 'registered') { - var user = res.data - var planet = user.Planets.length > 0 ? user.Planets[0] : null - if (planet == null) { - this.transitionTo('user', {userName: user.name}) - return - } - this.transitionTo('planetHome', {userName: user.name, planetName: planet.name}) - return - } - - if (res.status === 'loggedOut') { - this.transitionTo('login') - return - } - }, - render: function () { - // Redirect Login state - if (this.getPath() === '/') { - this.transitionTo('/login') - } - return ( -
    - -
    - ) + var user = JSON.parse(localStorage.getItem('user')) + if (user != null) { + user.Planets.forEach(fetchPlanet) + return } + this.transitionTo('login') + }, + componentWillUnmount: function () { + this.unsubscribe() + }, + onListen: function (res) { + if (res == null || res.status == null) { + return + } + + if (res.status === 'loggedIn' || res.status === 'registered') { + var user = res.data + var planet = user.Planets.length > 0 ? user.Planets[0] : null + if (planet == null) { + this.transitionTo('user', {userName: user.name}) + return + } + this.transitionTo('planetHome', {userName: user.name, planetName: planet.name}) + + return + } + + if (res.status === 'loggedOut') { + this.transitionTo('login') + return + } + }, + render: function () { + // Redirect Login state + if (this.getPath() === '/') { + this.transitionTo('/login') + } + return ( +
    + +
    + ) + } }) diff --git a/browser/main/Containers/UserContainer.jsx b/browser/main/Containers/UserContainer.jsx index c9e653be..a82f7f76 100644 --- a/browser/main/Containers/UserContainer.jsx +++ b/browser/main/Containers/UserContainer.jsx @@ -10,6 +10,8 @@ var UserNavigator = require('../Components/UserNavigator') var AuthStore = require('../Stores/AuthStore') var PlanetStore = require('../Stores/PlanetStore') +var apiUrl = require('../../../config').apiUrl + module.exports = React.createClass({ mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation, ReactRouter.State], propTypes: { @@ -44,7 +46,7 @@ module.exports = React.createClass({ }, fetchUser: function (userName) { request - .get('http://localhost:8000/' + userName) + .get(apiUrl + userName) .send() .end(function (err, res) { if (err) { diff --git a/browser/main/Stores/AuthStore.js b/browser/main/Stores/AuthStore.js index a7f0780c..bc29dd35 100644 --- a/browser/main/Stores/AuthStore.js +++ b/browser/main/Stores/AuthStore.js @@ -4,7 +4,7 @@ var request = require('superagent') var AuthActions = require('../Actions/AuthActions') -var apiUrl = 'http://localhost:8000/' +var apiUrl = require('../../../config').apiUrl var AuthStore = Reflux.createStore({ init: function () { diff --git a/browser/main/Stores/PlanetStore.js b/browser/main/Stores/PlanetStore.js index 56dbd025..e5feda88 100644 --- a/browser/main/Stores/PlanetStore.js +++ b/browser/main/Stores/PlanetStore.js @@ -4,7 +4,7 @@ var request = require('superagent') var PlanetActions = require('../Actions/PlanetActions') -var apiUrl = 'http://localhost:8000/' +var apiUrl = require('../../../config').apiUrl var PlanetStore = Reflux.createStore({ init: function () { @@ -70,6 +70,8 @@ var PlanetStore = Reflux.createStore({ return blueprint }) + localStorage.setItem('planet-' + planet.id, JSON.stringify(planet)) + planet.Articles = planet.Snippets.concat(planet.Blueprints).sort(function (a, b) { a = new Date(a.updatedAt) b = new Date(b.updatedAt) @@ -94,6 +96,7 @@ var PlanetStore = Reflux.createStore({ } var planet = res.body + localStorage.remove('planet-' + planet.id) this.trigger({ status: 'planetDeleted', @@ -186,6 +189,11 @@ var PlanetStore = Reflux.createStore({ .end(function (req, res) { var snippet = res.body snippet.type = 'snippet' + + var planet = JSON.parse(localStorage.getItem('planet-' + snippet.PlanetId)) + planet.Snippets.unshift(snippet) + localStorage.setItem('planet-' + snippet.PlanetId, JSON.stringify(planet)) + this.trigger({ status: 'articleCreated', data: snippet @@ -209,6 +217,17 @@ var PlanetStore = Reflux.createStore({ var snippet = res.body snippet.type = 'snippet' + + var planet = JSON.parse(localStorage.getItem('planet-' + snippet.PlanetId)) + planet.Snippets.some(function (_snippet, index) { + if (snippet.id === _snippet) { + planet.Snippets[index] = snippet + return true + } + return false + }) + localStorage.setItem('planet-' + snippet.PlanetId, JSON.stringify(planet)) + this.trigger({ status: 'articleUpdated', data: snippet @@ -230,6 +249,17 @@ var PlanetStore = Reflux.createStore({ } var snippet = res.body + + var planet = JSON.parse(localStorage.getItem('planet-' + snippet.PlanetId)) + planet.Snippets.some(function (_snippet, index) { + if (snippet.id === _snippet) { + planet.splice(index, 1) + return true + } + return false + }) + localStorage.setItem('planet-' + snippet.PlanetId, JSON.stringify(planet)) + this.trigger({ status: 'articleDeleted', data: snippet @@ -247,6 +277,11 @@ var PlanetStore = Reflux.createStore({ .end(function (req, res) { var blueprint = res.body blueprint.type = 'blueprint' + + var planet = JSON.parse(localStorage.getItem('planet-' + blueprint.PlanetId)) + planet.Blueprints.unshift(blueprint) + localStorage.setItem('planet-' + blueprint.PlanetId, JSON.stringify(planet)) + this.trigger({ status: 'articleCreated', data: blueprint @@ -270,6 +305,17 @@ var PlanetStore = Reflux.createStore({ var blueprint = res.body blueprint.type = 'blueprint' + + var planet = JSON.parse(localStorage.getItem('planet-' + blueprint.PlanetId)) + planet.Blueprints.some(function (_blueprint, index) { + if (blueprint.id === _blueprint) { + planet.Blueprints[index] = blueprint + return true + } + return false + }) + localStorage.setItem('planet-' + blueprint.PlanetId, JSON.stringify(blueprint)) + this.trigger({ status: 'articleUpdated', data: blueprint @@ -291,6 +337,17 @@ var PlanetStore = Reflux.createStore({ } var blueprint = res.body + + var planet = JSON.parse(localStorage.getItem('planet-' + blueprint.PlanetId)) + planet.Blueprints.some(function (_blueprint, index) { + if (blueprint.id === _blueprint) { + planet.splice(index, 1) + return true + } + return false + }) + localStorage.setItem('planet-' + blueprint.PlanetId, JSON.stringify(planet)) + this.trigger({ status: 'articleDeleted', data: blueprint diff --git a/browser/main/index.electron.html b/browser/main/index.electron.html index a47dc8a7..f7e105be 100644 --- a/browser/main/index.electron.html +++ b/browser/main/index.electron.html @@ -5,7 +5,7 @@ - + diff --git a/browser/styles/finder/index.styl b/browser/styles/finder/index.styl new file mode 100644 index 00000000..e956490d --- /dev/null +++ b/browser/styles/finder/index.styl @@ -0,0 +1,77 @@ +@import '../../../node_modules/nib/lib/nib' +@import '../vars' +@import '../mixins/*' +global-reset() +@import '../shared/*' + +body + font-family "Lato" + color textColor + font-size fontSize + +.Finder + absolute top bottom left right + .FinderInput + position absolute + top 11px + left 11px + right 11px + margin 0 auto + height 44px + box-sizing border-box + border-bottom solid 1px borderColor + input + display block + width 100% + border solid 1px borderColor + padding 0 10px + font-size 1em + height 33px + border-radius 5px + box-sizing border-box + border-radius 16.5px + &:focus, &.focus + border-color brandBorderColor + outline none + .FinderList + absolute left bottom + top 55px + border-right solid 1px borderColor + box-sizing border-box + width 250px + overflow-y auto + &>ul>li + .articleItem + padding 10px + border solid 2px transparent + box-sizing border-box + .divider + box-sizing border-box + border-bottom solid 1px borderColor + &.active + .articleItem + border-color brandColor + + .FinderDetail + absolute right bottom + top 55px + left 250px + .header + absolute top left right + height 44px + box-sizing border-box + padding 0 10px + border-bottom solid 1px borderColor + line-height 44px + font-size 1.3em + .content + .ace_editor, .marked + position absolute + top 49px + left 5px + right 5px + bottom 5px + box-sizing border-box + .marked + marked() + overflow-y auto diff --git a/build.config.js b/build.config.js deleted file mode 100644 index d5e96a58..00000000 --- a/build.config.js +++ /dev/null @@ -1,48 +0,0 @@ -module.exports = { - vendors: [ - { - name: 'ace', - src: 'node_modules/@rokt33r/ace-builds/src/**/*' - }, - { - name: 'angular', - src: 'node_modules/angular/angular.js' - }, - { - name: 'angular-bootstrap', - src: 'node_modules/angular-bootstrap/dist/ui-bootstrap-tpls.js' - }, - { - name: 'angular-sanitize', - src: 'node_modules/angular-sanitize/angular-sanitize.js' - }, - { - name: 'angular-ui-router', - src: 'node_modules/angular-ui-router/build/angular-ui-router.js' - }, - { - name: 'ui-select', - src: 'node_modules/ui-select/dist/select.js' - }, - { - name: 'satellizer', - src: 'node_modules/satellizer/satellizer.js' - }, - { - name: 'angular-md5', - src: 'node_modules/angular-md5/angular-md5.js' - }, - { - name: 'moment', - src: 'node_modules/moment/moment.js' - }, - { - name: 'angular-hotkeys', - src: 'node_modules/angular-hotkeys/build/hotkeys.js' - }, - { - name: 'marked', - src: 'node_modules/marked/lib/marked.js' - } - ] -} diff --git a/config.js b/config.js new file mode 100644 index 00000000..8df966ca --- /dev/null +++ b/config.js @@ -0,0 +1,4 @@ +module.exports = { + apiUrl: 'http://codexen-server-dex2-ezebi636yb.elasticbeanstalk.com/' + // apiUrl: 'http://localhost:8000/' +} diff --git a/docs/events.md b/docs/events.md deleted file mode 100644 index 62643c5f..00000000 --- a/docs/events.md +++ /dev/null @@ -1,7 +0,0 @@ -# Event List - -|name|Description|Delivery| -|----|----|----| -|userSignIn|a user signed in|| -|userSignOut|a user signed out|| -|snippetUpdated|snippet has been updated or created|snippet| diff --git a/main.js b/main.js index 61a35e00..1a460f40 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,7 @@ var app = require('app') // Module to control application life. var BrowserWindow = require('browser-window') // Module to create native browser window. - +var Menu = require('menu') +var Tray = require('tray') // Report crashes to our server. require('crash-reporter').start() @@ -13,25 +14,209 @@ var mainWindow = null // }) app.on('ready', function () { + // menu start + var template = [ + { + label: 'Electron', + submenu: [ + { + label: 'About Electron', + selector: 'orderFrontStandardAboutPanel:' + }, + { + type: 'separator' + }, + { + label: 'Services', + submenu: [] + }, + { + type: 'separator' + }, + { + label: 'Hide Electron', + accelerator: 'Command+H', + selector: 'hide:' + }, + { + label: 'Hide Others', + accelerator: 'Command+Shift+H', + selector: 'hideOtherApplications:' + }, + { + label: 'Show All', + selector: 'unhideAllApplications:' + }, + { + type: 'separator' + }, + { + label: 'Quit', + accelerator: 'Command+Q', + selector: 'terminate:' + } + ] + }, + { + label: 'Edit', + submenu: [ + { + label: 'Undo', + accelerator: 'Command+Z', + selector: 'undo:' + }, + { + label: 'Redo', + accelerator: 'Shift+Command+Z', + selector: 'redo:' + }, + { + type: 'separator' + }, + { + label: 'Cut', + accelerator: 'Command+X', + selector: 'cut:' + }, + { + label: 'Copy', + accelerator: 'Command+C', + selector: 'copy:' + }, + { + label: 'Paste', + accelerator: 'Command+V', + selector: 'paste:' + }, + { + label: 'Select All', + accelerator: 'Command+A', + selector: 'selectAll:' + } + ] + }, + { + label: 'View', + submenu: [ + { + label: 'Reload', + accelerator: 'Command+R', + click: function () { + BrowserWindow.getFocusedWindow().reload() + } + }, + { + label: 'Toggle DevTools', + accelerator: 'Alt+Command+I', + click: function () { + BrowserWindow.getFocusedWindow().toggleDevTools() + } + } + ] + }, + { + label: 'Window', + submenu: [ + { + label: 'Minimize', + accelerator: 'Command+M', + selector: 'performMiniaturize:' + }, + { + label: 'Close', + accelerator: 'Command+W', + selector: 'performClose:' + }, + { + type: 'separator' + }, + { + label: 'Bring All to Front', + selector: 'arrangeInFront:' + } + ] + }, + { + label: 'Help', + submenu: [] + } + ] + + var menu = Menu.buildFromTemplate(template) + + Menu.setApplicationMenu(menu) + // menu end + var appIcon = new Tray(__dirname + '/tray-icon.png') + appIcon.setToolTip('This is my application.') + appIcon.on('clicked', function () { + if (mainWindow == null) { + makeNewMainWindow() + } + mainWindow.show() + }) + makeNewMainWindow() - function makeNewMainWindow () { - console.log('new Window!') - mainWindow = new BrowserWindow({ - width: 920, - height: 640, - 'web-preferences': { - 'overlay-scrollbars': true - } - }) + app.on('activate-with-no-open-windows', function () { + if (mainWindow == null) { + makeNewMainWindow() + return + } + mainWindow.show() + }) - mainWindow.loadUrl('file://' + __dirname + '/browser/main/index.electron.html') + var popUpWindow = new BrowserWindow({ + width: 600, + height: 400, + show: false, + frame: false, + 'always-on-top': true, + 'web-preferences': { + 'overlay-scrollbars': true, + 'skip-taskbar': true + } + }) - mainWindow.on('closed', function () { - console.log('main closed') - mainWindow = null - app.dock.hide() - }) - app.dock.show() + popUpWindow.loadUrl('file://' + __dirname + '/browser/finder/index.electron.html') + + popUpWindow.on('blur', function () { + popUpWindow.hide() + }) + popUpWindow.setVisibleOnAllWorkspaces(true) + + var globalShortcut = require('global-shortcut') + + globalShortcut.register('ctrl+tab+shift', function () { + if (mainWindow != null && !mainWindow.isFocused()) { + mainWindow.hide() + } + popUpWindow.show() + }) + + global.hideFinder = function () { + if (mainWindow == null || !mainWindow.isVisible()) { + Menu.sendActionToFirstResponder('hide:') + } + popUpWindow.hide() } }) + +function makeNewMainWindow () { + console.log('new Window!') + mainWindow = new BrowserWindow({ + width: 920, + height: 640, + 'web-preferences': { + 'overlay-scrollbars': true + } + }) + + mainWindow.loadUrl('file://' + __dirname + '/browser/main/index.electron.html') + + mainWindow.on('closed', function () { + console.log('main closed') + mainWindow = null + app.dock.hide() + }) + app.dock.show() +} diff --git a/package.json b/package.json index 9d2b661e..8cf84b79 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,8 @@ { - "name": "codexen-app-builder", + "name": "codexen-app", "version": "0.2.0", - "description": "CodeXen App Builder", + "description": "CodeXen App", + "main": "main.js", "scripts": { "start": "npm run serve | npm run dev", "serve": "./node_modules/.bin/http-server ./browser -p 8080", @@ -31,6 +32,7 @@ "homepage": "https://github.com/Rokt33r/codexen-app#readme", "dependencies": { "dotenv": "^1.1.0", + "electron-stylus": "^0.1.0", "halogen": "^0.1.10", "markdown-it": "^4.3.1", "moment": "^2.10.3", diff --git a/tray-icon.png b/tray-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..aba8e7d5dc096ad74e761b59eb21528e0aef6221 GIT binary patch literal 463 zcmV;=0WkiFP)Px#pHNIxMNDaN0Gek2plblNeE_d@0J3=ioM-^AcK}g0 z0Geh1t8)OccK}*B0KS9(9})nOVgR~=0C`aWsBr+FY5=fz0K9_$v3CHtegLj?0J?zy zsBHtXd(q|Hmd3RI|NqC})?2ujBeaBW!>1~(e-@^6w&c|G`1TF6e(dt^vDC%8;nY*B zi2$*90GC^u-p5F{lPp(5OtmumFh$a940IW$wK~xyiZI9;;!Y~YkJCn9_0&z1h6~v*8wsgoOXy zr#ssxN&m)BbxL*B*tAKt9e{AC`O(KH0szKlYb6Ga&dt3GLxjqbQXTO~`=&l|0L??7 z3wG<1Y{(0=$OtGvHx5ahj?p`V0IDpG+X=T21UiE7nYQs%FtJ4T8UU}dJWopI2kY6z zQuAwh;ly1Zvu4H+a(=M4*L{INBlfqPCo4n_+@Hc*)fdm(4$b8QgA)J%002ovPDHLk FV1naS$Ls(A literal 0 HcmV?d00001 diff --git a/tray-icon@2x.png b/tray-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eff01fc01d3a5f85b16146be519c6ce59e52f854 GIT binary patch literal 924 zcmV;N17rM&P)Px$5l~E2MNDaN08};r1Ofo5asZ@m0H|>Quyz0*6aWqh z0IYNXsd4~{TL6z>0I+rdwR`}ucL1Pl0I_)hH6j3LLjbIE0IhTYxq$#P9{>OV0ESxt zrf&eRcK};D0FYn+wR-@aXaGel0I+xfv3dZWX#inA0Fq+>W<>zJg8(=r0HtdHv3LLf z{{X**0I+rdwR-@pa{#!00J3-hpl1N7Zvc~6=<@CWy@LRlUWdA+bi=65=ic)7^>nwL ze95k%*u_DxjQafhN}hh(>g2rJ&#TP8%HP(p;n0lIxtY$pF|LIowuVuzi{b9+_xbo^ z%c&u%e+!jhESq&Sl5JkRo1@>$KEIU-t$F~2OBtJK9ExCRsE=J(G(rFX04j7+PE!Cx z7P}KE(g6h7G&vgQqwjlPA5rb|*f$V~-?Uvu(6%ga8p$qmE^P|@A8kDE0005=NklfPL*ap4qzBcNzp_O(bR4U&MS z1NkgT2x)-!F9aNI|B(|KJkfvnGJ4oh1V>6-`2c((lD7~-`)-4=;hG_UPI_^Dbw#59 zgu&RgEF+STKSV%@*jDc#+-)b&zPBtFMG`k*%ftc!oUeU2n|d=!L^;3(8(KV9$-^VK z8_bv9(w>j}s2=%}79!-S-g*n?-Y;)SoJ@vcB~^w3nIio&U-}Dgx$yR0XOEPqRip#} zj6oj;gQ*SS;@Ln6AWT6TWD#OwPhkJ~yAh?J03Xl6_#Dt?%zplGG4ZX*4eCKEL;!Z@ zB)qfj>1v1_Qae`;$5Dy^ z0Mjzo22w{WKUia3Yq9abb6o5KVFb{(;duOr_3K9OFz>9q4{MGZdNEBCgLbER+!*mp z2D(OOde}R?-C>hECuTWKIRZMm?y#@VLoA=v9fdBVuA_FV(R_0ny^lAiaPx$1yD>>MNDaN01yfQ000020RRO90I+rd0|Ed5000jP z00#sBtaAVa0ss&S00RL4sBr+Xc>t4Q02~kiep3KyMgXXB0KS9(MJoUR000000EAco znr8s3bO4%X0IqcavU&iIUjS)E0K0+!o@xN1Yyhu!0H$mJv3LLf{{X**0I+ueuXO;H zTL83r0K9?#rELI{SOBbZ0I6{RpJ@P^V*rm;0c}76lVSyTNdUNh_4xMt{QH*1v*YdP z0E15c{{8@pQpMiX?ep-2x}?|V;Hk>IF{FG5iCamRc+unA9e`QA*2{6Kl2NFJVWEbv z)WtE5X%LrcXttUcuYQBauOyyzOSzOcu!!w!(h2|o048)&PE!CE93u|*69EJX<~}tk zNTw-FjeTbKVlXXkS;@QHy%b2}q||=#o7w$U000NkNkl z#jV@DMx!@=UcbLeI^)2T$YTSeF5O3E*a^VBHga35_3G~uFsukp$P0LFvNx_HNn%1q zUipts&a~=uA0a9EqD)Z#?(9gCf(b)8{=J&BTJ`xukhWUza=utBD)<~7P15z%uJ-u% zT5jJuYe~?9-~^?pTVBKixO4!Lga@P&sJY-G0Bf}&2vJb-#f=d}I1&O1V0%3I4;vtt zYpizO!AK&o#1MiBvw`tu6(W*DM1agid9(#^1;usZFPls!n${AG|Hg zML{GWqV_ssLIvF{M_$>5(AHkyzpY%Ww@|fbl%`s>(-=?duM!@C5#c(0*i*#3p+a?p z+%~!sRUPe}k7q%^4u<?^0P=uguRpfYO zzIE5=SEnOYopd|B`hJ(Kt`tGECy6?@O$9rE<)l)5Q~j;pOjEU450W)G=uw@yEZJqC zVrPdcr!bwJmxrh{JCJ;BG}WtUp&qu7-T*`3Vzx4h<7S6ge9_Ny<7Jb4AWXH9zv7(3p&y8jYx`cvnJ06I*1 z>kx`ScJvyTD5oM@Ktv-3V;1DJdJp~*#v0k;D5 zAwwm7@a&B?)b%r`X9vxWW`2_Z5-eM#E)Jk+&GLK>jJya=VNRiWr4O#V)5C5`(<#!M zHwU|DX@y&oX4>$%R$Z0yGXJeyLpzO>N>(=5xd42kPp`^_YD;YZ%Mzeq;{*zKC}#i=8OT53-EwOoHV z)Yk}(hefIVRyGJr1q~e}bOI#Cz8@S3LChnQof{xthK$2`SpxP_2SOWOgFO!V>BoH8Z{Jsd1bdvIadi!T0kSNBz zn?H7X;rZlR5R&A*^dG;z+(TG)BJi&Zz7OMKGf2hQAI`$EC^PF!b~X%j&NQ1`J2q{nsgwQo^03L;=43MBWC9e8~2 z*S`{>AOI1%B?J5!c=|vR9^dzkPigc9k-Ujs-6re+%Abjz>rcON|E*7TG=mVHK;-f+ zbML1p)D}33^518oG2MIe%>8}$JA~Km@gxJMk@HwA3Kol cKl^+3A8l(wrT4%j&;S4c07*qoM6N<$g72+Wn*aa+ literal 0 HcmV?d00001 From e88c197f86a0873728114f977fcb6f81a2298a59 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Wed, 29 Jul 2015 00:03:01 +0900 Subject: [PATCH 49/79] cleanup useless packages --- browser/finder/favicon.ico | Bin 0 -> 15086 bytes browser/finder/index.electron.html | 2 +- browser/main/index.electron.html | 2 +- package.json | 3 --- update-log.md | 2 ++ 5 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 browser/finder/favicon.ico diff --git a/browser/finder/favicon.ico b/browser/finder/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ad6a19a4d53f71f570ef44d3be5939c5eed57e4a GIT binary patch literal 15086 zcmeI34{TS}6~|94lW3f{FxcFTbeo%CaAE(5b2!*s7%pRpi&I$LKq3?e<6jF{8U|WX zt0p-9h*VGz`44SfDFR`vQzp(4AOjZ>l`hB(ut?(=;zGGQpWELlx3BN_e!m~oZXw>} za^Jh}-h001obNgJzSkcjd6F+zTp`*P$mmWYeMO|8p!t54_CKwCefp&CzbrDan@CR` zqmOh(bH6qsIxd&;`JU2=n(Leqk4xX8g)(*YBB`WuJ-Ao~TzQRrGHI<*3+1!LYh?C) zo8{PVHi?^3bG8<*lVhxPQ=wcJw+3@3u96MRVQx6Tq*`3bx_n<5)9>f4*BDbN`N$3B zja`xFO4oJsb1F7n@0R^>oSV1tHh&L}P?yr@rT63-Ic)QhHKVGxd+p%Meh%|$|1{sP zF}<#{L%%zw%K+1(WW9{CxwObe9_8ez6YkA-_PB@E-0Igf-LR?6*Etn7A6-p0^Qf#* zvHA|bu8l(n^KCeP`tQ2Ay$xI3_PsS8GxI6*VUM`^(_fI0hO1_Gu{-|$F+UgmS?9?u zcR6ebHk%*f$A0C%mw&Lvfg|-^9&7A9ROiM&^CegKg!(U-3m4#+>5u==0o%U()OgH-B4`Xd!*wU|KDnc$WhxzEovvhN99dyAS zDNf+min0w-L?6#=Tzj?7iJX}s(%40$p|eQ6O0YUJPlRgsw2WaabC^q>DbPAVEBVP6 z63+!tK7EzsbuW;MsH)t>c1{0Bs-DWa_!9ZljknA7H{B@%zc)f|qjKHzJMyis+#o%8 z4yJa+qU#~^SCvwx`EXP5TG_9)F|6ZP$N|kA8w+PiMX!GHUA4n!&KCzdpc8UuZj#qE zR?a-IOA*wO=g=GTijYIV{^ga^$uhk2JDUx(#fB!xp@4lvvuOyW}INa z4)`JyFE#&n#pWh6u4P?h(Uw#-%iw-mbr-j8N2z8$PeAm-Eii1Fm?%*L~ltx@%qCuJRVy&u;s*w*h#KJH$|u4JNIT zVJai7?%4R33-Y~ezZvU4+y1h~l|41c$Rb zq5IjgB;D~h@>x49AO7c*JN~aDzJdiGz=Ps7ojqSoJ}ulLr$l`K@3OT$zKtvRW8`DK zJvYD!USfqx>`;kma&88{Eo_^&2 zxV)JsachyY*)O8<_5AY9Db;d3ZVr9$E|iT87S)!yS*w2P?G6BNzz5@`#b&rB@_kN> z#9@+rI1IPYkM);te%QyCU7P;i2>K6xAoh~vNA*u$lLO=j4#PqUXt z`ET(T#tM03-nIcPe8aB97Z|vvU>7(5H>vn4lo!3`j1U+9q=OkR$S~XE!GR6PX;zHy zw3Mi9VlJKDDI86lB{-Kv(vQC-|B@q-jqc2e<{HD&aCDc?ugEmriIJ$j;XSdB?c-!y zAN!BV*11hl`S_arM!tueROEsqgY6S_H~G>1mmL1;+t2#F4Q`p-sGZ4Ap{~(u%ey8g zsZGVA-v^OHHC>}}O%7avJH(ImS&Q8{(?mI+gn@jdvJ&@VTb~yB7CV9ee7@%_7tJ?G zvh5jmNS%e!?#YG$y-mLHm$|v>ZL+O}4{$PNi?ldQK0Y9Zn8RFK=X_gYlk*8@1h8m* z*Y8)lXL0Rwr#>TxFg6!o=YkDCq8Gk_BUG;GI~O14BKtxdYx&f-jh&sV&*SrfJEPmd zX_5Y?M0#lL(%4)(H;5$G)VMCGc|BNzwOG^D=R4QfrIkp&Q}od~Tx-jBifi=d<8r}T zp!*l}`wg`~K9N{;%>RoKLcHAy1EaWcur-k*YSU(i{S5sjmxY6Oht>Uu6AL^#Mpa=f=+AZ=6c%{HS zr`k&a!;a1I{Zy5yXTetIGQ-caHuetjrn}a8tZlw%FC7f~$S0(Da+SPi*y41+{^yJz zy;KKe5a;mee06Ary;@Efc59>AFe z&i1Wv*z;%$-U<45uA-&-x31@!ueqn1F35yS#DkCN9QO%qKjZ;D2P-F|^5gE&A<7-F z7#^Er*dMOBQNJnP>!vQf){R|ysc%Ou((h>NQ}5cTcp#?9OV~1(ct&UPjLFT^f(!ZB z6b#rB+fq#j!@hW1p*!;4Ay>b9g~$EM{?+cy!#mxWMOXTHCJUR8ms(;W2OoIe#Bko$ zj<#SP_N0DGoGb43*_umN_H&O{7y3Tq1^B_@iegNRnaG8Hi63-H(OSm0ayhmGJ4I)oMcaEP;araf7|sTC#J zI{M7G1Ac6ZZ8MdFhhK9;W?bzC-`^Y;%q4!pwaGtJa;R1Ij@)zL#a7tC2(QUMQN8dH@l0OA z2jnHzO2n_euozCa7t^21o{R0{u)`1VVPkj#$D@TkY~3H`_&C7+wr{1?p`G#LZ}O$t zmX_QPcCc}ePtbvQO;^ZCzUIso+SP1MUV$@qMnI>eVtGF!|5Nyr z_|LwOP5k0(a!r^k!H+)J9h+0(2mR>^&&d0%7i;tIT}|<4ir*CeBFk5_md9*;A7{Ex z5}RSc=IpbSklXZAh*|XIneDfn7c%lb(1HBv^MAq_i2cjn&BHx}YxWlW%>Ex1Fkx@7 z!WYiP6u51BF3;GnIHM6a@DE#L%sVOkyyLTfWqOz4>{-55_QmbtUI+b+VAS@+DS3vR z1BbwD1-rweA&*_=_lco;#-nD%nZWkENAZm;UG9WC6x##h@WUs39`YWX+{5K)KiJVH zik*C!t=)~c*>JyE1CfwJriXE-YUd;~ZDNZqa3+c!+egm|hA~|WcldUbi93d$alF5T z*okAf|KjUy_oApG@Q1T89LLti8EbRp4&Uf9Gl}pUVVW*FL$~z6~g*eXjnmr_%7ouyaJx=hwHQRiX4!iZYmkw|z#E%|f zen1cG)SlQw9a3D%>D@lGZ5;kk2l&o+v-YyPVGmnkns+pO9AeAn8qP=U4}S7Ad4}(; z#47#{Ww!SvO&c{=^^GiMF&5B+A8Nf+>AYtDzv!3LZc)2-i8 z{rDRk=t8dI9SD4Ig32|0JYx*s$j&FHcZ6Q( CodeXen Popup - + diff --git a/browser/styles/finder/index.styl b/browser/styles/finder/index.styl index e956490d..3d1d0060 100644 --- a/browser/styles/finder/index.styl +++ b/browser/styles/finder/index.styl @@ -45,6 +45,7 @@ body padding 10px border solid 2px transparent box-sizing border-box + cursor pointer .divider box-sizing border-box border-bottom solid 1px borderColor diff --git a/browser/styles/main/containers/DashboardContainer.styl b/browser/styles/main/containers/DashboardContainer.styl deleted file mode 100644 index 38b7de09..00000000 --- a/browser/styles/main/containers/DashboardContainer.styl +++ /dev/null @@ -1,15 +0,0 @@ -.DashboardContainer - fullsize() - box-sizing border-box - overflow-y auto - padding 10px - .jumbotron - background-color brandColor - color white - padding 65px 20px - font-size 3.5em - margin-bottom 25px - h2, h3 - margin-bottom 15px - p - margin-bottom 25px diff --git a/browser/styles/main/containers/UserContainer.styl b/browser/styles/main/containers/UserContainer.styl index 1e5a8e8a..db8d12fa 100644 --- a/browser/styles/main/containers/UserContainer.styl +++ b/browser/styles/main/containers/UserContainer.styl @@ -222,6 +222,7 @@ font-size 1.2em margin-bottom 15px .teams, .members + margin-left 10px li margin-bottom 10px font-size 1.1em diff --git a/browser/styles/main/index.styl b/browser/styles/main/index.styl index 23171ab1..0a54beeb 100644 --- a/browser/styles/main/index.styl +++ b/browser/styles/main/index.styl @@ -17,7 +17,7 @@ body font-size fontSize font-weight 400 -div, span, a, button, input +div, span, a, button, input, textarea box-sizing border-box h1 @@ -98,3 +98,21 @@ textarea.block-input #content fullsize() + +.Main + .appUpdateButton + position fixed + z-index 2000 + bottom 5px + right 53px + btnDefault() + padding 10px 15px + border-radius 5px + .contactButton + position fixed + z-index 2000 + bottom 5px + right 5px + btnDefault() + padding 10px 15px + border-radius 5px diff --git a/browser/styles/shared/modal.styl b/browser/styles/shared/modal.styl index c9bc6325..bacb12b3 100644 --- a/browser/styles/shared/modal.styl +++ b/browser/styles/shared/modal.styl @@ -56,8 +56,9 @@ absolute top bottom right left 175px padding 15px + overflow-y auto - .EditProfileModal, .PlanetSettingModal + .EditProfileModal, .PlanetSettingModal, .TeamSettingsModal .userInfoTab, .passwordTab, .planetProfileTab, .userInfoTab, .membersTab padding-top 45px .formField @@ -75,7 +76,7 @@ borderInput() height 33px font-size 1em - border-radius 10px + border-radius 5px float left .formRadioField margin-bottom 15px @@ -152,6 +153,48 @@ alertSuccess() .alertError alertError() + .membersTab + .memberTable + width 100% + margin-bottom 25px + th + border-bottom solid 2px borderColor + td + border-bottom solid 1px borderColor + height 38px + button + btnDefault() + padding 5px + border-radius 5px + .roleSelect + height 33px + border solid 1px borderColor + background-color backgroundColor + th, td + padding 5px 0 + .addMemberForm + .formLabel + margin-bottom 5px + .formGroup + clearfix() + .userNameSelect + display block + width 200px + margin-right 5px + float left + .roleSelect + display block + height 33px + border solid 1px borderColor + background-color backgroundColor + float left + margin-right 5px + .confirmButton + display block + height 33px + btnDefault() + border-radius 5px + float left .LaunchModal @@ -240,8 +283,7 @@ li margin-bottom 15px - - .PlanetCreateModal.modal, .TeamCreateModal.modal + .PlanetCreateModal.modal, .TeamCreateModal.modal, .AddMemberModal.modal padding 60px 0 .nameInput width 80% @@ -264,7 +306,6 @@ background-color white padding 0 10px margin 0 15px - .submitButton display block margin 0 auto @@ -273,3 +314,44 @@ height 55px circle() btnPrimary() + + .ContactModal + padding 15px + .contactForm + .formField + width 100% + margin-bottom 10px + input, textarea + display block + width 100% + borderInput() + border-radius 5px + input + height 33px + font-size 1em + textarea + height 175px + font-size 1em + .formControl + clearfix() + button + float right + btnDefault() + height 44px + padding 0 15px + border-radius 5px + margin-left 5px + button.sendButton + btnPrimary() + .confirmation + .confirmationMessage + padding 35px 0 + text-align center + font-size 1.1em + .doneButton + btnDefault() + height 44px + padding 0 35px + border-radius 5px + display block + margin 0 auto 25px diff --git a/config.js b/config.js index ea1a96b4..265b0bf8 100644 --- a/config.js +++ b/config.js @@ -1,4 +1,4 @@ module.exports = { - // apiUrl: 'http://codexen-server-dex2-ezebi636yb.elasticbeanstalk.com/' - apiUrl: 'http://localhost:8000/' + apiUrl: 'http://codexen-server-dev2.elasticbeanstalk.com/' + // apiUrl: 'http://localhost:8000/' } diff --git a/main.js b/main.js index fc7cc0d7..41f24738 100644 --- a/main.js +++ b/main.js @@ -3,6 +3,7 @@ var BrowserWindow = require('browser-window') var Menu = require('menu') var MenuItem = require('menu-item') var Tray = require('tray') +var ipc = require('ipc') require('crash-reporter').start() @@ -19,49 +20,66 @@ var update = null var version = app.getVersion() global.version = version +var versionText = (version == null || version.length === 0) ? 'DEV version' : 'v' + version var nn = require('node-notifier') var autoUpdater = require('auto-updater') +var path = require('path') autoUpdater .on('error', function (err, message) { nn.notify({ - title: 'Error! Ver.' + version, + title: 'Error! ' + versionText, + icon: path.join(__dirname, 'browser/main/resources/favicon-230x230.png'), message: message }) }) .on('checking-for-update', function () { nn.notify({ - title: 'Boost launched!! Ver. ' + version, + title: 'Boost launched!! ' + versionText, + icon: path.join(__dirname, 'browser/main/resources/favicon-230x230.png'), message: 'Checking update is available....' }) }) .on('update-available', function () { nn.notify({ - title: 'Update is available!! Ver. ' + version, + title: 'Update is available!! ' + versionText, + icon: path.join(__dirname, 'browser/main/resources/favicon-230x230.png'), message: 'Download started.. wait for the update ready.' }) }) .on('update-not-available', function () { nn.notify({ - title: 'Latest Build!! Ver. ' + version, + title: 'Latest Build!! ' + versionText, + icon: path.join(__dirname, 'browser/main/resources/favicon-230x230.png'), message: 'Hope you to enjoy our app :D' }) }) .on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) { nn.notify({ - title: 'Ready to Update!! v' + version, + title: 'Ready to Update!! ' + versionText, + icon: path.join(__dirname, 'browser/main/resources/favicon-230x230.png'), message: 'Click tray icon to update app: ' + releaseName }) update = quitAndUpdate + + if (mainWindow != null && !mainWindow.webContents.isLoading()) { + mainWindow.webContents.send('update-available', 'Update available!') + } }) app.on('ready', function () { console.log('Version ' + version) - autoUpdater.setFeedUrl('http://localhost:8000/testcat/test/latest?version=' + version) + autoUpdater.setFeedUrl('http://orbital.b00st.io/rokt33r/boost/latest?version=' + version) autoUpdater.checkForUpdates() // menu start var template = require('./modules/menu-template') + ipc.on('update-app', function (event, msg) { + if (update != null) { + update() + } + }) + menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) @@ -152,6 +170,11 @@ function makeNewMainWindow () { 'overlay-scrollbars': true } }) + if (update != null) { + mainWindow.webContents.on('did-finish-load', function () { + mainWindow.webContents.send('update-available', 'whoooooooh!') + }) + } mainWindow.loadUrl('file://' + __dirname + '/browser/main/index.electron.html') From fa1c48e480e897ca3ad52132e7f05d49aee7bcd9 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Thu, 20 Aug 2015 14:44:57 +0900 Subject: [PATCH 74/79] =?UTF-8?q?LogoutModal=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/main/Components/HomeNavigator.jsx | 7 +++--- browser/main/Components/LogoutModal.jsx | 27 +++++++++++++++++++++ browser/main/Components/PlanetNavigator.jsx | 2 +- browser/styles/shared/modal.styl | 18 ++++++++++++++ 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 browser/main/Components/LogoutModal.jsx diff --git a/browser/main/Components/HomeNavigator.jsx b/browser/main/Components/HomeNavigator.jsx index f312c380..462853ed 100644 --- a/browser/main/Components/HomeNavigator.jsx +++ b/browser/main/Components/HomeNavigator.jsx @@ -14,6 +14,7 @@ var UserStore = require('../Stores/UserStore') var AboutModal = require('./AboutModal') var PlanetCreateModal = require('./PlanetCreateModal') var TeamCreateModal = require('./TeamCreateModal') +var LogoutModal = require('./LogoutModal') var ProfileImage = require('./ProfileImage') module.exports = React.createClass({ @@ -93,9 +94,7 @@ module.exports = React.createClass({ this.setState({isProfilePopupOpen: false}) }, handleLogoutClick: function () { - localStorage.removeItem('currentUser') - localStorage.removeItem('token') - this.transitionTo('login') + this.openModal(LogoutModal, {transitionTo: this.transitionTo}) }, render: function () { var params = this.getParams() @@ -180,7 +179,7 @@ module.exports = React.createClass({
  • - +
  • diff --git a/browser/main/Components/LogoutModal.jsx b/browser/main/Components/LogoutModal.jsx new file mode 100644 index 00000000..9a6e542d --- /dev/null +++ b/browser/main/Components/LogoutModal.jsx @@ -0,0 +1,27 @@ +/* global localStorage */ + +var React = require('react') + +module.exports = React.createClass({ + propTypes: { + transitionTo: React.PropTypes.func, + close: React.PropTypes.func + }, + logout: function () { + localStorage.removeItem('currentUser') + localStorage.removeItem('token') + this.props.transitionTo('login') + this.props.close() + }, + render: function () { + return ( +
    +
    Are you sure to log out?
    +
    + + +
    +
    + ) + } +}) diff --git a/browser/main/Components/PlanetNavigator.jsx b/browser/main/Components/PlanetNavigator.jsx index 54a72e57..0df7b4f6 100644 --- a/browser/main/Components/PlanetNavigator.jsx +++ b/browser/main/Components/PlanetNavigator.jsx @@ -42,7 +42,7 @@ var PlanetNavigator = React.createClass({ -