From 299375a035541250df837a960136f934aaaadd4b Mon Sep 17 00:00:00 2001 From: Offray Luna Date: Mon, 8 Jun 2020 15:57:53 -0500 Subject: [PATCH] Starting Internet Archive support and Brea templates and data sources. --- repository/Brea/ArchiveOrgItem.class.st | 118 ++++++++++++++++++++++++ repository/Brea/BreaDataSource.class.st | 31 +++++++ repository/Brea/BreaTemplate.class.st | 89 ++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 repository/Brea/ArchiveOrgItem.class.st create mode 100644 repository/Brea/BreaDataSource.class.st create mode 100644 repository/Brea/BreaTemplate.class.st diff --git a/repository/Brea/ArchiveOrgItem.class.st b/repository/Brea/ArchiveOrgItem.class.st new file mode 100644 index 0000000..1cc5f01 --- /dev/null +++ b/repository/Brea/ArchiveOrgItem.class.st @@ -0,0 +1,118 @@ +" +I model information of the items published on Internet Archive (https://archive.org/). +" +Class { + #name : #ArchiveOrgItem, + #superclass : #Object, + #instVars : [ + 'id', + 'metadata' + ], + #category : #Brea +} + +{ #category : #utility } +ArchiveOrgItem >> archive [ + ^ 'https://archive.org' +] + +{ #category : #utilities } +ArchiveOrgItem >> createHtmlImageGalleryList [ + "IMPORTANT: This is just a draft snipped. Should become a proper test o be deleted." + self metadata ifNil: [ self getMetadata ]. + ^ ' +
+ + + + +
' +] + +{ #category : #utilities } +ArchiveOrgItem >> embeddedUrl [ + + ^ 'https://archive.org/embed/', self id. +] + +{ #category : #utilities } +ArchiveOrgItem >> galleryItemsBaseUrl [ + "I create the place where all image would be located for creating a custom image gallery, + according with the requirements for nanogallery2." + + ^ 'https://', (self metadata at: 'd2'), (self metadata at: 'dir'), '/'. +] + +{ #category : #operation } +ArchiveOrgItem >> getMetadata [ + self id ifNil: [ ^ self ]. + self metadata: (NeoJSONReader fromString: (self archive, '/metadata/', self id) asUrl retrieveContents) +] + +{ #category : #accessing } +ArchiveOrgItem >> id [ + ^ id +] + +{ #category : #accessing } +ArchiveOrgItem >> id: anObject [ + id := anObject +] + +{ #category : #utilities } +ArchiveOrgItem >> imagesGalleryList [ + self metadata ifNil: [ self getMetadata ]. + ^ (self metadata at: 'files') select: [ :file | (file at: 'format') = 'JPEG Thumb' ] +] + +{ #category : #utilities } +ArchiveOrgItem >> imagesGalleryListAsDictionary [ + | galleryImages result | + self imagesGalleryList ifNil: [ ^ self ]. + galleryImages := OrderedCollection new. + self imagesGalleryList do: [ :imgMetadata | + galleryImages + add: (Dictionary new + at: 'imgOriginal' put: (imgMetadata at: 'original'); + at: 'imgThumb' put: (imgMetadata at: 'name'); + yourself) ]. + result := { 'archiveItemImages' -> galleryImages } asDictionary. + ^ result +] + +{ #category : #accessing } +ArchiveOrgItem >> metadata [ + ^ metadata +] + +{ #category : #accessing } +ArchiveOrgItem >> metadata: anObject [ + metadata := anObject +] + +{ #category : #utilities } +ArchiveOrgItem >> subjectTags [ + self id ifNil: [ ^ self ]. + self metadata ifNil: [ self getMetadata ]. + ^ (self metadata at: 'metadata') at: 'subject' +] + +{ #category : #utilities } +ArchiveOrgItem >> subjectTagsAsDictionary [ + | tagList result | + self imagesGalleryList ifNil: [ ^ self ]. + tagList := OrderedCollection new. + self subjectTags do: [ :tag | + tagList + add: (Dictionary new + at: 'tag' put: tag; + yourself) ]. + result := { 'tagList' -> tagList } asDictionary. + ^ result +] diff --git a/repository/Brea/BreaDataSource.class.st b/repository/Brea/BreaDataSource.class.st new file mode 100644 index 0000000..1de0c35 --- /dev/null +++ b/repository/Brea/BreaDataSource.class.st @@ -0,0 +1,31 @@ +Class { + #name : #BreaDataSource, + #superclass : #Object, + #instVars : [ + 'source', + 'queries' + ], + #category : #Brea +} + +{ #category : #accessing } +BreaDataSource >> queries [ + ^ queries +] + +{ #category : #accessing } +BreaDataSource >> queries: anObject [ + queries := anObject +] + +{ #category : #accessing } +BreaDataSource >> source [ + ^ source +] + +{ #category : #accessing } +BreaDataSource >> source: aDictionary [ + "Key, value pair in aDictionary contain a short name and a url pointing to a local or a remote + resource. If is local a FileLocator should be provided." + source := aDictionary +] diff --git a/repository/Brea/BreaTemplate.class.st b/repository/Brea/BreaTemplate.class.st new file mode 100644 index 0000000..f23e4f9 --- /dev/null +++ b/repository/Brea/BreaTemplate.class.st @@ -0,0 +1,89 @@ +" +I define a [Mustache][1] template and how it is used to create +derivate output files combining it with particular data sources. + +[1]: https://mustache.github.io/ +" +Class { + #name : #BreaTemplate, + #superclass : #Object, + #instVars : [ + 'template', + 'data', + 'location', + 'queries', + 'outputs' + ], + #category : #Brea +} + +{ #category : #adding } +BreaTemplate >> addDataSourceNamed: name with: source [ + self + data at: name put: source. + self data. +] + +{ #category : #accessing } +BreaTemplate >> data [ + ^ data ifNil: [ data := Dictionary new ] +] + +{ #category : #accessing } +BreaTemplate >> data: aDictionary [ + "Each item in the dictionary is a unique alias (as key) and a data location (as value), + usually on the web. + Alias and locations are used later to define data queries to feed into templates." + data := aDictionary +] + +{ #category : #accessing } +BreaTemplate >> location [ + ^ location +] + +{ #category : #accessing } +BreaTemplate >> location: aFolderPath [ + "This is the place where a template and its derivate files are located. + A shared location is an easy approach to start with and creates more explicit + relation between derived files and templates. + Eventually some re-mapping or re-routing could be used so templates and their outputs + could be further apart." + location := aFolderPath +] + +{ #category : #accessing } +BreaTemplate >> outputs [ + ^ outputs +] + +{ #category : #accessing } +BreaTemplate >> outputs: fileNamesList [ + "fileNamesList contain the files which are derived from the template." + outputs := fileNamesList +] + +{ #category : #accessing } +BreaTemplate >> queries [ + ^ queries ifNil: [ queries := Dictionary new ] +] + +{ #category : #accessing } +BreaTemplate >> queries: aDictionary [ + "aDictionary contains the alias for the query as key and a block that will be executed + on a particular data source, as value." + queries := aDictionary +] + +{ #category : #accessing } +BreaTemplate >> template [ + ^ template +] + +{ #category : #accessing } +BreaTemplate >> template: aFileName [ + "I provide the name of the mustache base template. + The file can have any name, but by convention they end in '.mus.html' 'mus.md' and + so on." + template := aFileName +]