Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaking: ES6 Upgrade (fixes: #13) #30

Closed
wants to merge 15 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions bower.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
{
"name": "adapt-xAPI",
"name": "adapt-kineo-xAPI",
"version": "2.1.4",
"framework": ">=3.0.0",
"framework": ">=5.19.1",
"homepage": "https://github.com/cgkineo/adapt-xAPI",
"issues": "https://github.com/cgkineo/adapt-xAPI/issues",
"displayName": "xAPI",
"bugs": "https://github.com/cgkineo/adapt-xAPI/issues",
"extension": "xapi",
"targetAttribute": "_xapi",
"displayName": "xAPI",
"description": "An extension which allows the Experience API (xAPI) to collect data on human performance, stored within a suitable Learning Record Store (LRS).",
"main": "/js/adapt-xapi.js",
"main": "/js/adapt-kineo-xapi.js",
"keywords": [
"adapt-plugin",
"adapt-extension",
Expand All @@ -17,7 +18,6 @@
"experience api",
"tracking"
],
"targetAttribute": "_xapi",
"license": "GPL-3.0",
"private": true,
"devDependencies": {
Expand Down
File renamed without changes.
237 changes: 116 additions & 121 deletions js/statements/abstractStatementModel.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
define([
'core/js/adapt',
'../utils'
], function(Adapt, Utils) {
import Adapt from "core/js/adapt";
import Utils from "../utils";

var AbstractStatementModel = Backbone.Model.extend({
export default class AbstractStatementModel extends Backbone.Model {

defaults: {
defaults() {
return {
recipeLang: 'en',
lang: 'en',
activityId: null,
Expand All @@ -15,162 +14,158 @@ define([
contextActivities: {
grouping: []
}
},
};
}

getData: function(model, state) {
const statement = new ADL.XAPIStatement();
statement.id = ADL.ruuid();
statement.actor = new ADL.XAPIStatement.Agent(this.get('actor'));
statement.verb = this.getVerb(model);
statement.object = this.getObject(model);
statement.context = this.getContext(model, state);
statement.timestamp = Utils.getTimestamp();
getData(model, state) {
const statement = new ADL.XAPIStatement();
statement.id = ADL.ruuid();
statement.actor = new ADL.XAPIStatement.Agent(this.get('actor'));
statement.verb = this.getVerb(model);
statement.object = this.getObject(model);
statement.context = this.getContext(model, state);
statement.timestamp = Utils.getTimestamp();

return statement;
},
return statement;
}

getVerb: function(model) {
// intentionally empty to be overriden by subclass
},
getVerb(model) {
// intentionally empty to be overriden by subclass
}

getActivityType: function(model) {
// intentionally empty to be overriden by subclass
},
getActivityType(model) {
// intentionally empty to be overriden by subclass
}

getObject: function(model) {
const object = new ADL.XAPIStatement.Activity(this.getUniqueIri(model));
getObject(model) {
const object = new ADL.XAPIStatement.Activity(this.getUniqueIri(model));

const definition = {
type: this.getActivityType(model),
name: this.getName(model)
};
const definition = {
type: this.getActivityType(model),
name: this.getName(model)
};

const extensions = this.getObjectExtensions(model);
const extensions = this.getObjectExtensions(model);

if (!(_.isEmpty(extensions))) definition.extensions = extensions;
if (!(_.isEmpty(extensions))) definition.extensions = extensions;

object.definition = definition;
object.definition = definition;

return object;
},
return object;
}

getObjectExtensions: function(model) {
const extensions = {};
const type = model.get('_type');
getObjectExtensions(model) {
const extensions = {};
const type = model.get('_type');

if (type) extensions['https://adaptlearning.org/xapi/extension/model'] = type;
if (type) extensions['https://adaptlearning.org/xapi/extension/model'] = type;

return extensions;
},
return extensions;
}

getContext: function(model, state) {
const context = {
contextActivities: this.getContextActivities(model),
extensions: this.getContextExtensions(model, state),
language: this.get('lang')
};
getContext(model, state) {
const context = {
contextActivities: this.getContextActivities(model),
extensions: this.getContextExtensions(model, state),
language: this.get('lang')
};

const registration = this.get('registration');
if (registration) context.registration = registration;
const registration = this.get('registration');
if (registration) context.registration = registration;

const revision = this.get('revision');
if (revision) context.revision = revision;
const revision = this.get('revision');
if (revision) context.revision = revision;

return context;
},
return context;
}

getContextActivities: function(model) {
const contextActivities = _.clone(this.get('contextActivities'));
contextActivities.grouping = this.getContextActivitiesGrouping(model);
getContextActivities(model) {
const contextActivities = _.clone(this.get('contextActivities'));
contextActivities.grouping = this.getContextActivitiesGrouping(model);

return contextActivities;
},
return contextActivities;
}

getContextActivitiesGrouping: function(model) {
const grouping = this.get('contextActivities').grouping.slice();
getContextActivitiesGrouping(model) {
const grouping = this.get('contextActivities').grouping.slice();

grouping.push(this.getCourseContextActivity());
grouping.push(this.getCourseContextActivity());

const modelType = model.get('_type');

if (modelType && modelType !== 'course') {
grouping.push.apply(grouping, this.getContentObjectsContextActivities(model));
}
const modelType = model.get('_type');

return grouping;
},

getCourseContextActivity: function() {
const object = AbstractStatementModel.prototype.getObject.call(this, Adapt.course);
object.definition.type = ADL.activityTypes.course;
if (modelType && modelType !== 'course') {
grouping.push.apply(grouping, this.getContentObjectsContextActivities(model));
}

return object;
},
return grouping;
}

getContentObjectsContextActivities: function(model) {
const contentObjects = model.getAncestorModels(true).filter(function(model) {
const modelType = model.get('_type');
const isContentObject = modelType === 'menu' || modelType === 'page';
getCourseContextActivity() {
const object = AbstractStatementModel.prototype.getObject.call(this, Adapt.course);
object.definition.type = ADL.activityTypes.course;

if (isContentObject) return model;
});
return object;
}

contentObjects.reverse();
getContentObjectsContextActivities(model) {
const contentObjects = model.getAncestorModels(true).filter(function(model) {
const modelType = model.get('_type');
const isContentObject = modelType === 'menu' || modelType === 'page';

const activities = [];
if (isContentObject) return model;
});

contentObjects.forEach(function(model) {
activities.push(this.getContentObjectContextActivity(model));
}, this);
contentObjects.reverse();

return activities;
},
const activities = [];

getContentObjectContextActivity: function(model) {
const modelType = model.get('_type');
const isContentObject = modelType === 'menu' || modelType === 'page';
const contentObject = (isContentObject) ? model : model.findAncestor('contentObjects');
const object = AbstractStatementModel.prototype.getObject.call(this, contentObject);
object.definition.type = ADL.activityTypes.module;
contentObjects.forEach(function(model) {
activities.push(this.getContentObjectContextActivity(model));
}, this);

return object;
},
return activities;
}

getContextExtensions: function(model, state) {
const buildConfig = Adapt.build;
const frameworkVersion = (buildConfig) ? buildConfig.get('package').version : '<3.0.0';
getContentObjectContextActivity(model) {
const modelType = model.get('_type');
const isContentObject = modelType === 'menu' || modelType === 'page';
const contentObject = (isContentObject) ? model : model.findAncestor('contentObjects');
const object = AbstractStatementModel.prototype.getObject.call(this, contentObject);
object.definition.type = ADL.activityTypes.module;

const extensions = {
'https://adaptlearning.org/xapi/extension/framework': 'Adapt',
'https://adaptlearning.org/xapi/extension/framework_version': frameworkVersion
};
return object;
}

return extensions;
},
getContextExtensions(model, state) {
const buildConfig = Adapt.build;
const frameworkVersion = (buildConfig) ? buildConfig.get('package').version : '<3.0.0';

getName: function(model) {
const name = {};
name[this.get('lang')] = model.get('title') || model.get('displayTitle');
const extensions = {
'https://adaptlearning.org/xapi/extension/framework': 'Adapt',
'https://adaptlearning.org/xapi/extension/framework_version': frameworkVersion
};

return name;
},
return extensions;
}

getUniqueIri: function(model) {
let iri = this.get('activityId');
getName(model) {
const name = {};
name[this.get('lang')] = model.get('title') || model.get('displayTitle');

if (model && model.get('_type') !== 'course') {
iri += '/' + model.get('_id');
}
return name;
}

return iri;
},
getUniqueIri(model) {
let iri = this.get('activityId');

getISO8601Duration: function(milliseconds) {
return Utils.getISO8601Duration(milliseconds);
if (model && model.get('_type') !== 'course') {
iri += '/' + model.get('_id');
}

});

return AbstractStatementModel;
return iri;
}

});
getISO8601Duration(milliseconds) {
return Utils.getISO8601Duration(milliseconds);
}
}
61 changes: 61 additions & 0 deletions js/statements/accessedStatementModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import AbstractStatementModel from './abstractStatementModel';

class AccessedStatementModel extends AbstractStatementModel {

getVerb(model) {
const verb = {
id: 'https://activitystrea.ms/schema/1.0/access',
display: {}
};

verb.display[this.get('recipeLang')] = 'accessed';

return verb;
}

getActivityType(model) {
return 'http://id.tincanapi.com/activitytype/resource';
}

getName(model) {
const name = {};
name[this.get('lang')] = model.get('title');

return name;
}

getDescription(model) {
const description = {};
description[this.get('lang')] = model.get('description');

return description;
}

getContextExtensions(model) {
const extensions = AbstractStatementModel.prototype.getContextExtensions.apply(this, arguments);

_.extend(extensions, {
'http://id.tincanapi.com/extension/location': model.get('location'),
'http://id.tincanapi.com/extension/tags': {
title: model.get('title'),
type: model.get('type'),
link: model.get('url')
}
});

return extensions;
}

getUniqueIri(model) {
let iri = this.get('activityId');

if (model && model.get('_type') !== 'course') {
iri += '/resources';
}

return iri;
}

}

export default AccessedStatementModel;
Loading