From 7956aebdce07d0aafd1df31b5f3f622104ea8d0f Mon Sep 17 00:00:00 2001 From: Oscar Nierstrasz Date: Wed, 12 Feb 2025 09:48:36 +0100 Subject: [PATCH 1/3] Updated UML diagram feenkcom/gtoolkit#4294 --- lepiter/46lrihou08u2u8wikuobvkk0y.lepiter | 93 +++++++---------------- 1 file changed, 28 insertions(+), 65 deletions(-) diff --git a/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter b/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter index 70edf3748..e3e7500d7 100644 --- a/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter +++ b/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter @@ -430,7 +430,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:46:06.344613+01:00" + "dateAndTimeString" : "2025-02-12T09:35:42.154931+01:00" } }, "editEmail" : { @@ -441,17 +441,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:17:12.372203+01:00" + "dateAndTimeString" : "2025-02-12T09:39:32.45457+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "tRamr9jpDQCFihsLDeapRg==" + "uidString" : "5alWkE/qDQCfWDwpBn7gBA==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "The implementation consists of three collaborating classes, {{gtClass:name=LeBlockQuoteSnippet}}, {{gtClass:name=LeBlockQuoteSnippetViewModel}}, and {{gtClass:name=LeBlockQuoteSnippetElement}}, which we will look at in detail further below. " + "string" : "A snippet implementation consists of three collaborating classes, a *model*, a *view* and a *view model*, following the *MVVM* pattern — [Model–view–viewmodel](https://en.wikipedia.org/wiki/Model%2Dview%2Dviewmodel). The *model* represents the domain model, holding the state of the snippet and all behavior related to the state. The *view model* holds and manages the state that is needed for the visual representation of the snippet in a page. Finally, the *view* is the element that provides the interactive display of the snippet. It is updated when the view model updates, and conversely, UI events that update the view are propagated to the view model. " }, { "__type" : "textSnippet", @@ -467,7 +467,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:58:19.463154+01:00" + "dateAndTimeString" : "2025-02-12T09:40:49.560628+01:00" } }, "editEmail" : { @@ -478,20 +478,20 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:58:19.463154+01:00" + "dateAndTimeString" : "2025-02-12T09:45:15.418541+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "cpdY29jpDQCTEwpMDeapRg==" + "uidString" : "nkypok/qDQChZAfzBn7gBA==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "Instead of using MVC (Model-View-Controller) pattern, these classes follow the *MVVM* pattern — [Model–view–viewmodel](https://en.wikipedia.org/wiki/Model%2Dview%2Dviewmodel). " + "string" : "Snippet model classes are all direct or indirect subclasses of {{gtClass:name=LeSnippet}}. In this case, a {{gtClass:name=LeBlockQuoteSnippet}} is a particular kind of *textual* snippet, so we define it as a subclass of {{gtClass:name=LePlainTextSnippet}}, an abstract superclass of pure textual (not code) snippets. As a model class, {{gtClass:name=LeBlockQuoteSnippet}} holds the actual content of the literal text block, as illustrated in this diagram at the left." }, { - "__type" : "textSnippet", + "__type" : "elementSnippet", "children" : { "__type" : "snippets", "items" : [ ] @@ -504,7 +504,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:58:33.680196+01:00" + "dateAndTimeString" : "2025-02-06T14:27:39.421077+01:00" } }, "editEmail" : { @@ -515,17 +515,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:59:20.032179+01:00" + "dateAndTimeString" : "2025-02-12T09:46:26.553931+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "hYYx3NjpDQCTb86SDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" + "uidString" : "HbNm8drpDQC2iJTPDeapRg==" }, - "string" : "The *model* represents the domain model, holding the state of the snippet and all behavior related to the state. In this case, {{gtClass:name=LeBlockQuoteSnippet}} holds the actual content of the literal text block." + "code" : "LeBlockQuoteSnippetUMLExamples new blockQuoteSnippetClassHierarchyWithPositions", + "elementHeight" : 413, + "codeHeight" : 50, + "codeVisible" : false }, { "__type" : "textSnippet", @@ -541,7 +541,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:20:05.245371+01:00" + "dateAndTimeString" : "2025-02-06T11:58:41.377623+01:00" } }, "editEmail" : { @@ -552,54 +552,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:29:32.061961+01:00" + "dateAndTimeString" : "2025-02-12T09:36:06.446774+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "9YZU1trpDQCzdzSMDeapRg==" + "uidString" : "DrGG3NjpDQCTdux+DeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "Snippet model classes are direct or indirect subclasses of {{gtClass:name=LeSnippet}}:" - }, - { - "__type" : "elementSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:27:39.421077+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-10T10:00:18.111946+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "HbNm8drpDQC2iJTPDeapRg==" - }, - "code" : "LeBlockQuoteSnippetUMLExamples new blockQuoteSnippetClassHierarchyWithAssociationsAndLabels", - "elementHeight" : 413, - "codeHeight" : 50, - "codeVisible" : false + "string" : "These are all subclasses of {{gtClass:name=LeSnippetViewModel}}. In this case, {{gtClass:name=LeBlockQuoteSnippetViewModel}} just needs to track the state of the text in the model, and it also tracks the `textCoderViewModel` of the view." }, { "__type" : "textSnippet", @@ -615,7 +578,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:58:41.377623+01:00" + "dateAndTimeString" : "2025-02-06T14:31:01.544875+01:00" } }, "editEmail" : { @@ -626,17 +589,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T17:57:47.86231+01:00" + "dateAndTimeString" : "2025-02-12T09:36:33.732353+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "DrGG3NjpDQCTdux+DeapRg==" + "uidString" : "bNxy/drpDQC4/WoIDeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "The *view model* holds and manages the state that is needed for the visual representation of the snippet in a page. These are all subclasses of {{gtClass:name=LeSnippetViewModel}}. In this case, {{gtClass:name=LeBlockQuoteSnippetViewModel}} just needs to track the state of the text in the model, and it also tracks the `textCoderViewModel` of the view." + "string" : "Snippet views all subclass {{gtClass:name=LeSnippetElement}}. In this case, {{gtClass:name=LeBlockQuoteSnippetElement}} is a composite element holding the {{gtClass:name=GtTextualCoderEditorElement}} instance in which the block text is edited." }, { "__type" : "textSnippet", @@ -652,7 +615,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:31:01.544875+01:00" + "dateAndTimeString" : "2025-02-06T11:46:06.344613+01:00" } }, "editEmail" : { @@ -663,17 +626,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T17:58:30.494881+01:00" + "dateAndTimeString" : "2025-02-12T09:34:33.179107+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "bNxy/drpDQC4/WoIDeapRg==" + "uidString" : "tRamr9jpDQCFihsLDeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "The *view* is the element that provides the interactive display of the snippet. It is updated when the view model updates, and conversely, UI events that update the view are propagated to the view model. Snippet views all subclass {{gtClass:name=LeSnippetElement}}. In this case, {{gtClass:name=LeBlockQuoteSnippetElement}} is a composite element holding the {{gtClass:name=GtTextualCoderEditorElement}} instance in which the block text is edited." + "string" : " {{gtClass:name=LeBlockQuoteSnippet}}, {{gtClass:name=LeBlockQuoteSnippetViewModel}}, and {{gtClass:name=LeBlockQuoteSnippetElement}}, which we will look at in detail further below. " }, { "__type" : "textSnippet", From 17563588918e1ea7fa30bfaa7b7ddcdc890619f2 Mon Sep 17 00:00:00 2001 From: Oscar Nierstrasz Date: Wed, 12 Feb 2025 10:39:52 +0100 Subject: [PATCH 2/3] Revised snippet tutorial to match the refactored hierarchy feenkcom/gtoolkit#4294 --- lepiter/46lrihou08u2u8wikuobvkk0y.lepiter | 1266 ++++++++------------- 1 file changed, 448 insertions(+), 818 deletions(-) diff --git a/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter b/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter index e3e7500d7..4a3ebf986 100644 --- a/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter +++ b/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter @@ -4,43 +4,6 @@ "children" : { "__type" : "snippets", "items" : [ - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:02:11.546784+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:02:35.635444+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "75/YhULqDQC8M1m8AFj72w==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "{{gtTodo:label=Revise this tutorial to reflect the new, refactored hierarchy.}}" - }, { "__type" : "textSnippet", "children" : { @@ -523,7 +486,7 @@ "uidString" : "HbNm8drpDQC2iJTPDeapRg==" }, "code" : "LeBlockQuoteSnippetUMLExamples new blockQuoteSnippetClassHierarchyWithPositions", - "elementHeight" : 413, + "elementHeight" : 367, "codeHeight" : 50, "codeVisible" : false }, @@ -541,44 +504,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:58:41.377623+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:36:06.446774+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "DrGG3NjpDQCTdux+DeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "These are all subclasses of {{gtClass:name=LeSnippetViewModel}}. In this case, {{gtClass:name=LeBlockQuoteSnippetViewModel}} just needs to track the state of the text in the model, and it also tracks the `textCoderViewModel` of the view." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:31:01.544875+01:00" + "dateAndTimeString" : "2025-02-12T09:54:22.057576+01:00" } }, "editEmail" : { @@ -589,17 +515,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:36:33.732353+01:00" + "dateAndTimeString" : "2025-02-12T09:54:40.123675+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "bNxy/drpDQC4/WoIDeapRg==" + "uidString" : "K/0W00/qDQCvA0dZCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "Snippet views all subclass {{gtClass:name=LeSnippetElement}}. In this case, {{gtClass:name=LeBlockQuoteSnippetElement}} is a composite element holding the {{gtClass:name=GtTextualCoderEditorElement}} instance in which the block text is edited." + "string" : "Snippet view model classes are all subclasses of {{gtClass:name=LeSnippetViewModel}}. In this case, {{gtClass:name=LeBlockQuoteSnippetViewModel}} subclasses {{gtClass:name=LePlainTextCoderSnippetViewModel}} and tracks the state of the text within a separate `textCoderViewModel`." }, { "__type" : "textSnippet", @@ -615,7 +541,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:46:06.344613+01:00" + "dateAndTimeString" : "2025-02-12T09:54:58.791928+01:00" } }, "editEmail" : { @@ -626,17 +552,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:34:33.179107+01:00" + "dateAndTimeString" : "2025-02-12T09:56:14.936848+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "tRamr9jpDQCFihsLDeapRg==" + "uidString" : "uYpH1U/qDQCvo8+1CtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : " {{gtClass:name=LeBlockQuoteSnippet}}, {{gtClass:name=LeBlockQuoteSnippetViewModel}}, and {{gtClass:name=LeBlockQuoteSnippetElement}}, which we will look at in detail further below. " + "string" : "Snippet views all subclass {{gtClass:name=LeSnippetElement}}. In this case, {{gtClass:name=LeBlockQuoteSnippetElement}} subclasses {{gtClass:name=LePlainTextCoderSnippetElement}}, which provides a basic `editorElement` for editing text, an instance of {{gtClass:name=GtTextualCoderEditorElement}}. " }, { "__type" : "textSnippet", @@ -865,40 +791,6 @@ "__type" : "textStyle" }, "string" : "There are several methods to implement. We'll get to these step by step." - }, - { - "__type" : "pharoSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:35:17.443513+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:01:32.80693+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "IpGzDNvpDQCAWV1RDeapRg==" - }, - "code" : "LePlainTextSnippet allMethods select: #isAbstract" } ] }, @@ -939,10 +831,45 @@ "__type" : "snippets", "items" : [ { - "__type" : "commentSnippet", + "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ ] + "items" : [ + { + "__type" : "pharoSnippet", + "children" : { + "__type" : "snippets", + "items" : [ ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:04:13.47266+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:04:19.527227+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "CE5X9k/qDQC3984cCtuOFw==" + }, + "code" : "(LeBlockQuoteSnippet new string: 'hello') text" + } + ] }, "createEmail" : { "__type" : "email", @@ -952,7 +879,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:02:44.632223+01:00" + "dateAndTimeString" : "2025-02-12T09:58:48.422528+01:00" } }, "editEmail" : { @@ -963,20 +890,96 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:03:08.339842+01:00" + "dateAndTimeString" : "2025-02-12T10:00:57.025172+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Y3jRh0LqDQC9mrAjAFj72w==" + "uidString" : "j3H34k/qDQCyEBH6CtuOFw==" }, - "string" : "CONTINUE EDITING HERE" - }, + "paragraphStyle" : { + "__type" : "textStyle" + }, + "string" : "We inherit all the state we need from {{gtClass:name=LePlainTextSnippet}}, namely a `text` slot, which is initialized to an instance of {{gtClass:name=BlRunRopedText}}." + } + ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T14:32:13.130398+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-11T18:02:57.222458+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "Zyi3AdvpDQC7UZUTDeapRg==" + }, + "paragraphStyle" : { + "__type" : "textStyle" + }, + "string" : "**(2)** Define and initialize any needed state. Define any accessors needed to recreate an instance with its state from plain strings." + }, + { + "__type" : "textSnippet", + "children" : { + "__type" : "snippets", + "items" : [ { "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ ] + "items" : [ + { + "__type" : "pharoSnippet", + "children" : { + "__type" : "snippets", + "items" : [ ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:02:40.954814+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:13:18.519909+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "MZjT8E/qDQC19To+CtuOFw==" + }, + "code" : "(LeBlockQuoteSnippet new\r\tstring: 'Literal text';\r\tyourself) storeString" + } + ] }, "createEmail" : { "__type" : "email", @@ -986,7 +989,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:37.356744+01:00" + "dateAndTimeString" : "2025-02-06T14:53:02.113058+01:00" } }, "editEmail" : { @@ -997,18 +1000,56 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:37.356744+01:00" + "dateAndTimeString" : "2025-02-12T10:03:45.38728+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "oOhCTtvpDQCUWnDdDeapRg==" + "uidString" : "vVcRTNvpDQCUMvd9DeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "{{gtClass:name=LeTextualSnippet}} requires us to implement {{gtMethod:name=LeTextualSnippet>>#text}}, so we follow the example of {{gtClass:name=LeTextSnippet}} by defining a slot `text`, and accessors {{gtMethod:name=LeBlockQuoteSnippet>>#text}} and {{gtMethod:name=LeBlockQuoteSnippet>>#text:}}. " - }, + "string" : "We also inherit {{gtMethod:name=LeBlockQuoteSnippet>>#storeOn:}}, which works out of the box for our new snippet:" + } + ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T14:44:01.888975+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T14:53:17.612869+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "aPj1K9vpDQCJG8aNDeapRg==" + }, + "paragraphStyle" : { + "__type" : "textStyle" + }, + "string" : "**(3)** Implement `#storeOn:` to generate Smalltalk code which, when evaluated, creates a copy of this snippet." + }, + { + "__type" : "textSnippet", + "children" : { + "__type" : "snippets", + "items" : [ { "__type" : "textSnippet", "children" : { @@ -1023,7 +1064,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:47:11.948772+01:00" + "dateAndTimeString" : "2025-02-06T14:57:54.637943+01:00" } }, "editEmail" : { @@ -1034,17 +1075,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:37.36131+01:00" + "dateAndTimeString" : "2025-02-06T15:11:59.01782+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Xw5KN9vpDQCKuk+rDeapRg==" + "uidString" : "y7WYXdvpDQCaJb+IDeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "The `text` slot should be an instance of {{gtClass:name=BlRunRopedText}}, so we also implement {{gtMethod:name=LeBlockQuoteSnippet>>#string:}} so we can initialize the text from a plain string. This will be needed later when we create a block quote snippet from a string representation." + "string" : "Snippets belong to Lepiter pages, which are (normally) stored in a Lepiter database as JSON files. (There are also transient databases that exist only in memory, but the more usual case if for databases to be persisted to the file system.) To support this, we must specify how to map the snippet to its JSON representation (and back)." }, { "__type" : "textSnippet", @@ -1060,7 +1101,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:55:25.780116+01:00" + "dateAndTimeString" : "2025-02-12T10:04:48.33191+01:00" } }, "editEmail" : { @@ -1071,17 +1112,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:56:01.222302+01:00" + "dateAndTimeString" : "2025-02-12T10:05:20.540974+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Uf5aU9vpDQCVvcf9DeapRg==" + "uidString" : "mzRr+E/qDQC4KNylCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "Note that we inherit {{gtMethod:name=LeTextualSnippet>>#string}}, which returns the string representation of a textual snippet's text." + "string" : "We inherit {{gtMethod:name=LePlainTextSnippet class>>#leJsonV4AttributeMapping}}, and since we add no new state, this works out of the box." }, { "__type" : "textSnippet", @@ -1097,7 +1138,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:56:54.785578+01:00" + "dateAndTimeString" : "2025-02-12T10:05:21.6658+01:00" } }, "editEmail" : { @@ -1108,281 +1149,58 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:57:04.285827+01:00" + "dateAndTimeString" : "2025-02-12T10:06:18.069209+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "WnAHWtvpDQCZlXgkDeapRg==" + "uidString" : "lt1n+k/qDQC5svmVCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We also implement {{gtMethod:name=LeBlockQuoteSnippet>>#contentAsString}}, which is needed by the custom view {{gtMethod:name=LeSnippets>>#gtSnippetsFor:}}." - } - ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:32:13.130398+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:02:57.222458+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "Zyi3AdvpDQC7UZUTDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "**(2)** Define and initialize any needed state. Define any accessors needed to recreate an instance with its state from plain strings." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:02.113058+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:54:53.034529+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "vVcRTNvpDQCUMvd9DeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "We implement {{gtMethod:name=LeBlockQuoteSnippet>>#storeOn:}} to generate a snippet from its string contents." - } - ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:44:01.888975+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:17.612869+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "aPj1K9vpDQCJG8aNDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "**(3)** Implement `#storeOn:` to generate Smalltalk code which, when evaluated, creates a copy of this snippet." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:57:54.637943+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:11:59.01782+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "y7WYXdvpDQCaJb+IDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "Snippets belong to Lepiter pages, which are (normally) stored in a Lepiter database as JSON files. (There are also transient databases that exist only in memory, but the more usual case if for databases to be persisted to the file system.) To support this, we must specify how to map the snippet to its JSON representation (and back)." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:12:06.364622+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:12:18.805051+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "mwJdkNvpDQCosQ+CDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "Here, for example, is the JSON representation of this page:" - }, - { - "__type" : "pharoSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:08:22.653537+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:21:21.74495+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "2ncHg9vpDQCnWmP0DeapRg==" - }, - "code" : "(thisSnippet database monitor \r\tpageFileReference: thisSnippet page) contents" - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:59:54.979128+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:07:03.431008+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "z/nEZNvpDQChFc1TDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "We implement {{gtMethod:name=LeBlockQuoteSnippet class>>#leJsonV4AttributeMapping}}, which simply adds the mapping `#string -> #string` to the inherited mapping. This will map the value of the string slot to the JSON `\"string\"` attribute." + "string" : "On the other hand, we have to implement {{gtMethod:name=LeBlockQuoteSnippet class>>#leJsonV4Name}} to return a name — `#blockQuoteSnippet` — for this kind of snippet in the string representation." }, { "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ ] + "items" : [ + { + "__type" : "pharoSnippet", + "children" : { + "__type" : "snippets", + "items" : [ ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T15:13:27.142934+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T15:13:35.102422+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "hJctldvpDQCr5frrDeapRg==" + }, + "code" : "LeJsonV4 cleanUniqueInstance." + } + ] }, "createEmail" : { "__type" : "email", @@ -1392,7 +1210,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:07:07.838961+01:00" + "dateAndTimeString" : "2025-02-06T15:12:47.571646+01:00" } }, "editEmail" : { @@ -1403,17 +1221,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:08:17.207118+01:00" + "dateAndTimeString" : "2025-02-06T15:13:24.48246+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "IOORftvpDQClRVT9DeapRg==" + "uidString" : "JsjRktvpDQCp/LX0DeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We also implement {{gtMethod:name=LeBlockQuoteSnippet class>>#leJsonV4Name}} to return a name for this kind of snippet in the string representation." + "string" : "*NB:* To register the new mapping, we must update the singleton that stores all the mappings:" }, { "__type" : "textSnippet", @@ -1434,7 +1252,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:27.142934+01:00" + "dateAndTimeString" : "2025-02-06T15:13:35.39599+01:00" } }, "editEmail" : { @@ -1445,14 +1263,14 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:35.102422+01:00" + "dateAndTimeString" : "2025-02-06T15:16:32.517605+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "hJctldvpDQCr5frrDeapRg==" + "uidString" : "doqrldvpDQCr9knqDeapRg==" }, - "code" : "LeJsonV4 cleanUniqueInstance." + "code" : "LeJsonV4 cleanUniqueInstance uniqueInstance \r\tnewReader mappings\r\t\tincludesKey: LeBlockQuoteSnippet" } ] }, @@ -1464,7 +1282,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:12:47.571646+01:00" + "dateAndTimeString" : "2025-02-06T15:16:45.482954+01:00" } }, "editEmail" : { @@ -1475,17 +1293,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:24.48246+01:00" + "dateAndTimeString" : "2025-02-06T15:17:03.289264+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "JsjRktvpDQCp/LX0DeapRg==" + "uidString" : "rwUAodvpDQCsa0ZkDeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "*NB:* To register the new mapping, we must update the singleton that stores all the mappings:" + "string" : "We can verify that a mapping now exists:" }, { "__type" : "textSnippet", @@ -1506,7 +1324,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:35.39599+01:00" + "dateAndTimeString" : "2025-02-12T10:06:31.903491+01:00" } }, "editEmail" : { @@ -1517,14 +1335,14 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:16:32.517605+01:00" + "dateAndTimeString" : "2025-02-12T10:08:21.537365+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "doqrldvpDQCr9knqDeapRg==" + "uidString" : "h5eX/k/qDQC6opaiCtuOFw==" }, - "code" : "LeJsonV4 cleanUniqueInstance uniqueInstance \r\tnewReader mappings\r\t\tincludesKey: LeBlockQuoteSnippet" + "code" : "LeJsonV4 uniqueInstance\r\tserializePretty: (LeBlockQuoteSnippet new\r\t\t\tstring: 'hello';\r\t\t\tyourself)" } ] }, @@ -1536,7 +1354,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:16:45.482954+01:00" + "dateAndTimeString" : "2025-02-12T10:07:53.816121+01:00" } }, "editEmail" : { @@ -1547,17 +1365,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:17:03.289264+01:00" + "dateAndTimeString" : "2025-02-12T10:10:05.796239+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "rwUAodvpDQCsa0ZkDeapRg==" + "uidString" : "mwJdkNvpDQCosQ+CDeapRg==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We can verify that a mapping now exists:" + "string" : "and we can serialize a block snippet like this:" } ] }, @@ -1795,7 +1613,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:23:08.300569+01:00" + "dateAndTimeString" : "2025-02-12T10:10:33.283104+01:00" } }, "editEmail" : { @@ -1806,17 +1624,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:29:03.772511+01:00" + "dateAndTimeString" : "2025-02-12T10:11:17.749299+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Yl7Rt9vpDQCxJd8ADeapRg==" + "uidString" : "S736DFDqDQC8QyPhCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "In our case, there are no such dependencies, so {{gtMethod:name=LeBlockQuoteSnippet>>#canMoveToAnotherDatabase}} simply returns true." + "string" : "We inherit this method from {{gtMethod:name=LeTextualSnippet>>#canMoveToAnotherDatabase}}, and do not need to change it." }, { "__type" : "textSnippet", @@ -1832,7 +1650,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:33:05.416736+01:00" + "dateAndTimeString" : "2025-02-12T10:11:52.49444+01:00" } }, "editEmail" : { @@ -1843,17 +1661,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:35:35.45713+01:00" + "dateAndTimeString" : "2025-02-12T10:12:16.486438+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "W6No29vpDQCBnAdtDeapRg==" + "uidString" : "wWqzEVDqDQC9qMbRCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We also an example page containing the snippet to {{gtClass:name=MovingPagesExamples}} for testing. We define {{gtMethod:name=MovingPagesExamples>>#blockQuoteSnippetPage}}, making sure to set its method category to `*GToolkit-Demo-Snippets`, so it will be an extension method from the new snippet's package, so as not to introduce a dependency from the Lepiter core package to our package. When we are done we can check that the tests pass, especially {{gtMethod:name=MovingPagesExamples>>#moveAllPages}}. " + "string" : "We need to add a test case, however, of an example page containing the snippet to {{gtClass:name=MovingPagesExamples}} for testing. We define {{gtMethod:name=MovingPagesExamples>>#blockQuoteSnippetPage}}, making sure to set its method category to `*GToolkit-Demo-Snippets`, so it will be an extension method from the new snippet's package, so as not to introduce a dependency from the Lepiter core package to our package. When we are done we can check that the tests pass, especially {{gtMethod:name=MovingPagesExamples>>#moveAllPages}}. " } ] }, @@ -1897,7 +1715,42 @@ "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ ] + "items" : [ + { + "__type" : "pharoSnippet", + "children" : { + "__type" : "snippets", + "items" : [ ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:16:26.32524+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:16:34.049395+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "sL4FIlDqDQCA4/+PCtuOFw==" + }, + "code" : "LeBlockQuoteSnippet empty" + } + ] }, "createEmail" : { "__type" : "email", @@ -1918,7 +1771,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:29:40.271922+01:00" + "dateAndTimeString" : "2025-02-12T10:16:42.855263+01:00" } }, "uid" : { @@ -1928,7 +1781,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We trivially return `self new` in {{gtMethod:name=LeBlockQuoteSnippet class>>#empty}}" + "string" : "Again, we inherit {{gtMethod:name=LeBlockQuoteSnippet class>>#empty}}, and do not need to change anything:" } ] }, @@ -2026,7 +1879,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:30:29.203244+01:00" + "dateAndTimeString" : "2025-02-12T09:58:18.867073+01:00" } }, "uid" : { @@ -2036,7 +1889,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "**(8)** Define the View Model class, and use it to implement `asSnippetViewModel` to return an instance of the view model holding all the state needed to create the view." + "string" : "**(8)** Define the View Model class, and use it to implement the required method `asSnippetViewModel` to return an instance of the view model holding all the state needed to create the view." }, { "__type" : "textSnippet", @@ -2057,7 +1910,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:53:53.274692+01:00" + "dateAndTimeString" : "2025-02-12T10:20:01.885278+01:00" } }, "editEmail" : { @@ -2068,57 +1921,96 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:14.167611+01:00" + "dateAndTimeString" : "2025-02-12T10:37:40.336031+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "3XDJJdzpDQCdPpd/Dtc83A==" + "uidString" : "y/LeLlDqDQCFHmIqCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "The specific list will depend on where in the class hierarchy the snippet class is defined. We check for any remaining abstract methods as follows:" - }, - { - "__type" : "pharoSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:38:32.663549+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:38:38.230682+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "Qwfq7tvpDQCKXgVvDeapRg==" - }, - "code" : "LeBlockQuoteSnippet allMethods select: #isAbstract" - }, + "string" : "We implement {{gtMethod:name=LeBlockQuoteSnippet>>#acceptVisitor:}} to simply apply `visitTextSnippet:`. If we want to take special action, we will have to add a new `visit` method, and possibly adapt the existing visitors. See the trait {{gtClass:name=TLeModelVisitor}}. " + } + ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:17:19.273243+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-12T10:19:45.312823+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "dKMtJVDqDQCBGPe8CtuOFw==" + }, + "paragraphStyle" : { + "__type" : "textStyle" + }, + "string" : "**(9)** Implement `acceptVisitor:`. This is needed for any utilities that visit the pages of a Lepiter database, such as the HTML export facility." + }, + { + "__type" : "textSnippet", + "children" : { + "__type" : "snippets", + "items" : [ { "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ ] + "items" : [ + { + "__type" : "pharoSnippet", + "children" : { + "__type" : "snippets", + "items" : [ ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T15:38:32.663549+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T15:38:38.230682+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "Qwfq7tvpDQCKXgVvDeapRg==" + }, + "code" : "LeBlockQuoteSnippet allMethods select: #isAbstract" + } + ] }, "createEmail" : { "__type" : "email", @@ -2128,7 +2020,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:39:41.297734+01:00" + "dateAndTimeString" : "2025-02-06T15:53:53.274692+01:00" } }, "editEmail" : { @@ -2139,17 +2031,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:54:45.01621+01:00" + "dateAndTimeString" : "2025-02-06T16:04:14.167611+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "yk0B89vpDQCLjqM6DeapRg==" + "uidString" : "3XDJJdzpDQCdPpd/Dtc83A==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We still have to implement abstract methods `asPreviewElement`, `appendText:source:`, `updateText:source:`, `asToolElement` and `asPhlowTool`. We can adapt the implementations from {{gtClass:name=LeTextSnippet}}. " + "string" : "The specific list will depend on where in the class hierarchy the snippet class is defined. We check for any remaining abstract methods as follows:" }, { "__type" : "textSnippet", @@ -2165,7 +2057,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:36:04.963671+01:00" + "dateAndTimeString" : "2025-02-12T10:22:10.990024+01:00" } }, "editEmail" : { @@ -2176,7 +2068,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:54:34.384412+01:00" + "dateAndTimeString" : "2025-02-12T10:22:25.238873+01:00" } }, "uid" : { @@ -2186,7 +2078,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We can now verify that all abstract methods are implemented." + "string" : "There are no remaining abstract methods left to implement, so we are done here." } ] }, @@ -2209,7 +2101,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:39:12.733755+01:00" + "dateAndTimeString" : "2025-02-12T10:17:22.40185+01:00" } }, "uid" : { @@ -2219,7 +2111,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "**(9)** Implement any remaining abstract methods." + "string" : "**(10)** Implement any remaining abstract methods." } ] }, @@ -2289,7 +2181,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:16:58.280271+01:00" + "dateAndTimeString" : "2025-02-12T10:28:45.056174+01:00" } }, "uid" : { @@ -2299,7 +2191,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We define {{gtClass:name=LeBlockQuoteSnippetViewModel}} as a subclass of {{gtClass:name=LeTextualSnippetViewModel}}. " + "string" : "We define {{gtClass:name=LeBlockQuoteSnippetViewModel}} as a subclass of {{gtClass:name=LePlainTextCoderSnippetViewModel}}. This class provides the scaffolding needed to subscribe to the snippet model, and to update the view model when there are changes." } ] }, @@ -2353,44 +2245,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:19:27.734205+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:25:07.246045+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "om15e9zpDQCka0InDtc83A==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "We inherit the `snippetModel` slot from {{gtClass:name=LeAbstractSnippetViewModel}} (via the trait {{gtClass:name=TLeWithSnippetModel}}), so we trivially define `LeBlockQuoteSnippetViewModel>>#text` to return the `text` of our model." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:21:45.792539+01:00" + "dateAndTimeString" : "2025-02-12T10:24:09.211425+01:00" } }, "editEmail" : { @@ -2401,17 +2256,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:25:10.732668+01:00" + "dateAndTimeString" : "2025-02-12T10:25:01.793811+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "cAp6idzpDQCqL3ZrDtc83A==" + "uidString" : "tdCcPVDqDQCJy3DECtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We also define a slot `textEditorModel` to represent the state for the view's editor, with accessors, and an initialization method `LeBlockQuoteSnippetViewModel>>#initializeTextEditorModel`. " + "string" : "We inherit `textCoder` and `textCoderViewModel`, but we still have to initialize them." }, { "__type" : "textSnippet", @@ -2427,7 +2282,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:22:13.546356+01:00" + "dateAndTimeString" : "2025-02-12T10:25:04.914764+01:00" } }, "editEmail" : { @@ -2438,17 +2293,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:25:14.092722+01:00" + "dateAndTimeString" : "2025-02-12T10:26:10.493965+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "F4Yhi9zpDQCqUEzNDtc83A==" + "uidString" : "7M/uQFDqDQCLAIe+CtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "*NB:* in this method we listen for announcements that the text has changed, and notify our dependents that the snippet has changed via `LeBlockQuoteSnippetViewModel>>#announceTextChanged`." + "string" : "We define {{gtMethod:name=LeBlockQuoteSnippetViewModel>>#initializeTextCoderViewModel}} to define the text coder model and view model that we will need for the view." } ] }, @@ -2567,7 +2422,42 @@ "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ ] + "items" : [ + { + "__type" : "pharoSnippet", + "children" : { + "__type" : "snippets", + "items" : [ ] + }, + "createEmail" : { + "__type" : "email", + "emailString" : "" + }, + "createTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T16:27:20.140778+01:00" + } + }, + "editEmail" : { + "__type" : "email", + "emailString" : "" + }, + "editTime" : { + "__type" : "time", + "time" : { + "__type" : "dateAndTime", + "dateAndTimeString" : "2025-02-06T16:27:27.823121+01:00" + } + }, + "uid" : { + "__type" : "uid", + "uidString" : "oMlnndzpDQCysejZDtc83A==" + }, + "code" : "LeBlockQuoteSnippetViewModel allMethods select: #isAbstract" + } + ] }, "createEmail" : { "__type" : "email", @@ -2600,40 +2490,6 @@ }, "string" : "As before, we can check if any abstract methods remain to be implemented:" }, - { - "__type" : "pharoSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:27:20.140778+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:27:27.823121+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "oMlnndzpDQCysejZDtc83A==" - }, - "code" : "LeBlockQuoteSnippetViewModel allMethods select: #isAbstract" - }, { "__type" : "textSnippet", "children" : { @@ -2648,7 +2504,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:26:47.963398+01:00" + "dateAndTimeString" : "2025-02-12T10:29:08.04352+01:00" } }, "editEmail" : { @@ -2659,7 +2515,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:54:39.794241+01:00" + "dateAndTimeString" : "2025-02-12T10:29:18.305305+01:00" } }, "uid" : { @@ -2669,7 +2525,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We implement {{gtMethod:name=LeBlockQuoteSnippetViewModel>>#moveCursorAt:}} with the help of our `textEditorModel`. This is needed to support the arrow keys moving up and down within a page between snippets." + "string" : "There is nothing left to implement, so we are done here." } ] }, @@ -2772,7 +2628,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:30:07.477629+01:00" + "dateAndTimeString" : "2025-02-12T10:30:47.902342+01:00" } }, "uid" : { @@ -2782,7 +2638,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We define {{gtClass:name=LeBlockQuoteSnippetElement}} as a subclass of {{gtClass:name=LeTextualSnippetElement}}, which serves as a base element for textual snippets." + "string" : "We define {{gtClass:name=LeBlockQuoteSnippetElement}} as a subclass of {{gtClass:name=LePlainTextCoderSnippetElement}}, which serves as a base element for text-based snippets, and includes an instance of {{gtClass:name=GtTextualCoderEditorElement}} as its `editorElement`." } ] }, @@ -2847,7 +2703,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:33:30.007098+01:00" + "dateAndTimeString" : "2025-02-12T10:32:28.444933+01:00" } }, "uid" : { @@ -2857,44 +2713,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We need a text editor for the literal block, so we define {{gtMethod:name=LeBlockQuoteSnippetElement>>#initializeEditorElement}} to initialize a `editorElement` slot to a {{gtClass:name=BrEditor}} instance, and set its background to a very light gray." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:33:30.387966+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:34:42.286266+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "AlB5s9zpDQC6V9xvDtc83A==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "We implement the required method {{gtMethod:name=LeTextualSnippetElement>>#editor}} to return this element." + "string" : "We inherit and override {{gtMethod:name=LeBlockQuoteSnippetElement>>#initializeEditorElement}} to set the editor elements background to a very light gray, and to use a code font." } ] }, @@ -2917,7 +2736,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:31:49.287632+01:00" + "dateAndTimeString" : "2025-02-12T10:31:08.479131+01:00" } }, "uid" : { @@ -2927,7 +2746,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "**(2)** Define and initialize the snippet element. Implement the required method {{gtMethod:name=LeSnippetElement>>#snippetContent}} to return this element." + "string" : "**(2)** Define and initialize the snippet element. " }, { "__type" : "textSnippet", @@ -2938,42 +2757,7 @@ "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ - { - "__type" : "commentSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:38:14.335072+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:39:07.297848+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "gv9lxNzpDQCCSQ5GDtc83A==" - }, - "string" : "Do we really need *both* a text editor model *and* a BlText `text` object? " - } - ] + "items" : [ ] }, "createEmail" : { "__type" : "email", @@ -2983,7 +2767,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:35:52.584939+01:00" + "dateAndTimeString" : "2025-02-12T10:33:36.628792+01:00" } }, "editEmail" : { @@ -2994,58 +2778,20 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:38:07.900544+01:00" + "dateAndTimeString" : "2025-02-12T10:33:52.699455+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "chHzu9zpDQC8ts0FDtc83A==" + "uidString" : "4etuX1DqDQCV12ihCtuOFw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "In our case, ff the view model changes, we need to bind the editor element to the new editor text model. We override {{gtMethod:name=LeBlockQuoteSnippetElement>>#onSnippetViewModelChanged}} to update the editor element and bind it to the new text editor model and text object." - } - ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:34:42.760365+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:37:12.076528+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "kZXJt9zpDQC7oJnaDtc83A==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "**(3)** Listen to changes in the view model by overriding `onSnippetViewModelChanged`." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ + "string" : "There is nothing left to do." + }, { - "__type" : "textSnippet", + "__type" : "pharoSnippet", "children" : { "__type" : "snippets", "items" : [ ] @@ -3058,7 +2804,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:39:43.162054+01:00" + "dateAndTimeString" : "2025-02-12T10:33:19.533567+01:00" } }, "editEmail" : { @@ -3069,17 +2815,14 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:40:15.337752+01:00" + "dateAndTimeString" : "2025-02-12T10:33:28.534516+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "g2OxydzpDQCEo2qEDtc83A==" - }, - "paragraphStyle" : { - "__type" : "textStyle" + "uidString" : "6BdqXlDqDQCVnzLHCtuOFw==" }, - "string" : "We don't need any tools, so we implement {{gtMethod:name=LeBlockQuoteSnippetElement>>#snippetToolbar}} to return `nil`." + "code" : "LeBlockQuoteSnippetElement allMethods select: #isAbstract" } ] }, @@ -3102,7 +2845,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:39:30.487942+01:00" + "dateAndTimeString" : "2025-02-12T10:33:18.137879+01:00" } }, "uid" : { @@ -3112,7 +2855,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "**(4)** Implement the required method {{gtMethod:name=LeSnippetElement>>#snippetToolbar}} to return the element representing the toolbar to appear below the content. Return `nil` if this is not needed." + "string" : "**(4)** Implement any remaining abstract methods." } ] }, @@ -3151,120 +2894,7 @@ "__type" : "textSnippet", "children" : { "__type" : "snippets", - "items" : [ - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:25:47.085979+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:04:56.330397+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "N6/5ZtjpDQC3WCjbDeapRg==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "• If you navigate to another snippet, undo and redo keyboard shortcuts won't apply to the latest changes in the block quote." - }, - { - "__type" : "textSnippet", - "children" : { - "__type" : "snippets", - "items" : [ ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:00:18.658636+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:04:59.418224+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "bJJVE93pDQCsB1iRBchtig==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "• Keyboard shortcuts for indentation also do not work." - } - ] - }, - "createEmail" : { - "__type" : "email", - "emailString" : "" - }, - "createTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:58:06.258798+01:00" - } - }, - "editEmail" : { - "__type" : "email", - "emailString" : "" - }, - "editTime" : { - "__type" : "time", - "time" : { - "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:04:53.558934+01:00" - } - }, - "uid" : { - "__type" : "uid", - "uidString" : "/0xxC93pDQCm78GjBchtig==" - }, - "paragraphStyle" : { - "__type" : "textStyle" - }, - "string" : "We now have a mostly functional block quote snippet. Still missing is support for keyboard shortcuts:" - } - ] + "items" : [ ] }, "createEmail" : { "__type" : "email", @@ -3274,7 +2904,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:25:39.313667+01:00" + "dateAndTimeString" : "2025-02-12T10:33:02.840073+01:00" } }, "editEmail" : { @@ -3285,17 +2915,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:58:05.551946+01:00" + "dateAndTimeString" : "2025-02-12T10:37:11.05455+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "WBaDZtjpDQC3BG8aDeapRg==" + "uidString" : "g2OxydzpDQCEo2qEDtc83A==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "# Pending" + "string" : "Now we are basically done. Don't forget, however, if we need to do anything special in visitors, we will have to change {{gtMethod:name=LeBlockQuoteSnippet>>#acceptVisitor:}}, introduce a new `visitBlockQuoteSnippet:` method for all visitors in the trait {{gtClass:name=TLeModelVisitor}}, and eventually update selected visitors to override the default implementation." } ] }, From 785c561fd078bdcd3041b174ed6dbdc21941a6b9 Mon Sep 17 00:00:00 2001 From: Oscar Nierstrasz Date: Wed, 12 Feb 2025 11:03:01 +0100 Subject: [PATCH 3/3] Revised the snippet tutorial feenkcom/gtoolkit#4294 --- ...iter => 2tayi32k6bk6g9hvxydicueq0.lepiter} | 488 +++++++++--------- lepiter/6k9vwu4iqoe6r1g3or2plhse3.lepiter | 12 +- lepiter/e5aw30djc0oyppnc0xoxrd2wj.lepiter | 4 +- lepiter/evkv84bc1s1z6y6cxcr369m6z.lepiter | 4 +- 4 files changed, 254 insertions(+), 254 deletions(-) rename lepiter/{46lrihou08u2u8wikuobvkk0y.lepiter => 2tayi32k6bk6g9hvxydicueq0.lepiter} (82%) diff --git a/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter b/lepiter/2tayi32k6bk6g9hvxydicueq0.lepiter similarity index 82% rename from lepiter/46lrihou08u2u8wikuobvkk0y.lepiter rename to lepiter/2tayi32k6bk6g9hvxydicueq0.lepiter index 4a3ebf986..a5fef49d0 100644 --- a/lepiter/46lrihou08u2u8wikuobvkk0y.lepiter +++ b/lepiter/2tayi32k6bk6g9hvxydicueq0.lepiter @@ -23,7 +23,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:19:01.536895+01:00" + "dateAndTimeString" : "2025-02-12T10:59:44.663001+01:00" } }, "editEmail" : { @@ -34,12 +34,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:21:50.709546+01:00" + "dateAndTimeString" : "2025-02-12T10:59:44.663001+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "937NTtjpDQClXo5/DeapRg==" + "uidString" : "AkLlvFDqDQCBVf76ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -56,7 +56,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:14:30.419277+01:00" + "dateAndTimeString" : "2025-02-12T10:59:44.662895+01:00" } }, "editEmail" : { @@ -67,12 +67,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:19:00.997662+01:00" + "dateAndTimeString" : "2025-02-12T10:59:44.662895+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "MI2kPtjpDQClNkwhDeapRg==" + "uidString" : "jEHlvFDqDQCBVPX6ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -98,7 +98,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:39:29.361592+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.47428+01:00" } }, "editEmail" : { @@ -109,12 +109,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:39:57.374572+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.47428+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Tpj8l9jpDQC807vVDeapRg==" + "uidString" : "zmkfvVDqDQCLF7JcADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -135,7 +135,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:22:06.80659+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474376+01:00" } }, "editEmail" : { @@ -146,12 +146,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:23:05.522794+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474376+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "2nzYWdjpDQCsx6zdDeapRg==" + "uidString" : "DmofvVDqDQCLGOsuADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -172,7 +172,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:23:02.785834+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474397+01:00" } }, "editEmail" : { @@ -183,12 +183,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:40:31.371566+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474397+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "eakuXdjpDQCuzkObDeapRg==" + "uidString" : "H2ofvVDqDQCLGTMAADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -209,7 +209,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:24:07.955323+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474401+01:00" } }, "editEmail" : { @@ -220,12 +220,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:24:21.930125+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474401+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "ihARYdjpDQCygqDbDeapRg==" + "uidString" : "I2ofvVDqDQCLGoN7ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -251,7 +251,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:25:03.664892+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474412+01:00" } }, "editEmail" : { @@ -262,12 +262,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:25:03.664892+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474412+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "9yFjZNjpDQC1/NmdDeapRg==" + "uidString" : "LmofvVDqDQCLHLBGADOILw==" }, "string" : "3+4" } @@ -281,7 +281,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:22:43.706235+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474404+01:00" } }, "editEmail" : { @@ -292,12 +292,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:26:40.436211+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474404+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "74cLXNjpDQCug0+hDeapRg==" + "uidString" : "JmofvVDqDQCLGyzmADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -318,7 +318,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:22:43.920586+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474419+01:00" } }, "editEmail" : { @@ -329,12 +329,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:26:36.263234+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474419+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "IM0OXNjpDQCuiMiIDeapRg==" + "uidString" : "NGofvVDqDQCLHevsADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -351,7 +351,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:22:02.127779+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474173+01:00" } }, "editEmail" : { @@ -362,12 +362,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:22:06.504551+01:00" + "dateAndTimeString" : "2025-02-12T10:59:48.474173+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "sBaRWdjpDQCsgtdrDeapRg==" + "uidString" : "WGkfvVDqDQCLFky3ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -393,7 +393,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:35:42.154931+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.400892+01:00" } }, "editEmail" : { @@ -404,12 +404,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:39:32.45457+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.400892+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "5alWkE/qDQCfWDwpBn7gBA==" + "uidString" : "6BFMvVDqDQCUj/nSADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -430,7 +430,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:40:49.560628+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.400999+01:00" } }, "editEmail" : { @@ -441,12 +441,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:45:15.418541+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.400999+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "nkypok/qDQChZAfzBn7gBA==" + "uidString" : "KxJMvVDqDQCUkE6cADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -467,7 +467,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:27:39.421077+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401013+01:00" } }, "editEmail" : { @@ -478,15 +478,15 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:46:26.553931+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401013+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "HbNm8drpDQC2iJTPDeapRg==" + "uidString" : "ORJMvVDqDQCUkfOzADOILw==" }, "code" : "LeBlockQuoteSnippetUMLExamples new blockQuoteSnippetClassHierarchyWithPositions", - "elementHeight" : 367, + "elementHeight" : 296, "codeHeight" : 50, "codeVisible" : false }, @@ -504,7 +504,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:54:22.057576+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401022+01:00" } }, "editEmail" : { @@ -515,12 +515,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:54:40.123675+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401022+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "K/0W00/qDQCvA0dZCtuOFw==" + "uidString" : "QBJMvVDqDQCUkoHtADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -541,7 +541,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:54:58.791928+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401039+01:00" } }, "editEmail" : { @@ -552,12 +552,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:56:14.936848+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401039+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "uYpH1U/qDQCvo8+1CtuOFw==" + "uidString" : "UBJMvVDqDQCUkwHjADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -578,7 +578,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:13:02.978615+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401042+01:00" } }, "editEmail" : { @@ -589,12 +589,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:17:44.220719+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401042+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "fT8pvdrpDQCjCWWLDeapRg==" + "uidString" : "UxJMvVDqDQCUlP6jADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -615,7 +615,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:55:13.077437+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401045+01:00" } }, "editEmail" : { @@ -626,12 +626,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:19:09.493337+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401045+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "lAo7t9jpDQCHTSJBDeapRg==" + "uidString" : "VhJMvVDqDQCUlbIlADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -652,7 +652,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:40:41.4042+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401047+01:00" } }, "editEmail" : { @@ -663,12 +663,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:41:45.447477+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.401047+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "HeRHnNjpDQC/QxnSDeapRg==" + "uidString" : "WBJMvVDqDQCUlrT7ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -685,7 +685,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:21:52.115292+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.400762+01:00" } }, "editEmail" : { @@ -696,12 +696,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:17:02.92353+01:00" + "dateAndTimeString" : "2025-02-12T10:59:51.400762+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "9FD4WNjpDQCsRzGeDeapRg==" + "uidString" : "XhFMvVDqDQCUjrDaADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -732,7 +732,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:41:57.352471+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377726+01:00" } }, "editEmail" : { @@ -743,12 +743,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:01:24.356419+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377726+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "LrGJJNvpDQCHndrQDeapRg==" + "uidString" : "B355vVDqDQCeCSnWADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -769,7 +769,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:35:45.39878+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377744+01:00" } }, "editEmail" : { @@ -780,12 +780,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:01:50.882907+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377744+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "ACFeDtvpDQCBMBqjDeapRg==" + "uidString" : "En55vVDqDQCeCqW5ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -802,7 +802,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:34:55.212342+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377621+01:00" } }, "editEmail" : { @@ -813,12 +813,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:41:49.638608+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377621+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "s1lgC9vpDQC/uKeFDeapRg==" + "uidString" : "x315vVDqDQCeCKFOADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -849,7 +849,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:04:13.47266+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377758+01:00" } }, "editEmail" : { @@ -860,12 +860,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:04:19.527227+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377758+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "CE5X9k/qDQC3984cCtuOFw==" + "uidString" : "In55vVDqDQCeDUeXADOILw==" }, "code" : "(LeBlockQuoteSnippet new string: 'hello') text" } @@ -879,7 +879,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:58:48.422528+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37775+01:00" } }, "editEmail" : { @@ -890,12 +890,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:00:57.025172+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37775+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "j3H34k/qDQCyEBH6CtuOFw==" + "uidString" : "GH55vVDqDQCeDLHGADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -912,7 +912,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:32:13.130398+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377747+01:00" } }, "editEmail" : { @@ -923,12 +923,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-11T18:02:57.222458+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377747+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Zyi3AdvpDQC7UZUTDeapRg==" + "uidString" : "FX55vVDqDQCeCxnfADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -959,7 +959,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:02:40.954814+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377775+01:00" } }, "editEmail" : { @@ -970,12 +970,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:13:18.519909+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377775+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "MZjT8E/qDQC19To+CtuOFw==" + "uidString" : "MX55vVDqDQCeEEGEADOILw==" }, "code" : "(LeBlockQuoteSnippet new\r\tstring: 'Literal text';\r\tyourself) storeString" } @@ -989,7 +989,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:02.113058+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377772+01:00" } }, "editEmail" : { @@ -1000,12 +1000,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:03:45.38728+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377772+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "vVcRTNvpDQCUMvd9DeapRg==" + "uidString" : "Ln55vVDqDQCeD505ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1022,7 +1022,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:44:01.888975+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377767+01:00" } }, "editEmail" : { @@ -1033,12 +1033,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:53:17.612869+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377767+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "aPj1K9vpDQCJG8aNDeapRg==" + "uidString" : "KX55vVDqDQCeDg++ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1064,7 +1064,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:57:54.637943+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377781+01:00" } }, "editEmail" : { @@ -1075,12 +1075,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:11:59.01782+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377781+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "y7WYXdvpDQCaJb+IDeapRg==" + "uidString" : "N355vVDqDQCeEqGFADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1101,7 +1101,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:04:48.33191+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377784+01:00" } }, "editEmail" : { @@ -1112,12 +1112,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:05:20.540974+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377784+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "mzRr+E/qDQC4KNylCtuOFw==" + "uidString" : "On55vVDqDQCeEyeuADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1138,7 +1138,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:05:21.6658+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377787+01:00" } }, "editEmail" : { @@ -1149,12 +1149,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:06:18.069209+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377787+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "lt1n+k/qDQC5svmVCtuOFw==" + "uidString" : "PX55vVDqDQCeFDJSADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1180,7 +1180,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:27.142934+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377796+01:00" } }, "editEmail" : { @@ -1191,12 +1191,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:35.102422+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377796+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "hJctldvpDQCr5frrDeapRg==" + "uidString" : "RX55vVDqDQCeFgJWADOILw==" }, "code" : "LeJsonV4 cleanUniqueInstance." } @@ -1210,7 +1210,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:12:47.571646+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37779+01:00" } }, "editEmail" : { @@ -1221,12 +1221,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:24.48246+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37779+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "JsjRktvpDQCp/LX0DeapRg==" + "uidString" : "QH55vVDqDQCeFcKdADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1252,7 +1252,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:13:35.39599+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377804+01:00" } }, "editEmail" : { @@ -1263,12 +1263,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:16:32.517605+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377804+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "doqrldvpDQCr9knqDeapRg==" + "uidString" : "Tn55vVDqDQCeGCC9ADOILw==" }, "code" : "LeJsonV4 cleanUniqueInstance uniqueInstance \r\tnewReader mappings\r\t\tincludesKey: LeBlockQuoteSnippet" } @@ -1282,7 +1282,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:16:45.482954+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.3778+01:00" } }, "editEmail" : { @@ -1293,12 +1293,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:17:03.289264+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.3778+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "rwUAodvpDQCsa0ZkDeapRg==" + "uidString" : "Sn55vVDqDQCeF2AlADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1324,7 +1324,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:06:31.903491+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377812+01:00" } }, "editEmail" : { @@ -1335,12 +1335,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:08:21.537365+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377812+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "h5eX/k/qDQC6opaiCtuOFw==" + "uidString" : "VX55vVDqDQCeGvmCADOILw==" }, "code" : "LeJsonV4 uniqueInstance\r\tserializePretty: (LeBlockQuoteSnippet new\r\t\t\tstring: 'hello';\r\t\t\tyourself)" } @@ -1354,7 +1354,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:07:53.816121+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377809+01:00" } }, "editEmail" : { @@ -1365,12 +1365,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:10:05.796239+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377809+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "mwJdkNvpDQCosQ+CDeapRg==" + "uidString" : "Un55vVDqDQCeGZRqADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1387,7 +1387,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:57:37.089675+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377778+01:00" } }, "editEmail" : { @@ -1398,12 +1398,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T14:57:51.545129+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377778+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "a/GMXNvpDQCZ2uvKDeapRg==" + "uidString" : "NH55vVDqDQCeEVJaADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1429,7 +1429,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:20:54.061623+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377819+01:00" } }, "editEmail" : { @@ -1440,12 +1440,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:22:50.41492+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377819+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "EmhBrdvpDQCtzE2XDeapRg==" + "uidString" : "XH55vVDqDQCeHOvEADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1462,7 +1462,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:17:11.51256+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377816+01:00" } }, "editEmail" : { @@ -1473,12 +1473,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:19:51.318707+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377816+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "sTaNotvpDQCtbpheDeapRg==" + "uidString" : "WX55vVDqDQCeG8q7ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1509,7 +1509,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:28:21.348137+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377833+01:00" } }, "editEmail" : { @@ -1520,12 +1520,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:28:39.574826+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377833+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Qhh6ytvpDQC5rp78DeapRg==" + "uidString" : "a355vVDqDQCeHzoNADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1546,7 +1546,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:25:08.562854+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377837+01:00" } }, "editEmail" : { @@ -1557,12 +1557,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:28:10.750976+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377837+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "gG38vtvpDQC3DXjGDeapRg==" + "uidString" : "b355vVDqDQCeIEPgADOILw==" }, "code" : "(LeSnippet allSubclasses reject: #isAbstract)\r\tselect: [ :c | c new canMoveToAnotherDatabase not ]" } @@ -1576,7 +1576,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:23:46.088658+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37783+01:00" } }, "editEmail" : { @@ -1587,12 +1587,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:25:06.703652+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37783+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "9fcRutvpDQCxx8+WDeapRg==" + "uidString" : "aH55vVDqDQCeHkvbADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1613,7 +1613,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:10:33.283104+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37784+01:00" } }, "editEmail" : { @@ -1624,12 +1624,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:11:17.749299+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.37784+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "S736DFDqDQC8QyPhCtuOFw==" + "uidString" : "cn55vVDqDQCeIVwzADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1650,7 +1650,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:11:52.49444+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377845+01:00" } }, "editEmail" : { @@ -1661,17 +1661,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:12:16.486438+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377845+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "wWqzEVDqDQC9qMbRCtuOFw==" + "uidString" : "dn55vVDqDQCeIh5rADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "We need to add a test case, however, of an example page containing the snippet to {{gtClass:name=MovingPagesExamples}} for testing. We define {{gtMethod:name=MovingPagesExamples>>#blockQuoteSnippetPage}}, making sure to set its method category to `*GToolkit-Demo-Snippets`, so it will be an extension method from the new snippet's package, so as not to introduce a dependency from the Lepiter core package to our package. When we are done we can check that the tests pass, especially {{gtMethod:name=MovingPagesExamples>>#moveAllPages}}. " + "string" : "We do, however, need to add a test case of an example page containing the snippet to the example class {{gtClass:name=MovingPagesExamples}} for testing. We define {{gtMethod:name=MovingPagesExamples>>#blockQuoteSnippetPage}}, making sure to set its method category to `*GToolkit-Demo-Snippets`, so it will be an extension method from the new snippet's package, so as not to introduce a dependency from the Lepiter core package to our package. When we are done we can check that the tests pass, especially {{gtMethod:name=MovingPagesExamples>>#moveAllPages}}. " } ] }, @@ -1683,7 +1683,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:17:26.035748+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377822+01:00" } }, "editEmail" : { @@ -1694,17 +1694,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:23:39.880464+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377822+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "wtFqo9vpDQCthRy2DeapRg==" + "uidString" : "X355vVDqDQCeHZxMADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "**(6)** Implement `canMoveToAnotherDatabase` to return `true` if there are no dependencies to files in the database." + "string" : "**(6)** Possibly implement `canMoveToAnotherDatabase` to return `true` if there are no dependencies to files in the database." }, { "__type" : "textSnippet", @@ -1730,7 +1730,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:16:26.32524+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377856+01:00" } }, "editEmail" : { @@ -1741,12 +1741,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:16:34.049395+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377856+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "sL4FIlDqDQCA4/+PCtuOFw==" + "uidString" : "gX55vVDqDQCeJbz3ADOILw==" }, "code" : "LeBlockQuoteSnippet empty" } @@ -1760,7 +1760,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:29:20.633502+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377853+01:00" } }, "editEmail" : { @@ -1771,12 +1771,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:16:42.855263+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377853+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "sbcCztvpDQC7yVXeDeapRg==" + "uidString" : "fn55vVDqDQCeJGY7ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1793,7 +1793,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:17:27.915617+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377849+01:00" } }, "editEmail" : { @@ -1804,12 +1804,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:29:14.855236+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377849+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "vYCHo9vpDQCtjDEIDeapRg==" + "uidString" : "en55vVDqDQCeIzhRADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1835,7 +1835,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:30:53.17476+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377862+01:00" } }, "editEmail" : { @@ -1846,12 +1846,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:32:09.075173+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377862+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "wsiG09vpDQC9XYpADeapRg==" + "uidString" : "h355vVDqDQCeJ75vADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1868,7 +1868,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:29:56.173791+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377859+01:00" } }, "editEmail" : { @@ -1879,12 +1879,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T09:58:18.867073+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377859+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "rgQh0NvpDQC80NHUDeapRg==" + "uidString" : "hH55vVDqDQCeJhByADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1910,7 +1910,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:20:01.885278+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377872+01:00" } }, "editEmail" : { @@ -1921,12 +1921,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:37:40.336031+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377872+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "y/LeLlDqDQCFHmIqCtuOFw==" + "uidString" : "kX55vVDqDQCeKaGMADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1943,7 +1943,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:17:19.273243+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377864+01:00" } }, "editEmail" : { @@ -1954,12 +1954,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:19:45.312823+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377864+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "dKMtJVDqDQCBGPe8CtuOFw==" + "uidString" : "in55vVDqDQCeKIasADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -1990,7 +1990,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:38:32.663549+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377886+01:00" } }, "editEmail" : { @@ -2001,12 +2001,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:38:38.230682+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377886+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Qwfq7tvpDQCKXgVvDeapRg==" + "uidString" : "n355vVDqDQCeLIOXADOILw==" }, "code" : "LeBlockQuoteSnippet allMethods select: #isAbstract" } @@ -2020,7 +2020,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:53:53.274692+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377883+01:00" } }, "editEmail" : { @@ -2031,12 +2031,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:14.167611+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377883+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "3XDJJdzpDQCdPpd/Dtc83A==" + "uidString" : "nH55vVDqDQCeK19bADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2057,7 +2057,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:22:10.990024+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377891+01:00" } }, "editEmail" : { @@ -2068,12 +2068,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:22:25.238873+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377891+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Mu7829vpDQCBoVdTDeapRg==" + "uidString" : "pH55vVDqDQCeLVyJADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2090,7 +2090,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T15:38:52.934041+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377875+01:00" } }, "editEmail" : { @@ -2101,12 +2101,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:17:22.40185+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377875+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "v1Qf8NvpDQCKccLyDeapRg==" + "uidString" : "lH55vVDqDQCeKi2cADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2123,7 +2123,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:34:59.865176+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377457+01:00" } }, "editEmail" : { @@ -2134,12 +2134,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:35:35.325556+01:00" + "dateAndTimeString" : "2025-02-12T10:59:54.377457+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "amvsh9jpDQC7HQMuDeapRg==" + "uidString" : "IX15vVDqDQCeB6ECADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2170,7 +2170,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:43.288817+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890393+01:00" } }, "editEmail" : { @@ -2181,12 +2181,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:28:45.056174+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890393+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "g9+HTNzpDQCinKmhDtc83A==" + "uidString" : "IdWfvVDqDQCnoASGADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2203,7 +2203,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:26.605842+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890306+01:00" } }, "editEmail" : { @@ -2214,12 +2214,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:42.063571+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890306+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "R06JS9zpDQCiY4btDtc83A==" + "uidString" : "59SfvVDqDQCnn6UwADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2245,7 +2245,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:24:09.211425+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890417+01:00" } }, "editEmail" : { @@ -2256,12 +2256,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:25:01.793811+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890417+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "tdCcPVDqDQCJy3DECtuOFw==" + "uidString" : "M9WfvVDqDQCnonTgADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2282,7 +2282,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:25:04.914764+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.89042+01:00" } }, "editEmail" : { @@ -2293,12 +2293,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:26:10.493965+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.89042+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "7M/uQFDqDQCLAIe+CtuOFw==" + "uidString" : "NtWfvVDqDQCno1FtADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2315,7 +2315,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:43.501441+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890414+01:00" } }, "editEmail" : { @@ -2326,12 +2326,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:17:44.437716+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890414+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "wx2LTNzpDQCioP+KDtc83A==" + "uidString" : "L9WfvVDqDQCnoQPvADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2357,7 +2357,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:24:23.86438+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890426+01:00" } }, "editEmail" : { @@ -2368,12 +2368,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:24:58.649275+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890426+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "jwLmktzpDQCtemrnDtc83A==" + "uidString" : "O9WfvVDqDQCnpTBmADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2390,7 +2390,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:04:43.705337+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890423+01:00" } }, "editEmail" : { @@ -2401,12 +2401,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:25:28.674293+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890423+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "QDqOTNzpDQCipIFHDtc83A==" + "uidString" : "ONWfvVDqDQCnpNyqADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2437,7 +2437,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:27:20.140778+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890439+01:00" } }, "editEmail" : { @@ -2448,12 +2448,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:27:27.823121+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890439+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "oMlnndzpDQCysejZDtc83A==" + "uidString" : "SdWfvVDqDQCnqJvIADOILw==" }, "code" : "LeBlockQuoteSnippetViewModel allMethods select: #isAbstract" } @@ -2467,7 +2467,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:26:52.71161+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890431+01:00" } }, "editEmail" : { @@ -2478,12 +2478,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:27:18.754588+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890431+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "yD/Fm9zpDQCxIi5PDtc83A==" + "uidString" : "QNWfvVDqDQCnpzlTADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2504,7 +2504,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:29:08.04352+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890446+01:00" } }, "editEmail" : { @@ -2515,12 +2515,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:29:18.305305+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890446+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "2ct8m9zpDQCxDdbaDtc83A==" + "uidString" : "T9WfvVDqDQCnqXZPADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2537,7 +2537,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:26:02.952008+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890428+01:00" } }, "editEmail" : { @@ -2548,12 +2548,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:26:17.56188+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890428+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "bfrNmNzpDQCvc68PDtc83A==" + "uidString" : "PtWfvVDqDQCnpp7uADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2570,7 +2570,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:35:36.142746+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890173+01:00" } }, "editEmail" : { @@ -2581,12 +2581,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:35:38.846213+01:00" + "dateAndTimeString" : "2025-02-12T10:59:56.890173+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "yfkVitjpDQC8UVI2DeapRg==" + "uidString" : "W9SfvVDqDQCnnhpIADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2617,7 +2617,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:28:35.457461+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862011+01:00" } }, "editEmail" : { @@ -2628,12 +2628,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:30:47.902342+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862011+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "MgjlodzpDQCzXqKVDtc83A==" + "uidString" : "Ay3NvVDqDQCxHEUOADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2650,7 +2650,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:28:07.735355+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.861878+01:00" } }, "editEmail" : { @@ -2661,12 +2661,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:29:05.233042+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.861878+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "cQU+oNzpDQCzR4h1Dtc83A==" + "uidString" : "wyzNvVDqDQCxGznHADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2692,7 +2692,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:32:21.877382+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862029+01:00" } }, "editEmail" : { @@ -2703,12 +2703,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:32:28.444933+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862029+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "0a07pdzpDQC0voaBDtc83A==" + "uidString" : "Dy3NvVDqDQCxHqUBADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2725,7 +2725,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:31:39.960008+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862026+01:00" } }, "editEmail" : { @@ -2736,12 +2736,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:31:08.479131+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862026+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "oU/krNzpDQC2zQ30Dtc83A==" + "uidString" : "DC3NvVDqDQCxHdc/ADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2767,7 +2767,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:33:36.628792+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862035+01:00" } }, "editEmail" : { @@ -2778,12 +2778,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:33:52.699455+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862035+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "4etuX1DqDQCV12ihCtuOFw==" + "uidString" : "FS3NvVDqDQCxIMXbADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2804,7 +2804,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:33:19.533567+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862054+01:00" } }, "editEmail" : { @@ -2815,12 +2815,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:33:28.534516+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862054+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "6BdqXlDqDQCVnzLHCtuOFw==" + "uidString" : "Ky3NvVDqDQCxIcAKADOILw==" }, "code" : "LeBlockQuoteSnippetElement allMethods select: #isAbstract" } @@ -2834,7 +2834,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T16:28:41.490426+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862033+01:00" } }, "editEmail" : { @@ -2845,12 +2845,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:33:18.137879+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.862033+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "QhVBotzpDQCzjzt7Dtc83A==" + "uidString" : "Ei3NvVDqDQCxHyEkADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2867,7 +2867,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:35:31.182126+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.86175+01:00" } }, "editEmail" : { @@ -2878,12 +2878,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:35:31.969827+01:00" + "dateAndTimeString" : "2025-02-12T10:59:59.86175+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "wEfKidjpDQC8Kti6DeapRg==" + "uidString" : "ICzNvVDqDQCxGjgSADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2904,7 +2904,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:33:02.840073+01:00" + "dateAndTimeString" : "2025-02-12T11:00:02.78656+01:00" } }, "editEmail" : { @@ -2915,12 +2915,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-12T10:37:11.05455+01:00" + "dateAndTimeString" : "2025-02-12T11:00:02.78656+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "g2OxydzpDQCEo2qEDtc83A==" + "uidString" : "G835vVDqDQC6kpqoADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" @@ -2937,7 +2937,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:13:18.76247+01:00" + "dateAndTimeString" : "2025-02-12T10:59:20.072945+01:00" } }, "editEmail" : { @@ -2948,15 +2948,15 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T11:13:18.76247+01:00" + "dateAndTimeString" : "2025-02-12T10:59:20.072945+01:00" } }, "pageType" : { "__type" : "namedPage", - "title" : "How to implement a new snippet class" + "title" : "How to implement a new snippet class " }, "uid" : { "__type" : "uuid", - "uuid" : "622d5f3a-d8e9-0d00-a3fe-99870de6a946" + "uuid" : "080a6ebb-50ea-0d00-a52f-efd40033882f" } } \ No newline at end of file diff --git a/lepiter/6k9vwu4iqoe6r1g3or2plhse3.lepiter b/lepiter/6k9vwu4iqoe6r1g3or2plhse3.lepiter index c579aff2f..40348b349 100644 --- a/lepiter/6k9vwu4iqoe6r1g3or2plhse3.lepiter +++ b/lepiter/6k9vwu4iqoe6r1g3or2plhse3.lepiter @@ -14538,7 +14538,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:03:59.915841+01:00" + "dateAndTimeString" : "2025-02-12T10:58:37.139524+01:00" } }, "editEmail" : { @@ -14549,17 +14549,17 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:04:04.877087+01:00" + "dateAndTimeString" : "2025-02-12T10:58:49.908146+01:00" } }, "uid" : { "__type" : "uid", - "uidString" : "Y7CFIN3pDQCvTWaSBchtig==" + "uidString" : "oObeuFDqDQCjKGPzADOILw==" }, "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "[[How to implement a new snippet class]]" + "string" : "[[How to implement a new snippet class ]]" } ] }, @@ -17518,7 +17518,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2024-10-03T13:29:00.870538+02:00" + "dateAndTimeString" : "2025-02-12T10:58:10.830414+01:00" } }, "uid" : { @@ -17528,7 +17528,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "[[Experemental Development]] " + "string" : "[[Experimental Development]] " }, { "__type" : "textSnippet", diff --git a/lepiter/e5aw30djc0oyppnc0xoxrd2wj.lepiter b/lepiter/e5aw30djc0oyppnc0xoxrd2wj.lepiter index b7f52bea1..c0ec94a43 100644 --- a/lepiter/e5aw30djc0oyppnc0xoxrd2wj.lepiter +++ b/lepiter/e5aw30djc0oyppnc0xoxrd2wj.lepiter @@ -659,7 +659,7 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2025-02-06T17:02:24.958912+01:00" + "dateAndTimeString" : "2025-02-12T10:57:27.048269+01:00" } }, "uid" : { @@ -669,7 +669,7 @@ "paragraphStyle" : { "__type" : "textStyle" }, - "string" : "For more details on implementing snippets, see [[How to implement a new snippet class]]." + "string" : "For more details on implementing snippets, see [[How to implement a new snippet class BROKEN]]." } ] }, diff --git a/lepiter/evkv84bc1s1z6y6cxcr369m6z.lepiter b/lepiter/evkv84bc1s1z6y6cxcr369m6z.lepiter index e5598008f..0da751333 100644 --- a/lepiter/evkv84bc1s1z6y6cxcr369m6z.lepiter +++ b/lepiter/evkv84bc1s1z6y6cxcr369m6z.lepiter @@ -62,12 +62,12 @@ "__type" : "time", "time" : { "__type" : "dateAndTime", - "dateAndTimeString" : "2024-10-03T13:29:00.821491+02:00" + "dateAndTimeString" : "2025-02-12T10:58:05.079162+01:00" } }, "pageType" : { "__type" : "namedPage", - "title" : "Experemental Development" + "title" : "Experimental Development" }, "uid" : { "__type" : "uuid",