Family History wiki

548 views
Skip to first unread message

Damon Pritchett

unread,
Jun 27, 2020, 7:27:54 PM6/27/20
to TiddlyWiki
All,

I've spent the last few days working on a new wiki for use with my family history. I'm going to use it, not as a substitute for my genealogy program, but as a supplement to keep track of documentation and such. In so doing, I've managed to figure out a nice way of using tidgraph to generate my pedigree chart and I've written a "children of" using nested list widgets. I have tiddlers for each person with that person's parents as tags. With tidgraph, I was able to get the desired behavior by using mode="tags[]" instead of tagging which is the default. Tidgraph is a wonderful plugin and it's too bad that it doesn't seem to be supported any longer. I'm still learning Javascript, so am a long way from making any changes to it myself.

I've created a ViewTemplate that I've included here:
\import [title<currentTiddler>]

<$list filter="[all[current]search:description[People]]">

<div class="tc-tiddler-body" style="border: none;">


<$tidgraph start=<<currentTiddler>> mode="tags[]sort[sex]reverse[]" maxdepth="2" nocollapse />

<$list filter="[all[current]has:field[birth]] [all[current]has:field[death]]">
<table class="highlight1">
  <caption style="text-align: left; font-weight: bold; caption-side: top;">Birth / Death:</caption>
  <tr>
    <td>Birth</td>
    <td><$macrocall $name="date-str" date={{!!birth}}/></td>
    <td><<birthplace>></td>
  </tr>
  <tr>
    <td>Death</td>
    <td><$macrocall $name="date-str" date={{!!death}}/></td>
    <td><<deathplace>></td>
  </tr>
</table>
</$list>

<$list filter="[all[current]]" variable="Parent">

<$list filter="[all[current]tagging[]search:description[People]limit[1]]" variable=null>

<div class="list-tree">
  Children of <<currentTiddler>>:
  <ol>
    <$list filter="[title<currentTiddler>tagging[]sortan[birth]tags[]!title<Parent>]">
      <li>with: <$link><$view field='caption'><$view field='title'/></$view></$link>
        <$list filter="[title<currentTiddler>tagging[]limit[1]has[parents-marriage]]">
          -> married: <$macrocall $name="date-str" date={{!!parents-marriage}}/>
        </$list>
        <ol>
          <$list filter="[title<currentTiddler>tagging[]sortan[birth]]">
            <li><$link><$view field='caption'><$view field='title'/></$view></$link> -> born: <$macrocall $name="date-str" date={{!!birth}}/></li>
          </$list>
        </ol>
      </li>
    </$list>
  </ol>
</div>

</$list>

</$list>

<$list filter="[all[current]backlinks[]!search:description[People]!is[missing]limit[1]]" variable=null>

<<table-dynamic filter:"[title<currentTiddler>backlinks[]!search:description[People]]" fields:"tbl-expand record-date description title" sortOp:sortan stateTiddler:"recordsearch" class:"highlight1" editButton:no caption:"''Mentioned or connected with the following records:''">>

</$list>


</div>

</$list>


The result is this:



I'm suing the class "list-tree" which has been around for quite a while and created by Mat. There's also a dynamic table called out from the Shiraz plugin that I use to show any documents that the person is listed in.

This all works just how I want it to work, but being that my skills at Tiddlywiki are still forming, I'm wondering if there might be a more efficient or effective way of doing the same thing. I am definitely open to any better ways of doing things.

I'm also thinking of expanding the "children of" code to a recursive macro to get multiple generations, but I don't know exactly how to proceed down that path. Any suggestions would be highly appreciated.

Feel free to use this code if you think you'd find it useful. I only ask that, if you make any improvements or additions, that you let me know so I might incorporate those.

Thanks,

Damon





Saq Imtiaz

unread,
Jun 28, 2020, 12:32:07 AM6/28/20
to TiddlyWiki
@Damon have you looked at the Kin filter?

Damon Pritchett

