I have now created various note types and templates and have dealt with the logic behind them. Would not call myself a master, but I was able to gather some insights.
I have noticed that especially with note types with a large number of fields and therefore often card templates, the creation process and editing process is significantly hampered. Even for note types with 10 card templates, it is very time-consuming to make changes that affect all templates, because each template must be called and adjusted individually.
Since this cannot be solved simply by Copy and Past (due to the field variables), I suggest that an automated method be added to the current manual creation of card templates.
The goal is that both procedures generate the same outcome, which means that automatically generated card templates can/should be displayed in the same user mask. With the only difference that the automatically created ones are exclusively customizable programmatically.
Since there is a lot of Python in use anyway, one could imagine the following approach.
In principle, only a specific function name and a specific function signature would have to be specified/standardized. Afterwards “raise” returns would have to be caught AND/OR the return value.
import typing
def template(fields:typing.List[field]=[]) -> TemplateNote:
"""
function gets list of field names and creates and returns 0<n card templates.
fields:
list of field names provided in note index order
"""
# ...
return []
class field:
def __init__(self, name, index, content):
self.name = name # field name
self.index = index # field index within note
self.content = content # raw field content
def name(self) -> str:
return self.name
def index(self) -> int:
return self.index # 0<n
def content(self) -> str:
return self.content
class TemplateCard:
def template(self) -> str:
return "" # returns template as string
class TemplateNote:
def style(self) -> str:
"""
returns css styling as string; this method could later be moved inside TemplateCard for card specific styling
"""
return ""
def templates(self) -> typing.List[TemplateCard]:
return [] # returns list of all templates created
Counterarguments:
This could pose significant risks to the user due to insufficient resource constraints on the function.
Solution: Therefore, the function should not have access to resources or data other than those provided by the function arguments and those in the script itself.