Module:WeeklyEvent: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
(use prev instead of this for latest (want "This" week's link as "Next" meeting link))
(update for "next" to properly reflect "cur"rent week)
Tag: Reverted
Line 5: Line 5:
end
end


local function exists(t)
function p.links(frame)
   local title = mw.title.new(t)
   local args    = frame:getParent().args
   return title and title.exists
  local prefix  = args.prefix  or 'Meeting Notes'
end
   local joiner  = args.joiner  or ' '
  local weekday = args.weekday or 'Tuesday'


function p.links(frame)
  -- show segment iff arg PROVIDED (nil => omit); blank string allowed
  local args = frame:getParent().args
   local t_prev   = args.text_prev   -- label for last occurrence
   local prefix   = args.prefix   or 'Meeting Notes'
   local t_cur    = args.text_this   -- label for upcoming occurrence (semantic "this" == next weekday)
   local joiner  = args.joiner   or ' '
   local t_next  = args.text_next   -- label for occurrence after upcoming
  local weekday  = args.weekday or 'Tuesday'
  local t_this  = args.text_this or 'This week'
  local t_prev  = args.text_prev or 'Last week'
   local t_next  = args.text_next or 'Next week'
   local preload  = args.preload
   local preload  = args.preload
  local t_create = args.create_text -- label for create link; requires preload too


   local thisdate = d('Y m d', 'this ' .. weekday)
   -- Semantics:
  -- prev = last weekday
  -- cur  = next weekday (the one you're about to write)
  -- next = weekday after cur
   local prevdate = d('Y m d', 'last ' .. weekday)
   local prevdate = d('Y m d', 'last ' .. weekday)
   local nextdate = d('Y m d', 'next ' .. weekday)
  local curdate  = d('Y m d', 'next ' .. weekday)
   local nextdate = d('Y m d', 'next ' .. weekday .. ' + 7 days')


  local thisTitle = table.concat({prefix, thisdate}, joiner)
   local prevTitle = table.concat({prefix, prevdate}, joiner)
   local prevTitle = table.concat({prefix, prevdate}, joiner)
  local curTitle  = table.concat({prefix, curdate}, joiner)
   local nextTitle = table.concat({prefix, nextdate}, joiner)
   local nextTitle = table.concat({prefix, nextdate}, joiner)


   local latestTitle, latestText
   local parts = {}
   --if exists(thisTitle) then
   local function add_link(title, label)
  --  latestTitle, latestText = thisTitle, t_this
     table.insert(parts, string.format('[[%s|%s]]', title, label or ''))
  -- elseif
  if exists(prevTitle) then
     latestTitle, latestText = prevTitle, t_prev
  end
 
  -- build inline wikitext
  local out = ''
 
  if latestTitle then
    out = out .. string.format('[[%s|%s]]', latestTitle, latestText)
  else
    out = out .. "''no recent page''"
   end
   end


   out = out .. ' · ' ..
   if t_prev ~= nil then add_link(prevTitle, t_prev) end
        string.format('[[%s|%s]]', nextTitle, t_next)
  if t_cur  ~= nil then add_link(curTitle, t_cur)  end
  if t_next ~= nil then add_link(nextTitle, t_next) end


   if preload then
  -- Create link targets the upcoming occurrence (curTitle), not the later one.
     local url = mw.uri.canonicalUrl(nextTitle, { action='edit', preload=preload })
   if preload and preload ~= '' and t_create ~= nil then
     out = out .. ' · ' ..
     local url = mw.uri.canonicalUrl(curTitle, { action='edit', preload=preload })
          string.format('[%s create next]', tostring(url))
     table.insert(parts, string.format('[%s %s]', tostring(url), t_create))
   end
   end


   --[[
   local out = mw.text.trim(table.concat(parts, ' · '))
  return frame:preprocess(out)
  ]]
  -- no leading/trailing whitespace
 
  out = mw.text.trim(out)


  -- force inline rendering; content is parsed as wikitext inside a <span>
   return frame:extensionTag{
   return frame:extensionTag{
     name = 'span',
     name = 'span',
     content = out,
     content = out,
     args = { class = 'weekly-event-inline' } -- optional
     args = { class = 'weekly-event-inline' }
   }
   }
end
end


return p
return p

Revision as of 18:29, 23 February 2026

local p = {}

local function d(fmt, rel)
  return mw.getContentLanguage():formatDate(fmt, rel)
end

function p.links(frame)
  local args    = frame:getParent().args
  local prefix  = args.prefix  or 'Meeting Notes'
  local joiner  = args.joiner  or ' '
  local weekday = args.weekday or 'Tuesday'

  -- show segment iff arg PROVIDED (nil => omit); blank string allowed
  local t_prev   = args.text_prev   -- label for last occurrence
  local t_cur    = args.text_this   -- label for upcoming occurrence (semantic "this" == next weekday)
  local t_next   = args.text_next   -- label for occurrence after upcoming
  local preload  = args.preload
  local t_create = args.create_text -- label for create link; requires preload too

  -- Semantics:
  -- prev = last weekday
  -- cur  = next weekday (the one you're about to write)
  -- next = weekday after cur
  local prevdate = d('Y m d', 'last ' .. weekday)
  local curdate  = d('Y m d', 'next ' .. weekday)
  local nextdate = d('Y m d', 'next ' .. weekday .. ' + 7 days')

  local prevTitle = table.concat({prefix, prevdate}, joiner)
  local curTitle  = table.concat({prefix, curdate}, joiner)
  local nextTitle = table.concat({prefix, nextdate}, joiner)

  local parts = {}
  local function add_link(title, label)
    table.insert(parts, string.format('[[%s|%s]]', title, label or ''))
  end

  if t_prev ~= nil then add_link(prevTitle, t_prev) end
  if t_cur  ~= nil then add_link(curTitle,  t_cur)  end
  if t_next ~= nil then add_link(nextTitle, t_next) end

  -- Create link targets the upcoming occurrence (curTitle), not the later one.
  if preload and preload ~= '' and t_create ~= nil then
    local url = mw.uri.canonicalUrl(curTitle, { action='edit', preload=preload })
    table.insert(parts, string.format('[%s %s]', tostring(url), t_create))
  end

  local out = mw.text.trim(table.concat(parts, ' · '))

  return frame:extensionTag{
    name = 'span',
    content = out,
    args = { class = 'weekly-event-inline' }
  }
end

return p