unread,
Jun 28, 2020, 12:47:48 AM6/28/20
to TiddlyWiki
Saq,

I have used it before and it just never occurred to me to use it in this aspect. Thanks for the reminder. I will look into that tomorrow. What I did was a great learning experience for me but kin filter will likely work better.

Thanks

Damon Pritchett

unread,
Jun 28, 2020, 4:14:02 PM6/28/20
to TiddlyWiki
I've played around with the kin filter today and it is a fine replacement for part of what I wrote. However, (see the Person 1 picture for reference) to show the children of Person one along with the spouse/partner who was the other parent of the given child, takes the additional steps that I took in my code. The Kin filter cannot do this by itself. The Kin filter will list all of the descendants for Person 1, but that list is a flat list and has no hierarchy to it and will not list the spouses because they are not direct descendants (at least, I haven't been able to figure out how to do it).

Damon

TW Tones

unread,
Jun 28, 2020, 8:02:02 PM6/28/20
to TiddlyWiki
Damon,

One way to use the kin filter is to use one kin filter and add or subtract the titles from another kin filter. so you could subtract your family (your parents below) from that below your grandparents family the result will be you aunts uncles cousins etc.. 

If using tags to indicate parentage you have to check the the parent to determine if they are father or mother, to to make sure the tags is not for something else. I suggest moving relationships into fields not tags (If you had not already).

Also the TOCP plugin or a variation along with the kin filter operating on fields rather than tags is possibly the way to go building a genealogical tree. Do Search the forum, TT and others have done a lot of genealogical work with Tiddlywiki.

You will find in the forums recursive toc and macros discussed a few times that could help you build a full system that iterates trees.

Regards
Tony

Damon Pritchett

unread,
Jun 28, 2020, 8:48:04 PM6/28/20
to TiddlyWiki
Hey Tony,
 
I have done quite a bit of searching and, at least so far, I have found no solutions to the problem I was trying to address, just comments on how difficult the problem is when there are bi-lineal relationships.

I may not have put enough explanation in my initial post. What I might not be making clear (see "children of" picture) is that Person 1 is, say, the father and Persons 2 & 3 are the mothers. Persons 4 and 5 have the same "father," but not the same mother. That's why I have the word "with" before the names. 

I played with Kin filter to replicate what I had and couldn't quite get there. I came close, but couldn't get past the "flatness" of the lists generated by the kin filter Maybe I gave up too soon, but since I had a solution that worked, I didn't want to spend any further time on it. 

I've used the TOCP plugin a lot in my wikis and love it. At this point, I don't see the problem changing whether I use fields or tags, but I could be wrong. I used tags for this because of the operators tags and tagging which made things relatively easy.

Damon

TW Tones

unread,
Jun 28, 2020, 10:29:21 PM6/28/20
to TiddlyWiki
Damon,

The reason I suggested against tags is you then have to differentiate between tags. On the surface there is no immediate difference between a mother or father-name tag. This can be solved, but if a person had a mother and father field, it would be unambiguous. With TOCP you can use other fields. What if you wanted to add a clan tag?, this would also need checking. 

However genealogy can get seriously complex, Lets see if TT/Josiah takes the bait and shares some of his resources so far.

I do intend to provide the tools one day for a full and sophisticated genealogical tree, consider step children, second spouse, birth date and multiple marriages and death. What is the implication of twins and and multiple birth?, well in my family tree it allowed us to to identify a whole tree of relatives even although the father was unknown. Multiple births are an example of proven FULL siblings.

However it will take some time, because I am collecting the mechanisms to make it highly extensible and support other networks and hierarchies as well.  

Needless to say it will use tocp, Kin, and recursion and possible GenTags.

Regards
Tony

Damon Pritchett

unread,
Jun 28, 2020, 10:55:15 PM6/28/20
to tiddl...@googlegroups.com
Thanks Tony. I really do appreciate your insight. I will be the first to admit that I have a lot to learn. 

