SlideShare a Scribd company logo
1 of 45
Customizing Assessment:
Why extending our APIs
is easier than you think
10:30 – 11:10am
Michael & Pierre
Michael Sharman
Director of Product & Engineering
michael.sharman@learnosity.com
Pierre Bergamin
Technical Lead - Assessment
pierre.bergamin@learnosity.com
Presenters
1. Our objectives for assessment
2. Learnosity 101
3. Configuring our APIs
4. Styling our APIs
5. Extending your solution
Outline
● Learners
○ K–12
○ Higher Education
○ Corporate
○ Test Prep
● Developers
○ People integrating the APIs – you!
Who we develop for
Learnosity’s APIs are:
● Powerful
● Flexible
● Extendable
● Simple
46 million tests delivered per month
Product objectives
1. Our objectives for assessment
2. Learnosity 101
3. Configuring our APIs
4. Styling our APIs
5. Extending your solution
Essential technologies
How to use our APIs <!-- HTML hook -->
<div id="learnosity_assess"></div>
<!-- Embed API script -->
<script src="https://items.learnosity.com"></script>
<script>
const initOptions = {
"security": {
// Security JSON
},
"request": {
// Initialization JSON
}
};
const itemsApp = LearnosityItems.init(initOptions, {
readyListener() {
},
errorListener() {
}
});
</script>
1. HTML hook
2. Embedding the API script
3. Initialization options
↳ server-side security signature
generation required
1. API initialization
Essential API hooks
App Instance
↳ Object containing methods to interact with
○ Public methods
○ Events
Ready Listener
↳ Function called when the API has initialised
Error Listener
↳ Function called when the errors are raised
const itemsApp = LearnosityItems.init(initOptions, {
readyListener() {
console.log(`API ready`);
},
errorListener(error) {
console.error(`an error occured`, error);
}
});
Items API
Assess API
Questions API
Items API
Assess API
Questions API
Usage scenario – Player
Questions API
Items API
Questions API
Items API
Questions API
Usage scenario – Inline
1. Our objectives for assessment
2. Learnosity 101
3. Configuring our APIs
4. Styling our APIs
5. Extending your solution
// Configuration is handled via a simple JSON request
// object that is passed to the init() method
{
"security": {/* security object */},
"request": {
"activity_id": "itemsassessdemo",
"name": "Items API demo - assess activity",
"rendering_type": "assess",
"state": "initial",
"type": "submit_practice",
"session_id": "9f730ce2-faa1-4062-adbb-cd9552490767",
"user_id": "demo_student",
"items": [
"Demo1",
"Demo2"
],
"assess_inline": true,
"config": {
"regions": "main",
"time": {
"max_time": 1500,
"limit_type": "soft",
"warning_time": 120,
}
}
}
}
Configuring the player
● Student controls
○ Pause
○ Navigation
○ Tools
● Player controls
○ Item counter
○ Timed tests
○ Component layout
// Configuration is handled via a simple JSON request
// object that is passed to the init() method
{
"security": {/* security object */},
"request": {
"activity_id": "itemsassessdemo",
"name": "Items API demo - assess activity",
"rendering_type": "assess",
"state": "initial",
"type": "submit_practice",
"session_id": "9f730ce2-faa1-4062-adbb-cd9552490767",
"user_id": "demo_student",
"items": [
"Demo1",
"Demo2"
],
"config": {
"regions": "main",
"time": {
"max_time": 1500,
"limit_type": "soft",
"warning_time": 120,
"countdown_option": false
}
}
}
}
Time controls
Items API
// Configuration is handled via a simple JSON request
// object that is passed to the init() method
{
"security": {/* security object */},
"request": {
"activity_id": "itemsassessdemo",
"name": "Items API demo - assess activity",
"rendering_type": "assess",
"state": "initial",
"type": "submit_practice",
"session_id": "9f730ce2-faa1-4062-adbb-cd9552490767",
"user_id": "demo_student",
"items": [
"Demo1",
"Demo2"
],
"config": {
"navigation": {
"show_accessibility": true,
"show_answermasking": true,
"show_fullscreencontrol": true
}
}
}
}
Player controls
Items API
● < 2014 - fixed approach
Layout in 2014
Regions today
Configuring regions – Out of the box
// Configuration is handled via a simple JSON request
// object that is passed to the init() method
{
"security": {/* security object */},
"request": {
"activity_id": "itemsassessdemo",
"name": "Items API demo - assess activity",
"rendering_type": "assess",
"state": "initial",
"type": "submit_practice",
"session_id": "9f730ce2-faa1-4062-adbb-cd9552490767",
"user_id": "demo_student",
"items": [
"Demo1",
"Demo2"
],
"config": {
"regions": "main"
}
}
}
Configuring regions – Out of the box
// Configuration is handled via a simple JSON request
// object that is passed to the init() method
{
"security": {/* security object */},
"request": {
"activity_id": "itemsassessdemo",
"name": "Items API demo - assess activity",
"rendering_type": "assess",
"state": "initial",
"type": "submit_practice",
"session_id": "9f730ce2-faa1-4062-adbb-cd9552490767",
"user_id": "demo_student",
"items": [
"Demo1",
"Demo2"
],
"config": {
"regions": "horizontal"
}
}
}
Configuring regions – Out of the box
// Configuration is handled via a simple JSON request
// object that is passed to the init() method
{
"security": {/* security object */},
"request": {
"activity_id": "itemsassessdemo",
"name": "Items API demo - assess activity",
"rendering_type": "assess",
"state": "initial",
"type": "submit_practice",
"session_id": "9f730ce2-faa1-4062-adbb-cd9552490767",
"user_id": "demo_student",
"items": [
"Demo1",
"Demo2"
],
"config": {
"regions": "horizontal-fixed"
}
}
}
● Control where elements go
● Order
● Minimalistic or rich UI
● Element options
Configuring regions – Flexibility
{
"regions": {
"top-right": [
{ "type": "pause_button" },
{ "type": "timer_element" },
{ "type": "reading_timer_element" },
{ "type": "itemcount_element" }
],
"right": [
{ "type": "save_button" },
{ "type": "fullscreen_button" },
{ "type": "separator_element" },
{ "type": "accessibility_button" },
{
"type": "calculator_button",
"scientific_option": true
},
{ "type": "verticaltoc_element" },
{ "type": "masking_button" }
],
"bottom-right": [
{
"type": "next_button",
"hide_label_option": true
}
]
}
}
Demo : Regions
https://docs.learnosity.com/demos/isolation/regions/educate/regions.php
1. Our objectives for assessment
2. Learnosity 101
3. Configuring our APIs
4. Styling our APIs
5. Extending your solution
Customizing Learnosity styles
● Overriding Learnosity API styles
○ Questions or Assess APIs
○ CSS specificity
● We can host your custom stylesheets or you do it
Customizing Learnosity styles
https://docs.learnosity.com/demos/isolation/questions_styles.php
Demo:
Middle School
https://docs.learnosity.com/demos/isolation/custom_ui/grade4-6/index.php
1. Our objectives for assessment
2. Learnosity 101
3. Configuring our APIs
4. Styling our APIs
5. Extending your solution
Extending your
solution
With public methods
● Programmatically control
your assessment
● Get/Set data
● App instance
Public methods
// Example 1: Get the list of attempted items
const attemptedItems = itemsApp.attemptedItems();
/*
[
"ccore_ccs_rabbit",
"ccore_DropDowns_inline_cloze_mp4",
"ccore_sbalance_online_43081"
]
*/
// Example 2: Show a custom dialog
itemsApp.assessApp().dialogs().custom.show({
header: "My Custom Header",
body: "Custom body with <strong>html</strong> support",
buttons: [
{
button_id: "my_primary_button",
label: "My Primary Button",
is_primary: true
},
{
button_id: "my_standard_button",
label: "My Standard Button",
is_primary: false
}
]
});
// Dismiss the custom dialog
itemsApp.assessApp().dialogs().custom.hide();
Public methods
addAccessibilityPalettes eventsApp getItems hasStarted on setAccessibility
addItems feature getItemsMetadata item.checkImages once setHeight
append features getProgress item.retryLoadImages question start
attemptedItems getCurrentItem getQuestions item.flag questions submit
attemptedQuestions getFeatures getResponses items.goto questionsApp unsaveableQuestions
audioPlayer getItemPosition getScores items.previous reset validQuestions
dialogs.show getItemResponses getSubmitssionData items.next safeToUnload validatableQuestions
dialogs.hide getItemScores getTime off save And more to come!
https://docs.learnosity.com/demos/isolation/custom_ui/corporate/index.php
Demo:
Your own next & previous buttons
Use your own “Next & Previous” buttons? Easy!
readyListener() {
document
.getElementById('next-item-btn')
.addEventListener('click', event => {
assessApp.items().next();
});
document
.getElementById('prev-item-btn')
.addEventListener('click', event => {
assessApp.items().previous();
});
}
<button id="prev-item-btn">Previous</button>
<button id="next-item-btn">Next</button>
Extending your
solution
With events
Events
● Player events
● Questions events
.on('eventName', callback, ctx);
↳ Binds a callback function that will be invoked whenever
the eventName is triggered.
↳ To supply a context to execute the callback on, pass the
optional third argument.
.once('eventName', callback, ctx);
.off('eventName', callback, ctx);
Plug into the API event bus
/* Example 1 - player event */
// Event handler - log the index of the item we navigate to
// and save
function itemChangedHandler(itemIndex) {
console.log('itemChanged', itemIndex);
itemsApp.save();
}
itemsApp.assessApp().on('item:changed', itemChangedHandler);
/* Example 2 - question facade event */
const audioQuestion = myQuestionsApp.question('60001');
// Start recording
audioQuestion.recording.start();
// Play response when recording is stopped
audioQuestion.on('recording:stopped', () => {
audioQuestion.response.play();
});
Back to our “custom dialog” solution
assessApp.on('button:answer1_button:clicked', () => {
console.log('That is right, well done!');
const lastItemIndex = Object.keys(assessApp.getItems()).length - 1;
// Dismiss the custom dialog
assessApp.dialogs().custom.hide();
// Go to the last item
assessApp.items().goto(lastItemIndex);
});
assessApp.on('button:answer2_button:clicked', () => {
console.log('Sorry mate, you can start your test again!');
// Dismiss the custom dialog
assessApp.dialogs().custom.hide();
// Go to the first item
assessApp.items().goto(0);
});
const assessApp = itemsApp.assessApp();
assessApp.dialogs().custom.show({
header: "How many Question types does Learnosity offer?",
body: "You get a <B>special</b> prize if you get it right!",
buttons: [
{
button_id: "answer1_button",
label: "65 or more",
is_primary: true
},
{
button_id: "answer2_button",
label: "64 or less",
is_primary: true
}
]
});
https://docs.learnosity.com/demos/products/assessapi/events.php
Demo:
List of Player Events
Putting it all together
Demo:
Blue Riding Hood
https://docs.learnosity.com/demos/products/questionsapi/stories/blueRidingHood/index.php
Still not enough?
Custom questions
Custom questions
Create your own Question Types to be used within Learnosity
Create JSON definition1
{
"response_id": "custom-response-1",
"type": "custom",
"js": "//mysite.com/demos/custom_shorttext.js",
...
}
2
LearnosityAmd.define(['underscore', 'mathcore'],
(_, mathcore) => {
/* Custom Question Class */
class Question {
constructor(options) { /* ... */ }
}
return { Question, /* ... */ };
});
Use Learnosity module definition
3 Scoring
isValid() { /* ... */ }
score() { /* ... */ }
maxScore() { /* ... */ }
Customization continuum
Configure Style Extend
Simplicity Simple Pretty Simple Simple if you know JavaScript
Frequency All customers Some customers A few customers
Skills/Tools Learnosity Learnosity + CSS Learnosity + JavaScript
Time Minutes to hours Hours to days Days to weeks
More Effort & Added ValueLess Effort
● Learnosity is designed to be customized
● Customize only the areas that are important to your users
● Only limited by your imagination.
● Allows you to easily differentiate your product, while taking
advantage of cutting-edge, scalable, powerful solutions.
Conclusions
Q & A
Customizing Assessment:
Why extending our APIs
is easier than you think
10:30 – 11:10am
Michael & Pierre

