Use import/export instead of require, so node is not needed in the render. Also fix an issue with previous/next in timelines.

This commit is contained in:
Feufochmar 2021-05-24 13:48:22 +02:00
parent d51dc50f11
commit caa7891b93
12 changed files with 97 additions and 96 deletions

View File

@ -5,7 +5,10 @@
<meta charset="UTF-8" />
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
<link href="apmail.css" rel="stylesheet" type="text/css" media="all" />
<script src="render.js"></script>
<script type="module">
import {UI} from './render.js'
window.UI = UI
</script>
</head>
<body onload="UI.checkConnection();">
<!-- Navigation column -->

View File

@ -6,8 +6,6 @@ function createWindow () {
width: 1024,
height: 768,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
},
icon: __dirname + '/img/APMail.png'
})

View File

@ -1,7 +1,7 @@
const {Actor} = require('./src/actor.js')
const {Timeline, KnownActivities} = require('./src/timeline.js')
const {Message} = require('./src/message.js')
const {ConnectedUser} = require('./src/connected-user.js')
import {Actor} from './src/actor.js'
import {Timeline, KnownActivities} from './src/timeline.js'
import {Message} from './src/message.js'
import {ConnectedUser} from './src/connected-user.js'
// For access of elements
const Elem = function(id) {
@ -493,3 +493,5 @@ const UI = {
})
}
}
export {UI}

View File

