@pie-element/hotspot 7.8.1-next.4 → 7.9.0-hotfix.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.9.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@7.8.0...@pie-element/hotspot@7.9.0) (2025-04-01)
7
+
8
+
9
+ ### Features
10
+
11
+ * update pie-lib/pie-toolbox PD-4938 ([4d89e6e](https://github.com/pie-framework/pie-elements/commit/4d89e6ef28c75b344b6669562f99057359bff794))
12
+ * use optimized enable autoplay audio image from pie-lib PD-4936 ([b18e1e4](https://github.com/pie-framework/pie-elements/commit/b18e1e422be2f6ea691d2e73f7868ebe6b9c839c))
13
+
14
+
15
+
16
+
17
+
6
18
  # [7.8.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@7.7.3...@pie-element/hotspot@7.8.0) (2025-03-27)
7
19
 
8
20
 
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@7.3.0...@pie-element/hotspot-configure@7.4.0) (2025-04-01)
7
+
8
+
9
+ ### Features
10
+
11
+ * update pie-lib/pie-toolbox PD-4938 ([4d89e6e](https://github.com/pie-framework/pie-elements/commit/4d89e6ef28c75b344b6669562f99057359bff794))
12
+
13
+
14
+
15
+
16
+
6
17
  # [7.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@7.2.9...@pie-element/hotspot-configure@7.3.0) (2025-03-27)
7
18
 
8
19
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-configure",
3
3
  "private": true,
4
- "version": "7.3.0",
4
+ "version": "7.4.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-controller@5.4.4...@pie-element/hotspot-controller@5.5.0) (2025-04-01)
7
+
8
+
9
+ ### Features
10
+
11
+ * update pie-lib/pie-toolbox PD-4938 ([4d89e6e](https://github.com/pie-framework/pie-elements/commit/4d89e6ef28c75b344b6669562f99057359bff794))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [5.4.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-controller@5.4.3...@pie-element/hotspot-controller@5.4.4) (2025-03-27)
7
18
 
8
19
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-controller",
3
3
  "private": true,
4
- "version": "5.4.4",
4
+ "version": "5.5.0",
5
5
  "description": "",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
package/lib/index.js CHANGED
@@ -49,6 +49,7 @@ var Hotspot = /*#__PURE__*/function (_HTMLElement) {
49
49
  _this = _super.call(this);
50
50
  _this._model = null;
51
51
  _this._session = null;
52
+ _this._audioInitialized = false;
52
53
  _this.audioComplete = false;
53
54
  return _this;
54
55
  }
@@ -58,6 +59,7 @@ var Hotspot = /*#__PURE__*/function (_HTMLElement) {
58
59
  set: function set(m) {
59
60
  this._model = m;
60
61
  this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));
62
+ this._audioInitialized = false;
61
63
 
62
64
  this._render();
63
65
  }
@@ -142,6 +144,8 @@ var Hotspot = /*#__PURE__*/function (_HTMLElement) {
142
144
  var observer = new MutationObserver(function (mutationsList, observer) {
143
145
  mutationsList.forEach(function (mutation) {
144
146
  if (mutation.type === 'childList') {
147
+ if (_this2._audioInitialized) return;
148
+
145
149
  var audio = _this2.querySelector('audio');
146
150
 
147
151
  var isInsidePrompt = audio && audio.closest('#preview-prompt');
@@ -219,7 +223,9 @@ var Hotspot = /*#__PURE__*/function (_HTMLElement) {
219
223
  _this2._audio = audio;
220
224
  _this2._handlePlaying = handlePlaying;
221
225
  _this2._handleEnded = handleEnded;
222
- _this2._enableAudio = enableAudio;
226
+ _this2._enableAudio = enableAudio; // set to true to prevent multiple initializations
227
+
228
+ _this2._audioInitialized = true;
223
229
  observer.disconnect();
224
230
  }
225
231
  });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["Hotspot","_model","_session","audioComplete","m","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isComplete","_render","answers","autoplayAudioEnabled","completeAudioEnabled","Array","isArray","length","s","data","SessionChangedEvent","info","document","createElement","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","observer","MutationObserver","mutationsList","forEach","mutation","type","audio","querySelector","isInsidePrompt","closest","_createAudioInfoToast","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","el","React","HotspotComponent","model","session","onSelectChoice","bind","ReactDOM","render","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/pie-toolbox/render-ui';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\n\nimport HotspotComponent from './hotspot';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\n\nexport default class Hotspot extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this.audioComplete = false;\n }\n\n set model(m) {\n this._model = m;\n\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n this._render();\n }\n\n isComplete() {\n if (!this._session || !this._session.answers) {\n return false;\n }\n\n const { autoplayAudioEnabled, completeAudioEnabled } = this._model || {};\n if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {\n return false;\n }\n\n if (!Array.isArray(this._session.answers)) {\n return false;\n }\n\n return this._session.answers.length > 0;\n }\n\n set session(s) {\n if (s && !s.answers) {\n s.answers = [];\n }\n\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n onSelectChoice(data) {\n updateSessionValue(this._session, this._model, data);\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this._render();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width:'100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer'\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._render();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if(!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = (audioEndTime - audioStartTime);\n }\n\n this.audioComplete = true;\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n }\n\n _render() {\n if (this._model && this._session) {\n const el = React.createElement(HotspotComponent, {\n model: this._model,\n session: this._session,\n onSelectChoice: this.onSelectChoice.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["Hotspot","_model","_session","_audioInitialized","audioComplete","m","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isComplete","_render","answers","autoplayAudioEnabled","completeAudioEnabled","Array","isArray","length","s","data","SessionChangedEvent","info","document","createElement","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","observer","MutationObserver","mutationsList","forEach","mutation","type","audio","querySelector","isInsidePrompt","closest","_createAudioInfoToast","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","el","React","HotspotComponent","model","session","onSelectChoice","bind","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;IAEqBA,O;;;;;AACnB,qBAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,iBAAL,GAAyB,KAAzB;AACA,UAAKC,aAAL,GAAqB,KAArB;AALY;AAMb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKJ,MAAL,GAAcI,CAAd;AAEA,WAAKC,aAAL,CAAmB,IAAIC,8BAAJ,CAAkB,KAAKC,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKC,UAAL,EAA9C,EAAiE,CAAC,CAAC,KAAKT,MAAxE,CAAnB;AACA,WAAKE,iBAAL,GAAyB,KAAzB;;AAEA,WAAKQ,OAAL;AACD;;;WAED,sBAAa;AACX,UAAI,CAAC,KAAKT,QAAN,IAAkB,CAAC,KAAKA,QAAL,CAAcU,OAArC,EAA8C;AAC5C,eAAO,KAAP;AACD;;AAED,iBAAuD,KAAKX,MAAL,IAAe,EAAtE;AAAA,UAAQY,oBAAR,QAAQA,oBAAR;AAAA,UAA8BC,oBAA9B,QAA8BA,oBAA9B;;AACA,UAAID,oBAAoB,IAAIC,oBAAxB,IAAgD,CAAC,KAAKV,aAA1D,EAAyE;AACvE,eAAO,KAAP;AACD;;AAED,UAAI,CAACW,KAAK,CAACC,OAAN,CAAc,KAAKd,QAAL,CAAcU,OAA5B,CAAL,EAA2C;AACzC,eAAO,KAAP;AACD;;AAED,aAAO,KAAKV,QAAL,CAAcU,OAAd,CAAsBK,MAAtB,GAA+B,CAAtC;AACD;;;SAWD,eAAc;AACZ,aAAO,KAAKf,QAAZ;AACD,K;SAXD,aAAYgB,CAAZ,EAAe;AACb,UAAIA,CAAC,IAAI,CAACA,CAAC,CAACN,OAAZ,EAAqB;AACnBM,QAAAA,CAAC,CAACN,OAAF,GAAY,EAAZ;AACD;;AAED,WAAKV,QAAL,GAAgBgB,CAAhB;;AACA,WAAKP,OAAL;AACD;;;WAMD,wBAAeQ,IAAf,EAAqB;AACnB,8CAAmB,KAAKjB,QAAxB,EAAkC,KAAKD,MAAvC,EAA+CkB,IAA/C;AAEA,WAAKb,aAAL,CAAmB,IAAIc,oCAAJ,CAAwB,KAAKZ,OAAL,CAAaC,WAAb,EAAxB,EAAoD,KAAKC,UAAL,EAApD,CAAnB;;AAEA,WAAKC,OAAL;AACD;;;WAED,iCAAwB;AACtB,UAAMU,IAAI,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAb;AACAF,MAAAA,IAAI,CAACG,EAAL,GAAU,iBAAV;AAEAC,MAAAA,MAAM,CAACC,MAAP,CAAcL,IAAI,CAACM,KAAnB,EAA0B;AACxBC,QAAAA,QAAQ,EAAE,UADc;AAExBC,QAAAA,GAAG,EAAE,CAFmB;AAGxBC,QAAAA,KAAK,EAAE,MAHiB;AAIxBC,QAAAA,MAAM,EAAE,MAJgB;AAKxBC,QAAAA,OAAO,EAAE,MALe;AAMxBC,QAAAA,cAAc,EAAE,QANQ;AAOxBC,QAAAA,UAAU,EAAE,QAPY;AAQxBC,QAAAA,UAAU,EAAE,OARY;AASxBC,QAAAA,MAAM,EAAE,MATgB;AAUxBC,QAAAA,MAAM,EAAE;AAVgB,OAA1B;AAaA,UAAMC,GAAG,GAAGhB,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAZ;AACAe,MAAAA,GAAG,CAACC,GAAJ,GAAUC,kCAAV;AACAF,MAAAA,GAAG,CAACG,GAAJ,GAAU,yCAAV;AACAH,MAAAA,GAAG,CAACR,KAAJ,GAAY,GAAZ;AACAQ,MAAAA,GAAG,CAACP,MAAJ,GAAa,GAAb;AAEAV,MAAAA,IAAI,CAACqB,WAAL,CAAiBJ,GAAjB;AACA,aAAOjB,IAAP;AACD;;;WAED,6BAAoB;AAAA;;AAClB,WAAKV,OAAL,GADkB,CAGlB;AACA;AACA;;;AACA,UAAMgC,QAAQ,GAAG,IAAIC,gBAAJ,CAAqB,UAACC,aAAD,EAAgBF,QAAhB,EAA6B;AACjEE,QAAAA,aAAa,CAACC,OAAd,CAAsB,UAACC,QAAD,EAAc;AAClC,cAAIA,QAAQ,CAACC,IAAT,KAAkB,WAAtB,EAAmC;AACjC,gBAAI,MAAI,CAAC7C,iBAAT,EAA4B;;AAC5B,gBAAM8C,KAAK,GAAG,MAAI,CAACC,aAAL,CAAmB,OAAnB,CAAd;;AACA,gBAAMC,cAAc,GAAGF,KAAK,IAAIA,KAAK,CAACG,OAAN,CAAc,iBAAd,CAAhC;AAEA,gBAAI,CAAC,MAAI,CAACnD,MAAV,EAAkB;AAClB,gBAAI,CAAC,MAAI,CAACA,MAAL,CAAYY,oBAAjB,EAAuC;AACvC,gBAAIoC,KAAK,IAAI,CAACE,cAAd,EAA8B;AAC9B,gBAAI,CAACF,KAAL,EAAY;;AAEZ,gBAAM5B,IAAI,GAAG,MAAI,CAACgC,qBAAL,EAAb;;AACA,gBAAMC,SAAS,GAAG,MAAI,CAACJ,aAAL,CAAmB,iBAAnB,CAAlB;;AACA,gBAAMK,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,kBAAI,MAAI,CAACL,aAAL,CAAmB,kBAAnB,CAAJ,EAA4C;AAC1CD,gBAAAA,KAAK,CAACO,IAAN;AACAF,gBAAAA,SAAS,CAACG,WAAV,CAAsBpC,IAAtB;AACD;;AAEDC,cAAAA,QAAQ,CAACoC,mBAAT,CAA6B,OAA7B,EAAsCH,WAAtC;AACD,aAPD,CAZiC,CAqBjC;AACA;;;AACAI,YAAAA,UAAU,CAAC,YAAM;AACf,kBAAIV,KAAK,CAACW,MAAN,IAAgB,CAAC,MAAI,CAACV,aAAL,CAAmB,kBAAnB,CAArB,EAA6D;AAC3D;AACAI,gBAAAA,SAAS,CAACZ,WAAV,CAAsBrB,IAAtB;AACAC,gBAAAA,QAAQ,CAACuC,gBAAT,CAA0B,OAA1B,EAAmCN,WAAnC;AACD,eAJD,MAIO;AACLjC,gBAAAA,QAAQ,CAACoC,mBAAT,CAA6B,OAA7B,EAAsCH,WAAtC;AACD;AACF,aARS,EAQP,GARO,CAAV,CAvBiC,CAiCjC;;AACA,gBAAMO,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B;AACA,yDAAsB,MAAI,CAAC5D,QAA3B,EAAqC;AAAE6D,gBAAAA,cAAc,EAAE,IAAIC,IAAJ,GAAWC,OAAX;AAAlB,eAArC;;AAEA,kBAAM5C,IAAI,GAAG,MAAI,CAAC6B,aAAL,CAAmB,kBAAnB,CAAb;;AACA,kBAAI7B,IAAJ,EAAU;AACRiC,gBAAAA,SAAS,CAACG,WAAV,CAAsBpC,IAAtB;AACD;;AAED4B,cAAAA,KAAK,CAACS,mBAAN,CAA0B,SAA1B,EAAqCI,aAArC;AACD,aAVD;;AAYAb,YAAAA,KAAK,CAACY,gBAAN,CAAuB,SAAvB,EAAkCC,aAAlC,EA9CiC,CAgDjC;;AACA,gBAAMI,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB;AACA,yDAAsB,MAAI,CAAChE,QAA3B,EAAqC;AAAEiE,gBAAAA,YAAY,EAAE,IAAIH,IAAJ,GAAWC,OAAX;AAAhB,eAArC;AAEA,oCAAiD,MAAI,CAAC/D,QAAtD;AAAA,kBAAM6D,cAAN,mBAAMA,cAAN;AAAA,kBAAsBI,YAAtB,mBAAsBA,YAAtB;AAAA,kBAAoCC,QAApC,mBAAoCA,QAApC;;AACA,kBAAI,CAACA,QAAD,IAAaL,cAAb,IAA+BI,YAAnC,EAAiD;AAC/C;AACA,gBAAA,MAAI,CAACjE,QAAL,CAAckE,QAAd,GAAyBD,YAAY,GAAGJ,cAAxC;AACD;;AAED,cAAA,MAAI,CAAC3D,aAAL,GAAqB,IAArB;;AACA,cAAA,MAAI,CAACE,aAAL,CAAmB,IAAIc,oCAAJ,CAAwB,MAAI,CAACZ,OAAL,CAAaC,WAAb,EAAxB,EAAoD,MAAI,CAACC,UAAL,EAApD,CAAnB;;AAEAuC,cAAAA,KAAK,CAACS,mBAAN,CAA0B,OAA1B,EAAmCQ,WAAnC;AACD,aAdD;;AAgBAjB,YAAAA,KAAK,CAACY,gBAAN,CAAuB,OAAvB,EAAgCK,WAAhC,EAjEiC,CAmEjC;;AACA,YAAA,MAAI,CAACG,MAAL,GAAcpB,KAAd;AACA,YAAA,MAAI,CAACqB,cAAL,GAAsBR,aAAtB;AACA,YAAA,MAAI,CAACS,YAAL,GAAoBL,WAApB;AACA,YAAA,MAAI,CAACM,YAAL,GAAoBjB,WAApB,CAvEiC,CAwEjC;;AACA,YAAA,MAAI,CAACpD,iBAAL,GAAyB,IAAzB;AAEAwC,YAAAA,QAAQ,CAAC8B,UAAT;AACD;AACF,SA9ED;AA+ED,OAhFgB,CAAjB;AAkFA9B,MAAAA,QAAQ,CAAC+B,OAAT,CAAiB,IAAjB,EAAuB;AAAEC,QAAAA,SAAS,EAAE,IAAb;AAAmBC,QAAAA,OAAO,EAAE;AAA5B,OAAvB;AACD;;;WAED,gCAAuB;AACrBtD,MAAAA,QAAQ,CAACoC,mBAAT,CAA6B,OAA7B,EAAsC,KAAKc,YAA3C;;AAEA,UAAI,KAAKH,MAAT,EAAiB;AACf,aAAKA,MAAL,CAAYX,mBAAZ,CAAgC,SAAhC,EAA2C,KAAKY,cAAhD;;AACA,aAAKD,MAAL,CAAYX,mBAAZ,CAAgC,OAAhC,EAAyC,KAAKa,YAA9C;;AACA,aAAKF,MAAL,GAAc,IAAd;AACD;AACF;;;WAED,mBAAU;AAAA;;AACR,UAAI,KAAKpE,MAAL,IAAe,KAAKC,QAAxB,EAAkC;AAChC,YAAM2E,EAAE,gBAAGC,kBAAMvD,aAAN,CAAoBwD,mBAApB,EAAsC;AAC/CC,UAAAA,KAAK,EAAE,KAAK/E,MADmC;AAE/CgF,UAAAA,OAAO,EAAE,KAAK/E,QAFiC;AAG/CgF,UAAAA,cAAc,EAAE,KAAKA,cAAL,CAAoBC,IAApB,CAAyB,IAAzB;AAH+B,SAAtC,CAAX;;AAMAC,6BAASC,MAAT,CAAgBR,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,yCAAW,MAAX;AACD,SAFD;AAGD;AACF;;;kDApMkCS,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/pie-toolbox/render-ui';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\n\nimport HotspotComponent from './hotspot';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\n\nexport default class Hotspot extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._audioInitialized = false;\n this.audioComplete = false;\n }\n\n set model(m) {\n this._model = m;\n\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n this._audioInitialized = false;\n\n this._render();\n }\n\n isComplete() {\n if (!this._session || !this._session.answers) {\n return false;\n }\n\n const { autoplayAudioEnabled, completeAudioEnabled } = this._model || {};\n if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {\n return false;\n }\n\n if (!Array.isArray(this._session.answers)) {\n return false;\n }\n\n return this._session.answers.length > 0;\n }\n\n set session(s) {\n if (s && !s.answers) {\n s.answers = [];\n }\n\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n onSelectChoice(data) {\n updateSessionValue(this._session, this._model, data);\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this._render();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._render();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n }\n\n _render() {\n if (this._model && this._session) {\n const el = React.createElement(HotspotComponent, {\n model: this._model,\n session: this._session,\n onSelectChoice: this.onSelectChoice.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot",
3
- "version": "7.8.1-next.4+8e42a788f",
3
+ "version": "7.9.0-hotfix.0",
4
4
  "description": "",
5
5
  "repository": "pie-framework/pie-elements",
6
6
  "publishConfig": {
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "author": "pie framework developers",
20
20
  "license": "ISC",
21
- "gitHead": "8e42a788fed4639a4755b9087c2ca9059584b989",
21
+ "gitHead": "0e14ff981bcdc8a89a0e58484026496701bfdbc3",
22
22
  "scripts": {
23
23
  "postpublish": "../../scripts/postpublish"
24
24
  },
package/src/index.js CHANGED
@@ -12,13 +12,16 @@ export default class Hotspot extends HTMLElement {
12
12
  super();
13
13
  this._model = null;
14
14
  this._session = null;
15
+ this._audioInitialized = false;
15
16
  this.audioComplete = false;
16
17
  }
17
18
 
18
- set model(m) {
19
+ set model(m) {
19
20
  this._model = m;
20
21
 
21
22
  this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));
23
+ this._audioInitialized = false;
24
+
22
25
  this._render();
23
26
  }
24
27
 
@@ -67,14 +70,14 @@ export default class Hotspot extends HTMLElement {
67
70
  Object.assign(info.style, {
68
71
  position: 'absolute',
69
72
  top: 0,
70
- width:'100%',
73
+ width: '100%',
71
74
  height: '100%',
72
75
  display: 'flex',
73
76
  justifyContent: 'center',
74
77
  alignItems: 'center',
75
78
  background: 'white',
76
79
  zIndex: '1000',
77
- cursor: 'pointer'
80
+ cursor: 'pointer',
78
81
  });
79
82
 
80
83
  const img = document.createElement('img');
@@ -96,6 +99,7 @@ export default class Hotspot extends HTMLElement {
96
99
  const observer = new MutationObserver((mutationsList, observer) => {
97
100
  mutationsList.forEach((mutation) => {
98
101
  if (mutation.type === 'childList') {
102
+ if (this._audioInitialized) return;
99
103
  const audio = this.querySelector('audio');
100
104
  const isInsidePrompt = audio && audio.closest('#preview-prompt');
101
105
 
@@ -148,9 +152,9 @@ export default class Hotspot extends HTMLElement {
148
152
  updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });
149
153
 
150
154
  let { audioStartTime, audioEndTime, waitTime } = this._session;
151
- if(!waitTime && audioStartTime && audioEndTime) {
155
+ if (!waitTime && audioStartTime && audioEndTime) {
152
156
  // waitTime is elapsed time the user waited for auto-played audio to finish
153
- this._session.waitTime = (audioEndTime - audioStartTime);
157
+ this._session.waitTime = audioEndTime - audioStartTime;
154
158
  }
155
159
 
156
160
  this.audioComplete = true;
@@ -166,6 +170,8 @@ export default class Hotspot extends HTMLElement {
166
170
  this._handlePlaying = handlePlaying;
167
171
  this._handleEnded = handleEnded;
168
172
  this._enableAudio = enableAudio;
173
+ // set to true to prevent multiple initializations
174
+ this._audioInitialized = true;
169
175
 
170
176
  observer.disconnect();
171
177
  }
package/LICENSE.md DELETED
@@ -1,5 +0,0 @@
1
- Copyright 2019 CoreSpring Inc
2
-
3
- Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
4
-
5
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -1,395 +0,0 @@
1
-
2
- 3.1.0 / 2017-09-26
3
- ==================
4
-
5
- * Add `DEBUG_HIDE_DATE` env var (#486)
6
- * Remove ReDoS regexp in %o formatter (#504)
7
- * Remove "component" from package.json
8
- * Remove `component.json`
9
- * Ignore package-lock.json
10
- * Examples: fix colors printout
11
- * Fix: browser detection
12
- * Fix: spelling mistake (#496, @EdwardBetts)
13
-
14
- 3.0.1 / 2017-08-24
15
- ==================
16
-
17
- * Fix: Disable colors in Edge and Internet Explorer (#489)
18
-
19
- 3.0.0 / 2017-08-08
20
- ==================
21
-
22
- * Breaking: Remove DEBUG_FD (#406)
23
- * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418)
24
- * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408)
25
- * Addition: document `enabled` flag (#465)
26
- * Addition: add 256 colors mode (#481)
27
- * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440)
28
- * Update: component: update "ms" to v2.0.0
29
- * Update: separate the Node and Browser tests in Travis-CI
30
- * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots
31
- * Update: separate Node.js and web browser examples for organization
32
- * Update: update "browserify" to v14.4.0
33
- * Fix: fix Readme typo (#473)
34
-
35
- 2.6.9 / 2017-09-22
36
- ==================
37
-
38
- * remove ReDoS regexp in %o formatter (#504)
39
-
40
- 2.6.8 / 2017-05-18
41
- ==================
42
-
43
- * Fix: Check for undefined on browser globals (#462, @marbemac)
44
-
45
- 2.6.7 / 2017-05-16
46
- ==================
47
-
48
- * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
49
- * Fix: Inline extend function in node implementation (#452, @dougwilson)
50
- * Docs: Fix typo (#455, @msasad)
51
-
52
- 2.6.5 / 2017-04-27
53
- ==================
54
-
55
- * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
56
- * Misc: clean up browser reference checks (#447, @thebigredgeek)
57
- * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
58
-
59
-
60
- 2.6.4 / 2017-04-20
61
- ==================
62
-
63
- * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
64
- * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
65
- * Misc: update "ms" to v0.7.3 (@tootallnate)
66
-
67
- 2.6.3 / 2017-03-13
68
- ==================
69
-
70
- * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
71
- * Docs: Changelog fix (@thebigredgeek)
72
-
73
- 2.6.2 / 2017-03-10
74
- ==================
75
-
76
- * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
77
- * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
78
- * Docs: Add Slackin invite badge (@tootallnate)
79
-
80
- 2.6.1 / 2017-02-10
81
- ==================
82
-
83
- * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
84
- * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
85
- * Fix: IE8 "Expected identifier" error (#414, @vgoma)
86
- * Fix: Namespaces would not disable once enabled (#409, @musikov)
87
-
88
- 2.6.0 / 2016-12-28
89
- ==================
90
-
91
- * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
92
- * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
93
- * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
94
-
95
- 2.5.2 / 2016-12-25
96
- ==================
97
-
98
- * Fix: reference error on window within webworkers (#393, @KlausTrainer)
99
- * Docs: fixed README typo (#391, @lurch)
100
- * Docs: added notice about v3 api discussion (@thebigredgeek)
101
-
102
- 2.5.1 / 2016-12-20
103
- ==================
104
-
105
- * Fix: babel-core compatibility
106
-
107
- 2.5.0 / 2016-12-20
108
- ==================
109
-
110
- * Fix: wrong reference in bower file (@thebigredgeek)
111
- * Fix: webworker compatibility (@thebigredgeek)
112
- * Fix: output formatting issue (#388, @kribblo)
113
- * Fix: babel-loader compatibility (#383, @escwald)
114
- * Misc: removed built asset from repo and publications (@thebigredgeek)
115
- * Misc: moved source files to /src (#378, @yamikuronue)
116
- * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
117
- * Test: coveralls integration (#378, @yamikuronue)
118
- * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
119
-
120
- 2.4.5 / 2016-12-17
121
- ==================
122
-
123
- * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
124
- * Fix: custom log function (#379, @hsiliev)
125
- * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
126
- * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
127
- * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
128
-
129
- 2.4.4 / 2016-12-14
130
- ==================
131
-
132
- * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
133
-
134
- 2.4.3 / 2016-12-14
135
- ==================
136
-
137
- * Fix: navigation.userAgent error for react native (#364, @escwald)
138
-
139
- 2.4.2 / 2016-12-14
140
- ==================
141
-
142
- * Fix: browser colors (#367, @tootallnate)
143
- * Misc: travis ci integration (@thebigredgeek)
144
- * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
145
-
146
- 2.4.1 / 2016-12-13
147
- ==================
148
-
149
- * Fix: typo that broke the package (#356)
150
-
151
- 2.4.0 / 2016-12-13
152
- ==================
153
-
154
- * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
155
- * Fix: revert "handle regex special characters" (@tootallnate)
156
- * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
157
- * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
158
- * Improvement: allow colors in workers (#335, @botverse)
159
- * Improvement: use same color for same namespace. (#338, @lchenay)
160
-
161
- 2.3.3 / 2016-11-09
162
- ==================
163
-
164
- * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
165
- * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
166
- * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
167
-
168
- 2.3.2 / 2016-11-09
169
- ==================
170
-
171
- * Fix: be super-safe in index.js as well (@TooTallNate)
172
- * Fix: should check whether process exists (Tom Newby)
173
-
174
- 2.3.1 / 2016-11-09
175
- ==================
176
-
177
- * Fix: Added electron compatibility (#324, @paulcbetts)
178
- * Improvement: Added performance optimizations (@tootallnate)
179
- * Readme: Corrected PowerShell environment variable example (#252, @gimre)
180
- * Misc: Removed yarn lock file from source control (#321, @fengmk2)
181
-
182
- 2.3.0 / 2016-11-07
183
- ==================
184
-
185
- * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
186
- * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
187
- * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
188
- * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
189
- * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
190
- * Package: Update "ms" to 0.7.2 (#315, @DevSide)
191
- * Package: removed superfluous version property from bower.json (#207 @kkirsche)
192
- * Readme: fix USE_COLORS to DEBUG_COLORS
193
- * Readme: Doc fixes for format string sugar (#269, @mlucool)
194
- * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
195
- * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
196
- * Readme: better docs for browser support (#224, @matthewmueller)
197
- * Tooling: Added yarn integration for development (#317, @thebigredgeek)
198
- * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
199
- * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
200
- * Misc: Updated contributors (@thebigredgeek)
201
-
202
- 2.2.0 / 2015-05-09
203
- ==================
204
-
205
- * package: update "ms" to v0.7.1 (#202, @dougwilson)
206
- * README: add logging to file example (#193, @DanielOchoa)
207
- * README: fixed a typo (#191, @amir-s)
208
- * browser: expose `storage` (#190, @stephenmathieson)
209
- * Makefile: add a `distclean` target (#189, @stephenmathieson)
210
-
211
- 2.1.3 / 2015-03-13
212
- ==================
213
-
214
- * Updated stdout/stderr example (#186)
215
- * Updated example/stdout.js to match debug current behaviour
216
- * Renamed example/stderr.js to stdout.js
217
- * Update Readme.md (#184)
218
- * replace high intensity foreground color for bold (#182, #183)
219
-
220
- 2.1.2 / 2015-03-01
221
- ==================
222
-
223
- * dist: recompile
224
- * update "ms" to v0.7.0
225
- * package: update "browserify" to v9.0.3
226
- * component: fix "ms.js" repo location
227
- * changed bower package name
228
- * updated documentation about using debug in a browser
229
- * fix: security error on safari (#167, #168, @yields)
230
-
231
- 2.1.1 / 2014-12-29
232
- ==================
233
-
234
- * browser: use `typeof` to check for `console` existence
235
- * browser: check for `console.log` truthiness (fix IE 8/9)
236
- * browser: add support for Chrome apps
237
- * Readme: added Windows usage remarks
238
- * Add `bower.json` to properly support bower install
239
-
240
- 2.1.0 / 2014-10-15
241
- ==================
242
-
243
- * node: implement `DEBUG_FD` env variable support
244
- * package: update "browserify" to v6.1.0
245
- * package: add "license" field to package.json (#135, @panuhorsmalahti)
246
-
247
- 2.0.0 / 2014-09-01
248
- ==================
249
-
250
- * package: update "browserify" to v5.11.0
251
- * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
252
-
253
- 1.0.4 / 2014-07-15
254
- ==================
255
-
256
- * dist: recompile
257
- * example: remove `console.info()` log usage
258
- * example: add "Content-Type" UTF-8 header to browser example
259
- * browser: place %c marker after the space character
260
- * browser: reset the "content" color via `color: inherit`
261
- * browser: add colors support for Firefox >= v31
262
- * debug: prefer an instance `log()` function over the global one (#119)
263
- * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
264
-
265
- 1.0.3 / 2014-07-09
266
- ==================
267
-
268
- * Add support for multiple wildcards in namespaces (#122, @seegno)
269
- * browser: fix lint
270
-
271
- 1.0.2 / 2014-06-10
272
- ==================
273
-
274
- * browser: update color palette (#113, @gscottolson)
275
- * common: make console logging function configurable (#108, @timoxley)
276
- * node: fix %o colors on old node <= 0.8.x
277
- * Makefile: find node path using shell/which (#109, @timoxley)
278
-
279
- 1.0.1 / 2014-06-06
280
- ==================
281
-
282
- * browser: use `removeItem()` to clear localStorage
283
- * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
284
- * package: add "contributors" section
285
- * node: fix comment typo
286
- * README: list authors
287
-
288
- 1.0.0 / 2014-06-04
289
- ==================
290
-
291
- * make ms diff be global, not be scope
292
- * debug: ignore empty strings in enable()
293
- * node: make DEBUG_COLORS able to disable coloring
294
- * *: export the `colors` array
295
- * npmignore: don't publish the `dist` dir
296
- * Makefile: refactor to use browserify
297
- * package: add "browserify" as a dev dependency
298
- * Readme: add Web Inspector Colors section
299
- * node: reset terminal color for the debug content
300
- * node: map "%o" to `util.inspect()`
301
- * browser: map "%j" to `JSON.stringify()`
302
- * debug: add custom "formatters"
303
- * debug: use "ms" module for humanizing the diff
304
- * Readme: add "bash" syntax highlighting
305
- * browser: add Firebug color support
306
- * browser: add colors for WebKit browsers
307
- * node: apply log to `console`
308
- * rewrite: abstract common logic for Node & browsers
309
- * add .jshintrc file
310
-
311
- 0.8.1 / 2014-04-14
312
- ==================
313
-
314
- * package: re-add the "component" section
315
-
316
- 0.8.0 / 2014-03-30
317
- ==================
318
-
319
- * add `enable()` method for nodejs. Closes #27
320
- * change from stderr to stdout
321
- * remove unnecessary index.js file
322
-
323
- 0.7.4 / 2013-11-13
324
- ==================
325
-
326
- * remove "browserify" key from package.json (fixes something in browserify)
327
-
328
- 0.7.3 / 2013-10-30
329
- ==================
330
-
331
- * fix: catch localStorage security error when cookies are blocked (Chrome)
332
- * add debug(err) support. Closes #46
333
- * add .browser prop to package.json. Closes #42
334
-
335
- 0.7.2 / 2013-02-06
336
- ==================
337
-
338
- * fix package.json
339
- * fix: Mobile Safari (private mode) is broken with debug
340
- * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
341
-
342
- 0.7.1 / 2013-02-05
343
- ==================
344
-
345
- * add repository URL to package.json
346
- * add DEBUG_COLORED to force colored output
347
- * add browserify support
348
- * fix component. Closes #24
349
-
350
- 0.7.0 / 2012-05-04
351
- ==================
352
-
353
- * Added .component to package.json
354
- * Added debug.component.js build
355
-
356
- 0.6.0 / 2012-03-16
357
- ==================
358
-
359
- * Added support for "-" prefix in DEBUG [Vinay Pulim]
360
- * Added `.enabled` flag to the node version [TooTallNate]
361
-
362
- 0.5.0 / 2012-02-02
363
- ==================
364
-
365
- * Added: humanize diffs. Closes #8
366
- * Added `debug.disable()` to the CS variant
367
- * Removed padding. Closes #10
368
- * Fixed: persist client-side variant again. Closes #9
369
-
370
- 0.4.0 / 2012-02-01
371
- ==================
372
-
373
- * Added browser variant support for older browsers [TooTallNate]
374
- * Added `debug.enable('project:*')` to browser variant [TooTallNate]
375
- * Added padding to diff (moved it to the right)
376
-
377
- 0.3.0 / 2012-01-26
378
- ==================
379
-
380
- * Added millisecond diff when isatty, otherwise UTC string
381
-
382
- 0.2.0 / 2012-01-22
383
- ==================
384
-
385
- * Added wildcard support
386
-
387
- 0.1.0 / 2011-12-02
388
- ==================
389
-
390
- * Added: remove colors unless stderr isatty [TooTallNate]
391
-
392
- 0.0.1 / 2010-01-03
393
- ==================
394
-
395
- * Initial release