-更新首页

master
Eridani11579 6 years ago
parent 940ec616d7
commit de2d5fb1fa

@ -1,8 +1,7 @@
{
"pages": [
"pages/index/index",
"pages/logs/logs",
"pages/shouye/shouye",
"pages/logs/logs",
"pages/fenlei/fenlei",
"pages/gouwu/gouwu",
"pages/wode/wode"
@ -17,7 +16,7 @@
"selectedColor": "#f00",
"list": [
{
"pagePath": "pages/index/index",
"pagePath": "pages/shouye/shouye",
"text": "首页",
"iconPath": "pages/index/image/1.png",
"selectedIconPath": "pages/index/image/2.png"

@ -1,4 +1,6 @@
/**app.wxss**/
@import 'weui.wxss';
@import "html-view/index.wxss";
.container {
height: 100%;
display: flex;
@ -8,3 +10,12 @@
padding: 200rpx 0;
box-sizing: border-box;
}
.containers {
height: 100%;
flex-direction: column;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
}

@ -0,0 +1,79 @@
const html5Entities = require('../vendors/html5-entities')
const { windowWidth } = wx.getSystemInfoSync()
module.exports = item => {
// decode html entities
if (item.type === 'Text') {
item.content = html5Entities.decode(item.content)
return
}
// <video> and <audio>
if (item.tagName === 'video' || item.tagName === 'audio') {
item.wxTag = item.tagName
if (!item.attributes.src) {
item.children.some(child => {
if (child.tagName === 'source') {
item.attributes.src = child.attributes.src
return true
}
return false
})
}
return
}
// <br>
if (item.tagName === 'br') {
item.wxTag = 'text'
item.children = [{ type: 'Text', content: '\n' }]
return
}
// other tags
if (['b', 'big', 'i', 'small', 'tt', 'abbr', 'acronym', 'cite', 'code', 'dfn', 'em', 'kbd', 'strong', 'samp', 'time', 'var', 'a', 'bdo', 'map', 'object', 'q', 'script', 'span', 'sub', 'sup', 'button', 'input', 'label', 'select', 'textarea'].indexOf(item.tagName) !== -1) {
item.wxTag = 'text'
} else {
item.wxTag = 'view'
}
// <img>
if (item.tagName === 'img') {
item.wxTag = 'image'
let width, height
if (!item.attributes.style) item.attributes.style = {}
if (item.attributes.style.width && item.attributes.style.width.indexOf('px')) {
width = item.attributes.style.width.slice(0, -2)
} else if (item.attributes.width) {
width = item.attributes.width
}
if (item.attributes.style.height && item.attributes.style.height.indexOf('px')) {
height = item.attributes.style.height.slice(0, -2)
} else if (item.attributes.height) {
height = item.attributes.height
}
if (item.attributes.style) {
delete item.attributes.style.width
delete item.attributes.style.height
}
delete item.attributes.width
delete item.attributes.height
if (width && width < windowWidth) {
item.attributes.style.width = width + 'px'
if (height) item.attributes.style.height = height + 'px'
}
}
// generate inline style string
if (item.attributes && item.attributes.style) {
item.attributes.styleString = Object.keys(item.attributes.style).map(key => key + ': ' + item.attributes.style[key]).join(';')
}
}

@ -0,0 +1,12 @@
// 七牛图片裁剪
const { pixelRatio, windowWidth } = wx.getSystemInfoSync()
const width = pixelRatio * windowWidth
module.exports = (domain, quality) =>
item => {
if (item.tagName === 'img' && item.attributes.src.indexOf(domain) !== -1 && item.attributes.src.indexOf('?') === -1) {
item.attributes.src += '?imageView2/2/w/' + width
if (quality) item.attributes.src += '/q/' + quality
}
}

@ -0,0 +1,19 @@
// <a> to <navigator>
const url = require('../vendors/url')
const Router = require('../vendors/Router')
module.exports = (domain, routes) =>
item => {
if (item.tagName === 'a') {
const u = url.parse(item.attributes.href)
if (u.hostname === domain) {
const router = new Router(routes)
const route = router.match(u.pathname)
if (route) {
item.wxTag = 'navigator'
item.url = url.format({ pathname: route.path, query: Object.assign(u.query, route.params, route.options) })
}
}
}
}

@ -0,0 +1,10 @@
const { resolve } = require('../vendors/url')
module.exports = baseUrl =>
item => {
if (['img', 'video', 'audio', 'source'].indexOf(item.tagName) !== -1) {
if (item.attributes.src) item.attributes.src = resolve(baseUrl, item.attributes.src)
} else if (item.tagName === 'a') {
item.attributes.href = resolve(baseUrl, item.attributes.href)
}
}

@ -0,0 +1,52 @@
const himalaya = require('./vendors/himalaya')
const defaultEachFn = require('./each/default')
const resolveUrl = require('./each/resolveUrl')
class HtmlParser {
constructor(html, { baseUrl } = {}) {
this.nodes = himalaya.parse(html)
if (baseUrl) this.each(resolveUrl(baseUrl))
this.each(defaultEachFn)
}
each(fn) {
this._each(fn, this.nodes)
return this
}
_each(fn, nodes) {
nodes.forEach((item, ...args) => {
fn(item, ...args)
if (item.children) this._each(fn, item.children)
})
}
filter(fn) {
this.nodes = this._filter(fn, this.nodes)
return this
}
_filter(fn, nodes) {
return nodes.filter((item, ...args) => {
const result = fn(item, ...args)
if (result && item.children) item.children = this._filter(fn, item.children)
return result
})
}
map(fn) {
this.nodes = this._map(fn, this.nodes)
return this
}
_map(fn, nodes) {
return nodes.map((item, ...args) => {
item = fn(item, ...args)
if (item.children) item.children = this._map(fn, item.children)
return item
})
}
}
module.exports = HtmlParser

@ -0,0 +1,7 @@
<import src="nodes.wxml" />
<template name="html-view">
<view class="html-view">
<template is="html-view-nodes" data="{{nodes: data}}" />
</view>
</template>

@ -0,0 +1,21 @@
@import "reset.wxss";
.html-view {
font-size: 36rpx;
color: #333;
line-height: 1.6;
overflow-wrap: break-word;
}
.img, .video {
width: 100%;
}
.table {
border-collapse: collapse;
}
.th, .td {
border: 1rpx solid #333;
padding: 10rpx;
}

@ -0,0 +1,241 @@
<template name="html-view-nodes">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-1" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-1" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-1" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-1">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-2" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-2" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-2" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-2">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-3" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-3" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-3" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-3">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-4" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-4" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-4" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-4">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-5" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-5" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-5" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-5">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-6" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-6" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-6" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-6">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-7" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-7" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-7" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-7">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-8" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-8" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-8" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-8">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-9" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-9" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-9" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-9">
<block wx:for="{{nodes}}" wx:key="">
<block wx:if="{{item.type === 'Text'}}">{{item.content}}</block>
<block wx:elif="{{item.type === 'Element'}}">
<view wx:if="{{item.wxTag === 'view'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-10" data="{{nodes: item.children}}" />
</view>
<text wx:elif="{{item.wxTag === 'text'}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-10" data="{{nodes: item.children}}" />
</text>
<navigator wx:elif="{{item.wxTag === 'navigator'}}" url="{{item.url}}" class="{{item.tagName}} {{item.attributes.className}}" style="{{item.attributes.styleString}}">
<template is="html-view-nodes-10" data="{{nodes: item.children}}" />
</navigator>
<image wx:if="{{item.wxTag === 'image'}}" src="{{item.attributes.src}}" class="img" mode="widthFix" style="{{item.attributes.styleString}}" />
<video wx:elif="{{item.wxTag === 'video'}}" src="{{item.attributes.src}}" class="video"></video>
<audio wx:elif="{{item.wxTag === 'audio'}}" src="{{item.attributes.src}}" class="audio" controls></audio>
</block>
</block>
</template>
<template name="html-view-nodes-10"></template>

@ -0,0 +1,306 @@
/*
css reset
based on https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css
*/
.html {
display: block;
}
/* children of the <head> element all have display:none */
.head {
display: none;
}
.meta {
display: none;
}
.title {
display: none;
}
.link {
display: none;
}
.style {
display: none;
}
.script {
display: none;
}
/* generic block-level elements */
.body {
display: block;
margin: 8rpx;
}
.p {
display: block;
margin: 1em 0;
}
.div {
display: block;
}
.layer {
display: block;
}
.article, .aside, .footer, .header, .hgroup, .main, .nav, .section {
display: block;
}
.marquee {
display: inline-block;
}
.address {
display: block;
}
.blockquote {
display: block;
margin: 1em 40rpx;
}
.figcaption {
display: block;
}
.figure {
display: block;
margin: 1em 40rpx;
}
.q {
display: inline;
}
.q:before {
content: open-quote;
}
.q:after {
content: close-quote;
}
.center {
display: block;
text-align: center;
}
.hr {
display: block;
margin: 0.5em 0;
border: 1rpx inset;
}
.map {
display: inline;
}
/* heading elements */
.h1 {
display: block;
font-size: 2em;
font-weight: bold;
margin: 0.67em 0;
}
.h2 {
display: block;
font-size: 1.5em;
font-weight: bold;
margin: 0.83em 0;
}
.h3 {
display: block;
font-size: 1.17em;
font-weight: bold;
margin: 1em 0;
}
.h4 {
display: block;
font-weight: bold;
margin: 1.33em 0;
}
.h5 {
display: block;
font-size: 0.83em;
font-weight: bold;
margin: 1.67em 0;
}
.h6 {
display: block;
font-size: 0.67em;
font-weight: bold;
margin: 2.33em 0;
}
/* tables */
.table {
display: table;
border-collapse: separate;
border-spacing: 2px;
border-color: gray;
}
.thead {
display: table-header-group;
vertical-align: middle;
border-color: inherit;
}
.tbody {
display: table-row-group;
vertical-align: middle;
border-color: inherit;
}
.tfoot {
display: table-footer-group;
vertical-align: middle;
border-color: inherit;
}
.col {
display: table-column;
}
.colgroup {
display: table-column-group;
}
.tr {
display: table-row;
vertical-align: inherit;
border-color: inherit
}
.td, .th {
display: table-cell;
vertical-align: inherit;
}
.th {
font-weight: bold;
}
.caption {
display: table-caption;
text-align: center;
}
/* lists */
.ul, .menu, .dir {
list-style-type: disc;
margin: 1em 0;
padding-left: 40rpx;
}
.ol {
display: block;
list-style-type: decimal;
margin: 1em 0;
padding-left: 40rpx;
}
.li {
display: list-item;
text-align: match-parent;
}
.ul .ul, .ol .ul {
list-style-type: circle
}
.ol .ol .ul, .ol .ul .ul, .ul .ol .ul, .ul .ul .ul {
list-style-type: square;
}
.dd {
display: block;
margin-left: 40rpx;
}
.dl {
display: block;
margin: 1em 0;
}
.dt {
display: block
}
.ol .ul, .ul .ol, .ul .ul, .ol .ol {
margin: 0;
}
/* inline elements */
.u, .ins {
text-decoration: underline;
}
.strong, .b {
font-weight: bold;
}
.i, .cite, .em, .var, .address, .dfn {
font-style: italic;
}
.tt, .code, .kbd, .samp {
font-family: monospace;
}
.pre, .xmp, .plaintext, .listing {
display: block;
font-family: monospace;
white-space: pre;
margin: 1em 0;
}
.mark {
background-color: yellow;
color: black;
}
.big {
font-size: larger;
}
.small {
font-size: smaller;
}
.s, .strike, .del {
text-decoration: line-through;
}
.sub {
vertical-align: sub;
font-size: smaller;
}
.sup {
vertical-align: super;
font-size: smaller;
}
.nobr {
white-space: nowrap;
}

@ -0,0 +1,198 @@
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['module', 'exports'], factory);
} else if (typeof exports !== "undefined") {
factory(module, exports);
} else {
var mod = {
exports: {}
};
factory(mod, mod.exports);
global.Router = mod.exports;
}
})(this, function (module, exports) {
'use strict';
exports.__esModule = true;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var Router = function () {
function Router(conf) {
_classCallCheck(this, Router);
this.routes = {};
if (conf.constructor === Array) conf = { ALL: conf };
for (var method in conf) {
var routes = conf[method];
var rts = this.routes[method] = {
string: {},
regex: []
};
var _loop = function _loop() {
if (_isArray) {
if (_i >= _iterator.length) return 'break';
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) return 'break';
_ref = _i.value;
}
var _rt = _ref;
var pattern = void 0,
replacement = void 0,
params = void 0,
options = void 0;
if (_rt.constructor === String) {
pattern = _rt;
replacement = '$&';
params = [];
options = {};
} else {
var rt = _rt.concat();
pattern = rt.shift();
replacement = rt.shift() || '$&';
options = _typeof(rt[rt.length - 1]) == 'object' ? rt.pop() : {};
params = rt;
}
if (pattern.constructor === RegExp) {
rts.regex.push({
pattern: pattern,
replacement: replacement,
params: params,
options: options,
origin: _rt
});
} else {
if (!/:|\*|\$/.test(pattern)) {
rts.string[pattern] = {
replacement: replacement === '$&' ? pattern : replacement,
options: options,
origin: _rt
};
} else {
params = [];
pattern = pattern.replace(/[\\&()+.[?^{|]/g, '\\$&').replace(/:(\w+)/g, function (str, key) {
params.push(key);
return '([^/]+)';
}).replace(/\*/g, '.*');
rts.regex.push({
pattern: new RegExp('^' + pattern + '$'),
replacement: replacement,
params: params,
options: options,
origin: _rt
});
}
}
};
for (var _iterator = routes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
var _ret = _loop();
if (_ret === 'break') break;
}
}
}
Router.prototype.match = function match(path) {
var method = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ALL';
var rts = this.routes[method];
if (rts) {
if (rts.string[path]) {
var match = {
path: rts.string[path].replacement,
params: {},
options: rts.string[path].options,
origin: rts.string[path].origin
};
if (Router.log) {
console.log('path:', path, '\n', 'method:', method, '\n', 'match:', match); // eslint-disable-line
}
return match;
}
var _replacement = void 0;
var _params = {};
for (var _iterator2 = rts.regex, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
}
var rt = _ref2;
var matches = path.match(rt.pattern);
if (matches) {
_replacement = rt.replacement;
if (_replacement.indexOf('$') !== -1) {
_replacement = _replacement === '$&' ? path : path.replace(rt.pattern, _replacement);
}
matches.shift();
for (var j = 0; j < rt.params.length; j++) {
if (rt.params[j]) {
_params[rt.params[j]] = matches[j];
}
}
var _match = {
path: _replacement,
params: _params,
options: rt.options,
origin: rt.origin
};
if (Router.log) {
console.log('path:', path, '\n', 'method:', method, '\n', 'match:', _match); // eslint-disable-line
}
return _match;
}
}
}
if (Router.log) {
console.log('path:', path, '\n', 'method:', method, '\n', 'match:', null); // eslint-disable-line
}
return method === 'ALL' ? null : this.match(path);
};
return Router;
}();
exports.default = Router;
module.exports = exports['default'];
});

