初始化代码
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Arnout Kazemier
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,92 @@
|
||||
# EventEmitter3
|
||||
|
||||
[](https://www.npmjs.com/package/eventemitter3)[](https://travis-ci.org/primus/eventemitter3)[](https://david-dm.org/primus/eventemitter3)[](https://coveralls.io/r/primus/eventemitter3?branch=master)[](https://webchat.freenode.net/?channels=primus)
|
||||
|
||||
[](https://saucelabs.com/u/eventemitter3)
|
||||
|
||||
EventEmitter3 is a high performance EventEmitter. It has been micro-optimized
|
||||
for various of code paths making this, one of, if not the fastest EventEmitter
|
||||
available for Node.js and browsers. The module is API compatible with the
|
||||
EventEmitter that ships by default with Node.js but there are some slight
|
||||
differences:
|
||||
|
||||
- Domain support has been removed.
|
||||
- We do not `throw` an error when you emit an `error` event and nobody is
|
||||
listening.
|
||||
- The `newListener` and `removeListener` events have been removed as they
|
||||
are useful only in some uncommon use-cases.
|
||||
- The `setMaxListeners`, `getMaxListeners`, `prependListener` and
|
||||
`prependOnceListener` methods are not available.
|
||||
- Support for custom context for events so there is no need to use `fn.bind`.
|
||||
- The `removeListener` method removes all matching listeners, not only the
|
||||
first.
|
||||
|
||||
It's a drop in replacement for existing EventEmitters, but just faster. Free
|
||||
performance, who wouldn't want that? The EventEmitter is written in EcmaScript 3
|
||||
so it will work in the oldest browsers and node versions that you need to
|
||||
support.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
$ npm install --save eventemitter3
|
||||
```
|
||||
|
||||
## CDN
|
||||
|
||||
Recommended CDN:
|
||||
|
||||
```text
|
||||
https://unpkg.com/eventemitter3@latest/umd/eventemitter3.min.js
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
After installation the only thing you need to do is require the module:
|
||||
|
||||
```js
|
||||
var EventEmitter = require('eventemitter3');
|
||||
```
|
||||
|
||||
And you're ready to create your own EventEmitter instances. For the API
|
||||
documentation, please follow the official Node.js documentation:
|
||||
|
||||
http://nodejs.org/api/events.html
|
||||
|
||||
### Contextual emits
|
||||
|
||||
We've upgraded the API of the `EventEmitter.on`, `EventEmitter.once` and
|
||||
`EventEmitter.removeListener` to accept an extra argument which is the `context`
|
||||
or `this` value that should be set for the emitted events. This means you no
|
||||
longer have the overhead of an event that required `fn.bind` in order to get a
|
||||
custom `this` value.
|
||||
|
||||
```js
|
||||
var EE = new EventEmitter()
|
||||
, context = { foo: 'bar' };
|
||||
|
||||
function emitted() {
|
||||
console.log(this === context); // true
|
||||
}
|
||||
|
||||
EE.once('event-name', emitted, context);
|
||||
EE.on('another-event', emitted, context);
|
||||
EE.removeListener('another-event', emitted, context);
|
||||
```
|
||||
|
||||
### Tests and benchmarks
|
||||
|
||||
This module is well tested. You can run:
|
||||
|
||||
- `npm test` to run the tests under Node.js.
|
||||
- `npm run test-browser` to run the tests in real browsers via Sauce Labs.
|
||||
|
||||
We also have a set of benchmarks to compare EventEmitter3 with some available
|
||||
alternatives. To run the benchmarks run `npm run benchmark`.
|
||||
|
||||
Tests and benchmarks are not included in the npm package. If you want to play
|
||||
with them you have to clone the GitHub repository.
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
67
uniapp/uni-app/components/miniprogram_npm/eventemitter3/index.d.ts
vendored
Normal file
67
uniapp/uni-app/components/miniprogram_npm/eventemitter3/index.d.ts
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
type EventNames<T extends string | symbol | { [K in string | symbol]: any[] }> = T extends string | symbol ? T : keyof T;
|
||||
type EventArgs<T extends string | symbol | { [K in string | symbol]: any[] }, K extends EventNames<T>> = T extends string | symbol ? any[] : K extends keyof T ? T[K] : never;
|
||||
|
||||
/**
|
||||
* Minimal `EventEmitter` interface that is molded against the Node.js
|
||||
* `EventEmitter` interface.
|
||||
*/
|
||||
declare class EventEmitter<EventTypes extends string | symbol | { [K in keyof EventTypes]: any[] } = string | symbol> {
|
||||
static prefixed: string | boolean;
|
||||
|
||||
/**
|
||||
* Return an array listing the events for which the emitter has registered
|
||||
* listeners.
|
||||
*/
|
||||
eventNames(): Array<EventNames<EventTypes>>;
|
||||
|
||||
/**
|
||||
* Return the listeners registered for a given event.
|
||||
*/
|
||||
listeners<T extends EventNames<EventTypes>>(event: T): Array<EventEmitter.ListenerFn<EventArgs<EventTypes, T>>>;
|
||||
|
||||
/**
|
||||
* Return the number of listeners listening to a given event.
|
||||
*/
|
||||
listenerCount(event: EventNames<EventTypes>): number;
|
||||
|
||||
/**
|
||||
* Calls each of the listeners registered for a given event.
|
||||
*/
|
||||
emit<T extends EventNames<EventTypes>>(event: T, ...args: EventArgs<EventTypes, T>): boolean;
|
||||
|
||||
/**
|
||||
* Add a listener for a given event.
|
||||
*/
|
||||
on<T extends EventNames<EventTypes>>(event: T, fn: EventEmitter.ListenerFn<EventArgs<EventTypes, T>>, context?: any): this;
|
||||
addListener<T extends EventNames<EventTypes>>(event: T, fn: EventEmitter.ListenerFn<EventArgs<EventTypes, T>>, context?: any): this;
|
||||
|
||||
/**
|
||||
* Add a one-time listener for a given event.
|
||||
*/
|
||||
once<T extends EventNames<EventTypes>>(event: T, fn: EventEmitter.ListenerFn<EventArgs<EventTypes, T>>, context?: any): this;
|
||||
|
||||
/**
|
||||
* Remove the listeners of a given event.
|
||||
*/
|
||||
removeListener<T extends EventNames<EventTypes>>(event: T, fn?: EventEmitter.ListenerFn<EventArgs<EventTypes, T>>, context?: any, once?: boolean): this;
|
||||
off<T extends EventNames<EventTypes>>(event: T, fn?: EventEmitter.ListenerFn<EventArgs<EventTypes, T>>, context?: any, once?: boolean): this;
|
||||
|
||||
/**
|
||||
* Remove all listeners, or those of the specified event.
|
||||
*/
|
||||
removeAllListeners(event?: EventNames<EventTypes>): this;
|
||||
}
|
||||
|
||||
declare namespace EventEmitter {
|
||||
export interface ListenerFn<Args extends any[] = any[]> {
|
||||
(...args: Args): void;
|
||||
}
|
||||
|
||||
export interface EventEmitterStatic {
|
||||
new<EventTypes extends string | symbol | { [K in keyof EventTypes]: any[] } = string | symbol>(): EventEmitter<EventTypes>;
|
||||
}
|
||||
|
||||
export const EventEmitter: EventEmitterStatic;
|
||||
}
|
||||
|
||||
export = EventEmitter;
|
||||
347
uniapp/uni-app/components/miniprogram_npm/eventemitter3/index.js
Normal file
347
uniapp/uni-app/components/miniprogram_npm/eventemitter3/index.js
Normal file
@@ -0,0 +1,347 @@
|
||||
'use strict';
|
||||
|
||||
var has = Object.prototype.hasOwnProperty,
|
||||
prefix = '~';
|
||||
/**
|
||||
* Constructor to create a storage for our `EE` objects.
|
||||
* An `Events` instance is a plain object whose properties are event names.
|
||||
*
|
||||
* @constructor
|
||||
* @private
|
||||
*/
|
||||
|
||||
function Events() {} //
|
||||
// We try to not inherit from `Object.prototype`. In some engines creating an
|
||||
// instance in this way is faster than calling `Object.create(null)` directly.
|
||||
// If `Object.create(null)` is not supported we prefix the event names with a
|
||||
// character to make sure that the built-in object properties are not
|
||||
// overridden or used as an attack vector.
|
||||
//
|
||||
|
||||
|
||||
if (Object.create) {
|
||||
Events.prototype = Object.create(null); //
|
||||
// This hack is needed because the `__proto__` property is still inherited in
|
||||
// some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
|
||||
//
|
||||
|
||||
if (!new Events().__proto__) prefix = false;
|
||||
}
|
||||
/**
|
||||
* Representation of a single event listener.
|
||||
*
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} context The context to invoke the listener with.
|
||||
* @param {Boolean} [once=false] Specify if the listener is a one-time listener.
|
||||
* @constructor
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
function EE(fn, context, once) {
|
||||
this.fn = fn;
|
||||
this.context = context;
|
||||
this.once = once || false;
|
||||
}
|
||||
/**
|
||||
* Add a listener for a given event.
|
||||
*
|
||||
* @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} context The context to invoke the listener with.
|
||||
* @param {Boolean} once Specify if the listener is a one-time listener.
|
||||
* @returns {EventEmitter}
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
function addListener(emitter, event, fn, context, once) {
|
||||
if (typeof fn !== 'function') {
|
||||
throw new TypeError('The listener must be a function');
|
||||
}
|
||||
|
||||
var listener = new EE(fn, context || emitter, once),
|
||||
evt = prefix ? prefix + event : event;
|
||||
if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);else emitter._events[evt] = [emitter._events[evt], listener];
|
||||
return emitter;
|
||||
}
|
||||
/**
|
||||
* Clear event by name.
|
||||
*
|
||||
* @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
|
||||
* @param {(String|Symbol)} evt The Event name.
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
function clearEvent(emitter, evt) {
|
||||
if (--emitter._eventsCount === 0) emitter._events = new Events();else delete emitter._events[evt];
|
||||
}
|
||||
/**
|
||||
* Minimal `EventEmitter` interface that is molded against the Node.js
|
||||
* `EventEmitter` interface.
|
||||
*
|
||||
* @constructor
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
function EventEmitter() {
|
||||
this._events = new Events();
|
||||
this._eventsCount = 0;
|
||||
}
|
||||
/**
|
||||
* Return an array listing the events for which the emitter has registered
|
||||
* listeners.
|
||||
*
|
||||
* @returns {Array}
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.eventNames = function eventNames() {
|
||||
var names = [],
|
||||
events,
|
||||
name;
|
||||
if (this._eventsCount === 0) return names;
|
||||
|
||||
for (name in events = this._events) {
|
||||
if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
|
||||
}
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
return names.concat(Object.getOwnPropertySymbols(events));
|
||||
}
|
||||
|
||||
return names;
|
||||
};
|
||||
/**
|
||||
* Return the listeners registered for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @returns {Array} The registered listeners.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.listeners = function listeners(event) {
|
||||
var evt = prefix ? prefix + event : event,
|
||||
handlers = this._events[evt];
|
||||
if (!handlers) return [];
|
||||
if (handlers.fn) return [handlers.fn];
|
||||
|
||||
for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
|
||||
ee[i] = handlers[i].fn;
|
||||
}
|
||||
|
||||
return ee;
|
||||
};
|
||||
/**
|
||||
* Return the number of listeners listening to a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @returns {Number} The number of listeners.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.listenerCount = function listenerCount(event) {
|
||||
var evt = prefix ? prefix + event : event,
|
||||
listeners = this._events[evt];
|
||||
if (!listeners) return 0;
|
||||
if (listeners.fn) return 1;
|
||||
return listeners.length;
|
||||
};
|
||||
/**
|
||||
* Calls each of the listeners registered for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @returns {Boolean} `true` if the event had listeners, else `false`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
|
||||
var evt = prefix ? prefix + event : event;
|
||||
if (!this._events[evt]) return false;
|
||||
var listeners = this._events[evt],
|
||||
len = arguments.length,
|
||||
args,
|
||||
i;
|
||||
|
||||
if (listeners.fn) {
|
||||
if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
return listeners.fn.call(listeners.context), true;
|
||||
|
||||
case 2:
|
||||
return listeners.fn.call(listeners.context, a1), true;
|
||||
|
||||
case 3:
|
||||
return listeners.fn.call(listeners.context, a1, a2), true;
|
||||
|
||||
case 4:
|
||||
return listeners.fn.call(listeners.context, a1, a2, a3), true;
|
||||
|
||||
case 5:
|
||||
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
|
||||
|
||||
case 6:
|
||||
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
|
||||
}
|
||||
|
||||
for (i = 1, args = new Array(len - 1); i < len; i++) {
|
||||
args[i - 1] = arguments[i];
|
||||
}
|
||||
|
||||
listeners.fn.apply(listeners.context, args);
|
||||
} else {
|
||||
var length = listeners.length,
|
||||
j;
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
listeners[i].fn.call(listeners[i].context);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
listeners[i].fn.call(listeners[i].context, a1);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
listeners[i].fn.call(listeners[i].context, a1, a2);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) {
|
||||
args[j - 1] = arguments[j];
|
||||
}
|
||||
listeners[i].fn.apply(listeners[i].context, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
/**
|
||||
* Add a listener for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} [context=this] The context to invoke the listener with.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.on = function on(event, fn, context) {
|
||||
return addListener(this, event, fn, context, false);
|
||||
};
|
||||
/**
|
||||
* Add a one-time listener for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} [context=this] The context to invoke the listener with.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.once = function once(event, fn, context) {
|
||||
return addListener(this, event, fn, context, true);
|
||||
};
|
||||
/**
|
||||
* Remove the listeners of a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn Only remove the listeners that match this function.
|
||||
* @param {*} context Only remove the listeners that have this context.
|
||||
* @param {Boolean} once Only remove one-time listeners.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
|
||||
var evt = prefix ? prefix + event : event;
|
||||
if (!this._events[evt]) return this;
|
||||
|
||||
if (!fn) {
|
||||
clearEvent(this, evt);
|
||||
return this;
|
||||
}
|
||||
|
||||
var listeners = this._events[evt];
|
||||
|
||||
if (listeners.fn) {
|
||||
if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
|
||||
clearEvent(this, evt);
|
||||
}
|
||||
} else {
|
||||
for (var i = 0, events = [], length = listeners.length; i < length; i++) {
|
||||
if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
|
||||
events.push(listeners[i]);
|
||||
}
|
||||
} //
|
||||
// Reset the array, or remove it completely if we have no more listeners.
|
||||
//
|
||||
|
||||
|
||||
if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;else clearEvent(this, evt);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
/**
|
||||
* Remove all listeners, or those of the specified event.
|
||||
*
|
||||
* @param {(String|Symbol)} [event] The event name.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
|
||||
var evt;
|
||||
|
||||
if (event) {
|
||||
evt = prefix ? prefix + event : event;
|
||||
if (this._events[evt]) clearEvent(this, evt);
|
||||
} else {
|
||||
this._events = new Events();
|
||||
this._eventsCount = 0;
|
||||
}
|
||||
|
||||
return this;
|
||||
}; //
|
||||
// Alias methods names because people roll like that.
|
||||
//
|
||||
|
||||
|
||||
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
||||
EventEmitter.prototype.addListener = EventEmitter.prototype.on; //
|
||||
// Expose the prefix.
|
||||
//
|
||||
|
||||
EventEmitter.prefixed = prefix; //
|
||||
// Allow `EventEmitter` to be imported as module namespace.
|
||||
//
|
||||
|
||||
EventEmitter.EventEmitter = EventEmitter; //
|
||||
// Expose the module.
|
||||
//
|
||||
|
||||
if ('undefined' !== typeof module) {
|
||||
module.exports = EventEmitter;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"_from": "eventemitter3@^4.0.0",
|
||||
"_id": "eventemitter3@4.0.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
|
||||
"_location": "/eventemitter3",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "eventemitter3@^4.0.0",
|
||||
"name": "eventemitter3",
|
||||
"escapedName": "eventemitter3",
|
||||
"rawSpec": "^4.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^4.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/widget-ui"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
|
||||
"_shasum": "d65176163887ee59f386d64c82610b696a4a74eb",
|
||||
"_spec": "eventemitter3@^4.0.0",
|
||||
"_where": "C:\\Users\\sanfordsun\\WeChatProjects\\minicode-177\\node_modules\\widget-ui",
|
||||
"author": {
|
||||
"name": "Arnout Kazemier"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/primus/eventemitter3/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface.",
|
||||
"devDependencies": {
|
||||
"assume": "~2.2.0",
|
||||
"browserify": "~16.2.0",
|
||||
"mocha": "~6.1.0",
|
||||
"nyc": "~14.1.0",
|
||||
"pre-commit": "~1.2.0",
|
||||
"sauce-browsers": "~2.0.0",
|
||||
"sauce-test": "~1.3.3",
|
||||
"uglify-js": "~3.6.0"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"index.d.ts",
|
||||
"umd"
|
||||
],
|
||||
"homepage": "https://github.com/primus/eventemitter3#readme",
|
||||
"keywords": [
|
||||
"EventEmitter",
|
||||
"EventEmitter2",
|
||||
"EventEmitter3",
|
||||
"Events",
|
||||
"addEventListener",
|
||||
"addListener",
|
||||
"emit",
|
||||
"emits",
|
||||
"emitter",
|
||||
"event",
|
||||
"once",
|
||||
"pub/sub",
|
||||
"publish",
|
||||
"reactor",
|
||||
"subscribe"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "eventemitter3",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/primus/eventemitter3.git"
|
||||
},
|
||||
"scripts": {
|
||||
"benchmark": "find benchmarks/run -name '*.js' -exec benchmarks/start.sh {} \\;",
|
||||
"browserify": "rm -rf umd && mkdir umd && browserify index.js -s EventEmitter3 -o umd/eventemitter3.js",
|
||||
"minify": "uglifyjs umd/eventemitter3.js --source-map -cm -o umd/eventemitter3.min.js",
|
||||
"prepublishOnly": "npm run browserify && npm run minify",
|
||||
"test": "nyc --reporter=html --reporter=text mocha test/test.js",
|
||||
"test-browser": "node test/browser.js"
|
||||
},
|
||||
"typings": "index.d.ts",
|
||||
"version": "4.0.0"
|
||||
}
|
||||
@@ -0,0 +1,404 @@
|
||||
(function (f) {
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = f();
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define([], f);
|
||||
} else {
|
||||
var g;
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
g = window;
|
||||
} else if (typeof global !== "undefined") {
|
||||
g = global;
|
||||
} else if (typeof self !== "undefined") {
|
||||
g = self;
|
||||
} else {
|
||||
g = this;
|
||||
}
|
||||
|
||||
g.EventEmitter3 = f();
|
||||
}
|
||||
})(function () {
|
||||
var define, module, exports;
|
||||
return function () {
|
||||
function r(e, n, t) {
|
||||
function o(i, f) {
|
||||
if (!n[i]) {
|
||||
if (!e[i]) {
|
||||
var c = "function" == typeof require && require;
|
||||
if (!f && c) return c(i, !0);
|
||||
if (u) return u(i, !0);
|
||||
var a = new Error("Cannot find module '" + i + "'");
|
||||
throw a.code = "MODULE_NOT_FOUND", a;
|
||||
}
|
||||
|
||||
var p = n[i] = {
|
||||
exports: {}
|
||||
};
|
||||
e[i][0].call(p.exports, function (r) {
|
||||
var n = e[i][1][r];
|
||||
return o(n || r);
|
||||
}, p, p.exports, r, e, n, t);
|
||||
}
|
||||
|
||||
return n[i].exports;
|
||||
}
|
||||
|
||||
for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) o(t[i]);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
return r;
|
||||
}()({
|
||||
1: [function (require, module, exports) {
|
||||
'use strict';
|
||||
|
||||
var has = Object.prototype.hasOwnProperty,
|
||||
prefix = '~';
|
||||
/**
|
||||
* Constructor to create a storage for our `EE` objects.
|
||||
* An `Events` instance is a plain object whose properties are event names.
|
||||
*
|
||||
* @constructor
|
||||
* @private
|
||||
*/
|
||||
|
||||
function Events() {} //
|
||||
// We try to not inherit from `Object.prototype`. In some engines creating an
|
||||
// instance in this way is faster than calling `Object.create(null)` directly.
|
||||
// If `Object.create(null)` is not supported we prefix the event names with a
|
||||
// character to make sure that the built-in object properties are not
|
||||
// overridden or used as an attack vector.
|
||||
//
|
||||
|
||||
|
||||
if (Object.create) {
|
||||
Events.prototype = Object.create(null); //
|
||||
// This hack is needed because the `__proto__` property is still inherited in
|
||||
// some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
|
||||
//
|
||||
|
||||
if (!new Events().__proto__) prefix = false;
|
||||
}
|
||||
/**
|
||||
* Representation of a single event listener.
|
||||
*
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} context The context to invoke the listener with.
|
||||
* @param {Boolean} [once=false] Specify if the listener is a one-time listener.
|
||||
* @constructor
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
function EE(fn, context, once) {
|
||||
this.fn = fn;
|
||||
this.context = context;
|
||||
this.once = once || false;
|
||||
}
|
||||
/**
|
||||
* Add a listener for a given event.
|
||||
*
|
||||
* @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} context The context to invoke the listener with.
|
||||
* @param {Boolean} once Specify if the listener is a one-time listener.
|
||||
* @returns {EventEmitter}
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
function addListener(emitter, event, fn, context, once) {
|
||||
if (typeof fn !== 'function') {
|
||||
throw new TypeError('The listener must be a function');
|
||||
}
|
||||
|
||||
var listener = new EE(fn, context || emitter, once),
|
||||
evt = prefix ? prefix + event : event;
|
||||
if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);else emitter._events[evt] = [emitter._events[evt], listener];
|
||||
return emitter;
|
||||
}
|
||||
/**
|
||||
* Clear event by name.
|
||||
*
|
||||
* @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
|
||||
* @param {(String|Symbol)} evt The Event name.
|
||||
* @private
|
||||
*/
|
||||
|
||||
|
||||
function clearEvent(emitter, evt) {
|
||||
if (--emitter._eventsCount === 0) emitter._events = new Events();else delete emitter._events[evt];
|
||||
}
|
||||
/**
|
||||
* Minimal `EventEmitter` interface that is molded against the Node.js
|
||||
* `EventEmitter` interface.
|
||||
*
|
||||
* @constructor
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
function EventEmitter() {
|
||||
this._events = new Events();
|
||||
this._eventsCount = 0;
|
||||
}
|
||||
/**
|
||||
* Return an array listing the events for which the emitter has registered
|
||||
* listeners.
|
||||
*
|
||||
* @returns {Array}
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.eventNames = function eventNames() {
|
||||
var names = [],
|
||||
events,
|
||||
name;
|
||||
if (this._eventsCount === 0) return names;
|
||||
|
||||
for (name in events = this._events) {
|
||||
if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
|
||||
}
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
return names.concat(Object.getOwnPropertySymbols(events));
|
||||
}
|
||||
|
||||
return names;
|
||||
};
|
||||
/**
|
||||
* Return the listeners registered for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @returns {Array} The registered listeners.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.listeners = function listeners(event) {
|
||||
var evt = prefix ? prefix + event : event,
|
||||
handlers = this._events[evt];
|
||||
if (!handlers) return [];
|
||||
if (handlers.fn) return [handlers.fn];
|
||||
|
||||
for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
|
||||
ee[i] = handlers[i].fn;
|
||||
}
|
||||
|
||||
return ee;
|
||||
};
|
||||
/**
|
||||
* Return the number of listeners listening to a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @returns {Number} The number of listeners.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.listenerCount = function listenerCount(event) {
|
||||
var evt = prefix ? prefix + event : event,
|
||||
listeners = this._events[evt];
|
||||
if (!listeners) return 0;
|
||||
if (listeners.fn) return 1;
|
||||
return listeners.length;
|
||||
};
|
||||
/**
|
||||
* Calls each of the listeners registered for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @returns {Boolean} `true` if the event had listeners, else `false`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
|
||||
var evt = prefix ? prefix + event : event;
|
||||
if (!this._events[evt]) return false;
|
||||
var listeners = this._events[evt],
|
||||
len = arguments.length,
|
||||
args,
|
||||
i;
|
||||
|
||||
if (listeners.fn) {
|
||||
if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
return listeners.fn.call(listeners.context), true;
|
||||
|
||||
case 2:
|
||||
return listeners.fn.call(listeners.context, a1), true;
|
||||
|
||||
case 3:
|
||||
return listeners.fn.call(listeners.context, a1, a2), true;
|
||||
|
||||
case 4:
|
||||
return listeners.fn.call(listeners.context, a1, a2, a3), true;
|
||||
|
||||
case 5:
|
||||
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
|
||||
|
||||
case 6:
|
||||
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
|
||||
}
|
||||
|
||||
for (i = 1, args = new Array(len - 1); i < len; i++) {
|
||||
args[i - 1] = arguments[i];
|
||||
}
|
||||
|
||||
listeners.fn.apply(listeners.context, args);
|
||||
} else {
|
||||
var length = listeners.length,
|
||||
j;
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
listeners[i].fn.call(listeners[i].context);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
listeners[i].fn.call(listeners[i].context, a1);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
listeners[i].fn.call(listeners[i].context, a1, a2);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) {
|
||||
args[j - 1] = arguments[j];
|
||||
}
|
||||
listeners[i].fn.apply(listeners[i].context, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
/**
|
||||
* Add a listener for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} [context=this] The context to invoke the listener with.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.on = function on(event, fn, context) {
|
||||
return addListener(this, event, fn, context, false);
|
||||
};
|
||||
/**
|
||||
* Add a one-time listener for a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn The listener function.
|
||||
* @param {*} [context=this] The context to invoke the listener with.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.once = function once(event, fn, context) {
|
||||
return addListener(this, event, fn, context, true);
|
||||
};
|
||||
/**
|
||||
* Remove the listeners of a given event.
|
||||
*
|
||||
* @param {(String|Symbol)} event The event name.
|
||||
* @param {Function} fn Only remove the listeners that match this function.
|
||||
* @param {*} context Only remove the listeners that have this context.
|
||||
* @param {Boolean} once Only remove one-time listeners.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
|
||||
var evt = prefix ? prefix + event : event;
|
||||
if (!this._events[evt]) return this;
|
||||
|
||||
if (!fn) {
|
||||
clearEvent(this, evt);
|
||||
return this;
|
||||
}
|
||||
|
||||
var listeners = this._events[evt];
|
||||
|
||||
if (listeners.fn) {
|
||||
if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
|
||||
clearEvent(this, evt);
|
||||
}
|
||||
} else {
|
||||
for (var i = 0, events = [], length = listeners.length; i < length; i++) {
|
||||
if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
|
||||
events.push(listeners[i]);
|
||||
}
|
||||
} //
|
||||
// Reset the array, or remove it completely if we have no more listeners.
|
||||
//
|
||||
|
||||
|
||||
if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;else clearEvent(this, evt);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
/**
|
||||
* Remove all listeners, or those of the specified event.
|
||||
*
|
||||
* @param {(String|Symbol)} [event] The event name.
|
||||
* @returns {EventEmitter} `this`.
|
||||
* @public
|
||||
*/
|
||||
|
||||
|
||||
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
|
||||
var evt;
|
||||
|
||||
if (event) {
|
||||
evt = prefix ? prefix + event : event;
|
||||
if (this._events[evt]) clearEvent(this, evt);
|
||||
} else {
|
||||
this._events = new Events();
|
||||
this._eventsCount = 0;
|
||||
}
|
||||
|
||||
return this;
|
||||
}; //
|
||||
// Alias methods names because people roll like that.
|
||||
//
|
||||
|
||||
|
||||
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
||||
EventEmitter.prototype.addListener = EventEmitter.prototype.on; //
|
||||
// Expose the prefix.
|
||||
//
|
||||
|
||||
EventEmitter.prefixed = prefix; //
|
||||
// Allow `EventEmitter` to be imported as module namespace.
|
||||
//
|
||||
|
||||
EventEmitter.EventEmitter = EventEmitter; //
|
||||
// Expose the module.
|
||||
//
|
||||
|
||||
if ('undefined' !== typeof module) {
|
||||
module.exports = EventEmitter;
|
||||
}
|
||||
}, {}]
|
||||
}, {}, [1])(1);
|
||||
});
|
||||
162
uniapp/uni-app/components/miniprogram_npm/eventemitter3/umd/eventemitter3.min.js
vendored
Normal file
162
uniapp/uni-app/components/miniprogram_npm/eventemitter3/umd/eventemitter3.min.js
vendored
Normal file
@@ -0,0 +1,162 @@
|
||||
!function (e) {
|
||||
if ("object" == typeof exports && "undefined" != typeof module) module.exports = e();else if ("function" == typeof define && define.amd) define([], e);else {
|
||||
("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).EventEmitter3 = e();
|
||||
}
|
||||
}(function () {
|
||||
return function i(s, f, c) {
|
||||
function u(t, e) {
|
||||
if (!f[t]) {
|
||||
if (!s[t]) {
|
||||
var n = "function" == typeof require && require;
|
||||
if (!e && n) return n(t, !0);
|
||||
if (a) return a(t, !0);
|
||||
var r = new Error("Cannot find module '" + t + "'");
|
||||
throw r.code = "MODULE_NOT_FOUND", r;
|
||||
}
|
||||
|
||||
var o = f[t] = {
|
||||
exports: {}
|
||||
};
|
||||
s[t][0].call(o.exports, function (e) {
|
||||
return u(s[t][1][e] || e);
|
||||
}, o, o.exports, i, s, f, c);
|
||||
}
|
||||
|
||||
return f[t].exports;
|
||||
}
|
||||
|
||||
for (var a = "function" == typeof require && require, e = 0; e < c.length; e++) u(c[e]);
|
||||
|
||||
return u;
|
||||
}({
|
||||
1: [function (e, t, n) {
|
||||
"use strict";
|
||||
|
||||
var r = Object.prototype.hasOwnProperty,
|
||||
v = "~";
|
||||
|
||||
function o() {}
|
||||
|
||||
function f(e, t, n) {
|
||||
this.fn = e, this.context = t, this.once = n || !1;
|
||||
}
|
||||
|
||||
function i(e, t, n, r, o) {
|
||||
if ("function" != typeof n) throw new TypeError("The listener must be a function");
|
||||
var i = new f(n, r || e, o),
|
||||
s = v ? v + t : t;
|
||||
return e._events[s] ? e._events[s].fn ? e._events[s] = [e._events[s], i] : e._events[s].push(i) : (e._events[s] = i, e._eventsCount++), e;
|
||||
}
|
||||
|
||||
function u(e, t) {
|
||||
0 == --e._eventsCount ? e._events = new o() : delete e._events[t];
|
||||
}
|
||||
|
||||
function s() {
|
||||
this._events = new o(), this._eventsCount = 0;
|
||||
}
|
||||
|
||||
Object.create && (o.prototype = Object.create(null), new o().__proto__ || (v = !1)), s.prototype.eventNames = function () {
|
||||
var e,
|
||||
t,
|
||||
n = [];
|
||||
if (0 === this._eventsCount) return n;
|
||||
|
||||
for (t in e = this._events) r.call(e, t) && n.push(v ? t.slice(1) : t);
|
||||
|
||||
return Object.getOwnPropertySymbols ? n.concat(Object.getOwnPropertySymbols(e)) : n;
|
||||
}, s.prototype.listeners = function (e) {
|
||||
var t = v ? v + e : e,
|
||||
n = this._events[t];
|
||||
if (!n) return [];
|
||||
if (n.fn) return [n.fn];
|
||||
|
||||
for (var r = 0, o = n.length, i = new Array(o); r < o; r++) i[r] = n[r].fn;
|
||||
|
||||
return i;
|
||||
}, s.prototype.listenerCount = function (e) {
|
||||
var t = v ? v + e : e,
|
||||
n = this._events[t];
|
||||
return n ? n.fn ? 1 : n.length : 0;
|
||||
}, s.prototype.emit = function (e, t, n, r, o, i) {
|
||||
var s = v ? v + e : e;
|
||||
if (!this._events[s]) return !1;
|
||||
var f,
|
||||
c,
|
||||
u = this._events[s],
|
||||
a = arguments.length;
|
||||
|
||||
if (u.fn) {
|
||||
switch (u.once && this.removeListener(e, u.fn, void 0, !0), a) {
|
||||
case 1:
|
||||
return u.fn.call(u.context), !0;
|
||||
|
||||
case 2:
|
||||
return u.fn.call(u.context, t), !0;
|
||||
|
||||
case 3:
|
||||
return u.fn.call(u.context, t, n), !0;
|
||||
|
||||
case 4:
|
||||
return u.fn.call(u.context, t, n, r), !0;
|
||||
|
||||
case 5:
|
||||
return u.fn.call(u.context, t, n, r, o), !0;
|
||||
|
||||
case 6:
|
||||
return u.fn.call(u.context, t, n, r, o, i), !0;
|
||||
}
|
||||
|
||||
for (c = 1, f = new Array(a - 1); c < a; c++) f[c - 1] = arguments[c];
|
||||
|
||||
u.fn.apply(u.context, f);
|
||||
} else {
|
||||
var l,
|
||||
p = u.length;
|
||||
|
||||
for (c = 0; c < p; c++) switch (u[c].once && this.removeListener(e, u[c].fn, void 0, !0), a) {
|
||||
case 1:
|
||||
u[c].fn.call(u[c].context);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
u[c].fn.call(u[c].context, t);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
u[c].fn.call(u[c].context, t, n);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
u[c].fn.call(u[c].context, t, n, r);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!f) for (l = 1, f = new Array(a - 1); l < a; l++) f[l - 1] = arguments[l];
|
||||
u[c].fn.apply(u[c].context, f);
|
||||
}
|
||||
}
|
||||
|
||||
return !0;
|
||||
}, s.prototype.on = function (e, t, n) {
|
||||
return i(this, e, t, n, !1);
|
||||
}, s.prototype.once = function (e, t, n) {
|
||||
return i(this, e, t, n, !0);
|
||||
}, s.prototype.removeListener = function (e, t, n, r) {
|
||||
var o = v ? v + e : e;
|
||||
if (!this._events[o]) return this;
|
||||
if (!t) return u(this, o), this;
|
||||
var i = this._events[o];
|
||||
if (i.fn) i.fn !== t || r && !i.once || n && i.context !== n || u(this, o);else {
|
||||
for (var s = 0, f = [], c = i.length; s < c; s++) (i[s].fn !== t || r && !i[s].once || n && i[s].context !== n) && f.push(i[s]);
|
||||
|
||||
f.length ? this._events[o] = 1 === f.length ? f[0] : f : u(this, o);
|
||||
}
|
||||
return this;
|
||||
}, s.prototype.removeAllListeners = function (e) {
|
||||
var t;
|
||||
return e ? (t = v ? v + e : e, this._events[t] && u(this, t)) : (this._events = new o(), this._eventsCount = 0), this;
|
||||
}, s.prototype.off = s.prototype.removeListener, s.prototype.addListener = s.prototype.on, s.prefixed = v, s.EventEmitter = s, void 0 !== t && (t.exports = s);
|
||||
}, {}]
|
||||
}, {}, [1])(1);
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
1295
uniapp/uni-app/components/miniprogram_npm/widget-ui/css-layout.js
Normal file
1295
uniapp/uni-app/components/miniprogram_npm/widget-ui/css-layout.js
Normal file
File diff suppressed because it is too large
Load Diff
172
uniapp/uni-app/components/miniprogram_npm/widget-ui/element.ts
Normal file
172
uniapp/uni-app/components/miniprogram_npm/widget-ui/element.ts
Normal file
@@ -0,0 +1,172 @@
|
||||
|
||||
import computeLayout from "./css-layout";
|
||||
import { getDefaultStyle, scalableStyles, layoutAffectedStyles } from "./style";
|
||||
|
||||
type LayoutData = {
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number
|
||||
};
|
||||
|
||||
type LayoutNode = {
|
||||
id: number,
|
||||
style: Object,
|
||||
children: LayoutNode[],
|
||||
layout?: LayoutData
|
||||
};
|
||||
|
||||
let uuid = 0;
|
||||
|
||||
class Element {
|
||||
public static uuid(): number {
|
||||
return uuid++;
|
||||
}
|
||||
|
||||
public parent: Element | null = null;
|
||||
public id: number = Element.uuid();
|
||||
public style: { [key: string]: any } = {};
|
||||
public computedStyle: { [key: string]: any } = {};
|
||||
public lastComputedStyle: { [key: string]: any } = {};
|
||||
public children: { [key: string]: Element } = {};
|
||||
public layoutBox: LayoutData = { left: 0, top: 0, width: 0, height: 0 };
|
||||
|
||||
constructor(style: { [key: string]: any } = {}) {
|
||||
// 拷贝一份,防止被外部逻辑修改
|
||||
style = Object.assign(getDefaultStyle(), style);
|
||||
this.computedStyle = Object.assign(getDefaultStyle(), style);
|
||||
this.lastComputedStyle = Object.assign(getDefaultStyle(), style);
|
||||
|
||||
Object.keys(style).forEach(key => {
|
||||
Object.defineProperty(this.style, key, {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
get: () => style[key],
|
||||
set: (value: any) => {
|
||||
if (value === style[key] || value === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.lastComputedStyle = this.computedStyle[key]
|
||||
style[key] = value
|
||||
this.computedStyle[key] = value
|
||||
|
||||
// 如果设置的是一个可缩放的属性, 计算自己
|
||||
if (scalableStyles.includes(key) && this.style.scale) {
|
||||
this.computedStyle[key] = value * this.style.scale
|
||||
}
|
||||
|
||||
// 如果设置的是 scale, 则把所有可缩放的属性计算
|
||||
if (key === "scale") {
|
||||
scalableStyles.forEach(prop => {
|
||||
if (style[prop]) {
|
||||
this.computedStyle[prop] = style[prop] * value
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (key === "hidden") {
|
||||
if (value) {
|
||||
layoutAffectedStyles.forEach((key: string) => {
|
||||
this.computedStyle[key] = 0;
|
||||
});
|
||||
} else {
|
||||
layoutAffectedStyles.forEach((key: string) => {
|
||||
this.computedStyle[key] = this.lastComputedStyle[key];
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (this.style.scale) {
|
||||
scalableStyles.forEach((key: string) => {
|
||||
if (this.style[key]) {
|
||||
const computedValue = this.style[key] * this.style.scale;
|
||||
this.computedStyle[key] = computedValue;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (style.hidden) {
|
||||
layoutAffectedStyles.forEach((key: string) => {
|
||||
this.computedStyle[key] = 0;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getAbsolutePosition(element: Element) {
|
||||
if (!element) {
|
||||
return this.getAbsolutePosition(this)
|
||||
}
|
||||
|
||||
if (!element.parent) {
|
||||
return {
|
||||
left: 0,
|
||||
top: 0
|
||||
}
|
||||
}
|
||||
|
||||
const {left, top} = this.getAbsolutePosition(element.parent)
|
||||
|
||||
return {
|
||||
left: left + element.layoutBox.left,
|
||||
top: top + element.layoutBox.top
|
||||
}
|
||||
}
|
||||
|
||||
public add(element: Element) {
|
||||
element.parent = this;
|
||||
this.children[element.id] = element;
|
||||
}
|
||||
|
||||
public remove(element?: Element) {
|
||||
// 删除自己
|
||||
if (!element) {
|
||||
Object.keys(this.children).forEach(id => {
|
||||
const child = this.children[id]
|
||||
child.remove()
|
||||
delete this.children[id]
|
||||
})
|
||||
} else if (this.children[element.id]) {
|
||||
// 是自己的子节点才删除
|
||||
element.remove()
|
||||
delete this.children[element.id];
|
||||
}
|
||||
}
|
||||
|
||||
public getNodeTree(): LayoutNode {
|
||||
return {
|
||||
id: this.id,
|
||||
style: this.computedStyle,
|
||||
children: Object.keys(this.children).map((id: string) => {
|
||||
const child = this.children[id];
|
||||
return child.getNodeTree();
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
public applyLayout(layoutNode: LayoutNode) {
|
||||
["left", "top", "width", "height"].forEach((key: string) => {
|
||||
if (layoutNode.layout && typeof layoutNode.layout[key] === "number") {
|
||||
this.layoutBox[key] = layoutNode.layout[key];
|
||||
if (this.parent && (key === "left" || key === "top")) {
|
||||
this.layoutBox[key] += this.parent.layoutBox[key];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
layoutNode.children.forEach((child: LayoutNode) => {
|
||||
this.children[child.id].applyLayout(child);
|
||||
});
|
||||
}
|
||||
|
||||
layout() {
|
||||
const nodeTree = this.getNodeTree();
|
||||
computeLayout(nodeTree);
|
||||
this.applyLayout(nodeTree);
|
||||
}
|
||||
}
|
||||
|
||||
export default Element;
|
||||
15
uniapp/uni-app/components/miniprogram_npm/widget-ui/event.ts
Normal file
15
uniapp/uni-app/components/miniprogram_npm/widget-ui/event.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import _EventEmitter from "eventemitter3";
|
||||
const emitter = new _EventEmitter();
|
||||
export default class EventEmitter {
|
||||
public emit(event: string, data?: any) {
|
||||
emitter.emit(event, data);
|
||||
}
|
||||
|
||||
public on(event: string, callback) {
|
||||
emitter.on(event, callback);
|
||||
}
|
||||
|
||||
public off(event: string, callback) {
|
||||
emitter.off(event, callback);
|
||||
}
|
||||
}
|
||||
746
uniapp/uni-app/components/miniprogram_npm/widget-ui/index.js
Normal file
746
uniapp/uni-app/components/miniprogram_npm/widget-ui/index.js
Normal file
@@ -0,0 +1,746 @@
|
||||
module.exports = function () {
|
||||
var __MODS__ = {};
|
||||
|
||||
var __DEFINE__ = function (modId, func, req) {
|
||||
var m = {
|
||||
exports: {}
|
||||
};
|
||||
__MODS__[modId] = {
|
||||
status: 0,
|
||||
func: func,
|
||||
req: req,
|
||||
m: m
|
||||
};
|
||||
};
|
||||
|
||||
var __REQUIRE__ = function (modId, source) {
|
||||
if (!__MODS__[modId]) return require(source);
|
||||
|
||||
if (!__MODS__[modId].status) {
|
||||
var m = {
|
||||
exports: {}
|
||||
};
|
||||
__MODS__[modId].status = 1;
|
||||
|
||||
__MODS__[modId].func(__MODS__[modId].req, m, m.exports);
|
||||
|
||||
if (typeof m.exports === "object") {
|
||||
__MODS__[modId].m.exports.__proto__ = m.exports.__proto__;
|
||||
Object.keys(m.exports).forEach(function (k) {
|
||||
__MODS__[modId].m.exports[k] = m.exports[k];
|
||||
var desp = Object.getOwnPropertyDescriptor(m.exports, k);
|
||||
if (desp && desp.configurable) Object.defineProperty(m.exports, k, {
|
||||
set: function (val) {
|
||||
__MODS__[modId].m.exports[k] = val;
|
||||
},
|
||||
get: function () {
|
||||
return __MODS__[modId].m.exports[k];
|
||||
}
|
||||
});
|
||||
});
|
||||
if (m.exports.__esModule) Object.defineProperty(__MODS__[modId].m.exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
} else {
|
||||
__MODS__[modId].m.exports = m.exports;
|
||||
}
|
||||
}
|
||||
|
||||
return __MODS__[modId].m.exports;
|
||||
};
|
||||
|
||||
var __REQUIRE_WILDCARD__ = function (obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
} else {
|
||||
var newObj = {};
|
||||
|
||||
if (obj != null) {
|
||||
for (var k in obj) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k];
|
||||
}
|
||||
}
|
||||
|
||||
newObj.default = obj;
|
||||
return newObj;
|
||||
}
|
||||
};
|
||||
|
||||
var __REQUIRE_DEFAULT__ = function (obj) {
|
||||
return obj && obj.__esModule ? obj.default : obj;
|
||||
};
|
||||
|
||||
__DEFINE__(1572960819414, function (require, module, exports) {
|
||||
!function (t, e) {
|
||||
if ("object" == typeof exports && "object" == typeof module) module.exports = e();else if ("function" == typeof define && define.amd) define([], e);else {
|
||||
var o = e();
|
||||
|
||||
for (var r in o) ("object" == typeof exports ? exports : t)[r] = o[r];
|
||||
}
|
||||
}(this, function () {
|
||||
return function (t) {
|
||||
var e = {};
|
||||
|
||||
function o(r) {
|
||||
if (e[r]) return e[r].exports;
|
||||
var i = e[r] = {
|
||||
i: r,
|
||||
l: !1,
|
||||
exports: {}
|
||||
};
|
||||
return t[r].call(i.exports, i, i.exports, o), i.l = !0, i.exports;
|
||||
}
|
||||
|
||||
return o.m = t, o.c = e, o.d = function (t, e, r) {
|
||||
o.o(t, e) || Object.defineProperty(t, e, {
|
||||
enumerable: !0,
|
||||
get: r
|
||||
});
|
||||
}, o.r = function (t) {
|
||||
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
|
||||
value: "Module"
|
||||
}), Object.defineProperty(t, "__esModule", {
|
||||
value: !0
|
||||
});
|
||||
}, o.t = function (t, e) {
|
||||
if (1 & e && (t = o(t)), 8 & e) return t;
|
||||
if (4 & e && "object" == typeof t && t && t.__esModule) return t;
|
||||
var r = Object.create(null);
|
||||
if (o.r(r), Object.defineProperty(r, "default", {
|
||||
enumerable: !0,
|
||||
value: t
|
||||
}), 2 & e && "string" != typeof t) for (var i in t) o.d(r, i, function (e) {
|
||||
return t[e];
|
||||
}.bind(null, i));
|
||||
return r;
|
||||
}, o.n = function (t) {
|
||||
var e = t && t.__esModule ? function () {
|
||||
return t.default;
|
||||
} : function () {
|
||||
return t;
|
||||
};
|
||||
return o.d(e, "a", e), e;
|
||||
}, o.o = function (t, e) {
|
||||
return Object.prototype.hasOwnProperty.call(t, e);
|
||||
}, o.p = "", o(o.s = 0);
|
||||
}([function (t, e, o) {
|
||||
var r = this && this.__importDefault || function (t) {
|
||||
return t && t.__esModule ? t : {
|
||||
default: t
|
||||
};
|
||||
};
|
||||
|
||||
Object.defineProperty(e, "__esModule", {
|
||||
value: !0
|
||||
});
|
||||
|
||||
var i = r(o(1)),
|
||||
l = o(2),
|
||||
n = 0,
|
||||
a = function () {
|
||||
function t(e) {
|
||||
var o = this;
|
||||
void 0 === e && (e = {}), this.parent = null, this.id = t.uuid(), this.style = {}, this.computedStyle = {}, this.lastComputedStyle = {}, this.children = {}, this.layoutBox = {
|
||||
left: 0,
|
||||
top: 0,
|
||||
width: 0,
|
||||
height: 0
|
||||
}, e = Object.assign(l.getDefaultStyle(), e), this.computedStyle = Object.assign(l.getDefaultStyle(), e), this.lastComputedStyle = Object.assign(l.getDefaultStyle(), e), Object.keys(e).forEach(function (t) {
|
||||
Object.defineProperty(o.style, t, {
|
||||
configurable: !0,
|
||||
enumerable: !0,
|
||||
get: function () {
|
||||
return e[t];
|
||||
},
|
||||
set: function (r) {
|
||||
r !== e[t] && void 0 !== r && (o.lastComputedStyle = o.computedStyle[t], e[t] = r, o.computedStyle[t] = r, l.scalableStyles.includes(t) && o.style.scale && (o.computedStyle[t] = r * o.style.scale), "scale" === t && l.scalableStyles.forEach(function (t) {
|
||||
e[t] && (o.computedStyle[t] = e[t] * r);
|
||||
}), "hidden" === t && (r ? l.layoutAffectedStyles.forEach(function (t) {
|
||||
o.computedStyle[t] = 0;
|
||||
}) : l.layoutAffectedStyles.forEach(function (t) {
|
||||
o.computedStyle[t] = o.lastComputedStyle[t];
|
||||
})));
|
||||
}
|
||||
});
|
||||
}), this.style.scale && l.scalableStyles.forEach(function (t) {
|
||||
if (o.style[t]) {
|
||||
var e = o.style[t] * o.style.scale;
|
||||
o.computedStyle[t] = e;
|
||||
}
|
||||
}), e.hidden && l.layoutAffectedStyles.forEach(function (t) {
|
||||
o.computedStyle[t] = 0;
|
||||
});
|
||||
}
|
||||
|
||||
return t.uuid = function () {
|
||||
return n++;
|
||||
}, t.prototype.getAbsolutePosition = function (t) {
|
||||
if (!t) return this.getAbsolutePosition(this);
|
||||
if (!t.parent) return {
|
||||
left: 0,
|
||||
top: 0
|
||||
};
|
||||
var e = this.getAbsolutePosition(t.parent),
|
||||
o = e.left,
|
||||
r = e.top;
|
||||
return {
|
||||
left: o + t.layoutBox.left,
|
||||
top: r + t.layoutBox.top
|
||||
};
|
||||
}, t.prototype.add = function (t) {
|
||||
t.parent = this, this.children[t.id] = t;
|
||||
}, t.prototype.remove = function (t) {
|
||||
var e = this;
|
||||
t ? this.children[t.id] && (t.remove(), delete this.children[t.id]) : Object.keys(this.children).forEach(function (t) {
|
||||
e.children[t].remove(), delete e.children[t];
|
||||
});
|
||||
}, t.prototype.getNodeTree = function () {
|
||||
var t = this;
|
||||
return {
|
||||
id: this.id,
|
||||
style: this.computedStyle,
|
||||
children: Object.keys(this.children).map(function (e) {
|
||||
return t.children[e].getNodeTree();
|
||||
})
|
||||
};
|
||||
}, t.prototype.applyLayout = function (t) {
|
||||
var e = this;
|
||||
["left", "top", "width", "height"].forEach(function (o) {
|
||||
t.layout && "number" == typeof t.layout[o] && (e.layoutBox[o] = t.layout[o], !e.parent || "left" !== o && "top" !== o || (e.layoutBox[o] += e.parent.layoutBox[o]));
|
||||
}), t.children.forEach(function (t) {
|
||||
e.children[t.id].applyLayout(t);
|
||||
});
|
||||
}, t.prototype.layout = function () {
|
||||
var t = this.getNodeTree();
|
||||
i.default(t), this.applyLayout(t);
|
||||
}, t;
|
||||
}();
|
||||
|
||||
e.default = a;
|
||||
}, function (t, e, o) {
|
||||
o.r(e);
|
||||
|
||||
var r = function () {
|
||||
var t,
|
||||
e = "inherit",
|
||||
o = "ltr",
|
||||
r = "rtl",
|
||||
i = "row",
|
||||
l = "row-reverse",
|
||||
n = "column",
|
||||
a = "column-reverse",
|
||||
u = "flex-start",
|
||||
d = "center",
|
||||
s = "flex-end",
|
||||
y = "space-between",
|
||||
c = "space-around",
|
||||
f = "flex-start",
|
||||
h = "center",
|
||||
p = "flex-end",
|
||||
g = "stretch",
|
||||
v = "relative",
|
||||
m = "absolute",
|
||||
b = {
|
||||
row: "left",
|
||||
"row-reverse": "right",
|
||||
column: "top",
|
||||
"column-reverse": "bottom"
|
||||
},
|
||||
x = {
|
||||
row: "right",
|
||||
"row-reverse": "left",
|
||||
column: "bottom",
|
||||
"column-reverse": "top"
|
||||
},
|
||||
w = {
|
||||
row: "left",
|
||||
"row-reverse": "right",
|
||||
column: "top",
|
||||
"column-reverse": "bottom"
|
||||
},
|
||||
S = {
|
||||
row: "width",
|
||||
"row-reverse": "width",
|
||||
column: "height",
|
||||
"column-reverse": "height"
|
||||
};
|
||||
|
||||
function W(t) {
|
||||
return void 0 === t;
|
||||
}
|
||||
|
||||
function L(t) {
|
||||
return t === i || t === l;
|
||||
}
|
||||
|
||||
function k(t, e) {
|
||||
if (void 0 !== t.style.marginStart && L(e)) return t.style.marginStart;
|
||||
var o = null;
|
||||
|
||||
switch (e) {
|
||||
case "row":
|
||||
o = t.style.marginLeft;
|
||||
break;
|
||||
|
||||
case "row-reverse":
|
||||
o = t.style.marginRight;
|
||||
break;
|
||||
|
||||
case "column":
|
||||
o = t.style.marginTop;
|
||||
break;
|
||||
|
||||
case "column-reverse":
|
||||
o = t.style.marginBottom;
|
||||
}
|
||||
|
||||
return void 0 !== o ? o : void 0 !== t.style.margin ? t.style.margin : 0;
|
||||
}
|
||||
|
||||
function j(t, e) {
|
||||
if (void 0 !== t.style.marginEnd && L(e)) return t.style.marginEnd;
|
||||
var o = null;
|
||||
|
||||
switch (e) {
|
||||
case "row":
|
||||
o = t.style.marginRight;
|
||||
break;
|
||||
|
||||
case "row-reverse":
|
||||
o = t.style.marginLeft;
|
||||
break;
|
||||
|
||||
case "column":
|
||||
o = t.style.marginBottom;
|
||||
break;
|
||||
|
||||
case "column-reverse":
|
||||
o = t.style.marginTop;
|
||||
}
|
||||
|
||||
return null != o ? o : void 0 !== t.style.margin ? t.style.margin : 0;
|
||||
}
|
||||
|
||||
function B(t, e) {
|
||||
if (void 0 !== t.style.borderStartWidth && t.style.borderStartWidth >= 0 && L(e)) return t.style.borderStartWidth;
|
||||
var o = null;
|
||||
|
||||
switch (e) {
|
||||
case "row":
|
||||
o = t.style.borderLeftWidth;
|
||||
break;
|
||||
|
||||
case "row-reverse":
|
||||
o = t.style.borderRightWidth;
|
||||
break;
|
||||
|
||||
case "column":
|
||||
o = t.style.borderTopWidth;
|
||||
break;
|
||||
|
||||
case "column-reverse":
|
||||
o = t.style.borderBottomWidth;
|
||||
}
|
||||
|
||||
return null != o && o >= 0 ? o : void 0 !== t.style.borderWidth && t.style.borderWidth >= 0 ? t.style.borderWidth : 0;
|
||||
}
|
||||
|
||||
function E(t, e) {
|
||||
if (void 0 !== t.style.borderEndWidth && t.style.borderEndWidth >= 0 && L(e)) return t.style.borderEndWidth;
|
||||
var o = null;
|
||||
|
||||
switch (e) {
|
||||
case "row":
|
||||
o = t.style.borderRightWidth;
|
||||
break;
|
||||
|
||||
case "row-reverse":
|
||||
o = t.style.borderLeftWidth;
|
||||
break;
|
||||
|
||||
case "column":
|
||||
o = t.style.borderBottomWidth;
|
||||
break;
|
||||
|
||||
case "column-reverse":
|
||||
o = t.style.borderTopWidth;
|
||||
}
|
||||
|
||||
return null != o && o >= 0 ? o : void 0 !== t.style.borderWidth && t.style.borderWidth >= 0 ? t.style.borderWidth : 0;
|
||||
}
|
||||
|
||||
function C(t, e) {
|
||||
return function (t, e) {
|
||||
if (void 0 !== t.style.paddingStart && t.style.paddingStart >= 0 && L(e)) return t.style.paddingStart;
|
||||
var o = null;
|
||||
|
||||
switch (e) {
|
||||
case "row":
|
||||
o = t.style.paddingLeft;
|
||||
break;
|
||||
|
||||
case "row-reverse":
|
||||
o = t.style.paddingRight;
|
||||
break;
|
||||
|
||||
case "column":
|
||||
o = t.style.paddingTop;
|
||||
break;
|
||||
|
||||
case "column-reverse":
|
||||
o = t.style.paddingBottom;
|
||||
}
|
||||
|
||||
return null != o && o >= 0 ? o : void 0 !== t.style.padding && t.style.padding >= 0 ? t.style.padding : 0;
|
||||
}(t, e) + B(t, e);
|
||||
}
|
||||
|
||||
function T(t, e) {
|
||||
return function (t, e) {
|
||||
if (void 0 !== t.style.paddingEnd && t.style.paddingEnd >= 0 && L(e)) return t.style.paddingEnd;
|
||||
var o = null;
|
||||
|
||||
switch (e) {
|
||||
case "row":
|
||||
o = t.style.paddingRight;
|
||||
break;
|
||||
|
||||
case "row-reverse":
|
||||
o = t.style.paddingLeft;
|
||||
break;
|
||||
|
||||
case "column":
|
||||
o = t.style.paddingBottom;
|
||||
break;
|
||||
|
||||
case "column-reverse":
|
||||
o = t.style.paddingTop;
|
||||
}
|
||||
|
||||
return null != o && o >= 0 ? o : void 0 !== t.style.padding && t.style.padding >= 0 ? t.style.padding : 0;
|
||||
}(t, e) + E(t, e);
|
||||
}
|
||||
|
||||
function O(t, e) {
|
||||
return B(t, e) + E(t, e);
|
||||
}
|
||||
|
||||
function _(t, e) {
|
||||
return k(t, e) + j(t, e);
|
||||
}
|
||||
|
||||
function R(t, e) {
|
||||
return C(t, e) + T(t, e);
|
||||
}
|
||||
|
||||
function A(t, e) {
|
||||
return e.style.alignSelf ? e.style.alignSelf : t.style.alignItems ? t.style.alignItems : "stretch";
|
||||
}
|
||||
|
||||
function P(t, e) {
|
||||
if (e === r) {
|
||||
if (t === i) return l;
|
||||
if (t === l) return i;
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
function D(t, e) {
|
||||
return function (t) {
|
||||
return t === n || t === a;
|
||||
}(t) ? P(i, e) : n;
|
||||
}
|
||||
|
||||
function H(t) {
|
||||
return t.style.position ? t.style.position : "relative";
|
||||
}
|
||||
|
||||
function M(t) {
|
||||
return H(t) === v && t.style.flex > 0;
|
||||
}
|
||||
|
||||
function I(t, e) {
|
||||
return t.layout[S[e]] + _(t, e);
|
||||
}
|
||||
|
||||
function N(t, e) {
|
||||
return void 0 !== t.style[S[e]] && t.style[S[e]] >= 0;
|
||||
}
|
||||
|
||||
function F(t, e) {
|
||||
return void 0 !== t.style[e];
|
||||
}
|
||||
|
||||
function q(t, e) {
|
||||
return void 0 !== t.style[e] ? t.style[e] : 0;
|
||||
}
|
||||
|
||||
function z(t, e, o) {
|
||||
var r = {
|
||||
row: t.style.minWidth,
|
||||
"row-reverse": t.style.minWidth,
|
||||
column: t.style.minHeight,
|
||||
"column-reverse": t.style.minHeight
|
||||
}[e],
|
||||
i = {
|
||||
row: t.style.maxWidth,
|
||||
"row-reverse": t.style.maxWidth,
|
||||
column: t.style.maxHeight,
|
||||
"column-reverse": t.style.maxHeight
|
||||
}[e],
|
||||
l = o;
|
||||
return void 0 !== i && i >= 0 && l > i && (l = i), void 0 !== r && r >= 0 && l < r && (l = r), l;
|
||||
}
|
||||
|
||||
function U(t, e) {
|
||||
return t > e ? t : e;
|
||||
}
|
||||
|
||||
function G(t, e) {
|
||||
void 0 === t.layout[S[e]] && N(t, e) && (t.layout[S[e]] = U(z(t, e, t.style[S[e]]), R(t, e)));
|
||||
}
|
||||
|
||||
function J(t, e, o) {
|
||||
e.layout[x[o]] = t.layout[S[o]] - e.layout[S[o]] - e.layout[w[o]];
|
||||
}
|
||||
|
||||
function K(t, e) {
|
||||
return void 0 !== t.style[b[e]] ? q(t, b[e]) : -q(t, x[e]);
|
||||
}
|
||||
|
||||
function Q(r, E, Q) {
|
||||
var X = function (t, r) {
|
||||
var i;
|
||||
return (i = t.style.direction ? t.style.direction : e) === e && (i = void 0 === r ? o : r), i;
|
||||
}(r, Q),
|
||||
Y = P(function (t) {
|
||||
return t.style.flexDirection ? t.style.flexDirection : n;
|
||||
}(r), X),
|
||||
Z = D(Y, X),
|
||||
$ = P(i, X);
|
||||
|
||||
G(r, Y), G(r, Z), r.layout.direction = X, r.layout[b[Y]] += k(r, Y) + K(r, Y), r.layout[x[Y]] += j(r, Y) + K(r, Y), r.layout[b[Z]] += k(r, Z) + K(r, Z), r.layout[x[Z]] += j(r, Z) + K(r, Z);
|
||||
var tt = r.children.length,
|
||||
et = R(r, $);
|
||||
|
||||
if (function (t) {
|
||||
return void 0 !== t.style.measure;
|
||||
}(r)) {
|
||||
var ot = !W(r.layout[S[$]]),
|
||||
rt = t;
|
||||
rt = N(r, $) ? r.style.width : ot ? r.layout[S[$]] : E - _(r, $), rt -= et;
|
||||
var it = !N(r, $) && !ot,
|
||||
lt = !N(r, n) && W(r.layout[S[n]]);
|
||||
|
||||
if (it || lt) {
|
||||
var nt = r.style.measure(rt);
|
||||
it && (r.layout.width = nt.width + et), lt && (r.layout.height = nt.height + R(r, n));
|
||||
}
|
||||
|
||||
if (0 === tt) return;
|
||||
}
|
||||
|
||||
var at,
|
||||
ut,
|
||||
dt,
|
||||
st,
|
||||
yt = function (t) {
|
||||
return "wrap" === t.style.flexWrap;
|
||||
}(r),
|
||||
ct = function (t) {
|
||||
return t.style.justifyContent ? t.style.justifyContent : "flex-start";
|
||||
}(r),
|
||||
ft = C(r, Y),
|
||||
ht = C(r, Z),
|
||||
pt = R(r, Y),
|
||||
gt = R(r, Z),
|
||||
vt = !W(r.layout[S[Y]]),
|
||||
mt = !W(r.layout[S[Z]]),
|
||||
bt = L(Y),
|
||||
xt = null,
|
||||
wt = null,
|
||||
St = t;
|
||||
|
||||
vt && (St = r.layout[S[Y]] - pt);
|
||||
|
||||
for (var Wt = 0, Lt = 0, kt = 0, jt = 0, Bt = 0, Et = 0; Lt < tt;) {
|
||||
var Ct,
|
||||
Tt = 0,
|
||||
Ot = 0,
|
||||
_t = 0,
|
||||
Rt = 0,
|
||||
At = vt && ct === u || !vt && ct !== d,
|
||||
Pt = At ? tt : Wt,
|
||||
Dt = !0,
|
||||
Ht = tt,
|
||||
Mt = null,
|
||||
It = null,
|
||||
Nt = ft,
|
||||
Ft = 0;
|
||||
|
||||
for (at = Wt; at < tt; ++at) {
|
||||
if ((dt = r.children[at]).lineIndex = Et, dt.nextAbsoluteChild = null, dt.nextFlexChild = null, (Xt = A(r, dt)) === g && H(dt) === v && mt && !N(dt, Z)) dt.layout[S[Z]] = U(z(dt, Z, r.layout[S[Z]] - gt - _(dt, Z)), R(dt, Z));else if (H(dt) === m) for (null === xt && (xt = dt), null !== wt && (wt.nextAbsoluteChild = dt), wt = dt, ut = 0; ut < 2; ut++) st = 0 !== ut ? i : n, !W(r.layout[S[st]]) && !N(dt, st) && F(dt, b[st]) && F(dt, x[st]) && (dt.layout[S[st]] = U(z(dt, st, r.layout[S[st]] - R(r, st) - _(dt, st) - q(dt, b[st]) - q(dt, x[st])), R(dt, st)));
|
||||
var qt = 0;
|
||||
|
||||
if (vt && M(dt) ? (Ot++, _t += dt.style.flex, null === Mt && (Mt = dt), null !== It && (It.nextFlexChild = dt), It = dt, qt = R(dt, Y) + _(dt, Y)) : (Ct = t, bt || (Ct = N(r, $) ? r.layout[S[$]] - et : E - _(r, $) - et), 0 === kt && V(dt, Ct, X), H(dt) === v && (Rt++, qt = I(dt, Y))), yt && vt && Tt + qt > St && at !== Wt) {
|
||||
Rt--, kt = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
At && (H(dt) !== v || M(dt)) && (At = !1, Pt = at), Dt && (H(dt) !== v || Xt !== g && Xt !== f || W(dt.layout[S[Z]])) && (Dt = !1, Ht = at), At && (dt.layout[w[Y]] += Nt, vt && J(r, dt, Y), Nt += I(dt, Y), Ft = U(Ft, z(dt, Z, I(dt, Z)))), Dt && (dt.layout[w[Z]] += jt + ht, mt && J(r, dt, Z)), kt = 0, Tt += qt, Lt = at + 1;
|
||||
}
|
||||
|
||||
var zt = 0,
|
||||
Ut = 0,
|
||||
Gt = 0;
|
||||
|
||||
if (Gt = vt ? St - Tt : U(Tt, 0) - Tt, 0 !== Ot) {
|
||||
var Jt,
|
||||
Kt,
|
||||
Qt = Gt / _t;
|
||||
|
||||
for (It = Mt; null !== It;) (Jt = Qt * It.style.flex + R(It, Y)) !== (Kt = z(It, Y, Jt)) && (Gt -= Kt, _t -= It.style.flex), It = It.nextFlexChild;
|
||||
|
||||
for ((Qt = Gt / _t) < 0 && (Qt = 0), It = Mt; null !== It;) It.layout[S[Y]] = z(It, Y, Qt * It.style.flex + R(It, Y)), Ct = t, N(r, $) ? Ct = r.layout[S[$]] - et : bt || (Ct = E - _(r, $) - et), V(It, Ct, X), dt = It, It = It.nextFlexChild, dt.nextFlexChild = null;
|
||||
} else ct !== u && (ct === d ? zt = Gt / 2 : ct === s ? zt = Gt : ct === y ? (Gt = U(Gt, 0), Ut = Ot + Rt - 1 != 0 ? Gt / (Ot + Rt - 1) : 0) : ct === c && (zt = (Ut = Gt / (Ot + Rt)) / 2));
|
||||
|
||||
for (Nt += zt, at = Pt; at < Lt; ++at) H(dt = r.children[at]) === m && F(dt, b[Y]) ? dt.layout[w[Y]] = q(dt, b[Y]) + B(r, Y) + k(dt, Y) : (dt.layout[w[Y]] += Nt, vt && J(r, dt, Y), H(dt) === v && (Nt += Ut + I(dt, Y), Ft = U(Ft, z(dt, Z, I(dt, Z)))));
|
||||
|
||||
var Vt = r.layout[S[Z]];
|
||||
|
||||
for (mt || (Vt = U(z(r, Z, Ft + gt), gt)), at = Ht; at < Lt; ++at) if (H(dt = r.children[at]) === m && F(dt, b[Z])) dt.layout[w[Z]] = q(dt, b[Z]) + B(r, Z) + k(dt, Z);else {
|
||||
var Xt,
|
||||
Yt = ht;
|
||||
if (H(dt) === v) if ((Xt = A(r, dt)) === g) W(dt.layout[S[Z]]) && (dt.layout[S[Z]] = U(z(dt, Z, Vt - gt - _(dt, Z)), R(dt, Z)));else if (Xt !== f) {
|
||||
var Zt = Vt - gt - I(dt, Z);
|
||||
Yt += Xt === h ? Zt / 2 : Zt;
|
||||
}
|
||||
dt.layout[w[Z]] += jt + Yt, mt && J(r, dt, Z);
|
||||
}
|
||||
|
||||
jt += Ft, Bt = U(Bt, Nt), Et += 1, Wt = Lt;
|
||||
}
|
||||
|
||||
if (Et > 1 && mt) {
|
||||
var $t = r.layout[S[Z]] - gt,
|
||||
te = $t - jt,
|
||||
ee = 0,
|
||||
oe = ht,
|
||||
re = function (t) {
|
||||
return t.style.alignContent ? t.style.alignContent : "flex-start";
|
||||
}(r);
|
||||
|
||||
re === p ? oe += te : re === h ? oe += te / 2 : re === g && $t > jt && (ee = te / Et);
|
||||
var ie = 0;
|
||||
|
||||
for (at = 0; at < Et; ++at) {
|
||||
var le = ie,
|
||||
ne = 0;
|
||||
|
||||
for (ut = le; ut < tt; ++ut) if (H(dt = r.children[ut]) === v) {
|
||||
if (dt.lineIndex !== at) break;
|
||||
W(dt.layout[S[Z]]) || (ne = U(ne, dt.layout[S[Z]] + _(dt, Z)));
|
||||
}
|
||||
|
||||
for (ie = ut, ne += ee, ut = le; ut < ie; ++ut) if (H(dt = r.children[ut]) === v) {
|
||||
var ae = A(r, dt);
|
||||
if (ae === f) dt.layout[w[Z]] = oe + k(dt, Z);else if (ae === p) dt.layout[w[Z]] = oe + ne - j(dt, Z) - dt.layout[S[Z]];else if (ae === h) {
|
||||
var ue = dt.layout[S[Z]];
|
||||
dt.layout[w[Z]] = oe + (ne - ue) / 2;
|
||||
} else ae === g && (dt.layout[w[Z]] = oe + k(dt, Z));
|
||||
}
|
||||
|
||||
oe += ne;
|
||||
}
|
||||
}
|
||||
|
||||
var de = !1,
|
||||
se = !1;
|
||||
if (vt || (r.layout[S[Y]] = U(z(r, Y, Bt + T(r, Y)), pt), Y !== l && Y !== a || (de = !0)), mt || (r.layout[S[Z]] = U(z(r, Z, jt + gt), gt), Z !== l && Z !== a || (se = !0)), de || se) for (at = 0; at < tt; ++at) dt = r.children[at], de && J(r, dt, Y), se && J(r, dt, Z);
|
||||
|
||||
for (wt = xt; null !== wt;) {
|
||||
for (ut = 0; ut < 2; ut++) st = 0 !== ut ? i : n, !W(r.layout[S[st]]) && !N(wt, st) && F(wt, b[st]) && F(wt, x[st]) && (wt.layout[S[st]] = U(z(wt, st, r.layout[S[st]] - O(r, st) - _(wt, st) - q(wt, b[st]) - q(wt, x[st])), R(wt, st))), F(wt, x[st]) && !F(wt, b[st]) && (wt.layout[b[st]] = r.layout[S[st]] - wt.layout[S[st]] - q(wt, x[st]));
|
||||
|
||||
dt = wt, wt = wt.nextAbsoluteChild, dt.nextAbsoluteChild = null;
|
||||
}
|
||||
}
|
||||
|
||||
function V(t, e, r) {
|
||||
t.shouldUpdate = !0;
|
||||
var i = t.style.direction || o;
|
||||
!t.isDirty && t.lastLayout && t.lastLayout.requestedHeight === t.layout.height && t.lastLayout.requestedWidth === t.layout.width && t.lastLayout.parentMaxWidth === e && t.lastLayout.direction === i ? (t.layout.width = t.lastLayout.width, t.layout.height = t.lastLayout.height, t.layout.top = t.lastLayout.top, t.layout.left = t.lastLayout.left) : (t.lastLayout || (t.lastLayout = {}), t.lastLayout.requestedWidth = t.layout.width, t.lastLayout.requestedHeight = t.layout.height, t.lastLayout.parentMaxWidth = e, t.lastLayout.direction = i, t.children.forEach(function (t) {
|
||||
t.layout.width = void 0, t.layout.height = void 0, t.layout.top = 0, t.layout.left = 0;
|
||||
}), Q(t, e, r), t.lastLayout.width = t.layout.width, t.lastLayout.height = t.layout.height, t.lastLayout.top = t.layout.top, t.lastLayout.left = t.layout.left);
|
||||
}
|
||||
|
||||
return {
|
||||
layoutNodeImpl: Q,
|
||||
computeLayout: V,
|
||||
fillNodes: function t(e) {
|
||||
return e.layout && !e.isDirty || (e.layout = {
|
||||
width: void 0,
|
||||
height: void 0,
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0
|
||||
}), e.style || (e.style = {}), e.children || (e.children = []), e.children.forEach(t), e;
|
||||
}
|
||||
};
|
||||
}();
|
||||
|
||||
e.default = function (t) {
|
||||
r.fillNodes(t), r.computeLayout(t);
|
||||
};
|
||||
}, function (t, e, o) {
|
||||
Object.defineProperty(e, "__esModule", {
|
||||
value: !0
|
||||
});
|
||||
e.textStyles = ["color", "fontSize", "textAlign", "fontWeight", "lineHeight", "lineBreak"];
|
||||
e.scalableStyles = ["left", "top", "right", "bottom", "width", "height", "margin", "marginLeft", "marginRight", "marginTop", "marginBottom", "padding", "paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth"];
|
||||
e.layoutAffectedStyles = ["margin", "marginTop", "marginBottom", "marginLeft", "marginRight", "padding", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "width", "height"];
|
||||
|
||||
e.getDefaultStyle = function () {
|
||||
return {
|
||||
left: void 0,
|
||||
top: void 0,
|
||||
right: void 0,
|
||||
bottom: void 0,
|
||||
width: void 0,
|
||||
height: void 0,
|
||||
maxWidth: void 0,
|
||||
maxHeight: void 0,
|
||||
minWidth: void 0,
|
||||
minHeight: void 0,
|
||||
margin: void 0,
|
||||
marginLeft: void 0,
|
||||
marginRight: void 0,
|
||||
marginTop: void 0,
|
||||
marginBottom: void 0,
|
||||
padding: void 0,
|
||||
paddingLeft: void 0,
|
||||
paddingRight: void 0,
|
||||
paddingTop: void 0,
|
||||
paddingBottom: void 0,
|
||||
borderWidth: void 0,
|
||||
flexDirection: void 0,
|
||||
justifyContent: void 0,
|
||||
alignItems: void 0,
|
||||
alignSelf: void 0,
|
||||
flex: void 0,
|
||||
flexWrap: void 0,
|
||||
position: void 0,
|
||||
hidden: !1,
|
||||
scale: 1
|
||||
};
|
||||
};
|
||||
}]).default;
|
||||
});
|
||||
}, function (modId) {
|
||||
var map = {};
|
||||
return __REQUIRE__(map[modId], modId);
|
||||
});
|
||||
|
||||
return __REQUIRE__(1572960819414);
|
||||
}(); //# sourceMappingURL=index.js.map
|
||||
File diff suppressed because one or more lines are too long
87
uniapp/uni-app/components/miniprogram_npm/widget-ui/style.ts
Normal file
87
uniapp/uni-app/components/miniprogram_npm/widget-ui/style.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
const textStyles: string[] = ["color", "fontSize", "textAlign", "fontWeight", "lineHeight", "lineBreak"];
|
||||
|
||||
const scalableStyles: string[] = ["left", "top", "right", "bottom", "width", "height",
|
||||
"margin", "marginLeft", "marginRight", "marginTop", "marginBottom",
|
||||
"padding", "paddingLeft", "paddingRight", "paddingTop", "paddingBottom",
|
||||
"borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth"];
|
||||
|
||||
const layoutAffectedStyles: string[] = [
|
||||
"margin", "marginTop", "marginBottom", "marginLeft", "marginRight",
|
||||
"padding", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight",
|
||||
"width", "height"];
|
||||
|
||||
type Style = {
|
||||
left: number,
|
||||
top: number,
|
||||
right: number,
|
||||
bottom: number,
|
||||
width: number,
|
||||
height: number,
|
||||
maxWidth: number,
|
||||
maxHeight: number,
|
||||
minWidth: number,
|
||||
minHeight: number,
|
||||
margin: number,
|
||||
marginLeft: number,
|
||||
marginRight: number,
|
||||
marginTop: number,
|
||||
marginBottom: number,
|
||||
padding: number,
|
||||
paddingLeft: number,
|
||||
paddingRight: number,
|
||||
paddingTop: number,
|
||||
paddingBottom: number,
|
||||
borderWidth: number,
|
||||
borderLeftWidth: number,
|
||||
borderRightWidth: number,
|
||||
borderTopWidth: number,
|
||||
borderBottomWidth: number,
|
||||
flexDirection: "column" | "row",
|
||||
justifyContent: "flex-start" | "center" | "flex-end" | "space-between" | "space-around",
|
||||
alignItems: "flex-start" | "center" | "flex-end" | "stretch",
|
||||
alignSelf: "flex-start" | "center" | "flex-end" | "stretch",
|
||||
flex: number,
|
||||
flexWrap: "wrap" | "nowrap",
|
||||
position: "relative" | "absolute",
|
||||
|
||||
hidden: boolean,
|
||||
scale: number
|
||||
}
|
||||
|
||||
const getDefaultStyle = () => ({
|
||||
left: undefined,
|
||||
top: undefined,
|
||||
right: undefined,
|
||||
bottom: undefined,
|
||||
width: undefined,
|
||||
height: undefined,
|
||||
maxWidth: undefined,
|
||||
maxHeight: undefined,
|
||||
minWidth: undefined,
|
||||
minHeight: undefined,
|
||||
margin: undefined,
|
||||
marginLeft: undefined,
|
||||
marginRight: undefined,
|
||||
marginTop: undefined,
|
||||
marginBottom: undefined,
|
||||
padding: undefined,
|
||||
paddingLeft: undefined,
|
||||
paddingRight: undefined,
|
||||
paddingTop: undefined,
|
||||
paddingBottom: undefined,
|
||||
borderWidth: undefined,
|
||||
flexDirection: undefined,
|
||||
justifyContent: undefined,
|
||||
alignItems: undefined,
|
||||
alignSelf: undefined,
|
||||
flex: undefined,
|
||||
flexWrap: undefined,
|
||||
position: undefined,
|
||||
|
||||
hidden: false,
|
||||
scale: 1
|
||||
})
|
||||
|
||||
export {
|
||||
getDefaultStyle, scalableStyles, textStyles, layoutAffectedStyles
|
||||
}
|
||||
219
uniapp/uni-app/components/miniprogram_npm/wxml-to-canvas/draw.js
Normal file
219
uniapp/uni-app/components/miniprogram_npm/wxml-to-canvas/draw.js
Normal file
@@ -0,0 +1,219 @@
|
||||
class Draw {
|
||||
constructor(canvas, context) {
|
||||
this.canvas = canvas;
|
||||
this.ctx = context;
|
||||
}
|
||||
|
||||
roundRect(x, y, w, h, r, fill = true, stroke = false) {
|
||||
if (r < 0) return;
|
||||
const ctx = this.ctx;
|
||||
ctx.beginPath();
|
||||
ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 3 / 2);
|
||||
ctx.arc(x + w - r, y + r, r, Math.PI * 3 / 2, 0);
|
||||
ctx.arc(x + w - r, y + h - r, r, 0, Math.PI / 2);
|
||||
ctx.arc(x + r, y + h - r, r, Math.PI / 2, Math.PI);
|
||||
ctx.lineTo(x, y + r);
|
||||
if (stroke) ctx.stroke();
|
||||
if (fill) ctx.fill();
|
||||
}
|
||||
|
||||
drawView(box, style) {
|
||||
const ctx = this.ctx;
|
||||
const {
|
||||
left: x,
|
||||
top: y,
|
||||
width: w,
|
||||
height: h
|
||||
} = box;
|
||||
const {
|
||||
borderRadius = 0,
|
||||
borderWidth = 0,
|
||||
borderColor,
|
||||
color = '#000',
|
||||
backgroundColor = 'transparent'
|
||||
} = style;
|
||||
ctx.save(); // 外环
|
||||
|
||||
if (borderWidth > 0) {
|
||||
ctx.fillStyle = borderColor || color;
|
||||
this.roundRect(x, y, w, h, borderRadius);
|
||||
} // 内环
|
||||
|
||||
|
||||
ctx.fillStyle = backgroundColor;
|
||||
const innerWidth = w - 2 * borderWidth;
|
||||
const innerHeight = h - 2 * borderWidth;
|
||||
const innerRadius = borderRadius - borderWidth >= 0 ? borderRadius - borderWidth : 0;
|
||||
this.roundRect(x + borderWidth, y + borderWidth, innerWidth, innerHeight, innerRadius);
|
||||
ctx.restore();
|
||||
}
|
||||
|
||||
async drawImage(img, box, style) {
|
||||
await new Promise((resolve, reject) => {
|
||||
const ctx = this.ctx;
|
||||
const canvas = this.canvas;
|
||||
const {
|
||||
borderRadius = 0
|
||||
} = style;
|
||||
const {
|
||||
left: x,
|
||||
top: y,
|
||||
width: w,
|
||||
height: h
|
||||
} = box;
|
||||
ctx.save();
|
||||
this.roundRect(x, y, w, h, borderRadius, false, false);
|
||||
ctx.clip();
|
||||
const Image = canvas.createImage();
|
||||
|
||||
Image.onload = () => {
|
||||
ctx.drawImage(Image, x, y, w, h);
|
||||
ctx.restore();
|
||||
resolve();
|
||||
};
|
||||
|
||||
Image.onerror = () => {
|
||||
reject();
|
||||
};
|
||||
|
||||
Image.src = img;
|
||||
});
|
||||
} // eslint-disable-next-line complexity
|
||||
|
||||
|
||||
drawText(text, box, style) {
|
||||
const ctx = this.ctx;
|
||||
let {
|
||||
left: x,
|
||||
top: y,
|
||||
width: w,
|
||||
height: h
|
||||
} = box;
|
||||
let {
|
||||
color = '#000',
|
||||
lineHeight = '1.4em',
|
||||
fontSize = 14,
|
||||
textAlign = 'left',
|
||||
verticalAlign = 'top',
|
||||
backgroundColor = 'transparent'
|
||||
} = style;
|
||||
if (!text || lineHeight > h) return;
|
||||
ctx.save();
|
||||
|
||||
if (lineHeight) {
|
||||
// 2em
|
||||
lineHeight = Math.ceil(parseFloat(lineHeight.replace('em')) * fontSize);
|
||||
}
|
||||
|
||||
ctx.textBaseline = 'top';
|
||||
ctx.font = `${fontSize}px sans-serif`;
|
||||
ctx.textAlign = textAlign; // 背景色
|
||||
|
||||
ctx.fillStyle = backgroundColor;
|
||||
this.roundRect(x, y, w, h, 0); // 文字颜色
|
||||
|
||||
ctx.fillStyle = color; // 水平布局
|
||||
|
||||
switch (textAlign) {
|
||||
case 'left':
|
||||
break;
|
||||
|
||||
case 'center':
|
||||
x += 0.5 * w;
|
||||
break;
|
||||
|
||||
case 'right':
|
||||
x += w;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
const textWidth = ctx.measureText(text).width;
|
||||
const actualHeight = Math.ceil(textWidth / w) * lineHeight;
|
||||
let paddingTop = Math.ceil((h - actualHeight) / 2);
|
||||
if (paddingTop < 0) paddingTop = 0; // 垂直布局
|
||||
|
||||
switch (verticalAlign) {
|
||||
case 'top':
|
||||
break;
|
||||
|
||||
case 'middle':
|
||||
y += paddingTop;
|
||||
break;
|
||||
|
||||
case 'bottom':
|
||||
y += 2 * paddingTop;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
const inlinePaddingTop = Math.ceil((lineHeight - fontSize) / 2); // 不超过一行
|
||||
|
||||
if (textWidth <= w) {
|
||||
ctx.fillText(text, x, y + inlinePaddingTop);
|
||||
return;
|
||||
} // 多行文本
|
||||
|
||||
|
||||
const chars = text.split('');
|
||||
const _y = y; // 逐行绘制
|
||||
|
||||
let line = '';
|
||||
|
||||
for (const ch of chars) {
|
||||
const testLine = line + ch;
|
||||
const testWidth = ctx.measureText(testLine).width;
|
||||
|
||||
if (testWidth > w) {
|
||||
ctx.fillText(line, x, y + inlinePaddingTop);
|
||||
y += lineHeight;
|
||||
line = ch;
|
||||
if (y + lineHeight > _y + h) break;
|
||||
} else {
|
||||
line = testLine;
|
||||
}
|
||||
} // 避免溢出
|
||||
|
||||
|
||||
if (y + lineHeight <= _y + h) {
|
||||
ctx.fillText(line, x, y + inlinePaddingTop);
|
||||
}
|
||||
|
||||
ctx.restore();
|
||||
}
|
||||
|
||||
async drawNode(element) {
|
||||
const {
|
||||
layoutBox,
|
||||
computedStyle,
|
||||
name
|
||||
} = element;
|
||||
const {
|
||||
src,
|
||||
text
|
||||
} = element.attributes;
|
||||
|
||||
if (name === 'view') {
|
||||
this.drawView(layoutBox, computedStyle);
|
||||
} else if (name === 'image') {
|
||||
await this.drawImage(src, layoutBox, computedStyle);
|
||||
} else if (name === 'text') {
|
||||
this.drawText(text, layoutBox, computedStyle);
|
||||
}
|
||||
|
||||
const childs = Object.values(element.children);
|
||||
|
||||
for (const child of childs) {
|
||||
await this.drawNode(child);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
Draw
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
const $filterNullChildren = children => {
|
||||
children = deepFlatten(children);
|
||||
return children.filter(child => child != null);
|
||||
};
|
||||
|
||||
const deepFlatten = arr => {
|
||||
let flatten = arr => [].concat(...arr);
|
||||
|
||||
return flatten(arr.map(x => Array.isArray(x) ? deepFlatten(x) : x));
|
||||
};
|
||||
|
||||
export default ((data, opt) => {
|
||||
const {
|
||||
View,
|
||||
Text,
|
||||
Image
|
||||
} = opt;
|
||||
Object.assign(data, {});
|
||||
return new View({
|
||||
style: {},
|
||||
attr: {
|
||||
"needRoot": true
|
||||
},
|
||||
children: $filterNullChildren([new Canvas({
|
||||
style: {},
|
||||
attr: {
|
||||
"id": "canvas",
|
||||
"type": "2d",
|
||||
"style": "width: " + data.width + "px; height: " + data.height + "px;"
|
||||
},
|
||||
children: $filterNullChildren([])
|
||||
})])
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<view>
|
||||
<canvas id="canvas" type="2d" :style="'width: ' + width + 'px; height: ' + height + 'px;'"></canvas>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const xmlParse = require("./xml-parser");
|
||||
const {
|
||||
Widget
|
||||
} = require("./widget");
|
||||
const {
|
||||
Draw
|
||||
} = require("./draw");
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
|
||||
components: {},
|
||||
props: {
|
||||
width: {
|
||||
type: Number,
|
||||
default: 400
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
default: 300
|
||||
}
|
||||
},
|
||||
|
||||
beforeMount() {
|
||||
const dpr = wx.getSystemInfoSync().pixelRatio;
|
||||
const query = this.createSelectorQuery();
|
||||
this.dpr = dpr;
|
||||
query.select('#canvas').fields({
|
||||
node: true,
|
||||
size: true
|
||||
}).exec(res => {
|
||||
console.log(res, "==res");
|
||||
const canvas = res[0].node;
|
||||
const ctx = canvas.getContext('2d');
|
||||
canvas.width = res[0].width * dpr;
|
||||
canvas.height = res[0].height * dpr;
|
||||
ctx.scale(dpr, dpr);
|
||||
this.ctx = ctx;
|
||||
this.canvas = canvas;
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
async renderToCanvas(args) {
|
||||
const {
|
||||
wxml,
|
||||
style
|
||||
} = args; // 清空画布
|
||||
|
||||
const ctx = this.ctx;
|
||||
const canvas = this.canvas;
|
||||
|
||||
if (!ctx || !canvas) {
|
||||
return Promise.reject(new Error('renderToCanvas: fail canvas has not been created'));
|
||||
}
|
||||
|
||||
ctx.clearRect(0, 0, this.width, this.height);
|
||||
const {
|
||||
root: xom
|
||||
} = xmlParse(wxml);
|
||||
const widget = new Widget(xom, style);
|
||||
const container = widget.init();
|
||||
this.boundary = {
|
||||
top: container.layoutBox.top,
|
||||
left: container.layoutBox.left,
|
||||
width: container.computedStyle.width,
|
||||
height: container.computedStyle.height
|
||||
};
|
||||
const draw = new Draw(canvas, ctx);
|
||||
await draw.drawNode(container);
|
||||
return Promise.resolve(container);
|
||||
},
|
||||
|
||||
canvasToTempFilePath(args = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const {
|
||||
top,
|
||||
left,
|
||||
width,
|
||||
height
|
||||
} = this.boundary;
|
||||
wx.canvasToTempFilePath({
|
||||
x: left,
|
||||
y: top,
|
||||
width,
|
||||
height,
|
||||
destWidth: width * this.dpr,
|
||||
destHeight: height * this.dpr,
|
||||
canvas: this.canvas,
|
||||
fileType: args.fileType || 'png',
|
||||
quality: args.quality || 1,
|
||||
success: resolve,
|
||||
fail: reject
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,34 @@
|
||||
const hex = color => {
|
||||
let result = null;
|
||||
|
||||
if (/^#/.test(color) && (color.length === 7 || color.length === 9)) {
|
||||
return color; // eslint-disable-next-line no-cond-assign
|
||||
} else if ((result = /^(rgb|rgba)\((.+)\)/.exec(color)) !== null) {
|
||||
return '#' + result[2].split(',').map((part, index) => {
|
||||
part = part.trim();
|
||||
part = index === 3 ? Math.floor(parseFloat(part) * 255) : parseInt(part, 10);
|
||||
part = part.toString(16);
|
||||
|
||||
if (part.length === 1) {
|
||||
part = '0' + part;
|
||||
}
|
||||
|
||||
return part;
|
||||
}).join('');
|
||||
} else {
|
||||
return '#00000000';
|
||||
}
|
||||
};
|
||||
|
||||
const splitLineToCamelCase = str => str.split('-').map((part, index) => {
|
||||
if (index === 0) {
|
||||
return part;
|
||||
}
|
||||
|
||||
return part[0].toUpperCase() + part.slice(1);
|
||||
}).join('');
|
||||
|
||||
module.exports = {
|
||||
hex,
|
||||
splitLineToCamelCase
|
||||
};
|
||||
@@ -0,0 +1,88 @@
|
||||
const Block = require("@/components/miniprogram_npm/widget-ui/index.js");
|
||||
|
||||
const {
|
||||
splitLineToCamelCase
|
||||
} = require("./utils.js");
|
||||
|
||||
class Element extends Block {
|
||||
constructor(prop) {
|
||||
super(prop.style);
|
||||
this.name = prop.name;
|
||||
this.attributes = prop.attributes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Widget {
|
||||
constructor(xom, style) {
|
||||
this.xom = xom;
|
||||
this.style = style;
|
||||
this.inheritProps = ['fontSize', 'lineHeight', 'textAlign', 'verticalAlign', 'color'];
|
||||
}
|
||||
|
||||
init() {
|
||||
this.container = this.create(this.xom);
|
||||
this.container.layout();
|
||||
this.inheritStyle(this.container);
|
||||
return this.container;
|
||||
} // 继承父节点的样式
|
||||
|
||||
|
||||
inheritStyle(node) {
|
||||
const parent = node.parent || null;
|
||||
const children = node.children || {};
|
||||
const computedStyle = node.computedStyle;
|
||||
|
||||
if (parent) {
|
||||
this.inheritProps.forEach(prop => {
|
||||
computedStyle[prop] = computedStyle[prop] || parent.computedStyle[prop];
|
||||
});
|
||||
}
|
||||
|
||||
Object.values(children).forEach(child => {
|
||||
this.inheritStyle(child);
|
||||
});
|
||||
}
|
||||
|
||||
create(node) {
|
||||
let classNames = (node.attributes.class || '').split(' ');
|
||||
classNames = classNames.map(item => splitLineToCamelCase(item.trim()));
|
||||
const style = {};
|
||||
classNames.forEach(item => {
|
||||
Object.assign(style, this.style[item] || {});
|
||||
});
|
||||
const args = {
|
||||
name: node.name,
|
||||
style
|
||||
};
|
||||
const attrs = Object.keys(node.attributes);
|
||||
const attributes = {};
|
||||
|
||||
for (const attr of attrs) {
|
||||
const value = node.attributes[attr];
|
||||
const CamelAttr = splitLineToCamelCase(attr);
|
||||
|
||||
if (value === '' || value === 'true') {
|
||||
attributes[CamelAttr] = true;
|
||||
} else if (value === 'false') {
|
||||
attributes[CamelAttr] = false;
|
||||
} else {
|
||||
attributes[CamelAttr] = value;
|
||||
}
|
||||
}
|
||||
|
||||
attributes.text = node.content;
|
||||
args.attributes = attributes;
|
||||
const element = new Element(args);
|
||||
node.children.forEach(childNode => {
|
||||
const childElement = this.create(childNode);
|
||||
element.add(childElement);
|
||||
});
|
||||
return element;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
Widget
|
||||
};
|
||||
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Expose `parse`.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parse the given string of `xml`.
|
||||
*
|
||||
* @param {String} xml
|
||||
* @return {Object}
|
||||
* @api public
|
||||
*/
|
||||
function parse(xml) {
|
||||
xml = xml.trim(); // strip comments
|
||||
|
||||
xml = xml.replace(/<!--[\s\S]*?-->/g, '');
|
||||
return document();
|
||||
/**
|
||||
* XML document.
|
||||
*/
|
||||
|
||||
function document() {
|
||||
return {
|
||||
declaration: declaration(),
|
||||
root: tag()
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Declaration.
|
||||
*/
|
||||
|
||||
|
||||
function declaration() {
|
||||
const m = match(/^<\?xml\s*/);
|
||||
if (!m) return; // tag
|
||||
|
||||
const node = {
|
||||
attributes: {}
|
||||
}; // attributes
|
||||
|
||||
while (!(eos() || is('?>'))) {
|
||||
const attr = attribute();
|
||||
if (!attr) return node;
|
||||
node.attributes[attr.name] = attr.value;
|
||||
}
|
||||
|
||||
match(/\?>\s*/);
|
||||
return node;
|
||||
}
|
||||
/**
|
||||
* Tag.
|
||||
*/
|
||||
|
||||
|
||||
function tag() {
|
||||
const m = match(/^<([\w-:.]+)\s*/);
|
||||
if (!m) return; // name
|
||||
|
||||
const node = {
|
||||
name: m[1],
|
||||
attributes: {},
|
||||
children: []
|
||||
}; // attributes
|
||||
|
||||
while (!(eos() || is('>') || is('?>') || is('/>'))) {
|
||||
const attr = attribute();
|
||||
if (!attr) return node;
|
||||
node.attributes[attr.name] = attr.value;
|
||||
} // self closing tag
|
||||
|
||||
|
||||
if (match(/^\s*\/>\s*/)) {
|
||||
return node;
|
||||
}
|
||||
|
||||
match(/\??>\s*/); // content
|
||||
|
||||
node.content = content(); // children
|
||||
|
||||
let child;
|
||||
|
||||
while (child = tag()) {
|
||||
node.children.push(child);
|
||||
} // closing
|
||||
|
||||
|
||||
match(/^<\/[\w-:.]+>\s*/);
|
||||
return node;
|
||||
}
|
||||
/**
|
||||
* Text content.
|
||||
*/
|
||||
|
||||
|
||||
function content() {
|
||||
const m = match(/^([^<]*)/);
|
||||
if (m) return m[1];
|
||||
return '';
|
||||
}
|
||||
/**
|
||||
* Attribute.
|
||||
*/
|
||||
|
||||
|
||||
function attribute() {
|
||||
const m = match(/([\w:-]+)\s*=\s*("[^"]*"|'[^']*'|\w+)\s*/);
|
||||
if (!m) return;
|
||||
return {
|
||||
name: m[1],
|
||||
value: strip(m[2])
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Strip quotes from `val`.
|
||||
*/
|
||||
|
||||
|
||||
function strip(val) {
|
||||
return val.replace(/^['"]|['"]$/g, '');
|
||||
}
|
||||
/**
|
||||
* Match `re` and advance the string.
|
||||
*/
|
||||
|
||||
|
||||
function match(re) {
|
||||
const m = xml.match(re);
|
||||
if (!m) return;
|
||||
xml = xml.slice(m[0].length);
|
||||
return m;
|
||||
}
|
||||
/**
|
||||
* End-of-source.
|
||||
*/
|
||||
|
||||
|
||||
function eos() {
|
||||
return xml.length == 0;
|
||||
}
|
||||
/**
|
||||
* Check for `prefix`.
|
||||
*/
|
||||
|
||||
|
||||
function is(prefix) {
|
||||
return xml.indexOf(prefix) == 0;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = parse;
|
||||
Reference in New Issue
Block a user