Foxtrott has submitted this change and it was merged.

Change subject: Refactoring of the file layout
......................................................................


Refactoring of the file layout

Change-Id: I16cb0b2b8613b2333778633afca94c64cd8d4cfe
---
M Lingo.php
D LingoElement.php
R src/LingoBackend.php
R src/LingoBasicBackend.php
A src/LingoElement.php
R src/LingoHooks.php
R src/LingoMessageLog.php
R src/LingoParser.php
R src/LingoTree.php
R styles/Lingo.css
R styles/jquery.qtip.css
R styles/linkicon.png
12 files changed, 253 insertions(+), 214 deletions(-)

Approvals:
  Foxtrott: Verified; Looks good to me, approved
  jenkins-bot: Checked



diff --git a/Lingo.php b/Lingo.php
index 6ec670f..f6465b0 100644
--- a/Lingo.php
+++ b/Lingo.php
@@ -69,13 +69,13 @@
 
        // register class files with the Autoloader
        $autoloadClasses = array(
-                       'LingoHooks'        => $dir . '/LingoHooks.php',
-                       'LingoParser'       => $dir . '/LingoParser.php',
-                       'LingoTree'         => $dir . '/LingoTree.php',
-                       'LingoElement'      => $dir . '/LingoElement.php',
-                       'LingoBackend'      => $dir . '/LingoBackend.php',
-                       'LingoBasicBackend' => $dir . '/LingoBasicBackend.php',
-                       'LingoMessageLog'   => $dir . '/LingoMessageLog.php',
+                       'LingoHooks'        => $dir . '/src/LingoHooks.php',
+                       'LingoParser'       => $dir . '/src/LingoParser.php',
+                       'LingoTree'         => $dir . '/src/LingoTree.php',
+                       'LingoElement'      => $dir . '/src/LingoElement.php',
+                       'LingoBackend'      => $dir . '/src/LingoBackend.php',
+                       'LingoBasicBackend' => $dir . 
'/src/LingoBasicBackend.php',
+                       'LingoMessageLog'   => $dir . 
'/src/LingoMessageLog.php',
        );
 
        $GLOBALS[ 'wgAutoloadClasses' ] = array_merge( $GLOBALS[ 
'wgAutoloadClasses' ], $autoloadClasses );
@@ -96,7 +96,7 @@
                        'ext.Lingo.Styles'  => array(
                                        'localBasePath' => $dir,
                                        'remoteExtPath' => 'Lingo',
-                                       'styles'        => 'skins/Lingo.css',
+                                       'styles'        => 'styles/Lingo.css',
                        ),
 
                        'ext.Lingo.Scripts' => array(
@@ -110,7 +110,7 @@
                                        'localBasePath' => $dir,
                                        'remoteExtPath' => 'Lingo',
                                        'scripts'       => 
'libs/jquery.qtip.js',
-                                       'styles'        => 
'skins/jquery.qtip.css',
+                                       'styles'        => 
'styles/jquery.qtip.css',
                        ),
 
        );
