jenkins-bot has submitted this change and it was merged.

Change subject: Implement the Lua library for the default display
......................................................................


Implement the Lua library for the default display

Add lua library that displays an entity

Bug: T113936
Change-Id: I686fe0717de8d0600958af42da526807da3c3944
---
M ArticlePlaceholder.php
A includes/Hooks.php
A includes/Lua/EntityRenderer.lua
R includes/Template/fancy-lua.xml
4 files changed, 214 insertions(+), 37 deletions(-)

Approvals:
  Hoo man: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/ArticlePlaceholder.php b/ArticlePlaceholder.php
index dbacc93..193af9b 100644
--- a/ArticlePlaceholder.php
+++ b/ArticlePlaceholder.php
@@ -27,7 +27,9 @@
 $dir = dirname( __FILE__ );
 $dirbasename = basename( $dir );
 
-$wgAutoloadClasses[ 'ArticlePlaceholder\Specials\SpecialFancyUnicorn' ] = $dir 
. '/Specials/SpecialFancyUnicorn.php';
+$wgAutoloadClasses['ArticlePlaceholder\Specials\SpecialFancyUnicorn'] = $dir . 
'/Specials/SpecialFancyUnicorn.php';
+$wgAutoloadClasses['ArticlePlaceholder\Hooks'] = __DIR__ . 
'/includes/Hooks.php';
+$wgHooks['ScribuntoExternalLibraryPaths'][] = 
'\ArticlePlaceholder\Hooks::registerScribuntoExternalLibraryPaths';
 
 $wgMessagesDirs[ 'ArticlePlaceholder' ] = __DIR__ . '/i18n';
 