I actually started this little project using a separate field for mother and father, but I switched to tags because it was easier to make it work with Tidgraph. I couldn’t quite figure out how to make it use only those two fields and not the others (birth, death, etc.) I did make it work with a parents field with the mother and father separated by a “;” bit I really didn’t like that for obvious reasons. Tidgraph worked well with the two tags because I could specify mode=“tags[]” and all was well since they were the only tags I intended to use. Using fields[] instead would have listed all fields and stopped there. Tidgraph is the easiest way to generate a pedigree chart. 

Once I got that, then I went to work on the “children of” list. Since I already went down the tag path, I stuck with it. Generating a descendant list was easy with the toc macros, but they couldn’t include the spouses so I rolled my own. I will not claim it is the best approach. Just easiest at the time and it served my purpose.  I wasn’t looking to replace my genealogy program; just provide a quick snapshot for reference. 

Having said all of that, I’m definitely open to ideas and look forward to seeing your ideas and TT’s as well. 

Now a question. If I were to go back to mother and father fields, how could I get similar looking results for both pedigree and children? That’s where I got stuck in the first place. 

Damon


--
You received this message because you are subscribed to a topic in the Google Groups "TiddlyWiki" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/tiddlywiki/ckbmFxV4gRk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to tiddlywiki+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/c8fdd6bd-972a-46d3-bcd8-0cbd3f429e21o%40googlegroups.com.

TW Tones

unread,
Jun 29, 2020, 12:05:14 AM6/29/20
to TiddlyWiki
Damon,

I am afraid I am not sure what you mean by pedigree.

Look at my recent post Jumping into streams it includes a simple TOC via recursive code, I expect if you come to understand that you should be able to handle your recursive processes. A Little more complex is the existing toc macros $:/core/macros/toc, in part because they protect you from becoming your own grandfather, but they involve a single parent tree by tag.

Tidgraph is simple in someways, so I believe it could be rebuilt by other means. Particularly a css based way to represent any list like tiddgraph. After all a nested button list is basically the same thing without the lines. Not that I know CSS enough, others do.

Regards
Tony




On Monday, June 29, 2020 at 12:55:15 PM UTC+10, Damon Pritchett wrote:
Thanks Tony. I really do appreciate your insight. I will be the first to admit that I have a lot to learn. 

I actually started this little project using a separate field for mother and father, but I switched to tags because it was easier to make it work with Tidgraph. I couldn’t quite figure out how to make it use only those two fields and not the others (birth, death, etc.) I did make it work with a parents field with the mother and father separated by a “;” bit I really didn’t like that for obvious reasons. Tidgraph worked well with the two tags because I could specify mode=“tags[]” and all was well since they were the only tags I intended to use. Using fields[] instead would have listed all fields and stopped there. Tidgraph is the easiest way to generate a pedigree chart. 

Once I got that, then I went to work on the “children of” list. Since I already went down the tag path, I stuck with it. Generating a descendant list was easy with the toc macros, but they couldn’t include the spouses so I rolled my own. I will not claim it is the best approach. Just easiest at the time and it served my purpose.  I wasn’t looking to replace my genealogy program; just provide a quick snapshot for reference. 

Having said all of that, I’m definitely open to ideas and look forward to seeing your ideas and TT’s as well. 

Now a question. If I were to go back to mother and father fields, how could I get similar looking results for both pedigree and children? That’s where I got stuck in the first place. 

Damon

To unsubscribe from this group and all its topics, send an email to tiddl...@googlegroups.com.

Damon Pritchett

unread,
Jun 29, 2020, 12:08:29 AM6/29/20
to tiddl...@googlegroups.com
Thanks Tony. Interesting thoughts. By pedigree I mean the first figure that Tidgraph generated. It’s a chart that shows the ancestors of a person graphically. 



To unsubscribe from this group and all its topics, send an email to tiddlywiki+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/f3112f86-582c-4989-8d04-f8443040752co%40googlegroups.com.

Damon Pritchett

