Module:Solab: Difference between revisions

From solab
Jump to navigation Jump to search
No edit summary
 
(No difference)

Latest revision as of 11:40, 28 October 2023

Documentation for this module may be created at Module:Solab/doc

 local subString, lenString = mw.ustring.sub, mw.ustring.len
 local p = {}
 local util = require "Module:Utility"
 local split = util.split
 local comp = util.comp

 local subString, lenString = mw.ustring.sub, mw.ustring.len
 function p.Company(frame)
    local fields ={'Name',
                   'Cat',
                   'Product',
                   'products',
                   'Technology',
                   'Homepage',
                   'streetAddress',
                   'has_location_city','city',
                   'has_location_country', 'country',
                   'has_coordinates',
                   'Photo',
                   'logo',
                   'source',
                   'ticker'}
    r= ''
    r = r..'\n{|class="wikitable sortable"\n!Name!!Value\n'

    for key, nam in pairs(fields) do 
     local val = frame.args[nam]
     if val == nil and nam == 'Name' then
        r = r..'|-\n|'..nam..'|| [[Name::'.. mw.title.getCurrentTitle().text ..']]\n'
     elseif val ~= nil and (nam == 'Product' or nam == 'Technology' or nam == 'products')  then
       val = split(val, ',') 
       val_list = ''
       for y,x in ipairs(val) do
              val_list  = val_list .. '[['..nam..'::'..x..']],'
       end
       r = r..'|-\n|[['..nam..']]||'..val_list..'\n' 
     elseif val ~= nil and (nam == 'Photo' or nam == 'logo') then
       r = r..'|-\n|'..nam..'||[[File:'..val..'| 150px ]]\n'
       r = r..'|-\n|'..nam..'||[[Logo::'..val..']]\n'

     elseif val == nil and  nam == 'Cat' then
        r = r..'|-\n|'..nam..'|| [[Cat::Solar]]\n' 
     elseif val ~= nil and (nam == 'has_location_city' or nam == 'city') then
         --r = r..'|-\n|[[Property:'..nam..']]||[['..nam..'::'..val..']]\n'
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
          hsc = 'has_location_country'
          hasc =  'has_coordinates'
          format = 'format=plainlist'
          link  = 'link=none'
          co    = '?Country'
          coord = '?Coordinates'
          local hscv = frame:preprocess("{{#show: "..val.."|"..co.."| "..link.."| "..format.."|mainlabel=-}}")
          local hsco = frame:preprocess("{{#show: "..val.."|"..coord.."| "..link.."| "..format.."}}")

          if frame.args['has_location_country'] == nil then
             -- r = r..'|-\n|[[Property:'..hsc..']]||[['..hsc..'::'..hscv..']]\n' 
                r = r..'|-\n|[[Property:'..hsc..']]||[['..hsc..'::'..hscv..']]\n' 

          end
          if frame.args['has_coordinates'] == nil then
              r = r..'|-\n|[[Property:'..hasc..']]||[['..hasc..'::'..hsco..']]\n'
          end
    elseif val ~= nil and nam == 'has_location_country' then
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
    elseif val ~= nil and nam == 'has_coordinates' then
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'


     elseif val ~= nil then

     r = r..'|-\n|'..nam..'||[['..nam..'::'..val..']]\n'
    end 
     end
    r=r..'|}\n'

    local man=frame:preprocess("{{#ask: [[HasManufacturer::{{PAGENAME}}]] |?Category }}")

    r = r .. man ..'\n'
    return r
end

function p.Event(frame)
    local t={}   
    local fields ={'Title',
                   'Cat',
                   'Start_date',
                   'End_date',
                   'Homepage',
                   'has_location_city',
                   'has_location_country',
                   'has_coordinates',
                   'Photo'
                   }

    r = ''
    r = r..'\n{|class="wikitable sortable"\n!Name!!Value\n'
 
    for key, nam in pairs(fields)  do 
     local val  = frame.args[nam]
     if val == nil and  nam == 'Name' then
        r = r..'|-\n|'..nam..'|| [[Name::'.. mw.title.getCurrentTitle().text ..']]\n'
     elseif val ~= nil and (nam == 'Product' or nam == 'Technology')  then
      val  =  split( val, ',' ) 
      val_list = ''
      for y,x in ipairs(val)  do
       val_list  = val_list .. '[['..nam..'::'..x..']],'
       end
        r = r..'|-\n|[['..nam..']]||'..val_list..'\n' 
     elseif val ~= nil and  nam == 'Photo' then
        r = r..'|-\n|'..nam..'|Poster||[[File:'..val..'| 150px ]]\n'
     elseif val == nil and  nam == 'Cat' then
        r = r..'|-\n|'..nam..'|| [[Cat::Solar]]\n' 

     elseif val ~= nil and nam == 'has_location_city' then
         r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
          hsc = 'Has location country'
          hasc =  'Has coordinates'
          format = 'format=list'
          link  = 'link=none'
          co    = '?Country'
          coord = '?Coordinates'

          local hscv=frame:preprocess("{{#show: "..val.."|"..co.."|"..link.."|"..format.."}}")
          local hsco=frame:preprocess("{{#show: "..val.."|"..coord.."|"..link.."|"..format.."}}")
           if frame.args['has_location_country'] == nil then
             r = r..'|-\n|[[Property:'..hsc..'|Country]]||[['..hsc..'::'..hscv..']]\n' 
           end
           if frame.args['has_coordinates'] == nil then
              r = r..'|-\n|[[Property:'..hasc..'|GEO]]||[['..hasc..'::'..hsco..']]\n' 
           end

     elseif val ~= nil and nam == 'has_location_country' then
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
     
    elseif val ~= nil and nam == 'has_coordinates' then
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'

     elseif val ~= nil then
     r = r..'|-\n|'..nam..'||[['..nam..'::'..val..']]\n'
    end 
     end
    r=r..'|}\n'
    return r
