jekyll-theme-simple-texture 0.2.3 → 0.3.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.
Files changed (263) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/_includes/blog/scripts.html +6 -63
  4. data/_includes/common/gtm-body.html +4 -0
  5. data/_includes/common/gtm-head.html +7 -0
  6. data/_includes/common/libraries.html +2 -6
  7. data/_includes/home/scripts.html +0 -8
  8. data/_layouts/blog.html +7 -0
  9. data/_layouts/home.html +7 -0
  10. data/assets/javascripts/fancybox/helpers/jquery.fancybox-buttons.css +2 -2
  11. data/assets/javascripts/fancybox/helpers/jquery.fancybox-buttons.js +1 -1
  12. data/assets/javascripts/fancybox/helpers/jquery.fancybox-media.js +5 -3
  13. data/assets/javascripts/fancybox/helpers/jquery.fancybox-thumbs.js +8 -5
  14. data/assets/javascripts/fancybox/jquery.fancybox.css +9 -8
  15. data/assets/javascripts/fancybox/jquery.fancybox.js +52 -54
  16. data/assets/javascripts/fancybox/jquery.fancybox.pack.js +45 -45
  17. data/assets/javascripts/jquery-3.3.1.min.js +2 -0
  18. metadata +11 -253
  19. data/_includes/common/analytics.html +0 -63
  20. data/assets/javascripts/autotrack.js +0 -63
  21. data/assets/javascripts/autotrack.js.map +0 -1
  22. data/assets/javascripts/ckeditor/LICENSE.md +0 -1264
  23. data/assets/javascripts/ckeditor/README.md +0 -39
  24. data/assets/javascripts/ckeditor/adapters/jquery.js +0 -10
  25. data/assets/javascripts/ckeditor/build-config.js +0 -141
  26. data/assets/javascripts/ckeditor/ckeditor.js +0 -902
  27. data/assets/javascripts/ckeditor/config.js +0 -38
  28. data/assets/javascripts/ckeditor/contents.css +0 -123
  29. data/assets/javascripts/ckeditor/lang/af.js +0 -5
  30. data/assets/javascripts/ckeditor/lang/ar.js +0 -5
  31. data/assets/javascripts/ckeditor/lang/bg.js +0 -5
  32. data/assets/javascripts/ckeditor/lang/bn.js +0 -5
  33. data/assets/javascripts/ckeditor/lang/bs.js +0 -5
  34. data/assets/javascripts/ckeditor/lang/ca.js +0 -5
  35. data/assets/javascripts/ckeditor/lang/cs.js +0 -5
  36. data/assets/javascripts/ckeditor/lang/cy.js +0 -5
  37. data/assets/javascripts/ckeditor/lang/da.js +0 -5
  38. data/assets/javascripts/ckeditor/lang/de.js +0 -5
  39. data/assets/javascripts/ckeditor/lang/el.js +0 -5
  40. data/assets/javascripts/ckeditor/lang/en-au.js +0 -5
  41. data/assets/javascripts/ckeditor/lang/en-ca.js +0 -5
  42. data/assets/javascripts/ckeditor/lang/en-gb.js +0 -5
  43. data/assets/javascripts/ckeditor/lang/en.js +0 -5
  44. data/assets/javascripts/ckeditor/lang/eo.js +0 -5
  45. data/assets/javascripts/ckeditor/lang/es.js +0 -5
  46. data/assets/javascripts/ckeditor/lang/et.js +0 -5
  47. data/assets/javascripts/ckeditor/lang/eu.js +0 -5
  48. data/assets/javascripts/ckeditor/lang/fa.js +0 -5
  49. data/assets/javascripts/ckeditor/lang/fi.js +0 -5
  50. data/assets/javascripts/ckeditor/lang/fo.js +0 -5
  51. data/assets/javascripts/ckeditor/lang/fr-ca.js +0 -5
  52. data/assets/javascripts/ckeditor/lang/fr.js +0 -5
  53. data/assets/javascripts/ckeditor/lang/gl.js +0 -5
  54. data/assets/javascripts/ckeditor/lang/gu.js +0 -5
  55. data/assets/javascripts/ckeditor/lang/he.js +0 -5
  56. data/assets/javascripts/ckeditor/lang/hi.js +0 -5
  57. data/assets/javascripts/ckeditor/lang/hr.js +0 -5
  58. data/assets/javascripts/ckeditor/lang/hu.js +0 -5
  59. data/assets/javascripts/ckeditor/lang/id.js +0 -5
  60. data/assets/javascripts/ckeditor/lang/is.js +0 -5
  61. data/assets/javascripts/ckeditor/lang/it.js +0 -5
  62. data/assets/javascripts/ckeditor/lang/ja.js +0 -5
  63. data/assets/javascripts/ckeditor/lang/ka.js +0 -5
  64. data/assets/javascripts/ckeditor/lang/km.js +0 -5
  65. data/assets/javascripts/ckeditor/lang/ko.js +0 -5
  66. data/assets/javascripts/ckeditor/lang/ku.js +0 -5
  67. data/assets/javascripts/ckeditor/lang/lt.js +0 -5
  68. data/assets/javascripts/ckeditor/lang/lv.js +0 -5
  69. data/assets/javascripts/ckeditor/lang/mk.js +0 -5
  70. data/assets/javascripts/ckeditor/lang/mn.js +0 -5
  71. data/assets/javascripts/ckeditor/lang/ms.js +0 -5
  72. data/assets/javascripts/ckeditor/lang/nb.js +0 -5
  73. data/assets/javascripts/ckeditor/lang/nl.js +0 -5
  74. data/assets/javascripts/ckeditor/lang/no.js +0 -5
  75. data/assets/javascripts/ckeditor/lang/pl.js +0 -5
  76. data/assets/javascripts/ckeditor/lang/pt-br.js +0 -5
  77. data/assets/javascripts/ckeditor/lang/pt.js +0 -5
  78. data/assets/javascripts/ckeditor/lang/ro.js +0 -5
  79. data/assets/javascripts/ckeditor/lang/ru.js +0 -5
  80. data/assets/javascripts/ckeditor/lang/si.js +0 -5
  81. data/assets/javascripts/ckeditor/lang/sk.js +0 -5
  82. data/assets/javascripts/ckeditor/lang/sl.js +0 -5
  83. data/assets/javascripts/ckeditor/lang/sq.js +0 -5
  84. data/assets/javascripts/ckeditor/lang/sr-latn.js +0 -5
  85. data/assets/javascripts/ckeditor/lang/sr.js +0 -5
  86. data/assets/javascripts/ckeditor/lang/sv.js +0 -5
  87. data/assets/javascripts/ckeditor/lang/th.js +0 -5
  88. data/assets/javascripts/ckeditor/lang/tr.js +0 -5
  89. data/assets/javascripts/ckeditor/lang/ug.js +0 -5
  90. data/assets/javascripts/ckeditor/lang/uk.js +0 -5
  91. data/assets/javascripts/ckeditor/lang/vi.js +0 -5
  92. data/assets/javascripts/ckeditor/lang/zh-cn.js +0 -5
  93. data/assets/javascripts/ckeditor/lang/zh.js +0 -5
  94. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +0 -10
  95. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +0 -11
  96. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +0 -11
  97. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +0 -12
  98. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +0 -13
  99. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +0 -11
  100. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +0 -11
  101. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +0 -12
  102. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +0 -13
  103. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +0 -11
  104. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +0 -12
  105. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +0 -12
  106. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +0 -11
  107. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +0 -11
  108. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +0 -12
  109. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +0 -12
  110. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +0 -13
  111. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +0 -12
  112. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +0 -11
  113. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +0 -11
  114. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +0 -11
  115. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +0 -11
  116. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +0 -12
  117. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +0 -11
  118. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +0 -12
  119. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +0 -9
  120. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +0 -11
  121. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +0 -11
  122. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +0 -12
  123. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +0 -11
  124. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +0 -13
  125. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +0 -11
  126. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +0 -11
  127. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +0 -11
  128. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +0 -12
  129. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +0 -11
  130. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +0 -13
  131. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +0 -11
  132. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +0 -12
  133. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +0 -12
  134. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +0 -11
  135. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +0 -10
  136. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +0 -12
  137. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +0 -12
  138. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +0 -11
  139. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +0 -11
  140. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +0 -11
  141. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +0 -12
  142. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +0 -11
  143. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +0 -12
  144. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +0 -11
  145. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +0 -12
  146. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +0 -11
  147. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +0 -9
  148. data/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +0 -10
  149. data/assets/javascripts/ckeditor/plugins/about/dialogs/about.js +0 -7
  150. data/assets/javascripts/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png +0 -0
  151. data/assets/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  152. data/assets/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +0 -11
  153. data/assets/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +0 -4
  154. data/assets/javascripts/ckeditor/plugins/fakeobjects/images/spacer.gif +0 -0
  155. data/assets/javascripts/ckeditor/plugins/icons.png +0 -0
  156. data/assets/javascripts/ckeditor/plugins/icons_hidpi.png +0 -0
  157. data/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +0 -43
  158. data/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
  159. data/assets/javascripts/ckeditor/plugins/link/dialogs/anchor.js +0 -8
  160. data/assets/javascripts/ckeditor/plugins/link/dialogs/link.js +0 -37
  161. data/assets/javascripts/ckeditor/plugins/link/images/anchor.png +0 -0
  162. data/assets/javascripts/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
  163. data/assets/javascripts/ckeditor/plugins/magicline/images/hidpi/icon.png +0 -0
  164. data/assets/javascripts/ckeditor/plugins/magicline/images/icon.png +0 -0
  165. data/assets/javascripts/ckeditor/plugins/pastefromword/filter/default.js +0 -31
  166. data/assets/javascripts/ckeditor/plugins/scayt/LICENSE.md +0 -28
  167. data/assets/javascripts/ckeditor/plugins/scayt/README.md +0 -25
  168. data/assets/javascripts/ckeditor/plugins/scayt/dialogs/options.js +0 -20
  169. data/assets/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +0 -71
  170. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ar.js +0 -13
  171. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/bg.js +0 -13
  172. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ca.js +0 -14
  173. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cs.js +0 -13
  174. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cy.js +0 -14
  175. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/de.js +0 -13
  176. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/el.js +0 -13
  177. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/en.js +0 -13
  178. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/eo.js +0 -12
  179. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/es.js +0 -13
  180. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/et.js +0 -13
  181. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fa.js +0 -12
  182. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fi.js +0 -13
  183. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +0 -10
  184. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr.js +0 -11
  185. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/gl.js +0 -13
  186. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/he.js +0 -12
  187. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hr.js +0 -13
  188. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hu.js +0 -12
  189. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/id.js +0 -13
  190. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/it.js +0 -14
  191. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ja.js +0 -9
  192. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/km.js +0 -13
  193. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ku.js +0 -13
  194. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/lv.js +0 -13
  195. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nb.js +0 -11
  196. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nl.js +0 -13
  197. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/no.js +0 -11
  198. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pl.js +0 -12
  199. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +0 -11
  200. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt.js +0 -13
  201. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ru.js +0 -13
  202. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/si.js +0 -13
  203. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sk.js +0 -13
  204. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sl.js +0 -12
  205. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sq.js +0 -13
  206. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sv.js +0 -11
  207. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/th.js +0 -13
  208. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/tr.js +0 -12
  209. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ug.js +0 -13
  210. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/uk.js +0 -12
  211. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/vi.js +0 -14
  212. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +0 -9
  213. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh.js +0 -12
  214. data/assets/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +0 -14
  215. data/assets/javascripts/ckeditor/plugins/table/dialogs/table.js +0 -21
  216. data/assets/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +0 -16
  217. data/assets/javascripts/ckeditor/skins/moono/dialog.css +0 -5
  218. data/assets/javascripts/ckeditor/skins/moono/dialog_ie.css +0 -5
  219. data/assets/javascripts/ckeditor/skins/moono/dialog_ie7.css +0 -5
  220. data/assets/javascripts/ckeditor/skins/moono/dialog_ie8.css +0 -5
  221. data/assets/javascripts/ckeditor/skins/moono/dialog_iequirks.css +0 -5
  222. data/assets/javascripts/ckeditor/skins/moono/dialog_opera.css +0 -5
  223. data/assets/javascripts/ckeditor/skins/moono/editor.css +0 -5
  224. data/assets/javascripts/ckeditor/skins/moono/editor_gecko.css +0 -5
  225. data/assets/javascripts/ckeditor/skins/moono/editor_ie.css +0 -5
  226. data/assets/javascripts/ckeditor/skins/moono/editor_ie7.css +0 -5
  227. data/assets/javascripts/ckeditor/skins/moono/editor_ie8.css +0 -5
  228. data/assets/javascripts/ckeditor/skins/moono/editor_iequirks.css +0 -5
  229. data/assets/javascripts/ckeditor/skins/moono/icons.png +0 -0
  230. data/assets/javascripts/ckeditor/skins/moono/icons_hidpi.png +0 -0
  231. data/assets/javascripts/ckeditor/skins/moono/images/arrow.png +0 -0
  232. data/assets/javascripts/ckeditor/skins/moono/images/close.png +0 -0
  233. data/assets/javascripts/ckeditor/skins/moono/images/hidpi/close.png +0 -0
  234. data/assets/javascripts/ckeditor/skins/moono/images/hidpi/lock-open.png +0 -0
  235. data/assets/javascripts/ckeditor/skins/moono/images/hidpi/lock.png +0 -0
  236. data/assets/javascripts/ckeditor/skins/moono/images/hidpi/refresh.png +0 -0
  237. data/assets/javascripts/ckeditor/skins/moono/images/lock-open.png +0 -0
  238. data/assets/javascripts/ckeditor/skins/moono/images/lock.png +0 -0
  239. data/assets/javascripts/ckeditor/skins/moono/images/refresh.png +0 -0
  240. data/assets/javascripts/ckeditor/skins/moono/readme.md +0 -51
  241. data/assets/javascripts/ckeditor/styles.js +0 -111
  242. data/assets/javascripts/jquery-3.2.1.min.js +0 -4
  243. data/assets/javascripts/tinymce/license.txt +0 -504
  244. data/assets/javascripts/tinymce/skins/lightgray/content.inline.min.css +0 -1
  245. data/assets/javascripts/tinymce/skins/lightgray/content.min.css +0 -1
  246. data/assets/javascripts/tinymce/skins/lightgray/fonts/readme.md +0 -1
  247. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce-small.eot +0 -0
  248. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce-small.svg +0 -175
  249. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  250. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
  251. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce.eot +0 -0
  252. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce.svg +0 -153
  253. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce.ttf +0 -0
  254. data/assets/javascripts/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
  255. data/assets/javascripts/tinymce/skins/lightgray/img/anchor.gif +0 -0
  256. data/assets/javascripts/tinymce/skins/lightgray/img/loader.gif +0 -0
  257. data/assets/javascripts/tinymce/skins/lightgray/img/object.gif +0 -0
  258. data/assets/javascripts/tinymce/skins/lightgray/img/trans.gif +0 -0
  259. data/assets/javascripts/tinymce/skins/lightgray/skin.classic.min.css +0 -1
  260. data/assets/javascripts/tinymce/skins/lightgray/skin.ie7.min.css +0 -1
  261. data/assets/javascripts/tinymce/skins/lightgray/skin.min.css +0 -1
  262. data/assets/javascripts/tinymce/themes/modern/theme.min.js +0 -1
  263. data/assets/javascripts/tinymce/tinymce.min.js +0 -10