unread,
Jun 29, 2020, 12:09:38 AM6/29/20
to TiddlyWiki

TW Tones

unread,
Jun 29, 2020, 2:50:39 AM6/29/20
to TiddlyWiki
Ahh,

Yes what led to them?

Regards
Tony

Damon Pritchett

unread,
Jun 29, 2020, 11:40:59 AM6/29/20
to TiddlyWiki
Not sure how that began being used in genealogy, but they have been as long as I’ve been researching my family which is over 30 years. They are very convenient for visualizing ancestors. Wikipedia has an article about them here: https://en.m.wikipedia.org/wiki/Pedigree_chart.

Don’t know if that answered your question or not.

Damon

TW Tones

unread,
Jun 29, 2020, 8:28:04 PM6/29/20
to TiddlyWiki
Damon,

Just another name for a genealogical tree really. I am familiar with it from dog breeding. It depends on how one values ones genetic tree, I suspect racists value it more than others ;)

Regards
Tony

Damon Pritchett

unread,
Jun 29, 2020, 8:29:42 PM6/29/20
to TiddlyWiki
That may be, but it is a valuable visualization tool if you're into genealogy. It's a standard term and use.

Birthe C

unread,
Jun 29, 2020, 8:54:00 PM6/29/20
to TiddlyWiki
TW Tones,

It can be of historic interest. It is also a great hobby for many.
I myself inherited at handwritten book, wrote by each generation - very old and delicate. It was always inherited by the oldest son. I was the first daughter to inherit it, due to being the one and only left.
The book also has the first written words by me. As a small child, not knowing how to write or spell, I got my grandmother to show me, how to write the name of the brother I should have had, but that died before i was born. I thought it wrong he never went into the book....and wrote it very ugly.

It must have been of interest to somebody, because it was stolen shortly after I inherited it- by one of the guests at the funeral........that tells more about people that the book did. I do not know why you think racist? You never know what you will find it your tree!
You should know that from the use you mentioned in dog breading.

Birthe

TW Tones

unread,
Jun 29, 2020, 9:09:27 PM6/29/20
to TiddlyWiki
Birthe,

I do not think it racist, to be interested in ones family tree, just that many racists will be interested in theirs, because they seek racial purity, hence more likely to use the term "pedigree" as if their inheritance is superior to another, which is the concept behind breading and animal pedigree's. 

Experience suggests however a truthful family tree often exposes to a racists, that that have the blood of the races that they belittle, somewhere in their tree, at least in a young (in modern terms) country like Australia. 

All racial purity is to some degree inbreeding.

Our Australian indigenous people have being here more than 65,000 years, as time has passed since colonisation, having aboriginal blood is increasingly an honour rather than a curse. The Australian aboriginal represents the longest continuous culture in human history. We even find records of the rising sea levels after the ice age 12,000 years ago, How old is Egypt or the Chinese civilisation?   

Regards
Tony

Damon Pritchett

unread,
Jun 30, 2020, 12:55:23 PM6/30/20
to TiddlyWiki
In an attempt to show all descendants of a person instead of just the children, I've written a macro to do the recursive listing. It works great except for one thing; on the very first pass or top level, the spouses aren't listed (the code is below the examples). It lists the descendants of the top level, but the part that says "with" doesn't happen. When I pick a level higher, then it does show. Here's a screenshot of one top level with no spouses:

Now here's the next level up:


As you can see, only the top level is missing the "with" and the spouse. I'm not exactly sure what I'm doing wrong, but it's so close.


\define each-other-level()
 
<ol>
   
<$list filter="[title<currentTiddler>kin:tags:to:1[]sortan[birth]!title<currentTiddler>]">

       
<li>
         
<$link><$view field='caption'><$view field='title'/></$view></$link> -> born: <$macrocall $name="date-str" date={{!!birth}}/>

         
<ol>
           
<$list filter="[title<currentTiddler>tagging[]sortan[birth]tags[]!title<currentTiddler>]">

             
<li>
               