More Related Content

What's hot

Frontends w ithout javascript
Frontends w ithout javascriptFrontends w ithout javascript
Frontends w ithout javascriptStephen Lorello
 
Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsEPAM Systems
 
Intro to computer vision in .net
Intro to computer vision in .netIntro to computer vision in .net
Intro to computer vision in .netStephen Lorello
 
Watson IoT Platform Embedded Rules Concepts & APIs Overview
Watson IoT Platform Embedded Rules Concepts & APIs OverviewWatson IoT Platform Embedded Rules Concepts & APIs Overview
Watson IoT Platform Embedded Rules Concepts & APIs Overviewsmithson.martin
 
Watson IoT Action Manager Concepts & API Overview
Watson IoT Action Manager Concepts & API OverviewWatson IoT Action Manager Concepts & API Overview
Watson IoT Action Manager Concepts & API Overviewsmithson.martin
 
Functional Testing for React Native Apps
Functional Testing for React Native AppsFunctional Testing for React Native Apps
Functional Testing for React Native AppsK. Matthew Dupree
 
Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Rabble .
 
Django workshop : let's make a blog
Django workshop : let's make a blogDjango workshop : let's make a blog
Django workshop : let's make a blogPierre Sudron
 
지금 당장 (유사) BDD 시작하기
지금 당장 (유사) BDD 시작하기지금 당장 (유사) BDD 시작하기
지금 당장 (유사) BDD 시작하기chanju Jeon
 
