Modularity: Moving functionality to a Markdeep package.
This commit is contained in:
parent
626ad71111
commit
3b11255a4b
@ -9,7 +9,8 @@ LePage >> asMarkdeep [
|
|||||||
].
|
].
|
||||||
markdeep := Markdeep new
|
markdeep := Markdeep new
|
||||||
title: self title;
|
title: self title;
|
||||||
body: bodyStream contents.
|
body: bodyStream contents;
|
||||||
|
navTop: self navTop.
|
||||||
self metadata keysAndValuesDo: [:k :v |
|
self metadata keysAndValuesDo: [:k :v |
|
||||||
markdeep head
|
markdeep head
|
||||||
add: '<meta name="', k, '" content="', v,'">';
|
add: '<meta name="', k, '" content="', v,'">';
|
||||||
@ -62,13 +63,6 @@ LePage >> fromMarkdeepUrl: aString [
|
|||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
|
||||||
LePage >> markdeepFileName [
|
|
||||||
| sanitized |
|
|
||||||
sanitized := self title asDashedLowercase copyWithoutAll: #($/).
|
|
||||||
^ sanitized, '--',(self uidString copyFrom: 1 to: 5), '.md.html'.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
{ #category : #'*Grafoscopio-Utils-Core' }
|
||||||
LePage >> metadata [
|
LePage >> metadata [
|
||||||
|
|
||||||
@ -88,6 +82,15 @@ LePage >> metadataInit [
|
|||||||
yourself
|
yourself
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #'*Grafoscopio-Utils-Core' }
|
||||||
|
LePage >> navTop [
|
||||||
|
| topNavFile |
|
||||||
|
topNavFile := ((self optionAt: 'storage') / '_navtop.html').
|
||||||
|
topNavFile exists
|
||||||
|
ifFalse: [ ^ '' ]
|
||||||
|
ifTrue: [ ^ topNavFile contents ]
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
{ #category : #'*Grafoscopio-Utils-Core' }
|
||||||
LePage >> options [
|
LePage >> options [
|
||||||
^ options
|
^ options
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
Extension { #name : #LeSnippet }
|
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
|
||||||
LeSnippet class >> fromMetaMarkdeep: div [
|
|
||||||
| className metadata snippet |
|
|
||||||
className := (div xpath: '@st-class') stringValue.
|
|
||||||
metadata := STON fromString:(div xpath: '@st-data') stringValue.
|
|
||||||
snippet := className asClass new.
|
|
||||||
snippet injectMetadataFrom: metadata.
|
|
||||||
snippet contentFrom: div.
|
|
||||||
^ snippet.
|
|
||||||
]
|
|
@ -21,16 +21,6 @@ LeTextualSnippet >> childrenIds [
|
|||||||
^ self children collect: [ :each | each uidString ]
|
^ self children collect: [ :each | each uidString ]
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
|
||||||
LeTextualSnippet >> markdeepCustomCloser [
|
|
||||||
^ ''
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
|
||||||
LeTextualSnippet >> markdeepCustomOpener [
|
|
||||||
^ ''
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio-Utils-Core' }
|
{ #category : #'*Grafoscopio-Utils-Core' }
|
||||||
LeTextualSnippet >> metadata [
|
LeTextualSnippet >> metadata [
|
||||||
|
|
||||||
|
@ -1,285 +0,0 @@
|
|||||||
"
|
|
||||||
I model a Mardeep file as described in https://casual-effects.com/markdeep/
|
|
||||||
"
|
|
||||||
Class {
|
|
||||||
#name : #Markdeep,
|
|
||||||
#superclass : #Object,
|
|
||||||
#instVars : [
|
|
||||||
'title',
|
|
||||||
'body',
|
|
||||||
'tocStyle',
|
|
||||||
'comments',
|
|
||||||
'tail',
|
|
||||||
'language',
|
|
||||||
'config',
|
|
||||||
'metadata',
|
|
||||||
'head'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-Utils-Core'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
Markdeep class >> fromMarkdownFile: aFileReference [
|
|
||||||
^ self new fromMarkdownFile: aFileReference.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> authors [
|
|
||||||
self metadata at: 'authors' ifPresent: [:k | ^ '**', k, '**' ].
|
|
||||||
^ ''.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> body [
|
|
||||||
^ body
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> body: anObject [
|
|
||||||
body := anObject
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> comments [
|
|
||||||
^ comments ifNil: [ ^ comments := true ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> comments: aBoolean [
|
|
||||||
"I tell if comments are enabled by default or not."
|
|
||||||
comments := aBoolean
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #utilities }
|
|
||||||
Markdeep >> commentsProvider [
|
|
||||||
"I return the url of the default service that provides annotation support.
|
|
||||||
I am used to add such support in the contents of the Markdeep page."
|
|
||||||
^ 'https://hypothes.is'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #utilities }
|
|
||||||
Markdeep >> commentsProviderStrings [
|
|
||||||
"I associate a comments service provider with the string that is required to be added
|
|
||||||
to the document to enable such provider."
|
|
||||||
| providers |
|
|
||||||
providers := Dictionary new.
|
|
||||||
providers at: 'https://hypothes.is' put: '<!-- Hypothesis -->
|
|
||||||
<script src="https://hypothes.is/embed.js" async></script>'.
|
|
||||||
^ providers
|
|
||||||
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #utilities }
|
|
||||||
Markdeep >> commentsSupport [
|
|
||||||
"I enable comments of the page."
|
|
||||||
|
|
||||||
self comments ifFalse: [ ^ self ].
|
|
||||||
^ self commentsProviderStrings at: self commentsProvider
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> config [
|
|
||||||
|
|
||||||
^ config
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> config: aDictionary [
|
|
||||||
|
|
||||||
config := aDictionary
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> contents [
|
|
||||||
| output |
|
|
||||||
output := '' writeStream.
|
|
||||||
output
|
|
||||||
nextPutAll: self headContents; lf; lf;
|
|
||||||
nextPutAll: ' **', self title, '**'; lf;
|
|
||||||
nextPutAll: ' ', self authors ; lf;
|
|
||||||
nextPutAll: ' ', self version; lf; lf;
|
|
||||||
nextPutAll: self body; lf; lf;
|
|
||||||
nextPutAll: self tail; lf; lf; lf; lf;
|
|
||||||
nextPutAll: self commentsSupport.
|
|
||||||
^ output contents.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #persistence }
|
|
||||||
Markdeep >> exportAsFile [
|
|
||||||
| newFile |
|
|
||||||
self markdownFile ifNil: [ self inform: 'Define an input Markdown file or use #exportAsFileOn: instead.' ].
|
|
||||||
newFile := (self markdownFile fullName, '.html') asFileReference.
|
|
||||||
self exportAsFileOn: newFile.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #persistence }
|
|
||||||
Markdeep >> exportAsFileOn: aFileReference [
|
|
||||||
aFileReference ensureDelete.
|
|
||||||
aFileReference exists ifFalse: [ aFileReference ensureCreateFile ].
|
|
||||||
aFileReference writeStreamDo: [ :stream |
|
|
||||||
stream nextPutAll: self contents ].
|
|
||||||
self inform: 'Exported as: ', String cr, aFileReference fullName.
|
|
||||||
^ aFileReference
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #utilities }
|
|
||||||
Markdeep >> fontAwesomeHeader [
|
|
||||||
"I enable the font awesome support in the document header"
|
|
||||||
|
|
||||||
^ '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> fromMarkdownFile: aFileReference [
|
|
||||||
"I create a Markdeep document from a given Markdown file."
|
|
||||||
self processMarkdownFor: aFileReference.
|
|
||||||
^ self.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> gtTextFor: aView [
|
|
||||||
<gtView>
|
|
||||||
^ aView textEditor
|
|
||||||
title: 'Text';
|
|
||||||
text: [ self contents ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> head [
|
|
||||||
^ head ifNil: [ head := OrderedCollection new.
|
|
||||||
head add: self fontAwesomeHeader; yourself ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> head: anOrderedCollection [
|
|
||||||
head := anOrderedCollection
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> headContents [
|
|
||||||
|
|
||||||
^ String streamContents: [ :stream |
|
|
||||||
stream
|
|
||||||
nextPutAll: '<head>';
|
|
||||||
nextPut: Character lf.
|
|
||||||
self head do: [ :line |
|
|
||||||
stream
|
|
||||||
nextPutAll: ' ';
|
|
||||||
nextPutAll: line;
|
|
||||||
nextPut: Character lf
|
|
||||||
].
|
|
||||||
stream
|
|
||||||
nextPutAll: '</head>';
|
|
||||||
nextPut: Character lf.
|
|
||||||
].
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> language [
|
|
||||||
^ language
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> language: anObject [
|
|
||||||
language := anObject
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> markdeepScriptTag [
|
|
||||||
^ '<script src="markdeep.min.js" charset="utf-8"></script>
|
|
||||||
<script
|
|
||||||
src="https://casual-effects.com/markdeep/latest/markdeep.min.js?"
|
|
||||||
charset="utf-8">
|
|
||||||
</script>'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> markdownFile [
|
|
||||||
^ self config at: 'markdownFile'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> markdownFile: aFileReference [
|
|
||||||
"Where the Mardown file associated with me is stored. Used for sync. and import/export purposes."
|
|
||||||
self config at: 'markdownFile' put: aFileReference
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> metadata [
|
|
||||||
^ metadata ifNil: [ metadata := OrderedDictionary new ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #utilities }
|
|
||||||
Markdeep >> metadataFromXML: aXMLDocument [
|
|
||||||
| metaDict |
|
|
||||||
|
|
||||||
metaDict := OrderedDictionary new.
|
|
||||||
(aXMLDocument xpath: '//meta') do: [ :each |
|
|
||||||
metaDict at: (each @ 'name') stringValue put: (each @ 'content') stringValue ].
|
|
||||||
^ metaDict
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #printing }
|
|
||||||
Markdeep >> printOn: aStream [
|
|
||||||
|
|
||||||
super printOn: aStream.
|
|
||||||
aStream
|
|
||||||
nextPutAll: '( ', self title, ' )'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> processMarkdownFor: aFileReference [
|
|
||||||
"comment stating purpose of message"
|
|
||||||
| markdownContent |
|
|
||||||
self markdownFile: aFileReference.
|
|
||||||
markdownContent := Markdown fromFile: aFileReference.
|
|
||||||
self body: (markdownContent commentYAMLMetadata contents).
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> tail [
|
|
||||||
"I enable the document tail, which, in turn, enables a Markdeep document"
|
|
||||||
| output |
|
|
||||||
output := '' writeStream.
|
|
||||||
output
|
|
||||||
nextPutAll: '<!-- Markdeep: -->'; lf; lf;
|
|
||||||
nextPutAll: '<style class="fallback">body{visibility:hidden;white-space:pre;font-family:monospace}</style>'; lf;
|
|
||||||
nextPutAll: '<script>window.markdeepOptions = {tocStyle: "', self tocStyle,'"}</script>'; lf;
|
|
||||||
nextPutAll: self markdeepScriptTag; lf;
|
|
||||||
nextPutAll: '<!--<script>window.alreadyProcessedMarkdeep||(document.body.style.visibility="visible")</script>-->'.
|
|
||||||
^ output contents
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> tail: anObject [
|
|
||||||
tail := anObject
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> title [
|
|
||||||
|
|
||||||
^ title
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> title: anObject [
|
|
||||||
|
|
||||||
title := anObject
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> tocStyle [
|
|
||||||
^ tocStyle ifNil: [ tocStyle := 'short' ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
Markdeep >> tocStyle: anObject [
|
|
||||||
tocStyle := anObject
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
Markdeep >> version [
|
|
||||||
self metadata at: 'version' ifPresent: [:value | ^ 'v',value ].
|
|
||||||
^ ''
|
|
||||||
]
|
|
@ -19,10 +19,10 @@ MarkdeepTest >> markdeepTestingPictureSnippet [
|
|||||||
|
|
||||||
{ #category : #tests }
|
{ #category : #tests }
|
||||||
MarkdeepTest >> testLePictureImport [
|
MarkdeepTest >> testLePictureImport [
|
||||||
| metadata testSnippet |
|
| metadata |
|
||||||
metadata := STON fromString: (self markdeepTestingPictureSnippet xpath: 'st-class') stringValue.
|
metadata := STON fromString: (self markdeepTestingPictureSnippet xpath: '@st-data') stringValue.
|
||||||
testSnippet := LePictureSnippet new injectMetadataFrom: metadata.
|
self assert:
|
||||||
self assert: (testSnippet metadata at: 'parent') isNotNil.
|
(LePictureSnippet new injectMetadataFrom: metadata)
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #tests }
|
{ #category : #tests }
|
||||||
|
Loading…
Reference in New Issue
Block a user