91 lines
3.3 KiB
JavaScript
91 lines
3.3 KiB
JavaScript
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
const root = path.resolve(__dirname, '..')
|
|
const wv = path.resolve(root, '..', 'tyc-webview-v2', 'src', 'views')
|
|
|
|
function extractTemplate(vueSrc) {
|
|
const m = vueSrc.match(/<template>([\s\S]*?)<\/template>/)
|
|
return m ? m[1].trim() : ''
|
|
}
|
|
|
|
function convert(html) {
|
|
let s = html
|
|
s = s.replace(/<div class="p-4">/g, '<view>')
|
|
s = s.replace(/<div\b/g, '<view')
|
|
s = s.replace(/<\/div>/g, '</view>')
|
|
s = s.replace(/<span\b/g, '<text')
|
|
s = s.replace(/<\/span>/g, '</text>')
|
|
s = s.replace(/class="text-blue-500"/g, 'class="legal-link"')
|
|
s = s.replace(/class="mt-4 text-right text-sm text-gray-600"/g, 'class="legal-date legal-date-right"')
|
|
s = s.replace(/class="text-right text-sm"/g, 'class="legal-date legal-date-right"')
|
|
s = s.replace(/class="text-sm"/g, 'class="legal-date"')
|
|
s = s.replace(/class="mb-2 font-semibold"/g, 'class="legal-subhead"')
|
|
s = s.replace(/class="font-semibold"/g, 'class="legal-strong"')
|
|
s = s.replace(/class="mb-2 font-bold leading-relaxed"/g, 'class="legal-h3"')
|
|
s = s.replace(/class="mb-2 font-bold"/g, 'class="legal-h3"')
|
|
s = s.replace(/class="mb-4 text-center text-lg font-bold"/g, 'class="legal-page-title"')
|
|
s = s.replace(/class="indent-\[2em\]"/g, 'class="legal-indent"')
|
|
s = s.replace(/class="mb-4 leading-relaxed"/g, 'class="legal-block"')
|
|
s = s.replace(/class="leading-relaxed"/g, 'class="legal-para"')
|
|
s = s.replace(/class="mb-4"/g, 'class="legal-section"')
|
|
s = s.replace(/class="mt-2 leading-relaxed"/g, 'class="legal-block legal-mt"')
|
|
s = s.replace(/class="mt-2 font-bold"/g, 'class="legal-h4"')
|
|
s = s.replace(/class="mt-2"/g, 'class="legal-mt"')
|
|
s = s.replace(/class="mt-4"/g, 'class="legal-mt-lg"')
|
|
s = s.replace(/class="my-2"/g, 'class="legal-my"')
|
|
s = s.replace(/<p\b/g, '<view class="legal-p"')
|
|
s = s.replace(/<\/p>/g, '</view>')
|
|
s = s.replace(/<ol\b[^>]*>/g, '<view class="legal-ol">')
|
|
s = s.replace(/<\/ol>/g, '</view>')
|
|
s = s.replace(/<ul\b[^>]*>/g, '<view class="legal-ul">')
|
|
s = s.replace(/<\/ul>/g, '</view>')
|
|
s = s.replace(/<li>/g, '<view class="legal-li">')
|
|
s = s.replace(/<\/li>/g, '</view>')
|
|
return s
|
|
}
|
|
|
|
const definePageSnippet = title => `definePage({
|
|
style: {
|
|
navigationBarTitleText: '${title}',
|
|
navigationStyle: 'default',
|
|
navigationBarBackgroundColor: '#ffffff',
|
|
navigationBarTextStyle: 'black',
|
|
},
|
|
})`
|
|
|
|
function makePage(title, inner) {
|
|
return `<script setup lang="ts">
|
|
${definePageSnippet(title)}
|
|
</script>
|
|
|
|
<template>
|
|
<view class="legal-root">
|
|
<scroll-view scroll-y class="legal-scroll" :show-scrollbar="true">
|
|
<view class="legal-inner">
|
|
${inner}
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
</template>
|
|
|
|
<style scoped lang="scss">
|
|
@import './legal.scss';
|
|
</style>
|
|
`
|
|
}
|
|
|
|
const ua = fs.readFileSync(path.join(wv, 'UserAgreement.vue'), 'utf8')
|
|
const pp = fs.readFileSync(path.join(wv, 'PrivacyPolicy.vue'), 'utf8')
|
|
|
|
const uaBody = convert(extractTemplate(ua))
|
|
const ppBody = convert(extractTemplate(pp))
|
|
|
|
const outDir = path.join(root, 'src', 'pages', 'legal')
|
|
fs.mkdirSync(outDir, { recursive: true })
|
|
fs.writeFileSync(path.join(outDir, 'user-agreement.vue'), makePage('用户协议', uaBody))
|
|
fs.writeFileSync(path.join(outDir, 'privacy-policy.vue'), makePage('隐私政策', ppBody))
|
|
console.log('OK', outDir)
|