Merge remote-tracking branch 'origin/10190_fix_select_icon_and_firefox'

This commit is contained in:
Torkel Ödegaard 2017-12-20 11:22:29 +01:00
commit 4acf6b0eee
4 changed files with 102 additions and 48 deletions

View File

@ -1,7 +1,7 @@
import React from 'react'; import React from "react";
import { NavModel, NavModelItem } from '../../nav_model_srv'; import { NavModel, NavModelItem } from "../../nav_model_srv";
import classNames from 'classnames'; import classNames from "classnames";
import appEvents from 'app/core/app_events'; import appEvents from "app/core/app_events";
export interface IProps { export interface IProps {
model: NavModel; model: NavModel;
@ -9,12 +9,12 @@ export interface IProps {
function TabItem(tab: NavModelItem) { function TabItem(tab: NavModelItem) {
if (tab.hideFromTabs) { if (tab.hideFromTabs) {
return (null); return null;
} }
let tabClasses = classNames({ let tabClasses = classNames({
'gf-tabs-link': true, "gf-tabs-link": true,
active: tab.active, active: tab.active
}); });
return ( return (
@ -28,8 +28,9 @@ function TabItem(tab: NavModelItem) {
} }
function SelectOption(navItem: NavModelItem) { function SelectOption(navItem: NavModelItem) {
if (navItem.hideFromTabs) { // TODO: Rename hideFromTabs => hideFromNav if (navItem.hideFromTabs) {
return (null); // TODO: Rename hideFromTabs => hideFromNav
return null;
} }
return ( return (
@ -39,14 +40,22 @@ function SelectOption(navItem: NavModelItem) {
); );
} }
function Navigation({main}: {main: NavModelItem}) { function Navigation({ main }: { main: NavModelItem }) {
return (<nav> return (
<SelectNav customCss="page-header__select_nav" main={main} /> <nav>
<Tabs customCss="page-header__tabs" main={main} /> <SelectNav customCss="page-header__select-nav" main={main} />
</nav>); <Tabs customCss="page-header__tabs" main={main} />
</nav>
);
} }
function SelectNav({main, customCss}: {main: NavModelItem, customCss: string}) { function SelectNav({
main,
customCss
}: {
main: NavModelItem;
customCss: string;
}) {
const defaultSelectedItem = main.children.find(navItem => { const defaultSelectedItem = main.children.find(navItem => {
return navItem.active === true; return navItem.active === true;
}); });
@ -54,17 +63,32 @@ function SelectNav({main, customCss}: {main: NavModelItem, customCss: string}) {
const gotoUrl = evt => { const gotoUrl = evt => {
var element = evt.target; var element = evt.target;
var url = element.options[element.selectedIndex].value; var url = element.options[element.selectedIndex].value;
appEvents.emit('location-change', {href: url}); appEvents.emit("location-change", { href: url });
}; };
return (<select return (
className={`gf-select-nav ${customCss}`} <div className={`gf-form-select-wrapper width-20 ${customCss}`}>
defaultValue={defaultSelectedItem.url} <label
onChange={gotoUrl}>{main.children.map(SelectOption)}</select>); className={`gf-form-select-icon ${defaultSelectedItem.icon}`}
htmlFor="page-header-select-nav"
/>
{/* Label to make it clickable */}
<select
className="gf-select-nav gf-form-input"
defaultValue={defaultSelectedItem.url}
onChange={gotoUrl}
id="page-header-select-nav"
>
{main.children.map(SelectOption)}
</select>
</div>
);
} }
function Tabs({main, customCss}: {main: NavModelItem, customCss: string}) { function Tabs({ main, customCss }: { main: NavModelItem; customCss: string }) {
return <ul className={`gf-tabs ${customCss}`}>{main.children.map(TabItem)}</ul>; return (
<ul className={`gf-tabs ${customCss}`}>{main.children.map(TabItem)}</ul>
);
} }
export default class PageHeader extends React.Component<IProps, any> { export default class PageHeader extends React.Component<IProps, any> {
@ -77,7 +101,11 @@ export default class PageHeader extends React.Component<IProps, any> {
for (let i = 0; i < breadcrumbs.length; i++) { for (let i = 0; i < breadcrumbs.length; i++) {
const bc = breadcrumbs[i]; const bc = breadcrumbs[i];
if (bc.url) { if (bc.url) {
breadcrumbsResult.push(<a className="text-link" key={i} href={bc.url}>{bc.title}</a>); breadcrumbsResult.push(
<a className="text-link" key={i} href={bc.url}>
{bc.title}
</a>
);
} else { } else {
breadcrumbsResult.push(<span key={i}> / {bc.title}</span>); breadcrumbsResult.push(<span key={i}> / {bc.title}</span>);
} }
@ -95,12 +123,15 @@ export default class PageHeader extends React.Component<IProps, any> {
<div className="page-header__info-block"> <div className="page-header__info-block">
{main.text && <h1 className="page-header__title">{main.text}</h1>} {main.text && <h1 className="page-header__title">{main.text}</h1>}
{main.breadcrumbs && main.breadcrumbs.length > 0 && ( {main.breadcrumbs &&
<h1 className="page-header__title"> main.breadcrumbs.length > 0 && (
{this.renderBreadcrumb(main.breadcrumbs)} <h1 className="page-header__title">
</h1>) {this.renderBreadcrumb(main.breadcrumbs)}
} </h1>
{main.subTitle && <div className="page-header__sub-title">{main.subTitle}</div>} )}
{main.subTitle && (
<div className="page-header__sub-title">{main.subTitle}</div>
)}
{main.subType && ( {main.subType && (
<div className="page-header__stamps"> <div className="page-header__stamps">
<i className={main.subType.icon} /> <i className={main.subType.icon} />

View File

@ -60,20 +60,24 @@
switch-class="gf-form-switch--transparent gf-form-switch--search-result-filter-row__checkbox" switch-class="gf-form-switch--transparent gf-form-switch--search-result-filter-row__checkbox"
/> />
<div class="search-results-filter-row__filters"> <div class="search-results-filter-row__filters">
<select <div class="gf-form-select-wrapper">
class="search-results-filter-row__filters-item gf-form-input" <select
ng-model="ctrl.selectedStarredFilter" class="search-results-filter-row__filters-item gf-form-input"
ng-options="t.text disable when t.disabled for t in ctrl.starredFilterOptions" ng-model="ctrl.selectedStarredFilter"
ng-change="ctrl.onStarredFilterChange()" ng-options="t.text disable when t.disabled for t in ctrl.starredFilterOptions"
ng-show="!(ctrl.canMove || ctrl.canDelete)" ng-change="ctrl.onStarredFilterChange()"
/> ng-show="!(ctrl.canMove || ctrl.canDelete)"
<select />
class="search-results-filter-row__filters-item gf-form-input" </div>
ng-model="ctrl.selectedTagFilter" <div class="gf-form-select-wrapper">
ng-options="t.term disable when t.disabled for t in ctrl.tagFilterOptions" <select
ng-change="ctrl.onTagFilterChange()" class="search-results-filter-row__filters-item gf-form-input"
ng-show="!(ctrl.canMove || ctrl.canDelete)" ng-model="ctrl.selectedTagFilter"
/> ng-options="t.term disable when t.disabled for t in ctrl.tagFilterOptions"
ng-change="ctrl.onTagFilterChange()"
ng-show="!(ctrl.canMove || ctrl.canDelete)"
/>
</div>
<div class="gf-form-button-row" ng-show="ctrl.canMove || ctrl.canDelete"> <div class="gf-form-button-row" ng-show="ctrl.canMove || ctrl.canDelete">
<button type="button" <button type="button"
class="btn gf-form-button btn-inverse" class="btn gf-form-button btn-inverse"

View File

@ -111,7 +111,7 @@ $input-border: 1px solid $input-border-color;
} }
&:disabled { &:disabled {
color: $text-color-weak color: $text-color-weak;
} }
} }
@ -248,12 +248,30 @@ $input-border: 1px solid $input-border-color;
position: relative; position: relative;
background-color: $input-bg; background-color: $input-bg;
.gf-form-select-icon {
position: absolute;
z-index: 1;
left: $input-padding-x;
top: 50%;
margin-top: -7px;
& + .gf-form-input {
position: relative;
z-index: 2;
padding-left: $input-padding-x*3;
background-color: transparent;
option {
// Firefox
color: $black;
}
}
}
select.gf-form-input { select.gf-form-input {
text-indent: 0.01px; text-indent: 0.01px;
text-overflow: ""; text-overflow: "";
padding-right: $input-padding-x*4; padding-right: $input-padding-x*3;
-webkit-appearance: none;
-moz-appearance: menulist-text; // was set to "window" and caused odd display on windos and linux.
appearance: none; appearance: none;
&:-moz-focusring { &:-moz-focusring {

View File

@ -69,8 +69,9 @@
text-transform: uppercase; text-transform: uppercase;
} }
.page-header__select_nav { .page-header__select-nav {
margin-bottom: 10px; margin-bottom: 10px;
max-width: 100%;
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
display: none; display: none;