הודעה לכל משתמשי אקו-ויקי: הותקנו בהצלחה גאדג'אטים על שרת האתר. ניתן לבחור מביניהם בדף ההעדפות האישיות. כמו כן, מהיום אפשר לכתוב משוב על הערך בתיבה שמתחתיו, לאחר הרשמה קצרה.
יחידה:תבנית מידע/אישיות
קפיצה לניווט
קפיצה לחיפוש
ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:תבנית מידע/אישיות/תיעוד
local Infobox = require('Module:תבנית מידע').Infobox local LocationAndCountry = require('Module:LocationAndCountry') local PropertyLink = require('Module:PropertyLink') local ageModule = require('Module:גיל לערכי אישים') local Date = require('Module:תאריך') local hebrewDateModule = require('Module:תאריך עברי') local WikidataCrossValidation = require('Module:WikidataCrossValidation') --[[ Get general date if known, otherwise guess from hebrew date. ]] function getSpeculativeDate(generalDate, hebrewDate) if generalDate == '-' then return nil end if generalDate~=nil and generalDate~='' then return generalDate end if hebrewDate~=nil and hebrewDate~='' then local success, sepcDate = pcall(hebrewDateModule.pick, mw.getCurrentFrame():newChild{ args = {hebrew=hebrewDate, world='', exact='כן' } }) if not success or sepcDate=='' then return nil end return sepcDate end return nil end local function getDeathLabel(deathCause, entityId, gender) local result='' local fromWikidata=nil entityId = entityId or mw.wikibase.getEntityIdForCurrentPage() if ( deathCause == nil or deathCause =='' ) and entityId ~= nil then local deathCauseWikidata = mw.wikibase.getBestStatements(entityId, 'P1196') deathCauseWikidata = deathCauseWikidata and deathCauseWikidata[1] and deathCauseWikidata[1].mainsnak if deathCauseWikidata then deathCause = mw.wikibase.renderSnak(deathCauseWikidata) fromWikidata=true end end -- Use female form of address also for transgender females if (gender == "אישה טרנסג'נדרית") then gender = 'נקבה' end if deathCause and deathCause ~= '' then if deathCause == 'נהרג' or deathCause == 'נהרגה' or deathCause == 'מוות בקרב' or deathCause == 'נהרג בקרב' or deathCause == 'נהרגה בקרב' or deathCause == 'תאונה' then return (gender=='נקבה' and 'נהרגה') or 'נהרג' elseif deathCause == 'נרצח' or deathCause == 'נרצחה' or deathCause == 'רצח' or deathCause == 'רעל' then return (gender=='נקבה' and 'נרצחה') or 'נרצח' elseif deathCause == 'התאבד' or deathCause == 'התאבדה' or deathCause == 'התאבדות' then return (gender=='נקבה' and 'התאבדה') or 'התאבד' elseif deathCause == 'הוצא להורג' or deathCause == 'הוצאה להורג' or deathCause == 'עונש מוות' or deathCause == 'תלייה' then return 'הוצאה להורג' elseif not fromWikidata then result='[[קטגוריה:ערכים עם סיבת מוות שגויה בתבנית]]' end end return result .. 'פטירה' end function getEventDetails(generalDate, hebDate, eventPlace, propDate, propPlace, age, usingWikidata, infoObj) entityId = infoObj.args.entityId or mw.wikibase.getEntityIdForCurrentPage() age = age or '' local formattedEvent local placeDate = propDate if generalDate~=nil and generalDate~='' then local success, placeDateParsed = pcall(Date.newFromWikitext, generalDate) if success then placeDate = placeDateParsed end formattedEvent = generalDate .. age if hebDate~=nil and hebDate~='' then formattedEvent = formattedEvent ..'<br/>' ..hebDate end elseif hebDate~=nil and hebDate~='' then formattedEvent = hebDate .. age end if (eventPlace == nil or eventPlace == '') and entityId then local success, res = pcall(LocationAndCountry.displayFromParams, propPlace, entityId, placeDate , 1) if success and res and #res>0 then usingWikidata = true eventPlace = res end else local pageNs = mw.title.getCurrentTitle().namespace if pageNs==0 and not infoObj.isNonPerson then local matching = WikidataCrossValidation.crossValidate(eventPlace, propPlace, entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, propPlace)) end end end if eventPlace~='' and eventPlace~=nil and eventPlace~='-' then formattedEvent = formattedEvent..'<br/>' ..eventPlace end if usingWikidata and entityId then formattedEvent = formattedEvent .. ' [[File:Blue pencil RTL.svg|15px|link=https://www.wikidata.org/wiki/'..entityId.. '?uselang=he#P569|עריכת הנתון בוויקינתונים]]' end return formattedEvent, usingWikidata end function addMissingImage(infoObj, birthDate, deathDate, gender) if infoObj.args.image ~= nil and #infoObj.args.image > 0 then return end -- there is already image local latestDate = deathDate or birthDate if latestDate == nil then return end local dateModule = require('Module:תאריך') local success, res = pcall(dateModule.parseDateRange, latestDate, 'raw') if success==false then return end -- there is no known VALID date local yearsEstimated = res/(60*60*24*365) if yearsEstimated>150 then return end local frame = mw.getCurrentFrame() infoObj.args.image = frame:expandTemplate{ title = 'אין תמונה', args = { gender, ['יישור'] = 'center' } } end function fillWikidataParam(templateArgs, paramName, property, infoObj) local usingWikidata = false if infoObj.args.entityId == nil then local matching = WikidataCrossValidation.crossValidate(templateArgs[paramName], property, infoObj.args.entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, property)) end return false -- no wikidata entity end if templateArgs[paramName]==nil or templateArgs[paramName]=='' then templateArgs[paramName] = PropertyLink.getPropertyByOptions( property, infoObj.args.entityId ) if templateArgs[paramName] and #templateArgs[paramName]>0 then usingWikidata = true end else local pageNs = mw.title.getCurrentTitle().namespace if pageNs==0 and not infoObj.isNonPerson then local matching = WikidataCrossValidation.crossValidate(templateArgs[paramName], property, infoObj.args.entityId ) if matching then table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, property)) end end end return usingWikidata end local function instanceOfViolation(infoObj) local pageNs = mw.title.getCurrentTitle().namespace if pageNs~=0 then return true end local wikidataInstanceOf = nil if infoObj.args.entityId ~= nil then wikidataInstanceOf = mw.wikibase.getBestStatements(infoObj.args.entityId, 'P31') wikidataInstanceOf = wikidataInstanceOf and wikidataInstanceOf[1] and wikidataInstanceOf[1].mainsnak end if wikidataInstanceOf == nil then local matching = WikidataCrossValidation.crossValidate('אדם', 'P31', infoObj.args.entityId ) if matching then mw.logObject(matching) table.insert(infoObj.wikidataCats, WikidataCrossValidation.maintainceCategory(matching, 'P31')) end else wikidataInstanceOf = wikidataInstanceOf.datavalue and wikidataInstanceOf.datavalue.value and wikidataInstanceOf.datavalue.value.id if wikidataInstanceOf ~= 'Q5' then table.insert(infoObj.wikidataCats, '[[קטגוריה: ויקינתונים - תבניות אישיות למופע לא מתאים]]') return true end end return false end function addPersonDetails(frame, infoObj) local templateArgs = frame:getParent().args local usingBirthWikidata = false local usingDeathWikidata = false local birthLabel = 'לידה' local deathLabel = 'פטירה' infoObj.isNonPerson = instanceOfViolation(infoObj) local wikidataGender = nil if not infoObj.isNonPerson then wikidataGender = PropertyLink.getPropertyByOptions( 'P21', infoObj.args.entityId ) if wikidataGender == nil then table.insert(infoObj.wikidataCats, '[[קטגוריה:אישים חסרי מגדר בוויקינתונים]]') end end -- fill birth/death dates from wikidata is missing usingBirthWikidata = fillWikidataParam(templateArgs, 'תאריך לידה', 'P569', infoObj) usingDeathWikidata = fillWikidataParam(templateArgs, 'תאריך פטירה', 'P570', infoObj) local birthDate = getSpeculativeDate(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי']) local deathDate = getSpeculativeDate(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי']) if birthDate~=nil then local age = nil if deathDate==nil then age = ageModule.ageCalc(birthDate, nil, true, false, true) or '' end local birthDetails, usingBirthWikidataEvent = getEventDetails(templateArgs['תאריך לידה'], templateArgs['תאריך לידה עברי'], templateArgs['מקום לידה'], 'P569', 'P19', age, usingBirthWikidata, infoObj) table.insert(infoObj.templateStructure, 1, { label='לידה', data=birthDetails }) usingBirthWikidata = usingBirthWikidata or usingBirthWikidataEvent elseif templateArgs['מקום לידה']~= '-' then fillWikidataParam(templateArgs, 'מקום לידה', 'P19', infoObj) table.insert(infoObj.templateStructure, 1, { label=birthLabel, data= templateArgs['מקום לידה'] }) end deathLabel = getDeathLabel(templateArgs['סיבת המוות'], infoObj.args.entityId, wikidataGender) if deathDate~=nil then local age = ageModule.ageCalc(birthDate, deathDate, false, false, true) or '' local deathDetails, usingDeathWikidataEvent = getEventDetails(templateArgs['תאריך פטירה'], templateArgs['תאריך פטירה עברי'], templateArgs['מקום פטירה'], 'P570', 'P20', age, usingDeathWikidata, infoObj) table.insert(infoObj.templateStructure, 2, { label=deathLabel, data=deathDetails }) usingDeathWikidata = usingDeathWikidata or usingDeathWikidataEvent elseif templateArgs['מקום פטירה']~= '-' then fillWikidataParam(templateArgs, 'מקום פטירה', 'P20', infoObj) table.insert(infoObj.templateStructure, 2, { label=deathLabel, data= templateArgs['מקום פטירה'] }) end if infoObj.isSelfUse then table.insert(infoObj.templateStructure, 1, { label=birthLabel, data='{{{תאריך לידה}}}<br/>{{{מקום לידה}}}' }) table.insert(infoObj.templateStructure, 2, { label=deathLabel, data='{{{תאריך פטירה}}} <br/>{{{מקום פטירה}}}' }) end if usingBirthWikidata or usingDeathWikidata then infoObj.args.usingWikidata = true end if frame.args['כותרת0'] then table.insert(infoObj.templateStructure, 1, { header=1, data=frame.args['כותרת0'], rowstyle=frame.args['עיצוב-שורה0'], rowclass=frame.args['מחלקה-שורה0'], headerstyle=frame.args['כותרת0-עיצוב'] }) end if frame.args['תמונה']~='-' then addMissingImage(infoObj, birthDate, deathDate, wikidataGender) end end function infobox(frame) local infoObj = Infobox:new() frame.args['תמונה-גודל'] = frame.args['תמונה-גודל'] or '220' infoObj:parseArgs(frame) if infoObj.args.title~='-' then addPersonDetails(frame, infoObj) end return infoObj:render() end return { ['מידע']=infobox, ['addPersonDetails'] = addPersonDetails }