end

function p.Panel(frame)
    local t={}   
    local fields =
{'Name', 
                  'Material', 
                  'Product',
                  'Homepage',
                  'Producer',
                  'Photo',
'Pmax',
'Vmpp',
'Impp',
'Voc',
'Isc',
'Max. over current rating',
'Power tolerance',
'Max. system voltage',
'Solar panel efficiency',
'Weight',
'Maximum_Reverse_Current',
 'COP',
 'Eta',
 'ticker' }

    r = ''
    r = r..'\n{|class="wikitable sortable"\n!name!!value\n'

    for key, nam in pairs(fields)  do 
     local val  = frame.args[nam]
     if val ~= nil and nam == 'Product' then
      val  =  split( val, ',' ) 
      val_list = ''
      for y,x in ipairs(val)  do
       val_list  = val_list .. '[['..nam..'::'..x..']],'
       end
        r = r..'|-\n|[['..nam..']]||'..val_list..'\n'
     elseif val ~= nil and nam == 'Photo' then
        r = r..'|-\n|'..nam..'||[[File:'..val..'| 150px ]]\n' 
        r = r..'|-\n|'.. 'Electrical data' ..'||[['..'STC' ..']]\n' 
     elseif val ~= nil and  nam == 'Producer' then
        r = r..'|-\n|'..nam..'||[[hasManufacturer::'..val..']]\n' 
     elseif val ~= nil then
     r = r..'|-\n|'..nam..'|| [['..nam..'::'..val..']]\n'
     else
     r = r..'|-\n|[['..nam..']]|| [['..nam..'::'..'??'..']]\n'
    end 
     end
    r=r..'|}\n'
    return r
end


function p.Plant(frame)
local fields ={'Name',
                   'Cat',
                   'Product',
                   'Power',
                   'Energy',
                   'products',
                   'Technology',
                   'Homepage',
                   'has_location_city','city',
                   'has_location_country', 'country',
                   'has_coordinates',
                   'Photo',
                   'Owner',
                   'Developer',
                   'logo',
                   'ticker'}

    r= ''
    r = r..'\n{|class="wikitable sortable"\n!Name!!Value\n'

    for key, nam in pairs(fields) do 
     local val = frame.args[nam]
     if val == nil and nam == 'Name' then
        r = r..'|-\n|'..nam..'|| [[Name::'.. mw.title.getCurrentTitle().text ..']]\n'
     elseif val ~= nil and (nam == 'Product' or nam == 'Technology' or nam == 'products')  then
       val = split(val, ',') 
       val_list = ''
       for y,x in ipairs(val) do
              val_list  = val_list .. '[['..nam..'::'..x..']],'
       end
       r = r..'|-\n|[['..nam..']]||'..val_list..'\n' 
     elseif val ~= nil and  (nam == 'Photo'  or nam == 'logo')  then
       r = r..'|-\n|'..nam..'||[[File:'..val..'| 150px ]]\n'
     elseif val == nil and  nam == 'Cat' then
        r = r..'|-\n|'..nam..'|| [[Cat::Solar]]\n' 
     elseif val ~= nil and (nam == 'has_location_city' or nam == 'city') then
         --r = r..'|-\n|[[Property:'..nam..']]||[['..nam..'::'..val..']]\n'
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
          hsc = 'Has location country'
          hasc =  'Has coordinates'
          format = 'format=list'
          link  = 'link=none'
          co    = '?Country'
          coord = '?Coordinates'
          local hscv=frame:preprocess("{{#show: "..val.."|"..co.."|"..link.."|"..format.."}}")
          local hsco=frame:preprocess("{{#show: "..val.."|"..coord.."|"..link.."|"..format.."}}")
          if frame.args['has_location_country'] == nil then
             r = r..'|-\n|[[Property:'..hsc..']]||[['..hsc..'::'..hscv..']]\n' 
          end
          if frame.args['has_coordinates'] == nil then
              r = r..'|-\n|[[Property:'..hasc..']]||[['..hasc..'::'..hsco..']]\n'
          end
    elseif val ~= nil and nam == 'has_location_country' then
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
    elseif val ~= nil and nam == 'has_coordinates' then
          r = r..'|-\n|[[Property:'..nam..'|'..nam..']]||[['..nam..'::'..val..']]\n'
   

     elseif val ~= nil then

     r = r..'|-\n|'..nam..'||[['..nam..'::'..val..']]\n'
    end 
     end
    r=r..'|}\n'
    return r
end



function p.In(frame)
    local t={}
    for n,v in frame:argumentPairs() do table.insert (t,{n,v}) end
    table.sort (t,comp)
    tot = 0
    r = '{|class="wikitable sortable"\n!name!!value\n'
    for i,nv in ipairs(t) do 
    r = r..'|-\n|'..nv[1]..'||[['..nv[1]..'::'..nv[2]..']]\n' 
    end
    r=r..'|}\n'
    return r
end

function p.Out(frame)
    local t={}
    for n,v in frame:argumentPairs() do table.insert (t,{n,v}) end
    table.sort (t,comp)
    tot = 0
    r = '{|class="wikitable sortable"\n!name!!value\n'
    for i,nv in ipairs(t) do 
    r = r..'|-\n|'..nv[1]..'||'..nv[2]..'\n' 
    tot = tot + nv[2]
    end
    r = r..'|-\n|'..'Tot'..'||'..tot..'\n'
    r=r..'|}\n'
    return r
end
return p