Angular Tutorial Freshers and Experienced
Angular Tutorial Freshers and ExperiencedAngular Tutorial Freshers and Experienced
Angular Tutorial Freshers and Experiencedrajkamaltibacademy
 

What's hot (15)

Frontends w ithout javascript
Frontends w ithout javascriptFrontends w ithout javascript
Frontends w ithout javascript
 
Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript Basics
 
Ui5 con databinding
Ui5 con databindingUi5 con databinding
Ui5 con databinding
 
Intro to computer vision in .net
Intro to computer vision in .netIntro to computer vision in .net
Intro to computer vision in .net
 
Watson IoT Platform Embedded Rules Concepts & APIs Overview
Watson IoT Platform Embedded Rules Concepts & APIs OverviewWatson IoT Platform Embedded Rules Concepts & APIs Overview
Watson IoT Platform Embedded Rules Concepts & APIs Overview
 
Watson IoT Action Manager Concepts & API Overview
Watson IoT Action Manager Concepts & API OverviewWatson IoT Action Manager Concepts & API Overview
Watson IoT Action Manager Concepts & API Overview
 
Angular js
Angular jsAngular js
Angular js
 
Functional Testing for React Native Apps
Functional Testing for React Native AppsFunctional Testing for React Native Apps
Functional Testing for React Native Apps
 
Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007
 
Django workshop : let's make a blog
Django workshop : let's make a blogDjango workshop : let's make a blog
Django workshop : let's make a blog
 
Wt unit 2 ppts client side technology
Wt unit 2 ppts client side technologyWt unit 2 ppts client side technology
Wt unit 2 ppts client side technology
 
Wt unit 5 client &amp; server side framework
Wt unit 5 client &amp; server side frameworkWt unit 5 client &amp; server side framework
Wt unit 5 client &amp; server side framework
 
Opensocial Codelab
Opensocial CodelabOpensocial Codelab
Opensocial Codelab
 
지금 당장 (유사) BDD 시작하기
지금 당장 (유사) BDD 시작하기지금 당장 (유사) BDD 시작하기
지금 당장 (유사) BDD 시작하기
 
Angular Tutorial Freshers and Experienced
Angular Tutorial Freshers and ExperiencedAngular Tutorial Freshers and Experienced
Angular Tutorial Freshers and Experienced
 

Similar to Educate 2017: Customizing Assessments: Why extending the APIs is easier than you think

Pruebas unitarias con django
Pruebas unitarias con djangoPruebas unitarias con django
Pruebas unitarias con djangoTomás Henríquez
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...Wim Selles
 
WinAppDriver - Windows Store Apps Test Automation
WinAppDriver - Windows Store Apps Test AutomationWinAppDriver - Windows Store Apps Test Automation
WinAppDriver - Windows Store Apps Test AutomationJeremy Kao
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyOren Farhi
 
Agile methodologies based on BDD and CI by Nikolai Shevchenko
Agile methodologies based on BDD and CI by Nikolai ShevchenkoAgile methodologies based on BDD and CI by Nikolai Shevchenko
Agile methodologies based on BDD and CI by Nikolai ShevchenkoMoldova ICT Summit
 
