پودمان:Ayat-Navigator
ظاهر
require('strict')
local p = {}
local args = {}
local num_con = require('Module:Numeral converter').convert
local getArgs = require('Module:Arguments').getArgs
--local cfg = mw.loadData('Module:Ayat-Navigator/configs')
local function getData(sure, data_type)
if (data_type=="len") then
return require('Module:Ayat-Navigator/Sure-Lengths')
end
if (data_type=="joze_hezb") then
return require('Module:Ayat-Navigator/Joze-Hezb')
end
if (data_type=="aye") then
return require('Module:Ayat-Navigator/Q' .. sure)
end
if (data_type=="name_num") then
return require('Module:Ayat-Navigator/nums-names')
end
local title = mw.title.new('Module:Ayat-Navigator/' .. sure)
if not (title and title.exists) then return nil end
return require('Module:Ayat-Navigator/' .. sure)
end
function p.get_aye(frame)
args = getArgs(frame)
local aye_num = tonumber(num_con("en", args["aye_num"]))
local sure_num = tonumber(num_con("en", args["sure_num"]))
local sure_name = args["sure_name"]
if aye_num and sure_num and not sure_name then
if getData(sure_num, "aye") then
local data = getData(sure_num, "aye")
return data.ayat[aye_num]
end
elseif aye_num and not sure_num and sure_name then
if getData(sure_name, "name_num") then
local suresnums = getData(sure_num, "name_num")
if suresnums.names_nums[sure_name] then
local surenum = suresnums.names_nums[sure_name]
if getData(surenum, "aye") then
local data = getData(surenum, "aye")
return data.ayat[aye_num]
end
end
end
end
end
function p.next_aye(frame)
args = getArgs(frame)
local aye_num = tonumber(num_con("en", args["aye_num"]))
local sure_num = tonumber(num_con("en", args["sure_num"]))
local sure_name = args["sure_name"]
local data_len = getData("", "len")
local data_nn = getData("", "name_num")
local sure_name_next
if (sure_num < 113) then
sure_name_next = data_nn.nums_names[sure_num+1]
else
return "آیه بعد"
end
local sure_len = data_len.lengths
if (aye_num < sure_len[sure_num]) then
return "[[آیه " .. num_con("fa", aye_num+1) .. " سوره " .. sure_name .."|آیه بعد]]"
elseif (aye_num == sure_len[sure_num]) then
return "[[آیه " .. num_con("fa", "1") .. " سوره " .. sure_name_next .."|آیه بعد]]"
else
return "آیه بعد"
end
end
function p.prev_aye(frame)
args = getArgs(frame)
local aye_num = tonumber(num_con("en", args["aye_num"]))
local sure_num = tonumber(num_con("en", args["sure_num"]))
local sure_name = args["sure_name"]
local data_nn = getData("", "name_num")
local data_len = getData("", "len")
local sure_len = data_len.lengths
if ((aye_num > 1) and (sure_num == 1)) then
return "[[آیه " .. num_con("fa", aye_num-1) .. " سوره " .. sure_name .."|آیه قبل]]"
elseif ((aye_num > 1) and (sure_num > 1)) then
return "[[آیه " .. num_con("fa", aye_num-1) .. " سوره " .. sure_name .."|آیه قبل]]"
elseif ((aye_num == 1) and (sure_num > 1)) then
local sure_name_prev = data_nn.nums_names[sure_num-1]
return "[[آیه " .. num_con("fa", sure_len[sure_num-1]) .. " سوره " .. sure_name_prev .."|آیه قبل]]"
else
return "آیه قبل"
end
end
function p.get_sure_len(frame)
args = getArgs(frame)
local sure_num = tonumber(num_con("en", args["sure_num"]))
local data_len = getData("", "len")
local sure_len = data_len.lengths
return sure_len[sure_num]
end
function p.get_sure_name(frame)
args = getArgs(frame)
local sure_num = tonumber(num_con("en", args["sure_num"]))
local data_nn = getData("", "name_num")
if ((sure_num <= 114) and (sure_num >= 1)) then
return data_nn.nums_names[sure_num]
end
end
function p.get_named_ayeh(frame)
args = getArgs(frame)
local ayeh_name = args["ayeh_name"]
local next = args["next"]
local previous = args["previous"]
local sure_num = 0
local surenums = {2, 3, 4, 5, 7, 8, 9, 13, 15, 16,
17, 18, 19, 21, 23, 24, 26, 27,
28, 30, 33, 42, 43, 48, 49, 52,
58, 59, 60, 62, 65, 66, 68, 70,
76, 89, 98}
local current_sure = 0
local current_ayat = {}
local found = 0
for i, v in ipairs(surenums) do
local data = getData(v, "")
for item_i, item_v in ipairs(data.ayat_namdar) do
if ((data.ayat_namdar[item_i][2] == ayeh_name) and
(found == 0)) then
current_sure = v
current_ayat = data.ayat_namdar[item_i][1]
table.sort(current_ayat)
found = 1
end
end
end
local sorted_ayat = {}
if (found == 1) then
sorted_ayat = p.sorting_ayat(current_sure)
--local test = ''
--test = #sorted_ayat
--return test
for i, v in ipairs(sorted_ayat) do
if (v[2] == ayeh_name) then
if (next == "1") then
if (sorted_ayat[i+1]) then
return sorted_ayat[i+1][2]
else
local nns = p.next_named_sure(current_sure)
local data = getData(nns, "")
sorted_ayat = p.sorting_ayat(nns)
local ttt = ''
return sorted_ayat[1][2]
end
else
if (i-1 > 0) then
return sorted_ayat[i-1][2]
else
local pns = p.prev_named_sure(current_sure)
local data = getData(pns, "")
sorted_ayat = p.sorting_ayat(pns)
return sorted_ayat[#sorted_ayat][2]
end
end
end
end
end
--return ''
end
function p.sorting_ayat(current_sure)
local data = getData(current_sure, "")
local ind = 1
local mins = {}
for item_i, item_v in ipairs(data.ayat_namdar) do
local min = 1000
for i, v in ipairs(item_v[1]) do
min = math.min(min, v)
end
mins[ind] = {min, item_v[2]}
ind = ind + 1
end
local sorted_mins = {}
local mins_len = #mins
local function sortByKey(key)
return function(a, b)
return a[key] < b[key]
end
end
table.sort(mins, sortByKey(1))
return mins
end
function p.next_named_sure(current_sure)
local surenums = {2, 3, 4, 5, 7, 8, 9, 13, 15, 16,
17, 18, 19, 21, 23, 24, 26, 27,
28, 30, 33, 42, 43, 48, 49, 52,
58, 59, 60, 62, 65, 66, 68, 70,
76, 89, 98}
for i, v in ipairs(surenums) do
if (v == current_sure) then
if (v < 98) then
return surenums[i+1]
else
return 2
end
end
end
end
function p.prev_named_sure(current_sure)
local surenums = {2, 3, 4, 5, 7, 8, 9, 13, 15, 16,
17, 18, 19, 21, 23, 24, 26, 27,
28, 30, 33, 42, 43, 48, 49, 52,
58, 59, 60, 62, 65, 66, 68, 70,
76, 89, 98}
for i, v in ipairs(surenums) do
if (v == current_sure) then
if (v > 2) then
return surenums[i-1]
else
return 98
end
end
end
end
function p.is_named_ayeh(frame)
local surenums = {2, 3, 4, 5, 7, 8, 9, 13, 15, 16,
17, 18, 19, 21, 23, 24, 26, 27,
28, 30, 33, 42, 43, 48, 49, 52,
58, 59, 60, 62, 65, 66, 68, 70,
76, 89, 98}
local ayeh_name = args["ayeh_name"]
for x in surenums do
local data = getData(x, "")
for i, v in ipairs(data.ayat_namdar) do
if (v[2] == ayeh_name) then
return 1
end
end
end
end
return p