Turning SL course into an app
Hello community. Has anyone found a way to convert SL course into an iPhone app or for Andorid? I found this site and wanted to hear from people who tried or have any success. Love to hear your comments. https://forum.volt.build/t/converting-an-articulate-storyline-course-into-an-app/682 Best,49Views0likes1CommentProblems with Drag in Drop in storyline 360
Hello everyone, could someone help me? I'm having a problem with a manual drag and drop in Storyline. The idea of the exercise is that when I drag an item to a position, when I drag another item to the same position, the item that is already there returns to its original position. However, sometimes I notice that, instead of the item returning to its original position, it ends up underneath the item I dragged. Could someone help me? I'll make the file available. Note: The drag and drop used is not an exercise slide, because an exercise slide would not meet the client's needs. Thank you in advance25Views0likes2CommentsCalling all Articulate JavaScript buffs
Hi I have been trying to get a PDF to download using JavaScript, but I ran into the following errors: 1. ) Failed to load resource: net::ERR_FILE_NOT_FOUND PDFen.pdf:1 2.) Uncaught (in promise) TypeError: Failed to fetch at fillForm (user.js:51:30) at Constructpdf (user.js:39:9) 3.) Uncaught SyntaxError: "undefined" is not valid JSON at JSON.parse (<anonymous>) at e.setAsAdornable (slides.min.js:2:567513) at e.<anonymous> (slides.min.js:2:567170) at Array.forEach (<anonymous>) at e.adornSvg (slides.min.js:2:567145) at e.whenHtmlReady (slides.min.js:2:744345) I would really love some help and guidance (steps potentially) on how to solve these errors! If more information is required, please do not hesitate to ask! Thank you!!! Here is my code: //Retrieve Player Variables const date = new Date(); let day = date.getDate(); let month = date.getMonth() + 1; let year = date.getFullYear(); let currentDate = `${day}-${month}-${year}`; let player = GetPlayer(); //lSlider1 = player.GetVar("Slider1"); var results = [ player.GetVar("Slider1"), player.GetVar("Slider2"), player.GetVar("Slider3"), player.GetVar("Slider4"), player.GetVar("Slider5"), player.GetVar("Slider6"), player.GetVar("Slider7"), player.GetVar("Slider8"), player.GetVar("Slider9"), player.GetVar("Slider10"), player.GetVar("Slider11"), player.GetVar("Slider12"), player.GetVar("Slider13"), player.GetVar("Slider14"), player.GetVar("Slider15"), player.GetVar("Slider16"), player.GetVar("Slider17"), player.GetVar("Slider18"), player.GetVar("Slider19"), player.GetVar("Slider20"), player.GetVar("Slider21"), player.GetVar("Slider22"), player.GetVar("Slider23"), player.GetVar("Slider24"), player.GetVar("Slider25"), player.GetVar("Slider26"), player.GetVar("Slider27"), player.GetVar("Slider28"), player.GetVar("Slider29"), player.GetVar("Slider30"), player.GetVar("Slider31"), ]; var reflect1 = player.GetVar("Reflect1"); var reflect2 = player.GetVar("Reflect2"); var reflect3 = player.GetVar("Reflect3"); var reflect4 = player.GetVar("Reflect4"); Constructpdf(); async function Constructpdf() { //Dynamically load pdf-lib JavaScript module await loadMods(); //Call the fillForm asynch function await fillForm(); } async function loadMods() { await import("https://unpkg.com/pdf-lib/dist/pdf-lib.js"); } async function fillForm() { //Read pdf form const { PDFDocument } = PDFLib; const formUrl = 'PDFen.pdf'; const formPdfBytes = await fetch(formUrl).then (res => res.arrayBuffer()); const pdfDoc = await PDFDocument.load(formPdfBytes); const form = pdfDoc.getForm(); alert ("Helb"); //Get Slider Thumb image const pngUrl = 'thumb.jpg'; const pngImageBytes = await fetch(pngUrl).then((res) => res.arrayBuffer()); const pngImage = await pdfDoc.embedPng(pngImageBytes); //Get field names const dateField = form.getTextField('Date'); const thumbs = [[ form.getButton('Th1'), form.getButton('Th2'), form.getButton('Th3')], [ form.getButton('Th4'), form.getButton('Th5'), form.getButton('Th6')], [ form.getButton('Th7'), form.getButton('Th8'), form.getButton('Th9')], [ form.getButton('Th10'), form.getButton('Th11'), form.getButton('Th12')], [ form.getButton('Th13'), form.getButton('Th14'), form.getButton('Th15')], [ form.getButton('Th16'), form.getButton('Th17'), form.getButton('Th18')], [ form.getButton('Th19'), form.getButton('Th20'), form.getButton('Th21')], [ form.getButton('Th22'), form.getButton('Th23'), form.getButton('Th24')], [ form.getButton('Th25'), form.getButton('Th26'), form.getButton('Th27')], [ form.getButton('Th28'), form.getButton('Th29'), form.getButton('Th30')], [ form.getButton('Th31'), form.getButton('Th32'), form.getButton('Th33')], [ form.getButton('Th34'), form.getButton('Th35'), form.getButton('Th36')], [ form.getButton('Th37'), form.getButton('Th38'), form.getButton('Th39')], [ form.getButton('Th40'), form.getButton('Th41'), form.getButton('Th42')], [ form.getButton('Th43'), form.getButton('Th44'), form.getButton('Th45')], [ form.getButton('Th46'), form.getButton('Th47'), form.getButton('Th48')], [ form.getButton('Th49'), form.getButton('Th50'), form.getButton('Th51')], [ form.getButton('Th52'), form.getButton('Th53'), form.getButton('Th54')], [ form.getButton('Th55'), form.getButton('Th56'), form.getButton('Th57')], [ form.getButton('Th58'), form.getButton('Th59'), form.getButton('Th60')], [ form.getButton('Th61'), form.getButton('Th62'), form.getButton('Th63')], [ form.getButton('Th64'), form.getButton('Th65'), form.getButton('Th66')], [ form.getButton('Th67'), form.getButton('Th68'), form.getButton('Th69')], [ form.getButton('Th70'), form.getButton('Th71'), form.getButton('Th72')], [ form.getButton('Th73'), form.getButton('Th74'), form.getButton('Th75')], [ form.getButton('Th76'), form.getButton('Th77'), form.getButton('Th78')], [ form.getButton('Th79'), form.getButton('Th80'), form.getButton('Th81')], [ form.getButton('Th82'), form.getButton('Th83'), form.getButton('Th84')], [ form.getButton('Th85'), form.getButton('Th86'), form.getButton('Th87')], [ form.getButton('Th88'), form.getButton('Th89'), form.getButton('Th90')], ]; const reflectField1 = form.getTextField('VFactor'); const reflectField2 = form.getTextField('VCompromise'); const reflectField3 = form.getTextField('VNeed'); const reflectField4 = form.getTextField('VMotivate'); //Fill in form dateField.setText(currentDate); console.log(results, reflect1, reflect2, reflect3, reflect4); for(i=0; i<30; i++) { if (results[i] == 1) { thumbs[i][0].setImage(pngImage); } else if (results[i] == 2) { thumbs[i][1].setImage(pngImage); } else if (results[i] == 3) { thumbs[i][2].setImage(pngImage); } } reflectField1.setText(reflect1); reflectField2.setText(reflect2); reflectField3.setText(reflect3); reflectField4.setText(reflect4); //Save form const pdfBytes = await pdfDoc.save(); //Download the form await import('https://unpkg.com/tiny-save-as/dist/tiny-save-as.esm.js') .then(({default: saveAs}) => { const blob = new Blob([pdfBytes], {type: 'application/octet-stream'}); saveAs(blob, "PDFen.pdf"); ; }) .catch((err) => { console.log(err); }); }50Views0likes3CommentsBest method for making small edits post-publish?
What's the best way to make small edits to a course after it has been published and loaded into the LMS? Typically, we republish the course, overwrite the SCORM package in our FTP and then our LMS picks up the edits. However, I don't like doing it this way because overwriting a scorm package feels a bit irreversible to me and it's not the most efficient process. It's also not a given that our LMS will pick up on the changes every time. I also don't love the idea of republishing a new version for small, simple edits, but I fear that may be the best option.36Views0likes5CommentsDrag and Drop Exercise
Hello all, I have a drag and drop exercise that I'm having some trouble with. I have my drop target shapes set and are locked on the timeline. What I want is for the learner to organize the steps in order from 6 to 11. I have the exercise set to random so that the answers move. The issue is when I move one step to its correct spot, it sometimes covers up the answer that was there. I would like for when the user moves one selection to the correct step, the shape moves to the spot that's open. Any help is greatly appreciated. Thanks!25Views0likes1CommentSuggested Feature in SL360
I searched the boards to see if I was missing something, and I didn't find it, so I thought I'd suggest a feature. If there is a way to do this, please let me know. When setting up my slides, I have buttons that I use to control the state of the next button. In most cases, the built-in visited state is enough. However, I sometimes have slide layers where I want the learner to listen to the audio without being able to click to another layer until the audio is complete. I have been creating a transparent box over the buttons to prevent them from being clicked, but I dislike having to rely on invisible objects on the screen and prefer to use object states. I know that I can set triggers to disable the buttons until the audio completes, but that creates a new problem: if an object was visited, then my trigger sets it to disabled, then another trigger sets it back to normal, then the object that I've already visited is no longer considered visited in Storyline. This is an issue when the active state of my next button is dependent on all buttons being "visited" (or a custom state of completion) and I have multiple triggers that are setting all of the buttons to disabled or normal (I hope I'm explaining this in a way that makes sense). So, my suggestion: would it be possible to add a "Resume Previous State of" trigger as an alternative to the "Change State of" option?19Views0likes0CommentsUnable to resume the course in our LMS
Hi Team, Whenever the course is refreshed intentionally or accidentally, the course is getting started from the first again, not resuming from where it is left. I need a resume function. We are using SCORM 1.2. The resume function works in the SCORM cloud but not in our LMS. Is it completely an LMS issue or can anything be done from the articulate software side?22Views0likes1CommentTriggers not showing
I am working on a file which was created earlier. I can see that there are interactive elements in the file, but when I try to view the triggers associated with them, I cannot find any. I have tried re-docking the trigger panel and changing the player mode to Classic, but the problem persists. My colleague can see the triggers in her version of the file, but I cannot. I'm unsure what's causing this issue and if it might be related to my system or the application. I have successfully created new courses with triggers, so I know my software is working correctly. My Articulate software is up-to-date. I have attached screenshots of both my system and my colleague's system showing the same file.44Views0likes2CommentsCall a SCORM file located on LMS from Storyline 360
I used to be able to do call a SCORM file located on an LMS from Storyline (not 360). Can we still do this with Storyline 360? I need to send my learner to a course in LearnUpon LMS and have it automatically open for them. How can I do this?31Views0likes2Comments