From 92bb00d35688e72ebeea75ed55a6db981cfb71e5 Mon Sep 17 00:00:00 2001 From: S Page Date: Mon, 4 Mar 2013 19:13:39 -0800 Subject: [PATCH] Change login/createaccount forms to new appearance If a global variable is set or if you add ?useAgora=1 to the query string, Special:Userlogin loads a different login or create account template (Userlogin-/UsercreateAgora.php) with an Agora look and different messaging. Otherwise the current form is unchanged so that wikis can cut over to the new look when desired. These new templates apply mw-ui-formlist and mw-ui-button styles defined in a new 'mediawiki.ui' CSS module in core (copied from Extension:Agora). In useAgora mode, Special:Userlogin also: * Adds new modules with some additional CSS for new form features ("Join wiki", benefits of creating an account). * Defines new "userlogin/usercreate-xx" messages, many are the same as existing messages but without ':' on the end. * Uses a distinct title for each mode instead of generic "Log in / Create account". * Uses JavaScript to munge the create account CAPTCHA. * Outputs checkboxes using UserloginTemplateAgora::labelledCheck() * Displays a benefits column of wiki edits/users/contributor numbers. TODO: - Restyle/reposition language selector - Munge CAPTCHA in PHP not JavaScript, i18n of new CAPTCHA messages. - Identify the subset of Agora appropriate for non-Vector skins and create mediawiki.ui.default.css from that. Patch set 18: Agora styles now in core. Bug: 44628 Change-Id: I859edab4fc4fa9fe35fdef15fc429ae19a95305d --- includes/AutoLoader.php | 3 + includes/DefaultSettings.php | 10 + includes/specials/SpecialUserlogin.php | 96 ++++- includes/templates/UsercreateAgora.php | 281 +++++++++++++++ includes/templates/UserloginAgora.php | 225 ++++++++++++ languages/messages/MessagesEn.php | 30 ++ languages/messages/MessagesQqq.php | 34 +- maintenance/language/messages.inc | 30 ++ resources/Resources.php | 22 ++ .../images/glyph-people-large.png | Bin 0 -> 5048 bytes .../images/icon-contributors.png | Bin 0 -> 4043 bytes .../mediawiki.special/images/icon-edits.png | Bin 0 -> 3748 bytes .../mediawiki.special/images/icon-lock.png | Bin 0 -> 2964 bytes .../mediawiki.special/images/icon-pages.png | Bin 0 -> 3447 bytes .../mediawiki.special.createaccount.agora.css | 74 ++++ .../mediawiki.special.createaccount.agora.js | 47 +++ .../mediawiki.special.forms.agora.css | 51 +++ .../mediawiki.special.userlogin.agora.css | 34 ++ .../mediawiki.ui/mediawiki.ui.default.css | 50 +++ .../mediawiki.ui/mediawiki.ui.vector.css | 335 ++++++++++++++++++ 20 files changed, 1306 insertions(+), 16 deletions(-) create mode 100644 includes/templates/UsercreateAgora.php create mode 100644 includes/templates/UserloginAgora.php create mode 100644 resources/mediawiki.special/images/glyph-people-large.png create mode 100644 resources/mediawiki.special/images/icon-contributors.png create mode 100644 resources/mediawiki.special/images/icon-edits.png create mode 100644 resources/mediawiki.special/images/icon-lock.png create mode 100644 resources/mediawiki.special/images/icon-pages.png create mode 100644 resources/mediawiki.special/mediawiki.special.createaccount.agora.css create mode 100644 resources/mediawiki.special/mediawiki.special.createaccount.agora.js create mode 100644 resources/mediawiki.special/mediawiki.special.forms.agora.css create mode 100644 resources/mediawiki.special/mediawiki.special.userlogin.agora.css create mode 100644 resources/mediawiki.ui/mediawiki.ui.default.css create mode 100644 resources/mediawiki.ui/mediawiki.ui.vector.css diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 713623223c..1f56b12e8d 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -1011,7 +1011,10 @@ $wgAutoloadLocalClasses = array( # includes/templates 'UserloginTemplate' => 'includes/templates/Userlogin.php', + 'AgoraTemplate' => 'includes/templates/UserloginAgora.php', + 'UserloginTemplateAgora' => 'includes/templates/UserloginAgora.php', 'UsercreateTemplate' => 'includes/templates/Usercreate.php', + 'UsercreateTemplateAgora' => 'includes/templates/UsercreateAgora.php', # includes/upload 'UploadBase' => 'includes/upload/UploadBase.php', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 5d051d7cbe..18ddb9c91f 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2828,6 +2828,16 @@ $wgVectorUseSimpleSearch = true; */ $wgVectorUseIconWatch = false; +/** + * Use "Agora" design for Special:Userlogin. + */ +$wgUseAgoraUserLogin = false; + +/** + * Use "Agora" design for account creation (Special:Userlogin?type=signup). + */ +$wgUseAgoraCreateAccount = false; + /** * Display user edit counts in various prominent places. */ diff --git a/includes/specials/SpecialUserlogin.php b/includes/specials/SpecialUserlogin.php index dc350bf410..9ec0235b23 100644 --- a/includes/specials/SpecialUserlogin.php +++ b/includes/specials/SpecialUserlogin.php @@ -49,7 +49,9 @@ class LoginForm extends SpecialPage { var $mSkipCookieCheck, $mReturnToQuery, $mToken, $mStickHTTPS; var $mType, $mReason, $mRealName; var $mAbortLoginErrorMsg = 'login-abort-generic'; - private $mLoaded = false; + private $mLoaded = false, $mSecureLoginUrl; + // TODO (spage 2013-02-13) Remove old forms by, say, release 1.22. + private $mShowAgora; /** * @var ExternalUser @@ -134,11 +136,21 @@ class LoginForm extends SpecialPage { $this->mReturnTo = ''; $this->mReturnToQuery = ''; } + + $this->mShowAgora = $this->shouldShowAgora(); } function getDescription() { - return $this->msg( $this->getUser()->isAllowed( 'createaccount' ) ? - 'userlogin' : 'userloginnocreate' )->text(); + if ( !$this->getUser()->isAllowed( 'createaccount' ) ) { + return $this->msg( 'userloginnocreate' )->text(); + } + if ( $this->mShowAgora ) { + return $this->msg( $this->mType === 'signup' ? + 'createaccount' : 'login' + )->text(); + } else { + return $this->msg( 'userlogin' )->text(); + } } public function execute( $par ) { @@ -149,10 +161,10 @@ class LoginForm extends SpecialPage { $this->load(); $this->setHeaders(); + // If logging in and not on HTTPS, either redirect to it or offer a link. global $wgSecureLogin; if ( $this->mType !== 'signup' && - $wgSecureLogin && WebRequest::detectProtocol() !== 'https' ) { $title = $this->getFullTitle(); @@ -162,8 +174,17 @@ class LoginForm extends SpecialPage { 'wpStickHTTPS' => $this->mStickHTTPS ); $url = $title->getFullURL( $query, false, PROTO_HTTPS ); - $this->getOutput()->redirect( $url ); - return; + if ( $wgSecureLogin ) { + $this->getOutput()->redirect( $url ); + return; + } else { + // A wiki without https login support should set wgServer to + // http://somehost, in which case the secure URL generated + // above actually won't be PROTO_HTTPS. + if ( strncmp($url, PROTO_HTTPS, strlen( PROTO_HTTPS ) ) === 0 ) { + $this->mSecureLoginUrl = $url; + } + } } if ( $par == 'signup' ) { # Check for [[Special:Userlogin/signup]] @@ -1011,6 +1032,32 @@ class LoginForm extends SpecialPage { } } + /** + * Whether to show "Agora"-style forms. + * ?useAgora=1 forces Agora style, ?useAgora=0 forces old-style, + * otherwise consult $wgAgoraUserLogin or $wgAgoraCreateAccount. + * @return Boolean + */ + private function shouldShowAgora() { + global $wgRequest, $wgAgoraUserLogin, $wgAgoraCreateAccount; + $override = $wgRequest->getBool( 'useAgora' ); + if ( $override !== null ) { + return $override; + } + if ( $this->mType == 'signup' ) { + return (boolean) $wgAgoraCreateAccount; + } else { + return (boolean) $wgAgoraUserLogin; + } + } + + /** + */ + private function isAgoraExtensionCSSAvailable() { + global $wgResourceModules; + return array_key_exists( 'ext.agora.base', $wgResourceModules ); + } + /** * @private */ @@ -1022,6 +1069,7 @@ class LoginForm extends SpecialPage { $titleObj = $this->getTitle(); $user = $this->getUser(); + $out = $this->getOutput(); if ( $this->mType == 'signup' ) { // Block signup here if in readonly. Keeps user from @@ -1048,17 +1096,28 @@ class LoginForm extends SpecialPage { } if ( $this->mType == 'signup' ) { - $template = new UsercreateTemplate(); + $template = $this->mShowAgora + ? new UsercreateTemplateAgora() : new UsercreateTemplate(); $q = 'action=submitlogin&type=signup'; $linkq = 'type=login'; $linkmsg = 'gotaccount'; - $this->getOutput()->addModules( 'mediawiki.special.userlogin.signup' ); + $out->addModules( 'mediawiki.special.userlogin.signup' ); } else { - $template = new UserloginTemplate(); + $template = $this->mShowAgora + ? new UserloginTemplateAgora() : new UserloginTemplate(); $q = 'action=submitlogin&type=login'; $linkq = 'type=signup'; $linkmsg = 'nologin'; } + if ( $this->mShowAgora ) { + $out->addModules( array( + // core Agora look, what gets loaded is dependent on skin. + 'mediawiki.ui', + $this->mType === 'signup' ? + 'mediawiki.special.createaccount.agora' : + 'mediawiki.special.userlogin.agora' + ) ); + } if ( $this->mReturnTo !== '' ) { $returnto = '&returnto=' . wfUrlencode( $this->mReturnTo ); @@ -1070,16 +1129,23 @@ class LoginForm extends SpecialPage { $linkq .= $returnto; } - # Don't show a "create account" link if the user can't + # Don't show a "create account" link if the user can't. if( $this->showCreateOrLoginLink( $user ) ) { # Pass any language selection on to the mode switch link if( $wgLoginLanguageSelector && $this->mLanguage ) { $linkq .= '&uselang=' . $this->mLanguage; } - $link = Html::element( 'a', array( 'href' => $titleObj->getLocalURL( $linkq ) ), - $this->msg( $linkmsg . 'link' )->text() ); # Calling either 'gotaccountlink' or 'nologinlink' + if ( !$this->mShowAgora ) { + $link = Html::element( 'a', array( 'href' => $titleObj->getLocalURL( $linkq ) ), + $this->msg( $linkmsg . 'link' )->text() ); # Calling either 'gotaccountlink' or 'nologinlink' + + $template->set( 'link', $this->msg( $linkmsg )->rawParams( $link )->parse() ); - $template->set( 'link', $this->msg( $linkmsg )->rawParams( $link )->parse() ); + } else { + // Supply hyperlink, login template creates the button. + // (The template 'link' key is obsolete in the Agora design.) + $template->set( 'createOrLoginHref', $titleObj->getLocalURL( $linkq ) ); + } } else { $template->set( 'link', '' ); } @@ -1139,8 +1205,9 @@ class LoginForm extends SpecialPage { } } + $template->set( 'secureLoginUrl', $this->mSecureLoginUrl ); // Use loginend-https for HTTPS requests if it's not blank, loginend otherwise - // Ditto for signupend + // Ditto for signupend. Agora forms use neither. $usingHTTPS = WebRequest::detectProtocol() == 'https'; $loginendHTTPS = $this->msg( 'loginend-https' ); $signupendHTTPS = $this->msg( 'signupend-https' ); @@ -1163,7 +1230,6 @@ class LoginForm extends SpecialPage { wfRunHooks( 'UserLoginForm', array( &$template ) ); } - $out = $this->getOutput(); $out->disallowUserJs(); // just in case... $out->addTemplate( $template ); } diff --git a/includes/templates/UsercreateAgora.php b/includes/templates/UsercreateAgora.php new file mode 100644 index 0000000000..44ea9c871c --- /dev/null +++ b/includes/templates/UsercreateAgora.php @@ -0,0 +1,281 @@ +data['extraInput'][] = array( + 'name' => $name, + 'value' => $value, + 'type' => $type, + 'msg' => $msg, + 'helptext' => $helptext, + ); + } + + function execute() { +?> +
+
+

msg('createacct-join') ?>

+
+ html('header'); /* pre-table point for form plugins... */ ?> + haveData( 'languages' ) ) { ?> +
    + data['message'] ) { +?> +
  • +
    + data['messagetype'] == 'error' ) { ?> + msg( 'loginerror' )?>
    + + html('message') ?> +
    +
    +
  • + +
  • + + data['name'], 'text', array( + 'class' => 'mw-input loginText', + 'id' => 'wpName2', + 'tabindex' => '1', + 'size' => '20', + 'required', + 'placeholder' => wfMessage( 'userlogin-yourname-ph' )->text(), + 'autofocus' + ) ); ?> +
  • +
  • + data['createemail'] ) { + echo UserloginTemplateAgora::labelledCheck( + wfMessage( 'createaccountmail' )->text(), + 'wpCreateaccountMail', + 'wpCreateaccountMail', + $this->data['createemailset'], + array( 'tabindex' => '2' ) + ); + } ?> +
  • +
  • + + 'mw-input loginPassword', + 'id' => 'wpPassword2', + 'tabindex' => '3', + 'size' => '20', + 'required', + 'placeholder' => wfMessage( 'createacct-yourpassword-ph' )->text() + ) + User::passwordChangeInputAttribs() ); ?> +
  • + data['usedomain'] ) { + $doms = ""; + foreach( $this->data['domainnames'] as $dom ) { + $doms .= ""; + } + ?> +
  • + + +
    + +
    +
  • + +
  • + + 'mw-input loginPassword', + 'id' => 'wpRetype', + 'tabindex' => '5', + 'size' => '20', + 'required', + 'placeholder' => wfMessage( 'createacct-yourpasswordagain-ph' )->text() + ) + User::passwordChangeInputAttribs() ); + ?> +
  • +
  • + data['useemail'] ) { ?> + + data['email'], 'email', array( + 'class' => 'mw-input loginText', + 'id' => 'wpEmail', + 'tabindex' => '6', + 'size' => '20', + 'placeholder' => wfMessage( 'createacct-email-ph' )->text() + # Can't do + array( 'autofocus' ) because + for arrays in PHP + # only works right for associative arrays! Thanks, PHP. + ) + ( $this->data['emailrequired'] ? array() : array( 'required' => '' ) ) ); + ?> + + +
  • + data['userealname'] ) { ?> +
  • + + +
    + msgWiki('prefs-help-realname'); ?> +
    +
  • + + data['usereason'] ) { ?> +
  • + + +
  • + + data['canremember'] ) { ?> +
  • + numParams( $expirationDays )->text(), + 'wpRemember', + 'wpRemember', + $this->data['remember'], + array( 'tabindex' => '9' ) + ) + ?> +
  • + data['extraInput'] ) && is_array( $this->data['extraInput'] ) ) { + foreach ( $this->data['extraInput'] as $inputItem ) { ?> +
  • + + /> + +
    + msgWiki( $inputItem['helptext'] ); ?> +
    + +
  • + +
  • +
    + +
    +
  • +
+ +haveData( 'uselang' ) ) { ?> +haveData( 'token' ) ) { ?> +
+
+
+

text() ?>

+
    +
  • +
    +
    +

    text() ?>

    +

    text() ?>

    +
    +
  • +
  • +
    +
    +

    text() ?>

    +

    text() ?>

    +
    +
  • +
  • +
    +
    +

    text() ?>

    +

    text() ?>

    +
    +
  • +
+
+
+ $id, + 'class' => 'mw-ui-checkbox-label' + ), + Xml::check( + $id, + $checked, + array( 'id' => $id ) + $attribs + ) . + $label + ); + } + +} + +/** + * Html form for user login with new Agora appearance. + */ + +class UserloginTemplateAgora extends AgoraTemplate { + + function execute() { +?> +
+
+
+ html('header'); /* pre-table point for form plugins... */ ?> + haveData( 'languages' ) ) { ?> +
    + data['message'] ) { +?> +
    + data['messagetype'] == 'error' ) { ?> + msg( 'loginerror' )?>
    + + html('message') ?> +
    +
    + + +
  • + + data['name'], 'text', array( + 'class' => 'loginText', + 'id' => 'wpName1', + 'tabindex' => '1', + 'size' => '20', + 'required', + 'placeholder' => wfMessage( 'userlogin-yourname-ph' )->text() + # Can't do + array( 'autofocus' ) because + for arrays in PHP + # only works right for associative arrays! Thanks, PHP. + ) + ( $this->data['name'] ? array() : array( 'autofocus' => '' ) ) ); + ?> +
  • +
  • + + 'loginPassword', + 'id' => 'wpPassword1', + 'tabindex' => '2', + 'size' => '20', + 'placeholder' => wfMessage( 'userlogin-yourpassword-ph' )->text() + ) + ( $this->data['name'] ? array( 'autofocus' ) : array() ) ); ?> +
  • + data['usedomain'] ) && $this->data['usedomain'] ) { + $doms = ""; + foreach( $this->data['domainnames'] as $dom ) { + $doms .= ""; + } + ?> +
  • + + +
  • + haveData( 'extrafields' ) ) { + echo $this->data['extrafields']; + } ?> + +
  • + data['canremember'] ) { + global $wgCookieExpiration; + $expirationDays = ceil( $wgCookieExpiration / ( 3600 * 24 ) ); + echo $this->labelledCheck( + wfMessage( 'userlogin-remembermypassword' )->numParams( $expirationDays )->text(), + 'wpRemember', + 'wpRemember', + $this->data['remember'] + ); + } ?> +
  • +data['cansecurelogin'] ) { ?> +
  • + text(), + 'wpStickHTTPS', + 'wpStickHTTPS', + $this->data['stickHTTPS'], + array( 'tabindex' => '9' ) + ); + ?> +
  • + +
  • + text(), 'submit', array( + 'id' => 'wpLoginAttempt', + 'tabindex' => '9', + 'class' => 'mw-ui-button big block primary' + ) ); + ?> +
  • +
  • + parse() ?> +
  • +
  • + haveData( 'createOrLoginHref' ) ) { ?> +
    + +
    + +
  • +
+ +haveData( 'uselang' ) ) { ?> +haveData( 'token' ) ) { ?> +
+
+
+ 'Your account has been created. Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].', 'yourname' => 'Username:', +'userlogin-yourname' => 'Username', +'userlogin-yourname-ph' => 'Enter your username', +'createacct-helpusername-url' => '{{ns:Project}}:Username_policy', +'createacct-helpusername-link' => '[[{{MediaWiki:createacct-helpusername-url}}|(help me choose)]]', 'yourpassword' => 'Password:', +'userlogin-yourpassword' => 'Password', +'userlogin-yourpassword-ph' => 'Enter your password', +'createacct-yourpassword-ph' => 'Enter a password', 'yourpasswordagain' => 'Retype password:', +'createacct-yourpasswordagain' => 'Confirm password', +'createacct-yourpasswordagain-ph' => 'Enter password again', 'remembermypassword' => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})', +'userlogin-remembermypassword' => 'Remember me', +'userlogin-signwithsecure' => 'Sign in with secure server', 'securelogin-stick-https' => 'Stay connected to HTTPS after login', 'yourdomainname' => 'Your domain:', 'password-change-forbidden' => 'You cannot change passwords on this wiki.', @@ -1091,14 +1102,33 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].', 'userlogout' => 'Log out', 'userlogout-summary' => '', # do not translate or duplicate this message to other languages 'notloggedin' => 'Not logged in', +'userlogin-noaccount' => "Don't have an account?", +'userlogin-joinproject' => 'Join {{SITENAME}}', 'nologin' => "Don't have an account? $1.", 'nologinlink' => 'Create an account', 'createaccount' => 'Create account', 'gotaccount' => 'Already have an account? $1.', 'gotaccountlink' => 'Log in', 'userlogin-resetlink' => 'Forgotten your login details?', +'helplogin-url' => 'Help:Logging in', +'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Help with logging in]]', +'createacct-join' => 'Enter your information below.', +'createacct-emailrequired' => 'Email address', +'createacct-emailoptional' => 'Email address (optional)', +'createacct-email-ph' => 'Enter your email address', 'createaccountmail' => 'Use a temporary random password and send it to the email address specified below', 'createaccountreason' => 'Reason:', +'createacct-reason' => 'Reason', +'createacct-benefit-heading' => '{{SITENAME}} is made by people like you.', +'createacct-benefit-icon1' => 'icon-edits', +'createacct-benefit-head1' => '{{NUMBEROFEDITS}}', +'createacct-benefit-body1' => 'edits', +'createacct-benefit-icon2' => 'icon-pages', +'createacct-benefit-head2' => '{{NUMBEROFARTICLES}}', +'createacct-benefit-body2' => 'pages', +'createacct-benefit-icon3' => 'icon-contributors', +'createacct-benefit-head3' => '{{NUMBEROFUSERS}}', +'createacct-benefit-body3' => 'contributors this month', 'badretype' => 'The passwords you entered do not match.', 'userexists' => 'Username entered already in use. Please choose a different name.', diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php index c39e9eb1cd..ca42ab33a3 100644 --- a/languages/messages/MessagesQqq.php +++ b/languages/messages/MessagesQqq.php @@ -1038,18 +1038,29 @@ Parameters: 'yourname' => "{{doc-important|{{[[Gender|GENDER]]}} is '''NOT''' supported.}} In user preferences. {{Identical|Username}}", +'userlogin-yourname' => "In Agora user login & create account forms, label for username field", +'userlogin-yourname-ph' => "Placeholder text in Agora userlogin/create account form field.", 'yourpassword' => 'In user preferences {{Identical|Password}}', +'createacct-helpusername-url' => 'The URL of a page providing username guidance for the wiki.', +'createacct-helpusername-link' => 'Message in Agora create account form providing guidance for username.', +'userlogin-yourpassword' => "In Agora user login & create account forms, label for password field", +'userlogin-yourpassword-ph' => "Placeholder text in Agora userlogin form for password field.", +'createacct-yourpassword-ph' => "Placeholder text in Agora create account form for password field.", 'yourpasswordagain' => 'In user preferences', +'createacct-yourpasswordagain' => 'In Agora create account form, label for field to re-enter password', +'createacct-yourpasswordagain-ph' => 'Placeholder text in Agora create account form for re-enter password field.', 'remembermypassword' => 'A check box in [[Special:UserLogin]] {{Identical|Remember my login on this computer}}', +'userlogin-remembermypassword' => 'The text for a check box in the Agora-style [[Special:UserLogin]]', +'userlogin-signwithsecure' => 'Text of link to HTTPS login form', 'securelogin-stick-https' => 'Used as label for checkbox.', 'yourdomainname' => 'Used as label for listbox.', 'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.', 'externaldberror' => 'This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.', -'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there). +'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there). Also the title of the Agora login special page, which does not combine Log in & Create account. See also: * {{msg-mw|Login}} @@ -1076,6 +1087,8 @@ See also: 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages. {{Identical|Not logged in}}', +'userlogin-noaccount' => 'In the Agora-style [[Special:Userlogin]] form, this is the text prior to button inviting user to join project', +'userlogin-joinproject' => 'Text of button inviting user to create an account', 'nologin' => 'A message shown in the log in form. Parameters: * $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}', 'nologinlink' => 'Text of the link to the account creation form. Before that link, the message {{msg-mw|Nologin}} appears. @@ -1089,8 +1102,25 @@ It is also used on the top of the page for logged out users, where it appears ne 'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message {{msg-mw|Gotaccount}} appears. {{Identical|Log in}}', 'userlogin-resetlink' => 'Used on the login page.', +'helplogin-url' => 'Description: The URL the provides information on logging in to the wiki.', +'userlogin-helplink' => 'Wiki text linking to login help', +'createacct-join' => 'Subheading of create account form encouraging user to join the wiki.', +'createacct-emailrequired' => 'Label in Agora create account form for email field when it is required.', +'createacct-emailoptional' => 'Label in Agora create account form for email field when it is optional.', +'createacct-email-ph' => 'Placeholder in Agora create account form for email field.', 'createaccountmail' => 'Button text for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.', 'createaccountreason' => '{{Identical|Reason}}', +'createacct-reason' => 'In Agora create account form, label for field to enter reason to create an account when already logged-in.', +'createacct-benefit-heading' => 'In Agora create account form, the heading for the section describing the benefits of creating an account.', +'createacct-benefit-icon1' => 'In Agora create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.', +'createacct-benefit-head1' => 'In Agora create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.', +'createacct-benefit-body1' => 'In Agora create account form, the text for the first benefit.', +'createacct-benefit-icon2' => 'In Agora create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.', +'createacct-benefit-head2' => 'In Agora create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.', +'createacct-benefit-body2' => 'In Agora create account form, the text for the second benefit.', +'createacct-benefit-icon3' => 'In Agora create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.', +'createacct-benefit-head3' => 'In Agora create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.', +'createacct-benefit-body3' => 'In Agora create account form, the text for the third benefit.', 'badretype' => 'Used as error message when the new password and its retype do not match.', 'userexists' => 'Used as error message in creating a user account.', 'loginerror' => 'Used as title of error message.', @@ -2450,6 +2480,8 @@ This option lets your time zone setting use the one that is used on the wiki (of 'prefs-emailconfirm-label' => 'Sub-heading in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.', 'prefs-textboxsize' => "Header for the box specifying the size of the editing window, displayed on the 'editing' tab of the [[Special:Preferences|user preferences]] special page.", 'youremail' => 'Label of the e-mail text box of the "E-mail options" section of [[Special:Preferences]]. +Also used on create account form. + {{Identical|E-mail}}', 'username' => 'Username field in [[Special:Preferences]]. $1 is the current user name for GENDER distinction (depends on sex setting). diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 7c16df6cf4..db30ff7fcb 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -430,9 +430,20 @@ $wgMessageStructure = array( 'welcomeuser', 'welcomecreation-msg', 'yourname', + 'userlogin-yourname', + 'userlogin-yourname-ph', + 'createacct-helpusername-url', + 'createacct-helpusername-link', 'yourpassword', + 'userlogin-yourpassword', + 'userlogin-yourpassword-ph', + 'createacct-yourpassword-ph', 'yourpasswordagain', + 'createacct-yourpasswordagain', + 'createacct-yourpasswordagain-ph', 'remembermypassword', + 'userlogin-remembermypassword', + 'userlogin-signwithsecure', 'securelogin-stick-https', 'yourdomainname', 'password-change-forbidden', @@ -446,14 +457,33 @@ $wgMessageStructure = array( 'userlogout', 'userlogout-summary', 'notloggedin', + 'userlogin-noaccount', + 'userlogin-joinproject', 'nologin', 'nologinlink', 'createaccount', 'gotaccount', 'gotaccountlink', 'userlogin-resetlink', + 'helplogin-url', + 'userlogin-helplink', + 'createacct-join', + 'createacct-emailrequired', + 'createacct-emailoptional', + 'createacct-email-ph', 'createaccountmail', 'createaccountreason', + 'createacct-reason', + 'createacct-benefit-heading', + 'createacct-benefit-icon1', + 'createacct-benefit-head1', + 'createacct-benefit-body1', + 'createacct-benefit-icon2', + 'createacct-benefit-head2', + 'createacct-benefit-body2', + 'createacct-benefit-icon3', + 'createacct-benefit-head3', + 'createacct-benefit-body3', 'badretype', 'userexists', 'loginerror', diff --git a/resources/Resources.php b/resources/Resources.php index f5a31fd675..83fcb72404 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -943,6 +943,21 @@ return array( 'mediawiki.special.userlogin.signup' => array( 'scripts' => 'resources/mediawiki.special/mediawiki.special.userLogin.signup.js', ), + 'mediawiki.special.userlogin.agora' => array( + 'styles' => array( + 'resources/mediawiki.special/mediawiki.special.forms.agora.css', + 'resources/mediawiki.special/mediawiki.special.userlogin.agora.css', + ), + 'position' => 'top', + ), + 'mediawiki.special.createaccount.agora' => array( + 'scripts' => 'resources/mediawiki.special/mediawiki.special.createaccount.agora.js', + 'styles' => array( + 'resources/mediawiki.special/mediawiki.special.forms.agora.css', + 'resources/mediawiki.special/mediawiki.special.createaccount.agora.css', + ), + 'position' => 'top', + ), 'mediawiki.special.javaScriptTest' => array( 'scripts' => 'resources/mediawiki.special/mediawiki.special.javaScriptTest.js', 'messages' => array_merge( Skin::getSkinNameMessages(), array( @@ -1040,4 +1055,11 @@ return array( 'remoteBasePath' => $GLOBALS['wgStylePath'], 'localBasePath' => $GLOBALS['wgStyleDirectory'], ), + 'mediawiki.ui' => array( + 'skinStyles' => array( + 'default' => 'resources/mediawiki.ui/mediawiki.ui.default.css', + 'vector' => 'resources/mediawiki.ui/mediawiki.ui.vector.css', + ), + 'position' => 'top', + ), ); diff --git a/resources/mediawiki.special/images/glyph-people-large.png b/resources/mediawiki.special/images/glyph-people-large.png new file mode 100644 index 0000000000000000000000000000000000000000..2c251d7924f2f091bbcb3830da1d360556aaf732 GIT binary patch literal 5048 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 O00009u$O literal 0 HcmV?d00001 diff --git a/resources/mediawiki.special/images/icon-contributors.png b/resources/mediawiki.special/images/icon-contributors.png new file mode 100644 index 0000000000000000000000000000000000000000..62b37f95c9ed0193018300132c2d216d6336e730 GIT binary patch literal 4043 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 KMNUMnLSTaCLy6u1 literal 0 HcmV?d00001 diff --git a/resources/mediawiki.special/images/icon-pages.png b/resources/mediawiki.special/images/icon-pages.png new file mode 100644 index 0000000000000000000000000000000000000000..0389c846e96dc30b2534567c52279a23d21243d3 GIT binary patch literal 3447 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 Z9RO)gXT!e1+G79!002ovPDHLkV1hJ!XLJAn literal 0 HcmV?d00001 diff --git a/resources/mediawiki.special/mediawiki.special.createaccount.agora.css b/resources/mediawiki.special/mediawiki.special.createaccount.agora.css new file mode 100644 index 0000000000..fc6dec8608 --- /dev/null +++ b/resources/mediawiki.special/mediawiki.special.createaccount.agora.css @@ -0,0 +1,74 @@ +/* Benefits column CSS */ +div.createacct-benefits-container { + margin-left: 100px; + float: left } + +div.createacct-benefits-container h2 { + margin-bottom: 30px; +} + +ul.createacct-benefits-list { + list-style: none; + margin-left: 0; +} + +ul.createacct-benefits-list li { + display: block; + padding: 0; + margin-bottom: 40px; } + +div.benefits-icon { + display: inline-block; + padding: 0; + float: left; + width: 80px; + height: 75px; + margin-right: 15px; + border: 0; } + +.benefits-icon.icon-edits { + /* @embed */ + background: url(images/icon-edits.png) no-repeat right; +} + +.benefits-icon.icon-pages { + /* @embed */ + background: url(images/icon-pages.png) no-repeat right; +} + +.benefits-icon.icon-contributors { + /* @embed */ + background: url(images/icon-contributors.png) no-repeat right; +} + +/* General alignment of benefits */ +.benefits-text { + display: inline-block; + min-width: 200px; + height: 75px; + vertical-align: middle; + max-width: 450px; + padding: 0; +} + +/* Special font for numbers in benefits*/ +div.number-text h3 { + top: 0; + margin: 0; + padding: 0; + color: #252525; + font-family: 'Georgia', serif; + font-weight: normal; + font-size: 2.2em; + line-height: 1.2; + text-align: center; +} + +div.number-text { + display: block; + font-size: 1.2em; + font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; + color: #444; + margin-top: 1em; + text-align: center; +} diff --git a/resources/mediawiki.special/mediawiki.special.createaccount.agora.js b/resources/mediawiki.special/mediawiki.special.createaccount.agora.js new file mode 100644 index 0000000000..c14a53aed5 --- /dev/null +++ b/resources/mediawiki.special/mediawiki.special.createaccount.agora.js @@ -0,0 +1,47 @@ +/* JavaScript for Special:Userlogin */ + +jQuery( function( $ ) { + var $content = $( '#mw-content-text' ), + $captchaStuff; + + /** + * CAPTCHA + * The CAPTCHA is in a div style="captcha" along with a ton of + * irrelevant text from MediaWiki:fancycaptcha-create-account + * Strategy: remove it, then repopulate just what we need. + * Adds an empty Security check if there's no CAPTCHA. + */ + $captchaStuff = $content.find ( '.captcha' ).remove(); + if ( $captchaStuff.length ) { + // insert another li before the submit button. + $content.find( '#wpCreateaccount' ).closest( 'li' ) + .before( [ + '
  • ', + '', + '
    ', + 'PLACEHOLDER', + // arguably mw.util.wikiGetLink() here... + 'Can\'t see the image? We can create an account for you!', + // Same tabindex as Remember me checkbox , but we removed that. + '', + '
    ', + '
  • ' + ].join('') ); + + // There are only a few only things we want from the old CAPTCHA. + // Get the img (we hope only one!) out of the old CAPTCHA, + // and replace the placeholder img with it, and style it. + $captchaStuff.find( 'img' ) + .replaceAll( $content.find( '#acux-captcha' ) ) + .addClass( 'acux-captcha'); + + // Find the input field, add the text (if any) of the existing CAPTCHA + // field (although usually it's blanked out on every redisplay), + // and after it move over the hidden field that tells the CAPTCHA + // what to do. + $content.find( '#wpCaptchaWord' ) + .val( $captchaStuff.find( '#wpCaptchaWord' ).val() ) + .after( $captchaStuff.find( '#wpCaptchaId' ) ); + } + +}); diff --git a/resources/mediawiki.special/mediawiki.special.forms.agora.css b/resources/mediawiki.special/mediawiki.special.forms.agora.css new file mode 100644 index 0000000000..4ebc8171e8 --- /dev/null +++ b/resources/mediawiki.special/mediawiki.special.forms.agora.css @@ -0,0 +1,51 @@ +/***************** some of this stuff should move to Agora core CSS *****************/ +/* Style elements in a mw-ui-container. +DISABLED +div.mw-ui-container { + font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif; + font-size: 1.0em; + border: 0; +} +*/ + +.mw-ui-container h2 { + border: 0; + font-weight: bold; +} + +/* + * When inside the Agora style, disable the border that Vector puts on the div + * surrounding a form. + */ +.mw-ui-container #userloginForm, .mw-ui-container #userlogin { + border: 0; + margin: 0; + padding: 0; +} + +/* Note MediaWiki HTML::input drops default type="text" if $wgHtml5 */ + +/* Similar to .acux-errorbox */ +/* + * In theory besides errorbox there could be warningbox, successbox, msgbox, + * spage has never seen these in practice. + * Vector has styles coloring warningbox cream and successbox green. + */ +.mw-ui-formlist .errorbox, .mw-ui-formlist .warningbox, .mw-ui-formlist .successbox { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + /* munaf, need some font-size to disable vector's font-size: larger for errorbox + * munaf, this leaves error text bigger than label text which has + * .mw-ui-formlist li label shrinking an addition 0.9em on top of Vector's + * #bodyContent 0.8em + */ + font-size: 0.9em; + margin: 0 0 1em 0; + padding: 0.5em; + color: #cc0000; + border: 1px solid #fac5c5; + background-color: #fae3e3; + text-shadow: 0 1px #fae3e3; +} diff --git a/resources/mediawiki.special/mediawiki.special.userlogin.agora.css b/resources/mediawiki.special/mediawiki.special.userlogin.agora.css new file mode 100644 index 0000000000..e8e44537ff --- /dev/null +++ b/resources/mediawiki.special/mediawiki.special.userlogin.agora.css @@ -0,0 +1,34 @@ +/***************** stuff just for userlogin Agora *****************/ +.mw-ui-formlist .mw-secure { + /* @embed */ + background: url(images/icon-lock.png) no-repeat scroll left center transparent; + margin: 0 0 0 1px; + padding: 0 0 0 11px; +} + +#createaccount-cta { + width: 20em; + height: 10em; + text-align: center; + /* @embed */ + background: url(images/glyph-people-large.png) no-repeat 50%; + font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif; +} + +#createaccount-cta h3 { + width: 100%; + font-size: 0.9em; + font-weight: normal; + text-align: center; + padding-top: 4em; +} + +#mw-joinproject { + display: inline-block; + font-size: 1em; + margin-left: 0.75em; + + -webkit-box-shadow: 4px 4px 4px 4px rgba(255, 255, 255, 1); + -moz-box-shadow: 4px 4px 4px 4px rgba(255, 255, 255, 1); + box-shadow: 4px 4px 4px 4px rgba(255, 255, 255, 1); +} diff --git a/resources/mediawiki.ui/mediawiki.ui.default.css b/resources/mediawiki.ui/mediawiki.ui.default.css new file mode 100644 index 0000000000..57ba10f87f --- /dev/null +++ b/resources/mediawiki.ui/mediawiki.ui.default.css @@ -0,0 +1,50 @@ +/* Agora styles, default with vector stuff removed. */ +/* _effects.scss */ +/* Mixins for visual effects in CSS3 */ +/* line 7, ../scss/components/_utilities.scss */ +.mw-ui-flush-left { + float: left; + margin-left: 0; + padding-left: 0; +} + +/* line 11, ../scss/components/_utilities.scss */ +.mw-ui-flush-right { + float: right; + margin-right: 0; + padding-right: 0; +} + +/* line 15, ../scss/components/_utilities.scss */ +.mw-ui-center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* no buttons? +button.mw-ui-button, input[type="submit"].mw-ui-button, a.mw-ui-button +button.mw-ui-button:hover, button.mw-ui-button.hover, input[type="submit"].mw-ui-button:hover, input[type="submit"].mw-ui-button.hover, a.mw-ui-button:hover, a.mw-ui-button.hover +*/ + +/* line 7, ../scss/components/_forms.scss */ +ul.mw-ui-formlist { + list-style: none; + list-style-image: none; +} +/* line 16, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li { + display: block; + width: 100%; +} +/* line 25, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li input, +ul.mw-ui-formlist li label, +ul.mw-ui-formlist li .mw-ui-button { + margin: 0; + width: 100%; +} +/* nothing about labels or checkboxes +ul.mw-ui-formlist li label +ul.mw-ui-formlist li label.mw-ui-checkbox-label > input[type="checkbox"], ul.mw-ui-formlist li label.mw-ui-checkbox-label > input[type="radio"], ul.mw-ui-formlist li label.mw-ui-radio-label > input[type="checkbox"], ul.mw-ui-formlist li label.mw-ui-radio-label > input[type="radio"] +*/ diff --git a/resources/mediawiki.ui/mediawiki.ui.vector.css b/resources/mediawiki.ui/mediawiki.ui.vector.css new file mode 100644 index 0000000000..704ce1bc89 --- /dev/null +++ b/resources/mediawiki.ui/mediawiki.ui.vector.css @@ -0,0 +1,335 @@ +/* Agora styles */ +/* _effects.scss */ +/* Mixins for visual effects in CSS3 */ +/* line 7, ../scss/components/_utilities.scss */ +.mw-ui-flush-left { + float: left; + margin-left: 0; + padding-left: 0; +} + +/* line 11, ../scss/components/_utilities.scss */ +.mw-ui-flush-right { + float: right; + margin-right: 0; + padding-right: 0; +} + +/* line 15, ../scss/components/_utilities.scss */ +.mw-ui-center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* line 8, ../scss/components/_buttons.scss */ +button.mw-ui-button, input[type="submit"].mw-ui-button, a.mw-ui-button { + display: -moz-inline-stack; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + padding: 0.4em 1em 0.4em 1em; + margin: 0; + background-color: #c9c9c9; + *background-color: #c9c9c9; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9); + background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9); + background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9); + background-image: linear-gradient(top, #dcdcdc, #c9c9c9); + color: #4a4a4a; + text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3); + border: 1px solid #c4c4c4; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + line-height: 1.4em; + vertical-align: middle; + text-align: center; + text-decoration: none; + font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif; + font-size: 1em; + font-weight: bold; + cursor: pointer; +} +/* line 38, ../scss/mixins/_effects.scss */ +button.mw-ui-button:hover, button.mw-ui-button.hover, input[type="submit"].mw-ui-button:hover, input[type="submit"].mw-ui-button.hover, a.mw-ui-button:hover, a.mw-ui-button.hover { + background-color: gainsboro; + *background-color: gainsboro; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc)); + background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc); + background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc); + background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc); + background-image: linear-gradient(top, #e9e9e9, #dcdcdc); +} +/* line 43, ../scss/mixins/_effects.scss */ +button.mw-ui-button:active, button.mw-ui-button.active, input[type="submit"].mw-ui-button:active, input[type="submit"].mw-ui-button.active, a.mw-ui-button:active, a.mw-ui-button.active { + background-image: none; + background-color: #c1c1c1; + text-shadow: none; +} +/* line 53, ../scss/mixins/_effects.scss */ +button.mw-ui-button:disabled, button.mw-ui-button.disabled, input[type="submit"].mw-ui-button:disabled, input[type="submit"].mw-ui-button.disabled, a.mw-ui-button:disabled, a.mw-ui-button.disabled { + background-image: none; + background-color: #c9c9c9; + opacity: 0.5; + text-shadow: none; +} +/* line 37, ../scss/components/_buttons.scss */ +button.mw-ui-button:disabled, button.mw-ui-button.disabled, input[type="submit"].mw-ui-button:disabled, input[type="submit"].mw-ui-button.disabled, a.mw-ui-button:disabled, a.mw-ui-button.disabled { + cursor: default; +} +/* line 44, ../scss/components/_buttons.scss */ +button.mw-ui-button.blue, button.mw-ui-button.primary, input[type="submit"].mw-ui-button.blue, input[type="submit"].mw-ui-button.primary, a.mw-ui-button.blue, a.mw-ui-button.primary { + background-color: #3366bb; + *background-color: #3366bb; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF4779CD', endColorstr='#FF3366BB'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4779cd), color-stop(100%, #3366bb)); + background-image: -webkit-linear-gradient(top, #4779cd, #3366bb); + background-image: -moz-linear-gradient(top, #4779cd, #3366bb); + background-image: -o-linear-gradient(top, #4779cd, #3366bb); + background-image: linear-gradient(top, #4779cd, #3366bb); + color: white; + text-shadow: 0 1px 1px rgba(51, 102, 187, 0.75); + border: 1px solid #3162b3; +} +/* line 38, ../scss/mixins/_effects.scss */ +button.mw-ui-button.blue:hover, button.mw-ui-button.blue.hover, button.mw-ui-button.primary:hover, button.mw-ui-button.primary.hover, input[type="submit"].mw-ui-button.blue:hover, input[type="submit"].mw-ui-button.blue.hover, input[type="submit"].mw-ui-button.primary:hover, input[type="submit"].mw-ui-button.primary.hover, a.mw-ui-button.blue:hover, a.mw-ui-button.blue.hover, a.mw-ui-button.primary:hover, a.mw-ui-button.primary.hover { + background-color: #4779cd; + *background-color: #4779cd; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF5B88D2', endColorstr='#FF4779CD'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5b88d2), color-stop(100%, #4779cd)); + background-image: -webkit-linear-gradient(top, #5b88d2, #4779cd); + background-image: -moz-linear-gradient(top, #5b88d2, #4779cd); + background-image: -o-linear-gradient(top, #5b88d2, #4779cd); + background-image: linear-gradient(top, #5b88d2, #4779cd); +} +/* line 43, ../scss/mixins/_effects.scss */ +button.mw-ui-button.blue:active, button.mw-ui-button.blue.active, button.mw-ui-button.primary:active, button.mw-ui-button.primary.active, input[type="submit"].mw-ui-button.blue:active, input[type="submit"].mw-ui-button.blue.active, input[type="submit"].mw-ui-button.primary:active, input[type="submit"].mw-ui-button.primary.active, a.mw-ui-button.blue:active, a.mw-ui-button.blue.active, a.mw-ui-button.primary:active, a.mw-ui-button.primary.active { + background-image: none; + background-color: #305faf; + text-shadow: none; +} +/* line 53, ../scss/mixins/_effects.scss */ +button.mw-ui-button.blue:disabled, button.mw-ui-button.blue.disabled, button.mw-ui-button.primary:disabled, button.mw-ui-button.primary.disabled, input[type="submit"].mw-ui-button.blue:disabled, input[type="submit"].mw-ui-button.blue.disabled, input[type="submit"].mw-ui-button.primary:disabled, input[type="submit"].mw-ui-button.primary.disabled, a.mw-ui-button.blue:disabled, a.mw-ui-button.blue.disabled, a.mw-ui-button.primary:disabled, a.mw-ui-button.primary.disabled { + background-image: none; + background-color: #3366bb; + opacity: 0.5; + text-shadow: none; +} +/* line 49, ../scss/components/_buttons.scss */ +button.mw-ui-button.green, button.mw-ui-button.constructive, input[type="submit"].mw-ui-button.green, input[type="submit"].mw-ui-button.constructive, a.mw-ui-button.green, a.mw-ui-button.constructive { + background-color: #27aa65; + *background-color: #27aa65; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF2EC977', endColorstr='#FF27AA65'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2ec977), color-stop(100%, #27aa65)); + background-image: -webkit-linear-gradient(top, #2ec977, #27aa65); + background-image: -moz-linear-gradient(top, #2ec977, #27aa65); + background-image: -o-linear-gradient(top, #2ec977, #27aa65); + background-image: linear-gradient(top, #2ec977, #27aa65); + color: white; + text-shadow: 0 1px 1px rgba(39, 170, 101, 0.75); + border: 1px solid #25a260; +} +/* line 38, ../scss/mixins/_effects.scss */ +button.mw-ui-button.green:hover, button.mw-ui-button.green.hover, button.mw-ui-button.constructive:hover, button.mw-ui-button.constructive.hover, input[type="submit"].mw-ui-button.green:hover, input[type="submit"].mw-ui-button.green.hover, input[type="submit"].mw-ui-button.constructive:hover, input[type="submit"].mw-ui-button.constructive.hover, a.mw-ui-button.green:hover, a.mw-ui-button.green.hover, a.mw-ui-button.constructive:hover, a.mw-ui-button.constructive.hover { + background-color: #2ec977; + *background-color: #2ec977; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF3ED384', endColorstr='#FF2EC977'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3ed384), color-stop(100%, #2ec977)); + background-image: -webkit-linear-gradient(top, #3ed384, #2ec977); + background-image: -moz-linear-gradient(top, #3ed384, #2ec977); + background-image: -o-linear-gradient(top, #3ed384, #2ec977); + background-image: linear-gradient(top, #3ed384, #2ec977); +} +/* line 43, ../scss/mixins/_effects.scss */ +button.mw-ui-button.green:active, button.mw-ui-button.green.active, button.mw-ui-button.constructive:active, button.mw-ui-button.constructive.active, input[type="submit"].mw-ui-button.green:active, input[type="submit"].mw-ui-button.green.active, input[type="submit"].mw-ui-button.constructive:active, input[type="submit"].mw-ui-button.constructive.active, a.mw-ui-button.green:active, a.mw-ui-button.green.active, a.mw-ui-button.constructive:active, a.mw-ui-button.constructive.active { + background-image: none; + background-color: #249e5e; + text-shadow: none; +} +/* line 53, ../scss/mixins/_effects.scss */ +button.mw-ui-button.green:disabled, button.mw-ui-button.green.disabled, button.mw-ui-button.constructive:disabled, button.mw-ui-button.constructive.disabled, input[type="submit"].mw-ui-button.green:disabled, input[type="submit"].mw-ui-button.green.disabled, input[type="submit"].mw-ui-button.constructive:disabled, input[type="submit"].mw-ui-button.constructive.disabled, a.mw-ui-button.green:disabled, a.mw-ui-button.green.disabled, a.mw-ui-button.constructive:disabled, a.mw-ui-button.constructive.disabled { + background-image: none; + background-color: #27aa65; + opacity: 0.5; + text-shadow: none; +} +/* line 54, ../scss/components/_buttons.scss */ +button.mw-ui-button.red, button.mw-ui-button.destructive, input[type="submit"].mw-ui-button.red, input[type="submit"].mw-ui-button.destructive, a.mw-ui-button.red, a.mw-ui-button.destructive { + background-color: #cc0000; + *background-color: #cc0000; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFF20000', endColorstr='#FFCC0000'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f20000), color-stop(100%, #cc0000)); + background-image: -webkit-linear-gradient(top, #f20000, #cc0000); + background-image: -moz-linear-gradient(top, #f20000, #cc0000); + background-image: -o-linear-gradient(top, #f20000, #cc0000); + background-image: linear-gradient(top, #f20000, #cc0000); + color: white; + text-shadow: 0 1px 1px rgba(204, 0, 0, 0.75); + border: 1px solid #c20000; +} +/* line 38, ../scss/mixins/_effects.scss */ +button.mw-ui-button.red:hover, button.mw-ui-button.red.hover, button.mw-ui-button.destructive:hover, button.mw-ui-button.destructive.hover, input[type="submit"].mw-ui-button.red:hover, input[type="submit"].mw-ui-button.red.hover, input[type="submit"].mw-ui-button.destructive:hover, input[type="submit"].mw-ui-button.destructive.hover, a.mw-ui-button.red:hover, a.mw-ui-button.red.hover, a.mw-ui-button.destructive:hover, a.mw-ui-button.destructive.hover { + background-color: #f20000; + *background-color: #f20000; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFF0D0D', endColorstr='#FFF20000'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0d0d), color-stop(100%, #f20000)); + background-image: -webkit-linear-gradient(top, #ff0d0d, #f20000); + background-image: -moz-linear-gradient(top, #ff0d0d, #f20000); + background-image: -o-linear-gradient(top, #ff0d0d, #f20000); + background-image: linear-gradient(top, #ff0d0d, #f20000); +} +/* line 43, ../scss/mixins/_effects.scss */ +button.mw-ui-button.red:active, button.mw-ui-button.red.active, button.mw-ui-button.destructive:active, button.mw-ui-button.destructive.active, input[type="submit"].mw-ui-button.red:active, input[type="submit"].mw-ui-button.red.active, input[type="submit"].mw-ui-button.destructive:active, input[type="submit"].mw-ui-button.destructive.active, a.mw-ui-button.red:active, a.mw-ui-button.red.active, a.mw-ui-button.destructive:active, a.mw-ui-button.destructive.active { + background-image: none; + background-color: #bd0000; + text-shadow: none; +} +/* line 53, ../scss/mixins/_effects.scss */ +button.mw-ui-button.red:disabled, button.mw-ui-button.red.disabled, button.mw-ui-button.destructive:disabled, button.mw-ui-button.destructive.disabled, input[type="submit"].mw-ui-button.red:disabled, input[type="submit"].mw-ui-button.red.disabled, input[type="submit"].mw-ui-button.destructive:disabled, input[type="submit"].mw-ui-button.destructive.disabled, a.mw-ui-button.red:disabled, a.mw-ui-button.red.disabled, a.mw-ui-button.destructive:disabled, a.mw-ui-button.destructive.disabled { + background-image: none; + background-color: #cc0000; + opacity: 0.5; + text-shadow: none; +} +/* line 60, ../scss/components/_buttons.scss */ +button.mw-ui-button.big, input[type="submit"].mw-ui-button.big, a.mw-ui-button.big { + font-size: 1.3em; +} +/* line 65, ../scss/components/_buttons.scss */ +button.mw-ui-button.block, input[type="submit"].mw-ui-button.block, a.mw-ui-button.block { + display: block; + width: 100%; +} + +/* line 7, ../scss/components/_forms.scss */ +ul.mw-ui-formlist { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif; + font-size: 1em; + line-height: 1.4em; + list-style: none; + list-style-image: none; + width: 20em; +} +/* line 16, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li { + display: block; + margin: 0 0 15px 0; + padding: 0; + width: 100%; +} +/* line 25, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li input, +ul.mw-ui-formlist li label, +ul.mw-ui-formlist li .mw-ui-button { + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + width: 100%; +} +/* line 32, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li label { + width: auto; + margin: 0 0 0.2em 0; + padding: 0; +} +/* line 38, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li label.mw-ui-checkbox-label, ul.mw-ui-formlist li label.mw-ui-radio-label { + cursor: pointer; + vertical-align: bottom; + line-height: normal; + height: 1em; + font-weight: normal; +} +/* line 50, ../scss/mixins/_forms.scss */ +ul.mw-ui-formlist li label.mw-ui-checkbox-label > input[type="checkbox"], ul.mw-ui-formlist li label.mw-ui-checkbox-label > input[type="radio"], ul.mw-ui-formlist li label.mw-ui-radio-label > input[type="checkbox"], ul.mw-ui-formlist li label.mw-ui-radio-label > input[type="radio"] { + width: auto; + height: auto; + margin: 0 0.3em 0 0; + padding: 0; + border-style: solid; + border-width: 1px; + border-color: #c9c9c9; + cursor: pointer; +} +/* line 45, ../scss/components/_forms.scss */ +ul.mw-ui-formlist li input[type="checkbox"], +ul.mw-ui-formlist li input[type="radio"] { + display: inline; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + width: auto; +} + +/* line 60, ../scss/components/_forms.scss */ +.mw-ui-input, .mw-ui-formlist li input { + outline: 0; + font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif; + font-size: 1em; + line-height: 1.4em; + font-size: 1em; + border-style: solid; + border-width: 1px; + border-color: #c9c9c9; + color: #252525; + padding: 0.25em 0 0.2em 0.5em; +} +/* line 15, ../scss/mixins/_forms.scss */ +.mw-ui-input:focus, .mw-ui-formlist li input:focus { + -webkit-box-shadow: #4091ed 0px 0px 5px; + -moz-box-shadow: #4091ed 0px 0px 5px; + box-shadow: #4091ed 0px 0px 5px; + border-color: #4091ed; +} + +/* line 65, ../scss/components/_forms.scss */ +.mw-ui-block-label, .mw-ui-formlist li label { + font-weight: bold; + font-size: 0.9em; + color: #7d7d7d; +} +/* line 34, ../scss/mixins/_forms.scss */ +.mw-ui-block-label *, .mw-ui-formlist li label * { + font-weight: normal; +} + +/* line 74, ../scss/components/_forms.scss */ +.mw-ui-checkbox-label, .mw-ui-radio-label { + cursor: pointer; + vertical-align: bottom; + line-height: normal; + height: 1em; + font-weight: normal; +} +/* line 50, ../scss/mixins/_forms.scss */ +.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] { + width: auto; + height: auto; + margin: 0 0.3em 0 0; + padding: 0; + border-style: solid; + border-width: 1px; + border-color: #c9c9c9; + cursor: pointer; +} -- 2.20.1