diff --git a/includes/Hooks.php b/includes/Hooks.php
new file mode 100644
index 0000000..b24726a
--- /dev/null
+++ b/includes/Hooks.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace ArticlePlaceholder;
+
+/**
+ * File defining the hook handlers for the ArticlePlaceholder extension.
+ *
+ * @license GNU GPL v2+
+ *
+ * @author Lucie-Aimée Kaffee
+ */
+class Hooks {
+       /**
+        * External Lua library paths for Scribunto
+        *
+        * @param string $engine
+        * @param array $extraLibraryPaths
+        * @return bool
+        */
+       public static function registerScribuntoExternalLibraryPaths( $engine, 
array &$extraLibraryPaths ) {
+               if ( $engine !== 'lua' ) {
+                       return true;
+               }
+
+               // Path containing pure Lua libraries that don't need to 
interact with PHP
+               $extraLibraryPaths[] = __DIR__ . '/Lua';
+
+               return true;
+       }
+
+}
diff --git a/includes/Lua/EntityRenderer.lua b/includes/Lua/EntityRenderer.lua
new file mode 100644
index 0000000..17623ee
--- /dev/null
+++ b/includes/Lua/EntityRenderer.lua
@@ -0,0 +1,173 @@
+local entityrenderer = {}
+
+entityrenderer.imageProperty = 'P6'
+entityrenderer.identifierProperties = {}
+
+-- render an entity
+entityrenderer.render = function(frame)
+  local entityID = mw.text.trim( frame.args[1] or "" )
+  local entity = mw.wikibase.getEntityObject( entityID )
+  local result = ""
+
+  local description = entityrenderer.descriptionRenderer( entityID )
+  local image = entityrenderer.topImageRenderer( entity, 
entityrenderer.imageProperty, "right" )
+  local entityResult = entityrenderer.statementListRenderer( entity )
+
+  result = result .. "Description: " ..  description .. " "
+  result = result .. image .. "<br/>"
+  result = result .. "<h1>Entity</h1>" .. "<br/>" .. entityResult
+
+  return result
+end
+
+-- Get the datavalue for a given property.
+local getDatavalue = function( propertyId )
+  local property = mw.wikibase.getEntity( propertyId )
+  return property['datatype']
+end
+
+----------------------------------- Implementation of Renderers 
-----------------------------------
+
+-- Render a list of statements.
+entityrenderer.statementListRenderer = function ( entity )
+  local result = ""
+  local properties = entityrenderer.statementSorter( entity )
+  if properties ~= nil then
+    for _, propertyId in pairs( properties ) do
+      if propertyId ~= entityrenderer.imageProperty then
+        result = result .. "<h2><b>" .. entityrenderer.labelRenderer( 
propertyId ) .. "</b> </h2>" .. "<br/>"
+        result = result .. entityrenderer.renderBestStatements( entity, 
propertyId )
+      end
+    end
+  end
+  return result
+end
+
+-- Returns a table of statements sorted by *something*
+entityrenderer.statementSorter = function( entity )
+  -- sort by *something*
+  -- limit number of statements
+  return entity:getProperties()
+end
+
+-- Renders the best statements.
+entityrenderer.renderBestStatements = function( entity, propertyId )
+  local statement = ""
+  local bestStatements = entity:getBestStatements( propertyId )
+  for _, stat in pairs( bestStatements ) do
+    if getDatavalue( propertyId ) == "commonsMedia" then
+      statement = statement .. entityrenderer.imageRenderer( stat, "center" )
+    else
+      statement = statement .. entityrenderer.statementRenderer(stat)
+    end
+  end
+  return statement
+end
+
+-- Renders a statement.
+entityrenderer.statementRenderer = function( statement )
+  local result = ""
+  local reference = ""
+  local qualifier = ""
+  local mainsnak = ""
+  if statement ~= nil then
+    for key, value in pairs( statement ) do
+      if key == "mainsnak" then mainsnak = "<h3>" .. mw.wikibase.renderSnak( 
value ) .. "</h3>"
+      elseif key == "references" then reference = "<h4>Reference</h4>" .. 
"<br/>" .. entityrenderer.referenceRenderer( value )
+      elseif key == "qualifiers" then qualifier = "<h4>Qualifier</h4>" .. 
"<br/>" .. entityrenderer.qualifierRenderer( value )
+      end
+    end
+  end
+  result = result .. mainsnak .. reference .. qualifier
+  return result
+end
+
+-- Render the image.
+-- @param String propertyId
+-- @return String renderedImage
+entityrenderer.imageRenderer = function( statement, orientationImage )
+  local result = ""
+  local reference = ""
+  local qualifier = ""
+  local image = ""
+  if statement ~= nil then
+    for key, value in pairs( statement ) do
+      if key == "mainsnak" then image = mw.wikibase.renderSnak( value )
+    elseif key == "references" then reference = "<b>Reference</b>"  .. "<br/>" 
.. entityrenderer.referenceRenderer( value )
+  elseif key == "qualifiers" then qualifier = "<b>Qualifier</b>" .. "<br/>" .. 
entityrenderer.qualifierRenderer( value )
+      end
+    end
+  end
+  result = "[[File:" .. image .. "|thumb|" .. orientationImage .. "]] <br/>"
+  result = result .. qualifier .. "<br/>" ..  reference
+  return result
+end
+
+-- Render the image.
+-- @param String propertyId
+-- @return String renderedImage
+entityrenderer.topImageRenderer = function( entity, propertyId, 
orientationImage )
+  imageName = entity:formatPropertyValues( propertyId ).value
+  renderedImage = "[[File:" .. imageName .. "|thumb|" .. orientationImage .. 
"]]"
+  return renderedImage
+end
+
+
+-- Render the description.
+-- @param String entityId
+-- @return String description
+entityrenderer.descriptionRenderer = function( entityId )
+  return mw.wikibase.description( entityId )
+end
+
+-- Render a label to the language of the local Wiki.
+-- @param String id
+-- @return String label
+entityrenderer.labelRenderer = function( entityId )
+  return mw.wikibase.label( entityId )
+end
+
+-- Render a reference.
+entityrenderer.referenceRenderer = function( referenceSnak )
+  local result = ""
+  if referenceSnak ~= nil then
+    local i = 1
+    while referenceSnak[i] do
+      for k, v in pairs( referenceSnak[i]['snaks'] ) do
+        result = result .. "<b>" ..  entityrenderer.labelRenderer( k ) .. 
"</b>: "
+        result = result .. entityrenderer.snakRenderer( v ) .. "<br/>"
+      end
+      i = i + 1
+    end
+  end
+  return result
+end
+
+-- Render a qualifier.
+entityrenderer.qualifierRenderer = function( qualifierSnak )
+  local result = ""
+  if qualifierSnak ~= nil then
+    for key, value in pairs(qualifierSnak) do
+      result = result .. "<b>" ..  entityrenderer.labelRenderer( key ) .. 
"</b>: "
+      result = result .. entityrenderer.snakRenderer( value ) .. "<br/>"
+    end
+  end
+  return result
+end
+
+-- Render a Snak.
+entityrenderer.snakRenderer = function( snak )
+  local result = ""
+  if snak ~= nil and type(snak) == "table" then
+    for key, value in pairs( snak ) do
+      result = result .. mw.wikibase.renderSnak( value ) .. "<br/>"
+    end
+  end
+  return result
+end
+
+
+
+----------------------------------------------------------------------
+
+return entityrenderer
diff --git a/Lua/fancy-lua.xml b/includes/Template/fancy-lua.xml
similarity index 69%
rename from Lua/fancy-lua.xml
rename to includes/Template/fancy-lua.xml
index d8441c5..c5d3971 100644
--- a/Lua/fancy-lua.xml
+++ b/includes/Template/fancy-lua.xml
@@ -56,53 +56,24 @@
     <ns>828</ns>
     <id>18</id>
     <revision>
