summaryrefslogblamecommitdiffstats
path: root/activePage.es
blob: cc4537e087325d14e67f195a63f5d9e6fc1a69f3 (plain) (tree)
1
2
3
4
5
                           

                         
 
                        








                                                                                       


                                              



                                               
                

                                       


                                             
                




                                                        
                

                                                         


                                              
                
                                                                        







                                                              



                             


                                                       



                   








                                                                       
             



                                                                  












                                                                     
                             
                         
 
                              

                  
                                  




                  
                          
                   


          
                          
                   

   
 
var cur_section = Symbol();

export class ActivePage {

  constructor(appName) {
    // The idea behind this property that it could basically anything, but
    // whoever inherits this class must override next(), prev(), and display() methods,
    // if necessary; just in the end, its value probably corresponds to the IDs of the
    // individual elements in the page.
    this[cur_section] = null;
    this.swipe_pos_x = 0;
    this.swipe_pos_y = 0;
    this.app_record = null;

    // Swipe event handlers
    document.body.addEventListener("dblclick",
      () => {
        this.display();
      }, false);

    document.body.addEventListener("mousedown",
      (evt) => {
        this.swipe_pos_x = evt.screenX;
        this.swipe_pos_y = evt.screenY;
      }, false);

    document.body.addEventListener("mouseup",
      (evt) => {
        this.handle_move(this.swipe_pos_x - evt.screenX,
          this.swipe_pos_y - evt.screenY);
      }, false);

    document.body.addEventListener("touchstart",
      (evt) => {
        this.swipe_pos_x = evt.changedTouches[0].screenX;
        this.swipe_pos_y = evt.changedTouches[0].screenY;
      }, false);

    document.body.addEventListener("touchend",
      (evt) => {
        var end_pos = evt.changedTouches[evt.changedTouches.length - 1];
        // We want't opposite direction to Mouse gestures here
        // so the difference should be opposite
        this.handle_move(end_pos.screenX - this.swipe_pos_x,
          end_pos.screenY - this.swipe_pos_y);
      }, false);

    document.body.addEventListener("touchcancel",
      () => {
        this.swipe_pos_x = 0;
        this.swipe_pos_y = 0;
      }, false);

    // applicationCache.addEventListener("updateready",
    //   () => { location.reload(); }
    //   );

    this.display();
  }

  /**
   * Display current item
   *
   * @param new_date String with ISO formatted date (optional)
   *    or Number with the relative distance of the day from the date
   *    currently displayed.
   *
   * Displays the Losungen for the given date (or today if not defined)
   */
  display() {
    var visibleElems = document.getElementsByClassName("visible");
    Array.prototype.forEach.call(visibleElems, function(e) {
      e.classList.remove("visible");
    });
  }

  /**
   * react to the discovered distance of swipe
   *
   * @param distX Number distance in points in direction X
   * @param distY Number distance in points in direction Y
   *
   * There is a preference for the horizontal swipe; if that doesn't
   * happen (i.e., the distance travelled horizontally is less than
   * negligible), then the vertical swipe (in either direction) means
   * jump to today.
   */
  handle_move(distX, distY) {
    var negligible = 100;

    if (distX < -negligible) {
      this.next();
    }
    else if (distX > negligible) {
      this.prev();
    }
  }

  next() {
    this.cur_section += 1;
    this.display();
  }

  prev() {
    this.cur_section -= 1;
    this.display();
  }

}