TDD: Develop, Refactor and Release With Confidence
TDD: Develop, Refactor and Release With ConfidenceTDD: Develop, Refactor and Release With Confidence
TDD: Develop, Refactor and Release With ConfidenceMehdi Valikhani
 
Yelp Tech Talks: Mobile Testing 1, 2, 3
Yelp Tech Talks: Mobile Testing 1, 2, 3Yelp Tech Talks: Mobile Testing 1, 2, 3
Yelp Tech Talks: Mobile Testing 1, 2, 3Yelp Engineering
 
E2E testing con nightwatch.js - Drupalcamp Spain 2018
E2E testing con nightwatch.js  - Drupalcamp Spain 2018E2E testing con nightwatch.js  - Drupalcamp Spain 2018
E2E testing con nightwatch.js - Drupalcamp Spain 2018Salvador Molina (Slv_)
 
Google App Engine Developer - Day2
Google App Engine Developer - Day2Google App Engine Developer - Day2
Google App Engine Developer - Day2Simon Su
 
Using Task Queues and D3.js to build an analytics product on App Engine
Using Task Queues and D3.js to build an analytics product on App EngineUsing Task Queues and D3.js to build an analytics product on App Engine
Using Task Queues and D3.js to build an analytics product on App EngineRiver of Talent
 
Optimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature DeliveryOptimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature DeliveryOptimizely
 
Angular JS2 Training Session #2
Angular JS2 Training Session #2Angular JS2 Training Session #2
Angular JS2 Training Session #2Paras Mendiratta
 
Cómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte locoCómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte locoGemma Del Olmo
 
OpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonOpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonPyCon Italia
 
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22Frédéric Harper
 
Knowing is Understanding: A road trip through Google analytics for Windows Ph...
Knowing is Understanding: A road trip through Google analytics for Windows Ph...Knowing is Understanding: A road trip through Google analytics for Windows Ph...
Knowing is Understanding: A road trip through Google analytics for Windows Ph...blugri software + services BVBA
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)Binary Studio
 

Similar to Educate 2017: Customizing Assessments: Why extending the APIs is easier than you think (20)

Pruebas unitarias con django
Pruebas unitarias con djangoPruebas unitarias con django
Pruebas unitarias con django
 
Browser testing with nightwatch.js
Browser testing with nightwatch.jsBrowser testing with nightwatch.js
Browser testing with nightwatch.js
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
 
WinAppDriver - Windows Store Apps Test Automation
WinAppDriver - Windows Store Apps Test AutomationWinAppDriver - Windows Store Apps Test Automation
WinAppDriver - Windows Store Apps Test Automation
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected Journey
 
Agile methodologies based on BDD and CI by Nikolai Shevchenko
Agile methodologies based on BDD and CI by Nikolai ShevchenkoAgile methodologies based on BDD and CI by Nikolai Shevchenko
Agile methodologies based on BDD and CI by Nikolai Shevchenko
 
TDD: Develop, Refactor and Release With Confidence
TDD: Develop, Refactor and Release With ConfidenceTDD: Develop, Refactor and Release With Confidence
TDD: Develop, Refactor and Release With Confidence
 
Yelp Tech Talks: Mobile Testing 1, 2, 3
Yelp Tech Talks: Mobile Testing 1, 2, 3Yelp Tech Talks: Mobile Testing 1, 2, 3
Yelp Tech Talks: Mobile Testing 1, 2, 3
 
E2E testing con nightwatch.js - Drupalcamp Spain 2018
E2E testing con nightwatch.js  - Drupalcamp Spain 2018E2E testing con nightwatch.js  - Drupalcamp Spain 2018
E2E testing con nightwatch.js - Drupalcamp Spain 2018
 
Google App Engine Developer - Day2
Google App Engine Developer - Day2Google App Engine Developer - Day2
Google App Engine Developer - Day2
 
Using Task Queues and D3.js to build an analytics product on App Engine
Using Task Queues and D3.js to build an analytics product on App EngineUsing Task Queues and D3.js to build an analytics product on App Engine
Using Task Queues and D3.js to build an analytics product on App Engine
 
Optimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature DeliveryOptimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature Delivery
 
Angular JS2 Training Session #2
Angular JS2 Training Session #2Angular JS2 Training Session #2
Angular JS2 Training Session #2
 
Cómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte locoCómo tener analíticas en tu app y no volverte loco
Cómo tener analíticas en tu app y no volverte loco
 
OpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonOpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con Python
 
Night Watch with QA
Night Watch with QANight Watch with QA
Night Watch with QA
 
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
 
Angular2 + rxjs
Angular2 + rxjsAngular2 + rxjs
Angular2 + rxjs
 
Knowing is Understanding: A road trip through Google analytics for Windows Ph...
Knowing is Understanding: A road trip through Google analytics for Windows Ph...Knowing is Understanding: A road trip through Google analytics for Windows Ph...
Knowing is Understanding: A road trip through Google analytics for Windows Ph...
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 

More from Learnosity

Learnosity & CenterPoint on Accessibility: The Challenge of Inclusion
Learnosity & CenterPoint on Accessibility: The Challenge of InclusionLearnosity & CenterPoint on Accessibility: The Challenge of Inclusion
Learnosity & CenterPoint on Accessibility: The Challenge of InclusionLearnosity
 
Product Spotlight Webinar: Your Guide to Analytics and Reporting
Product Spotlight Webinar: Your Guide to Analytics and ReportingProduct Spotlight Webinar: Your Guide to Analytics and Reporting
Product Spotlight Webinar: Your Guide to Analytics and ReportingLearnosity
 
UNIwise Presentation @ Educate 2017
UNIwise Presentation @ Educate 2017UNIwise Presentation @ Educate 2017
UNIwise Presentation @ Educate 2017Learnosity
 
