版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

240 строки
7.2 KiB

  1. var VueDemi = (function (VueDemi, Vue, VueCompositionAPI) {
  2. if (VueDemi.install) {
  3. return VueDemi
  4. }
  5. if (!Vue) {
  6. console.error('[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.')
  7. return VueDemi
  8. }
  9. // Vue 2.7
  10. if (Vue.version.slice(0, 4) === '2.7.') {
  11. for (var key in Vue) {
  12. VueDemi[key] = Vue[key]
  13. }
  14. VueDemi.isVue2 = true
  15. VueDemi.isVue3 = false
  16. VueDemi.install = function () {}
  17. VueDemi.Vue = Vue
  18. VueDemi.Vue2 = Vue
  19. VueDemi.version = Vue.version
  20. VueDemi.warn = Vue.util.warn
  21. function createApp(rootComponent, rootProps) {
  22. var vm
  23. var provide = {}
  24. var app = {
  25. config: Vue.config,
  26. use: Vue.use.bind(Vue),
  27. mixin: Vue.mixin.bind(Vue),
  28. component: Vue.component.bind(Vue),
  29. provide: function (key, value) {
  30. provide[key] = value
  31. return this
  32. },
  33. directive: function (name, dir) {
  34. if (dir) {
  35. Vue.directive(name, dir)
  36. return app
  37. } else {
  38. return Vue.directive(name)
  39. }
  40. },
  41. mount: function (el, hydrating) {
  42. if (!vm) {
  43. vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
  44. vm.$mount(el, hydrating)
  45. return vm
  46. } else {
  47. return vm
  48. }
  49. },
  50. unmount: function () {
  51. if (vm) {
  52. vm.$destroy()
  53. vm = undefined
  54. }
  55. },
  56. }
  57. return app
  58. }
  59. VueDemi.createApp = createApp
  60. }
  61. // Vue 2.6.x
  62. else if (Vue.version.slice(0, 2) === '2.') {
  63. if (VueCompositionAPI) {
  64. for (var key in VueCompositionAPI) {
  65. VueDemi[key] = VueCompositionAPI[key]
  66. }
  67. VueDemi.isVue2 = true
  68. VueDemi.isVue3 = false
  69. VueDemi.install = function () {}
  70. VueDemi.Vue = Vue
  71. VueDemi.Vue2 = Vue
  72. VueDemi.version = Vue.version
  73. } else {
  74. console.error('[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.')
  75. }
  76. }
  77. // Vue 3
  78. else if (Vue.version.slice(0, 2) === '3.') {
  79. for (var key in Vue) {
  80. VueDemi[key] = Vue[key]
  81. }
  82. VueDemi.isVue2 = false
  83. VueDemi.isVue3 = true
  84. VueDemi.install = function () {}
  85. VueDemi.Vue = Vue
  86. VueDemi.Vue2 = undefined
  87. VueDemi.version = Vue.version
  88. VueDemi.set = function (target, key, val) {
  89. if (Array.isArray(target)) {
  90. target.length = Math.max(target.length, key)
  91. target.splice(key, 1, val)
  92. return val
  93. }
  94. target[key] = val
  95. return val
  96. }
  97. VueDemi.del = function (target, key) {
  98. if (Array.isArray(target)) {
  99. target.splice(key, 1)
  100. return
  101. }
  102. delete target[key]
  103. }
  104. } else {
  105. console.error('[vue-demi] Vue version ' + Vue.version + ' is unsupported.')
  106. }
  107. return VueDemi
  108. })(
  109. (this.VueDemi = this.VueDemi || (typeof VueDemi !== 'undefined' ? VueDemi : {})),
  110. this.Vue || (typeof Vue !== 'undefined' ? Vue : undefined),
  111. this.VueCompositionAPI || (typeof VueCompositionAPI !== 'undefined' ? VueCompositionAPI : undefined)
  112. );
  113. ;
  114. ;(function (exports, vueDemi, drauu, core, shared) {
  115. 'use strict';
  116. var __defProp = Object.defineProperty;
  117. var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  118. var __hasOwnProp = Object.prototype.hasOwnProperty;
  119. var __propIsEnum = Object.prototype.propertyIsEnumerable;
  120. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  121. var __spreadValues = (a, b) => {
  122. for (var prop in b || (b = {}))
  123. if (__hasOwnProp.call(b, prop))
  124. __defNormalProp(a, prop, b[prop]);
  125. if (__getOwnPropSymbols)
  126. for (var prop of __getOwnPropSymbols(b)) {
  127. if (__propIsEnum.call(b, prop))
  128. __defNormalProp(a, prop, b[prop]);
  129. }
  130. return a;
  131. };
  132. function useDrauu(target, options) {
  133. const drauuInstance = vueDemi.ref();
  134. let disposables = [];
  135. const onChangedHook = core.createEventHook();
  136. const onCanceledHook = core.createEventHook();
  137. const onCommittedHook = core.createEventHook();
  138. const onStartHook = core.createEventHook();
  139. const onEndHook = core.createEventHook();
  140. const canUndo = vueDemi.ref(false);
  141. const canRedo = vueDemi.ref(false);
  142. const altPressed = vueDemi.ref(false);
  143. const shiftPressed = vueDemi.ref(false);
  144. const brush = vueDemi.ref({
  145. color: "black",
  146. size: 3,
  147. arrowEnd: false,
  148. cornerRadius: 0,
  149. dasharray: void 0,
  150. fill: "transparent",
  151. mode: "draw"
  152. });
  153. vueDemi.watch(brush, () => {
  154. const instance = drauuInstance.value;
  155. if (instance) {
  156. instance.brush = brush.value;
  157. instance.mode = brush.value.mode;
  158. }
  159. }, { deep: true });
  160. const undo = () => {
  161. var _a;
  162. return (_a = drauuInstance.value) == null ? void 0 : _a.undo();
  163. };
  164. const redo = () => {
  165. var _a;
  166. return (_a = drauuInstance.value) == null ? void 0 : _a.redo();
  167. };
  168. const clear = () => {
  169. var _a;
  170. return (_a = drauuInstance.value) == null ? void 0 : _a.clear();
  171. };
  172. const cancel = () => {
  173. var _a;
  174. return (_a = drauuInstance.value) == null ? void 0 : _a.cancel();
  175. };
  176. const load = (svg) => {
  177. var _a;
  178. return (_a = drauuInstance.value) == null ? void 0 : _a.load(svg);
  179. };
  180. const dump = () => {
  181. var _a;
  182. return (_a = drauuInstance.value) == null ? void 0 : _a.dump();
  183. };
  184. const cleanup = () => {
  185. var _a;
  186. disposables.forEach((dispose) => dispose());
  187. (_a = drauuInstance.value) == null ? void 0 : _a.unmount();
  188. };
  189. const syncStatus = () => {
  190. if (drauuInstance.value) {
  191. canUndo.value = drauuInstance.value.canUndo();
  192. canRedo.value = drauuInstance.value.canRedo();
  193. altPressed.value = drauuInstance.value.altPressed;
  194. shiftPressed.value = drauuInstance.value.shiftPressed;
  195. }
  196. };
  197. vueDemi.watch(() => core.unrefElement(target), (el) => {
  198. if (!el || typeof SVGSVGElement === "undefined" || !(el instanceof SVGSVGElement))
  199. return;
  200. if (drauuInstance.value)
  201. cleanup();
  202. drauuInstance.value = drauu.createDrauu(__spreadValues({ el }, options));
  203. syncStatus();
  204. disposables = [
  205. drauuInstance.value.on("canceled", () => onCanceledHook.trigger()),
  206. drauuInstance.value.on("committed", () => onCommittedHook.trigger()),
  207. drauuInstance.value.on("start", () => onStartHook.trigger()),
  208. drauuInstance.value.on("end", () => onEndHook.trigger()),
  209. drauuInstance.value.on("changed", () => {
  210. syncStatus();
  211. onChangedHook.trigger();
  212. })
  213. ];
  214. }, { flush: "post" });
  215. shared.tryOnScopeDispose(() => cleanup());
  216. return {
  217. drauuInstance,
  218. load,
  219. dump,
  220. clear,
  221. cancel,
  222. undo,
  223. redo,
  224. canUndo,
  225. canRedo,
  226. brush,
  227. onChanged: onChangedHook.on,
  228. onCommitted: onCommittedHook.on,
  229. onStart: onStartHook.on,
  230. onEnd: onEndHook.on,
  231. onCanceled: onCanceledHook.on
  232. };
  233. }
  234. exports.useDrauu = useDrauu;
  235. })(this.VueUse = this.VueUse || {}, VueDemi, Drauu, VueUse, VueUse);