PageSourceSearch

https://www.alfaskolen.no/wp-content/themes/alfaskolen/js/main.js?v=5.01

js alfaskolen.no collected 2026-09-24 12:43:44 UTC 18,175 bytes, 369 lines download raw bytes

1$(function() {
2
3    $('.slider-nav').slick({
4        slidesToShow: 3,
5        slidesToScroll: 1,
6        dots: false,
7        centerMode: false,
8        focusOnSelect: true,
9        responsive: [
10            {
11                breakpoint: 768,
12                settings: {
13                    slidesToShow: 1,
14                    infinite : false,
15                    centerMode: true,
16                }
17            }
18        ]
19    });
20
21    // On afterChange slide change
22    $('.slider-nav').on('afterChange', function(event, slick, currentSlide, nextSlide){
23        let indx = $(this).parents('.tab').index()
24        // console.log(indx)
25        var currentSlideElData = $(event.currentTarget).find('.slick-current').find('button').attr('data-type');
26        // console.log(currentSlideElData)
27        tabsSlides(currentSlideElData, indx)
28    });
29
30    // let data = {
31    //     level : [164],
32    //     rank: "Beginner",
33    //     session_type: "standard",
34    // };
35    // const URL = 'https://api.alfaskolen.no/api/get/courses/registration'
36    // fetch(URL, {
37    //     method: 'post',
38    //     headers: {
39    //         'Accept': 'application/json, text/plain, */*',
40    //         'Content-Type': 'application/json'
41    //     },
42    //     body: JSON.stringify(data),
43    // })
44    // .then(response => {
45    //     response.json().then(resp => {
46    //         console.log(resp)
47    //
48    //     })
49    // })
50
51    //*******
52    let tabsSlides = function (type, seltab){
53        // console.log('seltab', seltab)
54        $('.tabs-slides').each(function (i, tab){
55            // console.log('tab', tab)
56            let html;
57            let type_course = typeof type !== "undefined" ? type : $(tab).attr('data-type')
58            // console.log('type_course', type_course)
59            let isMc = $(tab).attr('data-ismc') === "1" ? '?by=mastercourses' : ''
60            // console.log('isMc', isMc)
61            let data = {
62                level : $(tab).attr('data-level').split(','),
63                rank: $(tab).attr('data-rank'),
64                session_type: type_course,
65            };
66            // console.log($(tab).attr('data-level').split(','))
67            let filters = typeof $(tab).attr('data-filters') !== "undefined" &&  $(tab).attr('data-filters') !== '' ?  $(tab).attr('data-filters').split(',') : null;
68            if(filters !== null){
69                filters.forEach(function (filterName){
70                    // console.log($(tab).find('button[data-type="'+filterName+'"]'))
71                    $(tab).find('button[data-type="'+filterName+'"]').parents('.slick-slide').remove()
72                })
73            }
74            const URL = 'https://api.alfaskolen.no/api/get/courses/registration' + isMc
75            fetch(URL, {
76                method: 'post',
77                headers: {
78                    'Accept': 'application/json, text/plain, */*',
79                    'Content-Type': 'application/json'
80                },
81                body: JSON.stringify(data),
82            })
83                .then(response => {
84                    response.json().then(resp => {
85                        htmlm = '<div class="slider-months">';
86                        if((type !== 'conversationXX' && type !== 'individual' && isMc !== "?by=mastercourses") || type !== 'undefined'){
87                            // console.log('standard or intensive')
88                            // console.log(type)
89                            // console.log(resp.courses)
90                            if(resp.courses.length < 1){
91                                // console.log(resp.courses.length)
92                                htmlm += '<div class="item-month">';
93                                htmlm += '<h5>No available courses</h5>';
94                                htmlm += '</div>';
95                            }
96                            resp.courses.forEach(function (month){
97
98                                htmlm += '<div class="item-month">';
99                                htmlm += '<h5>'+month.month+'</h5>';
100                                htmlm += '<ul>';
101
102                                month.courses.forEach(function (course){
103                                    // console.log(course.available)
104                                    let btnText = 'Buy'
105                                    let AvTxt = 'Only ' + course.available + ' available'
106                                    let display = ''
107                                    let disabled = ''
108                                    let style= "opacity: 1 "
109                                    let discount_price = '<span class="c-item-prixe" data-course-price="'+course.price+'">'+course.price+' NOK</span>';
110                                    let priceClass = '';
111                                    let savingsTxt = '';
112                                    let discount = course.Discounted;
113                                    let discount_class = discount ? 'discount' : '';
114                                    if( course.available == null || course.available >= 3 || course.available <= 0){
115                                        display = 'display: none;'
116                                    } else {
117                                        display = '';
118                                        disabled = ''
119                                    }
120                                    if( course.available <= 0 && course.available !== null){
121                                        btnText = 'Full'
122                                        display = ''
123                                        AvTxt = 'No Places left'
124                                        disabled = 'disabled'
125                                    }
126                                    if( typeof course.full !== "undefined" && course.full !== null && course.full === true ){
127                                        btnText = 'Full group'
128                                        display = ''
129                                        AvTxt = 'No Places left'
130                                        disabled = 'disabled'
131                                        style = "opacity: .5"
132                                    }
133
134                                    if(course.Discounted.is_discount){
135                                        discount_price = '<span class="c-item-prixe discount" data-course-price="'+course.price+'"><small class="oprice" data-course-price="'+course.price+'">'+course.price+' NOK</small><br/>'+course.Discounted.price+' NOK</span>';
136                                        priceClass = 'class="oprice"';
137                                        savingsTxt = '<span class="earlybird discount">'+course.Discounted.discount.message+'</span>';
138                                    }
139                                    if(course.Discounted.is_earlybird){
140                                        discount_price = '<span class="c-item-prixe discount" data-course-price="'+course.Discounted.price+'"><small class="oprice" data-course-price="'+course.Discounted.price+'">'+course.price+' NOK</small><br/>'+course.Discounted.price+' NOK</span>';
141                                        savingsTxt = '<span class="earlybird discount">'+course.Discounted.earlybird.message+'</span>';
142                                        priceClass = 'class="oprice"';
143                                    }
144
145                                    let date_s = course.date_start.split(' ')[0];
146                                    date_s = date_s.split('-')[2] +'-'+ date_s.split('-')[1] +'-'+ date_s.split('-')[0]
147
148                                    let date_e = course.date_end.split(' ')[0];
149                                    date_e = date_e.split('-')[2] +'-'+ date_e.split('-')[1] +'-'+ date_e.split('-')[0]
150
151                                    // console.log(date_s)
152
153                                    let cssclass = course.master_course.classroom_type !== 'online' ? 'bg-danger' : 'bg-success'
154                                    htmlm += '<li style="'+style+'" >';
155                                    htmlm +=
156                                        '<div class="c-item-info"><strong>'+course.Name+'</strong>' +
157                                        '<small class="c-item-sub">
157'+date_s+' to '+date_e+' ('+course.hours+'h)</small>' + savingsTxt +
158                                        '</div>' +
159                                        '<div class="class-item-classroom">' +
160                                        '<span class="'+cssclass+' badge">'+course.master_course.classroom_type+'</span>' +
161                                        '<span class="available-places" style="'+display+'">'+AvTxt+'</span>' +
162                                        '</div>' +
163                                        '<div class="c-item-dates"><strong>'+course.days+'</strong>' +
164                                        '<small class="c-item-sub">'+course.time_from+' - '+course.time_to+'</small>' +
165                                        '</div>' +
166                                        '<div class="c-item-select">' + discount_price +
167                                        '<button type="button" class="select '+discount_class+' '+disabled+'" data-course-id="'+course.id+'" '+disabled+' >'+btnText+'</button>' +
168                                        (disabled === 'disabled' ? '<br><a class="waitinglist" href="/register/?course_id='+course.id+'&waitinglist=1" data-course-id="'+course.id+'" >Waiting list</a>' : '') +
169                                        '</div>';
170
171                                    htmlm += '</li>';
172                                })
173                                htmlm += '</ul>';
174                                htmlm += '</div>';
175
176                            })
177                            htmlm += '</div></div>';
178                        }else {
179                            // console.log(course.available)
180                            // if(typeof resp.courses == 'undefined' || resp.courses.length < 1){
181                            //     // console.log(resp.length)
182                            //     htmlm += '<div class="item-month">';
183                            //     htmlm += '<h5>No available courses</h5>';
184                            //     htmlm += '</div>';
185                            // }
186
187                            htmlm += '<div class="item-month">';
188                            htmlm += '<h5> </h5>';
189                            htmlm += '<ul>';
190
191                            resp.courses.forEach(function (course){
192                                // console.log(month)
193                                let btnText = 'Buy'
194                                let AvTxt = 'Only ' + course.available + ' available'
195                                let display = ''
196                                if( course.available == null || course.available >= 3 || course.available <= 0){
197                                    display = 'display: none;'
198                                } else {
199                                    display = '';
200                                }
201                                if( course.available <= 0 && course.available !== null){
202                                    btnText = 'Waiting list'
203                                    display = ''
204                                    AvTxt = 'No Places left'
205                                }
206
207                                if( course.available <= 0 && course.available !== null ){
208
209                                    btnText = 'Waiting list'
210                                }
211                                let cssclass = course.master_course.classroom_type !== 'online' ? 'bg-danger' : 'bg-success'
212
213                                let date_s = course.date_start.split(' ')[0];
214                                date_s = date_s.split('-')[2] +'-'+ date_s.split('-')[1] +'-'+ date_s.split('-')[0]
215
216                                let date_e = course.date_end.split(' ')[0];
217                                date_e = date_e.split('-')[2] +'-'+ date_e.split('-')[1] +'-'+ date_e.split('-')[0]
218
219                                htmlm += '<li>';
220                                htmlm +=
221                                    '<div class="c-item-info"><strong>'+course.Name+'</strong>' +
222                                    '<small class="c-item-sub">'+date_s+' to '+date_e+' ('+course.hours+')</small>' +
223                                    '</div>' +
224                                    '<div class="class-item-classroom">' +
225                                    '<span class="'+cssclass+' badge">'+course.master_course.classroom_type+'</span>' +
226                                    '<span class="available-places" style="'+display+'">'+AvTxt+'</span>' +
227                                    '</div>' +
228                                    '<div class="c-item-dates"><strong>'+course.days+'</strong>' +
229                                    '<small class="c-item-sub">
229'+course.time_from+' - '+course.time_to+'</small>' +
230                                    '</div>' +
231                                    '<div class="c-item-select"><span class="c-item-prixe" data-course-price="'+course.price+'">'+course.price+' NOK</span>' +
232                                    '<button class="select" data-course-id="'+course.id+'">Buy</button>' +
233                                    '</div>';
234
235                                htmlm += '</li>';
236
237                            })
238                            htmlm += '</ul>';
239                            htmlm += '</div>';
240                            htmlm += '</div></div>';
241                        }
242
243                        // console.log(htmlm)
244                        // console.log(tab)
245                        let tabb =  typeof seltab !== "undefined" ? $('.tabs-slides:eq('+seltab+')') : tab
246                        // console.log(tabb)
247
248                        if (typeof seltab !== 'undefined'){
249                            if(i === seltab){
250                                $(tabb).find('.slider-months').remove().append(htmlm)
251                                $(tabb).find('.packs').append(htmlm)
252                            }else {
253                                // console.log('no matching tab')
254                            }
255                        }else {
256                            $(tabb).find('.slider-months').remove().append(htmlm)
257                            $(tabb).find('.packs').append(htmlm)
258                        }
259
260
261
262                        // console.log(resp)
263
264                        setTimeout(function (){
265                            $(tabb).find('.slider-months').slick({
266                                slidesToShow: 1,
267                                slidesToScroll: 1,
268                                adaptiveHeight: true,
269                                arrows: true,
270                                fade: true,
271                                infinite: false,
272                            });
273                        }, 500)
274
275                    })
276                })
277        })
278
279        // ============================================
280        // Add to Cart functionality
281        // ============================================
282        $(document).on('click', 'button.select', function (e){
283            e.preventDefault();
284
285            const courseId = parseInt($(this).attr('data-course-id'));
286
287            // Get course details from the list item
288            const $li = $(this).closest('li');
289
290            // Extract course name from .c-item-info strong
291            const courseName = $li.find('.c-item-info strong').text().trim() || 'Course';
292
293            // Extract price from span.c-item-prixe data-course-price attribute
294            const coursePrice = $li.find('.c-item-prixe').attr('data-course-price') || '0';
295
296            console.log('Adding to cart:', {
297                id: courseId,
298                name: courseName,
299                price: coursePrice
300            });
301
302            // Add to cart using CourseCart service
303            if (typeof CourseCart !== 'undefined') {
304                const added = CourseCart.addCourse(courseId, courseName, coursePrice);
305
306                if (added) {
307                    // Change button text temporarily to show feedback
308                    const $btn = $(this);
309                    const originalText = $btn.text();
310
311                    $btn.html('<i class="fa fa-check"></i> Added!');
312                    $btn.prop('disabled', true);
313                    $btn.addClass('btn-success');
314
315                    setTimeout(() => {
316                        $btn.text(originalText);
317                        $btn.prop('disabled', false);
318                        $btn.removeClass('btn-success');
319                    }, 2000);
320                }
321            } else {
322                console.error('CourseCart not loaded!');
323                alert('Cart system not available. Please refresh the page.');
324            }
325        })
326
327
328// Call after courses are loaded
329//         $(document).on('DOMNodeInserted', '.tabs-slides', function() {
330//             setTimeout(addCartButtons, 100);
331//         });
332//
333// // Also run on page load
334//         $(document).ready(function() {
335//             setTimeout(addCartButtons, 1500);
336//         });
337
338    }
339    tabsSlides()
340
341    // $('.item-sessions button').on('click', function (e){
342    //     // console.log('click btn')
343    //     let indx = $(this).parents('.tab').index()
344    //     // console.log($(this).attr('data-type'))
345    //     tabsSlides($(this).attr('data-type'), indx)
346    //
347    //     // console.log(indx)
348    // })
349
350
351// Burger Menu
352
353    var forEach=function(t,o,r){if("[object Object]"===Object.prototype.toString.call(t))for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&o.call(r,t[c],c,t);else for(var e=0,l=t.length;l>e;e++)o.call(r,t[e],e,t)};
354
355    var hamburgers = document.querySelectorAll(".hamburger");
356    if (hamburgers.length > 0) {
357        forEach(hamburgers, function(hamburger) {
358            hamburger.addEventListener("click", function() {
359                this.classList.toggle("is-active");
360            }, false);
361        });
362    }
363
364    $('.hamburger').click(function() {
365        $('.mobmenu').toggleClass("show");
366    });
367
368
369});

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.