Educate 2017: Q & A Session
Educate 2017: Q & A SessionEducate 2017: Q & A Session
Educate 2017: Q & A SessionLearnosity
 
Educate 2017: Enhancing edtech - why together is better
Educate 2017: Enhancing edtech - why together is better Educate 2017: Enhancing edtech - why together is better
Educate 2017: Enhancing edtech - why together is better Learnosity
 
Educate 2017: In their own words - Learnosity client success stories
Educate 2017: In their own words - Learnosity client success stories Educate 2017: In their own words - Learnosity client success stories
Educate 2017: In their own words - Learnosity client success stories Learnosity
 
Learnosity @ ASU+GSV 2017
Learnosity @ ASU+GSV 2017Learnosity @ ASU+GSV 2017
Learnosity @ ASU+GSV 2017Learnosity
 
Educate 2017: Inclusivity Means Opportunity: Why accessibility is a priority
Educate 2017: Inclusivity Means Opportunity: Why accessibility is a priorityEducate 2017: Inclusivity Means Opportunity: Why accessibility is a priority
Educate 2017: Inclusivity Means Opportunity: Why accessibility is a priorityLearnosity
 
Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...
Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...
Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...Learnosity
 
Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...
Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...
Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...Learnosity
 
Educate 2017: Evolving APIs & audio with the changing web
Educate 2017: Evolving APIs & audio with the changing webEducate 2017: Evolving APIs & audio with the changing web
Educate 2017: Evolving APIs & audio with the changing webLearnosity
 
Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...
Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...
Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...Learnosity
 
Educate 2017 (Learnosity Developer Conference) Opening Keynote
Educate 2017 (Learnosity Developer Conference) Opening KeynoteEducate 2017 (Learnosity Developer Conference) Opening Keynote
Educate 2017 (Learnosity Developer Conference) Opening KeynoteLearnosity
 
Company Presentation for ASU GSV 2016
Company Presentation for ASU GSV 2016Company Presentation for ASU GSV 2016
Company Presentation for ASU GSV 2016Learnosity
 
The API-ification of Education
The API-ification of EducationThe API-ification of Education
The API-ification of EducationLearnosity
 
CloudBound K12 Presentation 2016
CloudBound K12 Presentation 2016CloudBound K12 Presentation 2016
CloudBound K12 Presentation 2016Learnosity
 
Creating Technology Enhanced Items: An Assessment Authoring Workshop
Creating Technology Enhanced Items: An Assessment Authoring WorkshopCreating Technology Enhanced Items: An Assessment Authoring Workshop
Creating Technology Enhanced Items: An Assessment Authoring WorkshopLearnosity
 
Atp 2016 autograding of open ended math questions
Atp 2016 autograding of open ended math questionsAtp 2016 autograding of open ended math questions
Atp 2016 autograding of open ended math questionsLearnosity
 

More from Learnosity (18)

Learnosity & CenterPoint on Accessibility: The Challenge of Inclusion
Learnosity & CenterPoint on Accessibility: The Challenge of InclusionLearnosity & CenterPoint on Accessibility: The Challenge of Inclusion
Learnosity & CenterPoint on Accessibility: The Challenge of Inclusion
 
Product Spotlight Webinar: Your Guide to Analytics and Reporting
Product Spotlight Webinar: Your Guide to Analytics and ReportingProduct Spotlight Webinar: Your Guide to Analytics and Reporting
Product Spotlight Webinar: Your Guide to Analytics and Reporting
 
UNIwise Presentation @ Educate 2017
UNIwise Presentation @ Educate 2017UNIwise Presentation @ Educate 2017
UNIwise Presentation @ Educate 2017
 
Educate 2017: Q & A Session
Educate 2017: Q & A SessionEducate 2017: Q & A Session
Educate 2017: Q & A Session
 
Educate 2017: Enhancing edtech - why together is better
Educate 2017: Enhancing edtech - why together is better Educate 2017: Enhancing edtech - why together is better
Educate 2017: Enhancing edtech - why together is better
 
Educate 2017: In their own words - Learnosity client success stories
Educate 2017: In their own words - Learnosity client success stories Educate 2017: In their own words - Learnosity client success stories
Educate 2017: In their own words - Learnosity client success stories
 
Learnosity @ ASU+GSV 2017
Learnosity @ ASU+GSV 2017Learnosity @ ASU+GSV 2017
Learnosity @ ASU+GSV 2017
 
Educate 2017: Inclusivity Means Opportunity: Why accessibility is a priority
Educate 2017: Inclusivity Means Opportunity: Why accessibility is a priorityEducate 2017: Inclusivity Means Opportunity: Why accessibility is a priority
Educate 2017: Inclusivity Means Opportunity: Why accessibility is a priority
 
Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...
Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...
Educate 2017: A formula for success: developing Learnosity’s auto-scoring mat...
 
Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...
Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...
Educate 2017: Quick 'n Lazy: How we keep things speedy while staying out of y...
 
Educate 2017: Evolving APIs & audio with the changing web
Educate 2017: Evolving APIs & audio with the changing webEducate 2017: Evolving APIs & audio with the changing web
Educate 2017: Evolving APIs & audio with the changing web
 
Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...
Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...
Educate 2017: Neverending Story: Exploring Learnosity's ongoing product evolu...
 
Educate 2017 (Learnosity Developer Conference) Opening Keynote
Educate 2017 (Learnosity Developer Conference) Opening KeynoteEducate 2017 (Learnosity Developer Conference) Opening Keynote
Educate 2017 (Learnosity Developer Conference) Opening Keynote
 
Company Presentation for ASU GSV 2016
Company Presentation for ASU GSV 2016Company Presentation for ASU GSV 2016
Company Presentation for ASU GSV 2016
 
