'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
'use strict';
 
window.EventPubSub=class EventPubSub {
  constructor( scope ) {
      this._events_ = {};
      this.publish = this.trigger = this.emit;
      this.subscribe = this.on;
      this.unSubscribe = this.off;
  }
 
  on( type, handler, once ) {
      if ( !handler ) {
          throw new ReferenceError( 'handler not defined.' );
      }
 
      if ( !this._events_[ type ] ) {
          this._events_[ type ] = [];
      }
 
       if(once){
          handler._once_ = once;
      }
 
      this._events_[ type ].push( handler );
      return this;
  }
 
  once( type, handler ) {
      return this.on( type, handler, true );
  }
 
  off( type, handler ) {
      if ( !this._events_[ type ] ) {
          return this;
      }
 
      if ( !handler ) {
          throw new ReferenceError( 'handler not defined. if you wish to remove all handlers from the event please pass "*" as the handler' );
      }
 
      if ( handler == '*' ) {
          delete this._events_[ type ];
          return this;
      }
 
      const handlers = this._events_[ type ];
 
      while ( handlers.includes( handler ) ) {
          handlers.splice(
              handlers.indexOf( handler ),
              1
          );
      }
 
      if ( handlers.length < 1 ) {
          delete this._events_[ type ];
      }
 
      return this;
  }
 
  emit( type, ...args ) {
      if ( !this._events_[ type ] ) {
          return this.emit$( type, ...args );
      }
 
      const handlers = this._events_[ type ];
      const onceHandled=[];
 
      for ( let handler of handlers ) {
          handler.apply( this, args );
          if(handler._once_){
            onceHandled.push(handler);
          }
      }
 
      for(let handler of onceHandled){
        this.off(type,handler);
      }
 
      return this.emit$( type, ...args );
  }
 
  emit$( type, ...args ) {
      if ( !this._events_[ '*' ] ) {
          return this;
      }
 
      const catchAll = this._events_[ '*' ];
 
      for ( let handler of catchAll ) {
          handler.call( this, type, ...args );
      }
 
      return this;
  }
}
 
if (!Array.prototype.includes) {
  Array.prototype.includes = function(searchElement /*, fromIndex*/) {
    'use strict';
    if (this == null) {
      throw new TypeError('Array.prototype.includes called on null or undefined');
    }
 
    var O = Object(this);
    var len = parseInt(O.length, 10) || 0;
    if (len === 0) {
      return false;
    }
    var n = parseInt(arguments[1], 10) || 0;
    var k;
    if (n >= 0) {
      k = n;
    } else {
      k = len + n;
      if (k < 0) {k = 0;}
    }
    var currentElement;
    while (k < len) {
      currentElement = O[k];
      if (searchElement === currentElement ||
         (searchElement !== searchElement && currentElement !== currentElement)) { // NaN !== NaN
        return true;
      }
      k++;
    }
    return false;
  };
}