@@ -49,6 +49,12 @@ export const model = {
4949 isPopupOpen : false ,
5050 selectedCourse : null ,
5151
52+ _coursesListeners : [ ] , // internal list of listeners
53+
54+ onCoursesSet ( callback ) {
55+ this . _coursesListeners . push ( callback ) ;
56+ } ,
57+
5258 setUser ( user ) {
5359 if ( ! this . user )
5460 this . user = user ;
@@ -68,6 +74,7 @@ export const model = {
6874
6975 setCourses ( courses ) {
7076 this . courses = courses ;
77+ this . _coursesListeners . forEach ( cb => cb ( courses ) ) ;
7178 } ,
7279
7380 async addCourse ( course ) {
@@ -252,19 +259,65 @@ export const model = {
252259 } ,
253260
254261 setPopupOpen ( isOpen ) {
255- console . log ( "OPENING/CLOSING A POPUP" ) ;
256- // if (isOpen && this.selectedCourse) {
257- // // this.addHistoryItem(this.selectedCourse.code);
258- // console.log("user path history:")
259- // for (let index = 0; index < this.searchHistory.length; index++) {
260- // console.log(this.searchHistory[index]);
261- // }
262- // }
262+ if ( isOpen ) {
263+ window . history . pushState ( { } , '' , '/' + this . selectedCourse . code ) ;
264+ }
265+ console . log ( "POPOPOOPOPOOOOOOP" )
266+ if ( ! isOpen ) {
267+ let current_url = window . location . href ;
268+ console . log ( current_url ) ;
269+ let end_idx = indexOfNth ( current_url , '/' , 3 ) ;
270+ if ( end_idx >= 0 && end_idx < current_url . length - 1 && current_url . indexOf ( "#" ) == - 1 ) {
271+ window . history . back ( ) ;
272+ }
273+ }
274+
263275 this . isPopupOpen = isOpen ;
264276 } ,
265277
266278 setSelectedCourse ( course ) {
267279 this . selectedCourse = course ;
268280 } ,
269281
282+
283+ toggleSidebarIsOpen ( ) {
284+ this . sidebarIsOpen = ! this . sidebarIsOpen ;
285+ } ,
286+
287+ handleUrlChange ( ) {
288+ let current_url = window . location . href ;
289+ let start_idx = indexOfNth ( current_url , '/' , 3 ) + 1 ;
290+ console . log ( current_url )
291+
292+ if ( start_idx > 0 && start_idx < current_url . length && current_url . indexOf ( "#" ) == - 1 ) {
293+ let course_code = current_url . slice ( start_idx ) ;
294+ let course = this . getCourse ( course_code ) ;
295+ console . log ( course_code )
296+ if ( course ) {
297+ console . log ( "ACTIVE" )
298+ this . setSelectedCourse ( course ) ;
299+ this . setPopupOpen ( true ) ;
300+ }
301+ console . log ( "Forward" ) ;
302+ } else {
303+ console . log ( "Back" )
304+ this . setPopupOpen ( false ) ;
305+ }
306+ //console.log("back");
307+ }
308+
270309} ;
310+
311+
312+ function indexOfNth ( string , char , n ) {
313+ let count = 0 ;
314+ for ( let i = 0 ; i < string . length ; i ++ ) {
315+ if ( string [ i ] == char ) {
316+ count ++ ;
317+ }
318+ if ( count == n ) {
319+ return i ;
320+ }
321+ }
322+ return - 1 ;
323+ }
0 commit comments