The API-ification of Education
The API-ification of EducationThe API-ification of Education
The API-ification of Education
 
CloudBound K12 Presentation 2016
CloudBound K12 Presentation 2016CloudBound K12 Presentation 2016
CloudBound K12 Presentation 2016
 
Creating Technology Enhanced Items: An Assessment Authoring Workshop
Creating Technology Enhanced Items: An Assessment Authoring WorkshopCreating Technology Enhanced Items: An Assessment Authoring Workshop
Creating Technology Enhanced Items: An Assessment Authoring Workshop
 
Atp 2016 autograding of open ended math questions
Atp 2016 autograding of open ended math questionsAtp 2016 autograding of open ended math questions
Atp 2016 autograding of open ended math questions
 

Recently uploaded

Biting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdfBiting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdfadityarao40181
 
EPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptxEPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptxRaymartEstabillo3
 
How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17Celine George
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentInMediaRes1
 
Hierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of managementHierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of managementmkooblal
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...Marc Dusseiller Dusjagr
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon AUnboundStockton
 
Proudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxProudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxthorishapillay1
 
Meghan Sutherland In Media Res Media Component
Meghan Sutherland In Media Res Media ComponentMeghan Sutherland In Media Res Media Component
Meghan Sutherland In Media Res Media ComponentInMediaRes1
 
Painted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of IndiaPainted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of IndiaVirag Sontakke
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
 
internship ppt on smartinternz platform as salesforce developer
internship ppt on smartinternz platform as salesforce developerinternship ppt on smartinternz platform as salesforce developer
internship ppt on smartinternz platform as salesforce developerunnathinaik
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Celine George
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdfssuser54595a
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxpboyjonauth
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 

Recently uploaded (20)

Biting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdfBiting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdf
 
EPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptxEPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptx
 
OS-operating systems- ch04 (Threads) ...
OS-operating systems- ch04 (Threads) ...OS-operating systems- ch04 (Threads) ...
OS-operating systems- ch04 (Threads) ...
 
How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media Component
 
Hierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of managementHierarchy of management that covers different levels of management
Hierarchy of management that covers different levels of management
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon A
 
Proudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxProudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptx
 
Meghan Sutherland In Media Res Media Component
Meghan Sutherland In Media Res Media ComponentMeghan Sutherland In Media Res Media Component
Meghan Sutherland In Media Res Media Component
 
Painted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of IndiaPainted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of India
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
 
internship ppt on smartinternz platform as salesforce developer
internship ppt on smartinternz platform as salesforce developerinternship ppt on smartinternz platform as salesforce developer
internship ppt on smartinternz platform as salesforce developer
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptx
 
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Bikash Puri  Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Bikash Puri  Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
9953330565 Low Rate Call Girls In Rohini Delhi NCR
9953330565 Low Rate Call Girls In Rohini  Delhi NCR9953330565 Low Rate Call Girls In Rohini  Delhi NCR
9953330565 Low Rate Call Girls In Rohini Delhi NCR
 

