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:
parent
d51dc50f11
commit
caa7891b93
|
@ -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 -->
|
||||
|
|
2
main.js
2
main.js
|
@ -6,8 +6,6 @@ function createWindow () {
|
|||
width: 1024,
|
||||
height: 768,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: false
|
||||
},
|
||||
icon: __dirname + '/img/APMail.png'
|
||||
})
|
||||
|
|
10
render.js
10
render.js
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue