def __init__(self): CardType.__init__(self) self.id = "4" self.name = _("Map") self.description = _("A card type for learning locations on a map") # List and name the keys. self.fields.append(("loc", _("Location"))) self.fields.append(("blank", _("Blank map"))) self.fields.append(("marked", _("Marked map"))) # Recognition. v = FactView(1, _("Recognition")) v.q_fields = ["marked"] v.a_fields = ["loc"] v.required_fields = ["marked", "loc"] self.fact_views.append(v) # Production. v = FactView(2, _("Production")) v.q_fields = ["loc","blank"] v.a_fields = ["marked"] v.required_fields = ["loc", "blank", "marked"] v.a_on_top_of_q = True self.fact_views.append(v) # The following field needs to be unique. self.unique_fields = ["loc"]
def __init__(self, language_name=""): CardType.__init__(self) if not language_name: self.id = "2" self.name = _("Front-to-back and back-to-front") self.is_language = False else: self.id = "2_" + language_name self.name = language_name self.is_language = True # List and name the keys. self.fields.append(("q", _("Question"))) self.fields.append(("a", _("Answer"))) # Front-to-back. v = FactView(1, _("Front-to-back")) v.q_fields = ["q"] v.a_fields = ["a"] v.required_fields = ["q"] self.fact_views.append(v) # Back-to-front. v = FactView(2, _("Back-to-front")) v.q_fields = ["a"] v.a_fields = ["q"] v.required_fields = ["a"] self.fact_views.append(v) # The question field needs to be unique. As for duplicates is the answer # field, these are better handled through a synonym detection plugin. self.unique_fields = ["q"]
def __init__(self, language_name=""): CardType.__init__(self) if not language_name: self.id = "3" self.name = _("Foreign word with pronunciation") self.is_language = False else: self.id = "3_" + language_name self.name = language_name self.is_language = True # List and name the keys. self.fields.append(("f", _("Foreign word"))) self.fields.append(("p", _("Pronunciation"))) self.fields.append(("t", _("Translation"))) # Recognition. v = FactView(1, _("Recognition")) v.q_fields = ["f"] v.a_fields = ["p", "t"] v.required_fields = ["f"] self.fact_views.append(v) # Production. v = FactView(2, _("Production")) v.q_fields = ["t"] v.a_fields = ["f", "p"] v.required_fields = ["t"] self.fact_views.append(v) # The foreign word field needs to be unique. As for duplicates is the # answer field, these are better handled through a synonym detection # plugin. self.unique_fields = ["f"]
def __init__(self): CardType.__init__(self) self.id = "5" self.name = _("Cloze deletion") self.description = \ _("A card type blanking out certain fragments in a text.") self.fields.append(("text", _("Text"))) self.unique_fields = ["text"] self.fact_views_can_be_deactivated = False
def __init__(self): CardType.__init__(self) self.id = "1" self.name = _("Front-to-back only") # List and name the keys. self.fields.append(("q", _("Question"))) self.fields.append(("a", _("Answer"))) # Front-to-back. v = FactView(1, _("Front-to-back")) v.q_fields = ["q"] v.a_fields = ["a"] v.required_fields = ["q"] self.fact_views.append(v) # The following field needs to be unique. self.unique_fields = ["q"]
def question(self, card, exporting): # Insert a blank line to improve layout. card.fact["_"] = "<br>" return CardType.question(self, card, exporting)
def card_type_from_log_entry(self, log_entry): # Get card type object to be deleted now. if log_entry["type"] == EventTypes.DELETED_CARD_TYPE: return self.card_type(log_entry["o_id"], is_id_internal=False) # Create an empty shell of card type object that will be deleted later # during this sync. if "fact_views" not in log_entry: card_type = CardType(self.component_manager) card_type.id = log_entry["o_id"] card_type.fact_views = [] card_type.fact_keys_and_names = [] return card_type # Create card type object. card_type = CardType(self.component_manager) card_type.id = log_entry["o_id"] card_type.name = log_entry["name"] card_type.fact_keys_and_names = eval(log_entry["fact_keys_and_names"]) card_type.fact_views = [] for fact_view_id in eval(log_entry["fact_views"]): card_type.fact_views.append( self.fact_view(fact_view_id, is_id_internal=False)) card_type.unique_fact_keys = eval(log_entry["unique_fact_keys"]) card_type.required_fact_keys = eval(log_entry["required_fact_keys"]) card_type.keyboard_shortcuts = eval(log_entry["keyboard_shortcuts"]) if "extra" in log_entry: card_type.extra_data = eval(log_entry["extra"]) return card_type
def card_type_from_log_entry(self, log_entry): # Get card type object to be deleted now. if log_entry["type"] == EventTypes.DELETED_CARD_TYPE: return self.get_card_type(log_entry["o_id"], id_is_internal=False) # Create an empty shell of card type object that will be deleted later # during this sync. if "fact_views" not in log_entry: card_type = CardType(self.component_manager) card_type.id = log_entry["o_id"] card_type.fact_views = [] return card_type # Create card type object. card_type = CardType(self.component_manager) card_type.id = log_entry["o_id"] card_type.name = log_entry["name"] card_type.fields = eval(log_entry["fields"]) card_type.fact_views = [] for fact_view_id in eval(log_entry["fact_views"]): card_type.fact_views.append(self.get_fact_view(fact_view_id, id_is_internal=False)) card_type.unique_fields = eval(log_entry["unique_fields"]) card_type.required_fields = eval(log_entry["required_fields"]) card_type.keyboard_shortcuts = eval(log_entry["keyboard_shortcuts"]) if "extra" in log_entry: card_type.extra_data = eval(log_entry["extra"]) return card_type
def is_fact_data_valid(self, fact_data): return CardType.is_fact_data_valid(self, fact_data)
def fact_key_format_proxies(self): proxies = CardType.fact_key_format_proxies(self) proxies["a"] = "f" return proxies