with: <$link><$view field='caption'><$view field='title'/></$view></$link>
               
<$list filter="[title<currentTiddler>tagging[]limit[1]has[parents-marriage]]">
                 
-> married: <$macrocall $name="date-str" date={{!!parents-marriage}}/>
               
<
/$list>
                <<each-other-level>>
              </
li>

           
</$list>
          </
ol>
       
</li>
    </
$list>
 
</ol>
\end


\define descendants()
 
<<each-other-level>>
\end

Mat

unread,
Jun 30, 2020, 3:06:59 PM6/30/20
to TiddlyWiki
Maybe a workaround; could you introduce a "ghost" that is one level above and that is not shown and whose non-appearing spouse is irrelevant if it shows or not?

<:-)

Damon Pritchett

unread,
Jun 30, 2020, 3:16:50 PM6/30/20
to TiddlyWiki
Hmm. Possibly. I'll have to think about how to do that.

Is there something fundamentally wrong with my macro the way it is?

Damon

Damon Pritchett

unread,
Jun 30, 2020, 5:28:35 PM6/30/20
to TiddlyWiki
As I was thinking about what Mat had suggested, I had a thought. I realized that I had to reverse the order of the list filters and all is well. Here's the new code.

\define each-other-level()
 
<ol>
   
<$list filter="[title<currentTiddler>tagging[]sortan[birth]tags[]!title<currentTiddler>]">

     
<li>
       
with: <$link><$view field='caption'><$view field='title'/></$view></$link>
       
<$list filter="[title<currentTiddler>tagging[]limit[1]has[parents-marriage]]">
         
-> married: <$macrocall $name="date-str" date={{!!parents-marriage}}/>
         
<
/$list>
        <ol>

          <$list filter="[title<currentTiddler>kin:tags:to:1[]sortan[birth]!title<currentTiddler>]">
            <li>
              <$link><$view field='caption'><$view field='title'/
></$view></$link> -> born: <$macrocall $name="date-str" date={{!!birth}}/>
             
<<each-other-level>>

           
</li>
          </
$list>
       
</ol>
      </
li>
   
</$list>
  </
ol>
\end


\define descendants()
 
<<each-other-level>>
\end

Damon Pritchett

unread,
Jul 1, 2020, 1:04:53 PM7/1/20
to TiddlyWiki
After some more playing around, I discovered that there was still a bug. In one of my previous posts, I should some pictures of a couple of the outputs of my macro. If you look at Carl Anders Fehr, you will notice that he had two spouses and children by both. They macro worked great when he was the starting person, but if one of his spouses were the starting person, the macro would show all of Carl's children and not just the children of that particular spouse. After noodling it for a while and sleeping on it, I realized what the problem was. I needed to subtract the children that didn't belong. The following new macro fixes that problem:
\define each-other-level()

<$list filter="[all[current]]" variable="Parent">

 
<ol>
   
<$list filter="[title<currentTiddler>tagging[]sortan[birth]tags[]!title<currentTiddler>]">

     
<li>
       
with: <$link><$view field='caption'><$view field='title'/></$view></$link>
       
<$list filter="[title<currentTiddler>tagging[]limit[1]has[parents-marriage]]">
         
-> married: <$macrocall $name="date-str" date={{!!parents-marriage}}/>
       
<
/$list>
        <ol>

          <$list filter="[title<currentTiddler>kin:tags:to:1[]sortan[birth]!title<currentTiddler>]
                         -[!kin:tags:to<Parent>]">

            <li>
              <$link><$view field='caption'><$view field='title'/
></$view></$link> -> born: <$macrocall $name="date-str" date={{!!birth}}/>
             
<<each-other-level>>

           
</li>
          </
$list>
       
</ol>
      </
li>
   
</$list>
  </
ol>
</$list>
\end


\define descendants()
  ''Descendants of <$view field='caption'><$view field='title'/
></$view>''
 
<<each-other-level>>
\end

