WME-Base

Base class for Greasy Fork plugins for Waze Map Editor

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/450221/1137043/WME-Base.js

  1. // ==UserScript==
  2. // @name WME Base
  3. // @version 0.1.3
  4. // @description Base class for Greasy Fork plugins for Waze Map Editor
  5. // @license MIT License
  6. // @author Anton Shevchuk
  7. // @namespace https://greasyfork.org/users/227648-anton-shevchuk
  8. // @supportURL https://github.com/AntonShevchuk/wme-base/issues
  9. // @match https://*.waze.com/editor*
  10. // @match https://*.waze.com/*/editor*
  11. // @exclude https://*.waze.com/user/editor*
  12. // @icon https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://anton.shevchuk.name&size=64
  13. // @grant none
  14. // ==/UserScript==
  15.  
  16. /* jshint esversion: 8 */
  17.  
  18. /* global jQuery, W */
  19. /* global Settings */
  20.  
  21. class WMEBase {
  22. /**
  23. *
  24. * @param {String} name
  25. * @param {Object} settings
  26. */
  27. constructor (name, settings = null) {
  28. this.name = name
  29.  
  30. if (settings && settings instanceof Settings) {
  31. this.settings = settings
  32. } else if (settings) {
  33. this.settings = new Settings(name, settings)
  34. } else {
  35. this.settings = null
  36. }
  37.  
  38. jQuery(document)
  39. .on('none.wme', (e) => this.onNone(e))
  40. .on('segment.wme', (e, el, t) => this.onSegment(e, el, t))
  41. .on('segments.wme', (e, el, t) => this.onSegments(e, el, t))
  42. .on('node.wme', (e, el, t) => this.onNode(e, el, t))
  43. .on('nodes.wme', (e, el, t) => this.onNodes(e, el, t))
  44. .on('venue.wme', (e, el, t) => this.onVenue(e, el, t))
  45. .on('venues.wme', (e, el, t) => this.onVenues(e, el, t))
  46. .on('point.wme', (e, el, t) => this.onPoint(e, el, t))
  47. .on('place.wme', (e, el, t) => this.onPlace(e, el, t))
  48. .on('residential.wme', (e, el, t) => this.onResidential(e, el, t))
  49.  
  50. jQuery(window).on('beforeunload', (e) => this.onBeforeUnload(e))
  51. }
  52.  
  53. /**
  54. * Log message with prefix
  55. * @param {String} message
  56. * @param {Array} args
  57. */
  58. log (message, ...args) {
  59. console.log(
  60. '%c' + this.name + ': %c' + message,
  61. 'color: #0DAD8D; font-weight: bold',
  62. 'color: dimgray; font-weight: normal',
  63. ...args
  64. )
  65. }
  66.  
  67. /**
  68. * Collapsed group message with prefix
  69. * @param {String} message
  70. * @param {Array} args
  71. */
  72. group (message, ...args) {
  73. console.groupCollapsed(
  74. '%c' + this.name + ': %c' + message,
  75. 'color: #0DAD8D; font-weight: bold',
  76. 'color: dimgray; font-weight: normal',
  77. ...args
  78. )
  79. }
  80.  
  81. /**
  82. * Just wrapper for console.groupEnd()
  83. */
  84. groupEnd() {
  85. console.groupEnd()
  86. }
  87.  
  88. /**
  89. * Handler for window `beforeunload` event
  90. * @param {jQuery.Event} event
  91. * @return {Null}
  92. */
  93. onBeforeUnload (event) {
  94. if (this.settings) {
  95. this.settings.save()
  96. }
  97. }
  98.  
  99. /**
  100. * Handler for `none.wme` event
  101. * @param {jQuery.Event} event
  102. * @return {void}
  103. */
  104. onNone (event) {
  105. }
  106.  
  107. /**
  108. * Handler for `segment.wme` event
  109. * @param {jQuery.Event} event
  110. * @param {HTMLElement} element
  111. * @param {W.model} model
  112. * @return {void}
  113. */
  114. onSegment (event, element, model) {
  115. }
  116.  
  117. /**
  118. * Handler for `segments.wme` event
  119. * @param {jQuery.Event} event
  120. * @param {HTMLElement} element
  121. * @param {Array} models
  122. * @return {void}
  123. */
  124. onSegments (event, element, models) {
  125. }
  126.  
  127. /**
  128. * Handler for `node.wme` event
  129. * @param {jQuery.Event} event
  130. * @param {HTMLElement} element
  131. * @param {W.model} model
  132. * @return {void}
  133. */
  134. onNode (event, element, model) {
  135. }
  136.  
  137. /**
  138. * Handler for `nodes.wme` event
  139. * @param {jQuery.Event} event
  140. * @param {HTMLElement} element
  141. * @param {Array} models
  142. * @return {void}
  143. */
  144. onNodes (event, element, models) {
  145. }
  146.  
  147. /**
  148. * Handler for `venue.wme` event
  149. * @param {jQuery.Event} event
  150. * @param {HTMLElement} element
  151. * @param {W.model} model
  152. * @return {void}
  153. */
  154. onVenue (event, element, model) {
  155. }
  156.  
  157. /**
  158. * Handler for `venues.wme` event
  159. * @param {jQuery.Event} event
  160. * @param {HTMLElement} element
  161. * @param {Array} models
  162. * @return {void}
  163. */
  164. onVenues (event, element, models) {
  165. }
  166.  
  167. /**
  168. * Handler for `place.wme` event
  169. * @param {jQuery.Event} event
  170. * @param {HTMLElement} element
  171. * @param {W.model} model
  172. * @return {void}
  173. */
  174. onPlace (event, element, model) {
  175. }
  176.  
  177. /**
  178. * Handler for `point.wme` event
  179. * @param {jQuery.Event} event
  180. * @param {HTMLElement} element
  181. * @param {W.model} model
  182. * @return {void}
  183. */
  184. onPoint (event, element, model) {
  185. }
  186.  
  187. /**
  188. * Handler for `residential.wme` event
  189. * @param {jQuery.Event} event
  190. * @param {HTMLElement} element
  191. * @param {W.model} model
  192. * @return {void}
  193. */
  194. onResidential (event, element, model) {
  195. }
  196. }