Educate 2017: Customizing Assessments: Why extending the APIs is easier than you think

  • 1. Customizing Assessment: Why extending our APIs is easier than you think 10:30 – 11:10am Michael & Pierre
  • 2. Michael Sharman Director of Product & Engineering michael.sharman@learnosity.com Pierre Bergamin Technical Lead - Assessment pierre.bergamin@learnosity.com Presenters
  • 3. 1. Our objectives for assessment 2. Learnosity 101 3. Configuring our APIs 4. Styling our APIs 5. Extending your solution Outline
  • 4. ● Learners ○ K–12 ○ Higher Education ○ Corporate ○ Test Prep ● Developers ○ People integrating the APIs – you! Who we develop for
  • 5. Learnosity’s APIs are: ● Powerful ● Flexible ● Extendable ● Simple 46 million tests delivered per month Product objectives
  • 6. 1. Our objectives for assessment 2. Learnosity 101 3. Configuring our APIs 4. Styling our APIs 5. Extending your solution
  • 8. How to use our APIs <!-- HTML hook --> <div id="learnosity_assess"></div> <!-- Embed API script --> <script src="https://items.learnosity.com"></script> <script> const initOptions = { "security": { // Security JSON }, "request": { // Initialization JSON } }; const itemsApp = LearnosityItems.init(initOptions, { readyListener() { }, errorListener() { } }); </script> 1. HTML hook 2. Embedding the API script 3. Initialization options ↳ server-side security signature generation required 1. API initialization
  • 9. Essential API hooks App Instance ↳ Object containing methods to interact with ○ Public methods ○ Events Ready Listener ↳ Function called when the API has initialised Error Listener ↳ Function called when the errors are raised const itemsApp = LearnosityItems.init(initOptions, { readyListener() { console.log(`API ready`); }, errorListener(error) { console.error(`an error occured`, error); } });
  • 10. Items API Assess API Questions API Items API Assess API Questions API Usage scenario – Player
  • 11. Questions API Items API Questions API Items API Questions API Usage scenario – Inline
  • 12. 1. Our objectives for assessment 2. Learnosity 101 3. Configuring our APIs 4. Styling our APIs 5. Extending your solution
  • 13. // Configuration is handled via a simple JSON request // object that is passed to the init() method { "security": {/* security object */}, "request": { "activity_id": "itemsassessdemo", "name": "Items API demo - assess activity", "rendering_type": "assess", "state": "initial", "type": "submit_practice", "session_id": "9f730ce2-faa1-4062-adbb-cd9552490767", "user_id": "demo_student", "items": [ "Demo1", "Demo2" ], "assess_inline": true, "config": { "regions": "main", "time": { "max_time": 1500, "limit_type": "soft", "warning_time": 120, } } } } Configuring the player ● Student controls ○ Pause ○ Navigation ○ Tools ● Player controls ○ Item counter ○ Timed tests ○ Component layout
  • 14. // Configuration is handled via a simple JSON request // object that is passed to the init() method { "security": {/* security object */}, "request": { "activity_id": "itemsassessdemo", "name": "Items API demo - assess activity", "rendering_type": "assess", "state": "initial", "type": "submit_practice", "session_id": "9f730ce2-faa1-4062-adbb-cd9552490767", "user_id": "demo_student", "items": [ "Demo1", "Demo2" ], "config": { "regions": "main", "time": { "max_time": 1500, "limit_type": "soft", "warning_time": 120, "countdown_option": false } } } } Time controls Items API
  • 15. // Configuration is handled via a simple JSON request // object that is passed to the init() method { "security": {/* security object */}, "request": { "activity_id": "itemsassessdemo", "name": "Items API demo - assess activity", "rendering_type": "assess", "state": "initial", "type": "submit_practice", "session_id": "9f730ce2-faa1-4062-adbb-cd9552490767", "user_id": "demo_student", "items": [ "Demo1", "Demo2" ], "config": { "navigation": { "show_accessibility": true, "show_answermasking": true, "show_fullscreencontrol": true } } } } Player controls Items API
  • 16. ● < 2014 - fixed approach Layout in 2014
  • 18. Configuring regions – Out of the box // Configuration is handled via a simple JSON request // object that is passed to the init() method { "security": {/* security object */}, "request": { "activity_id": "itemsassessdemo", "name": "Items API demo - assess activity", "rendering_type": "assess", "state": "initial", "type": "submit_practice", "session_id": "9f730ce2-faa1-4062-adbb-cd9552490767", "user_id": "demo_student", "items": [ "Demo1", "Demo2" ], "config": { "regions": "main" } } }
  • 19. Configuring regions – Out of the box // Configuration is handled via a simple JSON request // object that is passed to the init() method { "security": {/* security object */}, "request": { "activity_id": "itemsassessdemo", "name": "Items API demo - assess activity", "rendering_type": "assess", "state": "initial", "type": "submit_practice", "session_id": "9f730ce2-faa1-4062-adbb-cd9552490767", "user_id": "demo_student", "items": [ "Demo1", "Demo2" ], "config": { "regions": "horizontal" } } }
  • 20. Configuring regions – Out of the box // Configuration is handled via a simple JSON request // object that is passed to the init() method { "security": {/* security object */}, "request": { "activity_id": "itemsassessdemo", "name": "Items API demo - assess activity", "rendering_type": "assess", "state": "initial", "type": "submit_practice", "session_id": "9f730ce2-faa1-4062-adbb-cd9552490767", "user_id": "demo_student", "items": [ "Demo1", "Demo2" ], "config": { "regions": "horizontal-fixed" } } }
  • 21. ● Control where elements go ● Order ● Minimalistic or rich UI ● Element options Configuring regions – Flexibility { "regions": { "top-right": [ { "type": "pause_button" }, { "type": "timer_element" }, { "type": "reading_timer_element" }, { "type": "itemcount_element" } ], "right": [ { "type": "save_button" }, { "type": "fullscreen_button" }, { "type": "separator_element" }, { "type": "accessibility_button" }, { "type": "calculator_button", "scientific_option": true }, { "type": "verticaltoc_element" }, { "type": "masking_button" } ], "bottom-right": [ { "type": "next_button", "hide_label_option": true } ] } }
  • 23. 1. Our objectives for assessment 2. Learnosity 101 3. Configuring our APIs 4. Styling our APIs 5. Extending your solution
  • 24. Customizing Learnosity styles ● Overriding Learnosity API styles ○ Questions or Assess APIs ○ CSS specificity ● We can host your custom stylesheets or you do it
  • 27. 1. Our objectives for assessment 2. Learnosity 101 3. Configuring our APIs 4. Styling our APIs 5. Extending your solution
  • 29. ● Programmatically control your assessment ● Get/Set data ● App instance Public methods // Example 1: Get the list of attempted items const attemptedItems = itemsApp.attemptedItems(); /* [ "ccore_ccs_rabbit", "ccore_DropDowns_inline_cloze_mp4", "ccore_sbalance_online_43081" ] */ // Example 2: Show a custom dialog itemsApp.assessApp().dialogs().custom.show({ header: "My Custom Header", body: "Custom body with <strong>html</strong> support", buttons: [ { button_id: "my_primary_button", label: "My Primary Button", is_primary: true }, { button_id: "my_standard_button", label: "My Standard Button", is_primary: false } ] }); // Dismiss the custom dialog itemsApp.assessApp().dialogs().custom.hide();
  • 30. Public methods addAccessibilityPalettes eventsApp getItems hasStarted on setAccessibility addItems feature getItemsMetadata item.checkImages once setHeight append features getProgress item.retryLoadImages question start attemptedItems getCurrentItem getQuestions item.flag questions submit attemptedQuestions getFeatures getResponses items.goto questionsApp unsaveableQuestions audioPlayer getItemPosition getScores items.previous reset validQuestions dialogs.show getItemResponses getSubmitssionData items.next safeToUnload validatableQuestions dialogs.hide getItemScores getTime off save And more to come!
  • 32. Use your own “Next & Previous” buttons? Easy! readyListener() { document .getElementById('next-item-btn') .addEventListener('click', event => { assessApp.items().next(); }); document .getElementById('prev-item-btn') .addEventListener('click', event => { assessApp.items().previous(); }); } <button id="prev-item-btn">Previous</button> <button id="next-item-btn">Next</button>
  • 34. Events ● Player events ● Questions events .on('eventName', callback, ctx); ↳ Binds a callback function that will be invoked whenever the eventName is triggered. ↳ To supply a context to execute the callback on, pass the optional third argument. .once('eventName', callback, ctx); .off('eventName', callback, ctx); Plug into the API event bus /* Example 1 - player event */ // Event handler - log the index of the item we navigate to // and save function itemChangedHandler(itemIndex) { console.log('itemChanged', itemIndex); itemsApp.save(); } itemsApp.assessApp().on('item:changed', itemChangedHandler); /* Example 2 - question facade event */ const audioQuestion = myQuestionsApp.question('60001'); // Start recording audioQuestion.recording.start(); // Play response when recording is stopped audioQuestion.on('recording:stopped', () => { audioQuestion.response.play(); });
  • 35. Back to our “custom dialog” solution assessApp.on('button:answer1_button:clicked', () => { console.log('That is right, well done!'); const lastItemIndex = Object.keys(assessApp.getItems()).length - 1; // Dismiss the custom dialog assessApp.dialogs().custom.hide(); // Go to the last item assessApp.items().goto(lastItemIndex); }); assessApp.on('button:answer2_button:clicked', () => { console.log('Sorry mate, you can start your test again!'); // Dismiss the custom dialog assessApp.dialogs().custom.hide(); // Go to the first item assessApp.items().goto(0); }); const assessApp = itemsApp.assessApp(); assessApp.dialogs().custom.show({ header: "How many Question types does Learnosity offer?", body: "You get a <B>special</b> prize if you get it right!", buttons: [ { button_id: "answer1_button", label: "65 or more", is_primary: true }, { button_id: "answer2_button", label: "64 or less", is_primary: true } ] });
  • 37. Putting it all together
  • 41. Custom questions Create your own Question Types to be used within Learnosity Create JSON definition1 { "response_id": "custom-response-1", "type": "custom", "js": "//mysite.com/demos/custom_shorttext.js", ... } 2 LearnosityAmd.define(['underscore', 'mathcore'], (_, mathcore) => { /* Custom Question Class */ class Question { constructor(options) { /* ... */ } } return { Question, /* ... */ }; }); Use Learnosity module definition 3 Scoring isValid() { /* ... */ } score() { /* ... */ } maxScore() { /* ... */ }
  • 42. Customization continuum Configure Style Extend Simplicity Simple Pretty Simple Simple if you know JavaScript Frequency All customers Some customers A few customers Skills/Tools Learnosity Learnosity + CSS Learnosity + JavaScript Time Minutes to hours Hours to days Days to weeks More Effort & Added ValueLess Effort
  • 43. ● Learnosity is designed to be customized ● Customize only the areas that are important to your users ● Only limited by your imagination. ● Allows you to easily differentiate your product, while taking advantage of cutting-edge, scalable, powerful solutions. Conclusions
  • 44. Q & A
  • 45. Customizing Assessment: Why extending our APIs is easier than you think 10:30 – 11:10am Michael & Pierre

Editor's Notes

  1. what we’re going to talk about - Basic setup - getting started - Configuration. - changing settings - Styling - bring it all together - Customisation. - adding code and public methods
  2. Before we start going deeper into customizing assessment, let’s have a quick reminder of some Learnosity 101s
  3. Learnosity APIs are using common the open web technologies that are HTML5/JavaScript and CSS. It means that our APIs can be embedded in any of your HTML pages.
  4. Before we go deeper in details on how to customize Learnosity APIs, let’s have a look at the basics on how to run one of our API into your page: The first thing you need to do is to include an API hook into your page. These hooks are HTML elements where the API will render. You will then need to embed the API script in your page using a HTML <script> tag The next step is to have your initialization options in the page. This can be a JavaScript Object or a JSON. It will contain the API configuration that you want to load and the security package. You will need to generate the signature on the server side to keep your consumer key and secret safe. We provide SDKs in various languages to do that. Once you have all that, the last thing you need to do is to call our init public method with the initi options as parameter and also another object that contains methods
  5. The ready listener is a method called when the api has finished initializing that will be called when the API is ready or when an error occurs. The itemsApp object is the instance of your API that you will need to use to call public methods.
  6. As michael said, the approach that we had was allowing people to turn on and off some UI elements but didn’t allow them to position them inside the player. To solve this issue, we decided to split the player in areas that we called regions. We have the items regions, which is where the items will be rendered, bottom regions, a right menu where you can place the table of content and a slide in/out menu, and top regions where you can place title, timer, etc. You can basically move these around as you wish.
  7. We identified 3 very commonly used configurations and made presets to make your life easier (you don’t need to build a full JSON) The first one is “MAIN” and delivers the configuration that you can see on the left here. Describe regions Descript items height behaviour
  8. The second preset we built is essentially the same as the “main” one but offers more width for the items container by moving the pager to the bottom. This will better fit some mobile devices. The items container behaves the same as “main”.
  9. The last preset we built is “horizontal-fixed”. The elements are again the same as “main” and “horizontal” but we have a different behavior for the items container. Instead of the player resize to fit the full height of each item, we now have a scrollbar for long items. The player height will also resize to fit 100% of the viewport height. This preset is great for you if you want to have the player use as much space of your application as it can and have a distraction free assessment.
  10. What if you want more flexibility? You can control where elements go, set the order, etc. by passing a “regions” JSON object. Each region is an Array in which you can order elements in. It allows you to have very rich test experiences or minimalistic UIs.
  11. A great tool that Learnosity APIs offer to extend your solution is public methods Public methods allow you to programmatically control your assessment (the player or individual questions). You can get and set data.
  12. What if you want to use Learnosity Assess player with your own previous and next buttons?
  13. NM These are business decisions - as to how important is it for your project.