KEYCLOAK-6262 Incorporate new visual design from PatternFly (#4983)

* KEYCLOAK-6262 Incorporate new visual design from PatternFly

Update the username or email

Fix narrow/wide in template.ftl

minor style update

Add the Realm HTML name and image

Config OTP and Update Password
Not display the locale selector if there is less than 1 locale.

Fix margins/paddings on config otp screens

Fix title

Upgraded to PatternFly 3.41.6

Added RCUE and updated RH-SSO login theme

Refine the RCUE padding issue

Fix tests

Fix Keycloak background

Fix

* fix the overflowing issue

* Fix Console UI Tests to reflect the new login page

* Fix the different style of the IdP buttons
Fix the IE placeholder issue - add label

* Removed placeholder on login and reset pass. Fixed Keycloak background on wide screens.

* fixed the stackoverflow issues
fixed the width in the tablets
This commit is contained in:
June Zhang 2018-03-21 17:47:33 +08:00 committed by Stian Thorgersen
parent 66507cbf91
commit ca15db81bb
699 changed files with 506534 additions and 1714 deletions

View file

@ -30,6 +30,9 @@ import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
*/
public class LoginActions extends AuthRealm {
@FindBy(id = "kc-page-title")
protected WebElement heading;
@Override
public UriBuilder createUriBuilder() {
return super.createUriBuilder()

View file

@ -80,9 +80,6 @@ public class LoginForm extends Form {
}
public void login() {
labelPassword.click(); // This is a nasty trick for IE; As IE was "moving the cursor" towards the login button
// it opened the internationalization menu (when present) and then clicked
// one of the languages instead of the Login button
clickLink(loginButton);
}

View file

@ -16,7 +16,6 @@
*/
package org.keycloak.testsuite.auth.page.login;
import org.keycloak.testsuite.util.UIUtils;
import org.keycloak.testsuite.util.WaitUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -37,7 +36,7 @@ public class TermsAndConditions extends LoginActions {
@Override
public boolean isCurrent() {
return UIUtils.currentTitleEquals("Terms and Conditions");
return heading.getText().equals("Terms and Conditions");
}
public void acceptTerms() {

View file

@ -19,27 +19,23 @@ package org.keycloak.testsuite.auth.page.login;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
/**
*
* @author <a href="mailto:vramik@redhat.com">Vlastislav Ramik</a>
*/
public class VerifyEmail extends Authenticate {
@FindBy(xpath = "//div[@id='kc-form-wrapper']/p")
@FindBy(xpath = "//div[@id='kc-content-wrapper']/p[contains(@class, 'instruction')][1]")
private WebElement instruction;
@FindBy(id = "kc-error-message")
private WebElement error;
public String getInstructionMessage() {
waitUntilElement(instruction).is().present();
return instruction.getText();
}
public String getErrorMessage() {
waitUntilElement(error).is().present();
return error.getText();
}
}

View file

@ -5,9 +5,9 @@ import org.jboss.arquillian.test.api.ArquillianResource;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import static org.keycloak.testsuite.util.URLUtils.navigateToUri;
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
import static org.keycloak.testsuite.util.UIUtils.clickLink;
/**
* @author Vaclav Muzikar <vmuzikar@redhat.com>
@ -16,18 +16,18 @@ public class Dropdown {
@Root
private WebElement dropDownRoot; // MUST be .kc-dropdown
@FindBy(id = "kc-current-locale-link")
private WebElement localeLink;
@ArquillianResource
private WebDriver driver;
public String getSelected() {
waitUntilElement(dropDownRoot).is().present();
WebElement element = dropDownRoot.findElement(By.xpath("./a"));
return element.getText();
return localeLink.getText();
}
public void selectByText(String text) {
waitUntilElement(dropDownRoot).is().present();
WebElement element = dropDownRoot.findElement(By.xpath("./ul/li/a[text()='" + text + "']"));
navigateToUri(element.getAttribute("href"), true); // TODO: move cursor to show the menu and then click the menu item
localeLink.click();
clickLink(dropDownRoot.findElement(By.xpath("./ul/li/a[text()='" + text + "']")));
}
}

View file

@ -19,6 +19,8 @@ package org.keycloak.testsuite.page;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.junit.Assert;
import org.keycloak.testsuite.pages.PageUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -55,9 +57,7 @@ public class LoginPasswordUpdatePage {
}
public void assertCurrent() {
String name = getClass().getSimpleName();
Assert.assertTrue("Expected " + name + " but was " + driver.getTitle() + " (" + driver.getCurrentUrl() + ")",
isCurrent());
Assert.assertEquals("Update password", PageUtils.getPageTitle(driver));
}
public void open() {

View file

@ -21,6 +21,7 @@ import org.jboss.arquillian.test.api.ArquillianResource;
import org.junit.Assert;
import org.keycloak.common.util.KeycloakUriBuilder;
import org.keycloak.testsuite.arquillian.SuiteContext;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import java.net.URI;

View file

@ -41,7 +41,7 @@ public class ConsentPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().equalsIgnoreCase("grant access");
return PageUtils.getPageTitle(driver).contains("Grant Access to ");
}
@Override

View file

@ -52,7 +52,7 @@ public class ErrorPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle() != null && driver.getTitle().equals("We're sorry...");
return PageUtils.getPageTitle(driver) != null && PageUtils.getPageTitle(driver).equals("We're sorry...");
}
@Override

View file

@ -36,7 +36,7 @@ public class IdpConfirmLinkPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().equals("Account already exists");
return PageUtils.getPageTitle(driver).equals("Account already exists");
}
public String getMessage() {

View file

@ -30,7 +30,7 @@ public class IdpLinkEmailPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().startsWith("Link ");
return PageUtils.getPageTitle(driver).startsWith("Link ");
}
@Override

View file

@ -49,7 +49,7 @@ public class LoginConfigTotpPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Mobile Authenticator Setup");
return PageUtils.getPageTitle(driver).equals("Mobile Authenticator Setup");
}
public void open() {

View file

@ -42,7 +42,7 @@ public class LoginExpiredPage extends AbstractPage {
public boolean isCurrent() {
return driver.getTitle().equals("Page has expired");
return PageUtils.getPageTitle(driver).equals("Page has expired");
}
public void open() {

View file

@ -46,7 +46,7 @@ public class LoginPasswordResetPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Forgot Your Password?");
return PageUtils.getPageTitle(driver).equals("Forgot Your Password?");
}
public void open() {

View file

@ -47,7 +47,7 @@ public class LoginPasswordUpdatePage extends LanguageComboboxAwarePage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Update password");
return PageUtils.getPageTitle(driver).equals("Update password");
}
public void open() {

View file

@ -40,7 +40,7 @@ public class LoginRecoverUsernamePage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Forgot Your Username?");
return PageUtils.getPageTitle(driver).equals("Forgot Your Username?");
}
public void open() {

View file

@ -35,7 +35,7 @@ public class LoginUpdateProfileEditUsernameAllowedPage extends LoginUpdateProfil
}
public boolean isCurrent() {
return driver.getTitle().equals("Update Account Information");
return PageUtils.getPageTitle(driver).equals("Update Account Information");
}
@Override

View file

@ -73,7 +73,7 @@ public class LoginUpdateProfilePage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Update Account Information");
return PageUtils.getPageTitle(driver).equals("Update Account Information");
}
@Override

View file

@ -40,7 +40,7 @@ public class OAuthGrantPage extends LanguageComboboxAwarePage {
@Override
public boolean isCurrent() {
return driver.getTitle().equals("Grant Access");
return PageUtils.getPageTitle(driver).contains("Grant Access to ");
}
@Override

View file

@ -0,0 +1,12 @@
package org.keycloak.testsuite.pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class PageUtils {
public static String getPageTitle(WebDriver driver) {
return driver.findElement(By.id("kc-page-title")).getText();
}
}

View file

@ -170,7 +170,7 @@ public class RegisterPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Register with test");
return PageUtils.getPageTitle(driver).equals("Register");
}
@Override

View file

@ -31,7 +31,7 @@ public class TermsAndConditionsPage extends AbstractPage {
private WebElement cancelButton;
public boolean isCurrent() {
return driver.getTitle().equals("Terms and Conditions");
return PageUtils.getPageTitle(driver).equals("Terms and Conditions");
}
public void acceptTerms() {

View file

@ -52,7 +52,7 @@ public class UpdateAccountInformationPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().equalsIgnoreCase("update account information");
return PageUtils.getPageTitle(driver).equalsIgnoreCase("update account information");
}
@Override

View file

@ -50,7 +50,7 @@ public class ValidatePassworrdEmailResetPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Forgot Your Password?");
return PageUtils.getPageTitle(driver).equals("Forgot Your Password?");
}
public void open() {

View file

@ -38,7 +38,7 @@ public class VerifyEmailPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Email verification");
return PageUtils.getPageTitle(driver).equals("Email verification");
}
public void clickResendEmail() {

View file

@ -30,6 +30,7 @@ import org.keycloak.testsuite.admin.ApiUtil;
import org.keycloak.testsuite.admin.Users;
import org.keycloak.testsuite.auth.page.login.OneTimeCode;
import org.keycloak.testsuite.pages.LoginConfigTotpPage;
import org.keycloak.testsuite.pages.PageUtils;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.core.Response;
@ -384,7 +385,7 @@ public class CustomAuthFlowOTPTest extends AbstractCustomAccountManagementTest {
//test OTP is required
testRealmAccountManagementPage.navigateTo();
testRealmLoginPage.form().login(testUser);
assertEquals(driver.getTitle(), "Mobile Authenticator Setup");
assertEquals(PageUtils.getPageTitle(driver), "Mobile Authenticator Setup");
configureOTP();
testRealmLoginPage.form().login(testUser);

View file

@ -59,6 +59,7 @@ import org.keycloak.testsuite.page.LoginPasswordUpdatePage;
import org.keycloak.testsuite.pages.ErrorPage;
import org.keycloak.testsuite.pages.InfoPage;
import org.keycloak.testsuite.pages.LoginPage;
import org.keycloak.testsuite.pages.PageUtils;
import org.keycloak.testsuite.pages.ProceedPage;
import org.keycloak.testsuite.runonserver.RunOnServerDeployment;
import org.keycloak.testsuite.util.AdminEventPaths;
@ -69,6 +70,7 @@ import org.keycloak.testsuite.util.OAuthClient;
import org.keycloak.testsuite.util.RealmBuilder;
import org.keycloak.testsuite.util.RoleBuilder;
import org.keycloak.testsuite.util.UserBuilder;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import javax.mail.MessagingException;
@ -702,11 +704,11 @@ public class UserTest extends AbstractAdminTest {
passwordUpdatePage.changePassword("new-pass", "new-pass");
assertEquals("Your account has been updated.", driver.getTitle());
assertEquals("Your account has been updated.", PageUtils.getPageTitle(driver));
driver.navigate().to(link);
assertEquals("We're sorry...", driver.getTitle());
assertEquals("We're sorry...", PageUtils.getPageTitle(driver));
}
@Test
@ -742,7 +744,7 @@ public class UserTest extends AbstractAdminTest {
passwordUpdatePage.changePassword("new-pass" + i, "new-pass" + i);
i++;
assertEquals("Your account has been updated.", driver.getTitle());
assertEquals("Your account has been updated.", PageUtils.getPageTitle(driver));
}
for (MimeMessage message : greenMail.getReceivedMessages()) {
@ -787,7 +789,7 @@ public class UserTest extends AbstractAdminTest {
passwordUpdatePage.changePassword("new-pass" + i, "new-pass" + i);
i++;
assertEquals("Your account has been updated.", driver.getTitle());
assertEquals("Your account has been updated.", PageUtils.getPageTitle(driver));
}
for (MimeMessage message : greenMail.getReceivedMessages()) {
@ -837,7 +839,7 @@ public class UserTest extends AbstractAdminTest {
passwordUpdatePage.changePassword("new-pass", "new-pass");
assertEquals("Your account has been updated.", driver.getTitle());
assertEquals("Your account has been updated.", PageUtils.getPageTitle(driver));
}
@Test
@ -939,11 +941,11 @@ public class UserTest extends AbstractAdminTest {
passwordUpdatePage.changePassword("new-pass", "new-pass");
assertEquals("Your account has been updated.", driver.getTitle());
assertEquals("Your account has been updated.", PageUtils.getPageTitle(driver));
driver.navigate().to(link);
assertEquals("We're sorry...", driver.getTitle());
assertEquals("We're sorry...", PageUtils.getPageTitle(driver));
}
@Test
@ -1002,7 +1004,7 @@ public class UserTest extends AbstractAdminTest {
passwordUpdatePage.changePassword("new-pass", "new-pass");
assertEquals("Your account has been updated.", driver.getTitle());
assertEquals("Your account has been updated.", driver.findElement(By.id("kc-page-title")).getText());
String pageSource = driver.getPageSource();
@ -1011,7 +1013,7 @@ public class UserTest extends AbstractAdminTest {
driver.navigate().to(link);
assertEquals("We're sorry...", driver.getTitle());
assertEquals("We're sorry...", PageUtils.getPageTitle(driver));
}
@ -1209,7 +1211,7 @@ public class UserTest extends AbstractAdminTest {
driver.navigate().to(accountUrl);
assertEquals("Log in to admin-client-test", driver.getTitle());
assertEquals("Log In", PageUtils.getPageTitle(driver));
loginPage.login("user1", "password");

View file

@ -108,7 +108,7 @@ public abstract class AbstractBaseBrokerTest extends AbstractKeycloakTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -122,7 +122,7 @@ public abstract class AbstractBaseBrokerTest extends AbstractKeycloakTest {
protected void logInAsUserInIDPForFirstTime() {
logInAsUserInIDP();
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
Assert.assertTrue(updateAccountInformationPage.isCurrent());
Assert.assertTrue("We must be on correct realm right now",
@ -152,7 +152,7 @@ public abstract class AbstractBaseBrokerTest extends AbstractKeycloakTest {
try {
Retry.execute(() -> {
try {
waitForPage(driver, "log in to " + realm);
waitForPage(driver, "log in to " + realm, true);
} catch (TimeoutException ex) {
driver.navigate().refresh();
log.debug("[Retriable] Timed out waiting for login page");

View file

@ -111,7 +111,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -119,7 +119,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Logging in");
accountLoginPage.login(bc.getUserLogin(), bc.getUserPassword());
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
updateAccountInformationPage.assertCurrent();
Assert.assertTrue("We must be on correct realm right now",
@ -158,7 +158,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now", driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -193,7 +193,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -201,7 +201,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Logging in");
accountLoginPage.login(bc.getUserLogin(), bc.getUserPassword());
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
Assert.assertTrue(updateAccountInformationPage.isCurrent());
Assert.assertTrue("We must be on correct realm right now",
@ -211,7 +211,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
updateAccountInformationPage.updateAccountInformation("Firstname", "Lastname");
//link account by email
waitForPage(driver, "account already exists");
waitForPage(driver, "account already exists", false);
idpConfirmLinkPage.clickLinkAccount();
String url = assertEmailAndGetUrl(MailServerConfiguration.FROM, USER_EMAIL,
@ -247,7 +247,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
driver.navigate().to(getAccountUrl(bc.consumerRealmName()));
try {
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
} catch (TimeoutException e) {
log.debug(driver.getTitle());
log.debug(driver.getPageSource());
@ -269,7 +269,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
accountLoginPage.clickSocial(bc.getIDPAlias());
try {
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
} catch (TimeoutException e) {
log.debug(driver.getTitle());
log.debug(driver.getPageSource());
@ -304,7 +304,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -314,10 +314,10 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.MINUTES);
waitForPage(driver, "grant access");
waitForPage(driver, "grant access", false);
consentPage.cancel();
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
// Revert consentRequired
adminClient.realm(bc.providerRealmName())
@ -422,7 +422,7 @@ public abstract class AbstractBrokerTest extends AbstractBaseBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "sorry");
waitForPage(driver, "sorry", false);
errorPage.assertCurrent();
String link = errorPage.getBackToApplicationLink();
Assert.assertTrue(link.endsWith("/auth/realms/consumer/account"));

View file

@ -11,6 +11,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.keycloak.testsuite.pages.PageUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
@ -45,10 +46,13 @@ public class BrokerTestTools {
return identityProviderRepresentation;
}
public static void waitForPage(WebDriver driver, final String title) {
public static void waitForPage(WebDriver driver, final String title, final boolean isHtmlTitle) {
WebDriverWait wait = new WebDriverWait(driver, 5);
ExpectedCondition<Boolean> condition = (WebDriver input) -> input.getTitle().toLowerCase().contains(title);
ExpectedCondition<Boolean> condition = (WebDriver input) -> isHtmlTitle ? input.getTitle().toLowerCase().contains(title) : PageUtils.getPageTitle(input).toLowerCase().contains(title);
System.out.println("WAIT FOR " + title);
System.out.println(driver.getPageSource());
wait.until(condition);
}

View file

@ -52,7 +52,7 @@ public class KcOidcBrokerAcrParameterTest extends AbstractBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -63,7 +63,7 @@ public class KcOidcBrokerAcrParameterTest extends AbstractBrokerTest {
log.debug("Logging in");
accountLoginPage.login(bc.getUserLogin(), bc.getUserPassword());
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
updateAccountInformationPage.assertCurrent();
Assert.assertTrue("We must be on correct realm right now",

View file

@ -73,7 +73,7 @@ public class KcOidcBrokerLoginHintTest extends AbstractBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -84,7 +84,7 @@ public class KcOidcBrokerLoginHintTest extends AbstractBrokerTest {
log.debug("Logging in");
accountLoginPage.login(bc.getUserPassword());
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
updateAccountInformationPage.assertCurrent();
Assert.assertTrue("We must be on correct realm right now",

View file

@ -44,7 +44,7 @@ public class KcOidcBrokerNoLoginHintTest extends KcOidcBrokerLoginHintTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -55,7 +55,7 @@ public class KcOidcBrokerNoLoginHintTest extends KcOidcBrokerLoginHintTest {
log.debug("Logging in");
accountLoginPage.login(bc.getUserLogin(), bc.getUserPassword());
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
updateAccountInformationPage.assertCurrent();
Assert.assertTrue("We must be on correct realm right now",

View file

@ -55,7 +55,7 @@ public class KcOidcBrokerPromptParameterTest extends AbstractBrokerTest {
log.debug("Clicking social " + bc.getIDPAlias());
accountLoginPage.clickSocial(bc.getIDPAlias());
waitForPage(driver, "log in to");
waitForPage(driver, "log in to", true);
Assert.assertTrue("Driver should be on the provider realm page right now",
driver.getCurrentUrl().contains("/auth/realms/" + bc.providerRealmName() + "/"));
@ -69,7 +69,7 @@ public class KcOidcBrokerPromptParameterTest extends AbstractBrokerTest {
log.debug("Logging in");
accountLoginPage.login(bc.getUserLogin(), bc.getUserPassword());
waitForPage(driver, "update account information");
waitForPage(driver, "update account information", false);
updateAccountInformationPage.assertCurrent();
Assert.assertTrue("We must be on correct realm right now",

View file

@ -14,6 +14,7 @@ import org.keycloak.saml.processing.core.saml.v2.common.SAMLDocumentHolder;
import org.keycloak.testsuite.AbstractKeycloakTest;
import org.keycloak.testsuite.Assert;
import org.keycloak.testsuite.pages.LoginPage;
import org.keycloak.testsuite.pages.PageUtils;
import org.keycloak.testsuite.pages.UpdateAccountInformationPage;
import org.keycloak.testsuite.util.IOUtil;
@ -102,7 +103,7 @@ public class KcSamlIdPInitiatedSsoTest extends AbstractKeycloakTest {
public void testProviderIdpInitiatedLogin() throws Exception {
driver.navigate().to(getSamlIdpInitiatedUrl(REALM_PROV_NAME, "samlbroker"));
waitForPage("log in to");
waitForPage("log in to", true);
Assert.assertThat("Driver should be on the provider realm page right now",
driver.getCurrentUrl(), containsString("/auth/realms/" + REALM_PROV_NAME + "/"));
@ -110,7 +111,7 @@ public class KcSamlIdPInitiatedSsoTest extends AbstractKeycloakTest {
log.debug("Logging in");
accountLoginPage.login(PROVIDER_REALM_USER_NAME, PROVIDER_REALM_USER_PASSWORD);
waitForPage("update account information");
waitForPage("update account information", false);
Assert.assertTrue(updateAccountInformationPage.isCurrent());
Assert.assertThat("We must be on consumer realm right now",
@ -144,10 +145,10 @@ public class KcSamlIdPInitiatedSsoTest extends AbstractKeycloakTest {
return getAuthRoot() + "/auth/realms/" + realmName + "/broker/saml-leaf/endpoint";
}
private void waitForPage(final String title) {
private void waitForPage(final String title, final boolean htmlTitle) {
WebDriverWait wait = new WebDriverWait(driver, 5);
ExpectedCondition<Boolean> condition = (WebDriver input) -> input.getTitle().toLowerCase().contains(title);
ExpectedCondition<Boolean> condition = (WebDriver input) -> htmlTitle ? input.getTitle().toLowerCase().contains(title) : PageUtils.getPageTitle(input).toLowerCase().contains(title);
wait.until(condition);
}

View file

@ -30,6 +30,7 @@ import org.keycloak.protocol.oidc.utils.OIDCResponseMode;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractKeycloakTest;
import org.keycloak.testsuite.AssertEvents;
import org.keycloak.testsuite.pages.PageUtils;
import org.keycloak.testsuite.util.ClientManager;
import org.keycloak.testsuite.util.OAuthClient;
import org.openqa.selenium.By;
@ -83,7 +84,7 @@ public class AuthorizationCodeTest extends AbstractKeycloakTest {
oauth.doLogin("test-user@localhost", "password");
String title = driver.getTitle();
String title = PageUtils.getPageTitle(driver);
Assert.assertEquals("Success code", title);
String code = driver.findElement(By.id(OAuth2Constants.CODE)).getAttribute("value");

View file

@ -23,6 +23,7 @@ import org.junit.Test;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testsuite.Assert;
import org.keycloak.testsuite.auth.page.login.Registration;
import org.keycloak.testsuite.auth.page.login.TermsAndConditions;
import org.keycloak.testsuite.console.AbstractConsoleTest;
import org.keycloak.testsuite.console.page.authentication.RequiredActions;
import org.keycloak.testsuite.console.page.realm.LoginSettings;
@ -46,6 +47,9 @@ public class RequiredActionsTest extends AbstractConsoleTest {
@Page
private Registration testRealmRegistrationPage;
@Page
private TermsAndConditions termsAndConditionsPage;
@Override
public void setDefaultPageUriParameters() {
super.setDefaultPageUriParameters();
@ -69,7 +73,7 @@ public class RequiredActionsTest extends AbstractConsoleTest {
registerTestUser();
driver.findElement(By.xpath("//div[@id='kc-header-wrapper' and text()[contains(.,'Terms and Conditions')]]"));
Assert.assertTrue(termsAndConditionsPage.isCurrent());
}
@Test
@ -129,7 +133,7 @@ public class RequiredActionsTest extends AbstractConsoleTest {
registerTestUser();
driver.findElement(By.xpath("//div[@id='kc-header-wrapper' and text()[contains(.,'Mobile Authenticator Setup')]]"));
Assert.assertTrue(driver.findElement(By.id("kc-page-title")).getText().equals("Mobile Authenticator Setup"));
}
private void allowTestRealmUserRegistration() {

View file

@ -4,6 +4,7 @@ import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.testsuite.auth.page.account.Account;
import org.keycloak.testsuite.auth.page.login.TermsAndConditions;
import org.keycloak.testsuite.auth.page.login.UpdateAccount;
import org.keycloak.testsuite.auth.page.login.UpdatePassword;
import org.keycloak.testsuite.console.page.authentication.RequiredActions;
@ -13,9 +14,12 @@ import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import static org.jboss.arquillian.graphene.Graphene.waitGui;
import static org.junit.Assert.assertTrue;
import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD;
import static org.keycloak.testsuite.auth.page.AuthRealm.TEST;
import static org.keycloak.testsuite.model.RequiredUserAction.*;
import static org.keycloak.testsuite.model.RequiredUserAction.TERMS_AND_CONDITIONS;
import static org.keycloak.testsuite.model.RequiredUserAction.UPDATE_PASSWORD;
import static org.keycloak.testsuite.model.RequiredUserAction.UPDATE_PROFILE;
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
/**
@ -39,6 +43,9 @@ public class RequiredUserActionsTest extends AbstractUserTest {
@Page
private RequiredActions requiredActionsPage;
@Page
private TermsAndConditions termsAndConditionsPage;
@FindBy(css = "kc-feedback-text")
protected WebElement feedbackText;
@ -134,7 +141,7 @@ public class RequiredUserActionsTest extends AbstractUserTest {
testRealmLoginPage.form().login(testUser);
driver.findElement(By.xpath("//div[@id='kc-header-wrapper' and text()[contains(.,'Terms and Conditions')]]"));
assertTrue(termsAndConditionsPage.isCurrent());
}

View file

@ -0,0 +1,12 @@
package org.keycloak.testsuite;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class PageUtils {
public static String getPageTitle(WebDriver driver) {
return driver.findElement(By.id("kc-page-title")).getText();
}
}

View file

@ -48,6 +48,7 @@ import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
import org.keycloak.saml.processing.core.saml.v2.constants.X500SAMLProfileConstants;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.testsuite.KeycloakServer;
import org.keycloak.testsuite.PageUtils;
import org.keycloak.testsuite.adapter.servlet.SamlSPFacade;
import org.keycloak.testsuite.pages.InputPage;
import org.keycloak.testsuite.pages.LoginPage;
@ -582,7 +583,7 @@ public class SamlAdapterTestStrategy extends ExternalResource {
driver.navigate().to(APP_SERVER_BASE_URL + "/bad-client-sales-post-sig/");
System.out.println(driver.getCurrentUrl());
Assert.assertTrue(driver.getCurrentUrl().startsWith(AUTH_SERVER_URL + "/realms/demo/protocol/saml"));
assertEquals(driver.getTitle(), "We're sorry...");
assertEquals(PageUtils.getPageTitle(driver), "We're sorry...");
}
public static interface CheckAuthError {

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.junit.Assert;
import org.keycloak.testsuite.PageUtils;
import org.keycloak.testsuite.rule.WebResource;
import org.openqa.selenium.WebDriver;

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.PageUtils;
import org.keycloak.testsuite.rule.WebResource;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -44,7 +45,7 @@ public class ErrorPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle() != null && driver.getTitle().equals("We're sorry...");
return driver.getTitle() != null && PageUtils.getPageTitle(driver).equals("We're sorry...");
}
@Override

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -36,7 +37,7 @@ public class IdpConfirmLinkPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().equals("Account already exists");
return PageUtils.getPageTitle(driver).equals("Account already exists");
}
public String getMessage() {

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -36,7 +37,7 @@ public class IdpLinkEmailPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().startsWith("Link ");
return PageUtils.getPageTitle(driver).startsWith("Link ");
}
public void clickResendEmail() {

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -43,7 +44,7 @@ public class LoginConfigTotpPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Mobile Authenticator Setup");
return PageUtils.getPageTitle(driver).equals("Mobile Authenticator Setup");
}
public void open() {

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -42,7 +43,7 @@ public class LoginExpiredPage extends AbstractPage {
public boolean isCurrent() {
return driver.getTitle().equals("Page has expired");
return PageUtils.getPageTitle(driver).equals("Page has expired");
}
public void open() {

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -46,7 +47,7 @@ public class LoginPasswordResetPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Forgot Your Password?");
return PageUtils.getPageTitle(driver).equals("Forgot Your Password?");
}
public void open() {

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -44,7 +45,7 @@ public class LoginPasswordUpdatePage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Update password");
return PageUtils.getPageTitle(driver).equals("Update password");
}
public void open() {

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -40,7 +41,7 @@ public class LoginRecoverUsernamePage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Forgot Your Username?");
return PageUtils.getPageTitle(driver).equals("Forgot Your Username?");
}
public void open() {

View file

@ -56,14 +56,12 @@ public class LoginTotpPage extends AbstractPage {
}
public boolean isCurrent() {
if (driver.getTitle().startsWith("Log in to ")) {
try {
driver.findElement(By.id("totp"));
return true;
} catch (Throwable t) {
}
try {
driver.findElement(By.id("totp"));
return true;
} catch (Throwable t) {
return false;
}
return false;
}
@Override

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -35,7 +36,7 @@ public class LoginUpdateProfileEditUsernameAllowedPage extends LoginUpdateProfil
}
public boolean isCurrent() {
return driver.getTitle().equals("Update Account Information");
return PageUtils.getPageTitle(driver).equals("Update Account Information");
}
@Override

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -66,7 +67,7 @@ public class LoginUpdateProfilePage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Update Account Information");
return PageUtils.getPageTitle(driver).equals("Update Account Information");
}
@Override

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -40,7 +41,7 @@ public class OAuthGrantPage extends AbstractPage {
@Override
public boolean isCurrent() {
return driver.getTitle().equals("Grant Access");
return PageUtils.getPageTitle(driver).startsWith("Grant Access to ");
}
@Override

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.junit.Assert;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -162,7 +163,7 @@ public class RegisterPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Register with test");
return PageUtils.getPageTitle(driver).equals("Register");
}
@Override

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -31,7 +32,7 @@ public class TermsAndConditionsPage extends AbstractPage {
private WebElement cancelButton;
public boolean isCurrent() {
return driver.getTitle().equals("Terms and Conditions");
return PageUtils.getPageTitle(driver).equals("Terms and Conditions");
}
public void acceptTerms() {

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.PageUtils;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -50,7 +51,7 @@ public class ValidatePassworrdEmailResetPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Forgot Your Password?");
return PageUtils.getPageTitle(driver).equals("Forgot Your Password?");
}
public void open() {

View file

@ -17,6 +17,7 @@
package org.keycloak.testsuite.pages;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.PageUtils;
import org.keycloak.testsuite.rule.WebResource;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
@ -38,7 +39,7 @@ public class VerifyEmailPage extends AbstractPage {
}
public boolean isCurrent() {
return driver.getTitle().equals("Email verification");
return PageUtils.getPageTitle(driver).equals("Email verification");
}
public void clickResendEmail() {

View file

@ -48,6 +48,7 @@ import org.keycloak.saml.processing.api.saml.v2.response.SAML2Response;
import org.keycloak.saml.processing.core.saml.v2.constants.X500SAMLProfileConstants;
import org.keycloak.saml.processing.web.util.PostBindingUtil;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.testsuite.PageUtils;
import org.keycloak.testsuite.pages.LoginPage;
import org.keycloak.testsuite.rule.KeycloakRule;
import org.keycloak.testsuite.rule.WebResource;
@ -482,7 +483,7 @@ public class SamlPicketlinkSPTest {
public void testPostBadClientSignature() {
driver.navigate().to("http://localhost:8081/bad-client-sales-post-sig/");
Assert.assertEquals(driver.getCurrentUrl(), "http://localhost:8081/auth/realms/demo/protocol/saml");
Assert.assertEquals(driver.getTitle(), "We're sorry...");
Assert.assertEquals(PageUtils.getPageTitle(driver), "We're sorry...");
}

View file

@ -217,6 +217,7 @@
<exclude>**/src/**</exclude>
<exclude>**/test/**</exclude>
<exclude>**/tests/**</exclude>
<exclude>**/_config.yml</exclude>
<exclude>**/api.md</exclude>
<exclude>**/AUTHORS.txt</exclude>
<exclude>**/CHANGELOG.md</exclude>
@ -224,6 +225,7 @@
<exclude>**/HELP-US-OUT.txt</exclude>
<exclude>**/README.md</exclude>
<exclude>**/Gruntfile.js</exclude>
<exclude>**/Gemfile*</exclude>
<exclude>**/index.js</exclude>
<exclude>**/.*</exclude>
</excludes>

View file

@ -1,6 +1,7 @@
[![Build Status](https://travis-ci.org/patternfly/patternfly.svg?branch=master)](https://travis-ci.org/patternfly/patternfly)
[![Dependency Status](https://gemnasium.com/badges/github.com/patternfly/patternfly.svg)](https://gemnasium.com/github.com/patternfly/patternfly)
[![Code Climate](https://codeclimate.com/github/patternfly/patternfly/badges/gpa.svg)](https://codeclimate.com/github/patternfly/patternfly)
[![NSP Status](https://nodesecurity.io/orgs/patternfly/projects/d8289b24-4ec5-4f7c-86c1-02aa2e6cf73d/badge)](https://nodesecurity.io/orgs/patternfly/projects/d8289b24-4ec5-4f7c-86c1-02aa2e6cf73d)
[![npm version](https://badge.fury.io/js/patternfly.svg)](https://badge.fury.io/js/patternfly)
[![Gitter](https://badges.gitter.im/patternfly/patternfly.svg)](https://gitter.im/patternfly/patternfly?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
@ -58,7 +59,7 @@ exclude: [
**Patternfly now supports Sass natively!**
Sass is included in the `dist/sass` directory. Just add `node_modules` to your build tool's Sass include paths then `@import 'patternfly/dist/sass/patternfly';` in your Sass to get started!
Please note that the [patternfly-sass](https://github.com/patternfly/patternfly-sass) is no longer supported and will not include any features or fixes introduced after Patternfly 3.23.2. However, the [patternfly-sass](https://rubygems.org/patternfly-sass) Rubygem is maintained further and built from this repository.
Please note that the [patternfly-sass](https://github.com/patternfly/patternfly-sass) is no longer supported and will not include any features or fixes introduced after Patternfly 3.23.2. However, the [patternfly-sass](https://rubygems.org/patternfly-sass) Rubygem is maintained further and built from this repository.
### AngularJS
@ -243,7 +244,7 @@ The Less to Sass Conversion step will be accomplished and managed as a part of a
Sass and Less do not have perfect feature parity, which can sometimes throw a wrench into the conversion process described above. Furthermore, a failed conversion may be somewhat transparent since it may create Sass that will compile to unexpected, but valid CSS. The following are a few known scenarios that can be easily avoided to prevent failures in the Less to Sass conversion process.
#### Non-parametric Mixins
Sass does not support non-parametric mixins in the same way that Less does. Mixins must be explictly declared in Sass, whereas any class definition in Less can be used as a non-parametric mixin. Sass does not have a feature that perfectly parallels this behavior, so we have to use the closest thing which is the `@extend` statement. However, an edge case exists where `@extend` statements are not allowed within media queries in Sass. This creates a scenario where uncompilable Sass code can be generated from perfectly acceptable Less. For example:
Sass does not support non-parametric mixins in the same way that Less does. Mixins must be explictly declared in Sass, whereas any class definition in Less can be used as a non-parametric mixin. Sass does not have a feature that perfectly parallels this behavior, so we have to use the closest thing which is the `@extend` statement. However, an edge case exists where `@extend` statements are not allowed within media queries in Sass. This creates a scenario where uncompilable Sass code can be generated from perfectly acceptable Less. For example:
**Less:**
```
.applauncher-pf {
@ -321,7 +322,7 @@ This breaks for two reasons. We cannot use the `@extend` statement directly insi
```
#### Tilde-Escaped Strings
Strings that are escaped using the tilde in Less get converted to the Sass `unquote()` function. This causes Sass compilation issues when using escaped strings inside native CSS functions like `calc()`. Here is what happens:
Strings that are escaped using the tilde in Less get converted to the Sass `unquote()` function. This causes Sass compilation issues when using escaped strings inside native CSS functions like `calc()`. Here is what happens:
Less:
```
height: calc(~"100vh - 20px");
@ -393,6 +394,8 @@ grunt karma
```
### Visual Regression Testing
*Visual regression tests require Jekyll to be installed*
Visual regression tests provide a way to detect if unintended visual changes have
occured as a result of changes in the code. They work by taking screenshots of
what components or pages should look like in a browser (known as references), and then comparing the references to screenshots of those components or pages with your code changes applied. Once the tests are complete, you will be a shown the test results in a browser.

View file

@ -3518,6 +3518,74 @@ fieldset[disabled] .combobox-container .input-group-addon.active {
opacity: 0.9;
filter: alpha(opacity=90);
}
.layout-pf-fixed .navbar-pf-vertical.navbar-pf-contextselector {
z-index: 1040;
}
.navbar-pf-vertical .nav.contextselector-pf {
border-left: 1px solid #4d5258;
}
@media (min-width: 768px) {
.navbar-pf-vertical .nav.contextselector-pf {
margin-left: 10px;
}
}
.navbar-pf-vertical .nav.contextselector-pf .nav-item-iconic {
padding: 23px 20px 18px 10px;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
}
.contextselector-pf {
float: left;
}
.contextselector-pf-title {
width: 170px;
white-space: nowrap;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
line-height: normal;
}
@media (min-width: 480px) {
.contextselector-pf-title {
width: 210px;
}
}
.contextselector-pf .dropdown.open,
.contextselector-pf .dropdown:hover {
background-color: #303030;
}
.contextselector-pf .dropdown-menu {
width: 100%;
margin-top: 0;
}
.contextselector-pf .form-group {
margin: 0 5px 5px 5px;
}
@media (min-width: 768px) {
.contextselector-pf .contextselector-pf-list {
max-height: 200px;
overflow-y: auto;
}
}
.contextselector-pf .contextselector-pf-list li {
padding: 1px 10px;
border-width: 1px 0;
border-style: solid;
border-color: transparent;
}
.contextselector-pf .contextselector-pf-list li:hover {
background: #def3ff;
border-color: #bee1f4;
}
.contextselector-pf .contextselector-pf-list li:hover a {
text-decoration: none;
}
.contextselector-pf .contextselector-pf-list a {
color: #393f44;
display: block;
}
.ColVis_Button:active:focus {
outline: none;
}
@ -3956,7 +4024,7 @@ fieldset[disabled] .btn-experimental-pf.active {
content: "\e605";
}
.pficon-history:before {
content: "\e617";
content: "\e93b";
}
.pficon-home:before {
content: "\e618";
@ -4003,6 +4071,9 @@ fieldset[disabled] .btn-experimental-pf.active {
.pficon-network:before {
content: "\e909";
}
.pficon-network-range:before {
content: "\e94a";
}
.pficon-on:before {
content: "\e931";
}
@ -4089,6 +4160,9 @@ fieldset[disabled] .btn-experimental-pf.active {
.pficon-running:before {
content: "\e614";
}
.pficon-satellite:before {
content: "\e94b";
}
.pficon-save:before {
content: "\e601";
}
@ -4128,6 +4202,9 @@ fieldset[disabled] .btn-experimental-pf.active {
.pficon-storage-domain:before {
content: "\e90e";
}
.pficon-template:before {
content: "\e94c";
}
.pficon-tenant:before {
content: "\e916";
}
@ -4158,6 +4235,9 @@ fieldset[disabled] .btn-experimental-pf.active {
.pficon-unplugged:before {
content: "\e942";
}
.pficon-vcenter:before {
content: "\e94d";
}
.pficon-virtual-machine:before {
content: "\e90f";
}
@ -4710,6 +4790,11 @@ a.disabled {
width: calc(75% - 40px);
}
}
.list-view-pf .close {
float: none;
position: absolute;
right: 15px;
}
.list-view-pf-actions {
float: right;
margin-bottom: 20px;
@ -4971,7 +5056,7 @@ a.disabled {
margin: -1px -15px 0;
-ms-flex-order: 3;
order: 3;
padding: 10px 15px;
padding: 15px;
position: relative;
width: 100%;
}
@ -6475,6 +6560,7 @@ a.disabled {
}
.drawer-pf-notification.unread .drawer-pf-notification-message {
font-weight: bold;
cursor: pointer;
}
.drawer-pf-notification.expanded-notification .date {
border-right: none;
@ -6493,9 +6579,6 @@ a.disabled {
.expanded-notification .drawer-pf-notification-message {
display: inline-block;
}
.drawer-pf-notifications-non-clickable .drawer-pf-notification:hover {
background-color: #fff;
}
.drawer-pf-title {
background-color: #fafafa;
border-bottom: 1px solid #d1d1d1;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -9147,7 +9147,7 @@ button.close {
}
.breadcrumb > li + li:before {
color: #9c9c9c;
content: "\f101";
content: "\f105";
font-family: "FontAwesome";
font-size: 11px;
padding: 0 9px 0 7px;
@ -9799,7 +9799,7 @@ fieldset[disabled] .pager li > span.active {
background: #f5f5f5;
box-shadow: none;
color: #8b8d8f;
cursor: default;
cursor: not-allowed;
}
.pager .next > a > .i,
.pager .next > span > .i {
@ -9939,7 +9939,7 @@ fieldset[disabled] .pagination > li > span.active {
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
box-shadow: none;
cursor: default;
cursor: not-allowed;
background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -115,6 +115,7 @@
<glyph unicode="&#xe938;" glyph-name="connected" data-tags="connected" d="M300.48 247.154c-14.377 0-28.526 6.766-37.417 19.406-35.543 50.514-54.331 109.966-54.331 171.931 0 61.897 18.743 121.303 54.24 171.794 14.514 20.663 43.040 25.646 63.68 11.109 20.663-14.514 25.646-43.040 11.109-63.68-24.594-35.017-37.6-76.229-37.6-119.223 0-43.017 13.029-84.297 37.691-119.314 14.537-20.64 9.577-49.166-11.086-63.703-8.023-5.623-17.211-8.32-26.286-8.32v0zM721.737 246.834c-9.12 0-18.309 2.72-26.331 8.366-20.617 14.56-25.531 43.086-10.971 63.703 24.777 35.086 37.851 76.434 37.851 119.566 0 43.429-13.257 85.029-38.331 120.251-14.651 20.571-9.829 49.12 10.72 63.749 20.571 14.629 49.12 9.829 63.749-10.72 36.16-50.811 55.291-110.72 55.291-173.28 0-62.126-18.88-121.714-54.606-172.297-8.891-12.594-23.017-19.337-37.371-19.337v0zM622.034 439.177c0-60.777-49.257-110.034-110.034-110.034s-110.034 49.257-110.034 110.034 49.257 110.034 110.034 110.034 110.034-49.257 110.034-110.034zM862.697 92.571c-12.366 0-24.8 4.251-34.949 12.937-22.514 19.314-25.12 53.211-5.806 75.749 61.463 71.68 95.314 163.269 95.314 257.829 0 95.611-34.514 187.954-97.189 260-19.474 22.377-17.12 56.32 5.28 75.771 22.377 19.474 56.297 17.12 75.771-5.28 79.68-91.589 123.566-208.96 123.566-330.514 0-120.206-43.040-236.617-121.189-327.771-10.606-12.366-25.646-18.72-40.8-18.72zM163.474 89.531c-14.971 0-29.874 6.217-40.48 18.4-80.046 91.68-124.137 209.303-124.137 331.154 0 84.731 21.463 168.549 62.057 242.4 17.257 31.383 37.943 61.029 61.509 88.114 19.474 22.377 53.394 24.731 75.771 5.28s24.731-53.394 5.28-75.771c-18.56-21.326-34.857-44.663-48.434-69.371-31.886-58.034-48.754-123.977-48.754-190.651 0-95.863 34.674-188.389 97.623-260.503 19.52-22.354 17.211-56.274-5.143-75.794-10.171-8.891-22.766-13.257-35.291-13.257z" />
<glyph unicode="&#xe939;" glyph-name="catalog" data-tags="catalog" horiz-adv-x="1097" d="M509.714 737.371v-0.686c0.229 0.229 0.229 0.457 0 0.686zM184.457 84.114c-67.2-6.171-111.314-83.657-111.314-83.657v877.257c-73.143-2.286-73.143-68.571-73.143-68.571v-813.714c2.971-86.857 109.714-66.286 109.714-66.286 109.714 154.743 402.286-2.286 402.286-2.286v71.314c-125.714 81.829-242.286 95.543-327.543 85.943zM366.629 133.714c53.486-9.371 110.857-52.571 143.086-60.343v72.914h-3.886c-0.229 0-0.457 0-0.686 0h4.571v590.4c0 0 0 0 0 0v0.686c0 0 0 0 0 0l0.229 58.057c0 0-0.229 0-0.229 0.229v8c-119.314 76.8-274.057 129.143-363.429 145.829v-811.2c65.6 18.057 120.229 13.257 220.343-4.571zM587.429 737.371c-0.229-0.229-0.229-0.229 0 0v0zM1024 877.714v-877.257c0 0-44.114 77.486-111.314 83.657-85.257 9.6-201.829-4.114-327.543-85.943v-71.314c0 0 292.571 157.029 402.286 2.286 0 0 106.743-20.571 109.714 66.286v813.714c0 0 0 66.286-73.143 68.571zM587.429 545.143v-398.857l10.514 1.829c-2.057-1.143-4.343-1.829-6.629-1.829h-3.886v-72.914c32.229 7.771 89.6 50.971 143.086 60.343 100.114 17.829 154.743 22.629 220.343 4.571v811.2c-89.371-16.686-244.114-69.029-363.429-145.6v-8.229c0-0.229-0.229-0.229-0.229-0.229l0.229-58.057v-192.229z" />
<glyph unicode="&#xe93a;" glyph-name="enhancement" data-tags="enhancement" d="M1001.6 317.943l-106.743 120.914 106.743 120.914c4.343 5.486 7.543 11.657 9.371 18.514 7.086 26.286-8.686 53.486-34.971 60.571l-150.629 30.171 23.771 157.486c0.457 7.086-0.686 13.943-3.2 20.571-9.829 25.371-38.4 38.171-64 28.343l-159.543-86.171-68.8 138.971c-3.886 5.943-8.686 10.971-14.629 14.629-22.857 14.857-53.486 8.229-68.343-14.629l-71.314-139.2-157.257 86.171c-6.4 2.514-13.486 3.657-20.343 3.2-27.429-1.371-48.229-24.686-46.857-51.886l23.771-157.486-150.629-30.4c-6.857-1.829-13.029-5.029-18.514-9.371-21.257-17.143-24.457-48.229-7.314-69.486l106.971-120.914-106.743-120.914c-4.343-5.486-7.543-11.657-9.371-18.514-7.086-26.286 8.686-53.486 35.2-60.343l155.2-25.6-28.343-162.057c-0.457-7.086 0.686-13.943 3.2-20.571 9.829-25.371 38.4-38.171 64-28.343l157.257 86.171 71.314-139.2c3.886-5.943 8.686-10.971 14.629-14.629 22.857-14.857 53.486-8.229 68.343 14.629l71.314 139.2 157.257-86.171c6.4-2.514 13.486-3.657 20.571-3.2 27.2 1.371 48.229 24.686 46.629 52.114l-28.343 162.057 155.2 25.6c6.857 1.829 13.029 5.029 18.514 9.371 20.8 17.143 24 48.229 6.629 69.486zM730.971 384.228c0-2.286-0.229-4.8-0.914-7.086-0.914-2.286-2.286-4.343-4.114-5.943-1.371-2.057-3.2-3.429-5.486-4.114-2.514-0.686-5.029-0.914-7.543-0.914h-128v-128c0-2.514-0.229-5.029-0.914-7.543-0.686-2.286-2.057-4.114-4.114-5.486-1.829-1.829-3.657-3.429-5.943-4.571s-4.571-1.6-7.086-1.6h-109.943c-2.514 0-4.8 0.457-7.086 1.6s-4.343 2.743-5.943 4.571c-2.057 1.371-3.429 3.2-4.114 5.486-0.686 2.514-0.914 5.029-0.914 7.543v128h-128c-2.514 0-5.029 0.229-7.543 0.914-2.286 0.686-4.114 2.057-5.486 4.114-1.829 1.6-3.2 3.657-4.114 5.943-0.686 2.286-1.143 4.571-0.914 7.086v109.029c0 2.514 0.229 5.029 0.914 7.543s2.057 4.8 4.114 6.4c1.6 1.6 3.429 2.743 5.486 3.429 2.286 0.914 5.029 1.6 7.543 1.6h128v128c0 2.514 0.229 5.029 0.914 7.543 0.686 2.286 2.057 4.114 4.114 5.486 1.6 1.829 3.657 3.2 5.943 4.114 2.286 0.686 4.571 1.143 7.086 0.914h109.943c2.286 0 4.8-0.229 7.086-0.914 2.286-0.914 4.343-2.286 5.943-4.114 2.057-1.371 3.429-3.2 4.114-5.486 0.686-2.514 0.914-5.029 0.914-7.543v-128h128c2.514 0 5.029-0.457 7.543-1.6v0c2.057-0.686 3.886-2.057 5.714-3.429 1.829-1.829 3.2-4.114 4.114-6.4 0.686-2.514 0.914-5.029 0.914-7.543v-109.029h-0.229z" />
<glyph unicode="&#xe93b;" glyph-name="pficon-history" data-tags="pficon-history" d="M512 950.857c-136.731 0-260.937-53.623-352.754-140.96l-116.823 116.823c-23.337 23.337-42.423 15.429-42.423-17.577v-264c0-50.994 8.343-60 60-60h264c33.006 0 40.914 19.086 17.577 42.423v0l-91.794 91.794c71.383 66.834 163.977 103.497 262.217 103.497 102.56 0 198.994-39.954 271.52-112.48s112.48-168.96 112.48-271.52c0-102.56-39.954-198.994-112.48-271.543-72.526-72.503-168.96-112.457-271.52-112.457s-198.994 39.954-271.52 112.48c-6.057 6.057-11.863 12.297-17.463 18.674l-96.32-84.297c93.851-107.177 231.657-174.857 385.303-174.857 282.766 0 512 229.234 512 512s-229.234 512-512 512z" />
<glyph unicode="&#xe93c;" glyph-name="disconnected" data-tags="disconnected" d="M904.686 112.457c77.486 90.971 120 206.857 120 326.629 0 121.6-43.886 238.857-123.657 330.514-19.429 22.4-53.486 24.686-75.657 5.257-22.4-19.429-24.686-53.486-5.257-75.886 62.629-72 97.143-164.343 97.143-259.886 0-91.2-31.543-179.657-88.914-250.286l-73.6 73.6c1.143 1.371 2.514 2.743 3.429 4.343 35.657 50.286 54.4 109.714 54.4 171.657 0 62.4-18.971 122.057-55.086 172.571-14.171 20.114-42.057 24.686-62.171 10.514s-24.686-42.057-10.514-62.171c25.143-35.429 38.629-77.257 38.629-120.914 0-40-11.2-78.629-32.686-112.229l-75.429 75.2c4.343 11.657 6.629 24.229 6.629 37.486 0 60.8-49.371 109.943-109.943 109.943-13.257 0-25.829-2.286-37.486-6.629l-393.371 393.829c-18.286 18.286-48 18.286-66.286 0s-18.286-48 0-66.286l104.229-104.229c0 0 0 0 0 0l76.343-76.114c0 0 0 0 0 0l137.143-137.143c0 0 0 0 0 0l75.886-75.886c0 0 0 0 0 0l140.571-140.571c0 0 0 0 0 0l393.829-393.829c9.143-9.143 21.029-13.714 33.143-13.714s24 4.571 33.143 13.714c18.286 18.286 18.286 48 0 66.286l-104.457 104.229zM298.971 438.4c0 4.8 0.229 9.371 0.457 13.943l-75.886 75.886c-9.143-28.8-13.714-58.971-13.714-89.829 0-61.714 18.743-120.914 54.171-171.2 8.686-12.343 22.4-18.971 36.571-18.971 8.914 0 17.829 2.514 25.6 8 20.114 14.171 24.914 42.057 10.743 62.171-24.914 35.429-37.943 76.8-37.943 120zM106.286 439.086c0 58.514 13.029 116.343 37.714 168.914l-79.543 79.543c-1.143-2.057-2.286-4.114-3.429-6.171-40.457-73.829-61.943-157.714-61.943-242.514 0-121.829 44.114-239.543 124.114-331.2 10.743-12.114 25.6-18.286 40.457-18.286 12.571 0 25.143 4.343 35.2 13.257 22.4 19.429 24.686 53.486 5.029 75.886-62.857 72.229-97.6 164.571-97.6 260.571z" />
<glyph unicode="&#xe93d;" glyph-name="infrastructure" data-tags="infrastructure" d="M1013.36 171.757c-7.060 7.060-15.44 10.5-25.5 10.5h-27.9v63.6c0 17.4-6.4 34.2-19 47-12.6 12.6-27.6 19-45 19h-63.4v62.56h26.8c10.080 0 18.5 3.46 25.58 10.54s10.54 15.5 10.54 25.58v120.2c0 10.080-3.46 18.5-10.54 25.58s-15.5 10.54-25.58 10.54h-113.16l-106.7 106.7c0.18 1.74 0.28 3.52 0.28 5.36v159.9c0 13.4-4.6 24.6-14.020 34.020s-20.62 14.020-34.020 14.020h-159.9c-13.4 0-24.62-4.6-34.020-14.020-9.42-9.42-14.020-20.62-14.020-34.020v-159.9c0-1.88 0.12-3.68 0.3-5.48l-106.42-106.58c-9.94 0-78.38 0-78.38 0h-36.1c-10.080 0-18.5-3.46-25.58-10.54s-10.54-15.5-10.54-25.58v-120.2c0-10.080 3.46-18.5 10.54-25.58s15.5-10.54 25.58-10.54h27.4v-62.76h-63.6c-17.4 0-32.2-6.4-45-19 0 0-17.5-22.8-18.76-48.56v-61.84h-27.060c-10.040 0-18.44-3.44-25.5-10.5s-10.48-15.44-10.48-25.5v-119.82c0-10.040 3.44-18.44 10.5-25.5 7.040-7.040 15.44-10.5 25.5-10.5h119.8c10.040 0 18.44 3.44 25.5 10.5 7.040 7.040 10.5 15.44 10.5 25.5v119.82c0 10.040-3.44 18.44-10.5 25.5s-15.44 10.5-25.5 10.5h-28v64.6h191.5v-0.6l0.44-64h-27.86c-10.040 0-18.44-3.44-25.5-10.5s-10.5-15.44-10.5-25.5v-119.82c0-10.040 3.44-18.44 10.5-25.5 7.040-7.040 15.44-10.5 25.5-10.5h119.82c10.040 0 18.44 3.44 25.5 10.5 7.040 7.040 10.5 15.44 10.5 25.5v119.82c0 10.040-3.44 18.44-10.5 25.5s-15.44 10.5-25.5 10.5h-27.9v63.6c0 17.4-6.4 34.2-19 47-12.6 12.6-27.6 19-45 19h-63.4v62.56h26.8c10.080 0 18.5 3.46 25.58 10.54s10.54 15.5 10.54 25.58v113.32l107.12 107.28c1.7-0.16 3.42-0.26 5.2-0.26h159.9c1.82 0 3.58 0.1 5.32 0.28l105.98-105.98v-114.64c0-10.080 3.46-18.5 10.54-25.58s15.5-10.54 25.58-10.54h27.4v-62.76h-63.6c-17.4 0-32.2-6.4-45-19 0 0-17.5-22.8-18.76-48.56v-61.84h-27.060c-10.040 0-18.44-3.44-25.5-10.5s-10.5-15.44-10.5-25.5v-119.82c0-10.040 3.44-18.44 10.5-25.5 7.040-7.040 15.44-10.5 25.5-10.5h119.82c10.040 0 18.44 3.44 25.5 10.5 7.040 7.040 10.5 15.44 10.5 25.5v119.82c0 10.040-3.44 18.44-10.5 25.5s-15.44 10.5-25.5 10.5h-28v64.6h191.5v-0.6l0.44-64h-27.86c-10.040 0-18.44-3.44-25.5-10.5s-10.5-15.44-10.5-25.5v-119.82c0-10.040 3.44-18.44 10.5-25.5 7.040-7.040 15.44-10.5 25.5-10.5h119.82c10.040 0 18.44 3.44 25.5 10.5 7.040 7.040 10.5 15.44 10.5 25.5v119.82c0 10.040-3.44 18.44-10.5 25.5zM575.9 696.857h-128v128h128v-128z" />
<glyph unicode="&#xe93e;" glyph-name="optimize" data-tags="optimize" d="M256 758.857l-128 128h-64v-64l128-128zM320 950.857h64v-128h-64zM576 630.857h128v-64h-128zM640 822.857v64h-64l-128-128 64-64zM0 630.857h128v-64h-128zM320 374.857h64v-128h-64zM64 374.857v-64h64l128 128-64 64zM1010 68.857l-636.118 636.118c-18.668 18.668-49.214 18.668-67.882 0l-60.118-60.118c-18.668-18.668-18.668-49.214 0-67.882l636.118-636.118c18.668-18.668 49.214-18.668 67.882 0l60.118 60.118c18.668 18.668 18.668 49.214 0 67.882zM480 406.857l-192 192 64 64 192-192-64-64z" />
@ -129,4 +130,8 @@
<glyph unicode="&#xe947;" glyph-name="services" data-tags="services" horiz-adv-x="1026" d="M962.514 328.228c-45.943 48.229-96 23.086-96 23.086l-205.943-205.029-256-0.686c-36.571 0-35.429 34.971-35.429 34.971 0 36.571 35.657 36.571 35.657 36.571h217.829c15.314 0 16.686 0.686 27.429 11.429 7.223 7.223 9.486 16.389 10.194 26.286 0.274-3.909 0.32-7.931 0.32-12v24c0-4.069-0.046-8.069-0.32-12-0.709 9.897-2.971 19.063-10.194 26.286-10.743 10.743-12.114 13.714-27.429 13.714h-373.257c-20.343 0.457-41.371-10.286-61.943-26.971l-151.086-159.543 184.457-183.086 76.343 73.143h421.714c33.143 1.6 78.4 58.743 78.4 58.743l183.314 192c18.286 43.429-18.057 79.086-18.057 79.086zM291.017 614.057v0c0-6.4 4.571-12.343 10.971-13.257l96-6.171c4.114-12.8 3.2-8.686 9.6-21.257-13.257-17.829-46.857-56-60.114-73.371-1.829-2.743-3.2-5.486-3.2-8.686 0-13.257 54.171-62.4 66.057-73.371 2.743-2.286 5.943-3.657 9.6-3.657 3.2 0 6.857 0.914 9.143 3.2l67.657 63.086c10.971-5.486 11.886-5.029 24-8.686l7.543-97.829c0.914-6.4 7.314-11.429 13.714-11.429h85.257c6.4 0 11.886 4.571 13.714 10.971 5.943 22.4 1.6 74.743 3.886 98.286 12.343 3.657 11.2 4.343 22.857 10.286l72-64.457c2.743-1.829 5.943-3.2 9.6-3.2 13.257 0 64.686 56 73.829 68.343 2.286 2.286 3.2 5.486 3.2 8.686 0 3.657-1.371 6.4-3.2 9.143-14.629 17.371-53.029 49.829-65.829 68.114 5.943 11.429 4.8 11.2 8.457 23.314l101.943 7.543c5.943 0.914 10.514 7.771 10.514 13.714v84.8c-0.229 5.714-4.8 11.657-11.2 13.029l-97.829 8c-4.114 12.8-2.057 9.143-8 21.714 12.8 17.829 47.086 53.029 60.343 70.857 1.829 2.743 3.2 5.486 3.2 8.686 0 12.8-54.171 62.4-66.057 73.371-2.743 2.286-5.943 3.657-9.6 3.657-3.2 0-6.4-0.914-9.143-3.2l-68.114-59.429c-10.971 5.486-12.571 5.486-24.686 9.143l-6.171 93.943c-0.914 6.4-7.314 11.429-13.714 11.429h-85.257c-6.4 0-11.886-4.571-13.714-10.971-5.943-22.4-2.971-72-5.257-95.086-12.343-4.114-11.2-5.029-22.857-10.971l-70.629 61.943c-2.743 1.829-5.943 3.2-9.6 3.2-13.257 0-64.686-55.543-73.829-67.886-2.286-2.743-3.2-5.943-3.2-9.143s1.371-6.4 3.2-9.143c14.629-17.371 46.4-47.086 59.2-65.371-5.943-11.429-5.029-16.686-8.686-28.8l-95.086-4.571c-5.943-0.914-10.514-7.771-10.514-13.714v-84.8zM582.903 769.943c63.314 0 114.743-51.429 114.743-114.743s-51.406-114.743-114.743-114.743c-63.086 0-114.743 51.429-114.743 114.743s51.429 114.743 114.743 114.743zM182.331 658.286c60.594 0 109.714 49.12 109.714 109.714s-49.12 109.714-109.714 109.714-109.714-49.12-109.714-109.714 49.12-109.714 109.714-109.714zM182.331 809.623c22.994 0 41.646-18.629 41.646-41.623s-18.651-41.623-41.646-41.623-41.623 18.629-41.623 41.623 18.629 41.623 41.623 41.623zM219.429 587.428c-40.389 0-73.143-32.754-73.143-73.143s32.754-73.143 73.143-73.143 73.143 32.754 73.143 73.143-32.754 73.143-73.143 73.143zM219.429 489.966c-13.44 0-24.32 10.903-24.32 24.32s10.903 24.32 24.32 24.32 24.32-10.903 24.32-24.32-10.88-24.32-24.32-24.32z" />
<glyph unicode="&#xe948;" glyph-name="integration" data-tags="integration" horiz-adv-x="1170" d="M665.097 474.171c0 35.817-29.029 64.846-64.846 64.846-23.291 0-43.703-12.274-55.131-30.72-16.503-1.691-31.977 10.331-31.977 36.114v66.697c0 26.354-21.966 48.297-48.297 48.297h-66.697c-35.223 0-44.8 28.869-28.731 49.806 15.794 11.84 26.011 30.697 26.011 51.931 0 35.817-29.029 64.846-64.846 64.846s-64.846-29.029-64.846-64.846c0-18.149 7.451-34.537 19.474-46.309 0.754-0.914 1.509-1.851 2.309-2.743 19.314-21.074 10.537-52.686-26.331-52.686v0l-67.634 0.869c-26.354 0-48.297-21.966-48.297-48.297v-66.697c0-23.36-11.771-35.429-25.76-36.229-11.52 18.011-31.68 29.966-54.651 29.966-35.817 0-64.846-29.029-64.846-64.846s29.029-64.846 64.846-64.846c24 0 44.96 13.051 56.16 32.457 13.943-1.623 25.669-13.623 25.669-36.091v-208.411c0-26.331 24.229-48.297 51.451-49.166h56.366c-7.886 14.926-11.406 30.743-11.406 46.537 0 54.446 27.017 79.177 86.72 80.937h-1.051c43.771 0.983 79.863-24.754 79.863-80.937 0-15.817-4.389-32.48-11.406-46.537h66.743c26.354 0 48.297 21.966 48.297 48.297v210.171c0 25.417 15.017 37.486 31.269 36.183 11.063-19.954 32.32-33.44 56.731-33.44 35.817 0 64.846 29.029 64.846 64.846zM1106.080 539.017c-23.703 0-44.434-12.731-55.749-31.726-13.874 0.091-25.44 12.183-25.44 36.274l0.869 67.566c0 26.331-21.943 48.297-48.297 48.297h-66.697c-32.434 0-43.109 24.457-32.069 44.686 15.703 11.84 25.829 30.629 25.829 51.794 0 35.817-29.029 64.846-64.846 64.846s-64.846-29.029-64.846-64.846c0-23.543 12.549-44.137 31.314-55.497 5.509-18.491-6.149-37.829-34.971-37.829h-135.269c-26.331 0-48.297-24.229-49.166-51.451v-13.143c6.674 1.051 13.509 1.623 20.48 1.623 71.543 0 129.531-57.989 129.531-129.531s-57.989-129.509-129.509-129.509c-6.971 0-13.806 0.571-20.48 1.623v-74.56c0-26.331 21.943-48.297 48.297-48.297h137.029c32.846 0 43.383-25.097 31.634-45.463-17.417-11.634-28.891-31.451-28.891-53.966 0-35.817 29.029-64.846 64.846-64.846s64.846 29.029 64.846 64.846c0 20.823-9.829 39.337-25.097 51.2-13.531 20.686-3.383 47.337 30.491 47.337h71.269c26.331 0 43.726 24.229 43.726 50.583v137.554c0 23.497 10.971 35.566 24.389 36.251 11.063-19.977 32.32-33.509 56.777-33.509 35.817 0 64.846 29.029 64.846 64.846s-29.029 64.846-64.846 64.846z" />
<glyph unicode="&#xe949;" glyph-name="process-automation" data-tags="process-automation" d="M964.114 290.971h-217.897c-17.12 18.103-48.846 45.646-60.274 61.943 5.943 11.429 4.8 11.2 8.457 23.314l101.943 7.543c5.943 0.914 10.514 7.771 10.514 13.714v84.8c-0.229 5.714-4.8 11.657-11.2 13.029v0l-97.829 8c-4.114 12.8-2.057 9.143-8 21.714 12.8 17.829 47.086 53.029 60.343 70.857 1.829 2.743 3.2 5.486 3.2 8.686 0 12.8-54.171 62.4-66.057 73.371-2.743 2.286-5.943 3.657-9.6 3.657-3.2 0-6.4-0.914-9.143-3.2l-68.114-59.429c-10.971 5.486-12.571 5.486-24.686 9.143l-6.171 93.943c-0.914 6.4-7.314 11.429-13.714 11.429h-85.257c-6.4 0-11.886-4.571-13.714-10.971-5.943-22.4-2.971-72-5.257-95.086-12.343-4.114-11.2-5.029-22.857-10.971l-70.629 61.943c-2.743 1.829-5.943 3.2-9.6 3.2-5.554 0-17.783-9.737-30.789-21.943l-64.731 62.766c70.857 64.846 162.149 100.434 258.949 100.434 102.629 0 199.086-40 271.543-112.457s112.457-168.914 112.457-271.543c0-24.914-2.286-49.371-6.857-73.143h129.6c3.429 24 5.257 48.229 5.257 73.143 0 282.743-229.257 512-512 512-135.931 0-259.177-52.96-350.926-139.2l-118.56 114.971c-23.314 23.314-42.514 15.543-42.514-17.371v-264.229c0-50.971 8.229-59.886 59.886-59.886h224.069c16.091-17.28 39.451-40.046 49.989-55.086-5.943-11.429-5.029-16.686-8.686-28.8l-95.086-4.571c-5.943-0.914-10.514-7.771-10.514-13.714v-84.8c0-6.4 4.571-12.343 10.971-13.257l96-6.171c4.114-12.8 3.2-8.686 9.6-21.257-13.257-17.829-46.857-56-60.114-73.371-1.829-2.743-3.2-5.486-3.2-8.686 0-13.257 54.171-62.4 66.057-73.371 2.743-2.286 5.943-3.657 9.6-3.657 3.2 0 6.857 0.914 9.143 3.2l67.657 63.086c10.971-5.486 11.886-5.029 24-8.686l7.543-97.829c0.914-6.4 7.314-11.429 13.714-11.429h85.257c6.4 0 11.886 4.571 13.714 10.971 5.943 22.4 1.6 74.743 3.886 98.286 12.343 3.657 11.2 4.343 22.857 10.286l72-64.457c2.743-1.829 5.943-3.2 9.6-3.2 5.051 0 15.611 8.114 27.269 18.811l65.44-63.474c-70.834-64-161.349-99.109-257.509-99.109-102.629 0-199.086 40-271.543 112.457s-112.457 168.914-112.457 271.543c0 24.914 2.286 49.371 6.857 73.143h-129.6c-3.429-24-5.257-48.229-5.257-73.143 0-282.743 229.257-512 512-512 135.223 0 257.897 52.434 349.509 137.874l118.834-115.246c23.314-23.314 42.514-15.314 42.514 17.6v264c0 50.971-8.229 59.886-59.886 59.886zM511.543 324.571c-63.086 0-114.743 51.429-114.743 114.743s51.429 114.743 114.743 114.743c63.314 0 114.743-51.429 114.743-114.743s-51.429-114.743-114.743-114.743z" />
<glyph unicode="&#xe94a;" glyph-name="pficon-network-range" data-tags="pficon-network-range" horiz-adv-x="958" d="M510.766 658.286h-73.417v-145.714h73.417c40.183 0 72.869 32.686 72.869 72.869s-32.709 72.846-72.869 72.846zM734.949 341.943c44.091 62.811 69.989 139.337 69.989 221.897 0.023 213.577-189.097 386.674-402.651 386.674s-402.674-173.097-402.674-386.651c0-82.583 25.897-159.086 69.989-221.897l0.389-0.549c0.709-1.006 1.44-2.034 2.171-3.040l283.634-375.474c23.566-40.503 47.154-35.52 47.154-35.52 26.24 0 47.040 35.726 47.040 35.726l282.4 375.223c0.869 1.189 1.714 2.4 2.56 3.611zM291.040 291.428h-72v440h72v-440zM519.909 439.428h-82.56v-145.714h-72v437.714h154.56c80.503 0 141.44-65.486 141.44-146.011s-60.937-145.989-141.44-145.989zM955.977 539.817v0c0.617 110.469-37.28 198.331-92.754 264.366-10.629 12.663-21.44 24.754-32.526 36.96-9.851 10.857-18.171 18.126-25.143 22.857-4.869 5.92-12.229 9.691-20.48 9.691-14.629 0-26.491-11.863-26.491-26.491 0-6.811 2.583-12.983 6.811-17.691 1.646-2.606 3.589-5.097 5.623-7.429 3.154-3.634 6.56-6.88 9.669-9.577 0 0 24.96-27.931 41.371-50.446 36.48-57.966 56.023-125.211 56.023-198.194 0-82.583-13.92-141.623-58.011-204.434-0.846-1.211-1.691-2.4-2.56-3.611l-294.377-392.686c0 0-2.743-4.686-7.451-10.651 21.12-29.143 56.389-25.097 56.389-25.097 40.48-0.183 60.754 35.726 60.754 35.726l278.377 378.217c0.869 1.189 1.714 2.4 2.56 3.611 50.057 76.549 41.897 136.983 42.217 194.88z" />
<glyph unicode="&#xe94b;" glyph-name="pficon-satellite" data-tags="pficon-satellite" d="M1019.726 137.486v0l-279.543 276.549c-2.88 2.903-6.697 4.343-10.491 4.343-3.771 0-7.52-1.417-10.377-4.297l-67.36-68.731-20.251 19.68 131.611 128.686c5.851 5.669 5.966 15.040 0.297 20.869l-10.72 11.017c2.606 0.594 5.029 1.874 6.971 3.771l39.383 38.674c5.851 5.669 5.966 15.040 0.297 20.869l-135.109 138.903c-5.669 5.851-15.040 5.989-20.869 0.297l-39.383-38.651c-1.943-1.897-3.291-4.274-3.977-6.857l-7.794 8c-5.669 5.851-15.040 5.989-20.869 0.297l-133.989-130.926-19.246 18.697 66.469 69.28c2.789 2.743 4.366 6.514 4.366 10.423 0.023 3.909-1.531 7.657-4.274 10.446l-279.429 277.691c-2.88 2.903-6.697 4.343-10.491 4.343-3.771 0-7.52-1.417-10.377-4.297l-180.206-183.84c-2.789-2.766-4.366-6.514-4.366-10.423-0.023-3.909 1.531-7.657 4.274-10.446l280.549-280.48c2.903-2.903 6.674-4.343 10.469-4.343 0.457 0 0.937 0.023 1.394 0.069 3.291 0.32 6.491 1.714 8.983 4.229l68.937 71.84 17.783-17.28-66.789-65.257c-2.811-2.743-6.811-8.069-6.857-11.977s0.686-9.257 3.406-12.069l171.52-175.703c2.72-2.811 6.469-4.411 10.377-4.457 0.526 0 1.051 0.023 1.577 0.069 3.337 0.32 6.469 1.76 8.914 4.091l70.743 69.143 21.257-20.64-67.429-68.8c-2.789-2.743-4.366-6.514-4.366-10.423-0.023-3.909 1.531-7.657 4.274-10.446l275.954-278.034c2.903-2.903 6.674-4.343 10.469-4.343 0.457 0 0.937 0.023 1.394 0.069 3.291 0.32 6.491 1.714 8.983 4.229l183.794 185.349c2.789 2.766 4.366 6.514 4.366 10.423 0.046 3.84-1.509 7.589-4.251 10.377zM294.286 568.274l-184.503 184.457 85.806 87.543 184.137-182.971-85.44-89.029zM825.44 37.623l-181.074 182.446 86.103 87.84 183.246-181.28-88.274-89.006zM236.206 370.537c-66.949 0-126.491-31.634-164.526-80.777l123.749-123.749-94.4-93.943c-16-3.909-27.886-18.286-27.886-35.497 0-20.206 16.366-36.571 36.571-36.571 16.914 0 31.109 11.497 35.291 27.109l94.903 94.423 123.406-123.406c49.143 38.034 80.777 97.577 80.777 164.526 0 114.811-93.074 207.886-207.886 207.886z" />
<glyph unicode="&#xe94c;" glyph-name="pficon-template" data-tags="pficon-template" d="M219.429 512h146.286v-73.143h-146.286v73.143zM438.857 512h146.286v-73.143h-146.286v73.143zM877.714 731.428v-292.571h-219.429v73.143h146.286v146.286h-146.286v73.143h219.429zM438.857 731.428h146.286v-73.143h-146.286v73.143zM365.714 658.286h-146.286v-219.429h-73.143v292.571h219.429v-73.143zM948.571 875.428h-873.143v-873.143h873.143v873.143zM994.126 948.571c16.503 0 29.874-13.371 29.874-29.874v-967.154c0-16.16-13.097-26.971-29.257-26.971h-964.411c-16.754 0-30.331 11.291-30.331 28.046v966.789c0 16.114 13.051 29.166 29.166 29.166h964.96zM219.429 146.286h146.286v-73.143h-146.286v73.143zM438.857 146.286h146.286v-73.143h-146.286v73.143zM877.714 365.714v-292.571h-219.429v73.143h146.286v146.286h-146.286v73.143h219.429zM438.857 365.714h146.286v-73.143h-146.286v73.143zM365.714 292.571h-146.286v-219.429h-73.143v292.571h219.429v-73.143z" />
<glyph unicode="&#xe94d;" glyph-name="pficon-vcenter" data-tags="pficon-vcenter" d="M889.143 948.183h-461.714c-73.737 0-133.714-59.977-133.714-133.714v-157.897h-157.897c-73.737 0-133.714-59.977-133.714-133.714v-461.714c0-73.737 59.977-133.714 133.714-133.714h461.714c73.714 0 133.714 59.977 133.714 133.714v160.183h157.897c73.737 0 133.714 59.977 133.714 133.714v459.429c0 73.737-59.977 133.714-133.714 133.714zM878.857 365.348h-292.503l0.891-92.16v-201.76h-441.143v441.166h291.611v291.611h441.143v-438.857zM219.429 395.428v-205.714c0-23.886 19.543-43.429 43.429-43.429h205.714c23.886 0 43.429 19.543 43.429 43.429v205.714c0 0 12.64 44.183 42.903 44.183h205.714c23.886 0 43.429 19.543 43.429 43.429v205.714c0 23.886-19.543 43.429-43.429 43.429h-205.714c-23.886 0-43.429-19.543-43.429-43.429v-205.714c0 0 1.303-44.183-42.903-44.183h-205.714c-23.886 0-43.429-19.543-43.429-43.429z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 142 KiB

View file

@ -2,7 +2,7 @@
'use strict';
var patternfly = {
version: "3.38.0"
version: "3.41.6"
};
// definition of breakpoint sizes for tablet and desktop modes

View file

@ -2,7 +2,7 @@
'use strict';
var patternfly = {
version: "3.38.0"
version: "3.41.6"
};
// definition of breakpoint sizes for tablet and desktop modes

File diff suppressed because one or more lines are too long

View file

@ -2,7 +2,7 @@
'use strict';
var patternfly = {
version: "3.38.0"
version: "3.41.6"
};
// definition of breakpoint sizes for tablet and desktop modes

File diff suppressed because one or more lines are too long

View file

@ -11,7 +11,7 @@
display: inline; /* IE8 */
+ li:before {
color: @gray-light;
content: @fa-var-angle-double-right;
content: @fa-var-angle-right;
font-family: @icon-font-name-fa;
font-size: (@font-size-base - 1);
padding: 0 9px 0 7px;

View file

@ -0,0 +1,67 @@
//
// Context Selector
// --------------------------------------------------
.layout-pf-fixed .navbar-pf-vertical.navbar-pf-contextselector {
z-index: @zindex-modal-background;
}
.navbar-pf-vertical .nav.contextselector-pf {
@media (min-width: @screen-sm-min) {
margin-left:@contextselector-pf-margin-left;
}
border-left:1px solid @color-pf-black-700;
.nav-item-iconic {
padding:@contextselector-pf-nav-item-iconic-padding;
display: flex;
align-items: center;
}
}
.contextselector-pf {
float:left;
&-title {
width: @contextselector-title-width-mobile;
@media (min-width: @screen-xs-min) {
width: @contextselector-title-width-desktop;
}
white-space: nowrap;
display:inline-block;
overflow: hidden;
text-overflow: ellipsis;
line-height: normal;
}
.dropdown {
&.open, &:hover {
background-color: @navbar-pf-navbar-primary-active-bg-color-stop;
}
}
.dropdown-menu {
width: 100%;
margin-top:0;
}
.form-group {
margin: @contextselector-pf-form-group-margin;
}
.contextselector-pf-list {
@media (min-width: @screen-sm-min) {
max-height: @contextselector-pf-list-max-height;
overflow-y: auto;
}
li {
padding: @contextselector-pf-list-li-padding;
border-width: @contextselector-pf-list-li-border-width;
border-style: solid;
border-color: transparent;
&:hover {
background: @color-pf-blue-50;
border-color: @dropdown-link-hover-border-color;
a {
text-decoration: none;
}
}
}
a {
color: @color-pf-black-800;
display: block;
}
}
}

View file

@ -180,6 +180,9 @@
.@{icon-prefix}-network:before {
content: @pficon-var-network;
}
.@{icon-prefix}-network-range:before {
content: @pficon-var-network-range;
}
.@{icon-prefix}-on:before {
content: @pficon-var-on;
}
@ -266,6 +269,9 @@
.@{icon-prefix}-running:before {
content: @pficon-var-running;
}
.@{icon-prefix}-satellite:before {
content: @pficon-var-satellite;
}
.@{icon-prefix}-save:before {
content: @pficon-var-save;
}
@ -305,6 +311,9 @@
.@{icon-prefix}-storage-domain:before {
content: @pficon-var-storage-domain;
}
.@{icon-prefix}-template:before {
content: @pficon-var-template;
}
.@{icon-prefix}-tenant:before {
content: @pficon-var-tenant;
}
@ -335,6 +344,9 @@
.@{icon-prefix}-unplugged:before {
content: @pficon-var-unplugged;
}
.@{icon-prefix}-vcenter:before {
content: @pficon-var-vcenter;
}
.@{icon-prefix}-virtual-machine:before {
content: @pficon-var-virtual-machine;
}

View file

@ -73,6 +73,11 @@
width: ~"calc(75% - 40px)" // IE9 fallback
}
}
.close {
float: none;
position: absolute;
right: 15px;
}
}
.list-view-pf-actions {
float: right; // IE9 fallback
@ -293,7 +298,7 @@
box-sizing: content-box;
margin: -1px -15px 0;
order: 3;
padding: 10px 15px;
padding: 15px;
position: relative;
width: 100%;
}

View file

@ -160,7 +160,10 @@
border-bottom: none;
}
&:hover { background-color: @color-pf-blue-50; }
&.unread .drawer-pf-notification-message { font-weight: bold; }
&.unread .drawer-pf-notification-message {
font-weight: bold;
cursor: pointer;
}
&.expanded-notification {
.date {
border-right: none;
@ -183,10 +186,6 @@
}
}
.drawer-pf-notifications-non-clickable .drawer-pf-notification:hover {
background-color: @color-pf-white;
}
.drawer-pf-title {
background-color: @color-pf-black-100;
border-bottom: 1px solid @card-pf-border-color;

View file

@ -32,7 +32,7 @@
background: @pagination-bg;
.box-shadow(none);
color: @pager-disabled-color;
cursor: default;
cursor: not-allowed;
}
}
.next {

View file

@ -43,7 +43,7 @@
> a:hover,
> a:focus {
.box-shadow(none);
cursor: default;
cursor: not-allowed;
#gradient > .vertical(@btn-default-bg-img-start; @btn-default-bg-img-stop);
}
}
@ -88,7 +88,7 @@
float: none;
}
}
.pagination-pf-pagesize.bootstrap-select.btn-group,
.pagination-pf-pagesize.bootstrap-select.btn-group,
.pagination-pf-pagesize.btn-group {
display: flex;
float: none;

View file

@ -42,6 +42,7 @@
@import "card-view.less";
@import "charts.less";
@import "close.less";
@import "context-selector.less";
@import "datatables.less";
@import "experimental-features.less";
@import "filter.less";

View file

@ -41,6 +41,14 @@
@card-pf-container-bg-color: @color-pf-black-150;
@card-pf-footer-bg-color: @color-pf-black-100;
@card-pf-selected-border-color: @color-pf-blue-300;
@contextselector-pf-margin-left: 10px;
@contextselector-pf-nav-item-iconic-padding: 23px 20px 18px 10px;
@contextselector-title-width-mobile: 170px;
@contextselector-title-width-desktop: 210px;
@contextselector-pf-form-group-margin: 0 5px 5px 5px;
@contextselector-pf-list-max-height: 200px;
@contextselector-pf-list-li-padding: 1px 10px;
@contextselector-pf-list-li-border-width: 1px 0;
@donut-font-size-big: 30px;
@drawer-pf-top-vertical: 58px;
@drawer-pf-top-horizontal: 26px;
@ -210,7 +218,7 @@
@pficon-var-folder-close: "\e607";
@pficon-var-folder-open: "\e606";
@pficon-var-help: "\e605";
@pficon-var-history: "\e617";
@pficon-var-history: "\e93b";
@pficon-var-home: "\e618";
@pficon-var-image: "\e61f";
@pficon-var-import: "\e615";
@ -228,6 +236,7 @@
@pficon-var-migration: "\e92e";
@pficon-var-monitoring: "\e944";
@pficon-var-network: "\e909";
@pficon-var-network-range: "\e94a";
@pficon-var-off: "\e92f";
@pficon-var-ok: "\e602";
@pficon-var-on: "\e931";
@ -258,6 +267,7 @@
@pficon-var-route: "\e625";
@pficon-var-running: "\e614";
@pficon-var-save: "\e601";
@pficon-var-satellite: "\e94b";
@pficon-var-screen: "\e600";
@pficon-var-search: "\e921";
@pficon-var-security: "\e946";
@ -270,6 +280,7 @@
@pficon-var-spinner: "\e614";
@pficon-var-spinner2: "\e613";
@pficon-var-storage-domain: "\e90e";
@pficon-var-template: "\e94c";
@pficon-var-tenant: "\e916";
@pficon-var-thumb-tack-o: "\e920";
@pficon-var-topology: "\e608";
@ -280,6 +291,7 @@
@pficon-var-unknown: "\e935";
@pficon-var-user: "\e91e";
@pficon-var-users: "\e91f";
@pficon-var-vcenter: "\e94d";
@pficon-var-virtual-machine: "\e90f";
@pficon-var-volume: "\e910";
@pficon-var-warning-triangle-o: "\e913";

View file

@ -11,7 +11,7 @@
display: inline; /* IE8 */
+ li:before {
color: $gray-light;
content: $fa-var-angle-double-right;
content: $fa-var-angle-right;
font-family: $icon-font-name-fa;
font-size: ($font-size-base - 1);
padding: 0 9px 0 7px;

View file

@ -0,0 +1,67 @@
//
// Context Selector
// --------------------------------------------------
.layout-pf-fixed .navbar-pf-vertical.navbar-pf-contextselector {
z-index: $zindex-modal-background;
}
.navbar-pf-vertical .nav.contextselector-pf {
@media (min-width: $screen-sm-min) {
margin-left:$contextselector-pf-margin-left;
}
border-left:1px solid $color-pf-black-700;
.nav-item-iconic {
padding:$contextselector-pf-nav-item-iconic-padding;
display: flex;
align-items: center;
}
}
.contextselector-pf {
float:left;
&-title {
width: $contextselector-title-width-mobile;
@media (min-width: $screen-xs-min) {
width: $contextselector-title-width-desktop;
}
white-space: nowrap;
display:inline-block;
overflow: hidden;
text-overflow: ellipsis;
line-height: normal;
}
.dropdown {
&.open, &:hover {
background-color: $navbar-pf-navbar-primary-active-bg-color-stop;
}
}
.dropdown-menu {
width: 100%;
margin-top:0;
}
.form-group {
margin: $contextselector-pf-form-group-margin;
}
.contextselector-pf-list {
@media (min-width: $screen-sm-min) {
max-height: $contextselector-pf-list-max-height;
overflow-y: auto;
}
li {
padding: $contextselector-pf-list-li-padding;
border-width: $contextselector-pf-list-li-border-width;
border-style: solid;
border-color: transparent;
&:hover {
background: $color-pf-blue-50;
border-color: $dropdown-link-hover-border-color;
a {
text-decoration: none;
}
}
}
a {
color: $color-pf-black-800;
display: block;
}
}
}

View file

@ -180,6 +180,9 @@
.#{$icon-prefix}-network:before {
content: $pficon-var-network;
}
.#{$icon-prefix}-network-range:before {
content: $pficon-var-network-range;
}
.#{$icon-prefix}-on:before {
content: $pficon-var-on;
}
@ -266,6 +269,9 @@
.#{$icon-prefix}-running:before {
content: $pficon-var-running;
}
.#{$icon-prefix}-satellite:before {
content: $pficon-var-satellite;
}
.#{$icon-prefix}-save:before {
content: $pficon-var-save;
}
@ -305,6 +311,9 @@
.#{$icon-prefix}-storage-domain:before {
content: $pficon-var-storage-domain;
}
.#{$icon-prefix}-template:before {
content: $pficon-var-template;
}
.#{$icon-prefix}-tenant:before {
content: $pficon-var-tenant;
}
@ -335,6 +344,9 @@
.#{$icon-prefix}-unplugged:before {
content: $pficon-var-unplugged;
}
.#{$icon-prefix}-vcenter:before {
content: $pficon-var-vcenter;
}
.#{$icon-prefix}-virtual-machine:before {
content: $pficon-var-virtual-machine;
}

View file

@ -73,6 +73,11 @@
width: unquote("calc(75% - 40px)") // IE9 fallback
}
}
.close {
float: none;
position: absolute;
right: 15px;
}
}
.list-view-pf-actions {
float: right; // IE9 fallback
@ -293,7 +298,7 @@
box-sizing: content-box;
margin: -1px -15px 0;
order: 3;
padding: 10px 15px;
padding: 15px;
position: relative;
width: 100%;
}

View file

@ -160,7 +160,10 @@
border-bottom: none;
}
&:hover { background-color: $color-pf-blue-50; }
&.unread .drawer-pf-notification-message { font-weight: bold; }
&.unread .drawer-pf-notification-message {
font-weight: bold;
cursor: pointer;
}
&.expanded-notification {
.date {
border-right: none;
@ -183,10 +186,6 @@
}
}
.drawer-pf-notifications-non-clickable .drawer-pf-notification:hover {
background-color: $color-pf-white;
}
.drawer-pf-title {
background-color: $color-pf-black-100;
border-bottom: 1px solid $card-pf-border-color;

View file

@ -32,7 +32,7 @@
background: $pagination-bg;
@include box-shadow(none);
color: $pager-disabled-color;
cursor: default;
cursor: not-allowed;
}
}
.next {

View file

@ -43,7 +43,7 @@
> a:hover,
> a:focus {
@include box-shadow(none);
cursor: default;
cursor: not-allowed;
@include gradient-vertical($btn-default-bg-img-start, $btn-default-bg-img-stop);
}
}
@ -88,7 +88,7 @@
float: none;
}
}
.pagination-pf-pagesize.bootstrap-select.btn-group,
.pagination-pf-pagesize.bootstrap-select.btn-group,
.pagination-pf-pagesize.btn-group {
display: flex;
float: none;

View file

@ -41,6 +41,14 @@ $card-pf-border-top-color: transparent
$card-pf-container-bg-color: $color-pf-black-150 !default;
$card-pf-footer-bg-color: $color-pf-black-100 !default;
$card-pf-selected-border-color: $color-pf-blue-300 !default;
$contextselector-pf-margin-left: 10px !default;
$contextselector-pf-nav-item-iconic-padding: 23px 20px 18px 10px !default;
$contextselector-title-width-mobile: 170px !default;
$contextselector-title-width-desktop: 210px !default;
$contextselector-pf-form-group-margin: 0 5px 5px 5px !default;
$contextselector-pf-list-max-height: 200px !default;
$contextselector-pf-list-li-padding: 1px 10px !default;
$contextselector-pf-list-li-border-width: 1px 0 !default;
$donut-font-size-big: 30px !default;
$drawer-pf-top-vertical: 58px !default;
$drawer-pf-top-horizontal: 26px !default;
@ -210,7 +218,7 @@ $pficon-var-filter: "\e943" !def
$pficon-var-folder-close: "\e607" !default;
$pficon-var-folder-open: "\e606" !default;
$pficon-var-help: "\e605" !default;
$pficon-var-history: "\e617" !default;
$pficon-var-history: "\e93b" !default;
$pficon-var-home: "\e618" !default;
$pficon-var-image: "\e61f" !default;
$pficon-var-import: "\e615" !default;
@ -228,6 +236,7 @@ $pficon-var-middleware: "\e917" !def
$pficon-var-migration: "\e92e" !default;
$pficon-var-monitoring: "\e944" !default;
$pficon-var-network: "\e909" !default;
$pficon-var-network-range: "\e94a" !default;
$pficon-var-off: "\e92f" !default;
$pficon-var-ok: "\e602" !default;
$pficon-var-on: "\e931" !default;
@ -258,6 +267,7 @@ $pficon-var-restart: "\e617" !def
$pficon-var-route: "\e625" !default;
$pficon-var-running: "\e614" !default;
$pficon-var-save: "\e601" !default;
$pficon-var-satellite: "\e94b" !default;
$pficon-var-screen: "\e600" !default;
$pficon-var-search: "\e921" !default;
$pficon-var-security: "\e946" !default;
@ -270,6 +280,7 @@ $pficon-var-settings: "\e610" !def
$pficon-var-spinner: "\e614" !default;
$pficon-var-spinner2: "\e613" !default;
$pficon-var-storage-domain: "\e90e" !default;
$pficon-var-template: "\e94c" !default;
$pficon-var-tenant: "\e916" !default;
$pficon-var-thumb-tack-o: "\e920" !default;
$pficon-var-topology: "\e608" !default;
@ -280,6 +291,7 @@ $pficon-var-unplugged: "\e942" !def
$pficon-var-unknown: "\e935" !default;
$pficon-var-user: "\e91e" !default;
$pficon-var-users: "\e91f" !default;
$pficon-var-vcenter: "\e94d" !default;
$pficon-var-virtual-machine: "\e90f" !default;
$pficon-var-volume: "\e910" !default;
$pficon-var-warning-triangle-o: "\e913" !default;

View file

@ -59,6 +59,7 @@
<a href="/" class="navbar-brand">
<img class="navbar-brand-icon" src="..//img/logo-alt.svg" alt=""/><img class="navbar-brand-name" src="..//img/brand-alt.svg" alt="PatternFly Enterprise Application" />
</a>
</div>
<nav class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility">

View file

@ -652,6 +652,7 @@
<a href="/" class="navbar-brand">
<img class="navbar-brand-icon" src="..//img/logo-alt.svg" alt=""/><img class="navbar-brand-name" src="..//img/brand-alt.svg" alt="PatternFly Enterprise Application" />
</a>
</div>
<nav class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility">
@ -750,6 +751,7 @@
<a href="/" class="navbar-brand">
<img class="navbar-brand-icon" src="..//img/logo-alt.svg" alt=""/><img class="navbar-brand-name" src="..//img/brand-alt.svg" alt="PatternFly Enterprise Application" />
</a>
</div>
<nav class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility">
@ -839,6 +841,7 @@
<a href="/" class="navbar-brand">
<img class="navbar-brand-icon" src="..//img/logo-alt.svg" alt=""/><img class="navbar-brand-name" src="..//img/brand-alt.svg" alt="PatternFly Enterprise Application" />
</a>
</div>
<nav class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility">
@ -937,6 +940,7 @@
<a href="/" class="navbar-brand">
<img class="navbar-brand-icon" src="..//img/logo-alt.svg" alt=""/><img class="navbar-brand-name" src="..//img/brand-alt.svg" alt="PatternFly Enterprise Application" />
</a>
</div>
<nav class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility">

View file

@ -39,7 +39,7 @@
</div>
<div class="alert alert-warning">
<span class="pficon pficon-warning-triangle-o"></span>
These examples are included for development testing purposes. For official documentation, see <a href="https://www.patternfly.org" class="alert-link">https://www.patternfly.org</a>, <a href="http://getbootstrap.com" class="alert-link">http://getbootstrap.com</a>, and <a href="http://seiyria.com/bootstrap-slider/">hhttp://seiyria.com/bootstrap-slider/</a>.
These examples are included for development testing purposes. For official documentation, see <a href="https://www.patternfly.org" class="alert-link">https://www.patternfly.org</a>, <a href="http://getbootstrap.com" class="alert-link">http://getbootstrap.com</a>, and <a href="http://seiyria.com/bootstrap-slider/">http://seiyria.com/bootstrap-slider/</a>.
</div>
<hr>
<input id="slider-one" type="text"
@ -88,12 +88,14 @@ data-slider-tooltip="show" />
<label for="size" class="col-sm-2 control-label">Size</label>
<div class="col-sm-10">
<div class="slider-pf">
<b>0</b>
<input id="size" type="text"
data-provide="slider"
data-slider-min="0"
data-slider-max="100"
data-slider-tooltip="show" />
<input type="text" size="3">
<b>100</b>
<input type="text" size="3" class="slider-input-pf">
<span>GB</span>
</div>
</div>
@ -110,12 +112,14 @@ data-slider-tooltip="show" />
<br>
<div class="slider-pf">
<b>0</b>
<input id="slider-pf" type="text"
data-provide="slider"
data-slider-min="0"
data-slider-max="100"
data-slider-tooltip="show" />
<input type="text" size="3">
<b>100</b>
<input type="text" size="3" class="slider-input-pf">
<span>GB</span>
</div>
@ -123,12 +127,14 @@ data-slider-tooltip="show" />
<br>
<div class="slider-pf">
<b>0</b>
<input id="with-stops" type="text"
data-provide="slider"
data-slider-min="0"
data-slider-max="100"
data-slider-tooltip="show" />
<input type="text" size="3">
<b>100</b>
<input type="text" size="3" class="slider-input-pf">
<span class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
GB
@ -140,6 +146,47 @@ data-slider-tooltip="show" />
</ul>
</span>
</div>
<script>
$(function () {
$('.slider-input-pf').tooltip({ trigger: 'manual' })
.on('keyup', function (e) {
var $this = $(this);
var sd = $this.siblings('[data-provide=slider]').slider();
if ($this.val().trim() !== '' && !$.isNumeric(this.value)) {
this.value = sd.slider('getValue');
}
})
.on('keypress blur', function (e) {
if (e.which == 13 || e.type === 'blur') {
e.preventDefault();
var $this = $(this);
var sd = $this.siblings('[data-provide=slider]').slider();
var max = sd.slider('getAttribute', 'max');
var min = sd.slider('getAttribute', 'min');
if (!$.isNumeric(this.value) || (this.value > max || this.value < min)) {
var warningInfo = $.isNumeric(this.value) ? 'Valid value should be between ' + min
+ ' and ' + max : 'Valid value should be number';
$this.attr('data-original-title', warningInfo).tooltip('show').addClass('warning');
this.value = sd.slider('getValue');
setTimeout(function(){ $this.tooltip('hide'); }, 3000);
} else {
if ($this.is('.warning')) {
$this.tooltip('hide');
}
this.value = $this.val().trim();
sd.slider('setValue', this.value);
}
}
})
.siblings('[data-provide=slider]').each(function () {
$(this).siblings('.slider-input-pf').val(this.value);
$(this).slider().on('slide', function (e) {
$(e.target).siblings('.slider-input-pf').val(e.value);
});
});
});
</script>
</div><!-- /container -->
</body>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,122 @@
<!DOCTYPE html>
<!--[if IE 9]><html lang="en-us" class="ie9"><![endif]-->
<!--[if gt IE 9]><!-->
<html lang="en-us">
<!--<![endif]-->
<head>
<title>Context Selector - PatternFly</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="../img/favicon.ico">
<!-- iPad retina icon -->
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../img/apple-touch-icon-precomposed-152.png">
<!-- iPad retina icon (iOS < 7) -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../img/apple-touch-icon-precomposed-144.png">
<!-- iPad non-retina icon -->
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="../img/apple-touch-icon-precomposed-76.png">
<!-- iPad non-retina icon (iOS < 7) -->
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../img/apple-touch-icon-precomposed-72.png">
<!-- iPhone 6 Plus icon -->
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="../img/apple-touch-icon-precomposed-180.png">
<!-- iPhone retina icon (iOS < 7) -->
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../img/apple-touch-icon-precomposed-114.png">
<!-- iPhone non-retina icon (iOS < 7) -->
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="../img/apple-touch-icon-precomposed-57.png">
<link rel="stylesheet" href="../css/patternfly.min.css" >
<link rel="stylesheet" href="../css/patternfly-additions.min.css" >
<link href="tests.css" rel="stylesheet" media="screen, print">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="../js/patternfly.min.js"></script>
</head>
<body>
<div class="container">
<div class="page-header">
<h1>Context Selector</h1>
</div>
<div class="alert alert-warning">
<span class="pficon pficon-warning-triangle-o"></span>
These examples are included for development testing purposes. For official documentation, see <a href="https://www.patternfly.org" class="alert-link">https://www.patternfly.org</a> and <a href="http://getbootstrap.com" class="alert-link">http://getbootstrap.com</a>.
</div>
<hr>
<nav class="navbar navbar-pf-vertical navbar-pf-contextselector">
<div class="navbar-header">
<button type="button" class="navbar-toggle">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/" class="navbar-brand hidden-sm hidden-xs">
<img class="navbar-brand-icon" src="..//img/logo-alt.svg" alt=""/><img class="navbar-brand-name" src="..//img/brand-alt.svg" alt="PatternFly Enterprise Application" />
</a>
<ul class="nav contextselector-pf">
<li class="dropdown">
<a href="#0" class="dropdown-toggle nav-item-iconic" id="dropdownMenu35" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span class="contextselector-pf-title">Really long server name server name</span>
<span class="caret"></span>
</a>
<div class="dropdown-menu" aria-labelledby="dropdownMenu35">
<div class="form-group">
<label class="sr-only" for="searchinput">search</label>
<input type="text" class="form-control" id="searchinput" placeholder="Search">
</div>
<ul class="contextselector-pf-list list-unstyled">
<li><a href="#0">A Different Context</a></li>
<li><a href="#0">A Second Context</a></li>
<li><a href="#0">Current</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
<li><a href="#0">Dolor Sit Amet</a></li>
</ul>
</div>
</li>
</ul>
</div>
<nav class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right navbar-iconic navbar-utility">
<li class="dropdown">
<a href="#0" class="dropdown-toggle nav-item-iconic" id="dropdownMenu15" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span title="Help" class="fa pficon-help"></span>
<span class="caret"></span>
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu15">
<li><a href="#0">Help</a></li>
<li><a href="#0">About</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#0" class="dropdown-toggle nav-item-iconic" id="dropdownMenu25" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span title="Username" class="fa pficon-user"></span>
Brian Johnson <span class="caret"></span>
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu25">
<li><a href="#0">Preferences</a></li>
<li><a href="#0">Logout</a></li>
</ul>
</li>
</ul>
</nav>
</nav> <!--/.navbar-->
</div><!-- /container -->
</body>
</html>

View file

@ -70,9 +70,9 @@
<div id="utilizationDonutChart1" class="example-donut-chart-utilization"></div>
<div class="pct-donut-chart-pf example-donut-chart-utilization">
<span class="pct-donut-chart-pf-chart">
<span id="utilizationDonutChart2"></span>
</span>
<div class="pct-donut-chart-pf-chart">
<div id="utilizationDonutChart2"></div>
</div>
<span class="pct-donut-chart-pf-label">
60 MHz of 100 MHz used
</span>
@ -80,9 +80,9 @@
<div class="example-donut-chart-utilization">
<span class="pct-donut-chart-pf pct-donut-chart-pf-left">
<span class="pct-donut-chart-pf-chart">
<span id="utilizationDonutChart3"></span>
</span>
<div class="pct-donut-chart-pf-chart">
<div id="utilizationDonutChart3"></div>
</div>
<span class="pct-donut-chart-pf-label text-right">
60 MHz of 100 MHz used
</span>
@ -91,9 +91,9 @@
<div class="example-donut-chart-utilization">
<span class="pct-donut-chart-pf pct-donut-chart-pf-right">
<span class="pct-donut-chart-pf-chart">
<span id="utilizationDonutChart4"></span>
</span>
<div class="pct-donut-chart-pf-chart">
<div id="utilizationDonutChart4"></div>
</div>
<span class="pct-donut-chart-pf-label text-left">
60 MHz of 100 MHz
</span>

Some files were not shown because too many files have changed in this diff Show more