Skip to content

Commit

Permalink
build uni runtime (mp-toutiao mocks)
Browse files Browse the repository at this point in the history
  • Loading branch information
fxy060608 committed Apr 20, 2019
1 parent 3fb1bab commit d04fabd
Show file tree
Hide file tree
Showing 14 changed files with 187 additions and 188 deletions.
74 changes: 36 additions & 38 deletions packages/uni-app-plus/dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,13 +309,43 @@ Component = function (options = {}) {
return MPComponent(options)
};

/* mp-toutiao __webviewId__ */
/* mp-baidu nodeId */
const MOCKS = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__', '__webviewId__', 'nodeId'];
const mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];

function initMocks (vm) {
function triggerLink (mpInstance, vueOptions) {
mpInstance.triggerEvent('__l', mpInstance.$vm || vueOptions, {
bubbles: true,
composed: true
});
}

function handleLink (event) {
if (event.detail.$mp) { // vm
if (!event.detail.$parent) {
event.detail.$parent = this.$vm;
event.detail.$parent.$children.push(event.detail);

event.detail.$root = this.$vm.$root;
}
} else { // vueOptions
if (!event.detail.parent) {
event.detail.parent = this.$vm;
}
}
}

function initPage$1 (pageOptions) {
initComponent$1(pageOptions);
}

function initComponent$1 (componentOptions) {
componentOptions.methods.$getAppWebview = function () {
return plus.webview.getWebviewById(`${this.__wxWebviewId__}`)
};
}

function initMocks (vm, mocks) {
const mpInstance = vm.$mp[vm.mpType];
MOCKS.forEach(mock => {
mocks.forEach(mock => {
if (hasOwn(mpInstance, mock)) {
vm[mock] = mpInstance[mock];
}
Expand Down Expand Up @@ -712,7 +742,7 @@ function createApp (vm) {
{ // 头条的 selectComponent 竟然是异步的
initRefs(this);
}
initMocks(this);
initMocks(this, mocks);
}
},
created () { // 处理 injections
Expand Down Expand Up @@ -747,38 +777,6 @@ function createApp (vm) {
return vm
}

function triggerLink (mpInstance, vueOptions) {
mpInstance.triggerEvent('__l', mpInstance.$vm || vueOptions, {
bubbles: true,
composed: true
});
}

function handleLink (event) {
if (event.detail.$mp) { // vm
if (!event.detail.$parent) {
event.detail.$parent = this.$vm;
event.detail.$parent.$children.push(event.detail);

event.detail.$root = this.$vm.$root;
}
} else { // vueOptions
if (!event.detail.parent) {
event.detail.parent = this.$vm;
}
}
}

function initPage$1 (pageOptions) {
initComponent$1(pageOptions);
}

function initComponent$1 (componentOptions) {
componentOptions.methods.$getAppWebview = function () {
return plus.webview.getWebviewById(`${this.__wxWebviewId__}`)
};
}

const hooks$1 = [
'onShow',
'onHide',
Expand Down
2 changes: 1 addition & 1 deletion packages/uni-app-plus/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-app-plus",
"version": "0.0.226",
"version": "0.0.227",
"description": "uni-app app-plus",
"main": "dist/index.js",
"scripts": {
Expand Down
70 changes: 34 additions & 36 deletions packages/uni-mp-baidu/dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -444,13 +444,41 @@ Component = function (options = {}) {
return MPComponent(options)
};

/* mp-toutiao __webviewId__ */
/* mp-baidu nodeId */
const MOCKS = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__', '__webviewId__', 'nodeId'];
const mocks = ['nodeId'];

function initMocks (vm) {
function initPage (pageOptions) {
initComponent(pageOptions);
}

function initComponent (componentOptions) {
componentOptions.messages = {
'__l': handleLink
};
}

function triggerLink (mpInstance, vueOptions) {
mpInstance.dispatch('__l', mpInstance.$vm || vueOptions);
}

function handleLink (event) {
const target = event.value;
if (target.$mp) {
if (!target.$parent) {
target.$parent = this.$vm;
target.$parent.$children.push(target);

target.$root = this.$vm.$root;
}
} else {
if (!target.parent) {
target.parent = this.$vm;
}
}
}

function initMocks (vm, mocks) {
const mpInstance = vm.$mp[vm.mpType];
MOCKS.forEach(mock => {
mocks.forEach(mock => {
if (hasOwn(mpInstance, mock)) {
vm[mock] = mpInstance[mock];
}
Expand Down Expand Up @@ -887,7 +915,7 @@ function createApp (vm) {
{ // 头条的 selectComponent 竟然是异步的
initRefs(this);
}
initMocks(this);
initMocks(this, mocks);
}
},
created () { // 处理 injections
Expand Down Expand Up @@ -922,36 +950,6 @@ function createApp (vm) {
return vm
}

function initPage (pageOptions) {
initComponent(pageOptions);
}

function initComponent (componentOptions) {
componentOptions.messages = {
'__l': handleLink
};
}

function triggerLink (mpInstance, vueOptions) {
mpInstance.dispatch('__l', mpInstance.$vm || vueOptions);
}

function handleLink (event) {
const target = event.value;
if (target.$mp) {
if (!target.$parent) {
target.$parent = this.$vm;
target.$parent.$children.push(target);

target.$root = this.$vm.$root;
}
} else {
if (!target.parent) {
target.parent = this.$vm;
}
}
}

const hooks$1 = [
'onShow',
'onHide',
Expand Down
2 changes: 1 addition & 1 deletion packages/uni-mp-baidu/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-baidu",
"version": "0.0.823",
"version": "0.0.824",
"description": "uni-app mp-baidu",
"main": "dist/index.js",
"scripts": {
Expand Down
148 changes: 73 additions & 75 deletions packages/uni-mp-toutiao/dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -489,13 +489,80 @@ Component = function (options = {}) {
return MPComponent(options)
};

/* mp-toutiao __webviewId__ */
/* mp-baidu nodeId */
const MOCKS = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__', '__webviewId__', 'nodeId'];
const instances = Object.create(null);

const mocks = ['__route__', '__webviewId__', '__nodeid__'];

function initPage (pageOptions) {
initComponent(pageOptions);
}

function initComponent (componentOptions) {
if (componentOptions.properties) { // ref
componentOptions.properties.vueRef = {
type: String,
value: ''
};
}
const oldAttached = componentOptions.lifetimes.attached;
componentOptions.lifetimes.attached = function () {
oldAttached.call(this);
// TODO 需要处理动态变化后的 refs
initRefs.call(this);
};
}

function initMocks (vm) {
function initRefs () {
this.selectAllComponents('.vue-ref', (components) => {
components.forEach(component => {
const ref = component.data.vueRef; // 头条的组件 dataset 竟然是空的
this.$vm.$refs[ref] = component.$vm || component;
});
});
this.selectAllComponents('.vue-ref-in-for', (forComponents) => {
forComponents.forEach(component => {
const ref = component.data.vueRef;
if (!this.$vm.$refs[ref]) {
this.$vm.$refs[ref] = [];
}
this.$vm.$refs[ref].push(component.$vm || component);
});
});
}

function triggerLink (mpInstance) {
const nodeId = mpInstance.__nodeid__ + '';
const webviewId = mpInstance.__webviewId__ + '';

instances[webviewId + '_' + nodeId] = mpInstance.$vm;

mpInstance.triggerEvent('__l', {
nodeId,
webviewId
}, {
bubbles: true,
composed: true
});
}
// TODO 目前有 bug,composed 不生效
function handleLink (event) {
const nodeId = event.detail.nodeId;
const webviewId = event.detail.webviewId;

const childVm = instances[webviewId + '_' + nodeId];

if (childVm) {
childVm.$parent = this.$vm;
childVm.$parent.$children.push(event.detail);

childVm.$root = this.$vm.$root;
delete instances[webviewId + '_' + nodeId];
}
}

function initMocks (vm, mocks) {
const mpInstance = vm.$mp[vm.mpType];
MOCKS.forEach(mock => {
mocks.forEach(mock => {
if (hasOwn(mpInstance, mock)) {
vm[mock] = mpInstance[mock];
}
Expand Down Expand Up @@ -866,7 +933,7 @@ function createApp (vm) {
delete this.$options.mpInstance;

if (this.mpType !== 'app') {
initMocks(this);
initMocks(this, mocks);
}
},
created () { // 处理 injections
Expand Down Expand Up @@ -901,75 +968,6 @@ function createApp (vm) {
return vm
}

const instances = Object.create(null);

function initPage (pageOptions) {
initComponent(pageOptions);
}

function initComponent (componentOptions) {
if (componentOptions.properties) { // ref
componentOptions.properties.vueRef = {
type: String,
value: ''
};
}
const oldAttached = componentOptions.lifetimes.attached;
componentOptions.lifetimes.attached = function () {
oldAttached.call(this);
// TODO 需要处理动态变化后的 refs
initRefs$1.call(this);
};
}

function initRefs$1 () {
this.selectAllComponents('.vue-ref', (components) => {
components.forEach(component => {
const ref = component.data.vueRef; // 头条的组件 dataset 竟然是空的
this.$vm.$refs[ref] = component.$vm || component;
});
});
this.selectAllComponents('.vue-ref-in-for', (forComponents) => {
forComponents.forEach(component => {
const ref = component.data.vueRef;
if (!this.$vm.$refs[ref]) {
this.$vm.$refs[ref] = [];
}
this.$vm.$refs[ref].push(component.$vm || component);
});
});
}

function triggerLink (mpInstance) {
const nodeId = mpInstance.__nodeid__ + '';
const webviewId = mpInstance.__webviewId__ + '';

instances[webviewId + '_' + nodeId] = mpInstance.$vm;

mpInstance.triggerEvent('__l', {
nodeId,
webviewId
}, {
bubbles: true,
composed: true
});
}
// TODO 目前有 bug,composed 不生效
function handleLink (event) {
const nodeId = event.detail.nodeId;
const webviewId = event.detail.webviewId;

const childVm = instances[webviewId + '_' + nodeId];

if (childVm) {
childVm.$parent = this.$vm;
childVm.$parent.$children.push(event.detail);

childVm.$root = this.$vm.$root;
delete instances[webviewId + '_' + nodeId];
}
}

const hooks$1 = [
'onShow',
'onHide',
Expand Down
2 changes: 1 addition & 1 deletion packages/uni-mp-toutiao/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-toutiao",
"version": "0.0.321",
"version": "0.0.322",
"description": "uni-app mp-toutiao",
"main": "dist/index.js",
"scripts": {
Expand Down
Loading

0 comments on commit d04fabd

Please sign in to comment.