@ -1,5 +1,5 @@
const {Actor} = require('./actor.js')
const {KnownActors} = require('./known-actors.js')
import {Actor} from './actor.js'
import {KnownActors} from './known-actors.js'
// ActivityObject class: wrapper around an Object of the ActivityStream spec
const ActivityObject = function(as_object) {
@ -109,4 +109,4 @@ ActivityObject.prototype = {
}
// Exported structures
exports.ActivityObject = ActivityObject
export {ActivityObject}

View File

@ -74,8 +74,8 @@ const ASMention = function() {}
// Object fetcher
// Convert resources from the resource fetcher into Activity objects
const {TokenCollection} = require('./token-collection.js')
Fetcher = {
import {TokenCollection} from './token-collection.js'
const Fetcher = {
// Cache of already accessed objects
knownObjects: {},
// Get an object
@ -536,7 +536,7 @@ ASCollectionPage.prototype.constructor = ASCollectionPage
ASOrderedCollectionPage.prototype = Object.create(ASCollectionPage.prototype)
Object.assign(ASOrderedCollectionPage.prototype, ASOrderedCollection.prototype)
// Helping function for removing duplicates
unique = function(arr) {
const unique = function(arr) {
return arr.filter(function (elem, idx) { return idx === arr.indexOf(elem) })
}
Object.assign(ASOrderedCollectionPage.prototype,
@ -857,63 +857,65 @@ ASMention.prototype.constructor = ASMention
////
// Exported structures
export {
// Fetcher
exports.Fetcher = Fetcher
Fetcher,
// Core types
exports.ASObject = ASObject
exports.ASLink = ASLink
exports.ASActivity = ASActivity
exports.ASIntransitiveActivity = ASIntransitiveActivity
exports.ASCollection = ASCollection
exports.ASOrderedCollection = ASOrderedCollection
exports.ASCollectionPage = ASCollectionPage
exports.ASOrderedCollectionPage = ASOrderedCollectionPage
exports.ASActor = ASActor
ASObject,
ASLink,
ASActivity,
ASIntransitiveActivity,
ASCollection,
ASOrderedCollection,
ASCollectionPage,
ASOrderedCollectionPage,
ASActor,
// Activity types
exports.ASAccept = ASAccept
exports.ASAdd = ASAdd
exports.ASAnnounce = ASAnnounce
exports.ASArrive = ASArrive
exports.ASBlock = ASBlock
exports.ASCreate = ASCreate
exports.ASDelete = ASDelete
exports.ASDislike = ASDislike
exports.ASFlag = ASFlag
exports.ASFollow = ASFollow
exports.ASIgnore = ASIgnore
exports.ASInvite = ASInvite
exports.ASJoin = ASJoin
exports.ASLeave = ASLeave
exports.ASLike = ASLike
exports.ASListen = ASListen
exports.ASMove = ASMove
exports.ASOffer = ASOffer
exports.ASQuestion = ASQuestion
exports.ASReject = ASReject
exports.ASRead = ASRead
exports.ASRemove = ASRemove
exports.ASTentativeReject = ASTentativeReject
exports.ASTentativeAccept = ASTentativeAccept
exports.ASTravel = ASTravel
exports.ASUpdate = ASUpdate
exports.ASView = ASView
ASAccept,
ASAdd,
ASAnnounce,
ASArrive,
ASBlock,
ASCreate,
ASDelete,
ASDislike,
ASFlag,
ASFollow,
ASIgnore,
ASInvite,
ASJoin,
ASLeave,
ASLike,
ASListen,
ASMove,
ASOffer,
ASQuestion,
ASReject,
ASRead,
ASRemove,
ASTentativeReject,
ASTentativeAccept,
ASTravel,
ASUpdate,
ASView,
// Actor types
exports.ASApplication = ASApplication
exports.ASGroup = ASGroup
exports.ASOrganization = ASOrganization
exports.ASPerson = ASPerson
exports.ASService = ASService
ASApplication,
ASGroup,
ASOrganization,
ASPerson,
ASService,
// Object types
exports.ASArticle = ASArticle
exports.ASAudio = ASAudio
exports.ASDocument = ASDocument
exports.ASImage = ASImage
exports.ASNote = ASNote
exports.ASPage = ASPage
exports.ASPlace = ASPlace
exports.ASProfile = ASProfile
exports.ASRelationship = ASRelationship
exports.ASTombstone = ASTombstone
exports.ASVideo = ASVideo
ASArticle,
ASAudio,
ASDocument,
ASImage,
ASNote,
ASPage,
ASPlace,
ASProfile,
ASRelationship,
ASTombstone,
ASVideo,
// Link types
exports.ASMention = ASMention
ASMention,
}

View File

@ -1,6 +1,6 @@
const {Actor} = require('./actor.js')
const {KnownActors} = require('./known-actors.js')
const {ActivityObject} = require('./activity-object.js')
import {Actor} from './actor.js'
import {KnownActors} from './known-actors.js'
import {ActivityObject} from './activity-object.js'
// Activity class
const Activity = function (as_activity) {
@ -127,4 +127,4 @@ Activity.prototype = {
}
// Exported structures
exports.Activity = Activity
export {Activity}

View File

@ -1,4 +1,4 @@
const {Fetcher, ASActor} = require('./activity-vocabulary.js')
import {Fetcher, ASActor} from './activity-vocabulary.js'
// Actor class
// Add additional services around an ASActor
@ -125,4 +125,4 @@ Actor.prototype = {
}
// Exported structures
exports.Actor = Actor
export {Actor}

View File

@ -1,5 +1,5 @@
const {TokenCollection} = require('./token-collection.js')
const {Actor} = require('./actor.js')
import {TokenCollection} from './token-collection.js'
import {Actor} from './actor.js'
// Connected user structure
const ConnectedUser = {
@ -149,4 +149,4 @@ const ConnectedUser = {
}
// Exported structures
exports.ConnectedUser = ConnectedUser
export {ConnectedUser}

View File

@ -1,4 +1,4 @@
const {Actor} = require('./actor.js')
import {Actor} from './actor.js'
// A cache for actors, to avoid loading same actors several times when loading timelines
const KnownActors = {
@ -40,4 +40,4 @@ publicActor.fromDummyData('', 'public', 'Anyone', 'https://www.w3.org/ns/activit
KnownActors.set(publicActor.data.id, publicActor)
// Exported structures
exports.KnownActors = KnownActors
export {KnownActors}

View File

@ -1,4 +1,4 @@
const {ConnectedUser} = require('./connected-user.js')
import {ConnectedUser} from './connected-user.js'
// Outgoing messages
var Message = function() {
@ -96,4 +96,4 @@ Message.prototype = {
}
// Exported structures
exports.Message = Message
export {Message}

View File

@ -1,5 +1,5 @@
const {Fetcher} = require('./activity-vocabulary.js')
const {Activity} = require('./activity.js')
import {Fetcher} from './activity-vocabulary.js'
import {Activity} from './activity.js'
// Already fetched activities, as a map, in order to be able to fetch them by their id
const KnownActivities = {
@ -35,9 +35,6 @@ Timeline.prototype = {
// Fetch the attribute
fetched_timeline.refreshAttribute('first', function (ok, error) {
if (load_ok) {
this.activities = []
this.prev = fetched_timeline.prev
this.next = fetched_timeline.next
this.parsePage(fetched_timeline.first, callback)
} else {
callback(false, error)
@ -45,14 +42,8 @@ Timeline.prototype = {
}.bind(this))
} else if (fetched_timeline.type === 'OrderedCollection' && fetched_timeline.orderedItems) {
// Collection is not paginated
this.activities = []
this.prev = fetched_timeline.prev
this.next = fetched_timeline.next
this.parsePage(fetched_timeline, callback)
} else if (fetched_timeline.type === 'OrderedCollectionPage') {
this.activities = []
this.prev = fetched_timeline.prev
this.next = fetched_timeline.next
this.parsePage(fetched_timeline, callback)
} else {
callback(false, 'Unexpected answer from server when fetching activity collection.')
@ -65,12 +56,18 @@ Timeline.prototype = {
}.bind(this))
},
parsePage: function (collectionPage, callback) {
// Set the values
this.activities = []
this.prev = collectionPage.prev
this.next = collectionPage.next
// Fetch attributes of collectionPage
collectionPage.refreshAttribute('orderedItems', function (load_ok, failure_message) {
if (load_ok) {
if (load_ok && collectionPage.orderedItems) {
// Elements of the page have been fetched
// For each, convert them to Activity and put them in this.activities
this.addActivity(collectionPage.orderedItems.values(), callback, '')
} else if (load_ok) {
callback(false, 'No item in activity collection.')
} else {
callback(false, failure_message)
}
@ -99,5 +96,4 @@ Timeline.prototype = {
}
// Exported structures
exports.Timeline = Timeline
exports.KnownActivities = KnownActivities
export {Timeline, KnownActivities}

View File

@ -1,5 +1,5 @@
// A small object for getting the token when talking to a server
TokenCollection = {
const TokenCollection = {
tokens: {},
set: function (server, token) {
TokenCollection.tokens[server] = token
@ -11,4 +11,4 @@ TokenCollection = {
}
// Exported structures
exports.TokenCollection = TokenCollection
export {TokenCollection}