diff --git a/LingoElement.php b/LingoElement.php
deleted file mode 100644
index 3b48311..0000000
--- a/LingoElement.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-
-/**
- * File holding the LingoElement class.
- *
- * @author Stephan Gambke
- *
- * @file
- * @ingroup Lingo
- */
-if ( !defined( 'LINGO_VERSION' ) ) {
-       die( 'This file is part of the Lingo extension, it is not a valid entry 
point.' );
-}
-
-/**
- * This class represents a term-definition pair.
- * One term may be related to several definitions.
- *
- * @ingroup Lingo
- */
-class LingoElement {
-       const ELEMENT_TERM = 0;
-       const ELEMENT_DEFINITION = 1;
-       const ELEMENT_SOURCE = 2;
-       const ELEMENT_LINK = 3;
-       const ELEMENT_STYLE = 4;
-
-       const ELEMENT_FIELDCOUNT = 5;  // number of fields stored for each 
element; (last field's index) + 1
-
-       private $mFullDefinition = null;
-       private $mDefinitions = array();
-       private $mTerm = null;
-       private $mHasBeenDisplayed = false;
-
-       static private $mLinkTemplate = null;
-
-       public function __construct( &$term, &$definition = null ) {
-
-               $this->mTerm = $term;
-
-               if ( $definition ) {
-                       $this->addDefinition( $definition );
-               }
-       }
-
-       public function addDefinition( &$definition ) {
-               $this->mDefinitions[] = array_pad( $definition, 
self::ELEMENT_FIELDCOUNT, null );
-       }
-
-       public function getFullDefinition( DOMDocument &$doc ) {
-
-               global $wgexLingoDisplayOnce;
-
-               wfProfileIn( __METHOD__ );
-
-               // return textnode if
-               if ( $wgexLingoDisplayOnce && $this->mHasBeenDisplayed ) {
-                       return $doc->createTextNode($this->mTerm);
-               }
-
-               // only create if not yet created
-               if ( $this->mFullDefinition == null || 
$this->mFullDefinition->ownerDocument !== $doc ) {
-
-                       // if there is only one link available, just insert the 
link
-                       if ( count( $this->mDefinitions ) === 1
-                               && !is_string( 
$this->mDefinitions[0][self::ELEMENT_DEFINITION] )
-                               && is_string( 
$this->mDefinitions[0][self::ELEMENT_LINK] ) ) {
-
-                               // create Title object for target page
-                               $target = Title::newFromText( 
$this->mDefinitions[0][self::ELEMENT_LINK] );
-
-                               // create link element
-                               $link = $doc->createElement( 'a', 
$this->mDefinitions[0][self::ELEMENT_TERM] );
-
-                               // set the link target
-                               $link->setAttribute( 'href', 
$target->getLinkUrl() );
-
-                               // figure out the classes for the link
-                               // TODO: should this be more elaborate? See 
Linker::linkAttribs
-                               // Cleanest would probably be to use 
Linker::link and parse it
-                               // back into a DOMElement, but we are in a 
somewhat time-critical
-                               // part here.
-                               $classes = '';
-
-                               if ( !$target->isKnown() ) {
-                                       $classes .= 'new ';
-                               }
-
-                               if ( $target->isExternal() ) {
-                                       $classes .= 'extiw ';
-                               }
-
-                               // set style
-                               $classes .= 
$this->mDefinitions[0][self::ELEMENT_STYLE];
-
-                               if ( $classes !== '' ) {
-                                       $link->setAttribute( 'class', $classes 
);
-                               }
-
-                               // Get a title attribute
-                               if ( $target->getPrefixedText() == '' ) {
-                                       // A link like [[#Foo]].  This used to 
mean an empty title
-                                       // attribute, but that's silly.  Just 
don't output a title.
-                               } elseif ( $target->isKnown() ) {
-                                       $link->setAttribute( 'title', 
$target->getPrefixedText() );
-                               } else {
-                                       $link->setAttribute( 'title', 
wfMessage( 'red-link-title', $target->getPrefixedText() )->text() );
-                               }
-
-                               $this->mFullDefinition = $link;
-
-                       } else { // else insert the complete tooltip
-
-                               // Wrap term and definition in <span> tags
-                               $span = $doc->createElement( 'span' );
-                               $span->setAttribute( 'class', 'mw-lingo-tooltip 
' . $this->mDefinitions[0][self::ELEMENT_STYLE] );
-
-                               // Wrap term in <span> tag, hidden
-                               wfSuppressWarnings();
-                               $spanTerm = $doc->createElement( 'span', 
htmlentities( $this->mTerm, ENT_COMPAT, 'UTF-8' ) );
-
-                               wfRestoreWarnings();
-                               $spanTerm->setAttribute( 'class', 
'mw-lingo-tooltip-abbr' );
-
-                               // Wrap definition in a <span> tag
-                               $spanDefinition = $doc->createElement( 'span' );
-                               $spanDefinition->setAttribute( 'class', 
'mw-lingo-tooltip-tip ' . $this->mDefinitions[ 0 ][ self::ELEMENT_STYLE ] );
-
-                               foreach ( $this->mDefinitions as $definition ) {
-                                       wfSuppressWarnings();
-                                       $element = $doc->createElement( 'span', 
htmlentities( $definition[self::ELEMENT_DEFINITION], ENT_COMPAT, 'UTF-8' ) );
-                                       $element->setAttribute( 'class', 
'mw-lingo-tooltip-definition ' . $this->mDefinitions[ 0 ][ self::ELEMENT_STYLE 
] );
-                                       wfRestoreWarnings();
-                                       if ( $definition[self::ELEMENT_LINK] ) {
-                                               $linkedTitle = 
Title::newFromText( $definition[self::ELEMENT_LINK] );
-                                               if ( $linkedTitle ) {
-                                                       $link = 
$this->getLinkTemplate( $doc );
-                                                       $link->setAttribute( 
'href', $linkedTitle->getFullURL() );
-                                                       $element->appendChild( 
$link );
-                                               }
-                                       }
-                                       $spanDefinition->appendChild( $element 
);
-                               }
-
-                               // insert term and definition
-                               $span->appendChild( $spanTerm );
-                               $span->appendChild( $spanDefinition );
-
-                               $this->mFullDefinition = $span;
-                       }
-
-                       $this->mHasBeenDisplayed = true;
-               }
-
-               wfProfileOut( __METHOD__ );
-
-               return $this->mFullDefinition->cloneNode( true );
-       }
-
-       public function getCurrentKey() {
-               return key( $this->mDefinitions );
-       }
-
-       public function getTerm( $key ) {
-               return $this->mDefinitions[$key][self::ELEMENT_TERM];
-       }
-
-       public function getSource( &$key ) {
-               return $this->mDefinitions[$key][self::ELEMENT_SOURCE];
-       }
-
-       public function getDefinition( &$key ) {
-               return $this->mDefinitions[$key][self::ELEMENT_DEFINITION];
-       }
-
-       public function getLink( &$key ) {
-               return $this->mDefinitions[$key][self::ELEMENT_LINK];
-       }
-
-       public function getStyle( &$key ) {
-               return $this->mDefinitions[$key][self::ELEMENT_STYLE];
-       }
-
-       public function next() {
-               next( $this->mDefinitions );
-       }
-
-       private function getLinkTemplate( DOMDocument &$doc ) {
-               // create template if it does not yet exist
-               if ( !self::$mLinkTemplate || ( 
self::$mLinkTemplate->ownerDocument !== $doc ) ) {
-                       global $wgScriptPath;
-
-                       $linkimage = $doc->createElement( 'img' );
-                       $linkimage->setAttribute( 'src', $wgScriptPath . 
'/extensions/Lingo/skins/linkicon.png' );
-
-                       self::$mLinkTemplate = $doc->createElement( 'a' );
-                       self::$mLinkTemplate->appendChild( $linkimage );
-               }
-
-               return self::$mLinkTemplate->cloneNode( true );
-       }
-
-}
diff --git a/LingoBackend.php b/src/LingoBackend.php
similarity index 100%
rename from LingoBackend.php
rename to src/LingoBackend.php
diff --git a/LingoBasicBackend.php b/src/LingoBasicBackend.php
similarity index 100%
rename from LingoBasicBackend.php
rename to src/LingoBasicBackend.php
diff --git a/src/LingoElement.php b/src/LingoElement.php
new file mode 100644
index 0000000..f45486b
--- /dev/null
+++ b/src/LingoElement.php
@@ -0,0 +1,242 @@
+<?php
+
+/**
+ * File holding the LingoElement class.
+ *
+ * @author Stephan Gambke
+ *
+ * @file
+ * @ingroup Lingo
+ */
+if ( !defined( 'LINGO_VERSION' ) ) {
+       die( 'This file is part of the Lingo extension, it is not a valid entry 
point.' );
+}
+
+/**
+ * This class represents a term-definition pair.
+ * One term may be related to several definitions.
+ *
+ * @ingroup Lingo
+ */
+class LingoElement {
+       const ELEMENT_TERM = 0;
+       const ELEMENT_DEFINITION = 1;
+       const ELEMENT_SOURCE = 2;
+       const ELEMENT_LINK = 3;
+       const ELEMENT_STYLE = 4;
+
+       const ELEMENT_FIELDCOUNT = 5;  // number of fields stored for each 
element; (last field's index) + 1
+
+       private $mFullDefinition = null;
+       private $mDefinitions = array();
+       private $mTerm = null;
+       private $mHasBeenDisplayed = false;
+
+       static private $mLinkTemplate = null;
+
+       public function __construct( &$term, &$definition = null ) {
+
+               $this->mTerm = $term;
+
+               if ( $definition ) {
+                       $this->addDefinition( $definition );
+               }
+       }
+
+       public function addDefinition( &$definition ) {
+               $this->mDefinitions[] = array_pad( $definition, 
self::ELEMENT_FIELDCOUNT, null );
+       }
+
+       public function getFullDefinition( DOMDocument &$doc ) {
+
+               global $wgexLingoDisplayOnce;
+
+               wfProfileIn( __METHOD__ );
+
+               // return textnode if
+               if ( $wgexLingoDisplayOnce && $this->mHasBeenDisplayed ) {
+                       return $doc->createTextNode($this->mTerm);
+               }
+
+               // only create if not yet created
+               if ( $this->mFullDefinition === null || 
$this->mFullDefinition->ownerDocument !== $doc ) {
+
+                       // if there is only one link available, just insert the 
link
+                       if ( count( $this->mDefinitions ) === 1
+                               && !is_string( 
$this->mDefinitions[0][self::ELEMENT_DEFINITION] )
+                               && is_string( 
$this->mDefinitions[0][self::ELEMENT_LINK] ) ) {
+
+                               $this->mFullDefinition = 
$this->getFullDefinitionAsLink( $doc );
+
+                       } else { // else insert the complete tooltip
+
+                               $this->mFullDefinition = 
$this->getFullDefinitionAsTooltip( $doc );
+                       }
+
+                       $this->mHasBeenDisplayed = true;
+               }
+
+               wfProfileOut( __METHOD__ );
+
+               return $this->mFullDefinition->cloneNode( true );
+       }
+
+       public function getCurrentKey() {
+               return key( $this->mDefinitions );
+       }
+
+       public function getTerm( $key ) {
+               return $this->mDefinitions[$key][self::ELEMENT_TERM];
+       }
+
+       public function getSource( &$key ) {
+               return $this->mDefinitions[$key][self::ELEMENT_SOURCE];
+       }
+
+       public function getDefinition( &$key ) {
+               return $this->mDefinitions[$key][self::ELEMENT_DEFINITION];
+       }
+
+       public function getLink( &$key ) {
+               return $this->mDefinitions[$key][self::ELEMENT_LINK];
+       }
+
+       public function getStyle( &$key ) {
+               return $this->mDefinitions[$key][self::ELEMENT_STYLE];
+       }
+
+       public function next() {
+               next( $this->mDefinitions );
+       }
+
+       private function getLinkTemplate( DOMDocument &$doc ) {
+               // create template if it does not yet exist
+               if ( !self::$mLinkTemplate || ( 
self::$mLinkTemplate->ownerDocument !== $doc ) ) {
+                       global $wgScriptPath;
+
+                       $linkimage = $doc->createElement( 'img' );
+                       $linkimage->setAttribute( 'src', $wgScriptPath . 
'/extensions/Lingo/styles/linkicon.png' );
+
+                       self::$mLinkTemplate = $doc->createElement( 'a' );
+                       self::$mLinkTemplate->appendChild( $linkimage );
+               }
+
+               return self::$mLinkTemplate->cloneNode( true );
+       }
+
+       /**
+        * @param DOMDocument $doc
+        *
+        * @return DOMElement
+        * @throws MWException
+        */
+       protected function getFullDefinitionAsLink( DOMDocument &$doc ) {
+
+               // create Title object for target page
+               $target = Title::newFromText( $this->mDefinitions[ 0 ][ 
self::ELEMENT_LINK ] );
+
+               // create link element
+               $link = $doc->createElement( 'a', $this->mDefinitions[ 0 ][ 
self::ELEMENT_TERM ] );
+
+               // set the link target
+               $link->setAttribute( 'href', $target->getLinkUrl() );
+               $link = $this->addClassAttributeToLink( $target, $link );
+               $link = $this->addTitleAttributeToLink( $target, $link );
+
+               return $link;
+       }
+
+       /**
+        * @param DOMDocument $doc
+        *
+        * @return string
+        * @throws MWException
+        */
+       protected function getFullDefinitionAsTooltip( DOMDocument &$doc ) {
+
+               // Wrap term and definition in <span> tags
+               $span = $doc->createElement( 'span' );
+               $span->setAttribute( 'class', 'mw-lingo-tooltip ' . 
$this->mDefinitions[ 0 ][ self::ELEMENT_STYLE ] );
+
+               // Wrap term in <span> tag, hidden
+               wfSuppressWarnings();
+               $spanTerm = $doc->createElement( 'span', htmlentities( 
$this->mTerm, ENT_COMPAT, 'UTF-8' ) );
+
+               wfRestoreWarnings();
+               $spanTerm->setAttribute( 'class', 'mw-lingo-tooltip-abbr' );
+
+               // Wrap definition in a <span> tag
+               $spanDefinition = $doc->createElement( 'span' );
+               $spanDefinition->setAttribute( 'class', 'mw-lingo-tooltip-tip ' 
. $this->mDefinitions[ 0 ][ self::ELEMENT_STYLE ] );
+
+               foreach ( $this->mDefinitions as $definition ) {
+                       wfSuppressWarnings();
+                       $element = $doc->createElement( 'span', htmlentities( 
$definition[ self::ELEMENT_DEFINITION ], ENT_COMPAT, 'UTF-8' ) );
+                       $element->setAttribute( 'class', 
'mw-lingo-tooltip-definition ' . $this->mDefinitions[ 0 ][ self::ELEMENT_STYLE 
] );
+                       wfRestoreWarnings();
+                       if ( $definition[ self::ELEMENT_LINK ] ) {
+                               $linkedTitle = Title::newFromText( $definition[ 
self::ELEMENT_LINK ] );
+                               if ( $linkedTitle ) {
+                                       $link = $this->getLinkTemplate( $doc );
+                                       $link->setAttribute( 'href', 
$linkedTitle->getFullURL() );
+                                       $element->appendChild( $link );
+                               }
+                       }
+                       $spanDefinition->appendChild( $element );
+               }
+
+               // insert term and definition
+               $span->appendChild( $spanTerm );
+               $span->appendChild( $spanDefinition );
+               return $span;
+       }
+
+       /**
+        * @param $target
+        * @param $link
+        */
+       protected function &addTitleAttributeToLink( $target, &$link ) {
+
+               if ( $target->getPrefixedText() === '' ) {
+                       // A link like [[#Foo]].  This used to mean an empty 
title
+                       // attribute, but that's silly.  Just don't output a 
title.
+               } elseif ( $target->isKnown() ) {
+                       $link->setAttribute( 'title', 
$target->getPrefixedText() );
+               } else {
+                       $link->setAttribute( 'title', wfMessage( 
'red-link-title', $target->getPrefixedText() )->text() );
+               }
+
+               return $link;
+       }
+
+       /**
+        * @param $target
+        * @param $link
+        */
+       protected function &addClassAttributeToLink( $target, &$link ) {
+
+               // TODO: should this be more elaborate? See Linker::linkAttribs
+               // Cleanest would probably be to use Linker::link and parse it
+               // back into a DOMElement, but we are in a somewhat 
time-critical
+               // part here.
+               $classes = '';
+
+               if ( !$target->isKnown() ) {
+                       $classes .= 'new ';
+               }
+
+               if ( $target->isExternal() ) {
+                       $classes .= 'extiw ';
+               }
+
+               // set style
+               $classes .= $this->mDefinitions[ 0 ][ self::ELEMENT_STYLE ];
+
+               if ( $classes !== '' ) {
+                       $link->setAttribute( 'class', $classes );
+               }
+
+               return $link;
+       }
+
+}
diff --git a/LingoHooks.php b/src/LingoHooks.php
similarity index 100%
rename from LingoHooks.php
rename to src/LingoHooks.php
diff --git a/LingoMessageLog.php b/src/LingoMessageLog.php
similarity index 100%
rename from LingoMessageLog.php
rename to src/LingoMessageLog.php
diff --git a/LingoParser.php b/src/LingoParser.php
similarity index 97%
rename from LingoParser.php
rename to src/LingoParser.php
index 82a7cde..e9f9c45 100644
--- a/LingoParser.php
+++ b/src/LingoParser.php
@@ -326,9 +326,9 @@
                                $wgOut->addModuleStyles( 'ext.Lingo.Styles' );
                        }
                } else {
-                       $parserOutput->addHeadItem( "<link rel='stylesheet' 
href='$wgScriptPath/extensions/Lingo/skins/Lingo.css' />\n", 'ext.Lingo.Styles' 
);
+                       $parserOutput->addHeadItem( "<link rel='stylesheet' 
href='$wgScriptPath/extensions/Lingo/styles/Lingo.css' />\n", 
'ext.Lingo.Styles' );
                        if ( !$wgOut->isArticle() ) {
-                               $wgOut->addHeadItem( 'ext.Lingo.Styles', "<link 
rel='stylesheet' href='$wgScriptPath/extensions/Lingo/skins/Lingo.css' />\n" );
+                               $wgOut->addHeadItem( 'ext.Lingo.Styles', "<link 
rel='stylesheet' href='$wgScriptPath/extensions/Lingo/styles/Lingo.css' />\n" );
                        }
                }
        }
diff --git a/LingoTree.php b/src/LingoTree.php
similarity index 100%
rename from LingoTree.php
rename to src/LingoTree.php
diff --git a/skins/Lingo.css b/styles/Lingo.css
similarity index 100%
rename from skins/Lingo.css
rename to styles/Lingo.css
diff --git a/skins/jquery.qtip.css b/styles/jquery.qtip.css
similarity index 100%
rename from skins/jquery.qtip.css
rename to styles/jquery.qtip.css
diff --git a/skins/linkicon.png b/styles/linkicon.png
similarity index 100%
rename from skins/linkicon.png
rename to styles/linkicon.png
Binary files differ

-- 
To view, visit https://gerrit.wikimedia.org/r/176642
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I16cb0b2b8613b2333778633afca94c64cd8d4cfe
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Lingo
Gerrit-Branch: master
Gerrit-Owner: Foxtrott <[email protected]>
Gerrit-Reviewer: Foxtrott <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to