@ -0,0 +1,317 @@
(function() {
var root = this;
var tagStart = '<';
var tagEnd = '>';
var commentStart = '<!--';
var commentEnd = '-->';
var voidTags = [
"!doctype", "area", "base", "br", "col", "command",
"embed", "hr", "img", "input", "keygen", "link",
"meta", "param", "source", "track", "wbr"
];
var closingTags = [
"colgroup", "dd", "dt", "li", "options", "p",
"td", "tfoot", "th", "thead", "tr"
];
var childlessTags = ['style', 'script', 'template'];
function parse(str) {
return parseUntil(str + '</root>', ['root']).nodes;
}
function parseUntil(str, stack) {
var nodes = [];
while (str.length) {
var nextTag = str.indexOf(tagStart);
if (nextTag === -1) {
// only text left
nodes.push({
type: 'Text',
content: str
});
str = '';
break;
}
if (nextTag) {
// text before tag
nodes.push({
type: 'Text',
content: str.slice(0, nextTag)
});
str = str.slice(nextTag);
continue;
}
if (startsWithCommentStart(str)) {
// comment
var end = str.indexOf(commentEnd);
nodes.push({
type: 'Comment',
content: str.slice(commentStart.length, end)
});
str = str.slice(end + commentEnd.length);
continue;
}
var isClosingTag = str.charAt(nextTag + 1) === '/';
if (isClosingTag) {
var endTagEnd = str.indexOf(tagEnd);
var innerTag = str.slice(2, endTagEnd);
var tagName = innerTag.trim().split(' ')[0];
str = str.slice(endTagEnd + 1);
var loc = stack.lastIndexOf(tagName);
if (~loc) {
stack = stack.slice(0, loc);
break;
}
continue;
}
// open tag
var results = parseTag(str, stack);
if (results.tag) {
results.tag.type = 'Element';
nodes.push(results.tag);
str = results.str;
}
if (results.stack.length !== stack.length) {
stack = results.stack;
break;
}
}
return {
nodes: nodes,
stack: stack,
str: str
};
}
function parseTag(str, stack) {
var idxTagEnd = str.indexOf(tagEnd);
var idxSpace = str.indexOf(' ');
var tagNameEnd = ~idxSpace ?
Math.min(idxTagEnd, idxSpace) :
idxTagEnd;
var tagName = str.slice(1, tagNameEnd);
var lowTagName = tagName.toLowerCase();
if (stack[stack.length - 1] === tagName && ~closingTags.indexOf(lowTagName)) {
return {
stack: stack.slice(0, -1)
};
}
var attrs = parseAttrs(str.slice(tagNameEnd));
var tag = {
tagName: tagName,
attributes: attrs.attributes
};
str = attrs.str;
if (startsWithSelfClose(str)) {
str = str.slice(2);
} else {
str = str.slice(1);
if (~childlessTags.indexOf(lowTagName)) {
var end = '</' + tagName + '>';
var idx = str.indexOf(end);
if (!~idx) idx = Infinity;
tag.content = str.slice(0, idx);
str = str.slice(idx);
} else if (!~voidTags.indexOf(lowTagName)) {
var results = parseUntil(str, stack.concat(tagName));
tag.children = results.nodes;
str = results.str;
stack = results.stack;
}
}
return {
tag: tag,
str: str,
stack: stack
};
}
function parseAttrs(str) {
str = str.trim();
var results = tagPairs(str, 0);
str = str.slice(results.cursor);
var attributes = results.kvs.map(function(pair) {
var kv = splitHead(pair.trim(), '=');
kv[1] = kv[1] ? unquote(kv[1]) : kv[0];
return kv;
}).reduce(function(attrs, kv) {
var property = kv[0];
var value = kv[1];
if (property === 'class') {
attrs.className = value.split(' ');
} else if (property === 'style') {
attrs.style = parseStyle(value);
} else if (startsWithDataDash(property)) {
attrs.dataset = attrs.dataset || {};
var key = camelCase(property.slice(5));
attrs.dataset[key] = castValue(value);
} else {
attrs[camelCase(property)] = castValue(value);
}
return attrs;
}, {});
return {
str: str,
attributes: attributes
};
}
function splitHead(str, sep) {
var idx = str.indexOf(sep);
if (idx === -1) return [str];
return [str.slice(0, idx), str.slice(idx + sep.length)];
}
function tagPairs(str, index) {
var words = []; // "key", "key=value", "key='value'", etc
var quote = null; // null, single-, or double-quote
var cursor = index; // index of parse into str
var wordBegin = cursor; // index of word start
var len = str.length;
while(cursor < len) {
var char = str.charAt(cursor);
var isTagEnd = !quote && (char === '/' || char === tagEnd);
if (isTagEnd) {
if (cursor !== wordBegin) {
words.push(str.slice(wordBegin, cursor));
}
break;
}
var isWordEnd = !quote && char === ' ';
if (isWordEnd) {
if (cursor !== wordBegin) {
words.push(str.slice(wordBegin, cursor));
}
wordBegin = cursor + 1;
cursor++;
continue;
}
var isQuoteEnd = char === quote;
if (isQuoteEnd) {
quote = null;
cursor++;
continue;
}
var isQuoteStart = !quote && (char === '\'' || char === '"');
if (isQuoteStart) {
quote = char;
cursor++;
continue;
}
cursor++;
}
var attrs = [];
var wLen = words.length;
for (var i = 0; i < wLen; i++) {
var word = words[i];
if (!(word && word.length)) continue;
var isNotPair = word.indexOf('=') === -1;
if (isNotPair) {
var secondWord = words[i + 1];
var thirdWord = words[i + 2];
var isSpacedPair = secondWord === '=' && thirdWord;
if (isSpacedPair) {
var newWord = word + '=' + thirdWord;
attrs.push(newWord);
i += 2;
continue;
}
}
attrs.push(word);
}
return {
cursor: cursor,
kvs: attrs
};
}
function unquote(str) {
var car = str.charAt(0);
var end = str.length - 1;
if (car === '"' || car === "'" && car === str.charAt(end)) {
return str.slice(1, end);
}
return str;
}
function parseStyle(str) {
return str.trim().split(';').map(function(statement) {
return statement.trim().split(':');
}).reduce(function(styles, kv) {
if (kv[1]) styles[camelCase(kv[0].trim())] = castValue(kv[1].trim());
return styles;
}, {});
}
function camelCase(str) {
return str.split('-').reduce(function(str, word) {
return str + word.charAt(0).toUpperCase() + word.slice(1);
});
}
function castValue(str) {
if (typeof str !== 'string') return str;
var num = +str;
if (!isNaN(num)) return num;
return str;
}
function startsWithCommentStart(s) {
return (
s.charAt(0) === '<' &&
s.charAt(1) === '!' &&
s.charAt(2) === '-' &&
s.charAt(3) === '-');
}
function startsWithSelfClose(s) {
return (
s.charAt(0) === '/' &&
s.charAt(1) === '>');
}
function startsWithDataDash(s) {
return (
s.charAt(0) === 'd' &&
s.charAt(1) === 'a' &&
s.charAt(2) === 't' &&
s.charAt(3) === 'a' &&
s.charAt(4) === '-');
}
var himalaya = {
parse: parse,
parseTag: parseTag,
parseUntil: parseUntil,
parseAttrs: parseAttrs,
parseStyle: parseStyle
};
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = himalaya;
}
exports.himalaya = himalaya;
} else {
root.himalaya = himalaya;
}
}).call(this);

File diff suppressed because one or more lines are too long

@ -0,0 +1,186 @@
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['module', 'exports'], factory);
} else if (typeof exports !== "undefined") {
factory(module, exports);
} else {
var mod = {
exports: {}
};
factory(mod, mod.exports);
global.url = mod.exports;
}
})(this, function (module, exports) {
'use strict';
exports.__esModule = true;
function parseQuery(str) {
var query = {};
if (str.length) {
str.replace(/\+/g, ' ').split('&').forEach(function (s) {
var pair = s.split('=');
var key = decodeURIComponent(pair[0]);
var val = pair.length === 1 ? '' : decodeURIComponent(pair[1]);
if (query[key] == null) {
query[key] = val;
} else {
if (query[key].constructor !== Array) query[key] = [query[key]];
query[key].push(val);
}
});
}
return query;
}
function formatQuery(obj) {
var str = '';
var _loop = function _loop(p) {
var key = encodeURIComponent(p);
[].concat(obj[p]).forEach(function (val) {
if (val == null) return;
str += '&' + key;
if (val !== '') str += '=' + encodeURIComponent(val);
});
};
for (var p in obj) {
_loop(p);
}
return str.slice(1);
}
function parse(str) {
var m = /^(?:([^:/?#]+:))?(?:\/\/(?:(([^:@]*)(?::([^:@]*))?)?@)?(([^:/?#]*)(?::(\d*))?))?(((?:[^?#/]*\/)*[^?#]*)(?:(\?[^#]*))?)(?:(#.*))?/.exec(str);
var url = {};['href', 'protocol', 'auth', 'username', 'password', 'host', 'hostname', 'port', 'path', 'pathname', 'search', 'hash'].forEach(function (key, i) {
return url[key] = m[i] || '';
});
if (!url.path && !url.pathname) url.path = url.pathname = '/';
url.query = parseQuery(url.search.slice(1));
return url;
}
function format() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$protocol = _ref.protocol,
protocol = _ref$protocol === undefined ? '' : _ref$protocol,
_ref$auth = _ref.auth,
auth = _ref$auth === undefined ? '' : _ref$auth,
_ref$username = _ref.username,
username = _ref$username === undefined ? '' : _ref$username,
_ref$password = _ref.password,
password = _ref$password === undefined ? '' : _ref$password,
_ref$host = _ref.host,
host = _ref$host === undefined ? '' : _ref$host,
_ref$hostname = _ref.hostname,
hostname = _ref$hostname === undefined ? '' : _ref$hostname,
_ref$port = _ref.port,
port = _ref$port === undefined ? '' : _ref$port,
_ref$path = _ref.path,
path = _ref$path === undefined ? '' : _ref$path,
_ref$pathname = _ref.pathname,
pathname = _ref$pathname === undefined ? '' : _ref$pathname,
_ref$search = _ref.search,
search = _ref$search === undefined ? '' : _ref$search,
_ref$query = _ref.query,
query = _ref$query === undefined ? null : _ref$query,
_ref$hash = _ref.hash,
hash = _ref$hash === undefined ? '' : _ref$hash;
var str = '';
if (protocol) {
str += protocol;
if (protocol.slice(-1) !== ':') str += ':';
}
if (protocol || host || hostname) str += '//';
if (host || hostname) {
if (auth) {
str += auth + '@';
} else if (username) {
str += username;
if (password) str += ':' + password;
str += '@';
}
if (host) {
str += host;
} else {
str += hostname;
if (port) str += ':' + port;
}
}
if (path) {
str += path;
} else {
str += pathname || '/';
if (search) {
str += search;
} else if (query) {
var q = formatQuery(query);
if (q) str += '?' + q;
}
}
str += hash;
return str;
}
function resolve(from, to) {
from = parse(from);
to = parse(to);
// 'to' is an absolute URL
if (to.protocol) return to.href;
// 'to' only need to complete the protocol
if (to.host) {
to.protocol = from.protocol;
return format(to);
}
// 'to' has aboslute path
if (to.path[0] === '/') {
from.path = to.path;
from.pathname = from.search = '';
from.query = null;
from.hash = to.hash;
return format(from);
}
if (to.pathname) {
(function () {
var dirFrom = from.pathname.split('/');
// pop the filename
dirFrom.pop();
to.pathname.split('/').forEach(function (d) {
switch (d) {
case '.':
return;
case '..':
return dirFrom.length > 1 ? dirFrom.pop() : null;
default:
dirFrom.push(d);
}
});
from.pathname = dirFrom.join('/');
})();
}
from.path = '';
from.search = to.search;
from.query = null;
from.hash = to.hash;
return format(from);
}
exports.default = { parse: parse, format: format, resolve: resolve, parseQuery: parseQuery, formatQuery: formatQuery };
module.exports = exports['default'];
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

@ -1,66 +1,112 @@
// pages/shouye/shouye.js
Page({
//index.js
//获取应用实例
const app = getApp()
const api = require('../../utils/api.js');
/**
* 页面的初始数据
*/
Page({
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
motto: 'Hello World',
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo'),
imgUrls: [
'../index/image/banner/banner1.jpg',
'../index/image/banner/banner2.jpg',
'../index/image/banner/banner3.jpg'
],
indicatorDots: true,
autoplay: true,
interval: 5000,
duration: 1000,
forumList: [],
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
//事件处理函数
// bindViewTap: function () {
// wx.navigateTo({
// url: '../logs/logs'
// })
//},
onShow() {
},
onLoad: function () {
let that = this;
wx.getStorage({
key: 'bbsProfile',
fail: function (res) {
that.login();
}
})
this.getForum();
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
getUserInfo: function (e) {
console.log(e)
app.globalData.userInfo = e.detail.userInfo
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
getForum() {
let data = {
pageNo: "0",
pageSize: "5"
};
api.getForum({
data,
success: (res) => {
this.setData({
forumList: res.data.content
})
}
})
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
login() {
let data = {
"username": "3f8bbbfaafda4d3e83e06b689d785e52",
"password": "3f8bbbfaafda4d3e83e06b689d785e52"
}
api.login({
data,
success: (res) => {
wx.setStorage({
key: 'bbsProfile',
data: res.data.item
})
}
})
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
toList(e) {
wx.navigateTo({
url: '../logs/logs?id=0',
})
}
})

@ -1,3 +1,3 @@
{
"usingComponents": {}
"navigationBarTitleText": "首页"
}

@ -1,2 +1,55 @@
<!--pages/shouye/shouye.wxml-->
<text>pages/shouye/shouye.wxml</text>
<view class="containers">
<!--<view class="userinfo">
<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>-->
<view class="swiper-ai">
<swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
<block wx:for="{{imgUrls}}">
<swiper-item>
<image src="{{item}}" class="slide-image" width="355" height="240" />
</swiper-item>
</block>
</swiper>
</view>
<!--<view>
<label class="weui-search-bar__label" hidden="{{inputShowed}}" bindtap="showInput">
<icon class="weui-icon-search" type="search" size="14"></icon>
<view class="weui-search-bar__text">搜索</view>
</label>
</view>-->
<view class="weui-search-bar__form">
<view class="weui-search-bar__box">
<icon class="weui-icon-search_in-box" type="search" size="14"></icon>
<form bindsubmit="formSubmit">
<input type="text" bindconfirm="bindKeyFirm" class="weui-search-bar__input" placeholder="搜索" value="{{inputVal}}" focus="{{inputShowed}}" bindinput="inputTyping" />
</form>
</view>
</view>
<view class="weui-panel weui-panel_access" style="margin-top:0;">
<view class="weui-panel__hd">推荐模块</view>
<view class="weui-panel__bd">
<navigator wx:for="{{forumList}}" url="../logs/logs?id={{item.id}}" data-id="{{item.id}}" class="weui-media-box weui-media-box_appmsg" hover-class="weui-cell_active">
<view class="weui-media-box__hd weui-media-box__hd_in-appmsg" style="width:120px;height:80px;">
<image class="weui-media-box__thumb" src='../index/image/banner/img{{index}}.jpeg' />
</view>
<view class="weui-media-box__bd weui-media-box__bd_in-appmsg">
<view class="weui-media-box__title">{{item.forum_name}}</view>
<view class="weui-media-box__desc">{{item.forum_description}}</view>
</view>
</navigator>
</view>
<view class="weui-panel__ft">
<view class="weui-cell weui-cell_access weui-cell_link">
<view class="weui-cell__bd" bindtap="toList">查看更多</view>
<view class="weui-cell__ft weui-cell__ft_in-access"></view>
</view>
</view>
</view>
</view>

@ -1 +1,26 @@
/* pages/shouye/shouye.wxss */
/**index.wxss**/
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.swiper-ai image{
width: 100%;
}
.swiper-ai swiper{
height:240px;
}
.userinfo-nickname {
color: #aaa;
}
.usermotto {
margin-top: 200px;
}

@ -13,7 +13,7 @@
},
"compileType": "miniprogram",
"libVersion": "2.4.4",
"appid": "wx18f06ad86d422b11",
"appid": "wxd037e598f9fc428d",
"projectname": "%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91",
"debugOptions": {
"hidedInDevtools": []

@ -0,0 +1,62 @@
const apiURL = 'http://47.104.244.32:8100';
let headerData= {
}
headerData['Content-Type']= 'application/json';
let userData ={};
wx.getStorage({
key: 'bbsProfile',
success: function(res) {
userData = res.data;
if(userData.token){
headerData['Authorization']=userData.token;
}
}
})
const wxRequest = (params, url) => {
wx.request({
url,
method: params.method || 'POST',
data: params.data || {},
header:headerData, /*{
Accept: 'application/json',
'Content-Type': 'application/json',
},*/
success(res) {
if (params.success) {
params.success(res);
}
},
fail(res) {
if (params.fail) {
params.fail(res);
}
},
complete(res) {
if (params.complete) {
params.complete(res);
}
},
});
};
const getForum = (params) => {
wxRequest(params, `${apiURL}/forumManagement/getForum`);
};
const getQuestion = (params) => {
wxRequest(params, `${apiURL}/question/getQuestion`);
};
const login = (params) => {
wxRequest(params, `${apiURL}/session`);
};
const newAdmin = (params) => {
wxRequest(params, `${apiURL}/user/newAdmin`);
};
module.exports = {
getForum,
getQuestion,
login,
newAdmin
};

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save