http://www.mediawiki.org/wiki/Special:Code/MediaWiki/99139
Revision: 99139 Author: jeroendedauw Date: 2011-10-06 20:49:03 +0000 (Thu, 06 Oct 2011) Log Message: ----------- work on landing page ui Modified Paths: -------------- trunk/extensions/Contest/Contest.i18n.php trunk/extensions/Contest/Contest.php trunk/extensions/Contest/Contest.sql trunk/extensions/Contest/includes/ContestChallenge.php trunk/extensions/Contest/resources/contest.special.welcome.css trunk/extensions/Contest/resources/contest.special.welcome.js trunk/extensions/Contest/specials/SpecialContestWelcome.php Added Paths: ----------- trunk/extensions/Contest/resources/images/ trunk/extensions/Contest/resources/images/blue_arrow_down.png trunk/extensions/Contest/resources/images/blue_arrow_right.png trunk/extensions/Contest/resources/images/button_arrow.png trunk/extensions/Contest/resources/images/button_arrow_hover.png trunk/extensions/Contest/resources/images/icon-box-hover-left-cap.png trunk/extensions/Contest/resources/images/icon-box-hover-right-cap.png trunk/extensions/Contest/resources/images/icon-box-hover.png trunk/extensions/Contest/resources/images/icon-box-left-cap.png trunk/extensions/Contest/resources/images/icon-box-right-cap.png trunk/extensions/Contest/resources/images/icon-box-selected-left-cap.png trunk/extensions/Contest/resources/images/icon-box-selected-right-cap.png trunk/extensions/Contest/resources/images/icon-box-selected.png trunk/extensions/Contest/resources/images/icon-box.png trunk/extensions/Contest/resources/images/select-bg-sprite.png trunk/extensions/Contest/resources/images/select-sprite.png trunk/extensions/Contest/resources/jquery.contestChallanges.js Modified: trunk/extensions/Contest/Contest.i18n.php =================================================================== --- trunk/extensions/Contest/Contest.i18n.php 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/Contest.i18n.php 2011-10-06 20:49:03 UTC (rev 99139) @@ -98,7 +98,10 @@ 'contest-welcome-unknown' => 'There is no contest with the provided name.', 'contest-welcome-rules' => 'In order to participate, you must agree to [[$1|the contest rules]].', 'contest-welcome-signup' => 'Signup now', + 'contest-welcome-js-off' => 'Contest uses JavaScript for an improved interface. Your browser either does not support JavaScript or has JavaScript turned off.', + 'contest-welcome-select-header' => 'Select your challange:', + // Special:ContestSignup & Special:ContestSubmission 'contest-signup-unknown' => 'There is no contest with the provided name.', 'contest-signup-submit' => 'Signup', Modified: trunk/extensions/Contest/Contest.php =================================================================== --- trunk/extensions/Contest/Contest.php 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/Contest.php 2011-10-06 20:49:03 UTC (rev 99139) @@ -166,12 +166,16 @@ $wgResourceModules['contest.special.welcome'] = $moduleTemplate + array( 'scripts' => array( 'contest.special.welcome.js', + 'jquery.contestChallanges.js' ), 'styles' => array( 'contest.special.welcome.css', ), 'dependencies' => array( 'jquery.ui.button' + ), + 'messages' => array( + 'contest-welcome-select-header' ) ); Modified: trunk/extensions/Contest/Contest.sql =================================================================== --- trunk/extensions/Contest/Contest.sql 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/Contest.sql 2011-10-06 20:49:03 UTC (rev 99139) @@ -48,7 +48,8 @@ challenge_contest_id INT unsigned NOT NULL, challenge_text TEXT NOT NULL, - challenge_title VARCHAR(255) NOT NULL + challenge_title VARCHAR(255) NOT NULL, + challenge_oneline TEXT NOT NULL ) /*$wgDBTableOptions*/; -- Judge votes Modified: trunk/extensions/Contest/includes/ContestChallenge.php =================================================================== --- trunk/extensions/Contest/includes/ContestChallenge.php 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/includes/ContestChallenge.php 2011-10-06 20:49:03 UTC (rev 99139) @@ -85,6 +85,7 @@ 'contest_id' => 'id', 'text' => 'str', 'title' => 'str', + 'oneline' => 'str', ); } @@ -99,6 +100,7 @@ return array( 'text' => '', 'title' => '', + 'oneline' => '', ); } Modified: trunk/extensions/Contest/resources/contest.special.welcome.css =================================================================== --- trunk/extensions/Contest/resources/contest.special.welcome.css 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/resources/contest.special.welcome.css 2011-10-06 20:49:03 UTC (rev 99139) @@ -6,11 +6,178 @@ * @author Jeroen De Dauw <jeroendedauw at gmail dot com> */ -button.challenge-signup { + +/* dialog type selection */ +/*#mw-codechallenge-dialog*/ #contest-challanges-list { + float: left; + width: 250px; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list ul { + list-style: none; + margin: 0; + padding: 0; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list ul li, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a +{ + display: block; + width: 250px; + height: 66px; + padding: 0; + margin: 0; + position: relative; + text-decoration: none; + outline: none; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:hover, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:focus { + text-decoration:none; +} + +/* IGNORED BY IE6 */ +/*#mw-codechallenge-dialog*/ #contest-challanges-list ul > li, +/*#mw-codechallenge-dialog*/ #contest-challanges-list ul li > a { + display: inline-block; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-left-cap, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-right-cap { + padding: 0; + margin: 0; + width: 6px; + height: 66px; position: absolute; - right: 5px; + top: 0px; } -div.contest-challenge { - position: relative; +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-l-cap, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-r-cap, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-icon-box { + background-repeat: no-repeat; + height: 66px; + position: absolute; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-l-cap, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-r-cap { + width: 6px; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-l-cap { + /* @noflip */ + left: 0px; + /* @embed */ + background-image: url(images/icon-box-left-cap.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:hover .mw-codechallenge-l-cap, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:focus .mw-codechallenge-l-cap { + /* @embed */ + background-image: url(images/icon-box-hover-left-cap.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a.selected .mw-codechallenge-l-cap { + /* @embed */ + background-image: url(images/icon-box-selected-left-cap.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-r-cap { + /* @noflip */ + right: 0px; + /* @embed */ + background-image: url(images/icon-box-right-cap.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:hover .mw-codechallenge-r-cap, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:focus .mw-codechallenge-r-cap { + /* @embed */ + background-image: url(images/icon-box-hover-right-cap.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a.selected .mw-codechallenge-r-cap { + /* @embed */ + background-image: url(images/icon-box-selected-right-cap.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-inside { + padding: 0; + margin: 0; + width: 238px; + height: 66px; + position: absolute; + top: 0px; + left: 6px; + + /* @embed */ + background-image: url(images/select-bg-sprite.png); + background-position: 0px 0px; + background-repeat: repeat-x; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:hover .mw-codechallenge-inside, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:focus .mw-codechallenge-inside { + background-position: 0px -66px; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a.selected .mw-codechallenge-inside { + background-position: 0px -132px; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-icon-box { + padding: 0; + margin: 0; + width: 53px; + height: 53px; + position: absolute; + right: 0px; + top: 5px; + /* @embed */ + background-image: url(images/icon-box.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-icon-box img { + padding: 0; + margin: 0; + width: 53px; + height: 53px; + position: absolute: + top: 0px; + left: 0px; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:hover .mw-codechallenge-icon-box, +/*#mw-codechallenge-dialog*/ #contest-challanges-list a:focus .mw-codechallenge-icon-box { + /* @embed */ + background-image: url(images/icon-box-hover.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a.selected .mw-codechallenge-icon-box { + /* @embed */ + background-image: url(images/icon-box-selected.png); +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-link-text { + padding: 0; + margin: 0; + width: 170px; + height: 53px; + position: absolute; + left: 64px; + top: 5px; + line-height: 53px; + font-size: 1.2em; + font-weight: bold; + text-decoration: none; + color: white; +} + +/*#mw-codechallenge-dialog*/ #contest-challanges-list a .mw-codechallenge-no-icon .mw-codechallenge-link-text { + left: 3px; +} + +#mw-codechallenge-dialog a { + color: #0645AD; } \ No newline at end of file Modified: trunk/extensions/Contest/resources/contest.special.welcome.js =================================================================== --- trunk/extensions/Contest/resources/contest.special.welcome.js 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/resources/contest.special.welcome.js 2011-10-06 20:49:03 UTC (rev 99139) @@ -10,9 +10,10 @@ $( document ).ready( function() { - $( '.contest-signup' ).button().click( function() { - window.location = $( this ).attr( 'data-contest-target' ); - } ); + $( '#contest-challanges' ).contestChallanges( + mw.config.get( 'ContestChallanges' ), + mw.config.get( 'ContestConfig' ) + ); } ); Added: trunk/extensions/Contest/resources/images/blue_arrow_down.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/blue_arrow_down.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/blue_arrow_right.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/blue_arrow_right.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/button_arrow.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/button_arrow.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/button_arrow_hover.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/button_arrow_hover.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-hover-left-cap.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-hover-left-cap.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-hover-right-cap.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-hover-right-cap.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-hover.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-hover.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-left-cap.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-left-cap.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-right-cap.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-right-cap.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-selected-left-cap.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-selected-left-cap.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-selected-right-cap.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-selected-right-cap.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box-selected.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box-selected.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/icon-box.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/icon-box.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/select-bg-sprite.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/select-bg-sprite.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/images/select-sprite.png =================================================================== (Binary files differ) Property changes on: trunk/extensions/Contest/resources/images/select-sprite.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/extensions/Contest/resources/jquery.contestChallanges.js =================================================================== --- trunk/extensions/Contest/resources/jquery.contestChallanges.js (rev 0) +++ trunk/extensions/Contest/resources/jquery.contestChallanges.js 2011-10-06 20:49:03 UTC (rev 99139) @@ -0,0 +1,66 @@ +/** + * JavasSript for the Contest MediaWiki extension. + * @see https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Extension:Contest + * + * @licence GNU GPL v3 or later + * @author Jeroen De Dauw <jeroendedauw at gmail dot com> + */ + +( function ( $, mw ) { $.fn.contestChallanges = function( challanges, config ) { + + this.challanges = challanges; + this.config = config; + + var _this = this; + var $this = $( this ); + + this.challangesList = null; + + this.showChallange = function( challange ) { + // TODO + console.log( challange ); + }; + + this.addChallange = function( challange ) { + var item = $( '<a />' ).attr( 'href', '#' ).html( '' ).click( function() { + _this.showChallange( challange ); + } ); + + item.append( $( '<div />' ).attr( 'class', 'mw-codechallenge-l-cap' ) ); + + var innerDiv = $( '<div />' ).attr( 'class', 'mw-codechallenge-inside' ); + + innerDiv.html( $( '<div />' ).attr( 'class', 'mw-codechallenge-link-text' ) + .html( $( '<p />' ).text( challange.title ) ) + .append( $( '<p />' ).text( challange.oneline ) ) + ); + + innerDiv.append( $( '<div />' ).attr( 'class', 'mw-codechallenge-icon-box' ) ); + item.append( innerDiv ); + + item.append( $( '<div />' ).attr( 'class', 'mw-codechallenge-r-cap' ) ); + + this.challangesList.append( $( '<li />' ).html( item ) ); + } + + this.initChallanges = function() { + this.challangesList = $( '<ul />' ).attr( 'id', 'contest-challanges-list' ); + + for ( i in this.challanges ) { + this.addChallange( this.challanges[i] ); + } + }; + + this.init = function() { + $this.html( $( '<h3 />' ).text( mw.msg( 'contest-welcome-select-header' ) ) ); + + this.initChallanges(); + + $this.append( this.challangesList ); + }; + + this.init(); + + return this; + +}; } )( window.jQuery, window.mediaWiki ); Property changes on: trunk/extensions/Contest/resources/jquery.contestChallanges.js ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/extensions/Contest/specials/SpecialContestWelcome.php =================================================================== --- trunk/extensions/Contest/specials/SpecialContestWelcome.php 2011-10-06 20:46:24 UTC (rev 99138) +++ trunk/extensions/Contest/specials/SpecialContestWelcome.php 2011-10-06 20:49:03 UTC (rev 99139) @@ -62,7 +62,6 @@ $this->showChallenges( $contest ); $this->showOpportunities( $contest ); $this->showRules( $contest ); - $this->showSignupLinks( $contest ); $out->addModules( 'contest.special.welcome' ); } @@ -87,32 +86,41 @@ * @param Contest $contest */ protected function showChallenges( Contest $contest ) { - $out = $this->getOutput(); + $this->showNoJSFallback( $contest ); + + $this->getOutput()->addHTML( '<div id="contest-challanges"></div>' ); + $this->addContestJS( $contest ); + } + + protected function addContestJS( Contest $contest ) { + $challanges = array(); + foreach ( $contest->getChallenges() as /* ContestChallenge */ $challenge ) { - $out->addHTML( '<fieldset>' ); - - $out->addHTML( Html::element( 'legend', array(), $challenge->getField( 'title' ) ) ); - - $out->addHTML( '<div class="contest-challenge">' ); - - $out->addHTML( Html::element( - 'button', - array( - 'class' => 'contest-signup challenge-signup', - 'data-contest-target' => $this->getSignupLink( $contest->getField( 'name' ), $challenge->getId() ) - ), - wfMsg( 'contest-welcome-signup' ) - ) ); - - $out->addHTML( Html::element( 'p', array(), $challenge->getField( 'text' ) ) ); - - $out->addHTML( '</div>' ); - - $out->addHTML( '</fieldset>' ); + $data = $challenge->toArray(); + $data['target'] = $this->getSignupLink( $contest->getField( 'name' ), $challenge->getId() ); + $challanges[] = $data; } + + $this->getOutput()->addScript( + Skin::makeVariablesScript( + array( + 'ContestChallanges' => $challanges, + 'ContestConfig' => array() + ) + ) + ); } + protected function showNoJSFallback( Contest $contest ) { + $out = $this->getOutput(); + + $out->addHTML( '<noscript>' ); + $out->addHTML( '<p class="errorbox">' . htmlspecialchars( wfMsg( 'contest-welcome-js-off' ) ) . '</p>' ); + // TODO? + $out->addHTML( '</noscript>' ); + } + /** * Show the opportunities for this contest. * @@ -137,27 +145,6 @@ } /** - * Show the signup links for this contest. - * - * @since 0.1 - * - * @param Contest $contest - */ - protected function showSignupLinks( Contest $contest ) { - $out = $this->getOutput(); - - $out->addHTML( Html::element( - 'button', - array( - 'id' => 'contest-signup', - 'class' => 'contest-signup', - 'data-contest-target' => $this->getSignupLink( $contest->getField( 'name' ) ) - ), - wfMsg( 'contest-welcome-signup' ) - ) ); - } - - /** * Gets the URL for the signup links. * When the user has to login, this will be to the login page, * with a retunrto to the signup page. @@ -176,15 +163,15 @@ $signupitle = SpecialPage::getTitleFor( 'ContestSignup', $contestName ); - if ( $this->getUser()->isLoggedIn() ) { +// if ( $this->getUser()->isLoggedIn() ) { return $signupitle->getLocalURL(); - } - else { - return SpecialPage::getTitleFor( 'UserLogin' )->getLocalURL( array( - //'type' => 'signup', - 'returnto' => $signupitle->getFullText() - ) ); - } +// } +// else { +// return SpecialPage::getTitleFor( 'Userlogin' )->getLocalURL( array( +// //'type' => 'signup', +// 'returnto' => $signupitle->getFullText() +// ) ); +// } } /** @@ -203,7 +190,7 @@ if ( is_null( $title ) ) { return ''; } - + $article = new Article( $title, 0 ); return $article->getContent(); } _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs