Difference between revisions of "expert"

From GeneWeb
Jump to: navigation, search
m (Variables used in templates)
m (Commands (m=XXX))
 
(4 intermediate revisions by 2 users not shown)
Line 8: Line 8:
  
 
For further analysis, explore the various other [[templates|template]] files, and on last resort, explore the Ocaml source files!!
 
For further analysis, explore the various other [[templates|template]] files, and on last resort, explore the Ocaml source files!!
 +
 +
WARNING: one of the main issue with template programming is that all functions are not permanently available on all pages! Describing which are available where is beyond reach, and trial and error is the only solution, but being aware of the problem is important!!
  
 
Programming constructs:
 
Programming constructs:
Line 22: Line 24:
 
Functions callable with %apply:
 
Functions callable with %apply:
  
   capitalize
+
  a_of_b ("aaa", "bbb")
   language_name
+
  a_of_b2 ("aaa", "bbb", "ccc") test vowel at beginning of "ccc"
 +
  a_of_b_gr_eq_lev (??)
 +
   capitalize ("aaa")
 +
   language_name ("fr")
 
   nth("aaa"/"bbb"/"ccc"/"ddd", n)
 
   nth("aaa"/"bbb"/"ccc"/"ddd", n)
 
   nth_c("abcdef", n)
 
   nth_c("abcdef", n)
Line 32: Line 37:
 
Arithmetic and booleans:
 
Arithmetic and booleans:
  
   +, -, /, *, %, =, !=, <, <=, >, >=, "and", "or", "not", "in"
+
   +, -, /, *, %, =, !=, <, <=, >, >=, "and", "or", "not", "is_substr"
  
 
WARNING: all functions may not be fully available depending on the execution context!
 
WARNING: all functions may not be fully available depending on the execution context!
Line 97: Line 102:
 
</pre>
 
</pre>
  
 +
=== List of commands ===
 
This list does not claim to be exhaustive (but pretty close!!). A good way to understand the semantic of these commands is to explore the template files and observe how they are used (grep is your friend).
 
This list does not claim to be exhaustive (but pretty close!!). A good way to understand the semantic of these commands is to explore the template files and observe how they are used (grep is your friend).
  
Line 493: Line 499:
  
 
List of the commands appearing in URL with the form:
 
List of the commands appearing in URL with the form:
  %sm=COMMAND;p=param1;n=param2;
+
  %prefix;m=COMMAND;p=param1;n=param2; (or %sm=COMMAND... in notes and m=SRC .txt files)
  
 
This list does not claim to be exhaustive, and does not "explain" what each command does!
 
This list does not claim to be exhaustive, and does not "explain" what each command does!
Line 606: Line 612:
 
*[[image|SRC]]
 
*[[image|SRC]]
 
*[[wiznotes|WIZNOTES]] and the various WIZ related commands.
 
*[[wiznotes|WIZNOTES]] and the various WIZ related commands.
 
  
 
== Variables (evar and bvar) ==
 
== Variables (evar and bvar) ==
Line 731: Line 736:
 
</div>
 
</div>
  
== Gwd controlled variables ==
+
== Bvar variables used by Gwd ==
  
 
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4">
 
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4">
 +
access_by_key
 
  always_surname
 
  always_surname
 
  auth_file
 
  auth_file
 +
authorized_wizards_notes
 +
base_notes_title
 
  body_prop
 
  body_prop
 
  can_kill_ancestors
 
  can_kill_ancestors
 +
can_send_image
 
  counter
 
  counter
 
  death_symbol
 
  death_symbol
 +
default_lang
 
  default_sosa_ref
 
  default_sosa_ref
 
  disable_forum
 
  disable_forum
Line 750: Line 760:
 
  friend_passwd
 
  friend_passwd
 
  has_events
 
  has_events
 +
hide_private_names
 +
highlight_color
 
  history_diff
 
  history_diff
 
  history_path
 
  history_path
Line 756: Line 768:
 
  latest_event
 
  latest_event
 
  long_date
 
  long_date
 +
manitou
 
  max_anc_tree
 
  max_anc_tree
 
  max_ancestor_implex
 
  max_ancestor_implex
Line 766: Line 779:
 
  moderator_file
 
  moderator_file
 
  moved
 
  moved
 +
multi_parents
 +
no_image_for_visitor
 +
no_note_for_visitor
 
  notes_alias_file
 
  notes_alias_file
 
  notify_change
 
  notify_change
  opt
+
  passwd_
 
  place_surname_link_to_ind
 
  place_surname_link_to_ind
 
  place
 
  place
Line 774: Line 790:
 
  places_inverted
 
  places_inverted
 
  print_advanced_title
 
  print_advanced_title
 +
private_years
 
  propose_add_family
 
  propose_add_family
 
  ptempl
 
  ptempl
 +
public_if_no_date
 +
public_if_titles
 
  red_if_not_exist
 
  red_if_not_exist
 
  renamed
 
  renamed
 +
short_place_threshold
 +
supervisor
 
  template
 
  template
  wizard_descr_file
+
trace_auth
 +
trace_templ
 +
use_restrict
 +
  wizard_descr_file,
 +
wizard_just_friend
 
  wizard_passwd_file
 
  wizard_passwd_file
 +
wizard_passwd
 
</div>
 
</div>
  

Latest revision as of 16:10, 9 November 2020

150px-Geographylogo svg.png Language: English

Template programming (%if; ... %end;)

The template mechanism provides a very powerful mechanism to construct HTML (or other) pages according to the content of a GeneWeb base. This section is not intending to give an exhaustive description of the corresponding language. Through some examples extracted from gw/etc/perso.txt, it provides a glimpse of the possibility. The last two examples are extracted from a template that generates LaTeX rather than HTML.

For further analysis, explore the various other template files, and on last resort, explore the Ocaml source files!!

WARNING: one of the main issue with template programming is that all functions are not permanently available on all pages! Describing which are available where is beyond reach, and trial and error is the only solution, but being aware of the problem is important!!

Programming constructs:

 %define(p1, p2) ... %end;
 %if;(cond) [%elseif;] [%else;] %end;
 %let;xxx;zzz%in;
 %foreach; ... %end;
 %for;i;0;n;... %end;
 %apply;xxxx(p1, p2) or
 %apply; ... [%with;... [%and;] ...%end;]
 %nl; %nn; %sp; %sq;

Functions callable with %apply:

 a_of_b ("aaa", "bbb") 
 a_of_b2 ("aaa", "bbb", "ccc") test vowel at beginning of "ccc"
 a_of_b_gr_eq_lev (??)
 capitalize ("aaa")
 language_name ("fr")
 nth("aaa"/"bbb"/"ccc"/"ddd", n)
 nth_c("abcdef", n)
 blue_of_hsv
 red_of_hsv
 green_of_hsv

Arithmetic and booleans:

 +, -, /, *, %, =, !=, <, <=, >, >=, "and", "or", "not", "is_substr"

WARNING: all functions may not be fully available depending on the execution context!

 <title>%nn;
   %if;has_public_name;
     %if;has_qualifiers;%public_name; %qualifier;
     %else;%public_name; %surname;%end;
   %else;
     %if;has_qualifiers;%first_name; %qualifier;
     %else;%first_name; %surname;%end;
   %end;
 </title>
%define;married_to(sexx, date_place)
 %if;(sexx = 0 or sexx = 2)
   %if;are_married;[*married%t to:::date_place]0%nn;
   %elseif;are_not_married;[*relationship%t to:::date_place]0%nn;
   %elseif;are_engaged;[*engaged%t to:::date_place]0%nn;
   %elseif;is_no_sexes_check;[*relationship%t to:::date_place]0%nn;
   %elseif;is_no_mention;date_place [*with]%nn;
   %end;
 %else;
   %if;are_married;[*married%t to:::date_place]1%nn;
   %elseif;are_not_married;[*relationship%t to:::date_place]1%nn;
   %elseif;are_engaged;[*engaged%t to:::date_place]1%nn;
   %elseif;is_no_sexes_check;[*relationship%t to:::date_place]1%nn;
   %elseif;is_no_mention;date_place [*with]%nn;
   %end;
 %end;
%end;
%if;(bvar.can_send_image != "no" and image = "" and first_name != "?" and surname != "?")
     <li><a href="%prefix;m=SND_IMAGE;i=%index;" class="add_portrait">
            %if;(auto_image_file_name != "")[*modify picture]%else;[*add picture]%end;
          </a>
     </li>
%end;
 
%define;hgindex(alxx, snxx, fnxx, occxx)
  %if;(alxx = "0")
    %if;(occxx = "0")
      \index{snxx, fnxx}
    %else;
      \index{snxx, fnxx (occxx)}
    %end;
  %else;
    %if;(occxx = "0")
      \index{alxx, voir snxx, fnxx}
    %else;
      \index{alxx, voir snxx, fnxx (occxx)}
    %end;
  %end;
%end
%foreach;alias;
    {\it {\bf %alias;}}%apply;hgindex(alias, surname, first_name, occ)\\%nl;
%end;

List of commands

This list does not claim to be exhaustive (but pretty close!!). A good way to understand the semantic of these commands is to explore the template files and observe how they are used (grep is your friend).


"access_by_key"
"access"
"action"
"age"
"alias"
"add_in_sorted_list"
"add_in_sorted_listb"
"add_in_sorted_listc"
"anc_sosa" 
"ancestor_level" 
"ancestor_level2" 
"ancestor_surname" 
"ancestor_tree_line" 
"ancestor" 
"are_divorced"
"are_engaged"
"are_married"
"are_not_married"
"are_separated"
"auto_image_file_name"
"baptism_date" 
"baptism_note"
"baptism_place"
"baptism_witness" 
"base"
"birth_date" 
"birth_note"
"birth_place"
"birth_witness" 
"birth_witness" 
"birthday"
"border"
"browsing_with_sosa_ref"
"burial_date" 
"burial_note"
"burial_place"
"burial_witness" 
"bvar"
"cancel_links"
"canton"
"cell"
"cgi"
"charset"
"child_cnt" 
"child_name"
"child" 
"colspan"
"comment"
"commit"
"commit_date"
"compilation_time"
"computable_age"
"computable_death_age"
"computable_marriage_age"
"connections"
"consanguinity"
"count"
"country"
"county"
"cousin_level" 
"cremated_date" 
"cremation_place"
"cremation_witness" 
"date_begin" 
"date_end" 
"date"
"dates"
"day"
"death_age"
"death_date" 
"death_note"
"death_place"
"death_witness"
"decoded"
"desc_level"
"descendant_level" 
"died" 
"district"
"divorce_date"
"doctype"
"doctype_transitionnal"
"empty_sorted_list"
"empty_sorted_listb"
"empty_sorted_listc"
"enclosing"
"env"
"env_binding"
"evar"
"event_witness_kind" 
"event_witness_relation_kind" 
"event_witness_relation" 
"event_witness" 
"event"
"false"
"fam_access"
"family_cnt" 
"family" 
"father_age_at_birth" 
"father_sosa"
"father" 
"first_name_alias"
"first_name_key_strip"
"first_name_key_val"
"first_name_key"
"first_name"
"fnotes"
"fsources"
"fwitness"
"has_aliases"
"has_baptism_date" 
"has_baptism_note"
"has_baptism_place" 
"has_baptism_witnesses"
"has_birth_date" 
"has_birth_note"
"has_birth_place" 
"has_birth_witnesses"
"has_burial_date"
"has_burial_note"
"has_burial_place" 
"has_burial_witnesses"
"has_children"
"has_comment"
"has_consanguinity"
"has_cremation_date"
"has_cremation_place" 
"has_cremation_witnesses"
"has_date"
"has_death_date"
"has_death_note"
"has_death_place" 
"has_death_witnesses"
"has_event"
"has_families" 
"has_first_names_aliases"
"has_fnotes"
"has_fsources"
"has_fwitness"
"has_history"
"has_image" 
"has_linked_page"
"has_linked_pages"
"has_marriage_note"
"has_nephews_or_nieces" 
"has_nobility_titles" 
"has_note" 
"has_notes"
"has_occupation" 
"has_parents" 
"has_place"
"has_pnotes"
"has_possible_duplications" 
"has_psources"
"has_public_name"
"has_qualifiers"
"has_referer"
"has_relation_her"
"has_relation_him"
"has_relations"
"has_siblings"
"has_sosa"
"has_sources"
"has_spouse"
"has_src" 
"has_surnames_aliases"
"has_witnesses"
"hexa"
"highlight"
"history_file"
"hours"
"ident"
"ident_key"
"image_prefix"
"image_html_url" 
"image_medium_size"
"image_size" 
"image_small_size" 
"image_url" 
"image"
"incr_count"
"incr_count1"
"incr_count2"
"ind_access"
"index" 
"interval"
"is_buried"
"is_center"
"is_cremated"
"is_dead"
"is_descendant"
"is_empty"
"is_female" 
"is_first"
"is_invisible"
"is_last"
"is_left"
"is_male"
"is_no_mention"
"is_no_sexes_check"
"is_printed_by_template"
"is_private" 
"is_public" 
"is_restricted" 
"is_right"
"is_self"
"is_sibling_after" 
"is_sibling_before" 
"is_top"
"item"
"just_friend_wizard"
"lang"
"lazy_force"
"lazy_printed"
"left"
"level"
"linked_page"
"key"
"manitou"
"mark_descendants"
"marriage_age"
"marriage_date" 
"marriage_note"
"marriage_place"
"max_anc_level"
"max_cous_level"
"max_desc_level"
"minutes"
"misc_names"
"month"
"mother_age_at_birth" 
"mother_sosa"
"mother" 
"name"
"nb_children"
"nb_children_total"
"nb_events" 
"nb_families" 
"nb_ind"
"nb_times" 
"next_item" 
"nobility_title"
"note"
"notes"
"number_of_ancestors" 
"number_of_descendants" 
"number_of_subitems"
"occ"
"occupation"
"octal"
"on_baptism_date"
"on_birth_date"
"on_burial_date"
"on_cremation_date"
"on_date"
"on_death_date"
"on_marriage_date"
"origin_file"
"other"
"parent" 
"place_key" 
"place"
"pnotes"
"prec"
"prefix"
"prefix_2"
"prefix_base"
"prefix_base_2"
"prefix_base_password"
"prefix_base_password_2"
"prefix_no_templ"
"prefix_no_iz"
"prefix_no_pmod"
"prefix_no_wide"
"prefix_no_lang"
"prefix_no_all"
"prev_fam_father"
"prev_fam_index"
"prev_fam_mother"
"prev_family" 
"prev_item" 
"public_name"
"pvar"
"qvar"
"svar"
"tvar"
"qualifier"
"region"
"related_type"
"related"
"relation_her" 
"relation_him" 
"relation_type"
"relation" 
"reset_count"
"reset_count1"
"reset_count2"
"reset_desc_level"
"right"
"same"
"seconds"
"self" 
"set_infinite_desc_level"
"sex"
"slash_baptism_date"
"slash_birth_date"
"slash_burial_date"
"slash_cremation_date"
"slash_death_date"
"slash_divorce_date"
"slash_marriage_date"
"sorted_list_item"
"sorted_listb_item"
"sorted_listc_item" 
"sosa_access"
"sosa_in_list"
"sosa_link"
"sosa_ref" 
"sosa" 
"source_type"
"source"
"spouse"
"src"
"static_max_anc_level"
"static_max_desc_level"
"sueprvisor"
"surname_alias"
"surname_begin"
"surname_end"
"surname_key_strip"
"surname_key_val"
"surname_key"
"surname"
"title" 
"today"
"town"
"township"
"true"
"url"
"user"
"v"
"val"
"var"
"version"
"wedding_birthday"
"wid_hei"
"witness_relation" 
"witness"
"wizard"
"year"

Note for has_event (v7)

Note that the has_event function does not consider birth, baptism, death and burial as "events" per se (as they are often already listed in the personnal data of the individual). If you want those events to be taken into account in this function, then you have to add has_events=always in your .gwf parameter file.

Note also that if has_events=never, then has_event always returns False.

JavaScript

JavaScript can be inserted anytime within templates. JavaScript code may contain template commands as in:

<script type="text/javascript">
  <!--
  function over1(xx)
  {
   document.getElementById(xx).style.%if;(evarso="on")outline="#C0FEFF solid 6px"%else;backgroundColor="#CBFECE"%end;;
   return false;
  }
  function out1(xx)
  {
   document.getElementById(xx).style.%if;(evarso="on")outline="none"%else;backgroundColor=""%end;;
   return false;
  }
  -->
</script>

Note that GeneWeb does not perform any language interpretation ([text to be translated]) within HTML comments!

Macros (%x)

See Macros for a description of their use and a better/updated table.

Below is the result of calling all 26 lower case possible macros: This table is automatically generated by inserting a bit of HTML/GeneWeb code into the notes of one person in your base. The corresponding code is here

Table of GeneWeb macros.

Commands (m=XXX)

List of the commands appearing in URL with the form:

%prefix;m=COMMAND;p=param1;n=param2; (or %sm=COMMAND... in notes and m=SRC .txt files)

This list does not claim to be exhaustive, and does not "explain" what each command does!

"A"
"ADD_FAM" 
"ADD_FAM_OK" 
"ADD_IND" 
"ADD_IND_OK"  
"ADD_PAR" 
"ANM" 
"AN"
"AD"
"AM"
"AS_OK" 
"B" 
"C"
"CAL" 
"CHG_CHN" 
"CHG_CHN_OK" 
"CHG_FAM_ORD" 
"CHG_FAM_ORD_OK" 
"CONN_WIZ" *
"D"
"DAG" *
"DEL_FAM"  
"DEL_FAM_OK"  
"DEL_IMAGE"  
"DEL_IMAGE_OK" 
"DEL_IND"  
"DEL_IND_OK" 
"DOC" (* see IM for version 7 *)
"FORUM"
"FORUM_ADD"
"FORUM_ADD_OK"
"FORUM_DEL"
"FORUM_P_P"
"FORUM_SEARCH"
"FORUM_VAL"
"FORUM_VIEW"
"H"
"HIST" 
"HIST_CLEAN"  
"HIST_CLEAN_OK" 
"HIST_DIFF" 
"HIST_SEARCH" 
"IM" *
"IMH" *
"INV_FAM"  
"INV_FAM_OK"  
"KILL_ANC" 
"LB" 
"LD" 
"LINKED"
"LL" 
"LM" 
"LEX" 
"MISC_NOTES" 
"MISC_NOTES_SEARCH" 
"MOD_DATA"  
"MOD_DATA_OK"  
"MOD_FAM"  
"MOD_FAM_OK"  
"MOD_IND"  
"MOD_IND_OK" 
"MOD_NOTES"  
"MOD_NOTES_OK"  
"MOD_WDOC"  (* obsolete *)
"MOD_WDOC_OK"  (* obsolete *)
"MOD_WIZNOTES" *
"MOD_WIZNOTES_OK" *
"MRG" 
"MRG_DUP"  
"MRG_DUP_IND_Y_N" 
"MRG_DUP_FAM_Y_N" 
"MRG_FAM"  
"MRG_FAM_OK"  
"MRG_MOD_FAM_OK" 
"MRG_IND"  
"MRG_IND_OK"  
"MRG_MOD_IND_OK" 
"N"
"NG"
"NOTES" 
"OA" 
"OE" 
"P"
"POP_PYR" 
"PS" P
"R"
"REQUEST" 
"RL" 
"RLM" *
"S" 
"SND_IMAGE"  
"SND_IMAGE_OK" 
"SRC" *
"STAT"
"CHANGE_WIZ_VIS" *
"TT" 
"U" 
"VIEW_WIZNOTES" 
"WDOC" (* obsolete *)
"WIZNOTES" *
"WIZNOTES_SEARCH" *

Commands marked with a * are documented below:

Variables (evar and bvar)

GeneWeb proposed a general purpose mechanism allowing the user/programmer to extend at will the notion of variable described here.

If a new variable is defined in the .gwf configuration file, then it will be possible to test for the value of this variable in the context of a template file. For instance, if we have added

new_var=some-text

in .gwf, then the following code in the template will be able to perform some specific action:

%if; (bvar.new_var = "sometext" ) 
    ... perform some specific action ...
%end;

Similarly, if we have added a new variable in the URL of the query to GeneWeb (localhost:2317/base?p=first-name;n=last-name;lang=fr;tree=3, then it is possible to test for this variable with code such as:

%if; (evar.tree = 3 ) 
    ... display 3 generation tree ...
%end;

The value itself of such variables can be inserted in the body of a template by typing %evar.tree;, for instance:

<title>Tree with %evar.tree; generations</title>

The special variable var is treated in the following fashion within notes, sources and comments: If you define in the .gwf file a variable var_text=some_text, then invoquing the macro %vtext; in a note or a template will produce the text some_text as in the following example:

var_who=Bond, James Bond

"My name is %vwho;." in a note will be transformed into "My name is Bond, James Bond.".

This feature is used by some to facilitate signature of sources. The .gwf file contains a list of var_nickname definitions whose value is a full name and possibly a pointer to a page containing more detailed information:

var_henri=<a href="http://site/base?p=Firstname;n=lastname">First_name Lastname</a>

(no %x or %macro; in the value of the parameter!!).

Note: in latest version 7 of GeneWeb, the wiki syntax can be used in the parameter as in:

var_who=[[james/bond/James Bond]]

which will include the text "James Bond" and a link to the corresponding page.

Bvar variables used in templates

access_by_key
always_surname
auth_file
authorized_wizards_notes
birth_symbol
can_kill_ancestors
can_send_image
counter
css
datalist_fn
datalist_occu
datalist_place
datalist_sn
datalist_src
datalist_z1
death_symbol
default_fnav_images
default_fnav_semi
default_fnav_spouse
default_image_no
default_image=
default_lang
default_sosa_ref
defaut_lang
disable_forum
display_sosa
display_timeline
event_age
friend_passwd
full_siblings
hide_advanced_request
history_diff
history
jquery
latest_event
max_anc_level
max_anc_tree
max_cousins_level
max_dates
max_desc_level
max_desc_tree
maxlev
menu
misc
module_perso_ix
module_perso_tplnb
motd
move_comment
moved
multi_parents
no_image_for_visitor
no_note_for_visitor
notextarea
origin_file
p_mod
particles
perso_module_modnum
perso_module_tplnum
propose_add_family
propose_alias
propose_place_surnames
propose_qualifier
propose_titles
setup_http
setup_link
show_consang
show_flag
show_invisible
static_path
template
timeline
uppercase
use_cdn
var_img_ext
var_t_BIRTHA
visitor_access_msg_en
visitor_access_msg_lg
visitor_access
welcome_logo_style
welcome_logo
wide
wizard_just_friend
wizard_passwd_file
wizard_passwd

Bvar variables used by Gwd

access_by_key
always_surname
auth_file
authorized_wizards_notes
base_notes_title
body_prop
can_kill_ancestors
can_send_image
counter
death_symbol
default_lang
default_sosa_ref
disable_forum
doctype
dump_bad_images
expand_env
fast_alphabetic
forum_exclude_file
friend_passwd_file
friend_passwd
has_events
hide_private_names
highlight_color
history_diff
history_path
history
images_path
latest_event
long_date
manitou
max_anc_tree
max_ancestor_implex
max_cousins_level
max_cousins
max_desc_level
max_desc_tree
max_images_size
max_nb_update
moderator_file
moved
multi_parents
no_image_for_visitor
no_note_for_visitor
notes_alias_file
notify_change
passwd_
place_surname_link_to_ind
place
places_format
places_inverted
print_advanced_title
private_years
propose_add_family
ptempl
public_if_no_date
public_if_titles
red_if_not_exist
renamed
short_place_threshold
supervisor
template
trace_auth
trace_templ
use_restrict
wizard_descr_file,
wizard_just_friend
wizard_passwd_file
wizard_passwd

Building trees through direct url construction

See trees or trees/fr


GeneWeb Manual

Rembrandt Old Man Reading a Book.jpg

Use and manage genealogical databases

Technical annex