PageSourceSearch

https://toolbox.injoyonline.com/InJoyLibrary/courseLocker/courseLocker.js?update=6

js injoyonline.com collected 2026-09-30 14:35:09 UTC 6,610 bytes, 144 lines download raw bytes

1 InJoy.courseLocker = {
2    endpoint: "https://toolbox.injoyonline.com/InJoyLibrary/courseLocker/index.php",
3    lockedCourses: [],
4    unlockedCourses:[],
5    check: async function() {
6        let url = window.location.href;
7        if (url.includes('learn/manager/course/')) {
8            let courseID = InJoy.courseID();
9            let locked = await InJoy.courseLocker.locked();
10            if (locked == 'Locked' || locked == 'true' || locked == 'locked' || locked == '1' || locked == 'yes' || locked == 'true') {
11                console.log('Course is locked');
12                InJoy.courseLocker.lockedCourses.push(courseID);
13                InJoy.courseLocker.modal();
14            } else {
15                InJoy.courseLocker.unlockedCourses.push(courseID);
16                InJoy.courseLocker.clear();
17                console.log('Course is not locked');
18            }
19        } else {
20            InJoy.courseLocker.clear();
21        }
22    },
23    clear: function() {
24        if (document.getElementById('courseLockerModal')){
25            document.getElementById('courseLockerModal').remove();
26        }    
27    },
28    set: function(courseID) {
29        // lock course
30        return new Promise(function(resolve, reject) {
31            if (!courseID){
32                courseID = InJoy.courseID();
33            }
34            let endpoint = InJoy.courseLocker.endpoint;
35            let formData = new FormData();
36            formData.append('set', courseID);
37            formData.append("name", InJoy.courseName());
38            InJoy.genericXHR(endpoint, formData, function(response) {
39                console.log(response);
40                resolve(response);
41            });
42        });
43    },
44    get: function(courseID) {
45        // get list of locked courses
46        return new Promise(function(resolve, reject) {
47            if (!courseID){
48                courseID = InJoy.courseID();
49            }
50            let endpoint = InJoy.courseLocker.endpoint;
51            let formData = new FormData();
52            formData.append('get', courseID);
53            InJoy.genericXHR(endpoint, formData, function(response) {
54                console.log(response);
55                resolve(response);
56            });
57        });
58    },
59    locked: function(courseID) {
60        // check if specific course is locked
61        return new Promise(function(resolve, reject) {
62            if (!courseID){
63                courseID = InJoy.courseID();
64            }
65            if (InJoy.courseLocker.lockedCourses.includes(courseID)) {
66                resolve('true');
67            } else if (InJoy.courseLocker.unlockedCourses.includes(courseID)) {
68                resolve('false');
69            } else {
70                let endpoint = InJoy.courseLocker.endpoint;
71                let formData = new FormData();
72                formData.append('locked', courseID);
73                InJoy.genericXHR(endpoint, formData, function(response) {
74                    console.log("InJoy.courseLocker.locked",response);
75                    resolve(response);
76                });
77            }
78        });
79    },
80    checkAsync: async function(courseID) {
81        return new Promise(function(resolve, reject) {
82            InJoy.courseLocker.locked(courseID).then(function(response) {
83                if (response == 'true' || response == 'Locked' || response == 'locked' || response == '1' || response == 'yes') {
84                    console.log('Course is locked');
85                    InJoy.courseLocker.lockedCourses.push(courseID);
86                    InJoy.courseLocker.modal();
87                    resolve('locked');
88                } else {
89                    console.log('Course is not locked');
90                    InJoy.courseLocker.unlockedCourses.push(courseID);
91                    InJoy.courseLocker.clear();
92                    resolve('unlocked');
93                }
94            }).catch(function(error) {
95                console.error('Error checking course lock status:', error);
96                reject(error);
97            });
98        })
99    },
100    delete: function(courseID) {
101        // delete course from locked list
102        return new Promise(function(resolve, reject) {
103            if (!courseID){
104                courseID = InJoy.courseID();
105            }
106            let endpoint = InJoy.courseLocker.endpoint;
107            let formData = new FormData();
108            formData.append('delete', courseID);
109            InJoy.genericXHR(endpoint, formData, function(response) {
110                resolve(response);
111                if (document.getElementById('courseLockerModal')){
112                    document.getElementById('courseLockerModal').remove();
113                }
114            });
115
116            // maybe we should email me to let me know that a course was unlocked?
117        });
118    },
119    modal:function(){
120        // build a modal that will keep the user from accessing the course
121        if (!document.getElementById('courseLockerModal')){
122            let modal = document.createElement('div');
123            modal.id = 'courseLockerModal';
124            modal.style.display = 'block';
125            modal.style.position = 'fixed';
126            modal.style.zIndex = '9999';
127            modal.style.paddingTop = '100px';
128            modal.style.left = '0';
129            modal.style.top = '0';
130            modal.style.width = '100%';
131            modal.style.height = '100%';
132            modal.style.overflow = 'auto';
133            modal.style.backgroundColor = 'rgba(0,0,0,0.4)';
134            modal.innerHTML = '<div style="background-color: #fefefe;margin: auto;padding: 20px;border: 1px solid #888;width: 80%;"><h2>This course is locked</h2><p>This course is currently locked. To edit the course, click on the <strong>Unlock Course</strong> button. When you\'re finished with your edits, please contact InJoy\'s Customer Success Team so that the multi-language translations can be updated.</p><p><button onclick="InJoy.courseLocker.preview()">Preview Course</button><button style="margin-left:1rem;" onclick="window.location.assign(\'https://www.injoyonline.com/learn/manager/dashboard\')">Return to Dashboard</button><button style="margin-left:1rem;" onclick="InJoy.courseLocker.delete()">Unlock Course</button></p></div>';
135            document.body.appendChild(modal);
136        }
137    },
138    preview:function(){
139        let viewIcon = document.querySelector('[aria-label="view icon"]');
140        if (viewIcon){
141            viewIcon.parentElement.click();
142        }
143    }
144}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.