First public commit to modularize Grafoscopio.
Now GrafoscopioDocumentation can be downloaded by several related projects without having to download the full Grafoscopio Package, only the Utilities. Maybe here we can put also the ones that deals with installation of simple software (Fossil, SQLite)... time will tell.
This commit is contained in:
parent
eb5bfa38e0
commit
a4af9071a5
3
repository/.properties
Normal file
3
repository/.properties
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
#format : #tonel
|
||||
}
|
215
repository/Grafoscopio-Utils/GrafoscopioDocumentation.class.st
Normal file
215
repository/Grafoscopio-Utils/GrafoscopioDocumentation.class.st
Normal file
@ -0,0 +1,215 @@
|
||||
"
|
||||
I model a documentation object for Grafoscopio.
|
||||
Documents are stored in a fossil repository and have
|
||||
relative paths to it.
|
||||
"
|
||||
Class {
|
||||
#name : #GrafoscopioDocumentation,
|
||||
#superclass : #Object,
|
||||
#instVars : [
|
||||
'repository',
|
||||
'documents',
|
||||
'localPlace'
|
||||
],
|
||||
#category : #'Grafoscopio-Utils'
|
||||
}
|
||||
|
||||
{ #category : #queries }
|
||||
GrafoscopioDocumentation class >> current [
|
||||
"I model the important documents that belong to the Grafoscopio documentation.
|
||||
When more documents become more mature and usable, I will include them."
|
||||
|
||||
| gfcDocumentation |
|
||||
gfcDocumentation := self new.
|
||||
gfcDocumentation repository: (FossilRepo new remote: 'http://mutabit.com/repos.fossil/grafoscopio').
|
||||
gfcDocumentation documents
|
||||
add: 'Docs/Es/Tutoriales/tutorial.ston';
|
||||
add: 'Docs/En/Books/Manual/manual.ston';
|
||||
add: 'Docs/En/dev-notes.ston';
|
||||
add: 'Docs/En/Books/Manual/manual.pdf'.
|
||||
gfcDocumentation localPlace.
|
||||
^ gfcDocumentation
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> dataviz [
|
||||
"I model the important documents that belong to the Grafoscopio documentation.
|
||||
When more documents become more mature and usable, I will include them."
|
||||
|
||||
| gfcDocumentation |
|
||||
gfcDocumentation := self new.
|
||||
gfcDocumentation repository: (FossilRepo new remote: 'http://mutabit.com/repos.fossil/grafoscopio').
|
||||
gfcDocumentation documents
|
||||
add: 'Packages/Dataviz/dataviz.ston'.
|
||||
gfcDocumentation localPlace.
|
||||
^ gfcDocumentation
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> download: fileNameWithRelativePath [
|
||||
| fileName relativePathFolders newPath parentFolder |
|
||||
fileName := (fileNameWithRelativePath splitOn: $/) last.
|
||||
relativePathFolders := (fileNameWithRelativePath splitOn: $/) allButLast.
|
||||
newPath := self current localPlace path.
|
||||
relativePathFolders do: [ :folder | newPath := newPath / folder ].
|
||||
parentFolder := newPath asFileReference.
|
||||
parentFolder exists ifFalse: [ parentFolder ensureCreateDirectory ].
|
||||
GrafoscopioDockingBar
|
||||
downloadingFrom: self current repository remote asString, '/doc/tip/', fileNameWithRelativePath
|
||||
withMessage: 'Downloading ', fileName
|
||||
into: parentFolder
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> initialize [
|
||||
self
|
||||
update: 'current';
|
||||
update: 'dataviz'
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> isFileUpdatedFor: relativeFilePath [
|
||||
"I compare if the local and remote copies of a relativeFilePath are updated for the current
|
||||
documentation and return true if they are and false in any other case"
|
||||
| localFile |
|
||||
localFile := self current localPlace / relativeFilePath.
|
||||
localFile exists
|
||||
ifFalse: [ ^ false ]
|
||||
ifTrue: [ ^ ExternalApp compareHashFor: localFile with: (self current repository lastHashNumberFor: relativeFilePath) ]
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> listOutdatedDocsIn: aDocumentsListName [
|
||||
"I return the list of all documentent where the local copy and the remote copy doesn't match"
|
||||
aDocumentsListName ifNil: [ ^ self ].
|
||||
aDocumentsListName ifEmpty: [ ^ self ].
|
||||
^ (self perform: aDocumentsListName asSymbol) documents reject: [ :doc | (self isFileUpdatedFor: doc) ]
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> listOutdatedIn: aGrafoscopioDocumentation [
|
||||
"I return the list of all documentent where the local copy and the remote copy doesn't match"
|
||||
self listOutdatedDocsIn: (self perform: aGrafoscopioDocumentation) documents
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> openDatavizIntro [
|
||||
self openNotebookFrom: 'dataviz' At: 1
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> openDevNotes [
|
||||
self openNotebookFrom: 'current' At: 3
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> openManual [
|
||||
"I open the proper notebook in the adecuate documentation."
|
||||
self openNotebookFrom: 'current' At: 2
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> openNotebookFrom: aDocumentation At: index [
|
||||
"I open a notebook included with the documentation, located at a given index"
|
||||
| notebookTemp gfcDocs |
|
||||
gfcDocs := self perform: aDocumentation asSymbol.
|
||||
(index between: 1 and: gfcDocs documents size)
|
||||
ifFalse: [ ^ self ]
|
||||
ifTrue: [
|
||||
notebookTemp := (gfcDocs localPlace fullName, '/', (gfcDocs documents at: index)) asFileReference.
|
||||
notebookTemp exists
|
||||
ifTrue: [GrafoscopioNotebook new openFromFile: notebookTemp]
|
||||
ifFalse: [ self updateUIFor: aDocumentation ]]
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> openPDFManual [
|
||||
"I open the documentation in PDF format. I only work on Unix right now, but in the future my creator hopes to be able
|
||||
to have truly multiplatform support"
|
||||
| pdfManual docs |
|
||||
docs := self current.
|
||||
pdfManual := docs documents at: 4.
|
||||
WebBrowser openOn: (docs localPlace / pdfManual) fullName.
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> openTutorial [
|
||||
"I open the proper notebook in the adecuate documentation."
|
||||
self openNotebookFrom: 'current' At: 1
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> update: aDocumentationName [
|
||||
(self listOutdatedDocsIn: aDocumentationName)
|
||||
ifEmpty: [
|
||||
self inform: 'All documents in the ', aDocumentationName,' collection are already updated'.
|
||||
^ self ]
|
||||
ifNotEmpty: [:outdatedDocs |
|
||||
outdatedDocs do: [ :eachDoc | self download: eachDoc].
|
||||
self inform: 'Updating of ', aDocumentationName,' documentation finished.' ]
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioDocumentation class >> updateAll [
|
||||
self
|
||||
update: 'current';
|
||||
update: 'dataviz'
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> updateAllUI [
|
||||
"Updates documentation (manual, tutorials) from the official repository for a given documentation."
|
||||
| update |
|
||||
update := (UIManager default
|
||||
confirm: 'Do you wish to update the documentation?'
|
||||
label: 'Update documentation').
|
||||
update
|
||||
ifTrue: [ self updateAll ]
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> updateDocsPlaceUI [
|
||||
self current localPlace: (UIManager default chooseDirectory: 'Path to the documentation folder')
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioDocumentation class >> updateUIFor: aDocumentationName [
|
||||
"Updates documentation (manual, tutorials) from the official repository for a given documentation."
|
||||
| update |
|
||||
update := (UIManager default
|
||||
confirm: 'Do you wish to update the ', aDocumentationName,' documentation?'
|
||||
label: 'Update ', aDocumentationName, ' documentation').
|
||||
update ifTrue: [ self update: aDocumentationName ]
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioDocumentation >> documents [
|
||||
^ documents ifNil: [ documents := OrderedCollection new ]
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioDocumentation >> documents: anObject [
|
||||
documents := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioDocumentation >> localPlace [
|
||||
^ localPlace ifNil: [
|
||||
localPlace := FileLocator workingDirectory asFileReference / 'Grafoscopio'.
|
||||
self localPlace exists ifFalse: [ self localPlace ensureCreateDirectory ] ].
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioDocumentation >> localPlace: anObject [
|
||||
localPlace := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioDocumentation >> repository [
|
||||
^ repository
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioDocumentation >> repository: anObject [
|
||||
repository := anObject
|
||||
]
|
29
repository/Grafoscopio-Utils/GrafoscopioUtils.class.st
Normal file
29
repository/Grafoscopio-Utils/GrafoscopioUtils.class.st
Normal file
@ -0,0 +1,29 @@
|
||||
"
|
||||
I contain simple functionality used by Grafoscopio, Datavis or other
|
||||
related projects.
|
||||
"
|
||||
Class {
|
||||
#name : #GrafoscopioUtils,
|
||||
#superclass : #Object,
|
||||
#category : #'Grafoscopio-Utils'
|
||||
}
|
||||
|
||||
{ #category : #'graphical interface' }
|
||||
GrafoscopioUtils class >> downloadingFrom: downloadUrl withMessage: aString into: location [
|
||||
| fileName |
|
||||
fileName := (downloadUrl splitOn: $/) last.
|
||||
(location / fileName) exists ifTrue: [ (location / fileName) ensureDelete ].
|
||||
[: bar |
|
||||
bar title: aString.
|
||||
[ZnClient new
|
||||
enforceHttpSuccess: true;
|
||||
url: downloadUrl;
|
||||
downloadTo: location;
|
||||
signalProgress: true
|
||||
]
|
||||
on: HTTPProgress
|
||||
do: [ :progress |
|
||||
progress isEmpty ifFalse: [ bar current: progress percentage ].
|
||||
progress resume ].
|
||||
] asJob run.
|
||||
]
|
1
repository/Grafoscopio-Utils/package.st
Normal file
1
repository/Grafoscopio-Utils/package.st
Normal file
@ -0,0 +1 @@
|
||||
Package { #name : #'Grafoscopio-Utils' }
|
Loading…
Reference in New Issue
Block a user