Assuming I don't find any bugs in this one, then it's off to investigate using fields instead of tags as Tony has suggested






On Saturday, June 27, 2020 at 4:27:54 PM UTC-7, Damon Pritchett wrote:

Damon Pritchett

unread,
Jul 1, 2020, 6:13:30 PM7/1/20
to TiddlyWiki
So my first task in changing over to fields was to get Tidgraph to work with a father field and a mother field. I spent a couple of hours on this trying to get Tidgraph to show the parents, but I was unable to do so. The only way that I have been able to get Tidgraph to do what I wanted was to have a parents field and the father and mother separated by a semicolon. I could then use a filter as the mode in Tidgraph to separate the two.  I really didn't care for this approach. For the time being, I'm sticking with the tags approach until I can figure out either a way to get Tidgraph to do what I'm looking to do or use Tony's suggestion of a CSS approach.


On Saturday, June 27, 2020 at 4:27:54 PM UTC-7, Damon Pritchett wrote:

TW Tones

unread,
Jul 1, 2020, 7:51:26 PM7/1/20
to TiddlyWiki
Damon,

Do remember that the kin filter is ideal for subtracting one list (or more) lists from another so if you list the children of a father and subtract the children of other mothers the remaining will be the only the children of the remaining mother. However with the kin filter you could list the children of a mother where the father equals the person who's children you wish to list you are after.

Regards
Tony

Damon Pritchett

unread,
Jul 1, 2020, 8:09:24 PM7/1/20
to TiddlyWiki
Hey Tony,

Maybe I'm not understanding what you just said, but I thought that's basically what I did with the last macro iteration. Are you suggesting that I do something different than my last iteration? 

Damon

TiddlyTweeter

unread,
Jul 2, 2020, 2:52:11 AM7/2/20
to TiddlyWiki
Ciao Damon

I followed this thread with interest. I've commented several times on past on issues in presenting genealogical trees (I'm an anthropologist). 

My first comment is you are doing really well with this! Actually managing to depict trees that include spouses.

The idea to use  a "pedigree" tree is I think the right choice for the extant tools! Pedigree trees being ones with all children sharing a common "blood" ancestor.

Technically speaking your tree depicts a form of "ambilineal" descent, where ...
  • sons AND daughters can both be counted in descent (cosanguines)
  • spouses (not part of descent) are recorded at point of marriage (affinity), but then fall away, not being part of the "pedigree".
This makes your approach compatible with Western kinship systems (which are bilateral) and gives understandable charts. 
I mean, charts without any reference to spouses are not really Western kinship (I.e. just matrinlineal or patrilineal descent, not bilateral).

The one technical thing I know is that the "list" approach (I.e The fundamental structure of final HTML <li> s that do the presentation) as far as I can seen can only possibly depict lineal descent.

But you managed to (1) add spouses (affines) at branch level in a way that can work and makes the outcome viable as a real chart; (2) that is compatible with bilateral descent. 

Just FYI there have been several discussions of possible ways to code genealogical charts in this group. Let me know if you'd like me to find them for you.
That said, basically, in terms of outcome, you are hitting the nail on the head elegantly!

I would love to see your finished wiki, if, when done, you are willing to share it.

Very best wishes
TT

TiddlyTweeter

unread,
Jul 2, 2020, 3:54:53 AM7/2/20
to TiddlyWiki
Ciao Damon

As a bit of fun I looked at your examples and your code and drew a formal chart of type that interest anthropologists.

Basically it is able to embrace all kinship terminology well ... and maybe could be also used by people interested in "classificatory kinship terms".

f6d84ce8-7e01-4373-b2ee-3015b7308d94.jpg



Best wishes
TT

Damon Pritchett

unread,
Jul 2, 2020, 4:08:48 PM7/2/20
to TiddlyWiki
Thanks very much for the kind words. I really appreciate that. I'm very happy with the way that it has turned out.

Damon
Reply all
Reply to author
Forward
0 new messages