diff --git a/src/MiniDocs/LeDatabase.extension.st b/src/MiniDocs/LeDatabase.extension.st index 9f98164..9f045e9 100644 --- a/src/MiniDocs/LeDatabase.extension.st +++ b/src/MiniDocs/LeDatabase.extension.st @@ -2,41 +2,20 @@ Extension { #name : #LeDatabase } { #category : #'*MiniDocs' } LeDatabase >> addPage2FromMarkdeep: markdeepDocTree withRemote: externalDocLocation [ - | remoteMetadata divSnippets dataSnippets snippets newPage | - divSnippets := (markdeepDocTree xpath: '//div[@st-class]') asOrderedCollection - collect: [ :xmlElement | xmlElement postCopy ]. - remoteMetadata := Markdeep new metadataFromXML: markdeepDocTree. - remoteMetadata at: 'origin' put: externalDocLocation. - dataSnippets := self sanitizeMarkdeepSnippets: divSnippets withMetadata: remoteMetadata. - snippets := dataSnippets collect: [ :each | each asLepiterSnippet ]. - newPage := LePage new - title: (remoteMetadata at: 'title'); - basicUid: (UUID fromString36: (remoteMetadata at: 'id')); - createTime: (LeTime new time: (remoteMetadata at: 'created') asDateAndTime); - editTime: (LeTime new time: (remoteMetadata at: 'modified') asDateAndTime); - latestEditTime: (LeTime new time: (remoteMetadata at: 'modified') asDateAndTime); - createEmail: (remoteMetadata at: 'creator'); - editEmail: (remoteMetadata at: 'modifier'). + | newPage | "^ { snippets . page }" "Rebulding partial subtrees" - snippets do: [:currentSnippet | |parentSnippet| - parentSnippet := snippets - detect: [:item | item uid asString = currentSnippet parent] - ifNone: [ parentSnippet := 'unrooted' ]. - currentSnippet parent: parentSnippet. - (parentSnippet class = ByteString) - ifFalse: [ parentSnippet children addChild: currentSnippet ] - ]. "Adding unrooted subtrees to the page" - snippets - select: [:each | each parent = 'unrooted'] - thenDo: [:unrooted | newPage addSnippet: unrooted ]. "^ newPage" - newPage childrenDo: [ :snippet | - (self hasBlockUID: snippet uid) - ifTrue: [ | existingPage | - existingPage := self pages - detect: [ :pageTemp | pageTemp includesSnippetUid: snippet uid ]. + newPage := self + rebuildPageFromMarkdeep: markdeepDocTree + withRemote: externalDocLocation. + newPage + childrenDo: [ :snippet | + (self hasBlockUID: snippet uid) + ifTrue: [ | existingPage | + existingPage := self pages + detect: [ :pageTemp | pageTemp includesSnippetUid: snippet uid ]. self importErrorForLocal: existingPage withRemote: externalDocLocation. ^ self ] ifFalse: [ snippet database: self. @@ -250,6 +229,41 @@ LeDatabase >> previewSanitizedPageFromMarkdeep: markdeepDocTree withRemote: exte ^ { divSnippets . divSnippetsSanitized . remoteMetadata } ] +{ #category : #'*MiniDocs' } +LeDatabase >> rebuildPageFromMarkdeep: markdeepDocTree withRemote: externalDocLocation [ + | newPage snippets divSnippets remoteMetadata dataSnippets | + divSnippets := (markdeepDocTree xpath: '//div[@st-class]') asOrderedCollection + collect: [ :xmlElement | xmlElement postCopy ]. + remoteMetadata := Markdeep new metadataFromXML: markdeepDocTree. + remoteMetadata at: 'origin' put: externalDocLocation. + dataSnippets := self + sanitizeMarkdeepSnippets: divSnippets + withMetadata: remoteMetadata. + snippets := dataSnippets collect: [ :each | each asLepiterSnippet ]. + newPage := LePage new + title: (remoteMetadata at: 'title'); + basicUid: (UUID fromString36: (remoteMetadata at: 'id')); + createTime: (LeTime new time: (remoteMetadata at: 'created') asDateAndTime); + editTime: (LeTime new time: (remoteMetadata at: 'modified') asDateAndTime); + latestEditTime: (LeTime new time: (remoteMetadata at: 'modified') asDateAndTime); + createEmail: (remoteMetadata at: 'creator'); + editEmail: (remoteMetadata at: 'modifier'). "^ { snippets . page }" "Rebulding partial subtrees" + snippets + do: [ :currentSnippet | + | parentSnippet | + parentSnippet := snippets + detect: [ :item | item uid asString = currentSnippet parent ] + ifNone: [ parentSnippet := 'unrooted' ]. + currentSnippet parent: parentSnippet. + parentSnippet class = ByteString + ifFalse: [ parentSnippet children addChild: currentSnippet ] ]. "Adding unrooted subtrees to the page" + "^ { unrooted . newPage }." + snippets + select: [ :each | each parent = 'unrooted' ] + thenDo: [ :unrooted | newPage addSnippet: unrooted ]. + ^ newPage +] + { #category : #'*MiniDocs' } LeDatabase >> sanitizeMarkdeepSnippets: divSnippets withMetadata: remoteMetadata [ ^ divSnippets collectWithIndex: [:markdeepDiv :i | | snippetData creationTime modificationTime timestampWarning | diff --git a/src/MiniDocs/LePage.extension.st b/src/MiniDocs/LePage.extension.st index 6e0e6ce..5175290 100644 --- a/src/MiniDocs/LePage.extension.st +++ b/src/MiniDocs/LePage.extension.st @@ -148,11 +148,11 @@ LePage >> markdownFileName [ { #category : #'*MiniDocs' } LePage >> metadata [ - ^ self options at: 'metadata' ifAbsentPut: [ self metadataInit] + ^ self options at: 'metadata' ifAbsentPut: [ self metadataUpdate] ] { #category : #'*MiniDocs' } -LePage >> metadataInit [ +LePage >> metadataUpdate [ ^ OrderedDictionary new at: 'id' put: self uidString; diff --git a/src/MiniDocs/LePictureSnippet.extension.st b/src/MiniDocs/LePictureSnippet.extension.st index 6bc754d..e821389 100644 --- a/src/MiniDocs/LePictureSnippet.extension.st +++ b/src/MiniDocs/LePictureSnippet.extension.st @@ -47,7 +47,7 @@ LePictureSnippet >> fromString: aString [ { #category : #'*MiniDocs' } LePictureSnippet >> metadata [ - ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataInit ] + ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataUpdate ] ] { #category : #'*MiniDocs' } @@ -64,7 +64,7 @@ LePictureSnippet >> metadataDiv [ ] { #category : #'*MiniDocs' } -LePictureSnippet >> metadataInit [ +LePictureSnippet >> metadataUpdate [ | surrogate | self parent ifNil: [ surrogate := nil] diff --git a/src/MiniDocs/LeTextSnippet.extension.st b/src/MiniDocs/LeTextSnippet.extension.st index 5b678d9..c270a62 100644 --- a/src/MiniDocs/LeTextSnippet.extension.st +++ b/src/MiniDocs/LeTextSnippet.extension.st @@ -21,20 +21,22 @@ LeTextSnippet >> fromMarkdeep: markdeepDiv [ { #category : #'*MiniDocs' } LeTextSnippet >> metadata [ - - ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataInit ] + + ^ self metadataUpdate ] { #category : #'*MiniDocs' } -LeTextSnippet >> metadataInit [ - +LeTextSnippet >> metadataUpdate [ + | createEmailSanitized editEmailSanitized | + createEmailSanitized := self createEmail asString withoutXMLTagDelimiters. + editEmailSanitized := self editEmail asString withoutXMLTagDelimiters. ^ OrderedDictionary new at: 'id' put: self uidString; at: 'parent' put: self parentId; at: 'created' put: self createTime asString; at: 'modified' put: self latestEditTime asString; - at: 'creator' put: self createEmail asString; - at: 'modifier' put: self editEmail asString; + at: 'creator' put: createEmailSanitized; + at: 'modifier' put: editEmailSanitized; yourself ] diff --git a/src/MiniDocs/LeTextualSnippet.extension.st b/src/MiniDocs/LeTextualSnippet.extension.st index 7d6bdd0..cc0d45f 100644 --- a/src/MiniDocs/LeTextualSnippet.extension.st +++ b/src/MiniDocs/LeTextualSnippet.extension.st @@ -66,11 +66,11 @@ LeTextualSnippet >> markdownCustomOpener [ { #category : #'*MiniDocs' } LeTextualSnippet >> metadata [ - ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataInit ] + ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataUpdate ] ] { #category : #'*MiniDocs' } -LeTextualSnippet >> metadataInit [ +LeTextualSnippet >> metadataUpdate [ | surrogate | self parent ifNil: [ surrogate := nil] diff --git a/src/MiniDocs/LeYoutubeReferenceSnippet.extension.st b/src/MiniDocs/LeYoutubeReferenceSnippet.extension.st index 18711b0..271659f 100644 --- a/src/MiniDocs/LeYoutubeReferenceSnippet.extension.st +++ b/src/MiniDocs/LeYoutubeReferenceSnippet.extension.st @@ -16,7 +16,7 @@ LeYoutubeReferenceSnippet >> asMarkdeep [ { #category : #'*MiniDocs' } LeYoutubeReferenceSnippet >> metadata [ - ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataInit ] + ^ self optionAt: 'metadata' ifAbsentPut: [ self metadataUpdate ] ] { #category : #'*MiniDocs' } @@ -31,7 +31,7 @@ LeYoutubeReferenceSnippet >> metadataDiv [ ] { #category : #'*MiniDocs' } -LeYoutubeReferenceSnippet >> metadataInit [ +LeYoutubeReferenceSnippet >> metadataUpdate [ | surrogate | self parent ifNil: [ surrogate := nil]