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 "" )
- --if mw.wikibase.sitelink( entityID ) ~= "" then
- -- return mw.wikibase.sitelink( entityID )
- --end
- local entity = mw.wikibase.getEntityObject( entityID )
- --return entity:getLabel() .. " \n " .. 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("lucie", "testing")
- 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