Sanitizing urls to correct common user mistakes: not including the scheme ('http://' or 'https://') or pasting white spaces at the end or url, usually when they come from etherpads or mailing.
This closes ticket http://mutabit.com/repos.fossil/grafoscopio/tktview?name=c7fe88f9ca .
This commit is contained in:
parent
f251c55464
commit
a670787ef3
@ -288,6 +288,13 @@ GrafoscopioNode >> bodyAsMarkdownInto: aStream [
|
||||
self embeddedNodes ifNotNil: [ aStream nextPutAll: (self embedNodes contents asString withInternetLineEndings); crlf; crlf].
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioNode >> checksum [
|
||||
"I return the SHA1SUM of the current tree. I'm used to test changes on the contents
|
||||
and for traceability of how the document tree is converted to other formats, as markdown."
|
||||
^ (SHA1 new hashMessage: self root flatten asSton) hex
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioNode >> children [
|
||||
"Returns the receivers list of children"
|
||||
@ -326,13 +333,6 @@ GrafoscopioNode >> copyToClipboard [
|
||||
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioNode >> cryptoSignature [
|
||||
"I return the SHA1SUM of the current tree. I'm used to test changes on the contents
|
||||
and for traceability of how the document tree is converted to other formats, as markdown."
|
||||
^ (SHA1 new hashMessage: self root flatten asSton) hex
|
||||
]
|
||||
|
||||
{ #category : #utility }
|
||||
GrafoscopioNode >> deleteReferencesToRoot: aRootNode [
|
||||
|
||||
@ -735,7 +735,7 @@ GrafoscopioNode >> metadataAsYamlIn: markdownStream [
|
||||
markdownStream
|
||||
nextPutAll: '---';
|
||||
lf;
|
||||
nextPutAll: 'exportedFrom: ', self cryptoSignature;
|
||||
nextPutAll: 'exportedFrom: ', self checksum;
|
||||
lf.
|
||||
self metadata
|
||||
ifNotNil: [
|
||||
@ -937,8 +937,10 @@ GrafoscopioNode >> tags [
|
||||
ifTrue: [
|
||||
migration := tags.
|
||||
tags := OrderedCollection new.
|
||||
tags add: migration ].
|
||||
tags ifNil: [ tags := OrderedCollection new ].
|
||||
self tagAs: migration ].
|
||||
tags ifNil: [
|
||||
tags := OrderedCollection new.
|
||||
self tagAs: 'text' ].
|
||||
^ tags
|
||||
]
|
||||
|
||||
|
@ -89,14 +89,8 @@ GrafoscopioNotebook >> body: anObject [
|
||||
body := anObject
|
||||
]
|
||||
|
||||
{ #category : #'editing nodes' }
|
||||
GrafoscopioNotebook >> copyNodeToClipboard [
|
||||
tree highlightedItem content copyToClipboard.
|
||||
self notebookContent: notebook.
|
||||
]
|
||||
|
||||
{ #category : #utilities }
|
||||
GrafoscopioNotebook >> cryptoSignature [
|
||||
GrafoscopioNotebook >> checksum [
|
||||
"I return the cryptographic signature of the workingFile where this notebook is being stored.
|
||||
I'm useful for data provenance and traceability of derivated files related with this source
|
||||
notebook."
|
||||
@ -105,6 +99,12 @@ GrafoscopioNotebook >> cryptoSignature [
|
||||
^ (SHA1 new hashMessage: (self workingFile contents)) hex.
|
||||
]
|
||||
|
||||
{ #category : #'editing nodes' }
|
||||
GrafoscopioNotebook >> copyNodeToClipboard [
|
||||
tree highlightedItem content copyToClipboard.
|
||||
self notebookContent: notebook.
|
||||
]
|
||||
|
||||
{ #category : #'editing nodes' }
|
||||
GrafoscopioNotebook >> cutNodeToClipboard [
|
||||
self copyNodeToClipboard; removeNode.
|
||||
@ -275,9 +275,9 @@ GrafoscopioNotebook >> initializePresenter [
|
||||
header whenTextChanged: [ :arg |
|
||||
(tree highlightedItem content header) = arg
|
||||
ifFalse: [
|
||||
(tree highlightedItem) content header: arg.
|
||||
tree highlightedItem content header: arg.
|
||||
tree roots: tree roots]].
|
||||
links whenTextChanged: [ :arg | tree highlightedItem content addLink: arg]
|
||||
links whenTextChanged: [ :arg | tree highlightedItem content addLink: arg ]
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
@ -475,13 +475,14 @@ GrafoscopioNotebook >> openFromFileSelector [
|
||||
]
|
||||
|
||||
{ #category : #persistence }
|
||||
GrafoscopioNotebook >> openFromUrl: anUrl [
|
||||
GrafoscopioNotebook >> openFromUrl: url [
|
||||
"Opens a tree from a file named aFileName"
|
||||
|
||||
| fileName |
|
||||
fileName := (anUrl splitOn: '/') last.
|
||||
| fileName sanitized |
|
||||
sanitized := GrafoscopioUtils sanitize: url.
|
||||
fileName := sanitized segments last.
|
||||
GrafoscopioUtils
|
||||
downloadingFrom: anUrl
|
||||
downloadingFrom: sanitized
|
||||
withMessage: 'Downloading document...'
|
||||
into: FileLocator temp.
|
||||
self class new openFromFile: (FileLocator temp / fileName)
|
||||
@ -570,18 +571,16 @@ GrafoscopioNotebook >> removeNode [
|
||||
|
||||
{ #category : #persistence }
|
||||
GrafoscopioNotebook >> saveToFile: aFileReference [
|
||||
"I save the current tree/document to a file"
|
||||
"I save the current tree/document to a file."
|
||||
|
||||
aFileReference ifNil: [ self inform: 'No file selected for saving. Save NOT done'. ^ self ].
|
||||
workingFile := aFileReference.
|
||||
self workingFile exists ifTrue: [self workingFile delete].
|
||||
self workingFile ensureCreateFile.
|
||||
[ self exportAsSton: self notebook on: (self workingFile writeStream)]
|
||||
ensure: [ (self workingFile writeStream) ifNotNil: #close ].
|
||||
self workingFile ensureDelete.
|
||||
self workingFile writeStreamDo: [:stream |
|
||||
self exportAsSton: self notebook on:stream ].
|
||||
self title: self workingFile basenameWithIndicator, ' | Grafoscopio notebook'.
|
||||
self inform: ('File saved at: ', String cr, self workingFile fullName).
|
||||
GrafoscopioDockingBar updateRecentNotebooksWith: aFileReference.
|
||||
|
||||
]
|
||||
|
||||
{ #category : #persistence }
|
||||
@ -748,7 +747,7 @@ GrafoscopioNotebook >> topBar [
|
||||
addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Reload link';
|
||||
description: 'Import link content';
|
||||
icon: #glamorousRefresh asIcon;
|
||||
action: [ self importLinkContent ] ].
|
||||
group
|
||||
|
Loading…
Reference in New Issue
Block a user