diff --git a/pkg/kdump/kdump-view.jsx b/pkg/kdump/kdump-view.jsx index 76096009571d..906b24071709 100644 --- a/pkg/kdump/kdump-view.jsx +++ b/pkg/kdump/kdump-view.jsx @@ -21,8 +21,7 @@ import cockpit from "cockpit"; import React from "react"; import { OnOffSwitch } from "cockpit-components-onoff.jsx"; -import { OverlayTrigger, Tooltip } from "patternfly-react"; -import { Button } from "@patternfly/react-core"; +import { Button, Tooltip, TooltipPosition } from "@patternfly/react-core"; import * as Select from "cockpit-components-select.jsx"; import { show_modal_dialog } from "cockpit-components-dialog.jsx"; @@ -453,20 +452,20 @@ export class KdumpPage extends React.Component { if (this.props.reservedMemory == 0) { const tooltip = _("No memory reserved. Append a crashkernel option to the kernel command line (e.g. in /etc/default/grub) to reserve memory at boot time. Example: crashkernel=512M"); serviceHint = ( - {tooltip} } placement="bottom"> + - + ); } kdumpServiceDetails = ; } else if (this.props.kdumpStatus && !this.props.kdumpStatus.installed) { const tooltip = _("Kdump service not installed. Please ensure package kexec-tools is installed."); kdumpServiceDetails = ( - {tooltip} } placement="bottom"> + - + ); } var serviceWaiting; @@ -483,11 +482,11 @@ export class KdumpPage extends React.Component { } else { const tooltip = _("Test is only available while the kdump service is running."); testButton = ( - {tooltip} } placement="top"> + - + ); } const tooltip_info = _("This will test the kdump configuration by crashing the kernel."); @@ -511,9 +510,9 @@ export class KdumpPage extends React.Component {
{testButton}
diff --git a/pkg/lib/cockpit-components-privileged.jsx b/pkg/lib/cockpit-components-privileged.jsx index 6e0b4bcc1c66..36fe6d48be15 100644 --- a/pkg/lib/cockpit-components-privileged.jsx +++ b/pkg/lib/cockpit-components-privileged.jsx @@ -19,8 +19,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Button } from '@patternfly/react-core'; -import { OverlayTrigger, Tooltip } from 'patternfly-react'; +import { Button, Tooltip, TooltipPosition } from '@patternfly/react-core'; import cockpit from "cockpit"; @@ -37,10 +36,10 @@ export function Privileged({ excuse, allowed, placement, tooltipId, children }) let contents = { children }; if (!allowed) { contents = ( - { excuse } }> + { contents } - ); + ); } return contents; } diff --git a/pkg/lib/patternfly-4-overrides.scss b/pkg/lib/patternfly-4-overrides.scss index 9007232c3681..056fc8b5f897 100644 --- a/pkg/lib/patternfly-4-overrides.scss +++ b/pkg/lib/patternfly-4-overrides.scss @@ -36,4 +36,4 @@ /* Helper mod to center pf-c-nav__tertiary when it wraps */ .ct-m-nav__tertiary-center { justify-content: center; -} +} \ No newline at end of file diff --git a/pkg/machines/components/create-vm-dialog/createVmDialog.jsx b/pkg/machines/components/create-vm-dialog/createVmDialog.jsx index c9c473771cba..7954e546a122 100644 --- a/pkg/machines/components/create-vm-dialog/createVmDialog.jsx +++ b/pkg/machines/components/create-vm-dialog/createVmDialog.jsx @@ -19,8 +19,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { FormGroup, HelpBlock, Modal, OverlayTrigger, Tooltip, TypeAheadSelect } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { FormGroup, HelpBlock, Modal, TypeAheadSelect } from 'patternfly-react'; +import { Button, Tooltip, TooltipPosition } from '@patternfly/react-core'; import cockpit from 'cockpit'; import { MachinesConnectionSelector } from '../machinesConnectionSelector.jsx'; @@ -404,9 +404,9 @@ const UnattendedRow = ({ validationFailed, unattendedDisabled, unattendedInstall ); if (unattendedDisabled) { unattendedInstallationCheckbox = ( - { _("The selected Operating System does not support unattended installation") } } placement='left'> + {unattendedInstallationCheckbox} - + ); } @@ -825,9 +825,11 @@ class CreateVmModal extends React.Component { ); if (this.state.unattendedInstallation) { startVmCheckbox = ( - { _("Setting the user passwords for unattended installation requires starting the VM when creating it") } } placement='left'> + {startVmCheckbox} - + ); } @@ -1010,21 +1012,18 @@ export class CreateVmAction extends React.Component { testdata={testdata} id={this.props.mode == 'create' ? 'create-new-vm' : 'import-vm-disk'} variant='secondary' - style={!this.state.virtInstallAvailable ? { pointerEvents: 'none' } : null} // Fixes OverlayTrigger not showing up onClick={this.open}> {this.props.mode == 'create' ? _("Create VM") : _("Import VM")} ); if (!this.state.virtInstallAvailable) createButton = ( - - {_("virt-install package needs to be installed on the system in order to create new VMs")} - } placement='top'> + {createButton} - + ); return ( diff --git a/pkg/machines/components/deleteDialog.jsx b/pkg/machines/components/deleteDialog.jsx index e0529ae384bb..053f747045fc 100644 --- a/pkg/machines/components/deleteDialog.jsx +++ b/pkg/machines/components/deleteDialog.jsx @@ -19,8 +19,8 @@ import cockpit from 'cockpit'; import React from 'react'; -import { Modal, OverlayTrigger, Tooltip } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { Modal } from 'patternfly-react'; +import { Button, Tooltip } from '@patternfly/react-core'; import { vmId } from '../helpers.js'; import { deleteVm } from '../actions/provider-actions.js'; @@ -149,24 +149,21 @@ export class DeleteDialog extends React.Component { if (!this.props.vm.persistent) { deleteButton = ( - - {_("This VM is transient. Shut it down if you wish to delete it.")} - } placement='top'> + - + ); } return ( - + <> { deleteButton } @@ -186,7 +183,7 @@ export class DeleteDialog extends React.Component { - + ); } } diff --git a/pkg/machines/components/deleteResource.jsx b/pkg/machines/components/deleteResource.jsx index b442b4eedb79..56eeb96e8306 100644 --- a/pkg/machines/components/deleteResource.jsx +++ b/pkg/machines/components/deleteResource.jsx @@ -19,8 +19,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Modal, OverlayTrigger, Tooltip } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { Modal } from 'patternfly-react'; +import { Button, Tooltip } from '@patternfly/react-core'; import cockpit from 'cockpit'; import { ModalError } from 'cockpit-components-inline-notification.jsx'; @@ -90,19 +90,16 @@ DeleteResourceModal.propTypes = { export const DeleteResourceButton = ({ objectId, disabled, overlayText, actionName, showDialog }) => { if (disabled) { return ( - - { overlayText } - } placement='top'> + - + ); } else { return ( diff --git a/pkg/machines/components/storagePools/storagePool.jsx b/pkg/machines/components/storagePools/storagePool.jsx index 67ee1e4d71de..b630bed66cfe 100644 --- a/pkg/machines/components/storagePools/storagePool.jsx +++ b/pkg/machines/components/storagePools/storagePool.jsx @@ -18,8 +18,7 @@ */ import React from 'react'; import PropTypes from 'prop-types'; -import { Tooltip, OverlayTrigger, UtilizationBar } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { Button, Progress, Tooltip } from '@patternfly/react-core'; import { ListingRow } from 'cockpit-components-listing.jsx'; import { @@ -47,22 +46,13 @@ export class StoragePool extends React.Component { ); const allocation = parseFloat(convertToUnit(storagePool.allocation, units.B, units.GiB).toFixed(2)); const capacity = parseFloat(convertToUnit(storagePool.capacity, units.B, units.GiB).toFixed(2)); - const availableTooltipFunction = (max, now) => Available {((max - now) / max).toFixed(2) * 100}% ; - const usedTooltipFunction = (max, now) => Used {(now / max).toFixed(2) * 100}% ; + const sizeLabel = String(cockpit.format("$0 / $1 GiB", allocation, capacity)); const size = ( - <> - - - ); - const sizeLabel = ( - <> - {`${allocation} / ${capacity} GiB`} - + ); const state = ( <> @@ -74,7 +64,6 @@ export class StoragePool extends React.Component { const cols = [ { name, header: true }, size, - sizeLabel, rephraseUI('connections', storagePool.connectionName), state, ]; @@ -165,7 +154,6 @@ class StoragePoolActions extends React.Component { @@ -174,25 +162,24 @@ class StoragePoolActions extends React.Component { ); if (this.state.operationInProgress) { deactivateButton = ( - {_("Operation is in progress")} } placement="top"> + {deactivateButton} - + ); activateButton = ( - {_("Operation is in progress")} } placement="top"> + {activateButton} - + ); } diff --git a/pkg/machines/components/storagePools/storagePoolDelete.jsx b/pkg/machines/components/storagePools/storagePoolDelete.jsx index 8b3276141949..6491252f900a 100644 --- a/pkg/machines/components/storagePools/storagePoolDelete.jsx +++ b/pkg/machines/components/storagePools/storagePoolDelete.jsx @@ -18,8 +18,8 @@ */ import React from 'react'; import PropTypes from 'prop-types'; -import { Modal, OverlayTrigger, Tooltip } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { Modal } from 'patternfly-react'; +import { Button, Tooltip } from '@patternfly/react-core'; import { getStorageVolumesUsage, storagePoolId } from '../../helpers.js'; import { ModalError } from 'cockpit-components-inline-notification.jsx'; @@ -192,19 +192,16 @@ export class StoragePoolDelete extends React.Component { if (!canDelete(storagePool, vms) || !storagePool.persistent) { return ( - - { tooltipText } - } placement='top'> + - + ); } else { return ( diff --git a/pkg/machines/components/storagePools/storagePoolList.jsx b/pkg/machines/components/storagePools/storagePoolList.jsx index 9ada25abad19..4955d23b815e 100644 --- a/pkg/machines/components/storagePools/storagePoolList.jsx +++ b/pkg/machines/components/storagePools/storagePoolList.jsx @@ -51,7 +51,7 @@ export class StoragePoolList extends React.Component {
{storagePools diff --git a/pkg/machines/components/storagePools/storageVolumeCreate.jsx b/pkg/machines/components/storagePools/storageVolumeCreate.jsx index edbbd6be9a15..2dab6a5080db 100644 --- a/pkg/machines/components/storagePools/storageVolumeCreate.jsx +++ b/pkg/machines/components/storagePools/storageVolumeCreate.jsx @@ -19,8 +19,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Modal, OverlayTrigger, Tooltip } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { Modal } from 'patternfly-react'; +import { Button, Tooltip } from '@patternfly/react-core'; import cockpit from 'cockpit'; import { ModalError } from 'cockpit-components-inline-notification.jsx'; @@ -138,19 +138,16 @@ export class StorageVolumeCreate extends React.Component { ); } else { return ( - - {_("Pool type doesn't support volume creation")} - } placement='top'> + - + ); } }; diff --git a/pkg/machines/components/storagePools/storageVolumeDelete.jsx b/pkg/machines/components/storagePools/storageVolumeDelete.jsx index b643317b5aea..9b94480153ad 100644 --- a/pkg/machines/components/storagePools/storageVolumeDelete.jsx +++ b/pkg/machines/components/storagePools/storageVolumeDelete.jsx @@ -19,8 +19,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { OverlayTrigger, Tooltip } from 'patternfly-react'; -import { Button } from '@patternfly/react-core'; +import { Button, Tooltip } from '@patternfly/react-core'; import { storageVolumeDelete, storagePoolRefresh } from '../../libvirt-dbus.js'; import cockpit from 'cockpit'; @@ -69,10 +68,9 @@ export class StorageVolumeDelete extends React.Component { return deleteBtn; return ( - { _("One or more selected volumes are used by domains. Detach the disks first to allow volume deletion.") }}> - { deleteBtn } - + + { deleteBtn } + ); } } diff --git a/pkg/machines/components/vmOverviewTabLibvirt.jsx b/pkg/machines/components/vmOverviewTabLibvirt.jsx index e08c5b18b4e8..d0bfcbac3bc3 100644 --- a/pkg/machines/components/vmOverviewTabLibvirt.jsx +++ b/pkg/machines/components/vmOverviewTabLibvirt.jsx @@ -19,8 +19,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import cockpit from 'cockpit'; -import { OverlayTrigger, Tooltip } from "patternfly-react"; -import { Button } from "@patternfly/react-core"; +import { Button, Tooltip } from "@patternfly/react-core"; import { VCPUModal } from './vcpuModal.jsx'; import MemoryModal from './vm/memoryModal.jsx'; @@ -211,39 +210,39 @@ class VmOverviewTabLibvirt extends React.Component { const uefiPaths = this.getOVMFBinariesOnHost(this.state.loaderElems).filter(elem => elem !== undefined); const firmwareLink = disabled => { return ( -
+ -
+ ); }; if (vm.state != "shut off") { if (vm.persistent) { firmwareLinkWrapper = ( - { _("Shut off the VM in order to edit firmware configuration") } } placement='top'> + {firmwareLink(true)} - + ); } else { firmwareLinkWrapper = ( - { _("Transient VMs don't support editting firmware configuration") } } placement='top'> + {firmwareLink(true)} - + ); } } else if (!supportsUefiXml(this.state.loaderElems[0])) { firmwareLinkWrapper = ( - { _("Libvirt or hypervisor does not support UEFI") } } placement='top'> + {firmwareLink(true)} - + ); } else if (uefiPaths.length == 0) { firmwareLinkWrapper = ( - { _("Libvirt did not detect any UEFI/OVMF firmware image installed on the host") } } placement='top'> + {firmwareLink(true)} - + ); } else { firmwareLinkWrapper = firmwareLink(false); diff --git a/pkg/machines/components/warningInactive.jsx b/pkg/machines/components/warningInactive.jsx index 57cef3a4891f..b45661dc97e3 100644 --- a/pkg/machines/components/warningInactive.jsx +++ b/pkg/machines/components/warningInactive.jsx @@ -2,15 +2,15 @@ import React from 'react'; import PropTypes from 'prop-types'; import cockpit from 'cockpit'; -import { OverlayTrigger, Tooltip } from "patternfly-react"; +import { Tooltip } from "@patternfly/react-core"; const _ = cockpit.gettext; const WarningInactive = ({ iconId, tooltipId }) => { return ( - { _("Changes will take effect after shutting down the VM") } } placement='top'> + - + ); }; diff --git a/pkg/networkmanager/firewall.jsx b/pkg/networkmanager/firewall.jsx index 3f13641b0995..f068220bf310 100644 --- a/pkg/networkmanager/firewall.jsx +++ b/pkg/networkmanager/firewall.jsx @@ -24,10 +24,8 @@ import ReactDOM from "react-dom"; import { ListView, Modal, - OverlayTrigger, - Tooltip } from "patternfly-react"; -import { Alert, Button } from '@patternfly/react-core'; +import { Alert, Button, Tooltip } from '@patternfly/react-core'; import { ExclamationCircleIcon, TrashIcon } from '@patternfly/react-icons'; import firewall from "./firewall-client.js"; @@ -131,10 +129,11 @@ function ZoneSection(props) { let deleteButton; if (props.readonly) { deleteButton = ( - { _("You are not authorized to modify the firewall.") } }> - - + + + + + ); } else { deleteButton = ; @@ -876,13 +875,13 @@ export class Firewall extends React.Component { let firewallOnOff; if (firewall.readonly) { - firewallOnOff = { _("You are not authorized to modify the firewall.") } }> + firewallOnOff = - ; + ; } else { firewallOnOff = i != "_time"); names.sort(); return names.map(n => ( - { n + " " + pkgs[n] } } placement="top"> +
  • {n}
  • -
    ) + ) ); } diff --git a/pkg/packagekit/updates.jsx b/pkg/packagekit/updates.jsx index 9c1cdd14195f..413b26d25e6a 100644 --- a/pkg/packagekit/updates.jsx +++ b/pkg/packagekit/updates.jsx @@ -24,8 +24,7 @@ import React, { useState, useEffect } from "react"; import ReactDOM from 'react-dom'; import moment from "moment"; -import { OverlayTrigger, Tooltip } from "patternfly-react"; -import { Button } from '@patternfly/react-core'; +import { Button, Tooltip } from '@patternfly/react-core'; import { RebootingIcon, CheckIcon, ExclamationCircleIcon } from "@patternfly/react-icons"; import { Remarkable } from "remarkable"; @@ -273,26 +272,26 @@ class UpdateItem extends React.Component { secSeverityURL = {secSeverity}; type = ( <> - { secSeverity || _("security") } } placement="top"> +   - + { (info.cve_urls && info.cve_urls.length > 0) ? info.cve_urls.length : "" } ); } else { const tip = (info.severity >= PK.Enum.INFO_NORMAL) ? _("bug fix") : _("enhancement"); type = ( <> - {tip} } placement="top"> +   - + { bugs ? info.bug_urls.length : "" } ); } const pkgList = this.props.pkgNames.map(n => ( - {packageSummaries[n.name] + " (" + n.arch + ")"} } placement="top"> + {n.name} - ) + ) ); const pkgs = insertCommas(pkgList); let pkgsTruncated = pkgs; diff --git a/pkg/shell/nav.jsx b/pkg/shell/nav.jsx index 3af725d0eb0a..5798e8e269a7 100644 --- a/pkg/shell/nav.jsx +++ b/pkg/shell/nav.jsx @@ -5,9 +5,9 @@ import PropTypes from 'prop-types'; import { Nav, + Tooltip, TooltipPosition, } from '@patternfly/react-core'; import { ExclamationCircleIcon, ExclamationTriangleIcon, InfoCircleIcon } from '@patternfly/react-icons'; -import { OverlayTrigger, Tooltip } from 'patternfly-react'; const _ = cockpit.gettext; @@ -146,13 +146,14 @@ function PageStatus({ status, name }) { desc = desc.join("-"); return ( - { status.title } }> + {status.type == "error" ? : status.type == "warning" ? : } - + ); } diff --git a/pkg/storaged/dialog.jsx b/pkg/storaged/dialog.jsx index 2fcf42e752a4..5cc0b3f27ee5 100644 --- a/pkg/storaged/dialog.jsx +++ b/pkg/storaged/dialog.jsx @@ -214,8 +214,8 @@ import cockpit from "cockpit"; import React from "react"; -import { OverlayTrigger, Tooltip, TypeAheadSelect } from "patternfly-react"; -import { Alert } from "@patternfly/react-core"; +import { TypeAheadSelect } from "patternfly-react"; +import { Alert, Tooltip, TooltipPosition } from "@patternfly/react-core"; import { show_modal_dialog } from "cockpit-components-dialog.jsx"; import { StatelessSelect, SelectEntry } from "cockpit-components-select.jsx"; @@ -693,11 +693,11 @@ const CheckBoxComponent = ({ tag, val, title, tooltip, update_function }) => { onChange={event => update_function(event.target.checked)} /> {title} - { tooltip && {tooltip} } placement="right"> + { tooltip && - + }
    ); diff --git a/pkg/storaged/storage-controls.jsx b/pkg/storaged/storage-controls.jsx index f81218f2f263..f24ff60af3e6 100644 --- a/pkg/storaged/storage-controls.jsx +++ b/pkg/storaged/storage-controls.jsx @@ -18,8 +18,7 @@ */ import React from "react"; -import { OverlayTrigger, Tooltip } from "patternfly-react"; -import { Button, Progress, ProgressMeasureLocation, ProgressVariant } from '@patternfly/react-core'; +import { Button, Tooltip, TooltipPosition, Progress, ProgressMeasureLocation, ProgressVariant } from '@patternfly/react-core'; import { BarsIcon } from '@patternfly/react-icons'; import cockpit from "cockpit"; @@ -54,12 +53,12 @@ class StorageControl extends React.Component { if (excuse) { return ( - {excuse} } - placement={this.props.excuse_placement || "top"}> + { this.props.content(excuse) } - + ); } else { return this.props.content(); diff --git a/pkg/systemd/services/service-details.jsx b/pkg/systemd/services/service-details.jsx index f07dc118eebb..b124a2a7d12b 100644 --- a/pkg/systemd/services/service-details.jsx +++ b/pkg/systemd/services/service-details.jsx @@ -20,8 +20,8 @@ import React from "react"; import moment from "moment"; import PropTypes from "prop-types"; -import { Alert, Button } from "@patternfly/react-core"; -import { Modal, OverlayTrigger, Tooltip, DropdownKebab, MenuItem } from 'patternfly-react'; +import { Alert, Button, Tooltip, TooltipPosition } from "@patternfly/react-core"; +import { Modal, DropdownKebab, MenuItem } from 'patternfly-react'; import cockpit from "cockpit"; import { OnOffSwitch } from "cockpit-components-onoff.jsx"; @@ -544,11 +544,11 @@ export class ServiceDetails extends React.Component { { this.props.permitted && <> { !masked && !isStatic && - { tooltipMessage } } placement='right'> + - + } diff --git a/pkg/systemd/services/services-list.jsx b/pkg/systemd/services/services-list.jsx index 8f7c106ddb1b..31d8260fc5b6 100644 --- a/pkg/systemd/services/services-list.jsx +++ b/pkg/systemd/services/services-list.jsx @@ -21,9 +21,8 @@ import React from "react"; import { DataList, DataListItem, DataListCell, DataListItemRow, DataListItemCells, DataListAction, - Badge, + Tooltip, TooltipPosition, Badge, } from '@patternfly/react-core'; -import { OverlayTrigger, Tooltip } from 'patternfly-react'; import cockpit from "cockpit"; @@ -101,7 +100,7 @@ class ServicesRow extends React.PureComponent { {HasFailed && } {CombinedState} } - { tooltipMessage } } placement='left'>{unitFileState} + {unitFileState} diff --git a/pkg/users/account-roles.js b/pkg/users/account-roles.js index d42b85dd50f0..ff69cd44ca91 100644 --- a/pkg/users/account-roles.js +++ b/pkg/users/account-roles.js @@ -19,7 +19,7 @@ import cockpit from 'cockpit'; import React, { useState } from 'react'; -import { OverlayTrigger, Tooltip } from 'patternfly-react'; +import { Tooltip, TooltipPosition } from '@patternfly/react-core'; import { superuser } from "superuser.jsx"; import { show_unexpected_error } from "./dialog-utils.js"; @@ -68,13 +68,10 @@ export function AccountRoles({ account, groups, currently_logged_in }) { groups.forEach(group => { if (role_groups[group.name]) { - const tooltip = ( - - {cockpit.format(_("Unix group: $0"), group.name)} - ); roles.push(
    - + - +
    ); } }); diff --git a/src/base1/patternfly-overrides.scss b/src/base1/patternfly-overrides.scss index 330665e27e9c..086c01803894 100644 --- a/src/base1/patternfly-overrides.scss +++ b/src/base1/patternfly-overrides.scss @@ -706,15 +706,36 @@ th > label { /* Readjust the tooltip for our needs */ .tooltip { - margin: -2.75rem 0 0 -2px !important; - /* Center horizontally based on its own width */ - transform: translateX(-50%); - /* Don't trap mouse hovering */ - pointer-events: none; + margin: -2.75rem 0 0 -2px !important; + /* Center horizontally based on its own width */ + transform: translateX(-50%); + /* Don't trap mouse hovering */ + pointer-events: none; } } } +/* Style tooltips to resemble PF4 */ +.tooltip { + // Make it 100% opaque + &.in { opacity: 1; } + + // Recolor the arrows + &.top &-arrow { border-top-color: var(--pf-global--BackgroundColor--dark-100); } + &.right &-arrow { border-right-color: var(--pf-global--BackgroundColor--dark-100); } + &.bottom &-arrow { border-bottom-color: var(--pf-global--BackgroundColor--dark-100); } + &.left &-arrow { border-left-color: var(--pf-global--BackgroundColor--dark-100); } + + // Match content background, padding, fonts, etc. to PF4 tooltips + &-inner { + background: var(--pf-global--BackgroundColor--dark-100); + font-size: var(--pf-global--FontSize--sm); + line-height: var(--pf-global--LineHeight--md); + padding: var(--pf-global--spacer--sm) var(--pf-global--spacer--md); + text-align: center; + } +} + /* Round off badges, similar to PF4 */ .badge { border-radius: 30em; diff --git a/test/verify/check-host-switching b/test/verify/check-host-switching index 3d1ec07b957f..e28589253f59 100755 --- a/test/verify/check-host-switching +++ b/test/verify/check-host-switching @@ -216,8 +216,11 @@ class TestHostSwitching(MachineCase, HostSwitcherHelpers): b.wait_not_present("iframe.container-frame[name='cockpit1:10.111.113.3/system']") b.wait_visible(".nav-item span[data-for='/@10.111.113.3'] .nav-status") b.wait_visible(".nav-item span[data-for='/@10.111.113.3'] #localhost-error") - b.mouse("#localhost-error", "mouseover") - b.wait_in_text("div.tooltip", "Connection Error") + if m.image not in ["rhel-8-3-distropkg"]: # changed in PR #14195 + b.mouse("#localhost-error", "mouseenter") + b.wait_in_text(".pf-c-tooltip", "Connection Error") + b.mouse("#localhost-error", "mouseleave") + b.wait_not_present("div.pf-c-tooltip") b.click("#nav-hosts .nav-item span[data-for='/@10.111.113.3'] button.nav-action.pf-m-secondary") b.wait_popup('edit-host-dialog') diff --git a/test/verify/check-kdump b/test/verify/check-kdump index 70bd2105e6d2..663dee349bf1 100755 --- a/test/verify/check-kdump +++ b/test/verify/check-kdump @@ -77,9 +77,9 @@ class TestKdump(MachineCase): assertActive(True) else: # right now we have no memory reserved - b.mouse("#app span.popover-ct-kdump", "mouseover") - b.wait_in_text("div.tooltip", "No memory reserved.") - b.mouse("#app span.popover-ct-kdump", "mouseout") + b.mouse("#app span.popover-ct-kdump", "mouseenter") + b.wait_in_text(".pf-c-tooltip", "No memory reserved.") + b.mouse("#app span.popover-ct-kdump", "mouseleave") # service should indicate an error and the button should be off b.wait_in_text("#app", "Service has an error") assertActive(False) diff --git a/test/verify/check-machines b/test/verify/check-machines index cc2f50d98fbb..4d56d0093444 100755 --- a/test/verify/check-machines +++ b/test/verify/check-machines @@ -2708,9 +2708,9 @@ class TestMachines(MachineCase, StorageHelpers, NetworkHelpers): hack_broken_caps() - b.mouse("#vm-VmNotInstalled-firmware-tooltip", "mouseover") - b.wait_in_text("#missing-uefi-images .tooltip-inner", "Libvirt did not detect any UEFI/OVMF firmware image installed on the host") - b.mouse("#vm-VmNotInstalled-firmware-tooltip", "mouseout") + b.mouse("#vm-VmNotInstalled-firmware-tooltip", "mouseenter") + b.wait_in_text(".pf-c-tooltip", "Libvirt did not detect any UEFI/OVMF firmware image installed on the host") + b.mouse("#vm-VmNotInstalled-firmware-tooltip", "mouseleave") b.wait_not_present("#missing-uefi-images") m.execute("umount " + ovmf_path) diff --git a/test/verify/check-packagekit b/test/verify/check-packagekit index fa0a9ffffac7..d38e27f5e1df 100755 --- a/test/verify/check-packagekit +++ b/test/verify/check-packagekit @@ -87,10 +87,10 @@ class TestUpdates(NoSubManCase): self.assertEqual(b.text(row + "th > span:nth-of-type(%i)" % idx), pkg) else: self.assertEqual(b.text(row + "th span"), pkgname) - b.mouse(row + "th span", "mouseover") - b.wait_text("div.tooltip", "dummy " + pkgname + " (" + arch + ")") - b.mouse(row + "th span", "mouseout") - b.wait_not_present("div.tooltip") + b.mouse(row + "th span", "mouseenter") + b.wait_text("div.pf-c-tooltip", "dummy " + pkgname + " (" + arch + ")") + b.mouse(row + "th span", "mouseleave") + b.wait_not_present("div.pf-c-tooltip") self.assertEqual(b.text(row + "td:nth-of-type(2)"), version) # verify type self.assertTrue(b.is_present(row + "td:nth-of-type(3) span." + severity_to_icon[severity])) @@ -299,10 +299,10 @@ class TestUpdates(NoSubManCase): self.assertIn("RHSA-2000:0002", details) # icon has critical class self.assertIn("severity-critical", b.attr(sel + " td.type span", "class")) - b.mouse(sel + " td.type span", "mouseover") - b.wait_text("div.tooltip", "critical") - b.mouse(sel + " td.type span", "mouseout") - b.wait_not_present("div.tooltip") + b.mouse(sel + " td.type span", "mouseenter") + b.wait_text("div.pf-c-tooltip", "critical") + b.mouse(sel + " td.type span", "mouseleave") + b.wait_not_present("div.pf-c-tooltip") # details has link to severity definition self.assertIn("access.redhat.com", b.attr(sel + " .listing-ct-body dd.severity a:first-of-type", "href")) @@ -312,12 +312,12 @@ class TestUpdates(NoSubManCase): ch = b.eval_js('document.querySelector("%s").innerHTML' % (sel + " td.changelog")) self.assertNotIn("
  • ", ch) self.assertNotIn("*", ch) - # should show bug fix icon and tooltip + # should show bug fix icon and pf-c-tooltip self.assertIn("fa-bug", b.attr(sel + " td.type span", "class")) - b.mouse(sel + " td.type span", "mouseover") - b.wait_text("div.tooltip", "bug fix") - b.mouse(sel + " td.type span", "mouseout") - b.wait_not_present("div.tooltip") + b.mouse(sel + " td.type span", "mouseenter") + b.wait_text("div.pf-c-tooltip", "bug fix") + b.mouse(sel + " td.type span", "mouseleave") + b.wait_not_present("div.pf-c-tooltip") # norefs: just changelog, show both binary packages sel = self.check_nth_update(5, ["norefs-bin", "norefs-doc"], "2-1", self.enhancement_severity, diff --git a/test/verify/check-pages b/test/verify/check-pages index 682ea6bca23f..aee89ad08bca 100755 --- a/test/verify/check-pages +++ b/test/verify/check-pages @@ -667,8 +667,10 @@ OnCalendar=daily b.switch_to_top() b.wait_present("#development-info") - b.mouse("#development-info", "mouseover") - b.wait_in_text("div.tooltip", "My Little Page Status") + if self.machine.image not in ["rhel-8-3-distropkg"]: # changed in PR #14195 + b.mouse("#development-info", "mouseenter") + b.wait_in_text(".pf-c-tooltip", "My Little Page Status") + b.mouse("#development-info", "mouseleave") b.go("/playground/notifications-receiver") b.enter_page("/playground/notifications-receiver") diff --git a/test/verify/check-realms b/test/verify/check-realms index a6ac860aabb5..6cf25c4e306f 100755 --- a/test/verify/check-realms +++ b/test/verify/check-realms @@ -855,9 +855,14 @@ class TestPackageInstall(packagelib.PackageCase): with b.wait_timeout(4): def check(): try: - b.mouse("#system_information_domain_tooltip", "mouseover") - b.wait_in_text(".tooltip-inner", text) - b.mouse("#system_information_domain_tooltip", "mouseout") + if self.image in ["rhel-8-3-distropkg"]: # changed in PR #14195 + b.mouse("#system_information_domain_tooltip", "mouseover") + b.wait_in_text(".tooltip-inner", text) + b.mouse("#system_information_domain_tooltip", "mouseout") + else: + b.mouse("#system_information_domain_tooltip", "mouseenter") + b.wait_in_text("div.pf-c-tooltip", text) + b.mouse("#system_information_domain_tooltip", "mouseleave") return True except (RuntimeError, Error): return False diff --git a/test/verify/check-system-info b/test/verify/check-system-info index 1ef95a149286..6babcad15ffe 100755 --- a/test/verify/check-system-info +++ b/test/verify/check-system-info @@ -610,8 +610,11 @@ fi self.login_and_go('/system/hwinfo', superuser=False) b.wait_present('#hwinfo th:contains(CPU)') b.wait_present('#cpu_mitigations[disabled]') - b.mouse('#tip-cpu-security', 'mouseover') - b.wait_text('.tooltip-inner', 'The user admin is not permitted to change cpu security mitigations') + if m.image not in ["rhel-8-3-distropkg"]: # changed in PR #14195 + b.mouse('#tip-cpu-security', 'mouseenter') + b.wait_text('.pf-c-tooltip', 'The user admin is not permitted to change cpu security mitigations') + b.mouse('#tip-cpu-security', 'mouseleave') + b.wait_not_present("div.pf-c-tooltip") # Behaviour if grub update tools are missing b.logout()