75 lines
2.6 KiB
Smalltalk
75 lines
2.6 KiB
Smalltalk
Extension { #name : #LeDatabase }
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
LeDatabase >> addPageFromMarkdeep: markdeepDocTree [
|
|
|
|
| remoteMetadata divSnippets snippets page |
|
|
divSnippets := (markdeepDocTree xpath: '//div[@st-class]')
|
|
asOrderedCollection collect: [ :xmlElement | xmlElement postCopy ].
|
|
snippets := divSnippets collect: [ :xmlElement |
|
|
(xmlElement attributes at: 'st-class') = 'LeTextSnippet'
|
|
ifTrue: [ LeTextSnippet new contentFrom: xmlElement ]
|
|
ifFalse: [ (xmlElement attributes at: 'st-class') = 'LePharoSnippet'
|
|
ifTrue: [ LePharoSnippet new contentFrom: xmlElement ]
|
|
]
|
|
].
|
|
remoteMetadata := Markdeep new metadataFromXML: markdeepDocTree.
|
|
page := 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 do: [ :snippet | page addSnippet: snippet ].
|
|
^ page
|
|
]
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
LeDatabase >> addPageFromMarkdeepUrl: aString [
|
|
|
|
| page |
|
|
page := self detectLocalPageForRemote: aString.
|
|
page ifNotNil: [ :arg | ^ self importErrorMessage: page ].
|
|
^ self addPageFromMarkdeep: (self docTreeForLink: aString)
|
|
]
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
LeDatabase >> detectLocalPageForRemote: markdeepDocUrl [
|
|
| markdeepHelper id remoteMetadata docTree |
|
|
markdeepHelper := Markdeep new.
|
|
docTree := self docTreeForLink: markdeepDocUrl.
|
|
remoteMetadata := markdeepHelper metadataFromXML: docTree.
|
|
id := remoteMetadata at: 'id' ifAbsent: [ nil ].
|
|
^ self pageWithID: id ifAbsent: [ ^ nil ].
|
|
]
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
LeDatabase >> docTreeForLink: aString [
|
|
^ (XMLHTMLParser on: aString asUrl retrieveContents) parseDocument
|
|
]
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
LeDatabase >> importErrorMessage: page [
|
|
|
|
^ String streamContents: [ :stream |
|
|
stream
|
|
nextPutAll: 'IMPORTATION ERROR: a page with';
|
|
nextPut: Character lf;
|
|
nextPut: Character lf;
|
|
nextPutAll: ' id: ' , page uidString;
|
|
nextPut: Character lf;
|
|
nextPutAll: ' title: ' , page contentAsString;
|
|
nextPut: Character lf;
|
|
nextPut: Character lf;
|
|
nextPutAll: 'already exists in this database.';
|
|
nextPut: Character lf;
|
|
nextPut: Character lf;
|
|
nextPutAll:
|
|
'Please do one of those before retrying this procedure:
|
|
|
|
1) Move the existing page files (.lepiter and .bak) to another (sub)folder.
|
|
2) Import the page url to another database.' ]
|
|
]
|