@@ -1,63 +0,0 @@
1
- (function(){var g,aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},k="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this;function l(){l=function(){};k.Symbol||(k.Symbol=ba)}var ca=0;function ba(a){return"jscomp_symbol_"+(a||"")+ca++}
2
- function m(){l();var a=k.Symbol.iterator;a||(a=k.Symbol.iterator=k.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return da(this)}});m=function(){}}function da(a){var b=0;return ea(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})}function ea(a){m();a={next:a};a[k.Symbol.iterator]=function(){return this};return a}function fa(a){m();l();m();var b=a[Symbol.iterator];return b?b.call(a):da(a)}
3
- function n(a){if(!(a instanceof Array)){a=fa(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a}function ha(a,b){function c(){}c.prototype=b.prototype;a.ha=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(b,d);e&&Object.defineProperty(a,d,e)}else a[d]=b[d]}var p=window.Element.prototype,ia=p.matches||p.matchesSelector||p.webkitMatchesSelector||p.mozMatchesSelector||p.msMatchesSelector||p.oMatchesSelector;
4
- function ja(a,b){if(a&&1==a.nodeType&&b){if("string"==typeof b||1==b.nodeType)return a==b||ka(a,b);if("length"in b)for(var c=0,d;d=b[c];c++)if(a==d||ka(a,d))return!0}return!1}function ka(a,b){if("string"!=typeof b)return!1;if(ia)return ia.call(a,b);b=a.parentNode.querySelectorAll(b);for(var c=0,d;d=b[c];c++)if(d==a)return!0;return!1}function la(a){for(var b=[];a&&a.parentNode&&1==a.parentNode.nodeType;)a=a.parentNode,b.push(a);return b}
5
- function q(a,b,c){function d(a){var d;if(h.composed&&"function"==typeof a.composedPath)for(var e=a.composedPath(),f=0,F;F=e[f];f++)1==F.nodeType&&ja(F,b)&&(d=F);else a:{if((d=a.target)&&1==d.nodeType&&b)for(d=[d].concat(la(d)),e=0;f=d[e];e++)if(ja(f,b)){d=f;break a}d=void 0}d&&c.call(d,a,d)}var e=document,h={composed:!0,S:!0},h=void 0===h?{}:h;e.addEventListener(a,d,h.S);return{j:function(){e.removeEventListener(a,d,h.S)}}}
6
- function ma(a){var b={};if(!a||1!=a.nodeType)return b;a=a.attributes;if(!a.length)return{};for(var c=0,d;d=a[c];c++)b[d.name]=d.value;return b}var na=/:(80|443)$/,r=document.createElement("a"),t={};
7
- function u(a){a=a&&"."!=a?a:location.href;if(t[a])return t[a];r.href=a;if("."==a.charAt(0)||"/"==a.charAt(0))return u(r.href);var b="80"==r.port||"443"==r.port?"":r.port,b="0"==b?"":b,c=r.host.replace(na,"");return t[a]={hash:r.hash,host:c,hostname:r.hostname,href:r.href,origin:r.origin?r.origin:r.protocol+"//"+c,pathname:"/"==r.pathname.charAt(0)?r.pathname:"/"+r.pathname,port:b,protocol:r.protocol,search:r.search}}var w=[];
8
- function oa(a,b){var c=this;this.context=a;this.P=b;this.f=(this.c=/Task$/.test(b))?a.get(b):a[b];this.b=[];this.a=[];this.g=function(a){for(var b=[],d=0;d<arguments.length;++d)b[d-0]=arguments[d];return c.a[c.a.length-1].apply(null,[].concat(n(b)))};this.c?a.set(b,this.g):a[b]=this.g}function x(a,b,c){a=pa(a,b);a.b.push(c);qa(a)}function y(a,b,c){a=pa(a,b);c=a.b.indexOf(c);-1<c&&(a.b.splice(c,1),0<a.b.length?qa(a):a.j())}
9
- function qa(a){a.a=[];for(var b,c=0;b=a.b[c];c++){var d=a.a[c-1]||a.f.bind(a.context);a.a.push(b(d))}}oa.prototype.j=function(){var a=w.indexOf(this);-1<a&&(w.splice(a,1),this.c?this.context.set(this.P,this.f):this.context[this.P]=this.f)};function pa(a,b){var c=w.filter(function(c){return c.context==a&&c.P==b})[0];c||(c=new oa(a,b),w.push(c));return c}
10
- function z(a,b,c,d,e,h){if("function"==typeof d){var f=c.get("buildHitTask");return{buildHitTask:function(c){c.set(a,null,!0);c.set(b,null,!0);d(c,e,h);f(c)}}}return A({},a,b)}function B(a,b){var c=ma(a),d={};Object.keys(c).forEach(function(a){if(!a.indexOf(b)&&a!=b+"on"){var e=c[a];"true"==e&&(e=!0);"false"==e&&(e=!1);a=ra(a.slice(b.length));d[a]=e}});return d}
11
- function sa(a){"loading"==document.readyState?document.addEventListener("DOMContentLoaded",function c(){document.removeEventListener("DOMContentLoaded",c);a()}):a()}function ta(a,b){var c;return function(d){for(var e=[],h=0;h<arguments.length;++h)e[h-0]=arguments[h];clearTimeout(c);c=setTimeout(function(){return a.apply(null,[].concat(n(e)))},b)}}function ua(a){function b(){c||(c=!0,a())}var c=!1;setTimeout(b,2E3);return b}var C={};
12
- function va(a,b){function c(){clearTimeout(e.timeout);e.send&&y(a,"send",e.send);delete C[d];e.R.forEach(function(a){return a()})}var d=a.get("trackingId"),e=C[d]=C[d]||{};clearTimeout(e.timeout);e.timeout=setTimeout(c,0);e.R=e.R||[];e.R.push(b);e.send||(e.send=function(a){return function(b){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];c();a.apply(null,[].concat(n(d)))}},x(a,"send",e.send))}
13
- var A=Object.assign||function(a,b){for(var c=[],d=1;d<arguments.length;++d)c[d-1]=arguments[d];for(var d=0,e=c.length;d<e;d++){var h=Object(c[d]),f;for(f in h)Object.prototype.hasOwnProperty.call(h,f)&&(a[f]=h[f])}return a};function ra(a){return a.replace(/[\-\_]+(\w?)/g,function(a,c){return c.toUpperCase()})}function D(a){return"object"==typeof a&&null!==a}var E=function wa(b){return b?(b^16*Math.random()>>b/4).toString(16):"10000000-1000-4000-8000-100000000000".replace(/[018]/g,wa)};
14
- function G(a,b){var c=window.GoogleAnalyticsObject||"ga";window[c]=window[c]||function(a){for(var b=[],d=0;d<arguments.length;++d)b[d-0]=arguments[d];(window[c].q=window[c].q||[]).push(b)};window.gaDevIds=window.gaDevIds||[];0>window.gaDevIds.indexOf("i5iSjo")&&window.gaDevIds.push("i5iSjo");window[c]("provide",a,b);window.gaplugins=window.gaplugins||{};window.gaplugins[a.charAt(0).toUpperCase()+a.slice(1)]=b}var H={T:1,U:2,V:3,X:4,Y:5,Z:6,$:7,aa:8,ba:9,W:10},I=Object.keys(H).length;
15
- function J(a,b){a.set("\x26_av","2.4.1");var c=a.get("\x26_au"),c=parseInt(c||"0",16).toString(2);if(c.length<I)for(var d=I-c.length;d;)c="0"+c,d--;b=I-b;c=c.substr(0,b)+1+c.substr(b+1);a.set("\x26_au",parseInt(c||"0",2).toString(16))}function K(a,b){J(a,H.T);this.a=A({},b);this.g=a;this.b=this.a.stripQuery&&this.a.queryDimensionIndex?"dimension"+this.a.queryDimensionIndex:null;this.f=this.f.bind(this);this.c=this.c.bind(this);x(a,"get",this.f);x(a,"buildHitTask",this.c)}
16
- K.prototype.f=function(a){var b=this;return function(c){if("page"==c||c==b.b){var d={location:a("location"),page:a("page")};return xa(b,d)[c]}return a(c)}};K.prototype.c=function(a){var b=this;return function(c){var d=xa(b,{location:c.get("location"),page:c.get("page")});c.set(d,null,!0);a(c)}};
17
- function xa(a,b){var c=u(b.page||b.location),d=c.pathname;if(a.a.indexFilename){var e=d.split("/");a.a.indexFilename==e[e.length-1]&&(e[e.length-1]="",d=e.join("/"))}"remove"==a.a.trailingSlash?d=d.replace(/\/+$/,""):"add"==a.a.trailingSlash&&(/\.\w+$/.test(d)||"/"==d.substr(-1)||(d+="/"));d={page:d+(a.a.stripQuery?ya(a,c.search):c.search)};b.location&&(d.location=b.location);a.b&&(d[a.b]=c.search.slice(1)||"(not set)");return"function"==typeof a.a.urlFieldsFilter?(b=a.a.urlFieldsFilter(d,u),c={page:b.page,
18
- location:b.location},a.b&&(c[a.b]=b[a.b]),c):d}function ya(a,b){if(Array.isArray(a.a.queryParamsWhitelist)){var c=[];b.slice(1).split("\x26").forEach(function(b){var d=fa(b.split("\x3d"));b=d.next().value;d=d.next().value;-1<a.a.queryParamsWhitelist.indexOf(b)&&d&&c.push([b,d])});return c.length?"?"+c.map(function(a){return a.join("\x3d")}).join("\x26"):""}return""}K.prototype.remove=function(){y(this.g,"get",this.f);y(this.g,"buildHitTask",this.c)};G("cleanUrlTracker",K);
19
- function L(a,b){var c=this;J(a,H.U);if(window.addEventListener){this.a=A({events:["click"],fieldsObj:{},attributePrefix:"ga-"},b);this.f=a;this.c=this.c.bind(this);var d="["+this.a.attributePrefix+"on]";this.b={};this.a.events.forEach(function(a){c.b[a]=q(a,d,c.c)})}}
20
- L.prototype.c=function(a,b){var c=this.a.attributePrefix;if(!(0>b.getAttribute(c+"on").split(/\s*,\s*/).indexOf(a.type))){var c=B(b,c),d=A({},this.a.fieldsObj,c);this.f.send(c.hitType||"event",z({transport:"beacon"},d,this.f,this.a.hitFilter,b,a))}};L.prototype.remove=function(){var a=this;Object.keys(this.b).forEach(function(b){a.b[b].j()})};G("eventTracker",L);
21
- function za(a,b){var c=this;J(a,H.V);window.IntersectionObserver&&window.MutationObserver&&(this.a=A({rootMargin:"0px",fieldsObj:{},attributePrefix:"ga-"},b),this.c=a,this.M=this.M.bind(this),this.O=this.O.bind(this),this.K=this.K.bind(this),this.L=this.L.bind(this),this.b=null,this.items=[],this.i={},this.h={},sa(function(){c.a.elements&&c.observeElements(c.a.elements)}))}g=za.prototype;
22
- g.observeElements=function(a){var b=this;a=M(this,a);this.items=this.items.concat(a.items);this.i=A({},a.i,this.i);this.h=A({},a.h,this.h);a.items.forEach(function(a){var c=b.h[a.threshold]=b.h[a.threshold]||new IntersectionObserver(b.O,{rootMargin:b.a.rootMargin,threshold:[+a.threshold]});(a=b.i[a.id]||(b.i[a.id]=document.getElementById(a.id)))&&c.observe(a)});this.b||(this.b=new MutationObserver(this.M),this.b.observe(document.body,{childList:!0,subtree:!0}));requestAnimationFrame(function(){})};
23
- g.unobserveElements=function(a){var b=[],c=[];this.items.forEach(function(d){a.some(function(a){a=Aa(a);return a.id===d.id&&a.threshold===d.threshold&&a.trackFirstImpressionOnly===d.trackFirstImpressionOnly})?c.push(d):b.push(d)});if(b.length){var d=M(this,b),e=M(this,c);this.items=d.items;this.i=d.i;this.h=d.h;c.forEach(function(a){if(!d.i[a.id]){var b=e.h[a.threshold],c=e.i[a.id];c&&b.unobserve(c);d.h[a.threshold]||e.h[a.threshold].disconnect()}})}else this.unobserveAllElements()};
24
- g.unobserveAllElements=function(){var a=this;Object.keys(this.h).forEach(function(b){a.h[b].disconnect()});this.b.disconnect();this.b=null;this.items=[];this.i={};this.h={}};function M(a,b){var c=[],d={},e={};b.length&&b.forEach(function(b){b=Aa(b);c.push(b);e[b.id]=a.i[b.id]||null;d[b.threshold]=a.h[b.threshold]||null});return{items:c,i:e,h:d}}g.M=function(a){for(var b=0,c;c=a[b];b++){for(var d=0,e;e=c.removedNodes[d];d++)N(this,e,this.L);for(d=0;e=c.addedNodes[d];d++)N(this,e,this.K)}};
25
- function N(a,b,c){1==b.nodeType&&b.id in a.i&&c(b.id);for(var d=0,e;e=b.childNodes[d];d++)N(a,e,c)}
26
- g.O=function(a){for(var b=[],c=0,d;d=a[c];c++)for(var e=0,h;h=this.items[e];e++){var f;if(f=d.target.id===h.id)(f=h.threshold)?f=d.intersectionRatio>=f:(f=d.intersectionRect,f=0<f.top||0<f.bottom||0<f.left||0<f.right);if(f){var v=h.id;f=document.getElementById(v);var v={transport:"beacon",eventCategory:"Viewport",eventAction:"impression",eventLabel:v,nonInteraction:!0},Na=A({},this.a.fieldsObj,B(f,this.a.attributePrefix));this.c.send("event",z(v,Na,this.c,this.a.hitFilter,f));h.trackFirstImpressionOnly&&
27
- b.push(h)}}b.length&&this.unobserveElements(b)};g.K=function(a){var b=this,c=this.i[a]=document.getElementById(a);this.items.forEach(function(d){a==d.id&&b.h[d.threshold].observe(c)})};g.L=function(a){var b=this,c=this.i[a];this.items.forEach(function(d){a==d.id&&b.h[d.threshold].unobserve(c)});this.i[a]=null};g.remove=function(){this.unobserveAllElements()};G("impressionTracker",za);function Aa(a){"string"==typeof a&&(a={id:a});return A({threshold:0,trackFirstImpressionOnly:!0},a)}
28
- function Ba(){this.a={}}function Ca(a,b){(a.a.externalSet=a.a.externalSet||[]).push(b)}Ba.prototype.ca=function(a,b){for(var c=[],d=1;d<arguments.length;++d)c[d-1]=arguments[d];(this.a[a]=this.a[a]||[]).forEach(function(a){return a.apply(null,[].concat(n(c)))})};var O={},P=!1,Q;function R(a,b){b=void 0===b?{}:b;this.a={};this.b=a;this.w=b;this.l=null}ha(R,Ba);function S(a,b,c){a=["autotrack",a,b].join(":");O[a]||(O[a]=new R(a,c),P||(window.addEventListener("storage",Da),P=!0));return O[a]}
29
- function Ea(){if(null!=Q)return Q;try{window.localStorage.setItem("autotrack","autotrack"),window.localStorage.removeItem("autotrack"),Q=!0}catch(a){Q=!1}return Q}R.prototype.get=function(){if(this.l)return this.l;if(Ea())try{this.l=Fa(window.localStorage.getItem(this.b))}catch(a){}return this.l=A({},this.w,this.l)};R.prototype.set=function(a){this.l=A({},this.w,this.l,a);if(Ea())try{var b=JSON.stringify(this.l);window.localStorage.setItem(this.b,b)}catch(c){}};
30
- function Ga(a){a.l={};if(Ea())try{window.localStorage.removeItem(a.b)}catch(b){}}R.prototype.j=function(){delete O[this.b];Object.keys(O).length||(window.removeEventListener("storage",Da),P=!1)};function Da(a){var b=O[a.key];if(b){var c=A({},b.w,Fa(a.oldValue));a=A({},b.w,Fa(a.newValue));b.l=a;b.ca("externalSet",a,c)}}function Fa(a){var b={};if(a)try{b=JSON.parse(a)}catch(c){}return b}var T={};
31
- function U(a,b,c){this.f=a;this.timeout=b||Ha;this.timeZone=c;this.b=this.b.bind(this);x(a,"sendHitTask",this.b);try{this.c=new Intl.DateTimeFormat("en-US",{timeZone:this.timeZone})}catch(d){}this.a=S(a.get("trackingId"),"session",{hitTime:0,isExpired:!1});this.a.get().id||this.a.set({id:E()})}function Ia(a,b,c){var d=a.get("trackingId");return T[d]?T[d]:T[d]=new U(a,b,c)}function V(a){return a.a.get().id}
32
- U.prototype.isExpired=function(a){a=void 0===a?V(this):a;if(a!=V(this))return!0;a=this.a.get();if(a.isExpired)return!0;var b=a.hitTime;return b&&(a=new Date,b=new Date(b),a-b>6E4*this.timeout||this.c&&this.c.format(a)!=this.c.format(b))?!0:!1};U.prototype.b=function(a){var b=this;return function(c){a(c);var d=c.get("sessionControl");c="start"==d||b.isExpired();var d="end"==d,e=b.a.get();e.hitTime=+new Date;c&&(e.isExpired=!1,e.id=E());d&&(e.isExpired=!0);b.a.set(e)}};
33
- U.prototype.j=function(){y(this.f,"sendHitTask",this.b);this.a.j();delete T[this.f.get("trackingId")]};var Ha=30;function W(a,b){J(a,H.W);window.addEventListener&&(this.b=A({increaseThreshold:20,sessionTimeout:Ha,fieldsObj:{}},b),this.f=a,this.c=Ja(this),this.g=ta(this.g.bind(this),500),this.o=this.o.bind(this),this.a=S(a.get("trackingId"),"plugins/max-scroll-tracker"),this.m=Ia(a,this.b.sessionTimeout,this.b.timeZone),x(a,"set",this.o),Ka(this))}
34
- function Ka(a){100>(a.a.get()[a.c]||0)&&window.addEventListener("scroll",a.g)}
35
- W.prototype.g=function(){var a=document.documentElement,b=document.body,a=Math.min(100,Math.max(0,Math.round(window.pageYOffset/(Math.max(a.offsetHeight,a.scrollHeight,b.offsetHeight,b.scrollHeight)-window.innerHeight)*100))),b=V(this.m);b!=this.a.get().sessionId&&(Ga(this.a),this.a.set({sessionId:b}));if(this.m.isExpired(this.a.get().sessionId))Ga(this.a);else if(b=this.a.get()[this.c]||0,a>b&&(100!=a&&100!=b||window.removeEventListener("scroll",this.g),b=a-b,100==a||b>=this.b.increaseThreshold)){var c=
36
- {};this.a.set((c[this.c]=a,c.sessionId=V(this.m),c));a={transport:"beacon",eventCategory:"Max Scroll",eventAction:"increase",eventValue:b,eventLabel:String(a),nonInteraction:!0};this.b.maxScrollMetricIndex&&(a["metric"+this.b.maxScrollMetricIndex]=b);this.f.send("event",z(a,this.b.fieldsObj,this.f,this.b.hitFilter))}};W.prototype.o=function(a){var b=this;return function(c,d){a(c,d);var e={};(D(c)?c:(e[c]=d,e)).page&&(c=b.c,b.c=Ja(b),b.c!=c&&Ka(b))}};
37
- function Ja(a){a=u(a.f.get("page")||a.f.get("location"));return a.pathname+a.search}W.prototype.remove=function(){this.m.j();window.removeEventListener("scroll",this.g);y(this.f,"set",this.o)};G("maxScrollTracker",W);var La={};function Ma(a,b){J(a,H.X);window.matchMedia&&(this.a=A({changeTemplate:this.changeTemplate,changeTimeout:1E3,fieldsObj:{}},b),D(this.a.definitions)&&(b=this.a.definitions,this.a.definitions=Array.isArray(b)?b:[b],this.b=a,this.c=[],Oa(this)))}
38
- function Oa(a){a.a.definitions.forEach(function(b){if(b.name&&b.dimensionIndex){var c=Pa(b);a.b.set("dimension"+b.dimensionIndex,c);Qa(a,b)}})}function Pa(a){var b;a.items.forEach(function(a){Ra(a.media).matches&&(b=a)});return b?b.name:"(not set)"}
39
- function Qa(a,b){b.items.forEach(function(c){c=Ra(c.media);var d=ta(function(){var c=Pa(b),d=a.b.get("dimension"+b.dimensionIndex);c!==d&&(a.b.set("dimension"+b.dimensionIndex,c),c={transport:"beacon",eventCategory:b.name,eventAction:"change",eventLabel:a.a.changeTemplate(d,c),nonInteraction:!0},a.b.send("event",z(c,a.a.fieldsObj,a.b,a.a.hitFilter)))},a.a.changeTimeout);c.addListener(d);a.c.push({fa:c,da:d})})}Ma.prototype.remove=function(){for(var a=0,b;b=this.c[a];a++)b.fa.removeListener(b.da)};
40
- Ma.prototype.changeTemplate=function(a,b){return a+" \x3d\x3e "+b};G("mediaQueryTracker",Ma);function Ra(a){return La[a]||(La[a]=window.matchMedia(a))}function X(a,b){J(a,H.Y);window.addEventListener&&(this.a=A({formSelector:"form",shouldTrackOutboundForm:this.shouldTrackOutboundForm,fieldsObj:{},attributePrefix:"ga-"},b),this.b=a,this.c=q("submit",this.a.formSelector,this.f.bind(this)))}
41
- X.prototype.f=function(a,b){var c={transport:"beacon",eventCategory:"Outbound Form",eventAction:"submit",eventLabel:u(b.action).href};if(this.a.shouldTrackOutboundForm(b,u)){navigator.sendBeacon||(a.preventDefault(),c.hitCallback=ua(function(){b.submit()}));var d=A({},this.a.fieldsObj,B(b,this.a.attributePrefix));this.b.send("event",z(c,d,this.b,this.a.hitFilter,b,a))}};
42
- X.prototype.shouldTrackOutboundForm=function(a,b){a=b(a.action);return a.hostname!=location.hostname&&"http"==a.protocol.slice(0,4)};X.prototype.remove=function(){this.c.j()};G("outboundFormTracker",X);
43
- function Y(a,b){var c=this;J(a,H.Z);window.addEventListener&&(this.a=A({events:["click"],linkSelector:"a, area",shouldTrackOutboundLink:this.shouldTrackOutboundLink,fieldsObj:{},attributePrefix:"ga-"},b),this.c=a,this.f=this.f.bind(this),this.b={},this.a.events.forEach(function(a){c.b[a]=q(a,c.a.linkSelector,c.f)}))}
44
- Y.prototype.f=function(a,b){var c=this;if(this.a.shouldTrackOutboundLink(b,u)){var d=b.getAttribute("href")||b.getAttribute("xlink:href"),e=u(d),e={transport:"beacon",eventCategory:"Outbound Link",eventAction:a.type,eventLabel:e.href},h=A({},this.a.fieldsObj,B(b,this.a.attributePrefix)),f=z(e,h,this.c,this.a.hitFilter,b,a);if(navigator.sendBeacon||"click"!=a.type||"_blank"==b.target||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||1<a.which)this.c.send("event",f);else{var v=function(){window.removeEventListener("click",
45
- v);if(!a.defaultPrevented){a.preventDefault();var b=f.hitCallback;f.hitCallback=ua(function(){"function"==typeof b&&b();location.href=d})}c.c.send("event",f)};window.addEventListener("click",v)}}};Y.prototype.shouldTrackOutboundLink=function(a,b){a=a.getAttribute("href")||a.getAttribute("xlink:href");b=b(a);return b.hostname!=location.hostname&&"http"==b.protocol.slice(0,4)};Y.prototype.remove=function(){var a=this;Object.keys(this.b).forEach(function(b){a.b[b].j()})};G("outboundLinkTracker",Y);
46
- var Z=E();
47
- function Sa(a,b){var c=this;J(a,H.$);document.visibilityState&&(this.a=A({sessionTimeout:Ha,visibleThreshold:5E3,sendInitialPageview:!1,fieldsObj:{}},b),this.b=a,this.g=document.visibilityState,this.m=null,this.o=!1,this.v=this.v.bind(this),this.s=this.s.bind(this),this.G=this.G.bind(this),this.N=this.N.bind(this),this.c=S(a.get("trackingId"),"plugins/page-visibility-tracker"),Ca(this.c,this.N),this.f=Ia(a,this.a.sessionTimeout,this.a.timeZone),x(a,"set",this.v),window.addEventListener("unload",this.G),
48
- document.addEventListener("visibilitychange",this.s),va(this.b,function(){if("visible"==document.visibilityState)c.a.sendInitialPageview&&(Ta(c,{ea:!0}),c.o=!0),c.c.set({time:+new Date,state:"visible",pageId:Z,sessionId:V(c.f)});else if(c.a.sendInitialPageview&&c.a.pageLoadsMetricIndex){var a={},a=(a.transport="beacon",a.eventCategory="Page Visibility",a.eventAction="page load",a.eventLabel="(not set)",a["metric"+c.a.pageLoadsMetricIndex]=1,a.nonInteraction=!0,a);c.b.send("event",z(a,c.a.fieldsObj,
49
- c.b,c.a.hitFilter))}}))}g=Sa.prototype;
50
- g.s=function(){var a=this;if("visible"==document.visibilityState||"hidden"==document.visibilityState){var b=Ua(this),c={time:+new Date,state:document.visibilityState,pageId:Z,sessionId:V(this.f)};"visible"==document.visibilityState&&this.a.sendInitialPageview&&!this.o&&(Ta(this),this.o=!0);"hidden"==document.visibilityState&&this.m&&clearTimeout(this.m);this.f.isExpired(b.sessionId)?(Ga(this.c),"hidden"==this.g&&"visible"==document.visibilityState&&(clearTimeout(this.m),this.m=setTimeout(function(){a.c.set(c);
51
- Ta(a,{hitTime:c.time})},this.a.visibleThreshold))):(b.pageId==Z&&"visible"==b.state&&Va(this,b),this.c.set(c));this.g=document.visibilityState}};function Ua(a){var b=a.c.get();"visible"==a.g&&"hidden"==b.state&&b.pageId!=Z&&(b.state="visible",b.pageId=Z,a.c.set(b));return b}
52
- function Va(a,b,c){c=(c?c:{}).hitTime;var d={hitTime:c},d=(d?d:{}).hitTime;(b=b.time?(d||+new Date)-b.time:0)&&b>=a.a.visibleThreshold&&(b=Math.round(b/1E3),d={transport:"beacon",nonInteraction:!0,eventCategory:"Page Visibility",eventAction:"track",eventValue:b,eventLabel:"(not set)"},c&&(d.queueTime=+new Date-c),a.a.visibleMetricIndex&&(d["metric"+a.a.visibleMetricIndex]=b),a.b.send("event",z(d,a.a.fieldsObj,a.b,a.a.hitFilter)))}
53
- function Ta(a,b){var c=b?b:{};b=c.hitTime;var c=c.ea,d={transport:"beacon"};b&&(d.queueTime=+new Date-b);c&&a.a.pageLoadsMetricIndex&&(d["metric"+a.a.pageLoadsMetricIndex]=1);a.b.send("pageview",z(d,a.a.fieldsObj,a.b,a.a.hitFilter))}g.v=function(a){var b=this;return function(c,d){var e={},e=D(c)?c:(e[c]=d,e);e.page&&e.page!==b.b.get("page")&&"visible"==b.g&&b.s();a(c,d)}};g.N=function(a,b){a.time!=b.time&&(b.pageId!=Z||"visible"!=b.state||this.f.isExpired(b.sessionId)||Va(this,b,{hitTime:a.time}))};
54
- g.G=function(){"hidden"!=this.g&&this.s()};g.remove=function(){this.c.j();this.f.j();y(this.b,"set",this.v);window.removeEventListener("unload",this.G);document.removeEventListener("visibilitychange",this.s)};G("pageVisibilityTracker",Sa);
55
- function Wa(a,b){J(a,H.aa);window.addEventListener&&(this.a=A({fieldsObj:{},hitFilter:null},b),this.b=a,this.u=this.u.bind(this),this.J=this.J.bind(this),this.D=this.D.bind(this),this.A=this.A.bind(this),this.B=this.B.bind(this),this.F=this.F.bind(this),"complete"!=document.readyState?window.addEventListener("load",this.u):this.u())}g=Wa.prototype;
56
- g.u=function(){if(window.FB)try{window.FB.Event.subscribe("edge.create",this.B),window.FB.Event.subscribe("edge.remove",this.F)}catch(a){}window.twttr&&this.J()};g.J=function(){var a=this;try{window.twttr.ready(function(){window.twttr.events.bind("tweet",a.D);window.twttr.events.bind("follow",a.A)})}catch(b){}};function Xa(a){try{window.twttr.ready(function(){window.twttr.events.unbind("tweet",a.D);window.twttr.events.unbind("follow",a.A)})}catch(b){}}
57
- g.D=function(a){if("tweet"==a.region){var b={transport:"beacon",socialNetwork:"Twitter",socialAction:"tweet",socialTarget:a.data.url||a.target.getAttribute("data-url")||location.href};this.b.send("social",z(b,this.a.fieldsObj,this.b,this.a.hitFilter,a.target,a))}};
58
- g.A=function(a){if("follow"==a.region){var b={transport:"beacon",socialNetwork:"Twitter",socialAction:"follow",socialTarget:a.data.screen_name||a.target.getAttribute("data-screen-name")};this.b.send("social",z(b,this.a.fieldsObj,this.b,this.a.hitFilter,a.target,a))}};g.B=function(a){this.b.send("social",z({transport:"beacon",socialNetwork:"Facebook",socialAction:"like",socialTarget:a},this.a.fieldsObj,this.b,this.a.hitFilter))};
59
- g.F=function(a){this.b.send("social",z({transport:"beacon",socialNetwork:"Facebook",socialAction:"unlike",socialTarget:a},this.a.fieldsObj,this.b,this.a.hitFilter))};g.remove=function(){window.removeEventListener("load",this.u);try{window.FB.Event.unsubscribe("edge.create",this.B),window.FB.Event.unsubscribe("edge.remove",this.F)}catch(a){}Xa(this)};G("socialWidgetTracker",Wa);
60
- function Ya(a,b){J(a,H.ba);history.pushState&&window.addEventListener&&(this.a=A({shouldTrackUrlChange:this.shouldTrackUrlChange,trackReplaceState:!1,fieldsObj:{},hitFilter:null},b),this.b=a,this.c=location.pathname+location.search,this.H=this.H.bind(this),this.I=this.I.bind(this),this.C=this.C.bind(this),x(history,"pushState",this.H),x(history,"replaceState",this.I),window.addEventListener("popstate",this.C))}g=Ya.prototype;
61
- g.H=function(a){var b=this;return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];a.apply(null,[].concat(n(d)));Za(b,!0)}};g.I=function(a){var b=this;return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];a.apply(null,[].concat(n(d)));Za(b,!1)}};g.C=function(){Za(this,!0)};
62
- function Za(a,b){setTimeout(function(){var c=a.c,d=location.pathname+location.search;c!=d&&a.a.shouldTrackUrlChange.call(a,d,c)&&(a.c=d,a.b.set({page:d,title:document.title}),(b||a.a.trackReplaceState)&&a.b.send("pageview",z({transport:"beacon"},a.a.fieldsObj,a.b,a.a.hitFilter)))},0)}g.shouldTrackUrlChange=function(a,b){return!(!a||!b)};g.remove=function(){y(history,"pushState",this.H);y(history,"replaceState",this.I);window.removeEventListener("popstate",this.C)};G("urlChangeTracker",Ya);})();
63
- //# sourceMappingURL=autotrack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["node_modules/dom-utils/lib/matches.js"," [synthetic:util/defineproperty] "," [synthetic:util/global] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterable] "," [synthetic:es6/util/arrayfromiterator] "," [synthetic:es6/util/inherits] ","node_modules/dom-utils/lib/parents.js","node_modules/dom-utils/lib/delegate.js","node_modules/dom-utils/lib/closest.js","lib/plugins/event-tracker.js","node_modules/dom-utils/lib/get-attributes.js","node_modules/dom-utils/lib/parse-url.js","lib/method-chain.js","lib/utilities.js","lib/provide.js","lib/constants.js","lib/usage.js","lib/plugins/clean-url-tracker.js","lib/plugins/impression-tracker.js","lib/event-emitter.js","lib/store.js","lib/session.js","lib/plugins/max-scroll-tracker.js","lib/plugins/media-query-tracker.js","lib/plugins/outbound-form-tracker.js","lib/plugins/outbound-link-tracker.js","lib/plugins/page-visibility-tracker.js","lib/plugins/social-widget-tracker.js","lib/plugins/url-change-tracker.js"],"names":["$jscomp.defineProperty","$jscomp.global","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.symbolCounter_","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIterator","$jscomp.initSymbolIterator","$jscomp.iteratorPrototype","proto","window","Element","prototype","nativeMatches","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","element","test","nodeType","i","item","selector","call","nodes","parentNode","querySelectorAll","node","parents","list","push","delegate","eventType","callback","listener","event","delegateTarget","opts","composed","composedPath","target","parentElements","concat","parent","document","useCapture","ancestor","addEventListener","destroy","removeEventListener","getAttributes","attrs","map","attributes","length","attr","name","value","DEFAULT_PORT","a","createElement","cache","parseUrl","url","location","href","charAt","port","HTTP_PORT","HTTPS_PORT","host","replace","hash","hostname","origin","protocol","pathname","search","instances","constructor","MethodChain","context","methodName","originalMethodReference","isTask","get","methodChain","boundMethodChain","wrappedMethod","this.wrappedMethod","lastBoundMethod","$jscomp.arrayFromIterable","args","set","add","methodOverride","getOrCreateMethodChain","rebindMethodChain","remove","index","indexOf","splice","method","previousMethod","bind","filter","h","createFieldsObj","defaultFields","userFields","tracker","hitFilter","originalBuildHitTask","buildHitTask","model","assign","getAttributeFields","prefix","attributeFields","Object","keys","forEach","attribute","field","camelCase","slice","domReady","readyState","fn","debounce","wait","timeout","clearTimeout","setTimeout","withTimeout","called","queueMap","deferUntilPluginsLoaded","processQueue","ref","send","MethodChain.remove","trackingId","queue","ref.send","originalMethod","MethodChain.add","len","sources","source","key","hasOwnProperty","str","match","p1","toUpperCase","isObject","uuid","b","toString","Math","random","provide","pluginName","pluginConstructor","gaAlias","GoogleAnalyticsObject","q","gaDevIds","DEV_ID","gaplugins","plugins","CLEAN_URL_TRACKER","EVENT_TRACKER","IMPRESSION_TRACKER","MEDIA_QUERY_TRACKER","OUTBOUND_FORM_TRACKER","OUTBOUND_LINK_TRACKER","PAGE_VISIBILITY_TRACKER","SOCIAL_WIDGET_TRACKER","URL_CHANGE_TRACKER","MAX_SCROLL_TRACKER","PLUGIN_COUNT","trackUsage","plugin","VERSION","usageHex","parseInt","toAdd","usageBin","substr","CleanUrlTracker","defaultOpts","queryDimension","stripQuery","queryDimensionIndex","trackerGetOverride","buildHitTaskOverride","fieldsObj","page","cleanUrlFields","cleanedFieldsObj","indexFilename","parts","split","join","trailingSlash","isFilename","stripNonWhitelistedQueryParams","NULL_DIMENSION","urlFieldsFilter","userCleanedFieldsObj","returnValue","searchString","Array","isArray","queryParamsWhitelist","foundParams","kv","$jscomp.makeIterator","EventTracker","events","attributePrefix","handleEvents","delegates","getAttribute","type","hitType","transport","ImpressionTracker","IntersectionObserver","MutationObserver","defaultOptions","rootMargin","handleDomMutations","handleIntersectionChanges","handleDomElementAdded","handleDomElementRemoved","mutationObserver","items","elementMap","thresholdMap","elements","observeElements","ImpressionTracker.prototype","?.prototype","data","deriveDataFromElements","observer","threshold","id","getElementById","observe","body","childList","subtree","requestAnimationFrame","unobserveElements","itemsToKeep","itemsToRemove","some","itemInItems","itemToRemove","getItemFromElement","trackFirstImpressionOnly","dataToKeep","dataToRemove","unobserve","disconnect","unobserveAllElements","mutations","mutation","k","removedEl","removedNodes","walkNodeTree","j","addedEl","addedNodes","child","childNodes","records","record","intersectionRatio","intersectionRect","top","bottom","left","right","eventCategory","eventAction","eventLabel","nonInteraction","handleImpression","EventEmitter","registry_","on","getRegistry_","emit","isListening","browserSupportsLocalStorage","Store","defaults","key_","defaults_","cache_","$jscomp.inherits","getOrCreate","namespace","AUTOTRACK_PREFIX","storageListener","isSupported_","localStorage","setItem","removeItem","err","Store.isSupported_","parse","getItem","newData","JSON","stringify","clear","store","oldData","oldValue","newValue","Session","timeZone","Session.DEFAULT_TIMEOUT","sendHitTaskOverride","dateTimeFormatter","Intl","DateTimeFormat","Store.getOrCreate","defaultProps","hitTime","isExpired","getId","sessionData","oldHitTime","currentDate","Date","oldHitDate","MINUTES","datesAreDifferentInTimezone","format","sessionControl","sessionWillStart","sessionWillEnd","MaxScrollTracker","increaseThreshold","sessionTimeout","pagePath","getPagePath","handleScroll","trackerSetOverride","session","Session.getOrCreate","listenForMaxScrollChanges","getMaxScrollPercentageForCurrentPage","html","documentElement","scrollPercentage","min","max","round","pageYOffset","pageHeight","offsetHeight","scrollHeight","innerHeight","sessionId","maxScrollPercentage","stopListeningForMaxScrollChanges","increaseAmount","setMaxScrollPercentageForCurrentPage","eventValue","String","sendMaxScrollEvent","maxScrollMetricIndex","fields","lastPagePath","mediaMap","MediaQueryTracker","matchMedia","changeTemplate","changeTimeout","definitions","changeListeners","processMediaQueries","definition","dimensionIndex","mediaName","getMatchName","addChangeListeners","getMediaList","media","mql","handleChanges","addListener","removeListener","OutboundFormTracker","formSelector","shouldTrackOutboundForm","handleFormSubmits","form","action","navigator","sendBeacon","preventDefault","hitCallback","submit","parseUrlFn","OutboundLinkTracker","linkSelector","shouldTrackOutboundLink","handleLinkInteractions","link","metaKey","ctrlKey","shiftKey","altKey","which","clickHandler","defaultPrevented","oldHitCallback","PAGE_ID","PageVisibilityTracker","visibilityState","visibleThreshold","sendInitialPageview","lastPageState","visibleThresholdTimeout_","isInitialPageviewSent_","handleChange","handleWindowUnload","handleExternalStoreSet","VISIBLE","sendPageview","isPageLoad","time","state","pageId","pageLoadsMetricIndex","sendPageLoad","PageVisibilityTracker.prototype","HIDDEN","lastStoredChange","getAndValidateChangeData","change","sendPageVisibilityEvent","delta","deltaInSeconds","SECONDS$1","queueTime","visibleMetricIndex","PageVisibilityTracker_prototype$trackerSetOverride","SocialWidgetTracker","addWidgetListeners","addTwitterEventHandlers","handleTweetEvents","handleFollowEvents","handleLikeEvents","handleUnlikeEvents","SocialWidgetTracker.prototype","FB","Event","subscribe","addFacebookEventHandlers","twttr","ready","removeTwitterEventHandlers","unbind","region","socialNetwork","socialAction","socialTarget","screen_name","unsubscribe","removeFacebookEventHandlers","UrlChangeTracker","history","pushState","shouldTrackUrlChange","trackReplaceState","path","pushStateOverride","replaceStateOverride","handlePopState","UrlChangeTracker.prototype","handleUrlChange","historyDidUpdate","oldPath","newPath","title"],"mappings":"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","file":"","sourcesContent":["const proto = window.Element.prototype;\nconst nativeMatches = proto.matches ||\n proto.matchesSelector ||\n proto.webkitMatchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector;\n\n\n/**\n * Tests if a DOM elements matches any of the test DOM elements or selectors.\n * @param {Element} element The DOM element to test.\n * @param {Element|string|Array<Element|string>} test A DOM element, a CSS\n * selector, or an array of DOM elements or CSS selectors to match against.\n * @return {boolean} True of any part of the test matches.\n */\nexport default function matches(element, test) {\n // Validate input.\n if (element && element.nodeType == 1 && test) {\n // if test is a string or DOM element test it.\n if (typeof test == 'string' || test.nodeType == 1) {\n return element == test ||\n matchesSelector(element, /** @type {string} */ (test));\n } else if ('length' in test) {\n // if it has a length property iterate over the items\n // and return true if any match.\n for (let i = 0, item; item = test[i]; i++) {\n if (element == item || matchesSelector(element, item)) return true;\n }\n }\n }\n // Still here? Return false\n return false;\n}\n\n\n/**\n * Tests whether a DOM element matches a selector. This polyfills the native\n * Element.prototype.matches method across browsers.\n * @param {!Element} element The DOM element to test.\n * @param {string} selector The CSS selector to test element against.\n * @return {boolean} True if the selector matches.\n */\nfunction matchesSelector(element, selector) {\n if (typeof selector != 'string') return false;\n if (nativeMatches) return nativeMatches.call(element, selector);\n const nodes = element.parentNode.querySelectorAll(selector);\n for (let i = 0, node; node = nodes[i]; i++) {\n if (node == element) return true;\n }\n return false;\n}\n",null,null,null,null,null,null,null,"/**\n * Returns an array of a DOM element's parent elements.\n * @param {!Element} element The DOM element whose parents to get.\n * @return {!Array} An array of all parent elemets, or an empty array if no\n * parent elements are found.\n */\nexport default function parents(element) {\n const list = [];\n while (element && element.parentNode && element.parentNode.nodeType == 1) {\n element = /** @type {!Element} */ (element.parentNode);\n list.push(element);\n }\n return list;\n}\n","import closest from './closest';\nimport matches from './matches';\n\n/**\n * Delegates the handling of events for an element matching a selector to an\n * ancestor of the matching element.\n * @param {!Node} ancestor The ancestor element to add the listener to.\n * @param {string} eventType The event type to listen to.\n * @param {string} selector A CSS selector to match against child elements.\n * @param {!Function} callback A function to run any time the event happens.\n * @param {Object=} opts A configuration options object. The available options:\n * - useCapture<boolean>: If true, bind to the event capture phase.\n * - deep<boolean>: If true, delegate into shadow trees.\n * @return {Object} The delegate object. It contains a destroy method.\n */\nexport default function delegate(\n ancestor, eventType, selector, callback, opts = {}) {\n // Defines the event listener.\n const listener = function(event) {\n let delegateTarget;\n\n // If opts.composed is true and the event originated from inside a Shadow\n // tree, check the composed path nodes.\n if (opts.composed && typeof event.composedPath == 'function') {\n const composedPath = event.composedPath();\n for (let i = 0, node; node = composedPath[i]; i++) {\n if (node.nodeType == 1 && matches(node, selector)) {\n delegateTarget = node;\n }\n }\n } else {\n // Otherwise check the parents.\n delegateTarget = closest(event.target, selector, true);\n }\n\n if (delegateTarget) {\n callback.call(delegateTarget, event, delegateTarget);\n }\n };\n\n ancestor.addEventListener(eventType, listener, opts.useCapture);\n\n return {\n destroy: function() {\n ancestor.removeEventListener(eventType, listener, opts.useCapture);\n },\n };\n}\n","import matches from './matches';\nimport parents from './parents';\n\n/**\n * Gets the closest parent element that matches the passed selector.\n * @param {Element} element The element whose parents to check.\n * @param {string} selector The CSS selector to match against.\n * @param {boolean=} shouldCheckSelf True if the selector should test against\n * the passed element itself.\n * @return {Element|undefined} The matching element or undefined.\n */\nexport default function closest(element, selector, shouldCheckSelf = false) {\n if (!(element && element.nodeType == 1 && selector)) return;\n const parentElements =\n (shouldCheckSelf ? [element] : []).concat(parents(element));\n\n for (let i = 0, parent; parent = parentElements[i]; i++) {\n if (matches(parent, selector)) return parent;\n }\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {delegate} from 'dom-utils';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj, getAttributeFields} from '../utilities';\n\n\n/**\n * Class for the `eventTracker` analytics.js plugin.\n * @implements {EventTrackerPublicInterface}\n */\nclass EventTracker {\n /**\n * Registers declarative event tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?EventTrackerOpts} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.EVENT_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {EventTrackerOpts} */\n const defaultOpts = {\n events: ['click'],\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined,\n };\n\n this.opts = /** @type {EventTrackerOpts} */ (assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Binds methods.\n this.handleEvents = this.handleEvents.bind(this);\n\n const selector = '[' + this.opts.attributePrefix + 'on]';\n\n // Creates a mapping of events to their delegates\n this.delegates = {};\n this.opts.events.forEach((event) => {\n this.delegates[event] = delegate(document, event, selector,\n this.handleEvents, {composed: true, useCapture: true});\n });\n }\n\n /**\n * Handles all events on elements with event attributes.\n * @param {Event} event The DOM click event.\n * @param {Element} element The delegated DOM element target.\n */\n handleEvents(event, element) {\n const prefix = this.opts.attributePrefix;\n const events = element.getAttribute(prefix + 'on').split(/\\s*,\\s*/);\n\n // Ensures the type matches one of the events specified on the element.\n if (events.indexOf(event.type) < 0) return;\n\n /** @type {FieldsObj} */\n const defaultFields = {transport: 'beacon'};\n const attributeFields = getAttributeFields(element, prefix);\n const userFields = assign({}, this.opts.fieldsObj, attributeFields);\n const hitType = attributeFields.hitType || 'event';\n\n this.tracker.send(hitType, createFieldsObj(defaultFields,\n userFields, this.tracker, this.opts.hitFilter, element, event));\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n Object.keys(this.delegates).forEach((key) => {\n this.delegates[key].destroy();\n });\n }\n}\n\n\nprovide('eventTracker', EventTracker);\n","/**\n * Gets all attributes of an element as a plain JavaScriot object.\n * @param {Element} element The element whose attributes to get.\n * @return {!Object} An object whose keys are the attribute keys and whose\n * values are the attribute values. If no attributes exist, an empty\n * object is returned.\n */\nexport default function getAttributes(element) {\n const attrs = {};\n\n // Validate input.\n if (!(element && element.nodeType == 1)) return attrs;\n\n // Return an empty object if there are no attributes.\n const map = element.attributes;\n if (map.length === 0) return {};\n\n for (let i = 0, attr; attr = map[i]; i++) {\n attrs[attr.name] = attr.value;\n }\n return attrs;\n}\n","const HTTP_PORT = '80';\nconst HTTPS_PORT = '443';\nconst DEFAULT_PORT = RegExp(':(' + HTTP_PORT + '|' + HTTPS_PORT + ')$');\n\n\nconst a = document.createElement('a');\nconst cache = {};\n\n\n/**\n * Parses the given url and returns an object mimicing a `Location` object.\n * @param {string} url The url to parse.\n * @return {!Object} An object with the same properties as a `Location`.\n */\nexport default function parseUrl(url) {\n // All falsy values (as well as \".\") should map to the current URL.\n url = (!url || url == '.') ? location.href : url;\n\n if (cache[url]) return cache[url];\n\n a.href = url;\n\n // When parsing file relative paths (e.g. `../index.html`), IE will correctly\n // resolve the `href` property but will keep the `..` in the `path` property.\n // It will also not include the `host` or `hostname` properties. Furthermore,\n // IE will sometimes return no protocol or just a colon, especially for things\n // like relative protocol URLs (e.g. \"//google.com\").\n // To workaround all of these issues, we reparse with the full URL from the\n // `href` property.\n if (url.charAt(0) == '.' || url.charAt(0) == '/') return parseUrl(a.href);\n\n // Don't include default ports.\n let port = (a.port == HTTP_PORT || a.port == HTTPS_PORT) ? '' : a.port;\n\n // PhantomJS sets the port to \"0\" when using the file: protocol.\n port = port == '0' ? '' : port;\n\n // Sometimes IE incorrectly includes a port for default ports\n // (e.g. `:80` or `:443`) even when no port is specified in the URL.\n // http://bit.ly/1rQNoMg\n const host = a.host.replace(DEFAULT_PORT, '');\n\n // Not all browser support `origin` so we have to build it.\n const origin = a.origin ? a.origin : a.protocol + '//' + host;\n\n // Sometimes IE doesn't include the leading slash for pathname.\n // http://bit.ly/1rQNoMg\n const pathname = a.pathname.charAt(0) == '/' ? a.pathname : '/' + a.pathname;\n\n return cache[url] = {\n hash: a.hash,\n host: host,\n hostname: a.hostname,\n href: a.href,\n origin: origin,\n pathname: pathname,\n port: port,\n protocol: a.protocol,\n search: a.search,\n };\n}\n","/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview\n * The functions exported by this module make it easier (and safer) to override\n * foreign object methods (in a modular way) and respond to or modify their\n * invocation. The primary feature is the ability to override a method without\n * worrying if it's already been overridden somewhere else in the codebase. It\n * also allows for safe restoring of an overridden method by only fully\n * restoring a method once all overrides have been removed.\n */\n\n\nconst instances = [];\n\n\n/**\n * A class that wraps a foreign object method and emit events before and\n * after the original method is called.\n */\nexport default class MethodChain {\n /**\n * Adds the passed override method to the list of method chain overrides.\n * @param {!Object} context The object containing the method to chain.\n * @param {string} methodName The name of the method on the object.\n * @param {!Function} methodOverride The override method to add.\n */\n static add(context, methodName, methodOverride) {\n getOrCreateMethodChain(context, methodName).add(methodOverride);\n }\n\n /**\n * Removes a method chain added via `add()`. If the override is the\n * only override added, the original method is restored.\n * @param {!Object} context The object containing the method to unchain.\n * @param {string} methodName The name of the method on the object.\n * @param {!Function} methodOverride The override method to remove.\n */\n static remove(context, methodName, methodOverride) {\n getOrCreateMethodChain(context, methodName).remove(methodOverride);\n }\n\n /**\n * Wraps a foreign object method and overrides it. Also stores a reference\n * to the original method so it can be restored later.\n * @param {!Object} context The object containing the method.\n * @param {string} methodName The name of the method on the object.\n */\n constructor(context, methodName) {\n this.context = context;\n this.methodName = methodName;\n this.isTask = /Task$/.test(methodName);\n\n this.originalMethodReference = this.isTask ?\n context.get(methodName) : context[methodName];\n\n this.methodChain = [];\n this.boundMethodChain = [];\n\n // Wraps the original method.\n this.wrappedMethod = (...args) => {\n const lastBoundMethod =\n this.boundMethodChain[this.boundMethodChain.length - 1];\n\n return lastBoundMethod(...args);\n };\n\n // Override original method with the wrapped one.\n if (this.isTask) {\n context.set(methodName, this.wrappedMethod);\n } else {\n context[methodName] = this.wrappedMethod;\n }\n }\n\n /**\n * Adds a method to the method chain.\n * @param {!Function} overrideMethod The override method to add.\n */\n add(overrideMethod) {\n this.methodChain.push(overrideMethod);\n this.rebindMethodChain();\n }\n\n /**\n * Removes a method from the method chain and restores the prior order.\n * @param {!Function} overrideMethod The override method to remove.\n */\n remove(overrideMethod) {\n const index = this.methodChain.indexOf(overrideMethod);\n if (index > -1) {\n this.methodChain.splice(index, 1);\n if (this.methodChain.length > 0) {\n this.rebindMethodChain();\n } else {\n this.destroy();\n }\n }\n }\n\n /**\n * Loops through the method chain array and recreates the bound method\n * chain array. This is necessary any time a method is added or removed\n * to ensure proper original method context and order.\n */\n rebindMethodChain() {\n this.boundMethodChain = [];\n for (let method, i = 0; method = this.methodChain[i]; i++) {\n const previousMethod = this.boundMethodChain[i - 1] ||\n this.originalMethodReference.bind(this.context);\n this.boundMethodChain.push(method(previousMethod));\n }\n }\n\n /**\n * Calls super and destroys the instance if no registered handlers remain.\n */\n destroy() {\n const index = instances.indexOf(this);\n if (index > -1) {\n instances.splice(index, 1);\n if (this.isTask) {\n this.context.set(this.methodName, this.originalMethodReference);\n } else {\n this.context[this.methodName] = this.originalMethodReference;\n }\n }\n }\n}\n\n\n/**\n * Gets a MethodChain instance for the passed object and method. If the method\n * has already been wrapped via an existing MethodChain instance, that\n * instance is returned.\n * @param {!Object} context The object containing the method.\n * @param {string} methodName The name of the method on the object.\n * @return {!MethodChain}\n */\nfunction getOrCreateMethodChain(context, methodName) {\n let methodChain = instances\n .filter((h) => h.context == context && h.methodName == methodName)[0];\n\n if (!methodChain) {\n methodChain = new MethodChain(context, methodName);\n instances.push(methodChain);\n }\n return methodChain;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {getAttributes} from 'dom-utils';\nimport MethodChain from './method-chain';\n\n\n/**\n * Accepts default and user override fields and an optional tracker, hit\n * filter, and target element and returns a single object that can be used in\n * `ga('send', ...)` commands.\n * @param {FieldsObj} defaultFields The default fields to return.\n * @param {FieldsObj} userFields Fields set by the user to override the\n * defaults.\n * @param {Tracker=} tracker The tracker object to apply the hit filter to.\n * @param {Function=} hitFilter A filter function that gets\n * called with the tracker model right before the `buildHitTask`. It can\n * be used to modify the model for the current hit only.\n * @param {Element=} target If the hit originated from an interaction\n * with a DOM element, hitFilter is invoked with that element as the\n * second argument.\n * @param {(Event|TwttrEvent)=} event If the hit originated via a DOM event,\n * hitFilter is invoked with that event as the third argument.\n * @return {!FieldsObj} The final fields object.\n */\nexport function createFieldsObj(\n defaultFields, userFields, tracker = undefined,\n hitFilter = undefined, target = undefined, event = undefined) {\n if (typeof hitFilter == 'function') {\n const originalBuildHitTask = tracker.get('buildHitTask');\n return {\n buildHitTask: (/** @type {!Model} */ model) => {\n model.set(defaultFields, null, true);\n model.set(userFields, null, true);\n hitFilter(model, target, event);\n originalBuildHitTask(model);\n },\n };\n } else {\n return assign({}, defaultFields, userFields);\n }\n}\n\n\n/**\n * Retrieves the attributes from an DOM element and returns a fields object\n * for all attributes matching the passed prefix string.\n * @param {Element} element The DOM element to get attributes from.\n * @param {string} prefix An attribute prefix. Only the attributes matching\n * the prefix will be returned on the fields object.\n * @return {FieldsObj} An object of analytics.js fields and values\n */\nexport function getAttributeFields(element, prefix) {\n const attributes = getAttributes(element);\n const attributeFields = {};\n\n Object.keys(attributes).forEach(function(attribute) {\n // The `on` prefix is used for event handling but isn't a field.\n if (attribute.indexOf(prefix) === 0 && attribute != prefix + 'on') {\n let value = attributes[attribute];\n\n // Detects Boolean value strings.\n if (value == 'true') value = true;\n if (value == 'false') value = false;\n\n const field = camelCase(attribute.slice(prefix.length));\n attributeFields[field] = value;\n }\n });\n\n return attributeFields;\n}\n\n\n/**\n * Accepts a function to be invoked once the DOM is ready. If the DOM is\n * already ready, the callback is invoked immediately.\n * @param {!Function} callback The ready callback.\n */\nexport function domReady(callback) {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', function fn() {\n document.removeEventListener('DOMContentLoaded', fn);\n callback();\n });\n } else {\n callback();\n }\n}\n\n\n/**\n * Returns a function, that, as long as it continues to be called, will not\n * actually run. The function will only run after it stops being called for\n * `wait` milliseconds.\n * @param {!Function} fn The function to debounce.\n * @param {number} wait The debounce wait timeout in ms.\n * @return {!Function} The debounced function.\n */\nexport function debounce(fn, wait) {\n let timeout;\n return function(...args) {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), wait);\n };\n}\n\n\n/**\n * Accepts a function and returns a wrapped version of the function that is\n * expected to be called elsewhere in the system. If it's not called\n * elsewhere after the timeout period, it's called regardless. The wrapper\n * function also prevents the callback from being called more than once.\n * @param {!Function} callback The function to call.\n * @param {number=} wait How many milliseconds to wait before invoking\n * the callback.\n * @return {!Function} The wrapped version of the passed function.\n */\nexport function withTimeout(callback, wait = 2000) {\n let called = false;\n const fn = function() {\n if (!called) {\n called = true;\n callback();\n }\n };\n setTimeout(fn, wait);\n return fn;\n}\n\n// Maps trackers to queue by tracking ID.\nconst queueMap = {};\n\n/**\n * Queues a function for execution in the next call stack, or immediately\n * before any send commands are executed on the tracker. This allows\n * autotrack plugins to defer running commands until after all other plugins\n * are required but before any other hits are sent.\n * @param {!Tracker} tracker\n * @param {!Function} fn\n */\nexport function deferUntilPluginsLoaded(tracker, fn) {\n const trackingId = tracker.get('trackingId');\n const ref = queueMap[trackingId] = queueMap[trackingId] || {};\n\n const processQueue = () => {\n clearTimeout(ref.timeout);\n if (ref.send) {\n MethodChain.remove(tracker, 'send', ref.send);\n }\n delete queueMap[trackingId];\n\n ref.queue.forEach((fn) => fn());\n };\n\n clearTimeout(ref.timeout);\n ref.timeout = setTimeout(processQueue, 0);\n ref.queue = ref.queue || [];\n ref.queue.push(fn);\n\n if (!ref.send) {\n ref.send = (originalMethod) => {\n return (...args) => {\n processQueue();\n originalMethod(...args);\n };\n };\n MethodChain.add(tracker, 'send', ref.send);\n }\n}\n\n\n/**\n * A small shim of Object.assign that aims for brevity over spec-compliant\n * handling all the edge cases.\n * @param {!Object} target The target object to assign to.\n * @param {...?Object} sources Additional objects who properties should be\n * assigned to target. Non-objects are converted to objects.\n * @return {!Object} The modified target object.\n */\nexport const assign = Object.assign || function(target, ...sources) {\n for (let i = 0, len = sources.length; i < len; i++) {\n const source = Object(sources[i]);\n for (let key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n};\n\n\n/**\n * Accepts a string containing hyphen or underscore word separators and\n * converts it to camelCase.\n * @param {string} str The string to camelCase.\n * @return {string} The camelCased version of the string.\n */\nexport function camelCase(str) {\n return str.replace(/[\\-\\_]+(\\w?)/g, function(match, p1) {\n return p1.toUpperCase();\n });\n}\n\n\n/**\n * Capitalizes the first letter of a string.\n * @param {string} str The input string.\n * @return {string} The capitalized string\n */\nexport function capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\n/**\n * Indicates whether the passed variable is a JavaScript object.\n * @param {*} value The input variable to test.\n * @return {boolean} Whether or not the test is an object.\n */\nexport function isObject(value) {\n return typeof value == 'object' && value !== null;\n}\n\n\n/**\n * Accepts a value that may or may not be an array. If it is not an array,\n * it is returned as the first item in a single-item array.\n * @param {*} value The value to convert to an array if it is not.\n * @return {!Array} The array-ified value.\n */\nexport function toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\n\n/**\n * @return {number} The current date timestamp\n */\nexport function now() {\n return +new Date();\n}\n\n\n/*eslint-disable */\n// https://gist.github.com/jed/982883\n/** @param {?=} a */\nexport const uuid = function b(a){return a?(a^Math.random()*16>>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,b)};\n/*eslint-enable */\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {DEV_ID} from './constants';\nimport {capitalize} from './utilities';\n\n\n/**\n * Provides a plugin for use with analytics.js, accounting for the possibility\n * that the global command queue has been renamed or not yet defined.\n * @param {string} pluginName The plugin name identifier.\n * @param {Function} pluginConstructor The plugin constructor function.\n */\nexport default function provide(pluginName, pluginConstructor) {\n const gaAlias = window.GoogleAnalyticsObject || 'ga';\n window[gaAlias] = window[gaAlias] || function(...args) {\n (window[gaAlias].q = window[gaAlias].q || []).push(args);\n };\n\n // Adds the autotrack dev ID if not already included.\n window.gaDevIds = window.gaDevIds || [];\n if (window.gaDevIds.indexOf(DEV_ID) < 0) {\n window.gaDevIds.push(DEV_ID);\n }\n\n // Formally provides the plugin for use with analytics.js.\n window[gaAlias]('provide', pluginName, pluginConstructor);\n\n // Registers the plugin on the global gaplugins object.\n window.gaplugins = window.gaplugins || {};\n window.gaplugins[capitalize(pluginName)] = pluginConstructor;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nexport const VERSION = '2.4.1';\nexport const DEV_ID = 'i5iSjo';\n\nexport const VERSION_PARAM = '_av';\nexport const USAGE_PARAM = '_au';\n\nexport const NULL_DIMENSION = '(not set)';\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {USAGE_PARAM, VERSION, VERSION_PARAM} from './constants';\n\n\nexport const plugins = {\n CLEAN_URL_TRACKER: 1,\n EVENT_TRACKER: 2,\n IMPRESSION_TRACKER: 3,\n MEDIA_QUERY_TRACKER: 4,\n OUTBOUND_FORM_TRACKER: 5,\n OUTBOUND_LINK_TRACKER: 6,\n PAGE_VISIBILITY_TRACKER: 7,\n SOCIAL_WIDGET_TRACKER: 8,\n URL_CHANGE_TRACKER: 9,\n MAX_SCROLL_TRACKER: 10,\n};\n\n\nconst PLUGIN_COUNT = Object.keys(plugins).length;\n\n\n/**\n * Tracks the usage of the passed plugin by encoding a value into a usage\n * string sent with all hits for the passed tracker.\n * @param {!Tracker} tracker The analytics.js tracker object.\n * @param {number} plugin The plugin enum.\n */\nexport function trackUsage(tracker, plugin) {\n trackVersion(tracker);\n trackPlugin(tracker, plugin);\n}\n\n\n/**\n * Converts a hexadecimal string to a binary string.\n * @param {string} hex A hexadecimal numeric string.\n * @return {string} a binary numeric string.\n */\nfunction convertHexToBin(hex) {\n return parseInt(hex || '0', 16).toString(2);\n}\n\n\n/**\n * Converts a binary string to a hexadecimal string.\n * @param {string} bin A binary numeric string.\n * @return {string} a hexadecimal numeric string.\n */\nfunction convertBinToHex(bin) {\n return parseInt(bin || '0', 2).toString(16);\n}\n\n\n/**\n * Adds leading zeros to a string if it's less than a minimum length.\n * @param {string} str A string to pad.\n * @param {number} len The minimum length of the string\n * @return {string} The padded string.\n */\nfunction padZeros(str, len) {\n if (str.length < len) {\n let toAdd = len - str.length;\n while (toAdd) {\n str = '0' + str;\n toAdd--;\n }\n }\n return str;\n}\n\n\n/**\n * Accepts a binary numeric string and flips the digit from 0 to 1 at the\n * specified index.\n * @param {string} str The binary numeric string.\n * @param {number} index The index to flip the bit.\n * @return {string} The new binary string with the bit flipped on\n */\nfunction flipBitOn(str, index) {\n return str.substr(0, index) + 1 + str.substr(index + 1);\n}\n\n\n/**\n * Accepts a tracker and a plugin index and flips the bit at the specified\n * index on the tracker's usage parameter.\n * @param {Object} tracker An analytics.js tracker.\n * @param {number} pluginIndex The index of the plugin in the global list.\n */\nfunction trackPlugin(tracker, pluginIndex) {\n const usageHex = tracker.get('&' + USAGE_PARAM);\n let usageBin = padZeros(convertHexToBin(usageHex), PLUGIN_COUNT);\n\n // Flip the bit of the plugin being tracked.\n usageBin = flipBitOn(usageBin, PLUGIN_COUNT - pluginIndex);\n\n // Stores the modified usage string back on the tracker.\n tracker.set('&' + USAGE_PARAM, convertBinToHex(usageBin));\n}\n\n\n/**\n * Accepts a tracker and adds the current version to the version param.\n * @param {Object} tracker An analytics.js tracker.\n */\nfunction trackVersion(tracker) {\n tracker.set('&' + VERSION_PARAM, VERSION);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {parseUrl} from 'dom-utils';\nimport {NULL_DIMENSION} from '../constants';\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign} from '../utilities';\n\n\n/**\n * Class for the `cleanUrlTracker` analytics.js plugin.\n * @implements {CleanUrlTrackerPublicInterface}\n */\nclass CleanUrlTracker {\n /**\n * Registers clean URL tracking on a tracker object. The clean URL tracker\n * removes query parameters from the page value reported to Google Analytics.\n * It also helps to prevent tracking similar URLs, e.g. sometimes ending a\n * URL with a slash and sometimes not.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?CleanUrlTrackerOpts} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.CLEAN_URL_TRACKER);\n\n /** @type {CleanUrlTrackerOpts} */\n const defaultOpts = {\n // stripQuery: undefined,\n // queryParamsWhitelist: undefined,\n // queryDimensionIndex: undefined,\n // indexFilename: undefined,\n // trailingSlash: undefined,\n // urlFilter: undefined,\n };\n this.opts = /** @type {CleanUrlTrackerOpts} */ (assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n /** @type {string|null} */\n this.queryDimension = this.opts.stripQuery &&\n this.opts.queryDimensionIndex ?\n `dimension${this.opts.queryDimensionIndex}` : null;\n\n // Binds methods to `this`.\n this.trackerGetOverride = this.trackerGetOverride.bind(this);\n this.buildHitTaskOverride = this.buildHitTaskOverride.bind(this);\n\n // Override built-in tracker method to watch for changes.\n MethodChain.add(tracker, 'get', this.trackerGetOverride);\n MethodChain.add(tracker, 'buildHitTask', this.buildHitTaskOverride);\n }\n\n /**\n * Ensures reads of the tracker object by other plugins always see the\n * \"cleaned\" versions of all URL fields.\n * @param {function(string):*} originalMethod A reference to the overridden\n * method.\n * @return {function(string):*}\n */\n trackerGetOverride(originalMethod) {\n return (field) => {\n if (field == 'page' || field == this.queryDimension) {\n const fieldsObj = /** @type {!FieldsObj} */ ({\n location: originalMethod('location'),\n page: originalMethod('page'),\n });\n const cleanedFieldsObj = this.cleanUrlFields(fieldsObj);\n return cleanedFieldsObj[field];\n } else {\n return originalMethod(field);\n }\n };\n }\n\n /**\n * Cleans URL fields passed in a send command.\n * @param {function(!Model)} originalMethod A reference to the\n * overridden method.\n * @return {function(!Model)}\n */\n buildHitTaskOverride(originalMethod) {\n return (model) => {\n const cleanedFieldsObj = this.cleanUrlFields({\n location: model.get('location'),\n page: model.get('page'),\n });\n model.set(cleanedFieldsObj, null, true);\n originalMethod(model);\n };\n }\n\n /**\n * Accepts of fields object containing URL fields and returns a new\n * fields object with the URLs \"cleaned\" according to the tracker options.\n * @param {!FieldsObj} fieldsObj\n * @return {!FieldsObj}\n */\n cleanUrlFields(fieldsObj) {\n const url = parseUrl(\n /** @type {string} */ (fieldsObj.page || fieldsObj.location));\n\n let pathname = url.pathname;\n\n // If an index filename was provided, remove it if it appears at the end\n // of the URL.\n if (this.opts.indexFilename) {\n const parts = pathname.split('/');\n if (this.opts.indexFilename == parts[parts.length - 1]) {\n parts[parts.length - 1] = '';\n pathname = parts.join('/');\n }\n }\n\n // Ensure the URL ends with or doesn't end with slash based on the\n // `trailingSlash` option. Note that filename URLs should never contain\n // a trailing slash.\n if (this.opts.trailingSlash == 'remove') {\n pathname = pathname.replace(/\\/+$/, '');\n } else if (this.opts.trailingSlash == 'add') {\n const isFilename = /\\.\\w+$/.test(pathname);\n if (!isFilename && pathname.substr(-1) != '/') {\n pathname = pathname + '/';\n }\n }\n\n /** @type {!FieldsObj} */\n const cleanedFieldsObj = {\n page: pathname + (this.opts.stripQuery ?\n this.stripNonWhitelistedQueryParams(url.search) : url.search),\n };\n if (fieldsObj.location) {\n cleanedFieldsObj.location = fieldsObj.location;\n }\n if (this.queryDimension) {\n cleanedFieldsObj[this.queryDimension] =\n url.search.slice(1) || NULL_DIMENSION;\n }\n\n // Apply the `urlFieldsFilter()` option if passed.\n if (typeof this.opts.urlFieldsFilter == 'function') {\n /** @type {!FieldsObj} */\n const userCleanedFieldsObj =\n this.opts.urlFieldsFilter(cleanedFieldsObj, parseUrl);\n\n // Ensure only the URL fields are returned.\n const returnValue = {\n page: userCleanedFieldsObj.page,\n location: userCleanedFieldsObj.location,\n };\n if (this.queryDimension) {\n returnValue[this.queryDimension] =\n userCleanedFieldsObj[this.queryDimension];\n }\n return returnValue;\n } else {\n return cleanedFieldsObj;\n }\n }\n\n /**\n * Accpets a raw URL search string and returns a new search string containing\n * only the site search params (if they exist).\n * @param {string} searchString The URL search string (starting with '?').\n * @return {string} The query string\n */\n stripNonWhitelistedQueryParams(searchString) {\n if (Array.isArray(this.opts.queryParamsWhitelist)) {\n const foundParams = [];\n searchString.slice(1).split('&').forEach((kv) => {\n const [key, value] = kv.split('=');\n if (this.opts.queryParamsWhitelist.indexOf(key) > -1 && value) {\n foundParams.push([key, value]);\n }\n });\n\n return foundParams.length ?\n '?' + foundParams.map((kv) => kv.join('=')).join('&') : '';\n } else {\n return '';\n }\n }\n\n /**\n * Restores all overridden tasks and methods.\n */\n remove() {\n MethodChain.remove(this.tracker, 'get', this.trackerGetOverride);\n MethodChain.remove(this.tracker, 'buildHitTask', this.buildHitTaskOverride);\n }\n}\n\n\nprovide('cleanUrlTracker', CleanUrlTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n domReady, getAttributeFields} from '../utilities';\n\n\n/**\n * Class for the `impressionTracker` analytics.js plugin.\n * @implements {ImpressionTrackerPublicInterface}\n */\nclass ImpressionTracker {\n /**\n * Registers impression tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?ImpressionTrackerOpts} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.IMPRESSION_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!(window.IntersectionObserver && window.MutationObserver)) return;\n\n /** type {ImpressionTrackerOpts} */\n const defaultOptions = {\n // elements: undefined,\n rootMargin: '0px',\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined,\n };\n\n this.opts = /** type {ImpressionTrackerOpts} */ (\n assign(defaultOptions, opts));\n\n this.tracker = tracker;\n\n // Binds methods.\n this.handleDomMutations = this.handleDomMutations.bind(this);\n this.handleIntersectionChanges = this.handleIntersectionChanges.bind(this);\n this.handleDomElementAdded = this.handleDomElementAdded.bind(this);\n this.handleDomElementRemoved = this.handleDomElementRemoved.bind(this);\n\n /** @type {MutationObserver} */\n this.mutationObserver = null;\n\n // The primary list of elements to observe. Each item contains the\n // element ID, threshold, and whether it's currently in-view.\n this.items = [];\n\n // A map of element IDs in the `items` array to DOM elements in the\n // document. The presence of a key indicates that the element ID is in the\n // `items` array, and the presence of an element value indicates that the\n // element is in the DOM.\n this.elementMap = {};\n\n // A map of threshold values. Each threshold is mapped to an\n // IntersectionObserver instance specific to that threshold.\n this.thresholdMap = {};\n\n // Once the DOM is ready, start observing for changes (if present).\n domReady(() => {\n if (this.opts.elements) {\n this.observeElements(this.opts.elements);\n }\n });\n }\n\n /**\n * Starts observing the passed elements for impressions.\n * @param {Array<!ImpressionTrackerElementsItem|string>} elements\n */\n observeElements(elements) {\n const data = this.deriveDataFromElements(elements);\n\n // Merge the new data with the data already on the plugin instance.\n this.items = this.items.concat(data.items);\n this.elementMap = assign({}, data.elementMap, this.elementMap);\n this.thresholdMap = assign({}, data.thresholdMap, this.thresholdMap);\n\n // Observe each new item.\n data.items.forEach((item) => {\n const observer = this.thresholdMap[item.threshold] =\n (this.thresholdMap[item.threshold] || new IntersectionObserver(\n this.handleIntersectionChanges, {\n rootMargin: this.opts.rootMargin,\n threshold: [+item.threshold],\n }));\n\n const element = this.elementMap[item.id] ||\n (this.elementMap[item.id] = document.getElementById(item.id));\n\n if (element) {\n observer.observe(element);\n }\n });\n\n if (!this.mutationObserver) {\n this.mutationObserver = new MutationObserver(this.handleDomMutations);\n this.mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n // TODO(philipwalton): Remove temporary hack to force a new frame\n // immediately after adding observers.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=612323\n requestAnimationFrame(() => {});\n }\n\n /**\n * Stops observing the passed elements for impressions.\n * @param {Array<!ImpressionTrackerElementsItem|string>} elements\n * @return {undefined}\n */\n unobserveElements(elements) {\n const itemsToKeep = [];\n const itemsToRemove = [];\n\n this.items.forEach((item) => {\n const itemInItems = elements.some((element) => {\n const itemToRemove = getItemFromElement(element);\n return itemToRemove.id === item.id &&\n itemToRemove.threshold === item.threshold &&\n itemToRemove.trackFirstImpressionOnly ===\n item.trackFirstImpressionOnly;\n });\n if (itemInItems) {\n itemsToRemove.push(item);\n } else {\n itemsToKeep.push(item);\n }\n });\n\n // If there are no items to keep, run the `unobserveAllElements` logic.\n if (!itemsToKeep.length) {\n this.unobserveAllElements();\n } else {\n const dataToKeep = this.deriveDataFromElements(itemsToKeep);\n const dataToRemove = this.deriveDataFromElements(itemsToRemove);\n\n this.items = dataToKeep.items;\n this.elementMap = dataToKeep.elementMap;\n this.thresholdMap = dataToKeep.thresholdMap;\n\n // Unobserve removed elements.\n itemsToRemove.forEach((item) => {\n if (!dataToKeep.elementMap[item.id]) {\n const observer = dataToRemove.thresholdMap[item.threshold];\n const element = dataToRemove.elementMap[item.id];\n\n if (element) {\n observer.unobserve(element);\n }\n\n // Disconnect unneeded threshold observers.\n if (!dataToKeep.thresholdMap[item.threshold]) {\n dataToRemove.thresholdMap[item.threshold].disconnect();\n }\n }\n });\n }\n }\n\n /**\n * Stops observing all currently observed elements.\n */\n unobserveAllElements() {\n Object.keys(this.thresholdMap).forEach((key) => {\n this.thresholdMap[key].disconnect();\n });\n\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n\n this.items = [];\n this.elementMap = {};\n this.thresholdMap = {};\n }\n\n /**\n * Loops through each of the passed elements and creates a map of element IDs,\n * threshold values, and a list of \"items\" (which contains each element's\n * `threshold` and `trackFirstImpressionOnly` property).\n * @param {Array} elements A list of elements to derive item data from.\n * @return {Object} An object with the properties `items`, `elementMap`\n * and `threshold`.\n */\n deriveDataFromElements(elements) {\n const items = [];\n const thresholdMap = {};\n const elementMap = {};\n\n if (elements.length) {\n elements.forEach((element) => {\n const item = getItemFromElement(element);\n\n items.push(item);\n elementMap[item.id] = this.elementMap[item.id] || null;\n thresholdMap[item.threshold] =\n this.thresholdMap[item.threshold] || null;\n });\n }\n\n return {items, elementMap, thresholdMap};\n }\n\n /**\n * Handles nodes being added or removed from the DOM. This function is passed\n * as the callback to `this.mutationObserver`.\n * @param {Array} mutations A list of `MutationRecord` instances\n */\n handleDomMutations(mutations) {\n for (let i = 0, mutation; mutation = mutations[i]; i++) {\n // Handles removed elements.\n for (let k = 0, removedEl; removedEl = mutation.removedNodes[k]; k++) {\n this.walkNodeTree(removedEl, this.handleDomElementRemoved);\n }\n // Handles added elements.\n for (let j = 0, addedEl; addedEl = mutation.addedNodes[j]; j++) {\n this.walkNodeTree(addedEl, this.handleDomElementAdded);\n }\n }\n }\n\n /**\n * Iterates through all descendents of a DOM node and invokes the passed\n * callback if any of them match an elememt in `elementMap`.\n * @param {Node} node The DOM node to walk.\n * @param {Function} callback A function to be invoked if a match is found.\n */\n walkNodeTree(node, callback) {\n if (node.nodeType == 1 && node.id in this.elementMap) {\n callback(node.id);\n }\n for (let i = 0, child; child = node.childNodes[i]; i++) {\n this.walkNodeTree(child, callback);\n }\n }\n\n /**\n * Handles intersection changes. This function is passed as the callback to\n * `this.intersectionObserver`\n * @param {Array} records A list of `IntersectionObserverEntry` records.\n */\n handleIntersectionChanges(records) {\n const itemsToRemove = [];\n for (let i = 0, record; record = records[i]; i++) {\n for (let j = 0, item; item = this.items[j]; j++) {\n if (record.target.id !== item.id) continue;\n\n if (isTargetVisible(item.threshold, record)) {\n this.handleImpression(item.id);\n\n if (item.trackFirstImpressionOnly) {\n itemsToRemove.push(item);\n }\n }\n }\n }\n if (itemsToRemove.length) {\n this.unobserveElements(itemsToRemove);\n }\n }\n\n /**\n * Sends a hit to Google Analytics with the impression data.\n * @param {string} id The ID of the element making the impression.\n */\n handleImpression(id) {\n const element = document.getElementById(id);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Viewport',\n eventAction: 'impression',\n eventLabel: id,\n nonInteraction: true,\n };\n\n /** @type {FieldsObj} */\n const userFields = assign({}, this.opts.fieldsObj,\n getAttributeFields(element, this.opts.attributePrefix));\n\n this.tracker.send('event', createFieldsObj(defaultFields,\n userFields, this.tracker, this.opts.hitFilter, element));\n }\n\n /**\n * Handles an element in the items array being added to the DOM.\n * @param {string} id The ID of the element that was added.\n */\n handleDomElementAdded(id) {\n const element = this.elementMap[id] = document.getElementById(id);\n this.items.forEach((item) => {\n if (id == item.id) {\n this.thresholdMap[item.threshold].observe(element);\n }\n });\n }\n\n /**\n * Handles an element currently being observed for intersections being\n * removed from the DOM.\n * @param {string} id The ID of the element that was removed.\n */\n handleDomElementRemoved(id) {\n const element = this.elementMap[id];\n this.items.forEach((item) => {\n if (id == item.id) {\n this.thresholdMap[item.threshold].unobserve(element);\n }\n });\n\n this.elementMap[id] = null;\n }\n\n /**\n * Removes all listeners and observers.\n * @private\n */\n remove() {\n this.unobserveAllElements();\n }\n}\n\n\nprovide('impressionTracker', ImpressionTracker);\n\n\n/**\n * Detects whether or not an intersection record represents a visible target\n * given a particular threshold.\n * @param {number} threshold The threshold the target is visible above.\n * @param {IntersectionObserverEntry} record The most recent record entry.\n * @return {boolean} True if the target is visible.\n */\nfunction isTargetVisible(threshold, record) {\n if (threshold === 0) {\n const i = record.intersectionRect;\n return i.top > 0 || i.bottom > 0 || i.left > 0 || i.right > 0;\n } else {\n return record.intersectionRatio >= threshold;\n }\n}\n\n\n/**\n * Creates an item by merging the passed element with the item defaults.\n * If the passed element is just a string, that string is treated as\n * the item ID.\n * @param {!ImpressionTrackerElementsItem|string} element The element to\n * convert to an item.\n * @return {!ImpressionTrackerElementsItem} The item object.\n */\nfunction getItemFromElement(element) {\n /** @type {ImpressionTrackerElementsItem} */\n const defaultOpts = {\n threshold: 0,\n trackFirstImpressionOnly: true,\n };\n\n if (typeof element == 'string') {\n element = /** @type {!ImpressionTrackerElementsItem} */ ({id: element});\n }\n\n return assign(defaultOpts, element);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * An simple reimplementation of the native Node.js EventEmitter class.\n * The goal of this implementation is to be as small as possible.\n */\nexport default class EventEmitter {\n /**\n * Creates the event registry.\n */\n constructor() {\n this.registry_ = {};\n }\n\n /**\n * Adds a handler function to the registry for the passed event.\n * @param {string} event The event name.\n * @param {!Function} fn The handler to be invoked when the passed\n * event is emitted.\n */\n on(event, fn) {\n this.getRegistry_(event).push(fn);\n }\n\n /**\n * Removes a handler function from the registry for the passed event.\n * @param {string=} event The event name.\n * @param {Function=} fn The handler to be removed.\n */\n off(event = undefined, fn = undefined) {\n if (event && fn) {\n const eventRegistry = this.getRegistry_(event);\n const handlerIndex = eventRegistry.indexOf(fn);\n if (handlerIndex > -1) {\n eventRegistry.splice(handlerIndex, 1);\n }\n } else {\n this.registry_ = {};\n }\n }\n\n /**\n * Runs all registered handlers for the passed event with the optional args.\n * @param {string} event The event name.\n * @param {...*} args The arguments to be passed to the handler.\n */\n emit(event, ...args) {\n this.getRegistry_(event).forEach((fn) => fn(...args));\n }\n\n /**\n * Returns the total number of event handlers currently registered.\n * @return {number}\n */\n getEventCount() {\n let eventCount = 0;\n Object.keys(this.registry_).forEach((event) => {\n eventCount += this.getRegistry_(event).length;\n });\n return eventCount;\n }\n\n /**\n * Returns an array of handlers associated with the passed event name.\n * If no handlers have been registered, an empty array is returned.\n * @private\n * @param {string} event The event name.\n * @return {!Array} An array of handler functions.\n */\n getRegistry_(event) {\n return this.registry_[event] = (this.registry_[event] || []);\n }\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport EventEmitter from './event-emitter';\nimport {assign} from './utilities';\n\n\nconst AUTOTRACK_PREFIX = 'autotrack';\nconst instances = {};\nlet isListening = false;\n\n\n/** @type {boolean|undefined} */\nlet browserSupportsLocalStorage;\n\n\n/**\n * A storage object to simplify interacting with localStorage.\n */\nexport default class Store extends EventEmitter {\n /**\n * Gets an existing instance for the passed arguements or creates a new\n * instance if one doesn't exist.\n * @param {string} trackingId The tracking ID for the GA property.\n * @param {string} namespace A namespace unique to this store.\n * @param {Object=} defaults An optional object of key/value defaults.\n * @return {Store} The Store instance.\n */\n static getOrCreate(trackingId, namespace, defaults) {\n const key = [AUTOTRACK_PREFIX, trackingId, namespace].join(':');\n\n // Don't create multiple instances for the same tracking Id and namespace.\n if (!instances[key]) {\n instances[key] = new Store(key, defaults);\n if (!isListening) initStorageListener();\n }\n return instances[key];\n }\n\n /**\n * Returns true if the browser supports and can successfully write to\n * localStorage. The results is cached so this method can be invoked many\n * times with no extra performance cost.\n * @private\n * @return {boolean}\n */\n static isSupported_() {\n if (browserSupportsLocalStorage != null) {\n return browserSupportsLocalStorage;\n }\n\n try {\n window.localStorage.setItem(AUTOTRACK_PREFIX, AUTOTRACK_PREFIX);\n window.localStorage.removeItem(AUTOTRACK_PREFIX);\n browserSupportsLocalStorage = true;\n } catch (err) {\n browserSupportsLocalStorage = false;\n }\n return browserSupportsLocalStorage;\n }\n\n /**\n * Wraps the native localStorage method for each stubbing in tests.\n * @private\n * @param {string} key The store key.\n * @return {string|null} The stored value.\n */\n static get_(key) {\n return window.localStorage.getItem(key);\n }\n\n /**\n * Wraps the native localStorage method for each stubbing in tests.\n * @private\n * @param {string} key The store key.\n * @param {string} value The value to store.\n */\n static set_(key, value) {\n window.localStorage.setItem(key, value);\n }\n\n /**\n * Wraps the native localStorage method for each stubbing in tests.\n * @private\n * @param {string} key The store key.\n */\n static clear_(key) {\n window.localStorage.removeItem(key);\n }\n\n /**\n * @param {string} key A key unique to this store.\n * @param {Object=} defaults An optional object of key/value defaults.\n */\n constructor(key, defaults = {}) {\n super();\n this.key_ = key;\n this.defaults_ = defaults;\n\n /** @type {?Object} */\n this.cache_ = null; // Will be set after the first get.\n }\n\n /**\n * Gets the data stored in localStorage for this store. If the cache is\n * already populated, return it as is (since it's always kept up-to-date\n * and in sync with activity in other windows via the `storage` event).\n * TODO(philipwalton): Implement schema migrations if/when a new\n * schema version is introduced.\n * @return {!Object} The stored data merged with the defaults.\n */\n get() {\n if (this.cache_) {\n return this.cache_;\n } else {\n if (Store.isSupported_()) {\n try {\n this.cache_ = parse(Store.get_(this.key_));\n } catch(err) {\n // Do nothing.\n }\n }\n return this.cache_ = assign({}, this.defaults_, this.cache_);\n }\n }\n\n /**\n * Saves the passed data object to localStorage,\n * merging it with the existing data.\n * @param {Object} newData The data to save.\n */\n set(newData) {\n this.cache_ = assign({}, this.defaults_, this.cache_, newData);\n\n if (Store.isSupported_()) {\n try {\n Store.set_(this.key_, JSON.stringify(this.cache_));\n } catch(err) {\n // Do nothing.\n }\n }\n }\n\n /**\n * Clears the data in localStorage for the current store.\n */\n clear() {\n this.cache_ = {};\n if (Store.isSupported_()) {\n try {\n Store.clear_(this.key_);\n } catch(err) {\n // Do nothing.\n }\n }\n }\n\n /**\n * Removes the store instance for the global instances map. If this is the\n * last store instance, the storage listener is also removed.\n * Note: this does not erase the stored data. Use `clear()` for that.\n */\n destroy() {\n delete instances[this.key_];\n if (!Object.keys(instances).length) {\n removeStorageListener();\n }\n }\n}\n\n\n/**\n * Adds a single storage event listener and flips the global `isListening`\n * flag so multiple events aren't added.\n */\nfunction initStorageListener() {\n window.addEventListener('storage', storageListener);\n isListening = true;\n}\n\n\n/**\n * Removes the storage event listener and flips the global `isListening`\n * flag so it can be re-added later.\n */\nfunction removeStorageListener() {\n window.removeEventListener('storage', storageListener);\n isListening = false;\n}\n\n\n/**\n * The global storage event listener.\n * @param {!Event} event The DOM event.\n */\nfunction storageListener(event) {\n const store = instances[event.key];\n if (store) {\n const oldData = assign({}, store.defaults_, parse(event.oldValue));\n const newData = assign({}, store.defaults_, parse(event.newValue));\n\n store.cache_ = newData;\n store.emit('externalSet', newData, oldData);\n }\n}\n\n\n/**\n * Parses a source string as JSON\n * @param {string|null} source\n * @return {!Object} The JSON object.\n */\nfunction parse(source) {\n let data = {};\n if (source) {\n try {\n data = /** @type {!Object} */ (JSON.parse(source));\n } catch(err) {\n // Do nothing.\n }\n }\n return data;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport MethodChain from './method-chain';\nimport Store from './store';\nimport {now, uuid} from './utilities';\n\n\nconst SECONDS = 1000;\nconst MINUTES = 60 * SECONDS;\n\n\nconst instances = {};\n\n\n/**\n * A session management class that helps track session boundaries\n * across multiple open tabs/windows.\n */\nexport default class Session {\n /**\n * Gets an existing instance for the passed arguments or creates a new\n * instance if one doesn't exist.\n * @param {!Tracker} tracker An analytics.js tracker object.\n * @param {number} timeout The session timeout (in minutes). This value\n * should match what's set in the \"Session settings\" section of the\n * Google Analytics admin.\n * @param {string=} timeZone The optional IANA time zone of the view. This\n * value should match what's set in the \"View settings\" section of the\n * Google Analytics admin. (Note: this assumes all views for the property\n * use the same time zone. If that's not true, it's better not to use\n * this feature).\n * @return {Session} The Session instance.\n */\n static getOrCreate(tracker, timeout, timeZone) {\n // Don't create multiple instances for the same property.\n const trackingId = tracker.get('trackingId');\n if (instances[trackingId]) {\n return instances[trackingId];\n } else {\n return instances[trackingId] = new Session(tracker, timeout, timeZone);\n }\n }\n\n /**\n * @param {!Tracker} tracker An analytics.js tracker object.\n * @param {number} timeout The session timeout (in minutes). This value\n * should match what's set in the \"Session settings\" section of the\n * Google Analytics admin.\n * @param {string=} timeZone The optional IANA time zone of the view. This\n * value should match what's set in the \"View settings\" section of the\n * Google Analytics admin. (Note: this assumes all views for the property\n * use the same time zone. If that's not true, it's better not to use\n * this feature).\n */\n constructor(tracker, timeout, timeZone) {\n this.tracker = tracker;\n this.timeout = timeout || Session.DEFAULT_TIMEOUT;\n this.timeZone = timeZone;\n\n // Binds methods.\n this.sendHitTaskOverride = this.sendHitTaskOverride.bind(this);\n\n // Overrides into the trackers sendHitTask method.\n MethodChain.add(tracker, 'sendHitTask', this.sendHitTaskOverride);\n\n // Some browser doesn't support various features of the\n // `Intl.DateTimeFormat` API, so we have to try/catch it. Consequently,\n // this allows us to assume the presence of `this.dateTimeFormatter` means\n // it works in the current browser.\n try {\n this.dateTimeFormatter =\n new Intl.DateTimeFormat('en-US', {timeZone: this.timeZone});\n } catch(err) {\n // Do nothing.\n }\n\n /** @type {SessionStoreData} */\n const defaultProps = {\n hitTime: 0,\n isExpired: false,\n };\n this.store = Store.getOrCreate(\n tracker.get('trackingId'), 'session', defaultProps);\n\n // Ensure the session has an ID.\n if (!this.store.get().id) {\n this.store.set(/** @type {SessionStoreData} */ ({id: uuid()}));\n }\n }\n\n /**\n * Returns the ID of the current session.\n * @return {string}\n */\n getId() {\n return this.store.get().id;\n }\n\n /**\n * Accepts a session ID and returns true if the specified session has\n * evidentially expired. A session can expire for two reasons:\n * - More than 30 minutes has elapsed since the previous hit\n * was sent (The 30 minutes number is the Google Analytics default, but\n * it can be modified in GA admin \"Session settings\").\n * - A new day has started since the previous hit, in the\n * specified time zone (should correspond to the time zone of the\n * property's views).\n *\n * Note: since real session boundaries are determined at processing time,\n * this is just a best guess rather than a source of truth.\n *\n * @param {string} id The ID of a session to check for expiry.\n * @return {boolean} True if the session has not exp\n */\n isExpired(id = this.getId()) {\n // If a session ID is passed and it doesn't match the current ID,\n // assume it's from an expired session. If no ID is passed, assume the ID\n // of the current session.\n if (id != this.getId()) return true;\n\n /** @type {SessionStoreData} */\n const sessionData = this.store.get();\n\n // `isExpired` will be `true` if the sessionControl field was set to\n // 'end' on the previous hit.\n if (sessionData.isExpired) return true;\n\n const oldHitTime = sessionData.hitTime;\n\n // Only consider a session expired if previous hit time data exists, and\n // the previous hit time is greater than that session timeout period or\n // the hits occurred on different days in the session timezone.\n if (oldHitTime) {\n const currentDate = new Date();\n const oldHitDate = new Date(oldHitTime);\n if (currentDate - oldHitDate > (this.timeout * MINUTES) ||\n this.datesAreDifferentInTimezone(currentDate, oldHitDate)) {\n return true;\n }\n }\n\n // For all other cases return false.\n return false;\n }\n\n /**\n * Returns true if (and only if) the timezone date formatting is supported\n * in the current browser and if the two dates are definitively not the\n * same date in the session timezone. Anything short of this returns false.\n * @param {!Date} d1\n * @param {!Date} d2\n * @return {boolean}\n */\n datesAreDifferentInTimezone(d1, d2) {\n if (!this.dateTimeFormatter) {\n return false;\n } else {\n return this.dateTimeFormatter.format(d1)\n != this.dateTimeFormatter.format(d2);\n }\n }\n\n /**\n * Keeps track of when the previous hit was sent to determine if a session\n * has expired. Also inspects the `sessionControl` field to handles\n * expiration accordingly.\n * @param {function(!Model)} originalMethod A reference to the overridden\n * method.\n * @return {function(!Model)}\n */\n sendHitTaskOverride(originalMethod) {\n return (model) => {\n originalMethod(model);\n\n const sessionControl = model.get('sessionControl');\n const sessionWillStart = sessionControl == 'start' || this.isExpired();\n const sessionWillEnd = sessionControl == 'end';\n\n /** @type {SessionStoreData} */\n const sessionData = this.store.get();\n sessionData.hitTime = now();\n if (sessionWillStart) {\n sessionData.isExpired = false;\n sessionData.id = uuid();\n }\n if (sessionWillEnd) {\n sessionData.isExpired = true;\n }\n this.store.set(sessionData);\n };\n }\n\n /**\n * Restores the tracker's original `sendHitTask` to the state before\n * session control was initialized and removes this instance from the global\n * store.\n */\n destroy() {\n MethodChain.remove(this.tracker, 'sendHitTask', this.sendHitTaskOverride);\n this.store.destroy();\n delete instances[this.tracker.get('trackingId')];\n }\n}\n\n\nSession.DEFAULT_TIMEOUT = 30; // minutes\n","/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {parseUrl} from 'dom-utils';\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport Session from '../session';\nimport Store from '../store';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj, debounce, isObject} from '../utilities';\n\n\n/**\n * Class for the `maxScrollQueryTracker` analytics.js plugin.\n * @implements {MaxScrollTrackerPublicInterface}\n */\nclass MaxScrollTracker {\n /**\n * Registers outbound link tracking on tracker object.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.MAX_SCROLL_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {MaxScrollTrackerOpts} */\n const defaultOpts = {\n increaseThreshold: 20,\n sessionTimeout: Session.DEFAULT_TIMEOUT,\n // timeZone: undefined,\n // maxScrollMetricIndex: undefined,\n fieldsObj: {},\n // hitFilter: undefined\n };\n\n this.opts = /** @type {MaxScrollTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n this.pagePath = this.getPagePath();\n\n // Binds methods to `this`.\n this.handleScroll = debounce(this.handleScroll.bind(this), 500);\n this.trackerSetOverride = this.trackerSetOverride.bind(this);\n\n // Creates the store and binds storage change events.\n this.store = Store.getOrCreate(\n tracker.get('trackingId'), 'plugins/max-scroll-tracker');\n\n // Creates the session and binds session events.\n this.session = Session.getOrCreate(\n tracker, this.opts.sessionTimeout, this.opts.timeZone);\n\n // Override the built-in tracker.set method to watch for changes.\n MethodChain.add(tracker, 'set', this.trackerSetOverride);\n\n this.listenForMaxScrollChanges();\n }\n\n\n /**\n * Adds a scroll event listener if the max scroll percentage for the\n * current page isn't already at 100%.\n */\n listenForMaxScrollChanges() {\n const maxScrollPercentage = this.getMaxScrollPercentageForCurrentPage();\n if (maxScrollPercentage < 100) {\n window.addEventListener('scroll', this.handleScroll);\n }\n }\n\n\n /**\n * Removes an added scroll listener.\n */\n stopListeningForMaxScrollChanges() {\n window.removeEventListener('scroll', this.handleScroll);\n }\n\n\n /**\n * Handles the scroll event. If the current scroll percentage is greater\n * that the stored scroll event by at least the specified increase threshold,\n * send an event with the increase amount.\n */\n handleScroll() {\n const pageHeight = getPageHeight();\n const scrollPos = window.pageYOffset; // scrollY isn't supported in IE.\n const windowHeight = window.innerHeight;\n\n // Ensure scrollPercentage is an integer between 0 and 100.\n const scrollPercentage = Math.min(100, Math.max(0,\n Math.round(100 * (scrollPos / (pageHeight - windowHeight)))));\n\n // If the max scroll data gets out of the sync with the session data\n // (for whatever reason), clear it.\n const sessionId = this.session.getId();\n if (sessionId != this.store.get().sessionId) {\n this.store.clear();\n this.store.set({sessionId});\n }\n\n // If the session has expired, clear the stored data and don't send any\n // events (since they'd start a new session). Note: this check is needed,\n // in addition to the above check, to handle cases where the session IDs\n // got out of sync, but the session didn't expire.\n if (this.session.isExpired(this.store.get().sessionId)) {\n this.store.clear();\n } else {\n const maxScrollPercentage = this.getMaxScrollPercentageForCurrentPage();\n\n if (scrollPercentage > maxScrollPercentage) {\n if (scrollPercentage == 100 || maxScrollPercentage == 100) {\n this.stopListeningForMaxScrollChanges();\n }\n const increaseAmount = scrollPercentage - maxScrollPercentage;\n if (scrollPercentage == 100 ||\n increaseAmount >= this.opts.increaseThreshold) {\n this.setMaxScrollPercentageForCurrentPage(scrollPercentage);\n this.sendMaxScrollEvent(increaseAmount, scrollPercentage);\n }\n }\n }\n }\n\n /**\n * Detects changes to the tracker object and triggers an update if the page\n * field has changed.\n * @param {function((Object|string), (string|undefined))} originalMethod\n * A reference to the overridden method.\n * @return {function((Object|string), (string|undefined))}\n */\n trackerSetOverride(originalMethod) {\n return (field, value) => {\n originalMethod(field, value);\n\n /** @type {!FieldsObj} */\n const fields = isObject(field) ? field : {[field]: value};\n if (fields.page) {\n const lastPagePath = this.pagePath;\n this.pagePath = this.getPagePath();\n\n if (this.pagePath != lastPagePath) {\n // Since event listeners for the same function are never added twice,\n // we don't need to worry about whether we're already listening. We\n // can just add the event listener again.\n this.listenForMaxScrollChanges();\n }\n }\n };\n }\n\n /**\n * Sends an event for the increased max scroll percentage amount.\n * @param {number} increaseAmount\n * @param {number} scrollPercentage\n */\n sendMaxScrollEvent(increaseAmount, scrollPercentage) {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Max Scroll',\n eventAction: 'increase',\n eventValue: increaseAmount,\n eventLabel: String(scrollPercentage),\n nonInteraction: true,\n };\n\n // If a custom metric was specified, set it equal to the event value.\n if (this.opts.maxScrollMetricIndex) {\n defaultFields['metric' + this.opts.maxScrollMetricIndex] = increaseAmount;\n }\n\n this.tracker.send('event',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Stores the current max scroll percentage for the current page.\n * @param {number} maxScrollPercentage\n */\n setMaxScrollPercentageForCurrentPage(maxScrollPercentage) {\n this.store.set({\n [this.pagePath]: maxScrollPercentage,\n sessionId: this.session.getId(),\n });\n }\n\n /**\n * Gets the stored max scroll percentage for the current page.\n * @return {number}\n */\n getMaxScrollPercentageForCurrentPage() {\n return this.store.get()[this.pagePath] || 0;\n }\n\n /**\n * Gets the page path from the tracker object.\n * @return {number}\n */\n getPagePath() {\n const url = parseUrl(\n this.tracker.get('page') || this.tracker.get('location'));\n return url.pathname + url.search;\n }\n\n /**\n * Removes all event listeners and restores overridden methods.\n */\n remove() {\n this.session.destroy();\n this.stopListeningForMaxScrollChanges();\n MethodChain.remove(this.tracker, 'set', this.trackerSetOverride);\n }\n}\n\n\nprovide('maxScrollTracker', MaxScrollTracker);\n\n\n/**\n * Gets the maximum height of the page including scrollable area.\n * @return {number}\n */\nfunction getPageHeight() {\n const html = document.documentElement;\n const body = document.body;\n return Math.max(html.offsetHeight, html.scrollHeight,\n body.offsetHeight, body.scrollHeight);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {NULL_DIMENSION} from '../constants';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n debounce, isObject, toArray} from '../utilities';\n\n\n/**\n * Declares the MediaQueryList instance cache.\n */\nconst mediaMap = {};\n\n\n/**\n * Class for the `mediaQueryTracker` analytics.js plugin.\n * @implements {MediaQueryTrackerPublicInterface}\n */\nclass MediaQueryTracker {\n /**\n * Registers media query tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.MEDIA_QUERY_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.matchMedia) return;\n\n /** @type {MediaQueryTrackerOpts} */\n const defaultOpts = {\n // definitions: unefined,\n changeTemplate: this.changeTemplate,\n changeTimeout: 1000,\n fieldsObj: {},\n // hitFilter: undefined,\n };\n\n this.opts = /** @type {MediaQueryTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n // Exits early if media query data doesn't exist.\n if (!isObject(this.opts.definitions)) return;\n\n this.opts.definitions = toArray(this.opts.definitions);\n this.tracker = tracker;\n this.changeListeners = [];\n\n this.processMediaQueries();\n }\n\n /**\n * Loops through each media query definition, sets the custom dimenion data,\n * and adds the change listeners.\n */\n processMediaQueries() {\n this.opts.definitions.forEach((definition) => {\n // Only processes definitions with a name and index.\n if (definition.name && definition.dimensionIndex) {\n const mediaName = this.getMatchName(definition);\n this.tracker.set('dimension' + definition.dimensionIndex, mediaName);\n\n this.addChangeListeners(definition);\n }\n });\n }\n\n /**\n * Takes a definition object and return the name of the matching media item.\n * If no match is found, the NULL_DIMENSION value is returned.\n * @param {Object} definition A set of named media queries associated\n * with a single custom dimension.\n * @return {string} The name of the matched media or NULL_DIMENSION.\n */\n getMatchName(definition) {\n let match;\n\n definition.items.forEach((item) => {\n if (getMediaList(item.media).matches) {\n match = item;\n }\n });\n return match ? match.name : NULL_DIMENSION;\n }\n\n /**\n * Adds change listeners to each media query in the definition list.\n * Debounces the changes to prevent unnecessary hits from being sent.\n * @param {Object} definition A set of named media queries associated\n * with a single custom dimension\n */\n addChangeListeners(definition) {\n definition.items.forEach((item) => {\n const mql = getMediaList(item.media);\n const fn = debounce(() => {\n this.handleChanges(definition);\n }, this.opts.changeTimeout);\n\n mql.addListener(fn);\n this.changeListeners.push({mql, fn});\n });\n }\n\n /**\n * Handles changes to the matched media. When the new value differs from\n * the old value, a change event is sent.\n * @param {Object} definition A set of named media queries associated\n * with a single custom dimension\n */\n handleChanges(definition) {\n const newValue = this.getMatchName(definition);\n const oldValue = this.tracker.get('dimension' + definition.dimensionIndex);\n\n if (newValue !== oldValue) {\n this.tracker.set('dimension' + definition.dimensionIndex, newValue);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: definition.name,\n eventAction: 'change',\n eventLabel: this.opts.changeTemplate(oldValue, newValue),\n nonInteraction: true,\n };\n this.tracker.send('event', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n for (let i = 0, listener; listener = this.changeListeners[i]; i++) {\n listener.mql.removeListener(listener.fn);\n }\n }\n\n /**\n * Sets the default formatting of the change event label.\n * This can be overridden by setting the `changeTemplate` option.\n * @param {string} oldValue The value of the media query prior to the change.\n * @param {string} newValue The value of the media query after the change.\n * @return {string} The formatted event label.\n */\n changeTemplate(oldValue, newValue) {\n return oldValue + ' => ' + newValue;\n }\n}\n\n\nprovide('mediaQueryTracker', MediaQueryTracker);\n\n\n/**\n * Accepts a media query and returns a MediaQueryList object.\n * Caches the values to avoid multiple unnecessary instances.\n * @param {string} media A media query value.\n * @return {MediaQueryList} The matched media.\n */\nfunction getMediaList(media) {\n return mediaMap[media] || (mediaMap[media] = window.matchMedia(media));\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {delegate, parseUrl} from 'dom-utils';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n getAttributeFields, withTimeout} from '../utilities';\n\n\n/**\n * Class for the `outboundFormTracker` analytics.js plugin.\n * @implements {OutboundFormTrackerPublicInterface}\n */\nclass OutboundFormTracker {\n /**\n * Registers outbound form tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.OUTBOUND_FORM_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {OutboundFormTrackerOpts} */\n const defaultOpts = {\n formSelector: 'form',\n shouldTrackOutboundForm: this.shouldTrackOutboundForm,\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined\n };\n\n this.opts = /** @type {OutboundFormTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n this.delegate = delegate(document, 'submit', this.opts.formSelector,\n this.handleFormSubmits.bind(this), {composed: true, useCapture: true});\n }\n\n /**\n * Handles all submits on form elements. A form submit is considered outbound\n * if its action attribute starts with http and does not contain\n * location.hostname.\n * When the beacon transport method is not available, the event's default\n * action is prevented and re-emitted after the hit is sent.\n * @param {Event} event The DOM submit event.\n * @param {Element} form The delegated event target.\n */\n handleFormSubmits(event, form) {\n const action = parseUrl(form.action).href;\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Outbound Form',\n eventAction: 'submit',\n eventLabel: action,\n };\n\n if (this.opts.shouldTrackOutboundForm(form, parseUrl)) {\n if (!navigator.sendBeacon) {\n // Stops the submit and waits until the hit is complete (with timeout)\n // for browsers that don't support beacon.\n event.preventDefault();\n defaultFields.hitCallback = withTimeout(function() {\n form.submit();\n });\n }\n\n const userFields = assign({}, this.opts.fieldsObj,\n getAttributeFields(form, this.opts.attributePrefix));\n\n this.tracker.send('event', createFieldsObj(\n defaultFields, userFields,\n this.tracker, this.opts.hitFilter, form, event));\n }\n }\n\n /**\n * Determines whether or not the tracker should send a hit when a form is\n * submitted. By default, forms with an action attribute that starts with\n * \"http\" and doesn't contain the current hostname are tracked.\n * @param {Element} form The form that was submitted.\n * @param {Function} parseUrlFn A cross-browser utility method for url\n * parsing (note: renamed to disambiguate when compiling).\n * @return {boolean} Whether or not the form should be tracked.\n */\n shouldTrackOutboundForm(form, parseUrlFn) {\n const url = parseUrlFn(form.action);\n return url.hostname != location.hostname &&\n url.protocol.slice(0, 4) == 'http';\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n this.delegate.destroy();\n }\n}\n\n\nprovide('outboundFormTracker', OutboundFormTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {delegate, parseUrl} from 'dom-utils';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n getAttributeFields, withTimeout} from '../utilities';\n\n\n/**\n * Class for the `outboundLinkTracker` analytics.js plugin.\n * @implements {OutboundLinkTrackerPublicInterface}\n */\nclass OutboundLinkTracker {\n /**\n * Registers outbound link tracking on a tracker object.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.OUTBOUND_LINK_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {OutboundLinkTrackerOpts} */\n const defaultOpts = {\n events: ['click'],\n linkSelector: 'a, area',\n shouldTrackOutboundLink: this.shouldTrackOutboundLink,\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined,\n };\n\n this.opts = /** @type {OutboundLinkTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Binds methods.\n this.handleLinkInteractions = this.handleLinkInteractions.bind(this);\n\n // Creates a mapping of events to their delegates\n this.delegates = {};\n this.opts.events.forEach((event) => {\n this.delegates[event] = delegate(document, event, this.opts.linkSelector,\n this.handleLinkInteractions, {composed: true, useCapture: true});\n });\n }\n\n /**\n * Handles all interactions on link elements. A link is considered an outbound\n * link if its hostname property does not match location.hostname. When the\n * beacon transport method is not available, the links target is set to\n * \"_blank\" to ensure the hit can be sent.\n * @param {Event} event The DOM click event.\n * @param {Element} link The delegated event target.\n */\n handleLinkInteractions(event, link) {\n if (this.opts.shouldTrackOutboundLink(link, parseUrl)) {\n const href = link.getAttribute('href') || link.getAttribute('xlink:href');\n const url = parseUrl(href);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Outbound Link',\n eventAction: event.type,\n eventLabel: url.href,\n };\n\n /** @type {FieldsObj} */\n const userFields = assign({}, this.opts.fieldsObj,\n getAttributeFields(link, this.opts.attributePrefix));\n\n const fieldsObj = createFieldsObj(defaultFields, userFields,\n this.tracker, this.opts.hitFilter, link, event);\n\n if (!navigator.sendBeacon &&\n linkClickWillUnloadCurrentPage(event, link)) {\n // Adds a new event handler at the last minute to minimize the chances\n // that another event handler for this click will run after this logic.\n const clickHandler = () => {\n window.removeEventListener('click', clickHandler);\n\n // Checks to make sure another event handler hasn't already prevented\n // the default action. If it has the custom redirect isn't needed.\n if (!event.defaultPrevented) {\n // Stops the click and waits until the hit is complete (with\n // timeout) for browsers that don't support beacon.\n event.preventDefault();\n\n const oldHitCallback = fieldsObj.hitCallback;\n fieldsObj.hitCallback = withTimeout(function() {\n if (typeof oldHitCallback == 'function') oldHitCallback();\n location.href = href;\n });\n }\n this.tracker.send('event', fieldsObj);\n };\n window.addEventListener('click', clickHandler);\n } else {\n this.tracker.send('event', fieldsObj);\n }\n }\n }\n\n /**\n * Determines whether or not the tracker should send a hit when a link is\n * clicked. By default links with a hostname property not equal to the current\n * hostname are tracked.\n * @param {Element} link The link that was clicked on.\n * @param {Function} parseUrlFn A cross-browser utility method for url\n * parsing (note: renamed to disambiguate when compiling).\n * @return {boolean} Whether or not the link should be tracked.\n */\n shouldTrackOutboundLink(link, parseUrlFn) {\n const href = link.getAttribute('href') || link.getAttribute('xlink:href');\n const url = parseUrlFn(href);\n return url.hostname != location.hostname &&\n url.protocol.slice(0, 4) == 'http';\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n Object.keys(this.delegates).forEach((key) => {\n this.delegates[key].destroy();\n });\n }\n}\n\n\nprovide('outboundLinkTracker', OutboundLinkTracker);\n\n\n/**\n * Determines if a link click event will cause the current page to upload.\n * Note: most link clicks *will* cause the current page to unload because they\n * initiate a page navigation. The most common reason a link click won't cause\n * the page to unload is if the clicked was to open the link in a new tab.\n * @param {Event} event The DOM event.\n * @param {Element} link The link element clicked on.\n * @return {boolean} True if the current page will be unloaded.\n */\nfunction linkClickWillUnloadCurrentPage(event, link) {\n return !(\n // The event type can be customized; we only care about clicks here.\n event.type != 'click' ||\n // Links with target=\"_blank\" set will open in a new window/tab.\n link.target == '_blank' ||\n // On mac, command clicking will open a link in a new tab. Control\n // clicking does this on windows.\n event.metaKey || event.ctrlKey ||\n // Shift clicking in Chrome/Firefox opens the link in a new window\n // In Safari it adds the URL to a favorites list.\n event.shiftKey ||\n // On Mac, clicking with the option key is used to download a resouce.\n event.altKey ||\n // Middle mouse button clicks (which == 2) are used to open a link\n // in a new tab, and right clicks (which == 3) on Firefox trigger\n // a click event.\n event.which > 1);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {NULL_DIMENSION} from '../constants';\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport Session from '../session';\nimport Store from '../store';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj, deferUntilPluginsLoaded,\n isObject, now, uuid} from '../utilities';\n\n\nconst HIDDEN = 'hidden';\nconst VISIBLE = 'visible';\nconst PAGE_ID = uuid();\nconst SECONDS = 1000;\n\n\n/**\n * Class for the `pageVisibilityTracker` analytics.js plugin.\n * @implements {PageVisibilityTrackerPublicInterface}\n */\nclass PageVisibilityTracker {\n /**\n * Registers outbound link tracking on tracker object.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.PAGE_VISIBILITY_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!document.visibilityState) return;\n\n /** @type {PageVisibilityTrackerOpts} */\n const defaultOpts = {\n sessionTimeout: Session.DEFAULT_TIMEOUT,\n visibleThreshold: 5 * SECONDS,\n // timeZone: undefined,\n sendInitialPageview: false,\n // pageLoadsMetricIndex: undefined,\n // visibleMetricIndex: undefined,\n fieldsObj: {},\n // hitFilter: undefined\n };\n\n this.opts = /** @type {PageVisibilityTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n this.lastPageState = document.visibilityState;\n this.visibleThresholdTimeout_ = null;\n this.isInitialPageviewSent_ = false;\n\n // Binds methods to `this`.\n this.trackerSetOverride = this.trackerSetOverride.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleWindowUnload = this.handleWindowUnload.bind(this);\n this.handleExternalStoreSet = this.handleExternalStoreSet.bind(this);\n\n // Creates the store and binds storage change events.\n this.store = Store.getOrCreate(\n tracker.get('trackingId'), 'plugins/page-visibility-tracker');\n this.store.on('externalSet', this.handleExternalStoreSet);\n\n // Creates the session and binds session events.\n this.session = Session.getOrCreate(\n tracker, this.opts.sessionTimeout, this.opts.timeZone);\n\n // Override the built-in tracker.set method to watch for changes.\n MethodChain.add(tracker, 'set', this.trackerSetOverride);\n\n window.addEventListener('unload', this.handleWindowUnload);\n document.addEventListener('visibilitychange', this.handleChange);\n\n // Postpone sending any hits until the next call stack, which allows all\n // autotrack plugins to be required sync before any hits are sent.\n deferUntilPluginsLoaded(this.tracker, () => {\n if (document.visibilityState == VISIBLE) {\n if (this.opts.sendInitialPageview) {\n this.sendPageview({isPageLoad: true});\n this.isInitialPageviewSent_ = true;\n }\n this.store.set(/** @type {PageVisibilityStoreData} */ ({\n time: now(),\n state: VISIBLE,\n pageId: PAGE_ID,\n sessionId: this.session.getId(),\n }));\n } else {\n if (this.opts.sendInitialPageview && this.opts.pageLoadsMetricIndex) {\n this.sendPageLoad();\n }\n }\n });\n }\n\n /**\n * Inspects the last visibility state change data and determines if a\n * visibility event needs to be tracked based on the current visibility\n * state and whether or not the session has expired. If the session has\n * expired, a change to `visible` will trigger an additional pageview.\n * This method also sends as the event value (and optionally a custom metric)\n * the elapsed time between this event and the previously reported change\n * in the same session, allowing you to more accurately determine when users\n * were actually looking at your page versus when it was in the background.\n */\n handleChange() {\n if (!(document.visibilityState == VISIBLE ||\n document.visibilityState == HIDDEN)) {\n return;\n }\n\n const lastStoredChange = this.getAndValidateChangeData();\n\n /** @type {PageVisibilityStoreData} */\n const change = {\n time: now(),\n state: document.visibilityState,\n pageId: PAGE_ID,\n sessionId: this.session.getId(),\n };\n\n // If the visibilityState has changed to visible and the initial pageview\n // has not been sent (and the `sendInitialPageview` option is `true`).\n // Send the initial pageview now.\n if (document.visibilityState == VISIBLE &&\n this.opts.sendInitialPageview && !this.isInitialPageviewSent_) {\n this.sendPageview();\n this.isInitialPageviewSent_ = true;\n }\n\n // If the visibilityState has changed to hidden, clear any scheduled\n // pageviews waiting for the visibleThreshold timeout.\n if (document.visibilityState == HIDDEN && this.visibleThresholdTimeout_) {\n clearTimeout(this.visibleThresholdTimeout_);\n }\n\n if (this.session.isExpired(lastStoredChange.sessionId)) {\n this.store.clear();\n if (this.lastPageState == HIDDEN &&\n document.visibilityState == VISIBLE) {\n // If the session has expired, changes from hidden to visible should\n // be considered a new pageview rather than a visibility event.\n // This behavior ensures all sessions contain a pageview so\n // session-level page dimensions and metrics (e.g. ga:landingPagePath\n // and ga:entrances) are correct.\n // Also, in order to prevent false positives, we add a small timeout\n // that is cleared if the visibilityState changes to hidden shortly\n // after the change to visible. This can happen if a user is quickly\n // switching through their open tabs but not actually interacting with\n // and of them. It can also happen when a user goes to a tab just to\n // immediately close it. Such cases should not be considered pageviews.\n clearTimeout(this.visibleThresholdTimeout_);\n this.visibleThresholdTimeout_ = setTimeout(() => {\n this.store.set(change);\n this.sendPageview({hitTime: change.time});\n }, this.opts.visibleThreshold);\n }\n } else {\n if (lastStoredChange.pageId == PAGE_ID &&\n lastStoredChange.state == VISIBLE) {\n this.sendPageVisibilityEvent(lastStoredChange);\n }\n this.store.set(change);\n }\n\n this.lastPageState = document.visibilityState;\n }\n\n /**\n * Retroactively updates the stored change data in cases where it's known to\n * be out of sync.\n * This plugin keeps track of each visiblity change and stores the last one\n * in localStorage. LocalStorage is used to handle situations where the user\n * has multiple page open at the same time and we don't want to\n * double-report page visibility in those cases.\n * However, a problem can occur if a user closes a page when one or more\n * visible pages are still open. In such cases it's impossible to know\n * which of the remaining pages the user will interact with next.\n * To solve this problem we wait for the next change on any page and then\n * retroactively update the stored data to reflect the current page as being\n * the page on which the last change event occured and measure visibility\n * from that point.\n * @return {!PageVisibilityStoreData}\n */\n getAndValidateChangeData() {\n const lastStoredChange =\n /** @type {PageVisibilityStoreData} */ (this.store.get());\n\n if (this.lastPageState == VISIBLE &&\n lastStoredChange.state == HIDDEN &&\n lastStoredChange.pageId != PAGE_ID) {\n lastStoredChange.state = VISIBLE;\n lastStoredChange.pageId = PAGE_ID;\n this.store.set(lastStoredChange);\n }\n return lastStoredChange;\n }\n\n /**\n * Sends a Page Visibility event to track the time this page was in the\n * visible state (assuming it was in that state long enough to meet the\n * threshold).\n * @param {!PageVisibilityStoreData} lastStoredChange\n * @param {{hitTime: (number|undefined)}=} param1\n * - hitTime: A hit timestap used to help ensure original order in cases\n * where the send is delayed.\n */\n sendPageVisibilityEvent(lastStoredChange, {hitTime} = {}) {\n const delta = this.getTimeSinceLastStoredChange(\n lastStoredChange, {hitTime});\n\n // If the detla is greater than the visibileThreshold, report it.\n if (delta && delta >= this.opts.visibleThreshold) {\n const deltaInSeconds = Math.round(delta / SECONDS);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n nonInteraction: true,\n eventCategory: 'Page Visibility',\n eventAction: 'track',\n eventValue: deltaInSeconds,\n eventLabel: NULL_DIMENSION,\n };\n\n if (hitTime) {\n defaultFields.queueTime = now() - hitTime;\n }\n\n // If a custom metric was specified, set it equal to the event value.\n if (this.opts.visibleMetricIndex) {\n defaultFields['metric' + this.opts.visibleMetricIndex] = deltaInSeconds;\n }\n\n this.tracker.send('event',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n }\n\n /**\n * Sends a page load event.\n */\n sendPageLoad() {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Page Visibility',\n eventAction: 'page load',\n eventLabel: NULL_DIMENSION,\n ['metric' + this.opts.pageLoadsMetricIndex]: 1,\n nonInteraction: true,\n };\n this.tracker.send('event',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Sends a pageview, optionally calculating an offset if hitTime is passed.\n * @param {{\n * hitTime: (number|undefined),\n * isPageLoad: (boolean|undefined)\n * }=} param1\n * hitTime: The timestamp of the current hit.\n * isPageLoad: True if this pageview was also a page load.\n */\n sendPageview({hitTime, isPageLoad} = {}) {\n /** @type {FieldsObj} */\n const defaultFields = {transport: 'beacon'};\n if (hitTime) {\n defaultFields.queueTime = now() - hitTime;\n }\n if (isPageLoad && this.opts.pageLoadsMetricIndex) {\n defaultFields['metric' + this.opts.pageLoadsMetricIndex] = 1;\n }\n\n this.tracker.send('pageview',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Detects changes to the tracker object and triggers an update if the page\n * field has changed.\n * @param {function((Object|string), (string|undefined))} originalMethod\n * A reference to the overridden method.\n * @return {function((Object|string), (string|undefined))}\n */\n trackerSetOverride(originalMethod) {\n return (field, value) => {\n /** @type {!FieldsObj} */\n const fields = isObject(field) ? field : {[field]: value};\n if (fields.page && fields.page !== this.tracker.get('page')) {\n if (this.lastPageState == VISIBLE) {\n this.handleChange();\n }\n }\n originalMethod(field, value);\n };\n }\n\n /**\n * Calculates the time since the last visibility change event in the current\n * session. If the session has expired the reported time is zero.\n * @param {PageVisibilityStoreData} lastStoredChange\n * @param {{hitTime: (number|undefined)}=} param1\n * hitTime: The time of the current hit (defaults to now).\n * @return {number} The time (in ms) since the last change.\n */\n getTimeSinceLastStoredChange(lastStoredChange, {hitTime} = {}) {\n return lastStoredChange.time ?\n (hitTime || now()) - lastStoredChange.time : 0;\n }\n\n /**\n * Handles responding to the `storage` event.\n * The code on this page needs to be informed when other tabs or windows are\n * updating the stored page visibility state data. This method checks to see\n * if a hidden state is stored when there are still visible tabs open, which\n * can happen if multiple windows are open at the same time.\n * @param {PageVisibilityStoreData} newData\n * @param {PageVisibilityStoreData} oldData\n */\n handleExternalStoreSet(newData, oldData) {\n // If the change times are the same, then the previous write only\n // updated the active page ID. It didn't enter a new state and thus no\n // hits should be sent.\n if (newData.time == oldData.time) return;\n\n // Page Visibility events must be sent by the tracker on the page\n // where the original event occurred. So if a change happens on another\n // page, but this page is where the previous change event occurred, then\n // this page is the one that needs to send the event (so all dimension\n // data is correct).\n if (oldData.pageId == PAGE_ID &&\n oldData.state == VISIBLE &&\n !this.session.isExpired(oldData.sessionId)) {\n this.sendPageVisibilityEvent(oldData, {hitTime: newData.time});\n }\n }\n\n /**\n * Handles responding to the `unload` event.\n * Since some browsers don't emit a `visibilitychange` event in all cases\n * where a page might be unloaded, it's necessary to hook into the `unload`\n * event to ensure the correct state is always stored.\n */\n handleWindowUnload() {\n // If the stored visibility state isn't hidden when the unload event\n // fires, it means the visibilitychange event didn't fire as the document\n // was being unloaded, so we invoke it manually.\n if (this.lastPageState != HIDDEN) {\n this.handleChange();\n }\n }\n\n /**\n * Removes all event listeners and restores overridden methods.\n */\n remove() {\n this.store.destroy();\n this.session.destroy();\n MethodChain.remove(this.tracker, 'set', this.trackerSetOverride);\n window.removeEventListener('unload', this.handleWindowUnload);\n document.removeEventListener('visibilitychange', this.handleChange);\n }\n}\n\n\nprovide('pageVisibilityTracker', PageVisibilityTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj} from '../utilities';\n\n\n/**\n * Class for the `socialWidgetTracker` analytics.js plugin.\n * @implements {SocialWidgetTrackerPublicInterface}\n */\nclass SocialWidgetTracker {\n /**\n * Registers social tracking on tracker object.\n * Supports both declarative social tracking via HTML attributes as well as\n * tracking for social events when using official Twitter or Facebook widgets.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.SOCIAL_WIDGET_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {SocialWidgetTrackerOpts} */\n const defaultOpts = {\n fieldsObj: {},\n hitFilter: null,\n };\n\n this.opts = /** @type {SocialWidgetTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Binds methods to `this`.\n this.addWidgetListeners = this.addWidgetListeners.bind(this);\n this.addTwitterEventHandlers = this.addTwitterEventHandlers.bind(this);\n this.handleTweetEvents = this.handleTweetEvents.bind(this);\n this.handleFollowEvents = this.handleFollowEvents.bind(this);\n this.handleLikeEvents = this.handleLikeEvents.bind(this);\n this.handleUnlikeEvents = this.handleUnlikeEvents.bind(this);\n\n if (document.readyState != 'complete') {\n // Adds the widget listeners after the window's `load` event fires.\n // If loading widgets using the officially recommended snippets, they\n // will be available at `window.load`. If not users can call the\n // `addWidgetListeners` method manually.\n window.addEventListener('load', this.addWidgetListeners);\n } else {\n this.addWidgetListeners();\n }\n }\n\n\n /**\n * Invokes the methods to add Facebook and Twitter widget event listeners.\n * Ensures the respective global namespaces are present before adding.\n */\n addWidgetListeners() {\n if (window.FB) this.addFacebookEventHandlers();\n if (window.twttr) this.addTwitterEventHandlers();\n }\n\n /**\n * Adds event handlers for the \"tweet\" and \"follow\" events emitted by the\n * official tweet and follow buttons. Note: this does not capture tweet or\n * follow events emitted by other Twitter widgets (tweet, timeline, etc.).\n */\n addTwitterEventHandlers() {\n try {\n window.twttr.ready(() => {\n window.twttr.events.bind('tweet', this.handleTweetEvents);\n window.twttr.events.bind('follow', this.handleFollowEvents);\n });\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Removes event handlers for the \"tweet\" and \"follow\" events emitted by the\n * official tweet and follow buttons.\n */\n removeTwitterEventHandlers() {\n try {\n window.twttr.ready(() => {\n window.twttr.events.unbind('tweet', this.handleTweetEvents);\n window.twttr.events.unbind('follow', this.handleFollowEvents);\n });\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Adds event handlers for the \"like\" and \"unlike\" events emitted by the\n * official Facebook like button.\n */\n addFacebookEventHandlers() {\n try {\n window.FB.Event.subscribe('edge.create', this.handleLikeEvents);\n window.FB.Event.subscribe('edge.remove', this.handleUnlikeEvents);\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Removes event handlers for the \"like\" and \"unlike\" events emitted by the\n * official Facebook like button.\n */\n removeFacebookEventHandlers() {\n try {\n window.FB.Event.unsubscribe('edge.create', this.handleLikeEvents);\n window.FB.Event.unsubscribe('edge.remove', this.handleUnlikeEvents);\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Handles `tweet` events emitted by the Twitter JS SDK.\n * @param {TwttrEvent} event The Twitter event object passed to the handler.\n */\n handleTweetEvents(event) {\n // Ignores tweets from widgets that aren't the tweet button.\n if (event.region != 'tweet') return;\n\n const url = event.data.url || event.target.getAttribute('data-url') ||\n location.href;\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Twitter',\n socialAction: 'tweet',\n socialTarget: url,\n };\n this.tracker.send('social',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter, event.target, event));\n }\n\n /**\n * Handles `follow` events emitted by the Twitter JS SDK.\n * @param {TwttrEvent} event The Twitter event object passed to the handler.\n */\n handleFollowEvents(event) {\n // Ignore follows from widgets that aren't the follow button.\n if (event.region != 'follow') return;\n\n const screenName = event.data.screen_name ||\n event.target.getAttribute('data-screen-name');\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Twitter',\n socialAction: 'follow',\n socialTarget: screenName,\n };\n this.tracker.send('social',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter, event.target, event));\n }\n\n /**\n * Handles `like` events emitted by the Facebook JS SDK.\n * @param {string} url The URL corresponding to the like event.\n */\n handleLikeEvents(url) {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Facebook',\n socialAction: 'like',\n socialTarget: url,\n };\n this.tracker.send('social', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Handles `unlike` events emitted by the Facebook JS SDK.\n * @param {string} url The URL corresponding to the unlike event.\n */\n handleUnlikeEvents(url) {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Facebook',\n socialAction: 'unlike',\n socialTarget: url,\n };\n this.tracker.send('social', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n window.removeEventListener('load', this.addWidgetListeners);\n this.removeFacebookEventHandlers();\n this.removeTwitterEventHandlers();\n }\n}\n\n\nprovide('socialWidgetTracker', SocialWidgetTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj} from '../utilities';\n\n\n/**\n * Class for the `urlChangeTracker` analytics.js plugin.\n * @implements {UrlChangeTrackerPublicInterface}\n */\nclass UrlChangeTracker {\n /**\n * Adds handler for the history API methods\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.URL_CHANGE_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!history.pushState || !window.addEventListener) return;\n\n /** @type {UrlChangeTrackerOpts} */\n const defaultOpts = {\n shouldTrackUrlChange: this.shouldTrackUrlChange,\n trackReplaceState: false,\n fieldsObj: {},\n hitFilter: null,\n };\n\n this.opts = /** @type {UrlChangeTrackerOpts} */ (assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Sets the initial page field.\n // Don't set this on the tracker yet so campaign data can be retreived\n // from the location field.\n this.path = getPath();\n\n // Binds methods.\n this.pushStateOverride = this.pushStateOverride.bind(this);\n this.replaceStateOverride = this.replaceStateOverride.bind(this);\n this.handlePopState = this.handlePopState.bind(this);\n\n // Watches for history changes.\n MethodChain.add(history, 'pushState', this.pushStateOverride);\n MethodChain.add(history, 'replaceState', this.replaceStateOverride);\n window.addEventListener('popstate', this.handlePopState);\n }\n\n /**\n * Handles invocations of the native `history.pushState` and calls\n * `handleUrlChange()` indicating that the history updated.\n * @param {!Function} originalMethod A reference to the overridden method.\n * @return {!Function}\n */\n pushStateOverride(originalMethod) {\n return (...args) => {\n originalMethod(...args);\n this.handleUrlChange(true);\n };\n }\n\n /**\n * Handles invocations of the native `history.replaceState` and calls\n * `handleUrlChange()` indicating that history was replaced.\n * @param {!Function} originalMethod A reference to the overridden method.\n * @return {!Function}\n */\n replaceStateOverride(originalMethod) {\n return (...args) => {\n originalMethod(...args);\n this.handleUrlChange(false);\n };\n }\n\n /**\n * Handles responding to the popstate event and calls\n * `handleUrlChange()` indicating that history was updated.\n */\n handlePopState() {\n this.handleUrlChange(true);\n }\n\n /**\n * Updates the page and title fields on the tracker and sends a pageview\n * if a new history entry was created.\n * @param {boolean} historyDidUpdate True if the history was changed via\n * `pushState()` or the `popstate` event. False if the history was just\n * modified via `replaceState()`.\n */\n handleUrlChange(historyDidUpdate) {\n // Calls the update logic asychronously to help ensure that app logic\n // responding to the URL change happens prior to this.\n setTimeout(() => {\n const oldPath = this.path;\n const newPath = getPath();\n\n if (oldPath != newPath &&\n this.opts.shouldTrackUrlChange.call(this, newPath, oldPath)) {\n this.path = newPath;\n this.tracker.set({\n page: newPath,\n title: document.title,\n });\n\n if (historyDidUpdate || this.opts.trackReplaceState) {\n /** @type {FieldsObj} */\n const defaultFields = {transport: 'beacon'};\n this.tracker.send('pageview', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n }\n }, 0);\n }\n\n /**\n * Determines whether or not the tracker should send a hit with the new page\n * data. This default implementation can be overrided in the config options.\n * @param {string} newPath The path after the URL change.\n * @param {string} oldPath The path prior to the URL change.\n * @return {boolean} Whether or not the URL change should be tracked.\n */\n shouldTrackUrlChange(newPath, oldPath) {\n return !!(newPath && oldPath);\n }\n\n /**\n * Removes all event listeners and restores overridden methods.\n */\n remove() {\n MethodChain.remove(history, 'pushState', this.pushStateOverride);\n MethodChain.remove(history, 'replaceState', this.replaceStateOverride);\n window.removeEventListener('popstate', this.handlePopState);\n }\n}\n\n\nprovide('urlChangeTracker', UrlChangeTracker);\n\n\n/**\n * @return {string} The path value of the current URL.\n */\nfunction getPath() {\n return location.pathname + location.search;\n}\n"]}
@@ -1,1264 +0,0 @@
1
- Software License Agreement
2
- ==========================
3
-
4
- CKEditor - The text editor for Internet - http://ckeditor.com
5
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
6
-
7
- Licensed under the terms of any of the following licenses at your
8
- choice:
9
-
10
- - GNU General Public License Version 2 or later (the "GPL")
11
- http://www.gnu.org/licenses/gpl.html
12
- (See Appendix A)
13
-
14
- - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
- http://www.gnu.org/licenses/lgpl.html
16
- (See Appendix B)
17
-
18
- - Mozilla Public License Version 1.1 or later (the "MPL")
19
- http://www.mozilla.org/MPL/MPL-1.1.html
20
- (See Appendix C)
21
-
22
- You are not required to, but if you want to explicitly declare the
23
- license you have chosen to be bound to when using, reproducing,
24
- modifying and distributing this software, just include a text file
25
- titled "legal.txt" in your version of this software, indicating your
26
- license choice. In any case, your choice will not restrict any
27
- recipient of your version of this software to use, reproduce, modify
28
- and distribute this software under any of the above licenses.
29
-
30
- Sources of Intellectual Property Included in CKEditor
31
- -----------------------------------------------------
32
-
33
- Where not otherwise indicated, all CKEditor content is authored by
34
- CKSource engineers and consists of CKSource-owned intellectual
35
- property. In some specific instances, CKEditor will incorporate work
36
- done by developers outside of CKSource with their express permission.
37
-
38
- Trademarks
39
- ----------
40
-
41
- CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
42
- and product names are trademarks, registered trademarks or service
43
- marks of their respective holders.
44
-
45
- ---
46
-
47
- Appendix A: The GPL License
48
- ---------------------------
49
-
50
- GNU GENERAL PUBLIC LICENSE
51
- Version 2, June 1991
52
-
53
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
54
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
55
- Everyone is permitted to copy and distribute verbatim copies
56
- of this license document, but changing it is not allowed.
57
-
58
- Preamble
59
-
60
- The licenses for most software are designed to take away your
61
- freedom to share and change it. By contrast, the GNU General Public
62
- License is intended to guarantee your freedom to share and change free
63
- software-to make sure the software is free for all its users. This
64
- General Public License applies to most of the Free Software
65
- Foundation's software and to any other program whose authors commit to
66
- using it. (Some other Free Software Foundation software is covered by
67
- the GNU Lesser General Public License instead.) You can apply it to
68
- your programs, too.
69
-
70
- When we speak of free software, we are referring to freedom, not
71
- price. Our General Public Licenses are designed to make sure that you
72
- have the freedom to distribute copies of free software (and charge for
73
- this service if you wish), that you receive source code or can get it
74
- if you want it, that you can change the software or use pieces of it
75
- in new free programs; and that you know you can do these things.
76
-
77
- To protect your rights, we need to make restrictions that forbid
78
- anyone to deny you these rights or to ask you to surrender the rights.
79
- These restrictions translate to certain responsibilities for you if you
80
- distribute copies of the software, or if you modify it.
81
-
82
- For example, if you distribute copies of such a program, whether
83
- gratis or for a fee, you must give the recipients all the rights that
84
- you have. You must make sure that they, too, receive or can get the
85
- source code. And you must show them these terms so they know their
86
- rights.
87
-
88
- We protect your rights with two steps: (1) copyright the software, and
89
- (2) offer you this license which gives you legal permission to copy,
90
- distribute and/or modify the software.
91
-
92
- Also, for each author's protection and ours, we want to make certain
93
- that everyone understands that there is no warranty for this free
94
- software. If the software is modified by someone else and passed on, we
95
- want its recipients to know that what they have is not the original, so
96
- that any problems introduced by others will not reflect on the original
97
- authors' reputations.
98
-
99
- Finally, any free program is threatened constantly by software
100
- patents. We wish to avoid the danger that redistributors of a free
101
- program will individually obtain patent licenses, in effect making the
102
- program proprietary. To prevent this, we have made it clear that any
103
- patent must be licensed for everyone's free use or not licensed at all.
104
-
105
- The precise terms and conditions for copying, distribution and
106
- modification follow.
107
-
108
- GNU GENERAL PUBLIC LICENSE
109
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
110
-
111
- 0. This License applies to any program or other work which contains
112
- a notice placed by the copyright holder saying it may be distributed
113
- under the terms of this General Public License. The "Program", below,
114
- refers to any such program or work, and a "work based on the Program"
115
- means either the Program or any derivative work under copyright law:
116
- that is to say, a work containing the Program or a portion of it,
117
- either verbatim or with modifications and/or translated into another
118
- language. (Hereinafter, translation is included without limitation in
119
- the term "modification".) Each licensee is addressed as "you".
120
-
121
- Activities other than copying, distribution and modification are not
122
- covered by this License; they are outside its scope. The act of
123
- running the Program is not restricted, and the output from the Program
124
- is covered only if its contents constitute a work based on the
125
- Program (independent of having been made by running the Program).
126
- Whether that is true depends on what the Program does.
127
-
128
- 1. You may copy and distribute verbatim copies of the Program's
129
- source code as you receive it, in any medium, provided that you
130
- conspicuously and appropriately publish on each copy an appropriate
131
- copyright notice and disclaimer of warranty; keep intact all the
132
- notices that refer to this License and to the absence of any warranty;
133
- and give any other recipients of the Program a copy of this License
134
- along with the Program.
135
-
136
- You may charge a fee for the physical act of transferring a copy, and
137
- you may at your option offer warranty protection in exchange for a fee.
138
-
139
- 2. You may modify your copy or copies of the Program or any portion
140
- of it, thus forming a work based on the Program, and copy and
141
- distribute such modifications or work under the terms of Section 1
142
- above, provided that you also meet all of these conditions:
143
-
144
- a) You must cause the modified files to carry prominent notices
145
- stating that you changed the files and the date of any change.
146
-
147
- b) You must cause any work that you distribute or publish, that in
148
- whole or in part contains or is derived from the Program or any
149
- part thereof, to be licensed as a whole at no charge to all third
150
- parties under the terms of this License.
151
-
152
- c) If the modified program normally reads commands interactively
153
- when run, you must cause it, when started running for such
154
- interactive use in the most ordinary way, to print or display an
155
- announcement including an appropriate copyright notice and a
156
- notice that there is no warranty (or else, saying that you provide
157
- a warranty) and that users may redistribute the program under
158
- these conditions, and telling the user how to view a copy of this
159
- License. (Exception: if the Program itself is interactive but
160
- does not normally print such an announcement, your work based on
161
- the Program is not required to print an announcement.)
162
-
163
- These requirements apply to the modified work as a whole. If
164
- identifiable sections of that work are not derived from the Program,
165
- and can be reasonably considered independent and separate works in
166
- themselves, then this License, and its terms, do not apply to those
167
- sections when you distribute them as separate works. But when you
168
- distribute the same sections as part of a whole which is a work based
169
- on the Program, the distribution of the whole must be on the terms of
170
- this License, whose permissions for other licensees extend to the
171
- entire whole, and thus to each and every part regardless of who wrote it.
172
-
173
- Thus, it is not the intent of this section to claim rights or contest
174
- your rights to work written entirely by you; rather, the intent is to
175
- exercise the right to control the distribution of derivative or
176
- collective works based on the Program.
177
-
178
- In addition, mere aggregation of another work not based on the Program
179
- with the Program (or with a work based on the Program) on a volume of
180
- a storage or distribution medium does not bring the other work under
181
- the scope of this License.
182
-
183
- 3. You may copy and distribute the Program (or a work based on it,
184
- under Section 2) in object code or executable form under the terms of
185
- Sections 1 and 2 above provided that you also do one of the following:
186
-
187
- a) Accompany it with the complete corresponding machine-readable
188
- source code, which must be distributed under the terms of Sections
189
- 1 and 2 above on a medium customarily used for software interchange; or,
190
-
191
- b) Accompany it with a written offer, valid for at least three
192
- years, to give any third party, for a charge no more than your
193
- cost of physically performing source distribution, a complete
194
- machine-readable copy of the corresponding source code, to be
195
- distributed under the terms of Sections 1 and 2 above on a medium
196
- customarily used for software interchange; or,
197
-
198
- c) Accompany it with the information you received as to the offer
199
- to distribute corresponding source code. (This alternative is
200
- allowed only for noncommercial distribution and only if you
201
- received the program in object code or executable form with such
202
- an offer, in accord with Subsection b above.)
203
-
204
- The source code for a work means the preferred form of the work for
205
- making modifications to it. For an executable work, complete source
206
- code means all the source code for all modules it contains, plus any
207
- associated interface definition files, plus the scripts used to
208
- control compilation and installation of the executable. However, as a
209
- special exception, the source code distributed need not include
210
- anything that is normally distributed (in either source or binary
211
- form) with the major components (compiler, kernel, and so on) of the
212
- operating system on which the executable runs, unless that component
213
- itself accompanies the executable.
214
-
215
- If distribution of executable or object code is made by offering
216
- access to copy from a designated place, then offering equivalent
217
- access to copy the source code from the same place counts as
218
- distribution of the source code, even though third parties are not
219
- compelled to copy the source along with the object code.
220
-
221
- 4. You may not copy, modify, sublicense, or distribute the Program
222
- except as expressly provided under this License. Any attempt
223
- otherwise to copy, modify, sublicense or distribute the Program is
224
- void, and will automatically terminate your rights under this License.
225
- However, parties who have received copies, or rights, from you under
226
- this License will not have their licenses terminated so long as such
227
- parties remain in full compliance.
228
-
229
- 5. You are not required to accept this License, since you have not
230
- signed it. However, nothing else grants you permission to modify or
231
- distribute the Program or its derivative works. These actions are
232
- prohibited by law if you do not accept this License. Therefore, by
233
- modifying or distributing the Program (or any work based on the
234
- Program), you indicate your acceptance of this License to do so, and
235
- all its terms and conditions for copying, distributing or modifying
236
- the Program or works based on it.
237
-
238
- 6. Each time you redistribute the Program (or any work based on the
239
- Program), the recipient automatically receives a license from the
240
- original licensor to copy, distribute or modify the Program subject to
241
- these terms and conditions. You may not impose any further
242
- restrictions on the recipients' exercise of the rights granted herein.
243
- You are not responsible for enforcing compliance by third parties to
244
- this License.
245
-
246
- 7. If, as a consequence of a court judgment or allegation of patent
247
- infringement or for any other reason (not limited to patent issues),
248
- conditions are imposed on you (whether by court order, agreement or
249
- otherwise) that contradict the conditions of this License, they do not
250
- excuse you from the conditions of this License. If you cannot
251
- distribute so as to satisfy simultaneously your obligations under this
252
- License and any other pertinent obligations, then as a consequence you
253
- may not distribute the Program at all. For example, if a patent
254
- license would not permit royalty-free redistribution of the Program by
255
- all those who receive copies directly or indirectly through you, then
256
- the only way you could satisfy both it and this License would be to
257
- refrain entirely from distribution of the Program.
258
-
259
- If any portion of this section is held invalid or unenforceable under
260
- any particular circumstance, the balance of the section is intended to
261
- apply and the section as a whole is intended to apply in other
262
- circumstances.
263
-
264
- It is not the purpose of this section to induce you to infringe any
265
- patents or other property right claims or to contest validity of any
266
- such claims; this section has the sole purpose of protecting the
267
- integrity of the free software distribution system, which is
268
- implemented by public license practices. Many people have made
269
- generous contributions to the wide range of software distributed
270
- through that system in reliance on consistent application of that
271
- system; it is up to the author/donor to decide if he or she is willing
272
- to distribute software through any other system and a licensee cannot
273
- impose that choice.
274
-
275
- This section is intended to make thoroughly clear what is believed to
276
- be a consequence of the rest of this License.
277
-
278
- 8. If the distribution and/or use of the Program is restricted in
279
- certain countries either by patents or by copyrighted interfaces, the
280
- original copyright holder who places the Program under this License
281
- may add an explicit geographical distribution limitation excluding
282
- those countries, so that distribution is permitted only in or among
283
- countries not thus excluded. In such case, this License incorporates
284
- the limitation as if written in the body of this License.
285
-
286
- 9. The Free Software Foundation may publish revised and/or new versions
287
- of the General Public License from time to time. Such new versions will
288
- be similar in spirit to the present version, but may differ in detail to
289
- address new problems or concerns.
290
-
291
- Each version is given a distinguishing version number. If the Program
292
- specifies a version number of this License which applies to it and "any
293
- later version", you have the option of following the terms and conditions
294
- either of that version or of any later version published by the Free
295
- Software Foundation. If the Program does not specify a version number of
296
- this License, you may choose any version ever published by the Free Software
297
- Foundation.
298
-
299
- 10. If you wish to incorporate parts of the Program into other free
300
- programs whose distribution conditions are different, write to the author
301
- to ask for permission. For software which is copyrighted by the Free
302
- Software Foundation, write to the Free Software Foundation; we sometimes
303
- make exceptions for this. Our decision will be guided by the two goals
304
- of preserving the free status of all derivatives of our free software and
305
- of promoting the sharing and reuse of software generally.
306
-
307
- NO WARRANTY
308
-
309
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
310
- FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
311
- OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
312
- PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
313
- OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
314
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
315
- TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
316
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
317
- REPAIR OR CORRECTION.
318
-
319
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
320
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
321
- REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
322
- INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
323
- OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
324
- TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
325
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
326
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
327
- POSSIBILITY OF SUCH DAMAGES.
328
-
329
- END OF TERMS AND CONDITIONS
330
-
331
-
332
- Appendix B: The LGPL License
333
- ----------------------------
334
-
335
- GNU LESSER GENERAL PUBLIC LICENSE
336
- Version 2.1, February 1999
337
-
338
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
339
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
340
- Everyone is permitted to copy and distribute verbatim copies
341
- of this license document, but changing it is not allowed.
342
-
343
- [This is the first released version of the Lesser GPL. It also counts
344
- as the successor of the GNU Library Public License, version 2, hence
345
- the version number 2.1.]
346
-
347
- Preamble
348
-
349
- The licenses for most software are designed to take away your
350
- freedom to share and change it. By contrast, the GNU General Public
351
- Licenses are intended to guarantee your freedom to share and change
352
- free software-to make sure the software is free for all its users.
353
-
354
- This license, the Lesser General Public License, applies to some
355
- specially designated software packages-typically libraries-of the
356
- Free Software Foundation and other authors who decide to use it. You
357
- can use it too, but we suggest you first think carefully about whether
358
- this license or the ordinary General Public License is the better
359
- strategy to use in any particular case, based on the explanations below.
360
-
361
- When we speak of free software, we are referring to freedom of use,
362
- not price. Our General Public Licenses are designed to make sure that
363
- you have the freedom to distribute copies of free software (and charge
364
- for this service if you wish); that you receive source code or can get
365
- it if you want it; that you can change the software and use pieces of
366
- it in new free programs; and that you are informed that you can do
367
- these things.
368
-
369
- To protect your rights, we need to make restrictions that forbid
370
- distributors to deny you these rights or to ask you to surrender these
371
- rights. These restrictions translate to certain responsibilities for
372
- you if you distribute copies of the library or if you modify it.
373
-
374
- For example, if you distribute copies of the library, whether gratis
375
- or for a fee, you must give the recipients all the rights that we gave
376
- you. You must make sure that they, too, receive or can get the source
377
- code. If you link other code with the library, you must provide
378
- complete object files to the recipients, so that they can relink them
379
- with the library after making changes to the library and recompiling
380
- it. And you must show them these terms so they know their rights.
381
-
382
- We protect your rights with a two-step method: (1) we copyright the
383
- library, and (2) we offer you this license, which gives you legal
384
- permission to copy, distribute and/or modify the library.
385
-
386
- To protect each distributor, we want to make it very clear that
387
- there is no warranty for the free library. Also, if the library is
388
- modified by someone else and passed on, the recipients should know
389
- that what they have is not the original version, so that the original
390
- author's reputation will not be affected by problems that might be
391
- introduced by others.
392
-
393
- Finally, software patents pose a constant threat to the existence of
394
- any free program. We wish to make sure that a company cannot
395
- effectively restrict the users of a free program by obtaining a
396
- restrictive license from a patent holder. Therefore, we insist that
397
- any patent license obtained for a version of the library must be
398
- consistent with the full freedom of use specified in this license.
399
-
400
- Most GNU software, including some libraries, is covered by the
401
- ordinary GNU General Public License. This license, the GNU Lesser
402
- General Public License, applies to certain designated libraries, and
403
- is quite different from the ordinary General Public License. We use
404
- this license for certain libraries in order to permit linking those
405
- libraries into non-free programs.
406
-
407
- When a program is linked with a library, whether statically or using
408
- a shared library, the combination of the two is legally speaking a
409
- combined work, a derivative of the original library. The ordinary
410
- General Public License therefore permits such linking only if the
411
- entire combination fits its criteria of freedom. The Lesser General
412
- Public License permits more lax criteria for linking other code with
413
- the library.
414
-
415
- We call this license the "Lesser" General Public License because it
416
- does Less to protect the user's freedom than the ordinary General
417
- Public License. It also provides other free software developers Less
418
- of an advantage over competing non-free programs. These disadvantages
419
- are the reason we use the ordinary General Public License for many
420
- libraries. However, the Lesser license provides advantages in certain
421
- special circumstances.
422
-
423
- For example, on rare occasions, there may be a special need to
424
- encourage the widest possible use of a certain library, so that it becomes
425
- a de-facto standard. To achieve this, non-free programs must be
426
- allowed to use the library. A more frequent case is that a free
427
- library does the same job as widely used non-free libraries. In this
428
- case, there is little to gain by limiting the free library to free
429
- software only, so we use the Lesser General Public License.
430
-
431
- In other cases, permission to use a particular library in non-free
432
- programs enables a greater number of people to use a large body of
433
- free software. For example, permission to use the GNU C Library in
434
- non-free programs enables many more people to use the whole GNU
435
- operating system, as well as its variant, the GNU/Linux operating
436
- system.
437
-
438
- Although the Lesser General Public License is Less protective of the
439
- users' freedom, it does ensure that the user of a program that is
440
- linked with the Library has the freedom and the wherewithal to run
441
- that program using a modified version of the Library.
442
-
443
- The precise terms and conditions for copying, distribution and
444
- modification follow. Pay close attention to the difference between a
445
- "work based on the library" and a "work that uses the library". The
446
- former contains code derived from the library, whereas the latter must
447
- be combined with the library in order to run.
448
-
449
- GNU LESSER GENERAL PUBLIC LICENSE
450
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
451
-
452
- 0. This License Agreement applies to any software library or other
453
- program which contains a notice placed by the copyright holder or
454
- other authorized party saying it may be distributed under the terms of
455
- this Lesser General Public License (also called "this License").
456
- Each licensee is addressed as "you".
457
-
458
- A "library" means a collection of software functions and/or data
459
- prepared so as to be conveniently linked with application programs
460
- (which use some of those functions and data) to form executables.
461
-
462
- The "Library", below, refers to any such software library or work
463
- which has been distributed under these terms. A "work based on the
464
- Library" means either the Library or any derivative work under
465
- copyright law: that is to say, a work containing the Library or a
466
- portion of it, either verbatim or with modifications and/or translated
467
- straightforwardly into another language. (Hereinafter, translation is
468
- included without limitation in the term "modification".)
469
-
470
- "Source code" for a work means the preferred form of the work for
471
- making modifications to it. For a library, complete source code means
472
- all the source code for all modules it contains, plus any associated
473
- interface definition files, plus the scripts used to control compilation
474
- and installation of the library.
475
-
476
- Activities other than copying, distribution and modification are not
477
- covered by this License; they are outside its scope. The act of
478
- running a program using the Library is not restricted, and output from
479
- such a program is covered only if its contents constitute a work based
480
- on the Library (independent of the use of the Library in a tool for
481
- writing it). Whether that is true depends on what the Library does
482
- and what the program that uses the Library does.
483
-
484
- 1. You may copy and distribute verbatim copies of the Library's
485
- complete source code as you receive it, in any medium, provided that
486
- you conspicuously and appropriately publish on each copy an
487
- appropriate copyright notice and disclaimer of warranty; keep intact
488
- all the notices that refer to this License and to the absence of any
489
- warranty; and distribute a copy of this License along with the
490
- Library.
491
-
492
- You may charge a fee for the physical act of transferring a copy,
493
- and you may at your option offer warranty protection in exchange for a
494
- fee.
495
-
496
- 2. You may modify your copy or copies of the Library or any portion
497
- of it, thus forming a work based on the Library, and copy and
498
- distribute such modifications or work under the terms of Section 1
499
- above, provided that you also meet all of these conditions:
500
-
501
- a) The modified work must itself be a software library.
502
-
503
- b) You must cause the files modified to carry prominent notices
504
- stating that you changed the files and the date of any change.
505
-
506
- c) You must cause the whole of the work to be licensed at no
507
- charge to all third parties under the terms of this License.
508
-
509
- d) If a facility in the modified Library refers to a function or a
510
- table of data to be supplied by an application program that uses
511
- the facility, other than as an argument passed when the facility
512
- is invoked, then you must make a good faith effort to ensure that,
513
- in the event an application does not supply such function or
514
- table, the facility still operates, and performs whatever part of
515
- its purpose remains meaningful.
516
-
517
- (For example, a function in a library to compute square roots has
518
- a purpose that is entirely well-defined independent of the
519
- application. Therefore, Subsection 2d requires that any
520
- application-supplied function or table used by this function must
521
- be optional: if the application does not supply it, the square
522
- root function must still compute square roots.)
523
-
524
- These requirements apply to the modified work as a whole. If
525
- identifiable sections of that work are not derived from the Library,
526
- and can be reasonably considered independent and separate works in
527
- themselves, then this License, and its terms, do not apply to those
528
- sections when you distribute them as separate works. But when you
529
- distribute the same sections as part of a whole which is a work based
530
- on the Library, the distribution of the whole must be on the terms of
531
- this License, whose permissions for other licensees extend to the
532
- entire whole, and thus to each and every part regardless of who wrote
533
- it.
534
-
535
- Thus, it is not the intent of this section to claim rights or contest
536
- your rights to work written entirely by you; rather, the intent is to
537
- exercise the right to control the distribution of derivative or
538
- collective works based on the Library.
539
-
540
- In addition, mere aggregation of another work not based on the Library
541
- with the Library (or with a work based on the Library) on a volume of
542
- a storage or distribution medium does not bring the other work under
543
- the scope of this License.
544
-
545
- 3. You may opt to apply the terms of the ordinary GNU General Public
546
- License instead of this License to a given copy of the Library. To do
547
- this, you must alter all the notices that refer to this License, so
548
- that they refer to the ordinary GNU General Public License, version 2,
549
- instead of to this License. (If a newer version than version 2 of the
550
- ordinary GNU General Public License has appeared, then you can specify
551
- that version instead if you wish.) Do not make any other change in
552
- these notices.
553
-
554
- Once this change is made in a given copy, it is irreversible for
555
- that copy, so the ordinary GNU General Public License applies to all
556
- subsequent copies and derivative works made from that copy.
557
-
558
- This option is useful when you wish to copy part of the code of
559
- the Library into a program that is not a library.
560
-
561
- 4. You may copy and distribute the Library (or a portion or
562
- derivative of it, under Section 2) in object code or executable form
563
- under the terms of Sections 1 and 2 above provided that you accompany
564
- it with the complete corresponding machine-readable source code, which
565
- must be distributed under the terms of Sections 1 and 2 above on a
566
- medium customarily used for software interchange.
567
-
568
- If distribution of object code is made by offering access to copy
569
- from a designated place, then offering equivalent access to copy the
570
- source code from the same place satisfies the requirement to
571
- distribute the source code, even though third parties are not
572
- compelled to copy the source along with the object code.
573
-
574
- 5. A program that contains no derivative of any portion of the
575
- Library, but is designed to work with the Library by being compiled or
576
- linked with it, is called a "work that uses the Library". Such a
577
- work, in isolation, is not a derivative work of the Library, and
578
- therefore falls outside the scope of this License.
579
-
580
- However, linking a "work that uses the Library" with the Library
581
- creates an executable that is a derivative of the Library (because it
582
- contains portions of the Library), rather than a "work that uses the
583
- library". The executable is therefore covered by this License.
584
- Section 6 states terms for distribution of such executables.
585
-
586
- When a "work that uses the Library" uses material from a header file
587
- that is part of the Library, the object code for the work may be a
588
- derivative work of the Library even though the source code is not.
589
- Whether this is true is especially significant if the work can be
590
- linked without the Library, or if the work is itself a library. The
591
- threshold for this to be true is not precisely defined by law.
592
-
593
- If such an object file uses only numerical parameters, data
594
- structure layouts and accessors, and small macros and small inline
595
- functions (ten lines or less in length), then the use of the object
596
- file is unrestricted, regardless of whether it is legally a derivative
597
- work. (Executables containing this object code plus portions of the
598
- Library will still fall under Section 6.)
599
-
600
- Otherwise, if the work is a derivative of the Library, you may
601
- distribute the object code for the work under the terms of Section 6.
602
- Any executables containing that work also fall under Section 6,
603
- whether or not they are linked directly with the Library itself.
604
-
605
- 6. As an exception to the Sections above, you may also combine or
606
- link a "work that uses the Library" with the Library to produce a
607
- work containing portions of the Library, and distribute that work
608
- under terms of your choice, provided that the terms permit
609
- modification of the work for the customer's own use and reverse
610
- engineering for debugging such modifications.
611
-
612
- You must give prominent notice with each copy of the work that the
613
- Library is used in it and that the Library and its use are covered by
614
- this License. You must supply a copy of this License. If the work
615
- during execution displays copyright notices, you must include the
616
- copyright notice for the Library among them, as well as a reference
617
- directing the user to the copy of this License. Also, you must do one
618
- of these things:
619
-
620
- a) Accompany the work with the complete corresponding
621
- machine-readable source code for the Library including whatever
622
- changes were used in the work (which must be distributed under
623
- Sections 1 and 2 above); and, if the work is an executable linked
624
- with the Library, with the complete machine-readable "work that
625
- uses the Library", as object code and/or source code, so that the
626
- user can modify the Library and then relink to produce a modified
627
- executable containing the modified Library. (It is understood
628
- that the user who changes the contents of definitions files in the
629
- Library will not necessarily be able to recompile the application
630
- to use the modified definitions.)
631
-
632
- b) Use a suitable shared library mechanism for linking with the
633
- Library. A suitable mechanism is one that (1) uses at run time a
634
- copy of the library already present on the user's computer system,
635
- rather than copying library functions into the executable, and (2)
636
- will operate properly with a modified version of the library, if
637
- the user installs one, as long as the modified version is
638
- interface-compatible with the version that the work was made with.
639
-
640
- c) Accompany the work with a written offer, valid for at
641
- least three years, to give the same user the materials
642
- specified in Subsection 6a, above, for a charge no more
643
- than the cost of performing this distribution.
644
-
645
- d) If distribution of the work is made by offering access to copy
646
- from a designated place, offer equivalent access to copy the above
647
- specified materials from the same place.
648
-
649
- e) Verify that the user has already received a copy of these
650
- materials or that you have already sent this user a copy.
651
-
652
- For an executable, the required form of the "work that uses the
653
- Library" must include any data and utility programs needed for
654
- reproducing the executable from it. However, as a special exception,
655
- the materials to be distributed need not include anything that is
656
- normally distributed (in either source or binary form) with the major
657
- components (compiler, kernel, and so on) of the operating system on
658
- which the executable runs, unless that component itself accompanies
659
- the executable.
660
-
661
- It may happen that this requirement contradicts the license
662
- restrictions of other proprietary libraries that do not normally
663
- accompany the operating system. Such a contradiction means you cannot
664
- use both them and the Library together in an executable that you
665
- distribute.
666
-
667
- 7. You may place library facilities that are a work based on the
668
- Library side-by-side in a single library together with other library
669
- facilities not covered by this License, and distribute such a combined
670
- library, provided that the separate distribution of the work based on
671
- the Library and of the other library facilities is otherwise
672
- permitted, and provided that you do these two things:
673
-
674
- a) Accompany the combined library with a copy of the same work
675
- based on the Library, uncombined with any other library
676
- facilities. This must be distributed under the terms of the
677
- Sections above.
678
-
679
- b) Give prominent notice with the combined library of the fact
680
- that part of it is a work based on the Library, and explaining
681
- where to find the accompanying uncombined form of the same work.
682
-
683
- 8. You may not copy, modify, sublicense, link with, or distribute
684
- the Library except as expressly provided under this License. Any
685
- attempt otherwise to copy, modify, sublicense, link with, or
686
- distribute the Library is void, and will automatically terminate your
687
- rights under this License. However, parties who have received copies,
688
- or rights, from you under this License will not have their licenses
689
- terminated so long as such parties remain in full compliance.
690
-
691
- 9. You are not required to accept this License, since you have not
692
- signed it. However, nothing else grants you permission to modify or
693
- distribute the Library or its derivative works. These actions are
694
- prohibited by law if you do not accept this License. Therefore, by
695
- modifying or distributing the Library (or any work based on the
696
- Library), you indicate your acceptance of this License to do so, and
697
- all its terms and conditions for copying, distributing or modifying
698
- the Library or works based on it.
699
-
700
- 10. Each time you redistribute the Library (or any work based on the
701
- Library), the recipient automatically receives a license from the
702
- original licensor to copy, distribute, link with or modify the Library
703
- subject to these terms and conditions. You may not impose any further
704
- restrictions on the recipients' exercise of the rights granted herein.
705
- You are not responsible for enforcing compliance by third parties with
706
- this License.
707
-
708
- 11. If, as a consequence of a court judgment or allegation of patent
709
- infringement or for any other reason (not limited to patent issues),
710
- conditions are imposed on you (whether by court order, agreement or
711
- otherwise) that contradict the conditions of this License, they do not
712
- excuse you from the conditions of this License. If you cannot
713
- distribute so as to satisfy simultaneously your obligations under this
714
- License and any other pertinent obligations, then as a consequence you
715
- may not distribute the Library at all. For example, if a patent
716
- license would not permit royalty-free redistribution of the Library by
717
- all those who receive copies directly or indirectly through you, then
718
- the only way you could satisfy both it and this License would be to
719
- refrain entirely from distribution of the Library.
720
-
721
- If any portion of this section is held invalid or unenforceable under any
722
- particular circumstance, the balance of the section is intended to apply,
723
- and the section as a whole is intended to apply in other circumstances.
724
-
725
- It is not the purpose of this section to induce you to infringe any
726
- patents or other property right claims or to contest validity of any
727
- such claims; this section has the sole purpose of protecting the
728
- integrity of the free software distribution system which is
729
- implemented by public license practices. Many people have made
730
- generous contributions to the wide range of software distributed
731
- through that system in reliance on consistent application of that
732
- system; it is up to the author/donor to decide if he or she is willing
733
- to distribute software through any other system and a licensee cannot
734
- impose that choice.
735
-
736
- This section is intended to make thoroughly clear what is believed to
737
- be a consequence of the rest of this License.
738
-
739
- 12. If the distribution and/or use of the Library is restricted in
740
- certain countries either by patents or by copyrighted interfaces, the
741
- original copyright holder who places the Library under this License may add
742
- an explicit geographical distribution limitation excluding those countries,
743
- so that distribution is permitted only in or among countries not thus
744
- excluded. In such case, this License incorporates the limitation as if
745
- written in the body of this License.
746
-
747
- 13. The Free Software Foundation may publish revised and/or new
748
- versions of the Lesser General Public License from time to time.
749
- Such new versions will be similar in spirit to the present version,
750
- but may differ in detail to address new problems or concerns.
751
-
752
- Each version is given a distinguishing version number. If the Library
753
- specifies a version number of this License which applies to it and
754
- "any later version", you have the option of following the terms and
755
- conditions either of that version or of any later version published by
756
- the Free Software Foundation. If the Library does not specify a
757
- license version number, you may choose any version ever published by
758
- the Free Software Foundation.
759
-
760
- 14. If you wish to incorporate parts of the Library into other free
761
- programs whose distribution conditions are incompatible with these,
762
- write to the author to ask for permission. For software which is
763
- copyrighted by the Free Software Foundation, write to the Free
764
- Software Foundation; we sometimes make exceptions for this. Our
765
- decision will be guided by the two goals of preserving the free status
766
- of all derivatives of our free software and of promoting the sharing
767
- and reuse of software generally.
768
-
769
- NO WARRANTY
770
-
771
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
772
- WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
773
- EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
774
- OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
775
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
776
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
777
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
778
- LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
779
- THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
780
-
781
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
782
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
783
- AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
784
- FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
785
- CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
786
- LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
787
- RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
788
- FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
789
- SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
790
- DAMAGES.
791
-
792
- END OF TERMS AND CONDITIONS
793
-
794
-
795
- Appendix C: The MPL License
796
- ---------------------------
797
-
798
- MOZILLA PUBLIC LICENSE
799
- Version 1.1
800
-
801
- 1. Definitions.
802
-
803
- 1.0.1. "Commercial Use" means distribution or otherwise making the
804
- Covered Code available to a third party.
805
-
806
- 1.1. "Contributor" means each entity that creates or contributes to
807
- the creation of Modifications.
808
-
809
- 1.2. "Contributor Version" means the combination of the Original
810
- Code, prior Modifications used by a Contributor, and the Modifications
811
- made by that particular Contributor.
812
-
813
- 1.3. "Covered Code" means the Original Code or Modifications or the
814
- combination of the Original Code and Modifications, in each case
815
- including portions thereof.
816
-
817
- 1.4. "Electronic Distribution Mechanism" means a mechanism generally
818
- accepted in the software development community for the electronic
819
- transfer of data.
820
-
821
- 1.5. "Executable" means Covered Code in any form other than Source
822
- Code.
823
-
824
- 1.6. "Initial Developer" means the individual or entity identified
825
- as the Initial Developer in the Source Code notice required by Exhibit
826
- A.
827
-
828
- 1.7. "Larger Work" means a work which combines Covered Code or
829
- portions thereof with code not governed by the terms of this License.
830
-
831
- 1.8. "License" means this document.
832
-
833
- 1.8.1. "Licensable" means having the right to grant, to the maximum
834
- extent possible, whether at the time of the initial grant or
835
- subsequently acquired, any and all of the rights conveyed herein.
836
-
837
- 1.9. "Modifications" means any addition to or deletion from the
838
- substance or structure of either the Original Code or any previous
839
- Modifications. When Covered Code is released as a series of files, a
840
- Modification is:
841
- A. Any addition to or deletion from the contents of a file
842
- containing Original Code or previous Modifications.
843
-
844
- B. Any new file that contains any part of the Original Code or
845
- previous Modifications.
846
-
847
- 1.10. "Original Code" means Source Code of computer software code
848
- which is described in the Source Code notice required by Exhibit A as
849
- Original Code, and which, at the time of its release under this
850
- License is not already Covered Code governed by this License.
851
-
852
- 1.10.1. "Patent Claims" means any patent claim(s), now owned or
853
- hereafter acquired, including without limitation, method, process,
854
- and apparatus claims, in any patent Licensable by grantor.
855
-
856
- 1.11. "Source Code" means the preferred form of the Covered Code for
857
- making modifications to it, including all modules it contains, plus
858
- any associated interface definition files, scripts used to control
859
- compilation and installation of an Executable, or source code
860
- differential comparisons against either the Original Code or another
861
- well known, available Covered Code of the Contributor's choice. The
862
- Source Code can be in a compressed or archival form, provided the
863
- appropriate decompression or de-archiving software is widely available
864
- for no charge.
865
-
866
- 1.12. "You" (or "Your") means an individual or a legal entity
867
- exercising rights under, and complying with all of the terms of, this
868
- License or a future version of this License issued under Section 6.1.
869
- For legal entities, "You" includes any entity which controls, is
870
- controlled by, or is under common control with You. For purposes of
871
- this definition, "control" means (a) the power, direct or indirect,
872
- to cause the direction or management of such entity, whether by
873
- contract or otherwise, or (b) ownership of more than fifty percent
874
- (50%) of the outstanding shares or beneficial ownership of such
875
- entity.
876
-
877
- 2. Source Code License.
878
-
879
- 2.1. The Initial Developer Grant.
880
- The Initial Developer hereby grants You a world-wide, royalty-free,
881
- non-exclusive license, subject to third party intellectual property
882
- claims:
883
- (a) under intellectual property rights (other than patent or
884
- trademark) Licensable by Initial Developer to use, reproduce,
885
- modify, display, perform, sublicense and distribute the Original
886
- Code (or portions thereof) with or without Modifications, and/or
887
- as part of a Larger Work; and
888
-
889
- (b) under Patents Claims infringed by the making, using or
890
- selling of Original Code, to make, have made, use, practice,
891
- sell, and offer for sale, and/or otherwise dispose of the
892
- Original Code (or portions thereof).
893
-
894
- (c) the licenses granted in this Section 2.1(a) and (b) are
895
- effective on the date Initial Developer first distributes
896
- Original Code under the terms of this License.
897
-
898
- (d) Notwithstanding Section 2.1(b) above, no patent license is
899
- granted: 1) for code that You delete from the Original Code; 2)
900
- separate from the Original Code; or 3) for infringements caused
901
- by: i) the modification of the Original Code or ii) the
902
- combination of the Original Code with other software or devices.
903
-
904
- 2.2. Contributor Grant.
905
- Subject to third party intellectual property claims, each Contributor
906
- hereby grants You a world-wide, royalty-free, non-exclusive license
907
-
908
- (a) under intellectual property rights (other than patent or
909
- trademark) Licensable by Contributor, to use, reproduce, modify,
910
- display, perform, sublicense and distribute the Modifications
911
- created by such Contributor (or portions thereof) either on an
912
- unmodified basis, with other Modifications, as Covered Code
913
- and/or as part of a Larger Work; and
914
-
915
- (b) under Patent Claims infringed by the making, using, or
916
- selling of Modifications made by that Contributor either alone
917
- and/or in combination with its Contributor Version (or portions
918
- of such combination), to make, use, sell, offer for sale, have
919
- made, and/or otherwise dispose of: 1) Modifications made by that
920
- Contributor (or portions thereof); and 2) the combination of
921
- Modifications made by that Contributor with its Contributor
922
- Version (or portions of such combination).
923
-
924
- (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
925
- effective on the date Contributor first makes Commercial Use of
926
- the Covered Code.
927
-
928
- (d) Notwithstanding Section 2.2(b) above, no patent license is
929
- granted: 1) for any code that Contributor has deleted from the
930
- Contributor Version; 2) separate from the Contributor Version;
931
- 3) for infringements caused by: i) third party modifications of
932
- Contributor Version or ii) the combination of Modifications made
933
- by that Contributor with other software (except as part of the
934
- Contributor Version) or other devices; or 4) under Patent Claims
935
- infringed by Covered Code in the absence of Modifications made by
936
- that Contributor.
937
-
938
- 3. Distribution Obligations.
939
-
940
- 3.1. Application of License.
941
- The Modifications which You create or to which You contribute are
942
- governed by the terms of this License, including without limitation
943
- Section 2.2. The Source Code version of Covered Code may be
944
- distributed only under the terms of this License or a future version
945
- of this License released under Section 6.1, and You must include a
946
- copy of this License with every copy of the Source Code You
947
- distribute. You may not offer or impose any terms on any Source Code
948
- version that alters or restricts the applicable version of this
949
- License or the recipients' rights hereunder. However, You may include
950
- an additional document offering the additional rights described in
951
- Section 3.5.
952
-
953
- 3.2. Availability of Source Code.
954
- Any Modification which You create or to which You contribute must be
955
- made available in Source Code form under the terms of this License
956
- either on the same media as an Executable version or via an accepted
957
- Electronic Distribution Mechanism to anyone to whom you made an
958
- Executable version available; and if made available via Electronic
959
- Distribution Mechanism, must remain available for at least twelve (12)
960
- months after the date it initially became available, or at least six
961
- (6) months after a subsequent version of that particular Modification
962
- has been made available to such recipients. You are responsible for
963
- ensuring that the Source Code version remains available even if the
964
- Electronic Distribution Mechanism is maintained by a third party.
965
-
966
- 3.3. Description of Modifications.
967
- You must cause all Covered Code to which You contribute to contain a
968
- file documenting the changes You made to create that Covered Code and
969
- the date of any change. You must include a prominent statement that
970
- the Modification is derived, directly or indirectly, from Original
971
- Code provided by the Initial Developer and including the name of the
972
- Initial Developer in (a) the Source Code, and (b) in any notice in an
973
- Executable version or related documentation in which You describe the
974
- origin or ownership of the Covered Code.
975
-
976
- 3.4. Intellectual Property Matters
977
- (a) Third Party Claims.
978
- If Contributor has knowledge that a license under a third party's
979
- intellectual property rights is required to exercise the rights
980
- granted by such Contributor under Sections 2.1 or 2.2,
981
- Contributor must include a text file with the Source Code
982
- distribution titled "LEGAL" which describes the claim and the
983
- party making the claim in sufficient detail that a recipient will
984
- know whom to contact. If Contributor obtains such knowledge after
985
- the Modification is made available as described in Section 3.2,
986
- Contributor shall promptly modify the LEGAL file in all copies
987
- Contributor makes available thereafter and shall take other steps
988
- (such as notifying appropriate mailing lists or newsgroups)
989
- reasonably calculated to inform those who received the Covered
990
- Code that new knowledge has been obtained.
991
-
992
- (b) Contributor APIs.
993
- If Contributor's Modifications include an application programming
994
- interface and Contributor has knowledge of patent licenses which
995
- are reasonably necessary to implement that API, Contributor must
996
- also include this information in the LEGAL file.
997
-
998
- (c) Representations.
999
- Contributor represents that, except as disclosed pursuant to
1000
- Section 3.4(a) above, Contributor believes that Contributor's
1001
- Modifications are Contributor's original creation(s) and/or
1002
- Contributor has sufficient rights to grant the rights conveyed by
1003
- this License.
1004
-
1005
- 3.5. Required Notices.
1006
- You must duplicate the notice in Exhibit A in each file of the Source
1007
- Code. If it is not possible to put such notice in a particular Source
1008
- Code file due to its structure, then You must include such notice in a
1009
- location (such as a relevant directory) where a user would be likely
1010
- to look for such a notice. If You created one or more Modification(s)
1011
- You may add your name as a Contributor to the notice described in
1012
- Exhibit A. You must also duplicate this License in any documentation
1013
- for the Source Code where You describe recipients' rights or ownership
1014
- rights relating to Covered Code. You may choose to offer, and to
1015
- charge a fee for, warranty, support, indemnity or liability
1016
- obligations to one or more recipients of Covered Code. However, You
1017
- may do so only on Your own behalf, and not on behalf of the Initial
1018
- Developer or any Contributor. You must make it absolutely clear than
1019
- any such warranty, support, indemnity or liability obligation is
1020
- offered by You alone, and You hereby agree to indemnify the Initial
1021
- Developer and every Contributor for any liability incurred by the
1022
- Initial Developer or such Contributor as a result of warranty,
1023
- support, indemnity or liability terms You offer.
1024
-
1025
- 3.6. Distribution of Executable Versions.
1026
- You may distribute Covered Code in Executable form only if the
1027
- requirements of Section 3.1-3.5 have been met for that Covered Code,
1028
- and if You include a notice stating that the Source Code version of
1029
- the Covered Code is available under the terms of this License,
1030
- including a description of how and where You have fulfilled the
1031
- obligations of Section 3.2. The notice must be conspicuously included
1032
- in any notice in an Executable version, related documentation or
1033
- collateral in which You describe recipients' rights relating to the
1034
- Covered Code. You may distribute the Executable version of Covered
1035
- Code or ownership rights under a license of Your choice, which may
1036
- contain terms different from this License, provided that You are in
1037
- compliance with the terms of this License and that the license for the
1038
- Executable version does not attempt to limit or alter the recipient's
1039
- rights in the Source Code version from the rights set forth in this
1040
- License. If You distribute the Executable version under a different
1041
- license You must make it absolutely clear that any terms which differ
1042
- from this License are offered by You alone, not by the Initial
1043
- Developer or any Contributor. You hereby agree to indemnify the
1044
- Initial Developer and every Contributor for any liability incurred by
1045
- the Initial Developer or such Contributor as a result of any such
1046
- terms You offer.
1047
-
1048
- 3.7. Larger Works.
1049
- You may create a Larger Work by combining Covered Code with other code
1050
- not governed by the terms of this License and distribute the Larger
1051
- Work as a single product. In such a case, You must make sure the
1052
- requirements of this License are fulfilled for the Covered Code.
1053
-
1054
- 4. Inability to Comply Due to Statute or Regulation.
1055
-
1056
- If it is impossible for You to comply with any of the terms of this
1057
- License with respect to some or all of the Covered Code due to
1058
- statute, judicial order, or regulation then You must: (a) comply with
1059
- the terms of this License to the maximum extent possible; and (b)
1060
- describe the limitations and the code they affect. Such description
1061
- must be included in the LEGAL file described in Section 3.4 and must
1062
- be included with all distributions of the Source Code. Except to the
1063
- extent prohibited by statute or regulation, such description must be
1064
- sufficiently detailed for a recipient of ordinary skill to be able to
1065
- understand it.
1066
-
1067
- 5. Application of this License.
1068
-
1069
- This License applies to code to which the Initial Developer has
1070
- attached the notice in Exhibit A and to related Covered Code.
1071
-
1072
- 6. Versions of the License.
1073
-
1074
- 6.1. New Versions.
1075
- Netscape Communications Corporation ("Netscape") may publish revised
1076
- and/or new versions of the License from time to time. Each version
1077
- will be given a distinguishing version number.
1078
-
1079
- 6.2. Effect of New Versions.
1080
- Once Covered Code has been published under a particular version of the
1081
- License, You may always continue to use it under the terms of that
1082
- version. You may also choose to use such Covered Code under the terms
1083
- of any subsequent version of the License published by Netscape. No one
1084
- other than Netscape has the right to modify the terms applicable to
1085
- Covered Code created under this License.
1086
-
1087
- 6.3. Derivative Works.
1088
- If You create or use a modified version of this License (which you may
1089
- only do in order to apply it to code which is not already Covered Code
1090
- governed by this License), You must (a) rename Your license so that
1091
- the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
1092
- "MPL", "NPL" or any confusingly similar phrase do not appear in your
1093
- license (except to note that your license differs from this License)
1094
- and (b) otherwise make it clear that Your version of the license
1095
- contains terms which differ from the Mozilla Public License and
1096
- Netscape Public License. (Filling in the name of the Initial
1097
- Developer, Original Code or Contributor in the notice described in
1098
- Exhibit A shall not of themselves be deemed to be modifications of
1099
- this License.)
1100
-
1101
- 7. DISCLAIMER OF WARRANTY.
1102
-
1103
- COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
1104
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
1105
- WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
1106
- DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
1107
- THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
1108
- IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
1109
- YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
1110
- COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
1111
- OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
1112
- ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
1113
-
1114
- 8. TERMINATION.
1115
-
1116
- 8.1. This License and the rights granted hereunder will terminate
1117
- automatically if You fail to comply with terms herein and fail to cure
1118
- such breach within 30 days of becoming aware of the breach. All
1119
- sublicenses to the Covered Code which are properly granted shall
1120
- survive any termination of this License. Provisions which, by their
1121
- nature, must remain in effect beyond the termination of this License
1122
- shall survive.
1123
-
1124
- 8.2. If You initiate litigation by asserting a patent infringement
1125
- claim (excluding declatory judgment actions) against Initial Developer
1126
- or a Contributor (the Initial Developer or Contributor against whom
1127
- You file such action is referred to as "Participant") alleging that:
1128
-
1129
- (a) such Participant's Contributor Version directly or indirectly
1130
- infringes any patent, then any and all rights granted by such
1131
- Participant to You under Sections 2.1 and/or 2.2 of this License
1132
- shall, upon 60 days notice from Participant terminate prospectively,
1133
- unless if within 60 days after receipt of notice You either: (i)
1134
- agree in writing to pay Participant a mutually agreeable reasonable
1135
- royalty for Your past and future use of Modifications made by such
1136
- Participant, or (ii) withdraw Your litigation claim with respect to
1137
- the Contributor Version against such Participant. If within 60 days
1138
- of notice, a reasonable royalty and payment arrangement are not
1139
- mutually agreed upon in writing by the parties or the litigation claim
1140
- is not withdrawn, the rights granted by Participant to You under
1141
- Sections 2.1 and/or 2.2 automatically terminate at the expiration of
1142
- the 60 day notice period specified above.
1143
-
1144
- (b) any software, hardware, or device, other than such Participant's
1145
- Contributor Version, directly or indirectly infringes any patent, then
1146
- any rights granted to You by such Participant under Sections 2.1(b)
1147
- and 2.2(b) are revoked effective as of the date You first made, used,
1148
- sold, distributed, or had made, Modifications made by that
1149
- Participant.
1150
-
1151
- 8.3. If You assert a patent infringement claim against Participant
1152
- alleging that such Participant's Contributor Version directly or
1153
- indirectly infringes any patent where such claim is resolved (such as
1154
- by license or settlement) prior to the initiation of patent
1155
- infringement litigation, then the reasonable value of the licenses
1156
- granted by such Participant under Sections 2.1 or 2.2 shall be taken
1157
- into account in determining the amount or value of any payment or
1158
- license.
1159
-
1160
- 8.4. In the event of termination under Sections 8.1 or 8.2 above,
1161
- all end user license agreements (excluding distributors and resellers)
1162
- which have been validly granted by You or any distributor hereunder
1163
- prior to termination shall survive termination.
1164
-
1165
- 9. LIMITATION OF LIABILITY.
1166
-
1167
- UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
1168
- (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
1169
- DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
1170
- OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
1171
- ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
1172
- CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
1173
- WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
1174
- COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
1175
- INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
1176
- LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
1177
- RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
1178
- PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
1179
- EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
1180
- THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
1181
-
1182
- 10. U.S. GOVERNMENT END USERS.
1183
-
1184
- The Covered Code is a "commercial item," as that term is defined in
1185
- 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
1186
- software" and "commercial computer software documentation," as such
1187
- terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
1188
- C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
1189
- all U.S. Government End Users acquire Covered Code with only those
1190
- rights set forth herein.
1191
-
1192
- 11. MISCELLANEOUS.
1193
-
1194
- This License represents the complete agreement concerning subject
1195
- matter hereof. If any provision of this License is held to be
1196
- unenforceable, such provision shall be reformed only to the extent
1197
- necessary to make it enforceable. This License shall be governed by
1198
- California law provisions (except to the extent applicable law, if
1199
- any, provides otherwise), excluding its conflict-of-law provisions.
1200
- With respect to disputes in which at least one party is a citizen of,
1201
- or an entity chartered or registered to do business in the United
1202
- States of America, any litigation relating to this License shall be
1203
- subject to the jurisdiction of the Federal Courts of the Northern
1204
- District of California, with venue lying in Santa Clara County,
1205
- California, with the losing party responsible for costs, including
1206
- without limitation, court costs and reasonable attorneys' fees and
1207
- expenses. The application of the United Nations Convention on
1208
- Contracts for the International Sale of Goods is expressly excluded.
1209
- Any law or regulation which provides that the language of a contract
1210
- shall be construed against the drafter shall not apply to this
1211
- License.
1212
-
1213
- 12. RESPONSIBILITY FOR CLAIMS.
1214
-
1215
- As between Initial Developer and the Contributors, each party is
1216
- responsible for claims and damages arising, directly or indirectly,
1217
- out of its utilization of rights under this License and You agree to
1218
- work with Initial Developer and Contributors to distribute such
1219
- responsibility on an equitable basis. Nothing herein is intended or
1220
- shall be deemed to constitute any admission of liability.
1221
-
1222
- 13. MULTIPLE-LICENSED CODE.
1223
-
1224
- Initial Developer may designate portions of the Covered Code as
1225
- "Multiple-Licensed". "Multiple-Licensed" means that the Initial
1226
- Developer permits you to utilize portions of the Covered Code under
1227
- Your choice of the NPL or the alternative licenses, if any, specified
1228
- by the Initial Developer in the file described in Exhibit A.
1229
-
1230
- EXHIBIT A -Mozilla Public License.
1231
-
1232
- ``The contents of this file are subject to the Mozilla Public License
1233
- Version 1.1 (the "License"); you may not use this file except in
1234
- compliance with the License. You may obtain a copy of the License at
1235
- http://www.mozilla.org/MPL/
1236
-
1237
- Software distributed under the License is distributed on an "AS IS"
1238
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
1239
- License for the specific language governing rights and limitations
1240
- under the License.
1241
-
1242
- The Original Code is ______________________________________.
1243
-
1244
- The Initial Developer of the Original Code is ________________________.
1245
- Portions created by ______________________ are Copyright (C) ______
1246
- _______________________. All Rights Reserved.
1247
-
1248
- Contributor(s): ______________________________________.
1249
-
1250
- Alternatively, the contents of this file may be used under the terms
1251
- of the _____ license (the "[___] License"), in which case the
1252
- provisions of [______] License are applicable instead of those
1253
- above. If you wish to allow use of your version of this file only
1254
- under the terms of the [____] License and not to allow others to use
1255
- your version of this file under the MPL, indicate your decision by
1256
- deleting the provisions above and replace them with the notice and
1257
- other provisions required by the [___] License. If you do not delete
1258
- the provisions above, a recipient may use your version of this file
1259
- under either the MPL or the [___] License."
1260
-
1261
- [NOTE: The text of this Exhibit A may differ slightly from the text of
1262
- the notices in the Source Code files of the Original Code. You should
1263
- use the text of this Exhibit A rather than the text found in the
1264
- Original Code Source Code for Your Modifications.]