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

Reply via email to