Skip to content

Commit 53ed21e

Browse files
committed
init
0 parents  commit 53ed21e

File tree

9 files changed

+49906
-0
lines changed

9 files changed

+49906
-0
lines changed

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.idea
2+
.DS_Store
3+
package-lock.json
4+
5+
*.log
6+
npm-debug.log*
7+
yarn-debug.log*
8+
yarn-error.log*
9+
10+
node_modules
11+
coverage
12+
dist

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# weapp-adapter

build/webpack.config.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const fs = require('fs')
2+
const path = require('path')
3+
const StringReplacePlugin = require("string-replace-webpack-plugin");
4+
5+
module.exports = {
6+
entry: path.join(__dirname, '../src/index'),
7+
target: 'web',
8+
output: {
9+
path: path.join(__dirname, '../dist'),
10+
filename: 'index.js',
11+
libraryTarget: 'commonjs',
12+
},
13+
module: {
14+
rules: [
15+
{
16+
test: /\.js$/,
17+
exclude: /node_modules/,
18+
loader: 'babel-loader',
19+
options: {
20+
presets: [
21+
"@babel/preset-env",
22+
],
23+
plugins: ["@babel/plugin-proposal-class-properties"]
24+
}
25+
},
26+
{
27+
test: /\index.js$/,
28+
loader: StringReplacePlugin.replace({
29+
replacements: [
30+
{
31+
pattern: /__INJECT_THREE__/ig,
32+
replacement: () => {
33+
return fs.readFileSync(path.resolve(__dirname, '../vendor/three.js'), 'utf8')
34+
}
35+
}
36+
]
37+
})
38+
}
39+
]
40+
},
41+
plugins: [
42+
// an instance of the plugin must be present
43+
new StringReplacePlugin()
44+
],
45+
optimization:{
46+
minimize: false,
47+
}
48+
}

package.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "miniprogram-threejs",
3+
"version": "0.0.1",
4+
"description": "ThreeJS adapted for WeChat MiniProgram",
5+
"main": "dist/index.js",
6+
"directories": {
7+
"test": "test"
8+
},
9+
"scripts": {
10+
"dev": "webpack --config build/webpack.config.js --watch",
11+
"build": "webpack --hide-modules --config build/webpack.config.js"
12+
},
13+
"miniprogram": "dist/",
14+
"author": "wechat-miniprogram",
15+
"license": "MIT",
16+
"devDependencies": {
17+
"@babel/core": "^7.5.5",
18+
"@babel/plugin-proposal-class-properties": "^7.5.5",
19+
"@babel/preset-env": "^7.5.5",
20+
"babel-loader": "^8.0.6",
21+
"eslint": "^3.4.0",
22+
"eslint-friendly-formatter": "^2.0.6",
23+
"eslint-loader": "^1.5.0",
24+
"eslint-plugin-jest": "^20.0.3",
25+
"eventemitter2": "^4.1.2",
26+
"jest": "^20.0.4",
27+
"path": "^0.12.7",
28+
"string-replace-loader": "^2.2.0",
29+
"string-replace-webpack-plugin": "^0.1.3",
30+
"webpack": "^4.39.1",
31+
"webpack-cli": "^3.3.6"
32+
}
33+
}

src/EventTarget.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
const _events = new WeakMap()
2+
3+
export default class EventTarget {
4+
constructor() {
5+
_events.set(this, {})
6+
}
7+
8+
addEventListener(type, listener, options = {}) {
9+
let events = _events.get(this)
10+
11+
if (!events) {
12+
events = {}
13+
_events.set(this, events)
14+
}
15+
if (!events[type]) {
16+
events[type] = []
17+
}
18+
events[type].push(listener)
19+
20+
if (options.capture) {
21+
// console.warn('EventTarget.addEventListener: options.capture is not implemented.')
22+
}
23+
if (options.once) {
24+
// console.warn('EventTarget.addEventListener: options.once is not implemented.')
25+
}
26+
if (options.passive) {
27+
// console.warn('EventTarget.addEventListener: options.passive is not implemented.')
28+
}
29+
}
30+
31+
removeEventListener(type, listener, options = {}) {
32+
const events = _events.get(this)
33+
34+
if (events) {
35+
const listeners = events[type]
36+
37+
if (listeners && listeners.length > 0) {
38+
for (let i = listeners.length; i--; i > 0) {
39+
if (listeners[i] === listener) {
40+
listeners.splice(i, 1)
41+
break
42+
}
43+
}
44+
}
45+
}
46+
}
47+
48+
dispatchEvent(event = {}) {
49+
const listeners = _events.get(this)[event.type]
50+
51+
if (listeners) {
52+
for (let i = 0; i < listeners.length; i++) {
53+
listeners[i](event)
54+
}
55+
}
56+
}
57+
}

src/Node.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import EventTarget from './EventTarget.js'
2+
3+
export default class Node extends EventTarget {
4+
constructor() {
5+
super()
6+
this.childNodes = []
7+
}
8+
9+
appendChild(node) {
10+
this.childNodes.push(node)
11+
// if (node instanceof Node) {
12+
// this.childNodes.push(node)
13+
// } else {
14+
// throw new TypeError('Failed to executed \'appendChild\' on \'Node\': parameter 1 is not of type \'Node\'.')
15+
// }
16+
}
17+
18+
cloneNode() {
19+
const copyNode = Object.create(this)
20+
21+
Object.assign(copyNode, this)
22+
return copyNode
23+
}
24+
25+
removeChild(node) {
26+
const index = this.childNodes.findIndex((child) => child === node)
27+
28+
if (index > -1) {
29+
return this.childNodes.splice(index, 1)
30+
}
31+
return null
32+
}
33+
}

0 commit comments

Comments
 (0)