-      <id>244</id>
-      <parentid>243</parentid>
-      <timestamp>2015-08-21T13:26:51Z</timestamp>
+      <id>272</id>
+      <parentid>271</parentid>
+      <timestamp>2015-09-17T16:18:39Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
       </contributor>
       <model>Scribunto</model>
       <format>text/plain</format>
-      <text xml:space="preserve" bytes="1141">local p = {}
+      <text xml:space="preserve" bytes="178">local p = {}
 
 -- get the label of the local entity
 p.showData = function(frame)
-  local entityID = mw.text.trim( frame.args[1] or &quot;&quot; )
-  --if mw.wikibase.sitelink( entityID ) ~= &quot;&quot; then
-  --  return mw.wikibase.sitelink( entityID )
-  --end
-  local entity = mw.wikibase.getEntityObject( entityID )
-  --return entity:getLabel() .. &quot; \n &quot; .. mw.wikibase.description( 
entityID )
-  content = mw.wikibase.description( entityID )
-  title = entity:getLabel()
-  return content .. ' ' .. tostring( getFancyBox( getPropValuePairs( entity ), 
title ):getHtml() )
-end
-
-function getPropValuePairs( entity )
-  table = {}
-  for key,value in pairs( entity:getProperties() ) do
-    for k, v in pairs( entity:formatPropertyValues( value ) ) do
-      table[mw.wikibase.label(value)] = v
-    end
-  end
-  return table
-end
-
-function getFancyBox(table, title)
-       local capiunto = require 'capiunto'
-       fancybox = capiunto.create( {
-               title = tostring(title) ,
-               topStyle = 'background:#cfc;'
-       } )
-  --fancybox = tostring(fancybox:getHtml())
-  for key,value in pairs(table) do fancybox:addRow(key,value) end
-  --:addRow(&quot;lucie&quot;, &quot;testing&quot;)
-  return fancybox
+ entityRenderer = require( 'EntityRenderer' )
+ return entityRenderer.render( frame )
 end
 
 return p</text>
-      <sha1>7wycjtn9b556v9pf4bssl1dumtbqr52</sha1>
+      <sha1>raik6wqlcskycfu1y3hntowu9vyuu90</sha1>
     </revision>
   </page>
 </mediawiki>

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I686fe0717de8d0600958af42da526807da3c3944
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/ArticlePlaceholder
Gerrit-Branch: master
Gerrit-Owner: Lucie Kaffee <[email protected]>
Gerrit-Reviewer: Bene <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Jackmcbarn <[email protected]>
Gerrit-Reviewer: Lucie Kaffee <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to