diff --git a/frontend/components/Icon/Icon.jsx b/frontend/components/Icon/Icon.jsx new file mode 100644 index 0000000000..5a80ef9c39 --- /dev/null +++ b/frontend/components/Icon/Icon.jsx @@ -0,0 +1,28 @@ +import React, { Component, PropTypes } from 'react'; +import classnames from 'classnames'; + +const baseClass = 'kolidecon'; + +export class Icon extends Component { + static propTypes = { + className: PropTypes.string, + fw: PropTypes.bool, + name: PropTypes.string.isRequired, + size: PropTypes.string, + title: PropTypes.string, + }; + + render () { + const { className, fw, name, size, title } = this.props; + const iconClasses = classnames(baseClass, `${baseClass}-${name}`, className, { + [`${baseClass}-fw`]: fw, + [`${baseClass}-${size}`]: size, + }); + + return ( + + ); + } +} + +export default Icon; diff --git a/frontend/components/Icon/Icon.tests.jsx b/frontend/components/Icon/Icon.tests.jsx new file mode 100644 index 0000000000..4b602746cf --- /dev/null +++ b/frontend/components/Icon/Icon.tests.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import expect from 'expect'; +import { mount } from 'enzyme'; + +import Icon from './Icon'; + +describe('Icon - component', () => { + it('renders', () => { + expect(mount()).toExist(); + }); +}); diff --git a/frontend/components/Icon/index.js b/frontend/components/Icon/index.js new file mode 100644 index 0000000000..3680ed0ed3 --- /dev/null +++ b/frontend/components/Icon/index.js @@ -0,0 +1 @@ +export default from './Icon'; diff --git a/frontend/components/buttons/Rocker/Rocker.jsx b/frontend/components/buttons/Rocker/Rocker.jsx index 9fc0f28b8a..23bea52e28 100644 --- a/frontend/components/buttons/Rocker/Rocker.jsx +++ b/frontend/components/buttons/Rocker/Rocker.jsx @@ -2,6 +2,8 @@ import React, { Component, PropTypes } from 'react'; import { noop } from 'lodash'; import classnames from 'classnames'; +import Icon from 'components/Icon'; + class Rocker extends Component { static propTypes = { @@ -34,12 +36,12 @@ class Rocker extends Component { - {bText} + {bText} - {aText} + {aText} diff --git a/frontend/components/forms/ForgotPasswordForm/ForgotPasswordForm.jsx b/frontend/components/forms/ForgotPasswordForm/ForgotPasswordForm.jsx index b2bcb7a8b7..62bd7e82d4 100644 --- a/frontend/components/forms/ForgotPasswordForm/ForgotPasswordForm.jsx +++ b/frontend/components/forms/ForgotPasswordForm/ForgotPasswordForm.jsx @@ -26,7 +26,7 @@ class ForgotPasswordForm extends Component {
diff --git a/frontend/components/forms/LoginForm/LoginForm.jsx b/frontend/components/forms/LoginForm/LoginForm.jsx index a72c0249f2..9d0611dcc0 100644 --- a/frontend/components/forms/LoginForm/LoginForm.jsx +++ b/frontend/components/forms/LoginForm/LoginForm.jsx @@ -38,12 +38,12 @@ class LoginForm extends Component { diff --git a/frontend/components/forms/RegistrationForm/AdminDetails/AdminDetails.jsx b/frontend/components/forms/RegistrationForm/AdminDetails/AdminDetails.jsx index 3182506fd5..f2718d5b56 100644 --- a/frontend/components/forms/RegistrationForm/AdminDetails/AdminDetails.jsx +++ b/frontend/components/forms/RegistrationForm/AdminDetails/AdminDetails.jsx @@ -32,24 +32,24 @@ class AdminDetails extends Component { />

- + {displayText}

diff --git a/frontend/components/forms/fields/SelectTargetsDropdown/TargetOption/TargetOption.jsx b/frontend/components/forms/fields/SelectTargetsDropdown/TargetOption/TargetOption.jsx index f6d1dd5005..33bf7a8839 100644 --- a/frontend/components/forms/fields/SelectTargetsDropdown/TargetOption/TargetOption.jsx +++ b/frontend/components/forms/fields/SelectTargetsDropdown/TargetOption/TargetOption.jsx @@ -1,6 +1,7 @@ import React, { Component, PropTypes } from 'react'; import classnames from 'classnames'; +import Icon from 'components/Icon'; import targetInterface from 'interfaces/target'; const baseClass = 'target-option'; @@ -21,7 +22,7 @@ class TargetOption extends Component { hostPlatformIconClass = () => { const { platform } = this.props.target; - return platform === 'darwin' ? 'kolidecon-apple' : `kolidecon-${platform}`; + return platform === 'darwin' ? 'apple' : `${platform}`; } renderTargetDetail = () => { @@ -56,11 +57,11 @@ class TargetOption extends Component { return (
diff --git a/frontend/components/hosts/HostDetails/HostDetails.jsx b/frontend/components/hosts/HostDetails/HostDetails.jsx index d2f24c0f04..1259990cf6 100644 --- a/frontend/components/hosts/HostDetails/HostDetails.jsx +++ b/frontend/components/hosts/HostDetails/HostDetails.jsx @@ -1,8 +1,9 @@ import React, { PropTypes } from 'react'; import { noop } from 'lodash'; -import EllipsisMenu from '../../../components/buttons/EllipsisMenu'; -import hostInterface from '../../../interfaces/host'; +import EllipsisMenu from 'components/buttons/EllipsisMenu'; +import hostInterface from 'interfaces/host'; +import Icon from 'components/Icon'; import { humanMemory, humanUptime, platformIconClass } from './helpers'; const baseClass = 'host-details'; @@ -29,12 +30,12 @@ const HostDetails = ({ host, onQueryClick = noop, onDisableClick = noop }) => {
@@ -45,7 +46,7 @@ const HostDetails = ({ host, onQueryClick = noop, onDisableClick = noop }) => {

{hostname}

- + {osVersion}
@@ -53,18 +54,18 @@ const HostDetails = ({ host, onQueryClick = noop, onDisableClick = noop }) => {
- + {humanMemory(memory)} - + {humanUptime(uptime)}
- + {mac}
- + {ip}
diff --git a/frontend/components/hosts/HostDetails/helpers.js b/frontend/components/hosts/HostDetails/helpers.js index c008f4a0e1..2ca228d145 100644 --- a/frontend/components/hosts/HostDetails/helpers.js +++ b/frontend/components/hosts/HostDetails/helpers.js @@ -28,7 +28,7 @@ export const platformIconClass = (platform) => { platformClass = 'apple'; } - return `kolidecon-${platformClass}`; + return platformClass; }; export default { humanMemory, humanUptime, platformIconClass }; diff --git a/frontend/components/hosts/HostsTable/HostsTable.jsx b/frontend/components/hosts/HostsTable/HostsTable.jsx index 38b3ba74fe..d28284e7f2 100644 --- a/frontend/components/hosts/HostsTable/HostsTable.jsx +++ b/frontend/components/hosts/HostsTable/HostsTable.jsx @@ -1,6 +1,7 @@ import React, { Component, PropTypes } from 'react'; import classnames from 'classnames'; +import Icon from 'components/Icon'; import hostInterface from 'interfaces/host'; import { platformIconClass, statusIconClass } from 'utilities/icon_class'; @@ -17,8 +18,8 @@ class HostsTable extends Component { return ( {host.hostname} - - {host.os_version} + + {host.os_version} {host.osquery_version} {host.ip} {host.mac} diff --git a/frontend/components/side_panels/HostSidePanel/HostSidePanel.jsx b/frontend/components/side_panels/HostSidePanel/HostSidePanel.jsx index 7e5f74cef6..fa47021e75 100644 --- a/frontend/components/side_panels/HostSidePanel/HostSidePanel.jsx +++ b/frontend/components/side_panels/HostSidePanel/HostSidePanel.jsx @@ -1,6 +1,7 @@ import React, { Component, PropTypes } from 'react'; import { filter } from 'lodash'; +import Icon from 'components/Icon'; import InputField from 'components/forms/fields/InputField'; import labelInterface from 'interfaces/label'; import PanelGroup from 'components/side_panels/HostSidePanel/PanelGroup'; @@ -64,7 +65,7 @@ class HostSidePanel extends Component { />
- + LABELS
@@ -82,9 +83,9 @@ class HostSidePanel extends Component { />
); diff --git a/frontend/components/side_panels/HostSidePanel/PanelGroupItem/PanelGroupItem.jsx b/frontend/components/side_panels/HostSidePanel/PanelGroupItem/PanelGroupItem.jsx index 3b3bf736ba..5a29ce9a4b 100644 --- a/frontend/components/side_panels/HostSidePanel/PanelGroupItem/PanelGroupItem.jsx +++ b/frontend/components/side_panels/HostSidePanel/PanelGroupItem/PanelGroupItem.jsx @@ -1,6 +1,7 @@ import React, { Component, PropTypes } from 'react'; import classnames from 'classnames'; +import Icon from 'components/Icon'; import { iconClassForLabel } from './helpers'; const baseClass = 'panel-group-item'; @@ -28,7 +29,7 @@ class PanelGroupItem extends Component { return ( diff --git a/frontend/components/side_panels/HostSidePanel/PanelGroupItem/helpers.js b/frontend/components/side_panels/HostSidePanel/PanelGroupItem/helpers.js index 0a072cd72a..1d62b9abf3 100644 --- a/frontend/components/side_panels/HostSidePanel/PanelGroupItem/helpers.js +++ b/frontend/components/side_panels/HostSidePanel/PanelGroupItem/helpers.js @@ -2,16 +2,16 @@ export const iconClassForLabel = (label) => { const lowerType = label.type && label.type.toLowerCase(); const lowerDisplayText = label.display_text && label.display_text.toLowerCase(); - if (lowerType === 'all') return 'kolidecon-hosts'; + if (lowerType === 'all') return 'hosts'; switch (lowerDisplayText) { - case 'offline': return 'kolidecon-hosts'; - case 'online': return 'kolidecon-hosts'; - case 'mac os': return 'kolidecon-apple'; - case 'centos': return 'kolidecon-centos'; - case 'ubuntu': return 'kolidecon-ubuntu'; - case 'windows': return 'kolidecon-windows'; - default: return 'kolidecon-label'; + case 'offline': return 'hosts'; + case 'online': return 'hosts'; + case 'mac os': return 'apple'; + case 'centos': return 'centos'; + case 'ubuntu': return 'ubuntu'; + case 'windows': return 'windows'; + default: return 'label'; } }; diff --git a/frontend/components/side_panels/PackInfoSidePanel/PackInfoSidePanel.jsx b/frontend/components/side_panels/PackInfoSidePanel/PackInfoSidePanel.jsx index c6f6fc78e2..beade3e1b8 100644 --- a/frontend/components/side_panels/PackInfoSidePanel/PackInfoSidePanel.jsx +++ b/frontend/components/side_panels/PackInfoSidePanel/PackInfoSidePanel.jsx @@ -1,5 +1,6 @@ import React from 'react'; +import Icon from 'components/Icon'; import SecondarySidePanelContainer from '../SecondarySidePanelContainer'; const classBlock = 'pack-info-side-panel'; @@ -10,7 +11,7 @@ class PackInfoSidePanel extends React.Component {

- +   What's a Query Pack?

diff --git a/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.jsx b/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.jsx index a2bc0515bc..bf84c093a9 100644 --- a/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.jsx +++ b/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.jsx @@ -1,5 +1,10 @@ import React, { Component, PropTypes } from 'react'; +import osqueryTableInterface from 'interfaces/osquery_table'; +import { osqueryTableNames } from 'utilities/osquery_tables'; +import Dropdown from 'components/forms/fields/Dropdown'; +import Icon from 'components/Icon'; +import SecondarySidePanelContainer from '../SecondarySidePanelContainer'; import Button from '../../buttons/Button'; import { availability, @@ -8,10 +13,6 @@ import { numAdditionalColumns, shouldShowAllColumns, } from './helpers'; -import osqueryTableInterface from '../../../interfaces/osquery_table'; -import { osqueryTableNames } from '../../../utilities/osquery_tables'; -import SecondarySidePanelContainer from '../SecondarySidePanelContainer'; -import Dropdown from '../../../components/forms/fields/Dropdown'; const baseClass = 'query-side-panel'; @@ -74,7 +75,7 @@ class QuerySidePanel extends Component { {column.name}
{displayTypeForDataType(column.type)} - +
); diff --git a/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx b/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx index e7bcb9f681..6350679226 100644 --- a/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx +++ b/frontend/components/side_panels/SiteNavSidePanel/SiteNavSidePanel.jsx @@ -7,6 +7,7 @@ import classnames from 'classnames'; import configInterface from 'interfaces/config'; import { logoutUser } from 'redux/nodes/auth/actions'; import userInterface from 'interfaces/user'; +import Icon from 'components/Icon'; import { activeTabFromPathname, activeSubTabFromPathname } from './helpers'; import kolideLogo from '../../../../assets/images/kolide-logo.svg'; @@ -152,7 +153,7 @@ class SiteNavSidePanel extends Component {

{orgName}

{username}

- +
- + {name} @@ -275,14 +276,14 @@ class SiteNavSidePanel extends Component { renderCollapseSubItems = () => { const { toggleShowSubItems } = this; const { showSubItems } = this.state; - const iconName = showSubItems ? 'kolidecon-chevronleftbold' : 'kolidecon-chevronrightbold'; + const iconName = showSubItems ? 'chevronleft' : 'chevronright'; return ( ); } diff --git a/frontend/components/side_panels/SiteNavSidePanel/UserMenu.jsx b/frontend/components/side_panels/SiteNavSidePanel/UserMenu.jsx index 4b7b52d4a1..4a06bb3f01 100644 --- a/frontend/components/side_panels/SiteNavSidePanel/UserMenu.jsx +++ b/frontend/components/side_panels/SiteNavSidePanel/UserMenu.jsx @@ -1,6 +1,8 @@ import React, { Component, PropTypes } from 'react'; import classnames from 'classnames'; +import Icon from 'components/Icon'; + class UserMenu extends Component { static propTypes = { isOpened: PropTypes.bool, @@ -46,8 +48,8 @@ class UserMenu extends Component {
diff --git a/frontend/components/side_panels/SiteNavSidePanel/navItems.js b/frontend/components/side_panels/SiteNavSidePanel/navItems.js index 85fb2e04d2..9cdf075241 100644 --- a/frontend/components/side_panels/SiteNavSidePanel/navItems.js +++ b/frontend/components/side_panels/SiteNavSidePanel/navItems.js @@ -1,7 +1,7 @@ export default (admin) => { const adminNavItems = [ { - icon: 'kolidecon-admin', + icon: 'admin', name: 'Admin', path: { regex: /^\/admin/, @@ -28,7 +28,7 @@ export default (admin) => { const userNavItems = [ { - icon: 'kolidecon-hosts', + icon: 'hosts', name: 'Hosts', path: { regex: /^\/hosts/, @@ -53,7 +53,7 @@ export default (admin) => { }, { defaultPathname: '/queries/new', - icon: 'kolidecon-query', + icon: 'query', name: 'Query', path: { regex: /^\/queries/, @@ -78,7 +78,7 @@ export default (admin) => { }, { defaultPathname: '/packs/all', - icon: 'kolidecon-packs', + icon: 'packs', name: 'Packs', path: { regex: /^\/packs/, @@ -102,7 +102,7 @@ export default (admin) => { ], }, { - icon: 'kolidecon-help', + icon: 'help', name: 'Help', path: { regex: /^\/help/, diff --git a/frontend/pages/ForgotPasswordPage/ForgotPasswordPage.jsx b/frontend/pages/ForgotPasswordPage/ForgotPasswordPage.jsx index fc012ed3d8..a32d9e4bb2 100644 --- a/frontend/pages/ForgotPasswordPage/ForgotPasswordPage.jsx +++ b/frontend/pages/ForgotPasswordPage/ForgotPasswordPage.jsx @@ -5,10 +5,11 @@ import { noop } from 'lodash'; import { clearForgotPasswordErrors, forgotPasswordAction, -} from '../../redux/nodes/components/ForgotPasswordPage/actions'; -import debounce from '../../utilities/debounce'; -import ForgotPasswordForm from '../../components/forms/ForgotPasswordForm'; -import StackedWhiteBoxes from '../../components/StackedWhiteBoxes'; +} from 'redux/nodes/components/ForgotPasswordPage/actions'; +import debounce from 'utilities/debounce'; +import ForgotPasswordForm from 'components/forms/ForgotPasswordForm'; +import Icon from 'components/Icon'; +import StackedWhiteBoxes from 'components/StackedWhiteBoxes'; export class ForgotPasswordPage extends Component { static propTypes = { @@ -50,7 +51,7 @@ export class ForgotPasswordPage extends Component {

- + EMAIL SENT
diff --git a/frontend/pages/LoginSuccessfulPage/LoginSuccessfulPage.jsx b/frontend/pages/LoginSuccessfulPage/LoginSuccessfulPage.jsx index 02296f55e3..3184a56979 100644 --- a/frontend/pages/LoginSuccessfulPage/LoginSuccessfulPage.jsx +++ b/frontend/pages/LoginSuccessfulPage/LoginSuccessfulPage.jsx @@ -1,6 +1,8 @@ import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; +import Icon from 'components/Icon'; + class LoginSuccessfulPage extends Component { static propTypes = { dispatch: PropTypes.func.isRequired, @@ -10,7 +12,7 @@ class LoginSuccessfulPage extends Component { const baseClass = 'login-success'; return (
- +

Login successful

hold on to your butts...

diff --git a/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.jsx b/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.jsx index 52f776b71d..393fee9f17 100644 --- a/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.jsx +++ b/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.jsx @@ -12,6 +12,7 @@ import HostDetails from 'components/hosts/HostDetails'; import hostInterface from 'interfaces/host'; import HostSidePanel from 'components/side_panels/HostSidePanel'; import HostsTable from 'components/hosts/HostsTable'; +import Icon from 'components/Icon'; import osqueryTableInterface from 'interfaces/osquery_table'; import QueryComposer from 'components/queries/QueryComposer'; import QuerySidePanel from 'components/side_panels/QuerySidePanel'; @@ -189,7 +190,7 @@ export class ManageHostsPage extends Component { return (
- + {displayText} {method1TextCopied && copied!} - +
{renderHostTabHeaders()} @@ -158,7 +157,7 @@ export class NewHostPage extends Component {
{method2TextCopied && copied!} - +

This method allows you to configure an existing osqueryd installation to work with Kolide. The --config_endpoints flag allows us to point your osqueryd installation to your Kolide configuration.

diff --git a/frontend/utilities/icon_class.js b/frontend/utilities/icon_class.js index 0bdf223e6c..cad75610dc 100644 --- a/frontend/utilities/icon_class.js +++ b/frontend/utilities/icon_class.js @@ -3,9 +3,9 @@ export const statusIconClass = (status = '') => { switch (lowerStatus) { case 'online': - return 'kolidecon-success-check'; + return 'success-check'; case 'offline': - return 'kolidecon-offline'; + return 'offline'; default: return ''; } @@ -16,9 +16,9 @@ export const platformIconClass = (platform = '') => { switch (lowerPlatform) { case 'darwin': - return 'kolidecon-apple'; + return 'apple'; default: - return `kolidecon-${lowerPlatform}`; + return lowerPlatform; } };