" I model a TiddlyWiki. More information: https://tiddlywiki.com/ " Class { #name : #TiddlyWiki, #superclass : #Object, #instVars : [ 'tiddlers', 'file', 'remote', 'name' ], #category : #'TiddlyWiki-Model' } { #category : #accessing } TiddlyWiki class >> fromJSONUrl: anUrlString [ ^ self new fromDictionary: (STONJSON fromString: anUrlString asUrl retrieveContents utf8Decoded); name: anUrlString ] { #category : #accessing } TiddlyWiki >> addToConfigFile [ | cleaned | cleaned := self copy. cleaned tiddlers: nil. self configDictonary at: cleaned name put: cleaned; yourself. MarkupFile exportAsFileOn: self configFile containing:(STON toStringPretty: self configDictonary) ] { #category : #accessing } TiddlyWiki >> configDictonary [ ^ STONJSON fromString: self configFile contents. ] { #category : #accessing } TiddlyWiki >> configFile [ | tempFile | tempFile := FileLocator home / '.config' / 'TiddlyWikiPharo' / 'tiddlywiki.conf.ston'. tempFile ensureCreateFile. tempFile contents isEmpty ifTrue: [ MarkupFile exportAsFileOn: tempFile containing: ( STON toStringPretty: Dictionary new) ]. ^ tempFile ] { #category : #accessing } TiddlyWiki >> exportJSONSubtiddlers: subtiddlersCollection [ ^ MarkupFile exportAsFileOn: self file parent / 'subtiddlers.json' containing: (self jsonSubtiddlers: subtiddlersCollection) ] { #category : #accessing } TiddlyWiki >> exportSTONFile [ | stonFile output wikiTemp | stonFile := self tiddlersJSONFile withoutExtension, 'ston'. output := '' writeStream. (STON writer on: output ) newLine: String lf; prettyPrint: true; keepNewLines: true; nextPut: self withoutImages. ^ MarkupFile exportAsFileOn: stonFile containing:output contents ] { #category : #accessing } TiddlyWiki >> file [ ^ file ] { #category : #accessing } TiddlyWiki >> file: anObject [ file := anObject ] { #category : #accessing } TiddlyWiki >> fromDictionary: tiddlersDict [ self tiddlers: (tiddlersDict collect: [ :each | Tiddler new fromDictionary: each; wiki: self ]) ] { #category : #accessing } TiddlyWiki >> importJSONFile [ "I import a JSON representation of my tiddlers data, that has been previosly exported by the TiddlyWiki HTML self contained file. Such file is called, by convention, 'tiddlers.json' and stored in the same folder where the HTML file is located." | tiddlersDict | self tiddlersJSONFile ifNil: [ ^ self ]. tiddlersDict := STONJSON fromString: self tiddlersJSONFile contents. self fromDictionary: tiddlersDict ] { #category : #accessing } TiddlyWiki >> jsonSubtiddlers: subtiddlersCollection [ | subtiddlersDict | subtiddlersDict := subtiddlersCollection collect: [:tiddler | tiddler asDictionary ]. ^ STONJSON toStringPretty: subtiddlersDict ] { #category : #accessing } TiddlyWiki >> loadFromConfig: wikiname [ ^ self configDictonary at: wikiname. ] { #category : #accessing } TiddlyWiki >> local [ ^ self file ] { #category : #accessing } TiddlyWiki >> local: aFileRefence [ ^ self file:aFileRefence ] { #category : #accessing } TiddlyWiki >> name [ | tempName suffix | name ifNotNil: [ ^ name ]. self file ifNotNil: [ ^ name := self file basenameWithoutExtension ]. self remote ifNil: [ ^ name := nil ]. tempName := self remote file. (tempName endsWithAnyOf: #('.html' '.htm')) ifTrue: [ suffix := (tempName splitOn: '.') last. tempName := tempName removeSuffix: '.', suffix. ]. name := tempName ] { #category : #accessing } TiddlyWiki >> name: aString [ name := aString ] { #category : #accessing } TiddlyWiki >> networkView [ | view | view := GtMondrian new. view nodes with: self tiddlers. view edges connectFromAll: #linkedTiddlers. view layout force. ^ view ] { #category : #accessing } TiddlyWiki >> printOn: aStream [ super printOn: aStream. aStream nextPutAll: '( ', self name ,' )' ] { #category : #accessing } TiddlyWiki >> remote [ ^ remote ] { #category : #accessing } TiddlyWiki >> remote: aUrlString [ remote := aUrlString asZnUrl ] { #category : #accessing } TiddlyWiki >> taggedWith: aTag [ ^ self tiddlers select: [:tiddler | tiddler tags isNotNil and: [tiddler tags includesSubstring: aTag ] ] ] { #category : #accessing } TiddlyWiki >> tiddlers [ ^ tiddlers ifNil: [ tiddlers := OrderedCollection new ] ] { #category : #accessing } TiddlyWiki >> tiddlers: anOrderedCollection [ tiddlers := anOrderedCollection ] { #category : #accessing } TiddlyWiki >> tiddlersJSONFile [ | jsonFile | file ifNil: [ self inform: 'Provide the location of the TiddlyWiki HTML file.'. ^ nil ]. jsonFile := file parent / 'tiddlers.json'. jsonFile exists ifFalse: [ self inform: 'You need to export tiddlers as JSON from TiddlyWiki and locate it in the same folder as the HTML file'. ^ nil ]. ^ jsonFile ] { #category : #accessing } TiddlyWiki >> withoutImages [ | filteredTiddlers tempWiki | filteredTiddlers := self tiddlers reject: [:tiddler | tiddler type isNotNil and: [tiddler type beginsWith: 'image/'] ]. tempWiki := self copy tiddlers: filteredTiddlers. tempWiki tiddlers do: [:tiddler | tiddler wiki: tempWiki ]. ^ tempWiki ]