Changes

Jump to navigation Jump to search
m
1 revision imported
Line 21: Line 21:  
adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow
 
adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow
   −
This function does not work for languages other than English.  Wikimedia #time: parser apparently doesn't understand
+
This function does not work if it is fed month names for languages other than English.  Wikimedia #time: parser
non-Engish date month names. This function will always return false when the date contains a non-English month name
+
apparently doesn't understand non-Engish date month names. This function will always return false when the date
because good1 is false after the call to lang.formatDate.
+
contains a non-English month name because good1 is false after the call to lang.formatDate(). To get around that
 
+
call this function with YYYY-MM-DD format dates.
For the time being, to use this function, supply it with YYYY-MM-DD format dates.  See
  −
[[bs:Modul:Citation/CS1/Date validation/igralište]] for one possible solution.
      
]=]
 
]=]
Line 44: Line 42:  
return false; -- one or both failed to convert to unix time stamp
 
return false; -- one or both failed to convert to unix time stamp
 
end
 
end
+
 
 
if 979516800 <= access_ts and access_ts < tomorrow_ts then -- Wikipedia start date <= accessdate < tomorrow's date
 
if 979516800 <= access_ts and access_ts < tomorrow_ts then -- Wikipedia start date <= accessdate < tomorrow's date
 
return true;
 
return true;
Line 354: Line 352:  
]]
 
]]
   −
local function check_date (date_string, tCOinS_date)
+
local function check_date (date_string, tCOinS_date, test_accessdate)
 
local year; -- assume that year2, months, and days are not used;
 
local year; -- assume that year2, months, and days are not used;
 
local year2=0; -- second year in a year range
 
local year2=0; -- second year in a year range
Line 441: Line 439:  
month = get_season_number (month); -- for metadata
 
month = get_season_number (month); -- for metadata
   −
elseif mw.ustring.match(date_string, "^%a+ +[1-9]%d%d%d% [%-–] %a+ +[1-9]%d%d%d%a?$") then -- month/season year - month/season year; separated by spaced endash
+
elseif mw.ustring.match(date_string, "^%a+ +[1-9]%d%d%d +[%-–] +%a+ +[1-9]%d%d%d%a?$") then -- month/season year - month/season year; separated by spaced endash
month, year, month2, anchor_year, year2=mw.ustring.match(date_string, "(%a+) +(%d%d%d%d) [%-–] (%a+) +((%d%d%d%d)%a?)");
+
month, year, month2, anchor_year, year2=mw.ustring.match(date_string, "(%a+) +(%d%d%d%d) +[%-–] +(%a+) +((%d%d%d%d)%a?)");
 
anchor_year=year..'–'..anchor_year; -- assemble anchor_year from both years
 
anchor_year=year..'–'..anchor_year; -- assemble anchor_year from both years
 
if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same
 
if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same
Line 503: Line 501:  
else
 
else
 
return false; -- date format not one of the MOS:DATE approved formats
 
return false; -- date format not one of the MOS:DATE approved formats
 +
end
 +
 +
if test_accessdate then -- test accessdate here because we have numerical date parts
 +
if 0 ~= year and 0 ~= month and 0 ~= day and -- all parts of a single date required
 +
0 == year2 and 0 == month2 and 0 == day2 then -- none of these; accessdate must not be a range
 +
if not is_valid_accessdate (year..'-'..month..'-'..day) then
 +
return false; -- return false when accessdate out of bounds
 +
end
 +
else
 +
return false; -- return false when accessdate is a range of two dates
 +
end
 
end
 
end
   Line 561: Line 570:  
end
 
end
 
elseif 'date'==k then -- if the parameter is |date=
 
elseif 'date'==k then -- if the parameter is |date=
if v:match("^n%.d%.%a?") then -- if |date=n.d. with or without a CITEREF disambiguator
+
if v:match("^n%.d%.%a?$") then -- if |date=n.d. with or without a CITEREF disambiguator
 
good_date, anchor_year, COinS_date = true, v:match("((n%.d%.)%a?)"); --"n.d."; no error when date parameter is set to no date
 
good_date, anchor_year, COinS_date = true, v:match("((n%.d%.)%a?)"); --"n.d."; no error when date parameter is set to no date
 
elseif v:match("^nd%a?$") then -- if |date=nd with or without a CITEREF disambiguator
 
elseif v:match("^nd%a?$") then -- if |date=nd with or without a CITEREF disambiguator
Line 568: Line 577:  
good_date, anchor_year, COinS_date = check_date (v, tCOinS_date); -- go test the date
 
good_date, anchor_year, COinS_date = check_date (v, tCOinS_date); -- go test the date
 
end
 
end
elseif 'access-date'==k then -- if the parameter is |access-date=
+
elseif 'year'==k then -- if the parameter is |year= it should hold only a year value
good_date = check_date (v); -- go test the date
+
if v:match("^[1-9]%d%d%d?%a?$") then -- if |year= 3 or 4 digits only with or without a CITEREF disambiguator
if true == good_date then -- if the date is a valid date
+
good_date, anchor_year, COinS_date = true, v:match("((%d+)%a?)");
good_date = is_valid_accessdate (v); -- is Wikipedia start date < accessdate < tomorrow's date?
   
end
 
end
 +
elseif 'access-date'==k then -- if the parameter is |date=
 +
good_date = check_date (v, nil, true); -- go test the date; nil is a placeholder; true is the test_accessdate flag
 
elseif 'embargo'==k then -- if the parameter is |embargo=
 
elseif 'embargo'==k then -- if the parameter is |embargo=
 
good_date = check_date (v); -- go test the date
 
good_date = check_date (v); -- go test the date
Line 750: Line 760:  
format_str = long_formats[format];
 
format_str = long_formats[format];
 
end
 
end
+
-- convert date and save;
date_parameters_list[param_name] = os.date (format_str, os.time(source_date)); -- convert date and save
+
date_parameters_list[param_name] = mw.text.trim (os.date (format_str, os.time(source_date))); -- strip leading space when single digit day and %e is first format
 
end
 
end
 
end
 
end
Bureaucrats, private-view, public-view, Administrators
97,692

edits

Navigation menu