Module:SetDateRange: Difference between revisions
From The Seven Sages of Rome
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
local p = {}; | local p = {}; | ||
local function | local function isStringSet(s) | ||
return s ~= nil and s ~= '' | return s ~= nil and s ~= '' | ||
end | |||
local function tableLength(T) | |||
local count = 0 | |||
for _ in pairs(T) do count = count + 1 end | |||
return count | |||
end | |||
local function splitString (inputstr, sep) | |||
if sep == nil then | |||
sep = "%s" | |||
end | |||
local t={} | |||
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do | |||
table.insert(t, str) | |||
end | |||
return t | |||
end | |||
local function formatDate(d) | |||
local dateParts = splitString(d, "-") | |||
local datePartsNumber = tablelength(dateParts) | |||
if datePartsNumber == 1 then | |||
return d | |||
elseif datePartsNumber == 2 then | |||
local time = os.time{year=1970, month=1, day=1} | |||
return os.date("%B %Y", time) | |||
elseif datePartsNumber == 3 then | |||
local time = os.time{year=1970, month=1, day=1} | |||
return os.date("%d %B %Y", time) | |||
end | |||
local convertedTimestamp = os.time({year = runyear, month = runmonth, day = runday, hour = runhour, min = runminute, sec = runseconds}) | |||
return convertedTimestamp | |||
end | end | ||
Line 20: | Line 55: | ||
local sort_date_property = args.sort_date_property | local sort_date_property = args.sort_date_property | ||
if | if isStringSet(start_date) and isStringSet(end_date) then | ||
date_range = start_date .. "-" .. end_date | date_range = start_date .. "-" .. end_date | ||
elseif | elseif isStringSet(start_date) then | ||
date_range = start_date | date_range = start_date | ||
elseif | elseif isStringSet(end_date) then | ||
date_range = end_date | date_range = end_date | ||
end | end |
Revision as of 12:52, 17 June 2024
Module Documentation: SetDateRange
This module is used in Semantic MediaWiki to determine and set appropriate date properties for sorting and display. It takes various date inputs, prioritizes them based on availability, and sets corresponding Semantic MediaWiki properties.
Usage
To invoke this module, use the following syntax within a template:
{{#invoke:SetDateRange|set
| fixed_date={{{Has Date Of Text Composition|}}}
| start_date={{{Has Start Date Of Composition|}}}
| end_date={{{Has End Date Of Composition|}}}
| islamic_date={{{Has Islamic Date Of Text Composition|}}}
| hebrew_date={{{Has Hebrew Date Of Text Composition|}}}
| date_range_property=Has Date Range Of Text Composition
| sort_date_property=Has Sort Date Of Text Composition}}
Parameters
- fixed_date: A fixed date value (YYYY-MM-DD format, converted to YYYY/MM/DD for consistency)
- start_date: The beginning date of a range
- end_date: The ending date of a range
- islamic_date: Optional Islamic calendar date
- hebrew_date: Optional Hebrew calendar date
- date_range_property: The Semantic MediaWiki property where the displayed date range will be stored
- sort_date_property: The Semantic MediaWiki property where the sorting date will be stored
Behavior
- If a fixed_date is provided, it is used for both display and sorting.
- If start_date and end_date are both provided, a date range is created with start_date as the sorting date.
- If only start_date is available, it is used for both display and sorting.
- If only end_date is available, it is used for both display and sorting.
- If islamic_date or hebrew_date are provided, they are added to the display output along with tooltips explaining their meaning.
- The generated output includes Bootstrap 4 tooltips for AH (Anno Hegirae, Islamic calendar) and AM (Anno Mundi, Hebrew calendar).
Example Output
If a manuscript has a start date of 1500-01-01, an end date of 1500-12-31, an Islamic date of 905, and a Hebrew date of 5260, the rendered output might look like:
1500/01/01 - 1500/12/31 (<span data-toggle="tooltip" title="Anno Hegirae (Islamic calendar)">905<sup>AH</sup></span>) (<span data-toggle="tooltip" title="Anno Mundi (Hebrew calendar)">5260<sup>AM</sup></span>)
Notes
- Bootstrap 4 tooltips require initialization via JavaScript:
$(document).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
});
This module enhances the display and semantic organization of historical dates, including cross-calendar representation, for improved research and usability.
local p = {};
local function isStringSet(s)
return s ~= nil and s ~= ''
end
local function tableLength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local function splitString (inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
local function formatDate(d)
local dateParts = splitString(d, "-")
local datePartsNumber = tablelength(dateParts)
if datePartsNumber == 1 then
return d
elseif datePartsNumber == 2 then
local time = os.time{year=1970, month=1, day=1}
return os.date("%B %Y", time)
elseif datePartsNumber == 3 then
local time = os.time{year=1970, month=1, day=1}
return os.date("%d %B %Y", time)
end
local convertedTimestamp = os.time({year = runyear, month = runmonth, day = runday, hour = runhour, min = runminute, sec = runseconds})
return convertedTimestamp
end
p.set = function( f )
if not mw.smw then
return "mw.smw module not found"
end
local args = f.args
local start_date = args.start_date
local end_date = args.end_date
local date_range = ""
local date_range_property = args.date_range_property
local sort_date_property = args.sort_date_property
if isStringSet(start_date) and isStringSet(end_date) then
date_range = start_date .. "-" .. end_date
elseif isStringSet(start_date) then
date_range = start_date
elseif isStringSet(end_date) then
date_range = end_date
end
local property = {}
property[date_range_property] = date_range
property[sort_date_property] = start_date
local result = mw.smw.set( property )
if result == false then
print("Error: Couldn't set date range")
end
return date_range
end
p.test = function( f )
return "test"
end
return p