开源大赛-2024年版
|
@ -1,88 +0,0 @@
|
|||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
yarn.lock
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Ignore master key for decrypting credentials and more.
|
||||
/config/master.key
|
||||
/config/database.yml
|
||||
/.idea/*
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
# nuxt.js build output
|
||||
.nuxt
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
#DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
.DS_Store
|
||||
.idea/*
|
|
@ -1,33 +0,0 @@
|
|||
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: ssss
|
||||
platform:
|
||||
os: linux
|
||||
arch: amd64
|
||||
steps:
|
||||
- name: 编译构建
|
||||
image: gcc
|
||||
commands:
|
||||
- ./configure
|
||||
- make
|
||||
# 需要将软件包与部署脚本提前上传到远程主机(见文件上传模板)
|
||||
# host、username、password可在参数管理中配置
|
||||
- name: 远程主机部署
|
||||
image: appleboy/drone-ssh
|
||||
settings:
|
||||
host:
|
||||
from_secret: ip
|
||||
username:
|
||||
from_secret: name
|
||||
password:
|
||||
from_secret: pwd
|
||||
port: 22
|
||||
script:
|
||||
- chmod +x /home/deploy.sh
|
||||
- ./home/deploy.sh
|
||||
trigger:
|
||||
branch:
|
||||
- dev_chain
|
||||
event:
|
||||
- push
|
|
@ -1,607 +0,0 @@
|
|||
{
|
||||
"./static/js/0.84a32162.chunk.js": "/build/./static/js/0.84a32162.chunk.js",
|
||||
"./static/js/1.4fffb0ad.chunk.js": "/build/./static/js/1.4fffb0ad.chunk.js",
|
||||
"./static/js/2.557613ce.chunk.js": "/build/./static/js/2.557613ce.chunk.js",
|
||||
"./static/js/3.ec3d0b8a.chunk.js": "/build/./static/js/3.ec3d0b8a.chunk.js",
|
||||
"./static/js/4.92b91d81.chunk.js": "/build/./static/js/4.92b91d81.chunk.js",
|
||||
"./static/js/5.e56235dc.chunk.js": "/build/./static/js/5.e56235dc.chunk.js",
|
||||
"./static/js/6.2f68a414.chunk.js": "/build/./static/js/6.2f68a414.chunk.js",
|
||||
"static/css/7.ca8c75a4.chunk.css": "/build/static/css/7.ca8c75a4.chunk.css",
|
||||
"./static/js/7.ede75b8b.chunk.js": "/build/./static/js/7.ede75b8b.chunk.js",
|
||||
"./static/js/8.a15f013a.chunk.js": "/build/./static/js/8.a15f013a.chunk.js",
|
||||
"./static/js/9.fa9807ef.chunk.js": "/build/./static/js/9.fa9807ef.chunk.js",
|
||||
"./static/js/10.e0a1c8da.chunk.js": "/build/./static/js/10.e0a1c8da.chunk.js",
|
||||
"./static/js/11.9245f5ed.chunk.js": "/build/./static/js/11.9245f5ed.chunk.js",
|
||||
"static/css/12.b8e94d0d.chunk.css": "/build/static/css/12.b8e94d0d.chunk.css",
|
||||
"./static/js/12.aafbde04.chunk.js": "/build/./static/js/12.aafbde04.chunk.js",
|
||||
"static/css/13.3634cedd.chunk.css": "/build/static/css/13.3634cedd.chunk.css",
|
||||
"./static/js/13.b1ecf298.chunk.js": "/build/./static/js/13.b1ecf298.chunk.js",
|
||||
"./static/js/14.a637200b.chunk.js": "/build/./static/js/14.a637200b.chunk.js",
|
||||
"./static/js/15.9ac4780e.chunk.js": "/build/./static/js/15.9ac4780e.chunk.js",
|
||||
"static/css/16.36c57776.chunk.css": "/build/static/css/16.36c57776.chunk.css",
|
||||
"./static/js/16.3484dc47.chunk.js": "/build/./static/js/16.3484dc47.chunk.js",
|
||||
"./static/js/17.443adb99.chunk.js": "/build/./static/js/17.443adb99.chunk.js",
|
||||
"static/css/18.f7228588.chunk.css": "/build/static/css/18.f7228588.chunk.css",
|
||||
"./static/js/18.b1a95570.chunk.js": "/build/./static/js/18.b1a95570.chunk.js",
|
||||
"static/css/19.ed628a8f.chunk.css": "/build/static/css/19.ed628a8f.chunk.css",
|
||||
"./static/js/19.38cdd983.chunk.js": "/build/./static/js/19.38cdd983.chunk.js",
|
||||
"static/css/20.b369ea46.chunk.css": "/build/static/css/20.b369ea46.chunk.css",
|
||||
"./static/js/20.d0df8ef8.chunk.js": "/build/./static/js/20.d0df8ef8.chunk.js",
|
||||
"./static/js/21.c27b77ed.chunk.js": "/build/./static/js/21.c27b77ed.chunk.js",
|
||||
"static/css/22.e5c75834.chunk.css": "/build/static/css/22.e5c75834.chunk.css",
|
||||
"./static/js/22.05bf342f.chunk.js": "/build/./static/js/22.05bf342f.chunk.js",
|
||||
"./static/js/23.0d819544.chunk.js": "/build/./static/js/23.0d819544.chunk.js",
|
||||
"./static/js/24.6be29025.chunk.js": "/build/./static/js/24.6be29025.chunk.js",
|
||||
"static/css/25.b429c53f.chunk.css": "/build/static/css/25.b429c53f.chunk.css",
|
||||
"./static/js/25.0ace860d.chunk.js": "/build/./static/js/25.0ace860d.chunk.js",
|
||||
"./static/js/26.ceb11205.chunk.js": "/build/./static/js/26.ceb11205.chunk.js",
|
||||
"./static/js/27.f0fd768f.chunk.js": "/build/./static/js/27.f0fd768f.chunk.js",
|
||||
"./static/js/28.b543bca8.chunk.js": "/build/./static/js/28.b543bca8.chunk.js",
|
||||
"./static/js/29.4c8eb963.chunk.js": "/build/./static/js/29.4c8eb963.chunk.js",
|
||||
"./static/js/30.bedafd3c.chunk.js": "/build/./static/js/30.bedafd3c.chunk.js",
|
||||
"static/css/31.bc037916.chunk.css": "/build/static/css/31.bc037916.chunk.css",
|
||||
"./static/js/31.36586b2a.chunk.js": "/build/./static/js/31.36586b2a.chunk.js",
|
||||
"./static/js/32.6fbdeff7.chunk.js": "/build/./static/js/32.6fbdeff7.chunk.js",
|
||||
"static/css/33.c885231e.chunk.css": "/build/static/css/33.c885231e.chunk.css",
|
||||
"./static/js/33.172e761a.chunk.js": "/build/./static/js/33.172e761a.chunk.js",
|
||||
"static/css/34.91f8c9f4.chunk.css": "/build/static/css/34.91f8c9f4.chunk.css",
|
||||
"./static/js/34.9d004750.chunk.js": "/build/./static/js/34.9d004750.chunk.js",
|
||||
"static/css/35.462d47ca.chunk.css": "/build/static/css/35.462d47ca.chunk.css",
|
||||
"./static/js/35.70d1eae5.chunk.js": "/build/./static/js/35.70d1eae5.chunk.js",
|
||||
"./static/js/36.2285ed12.chunk.js": "/build/./static/js/36.2285ed12.chunk.js",
|
||||
"static/css/37.cf9fc21d.chunk.css": "/build/static/css/37.cf9fc21d.chunk.css",
|
||||
"./static/js/37.4516966b.chunk.js": "/build/./static/js/37.4516966b.chunk.js",
|
||||
"static/css/38.2839b078.chunk.css": "/build/static/css/38.2839b078.chunk.css",
|
||||
"./static/js/38.d93a770b.chunk.js": "/build/./static/js/38.d93a770b.chunk.js",
|
||||
"static/css/39.4f38187d.chunk.css": "/build/static/css/39.4f38187d.chunk.css",
|
||||
"./static/js/39.d3d09284.chunk.js": "/build/./static/js/39.d3d09284.chunk.js",
|
||||
"static/css/40.a34c4366.chunk.css": "/build/static/css/40.a34c4366.chunk.css",
|
||||
"./static/js/40.dd19e4ae.chunk.js": "/build/./static/js/40.dd19e4ae.chunk.js",
|
||||
"static/css/41.2312d6cd.chunk.css": "/build/static/css/41.2312d6cd.chunk.css",
|
||||
"./static/js/41.774262fc.chunk.js": "/build/./static/js/41.774262fc.chunk.js",
|
||||
"static/css/42.daebe093.chunk.css": "/build/static/css/42.daebe093.chunk.css",
|
||||
"./static/js/42.a928ac4c.chunk.js": "/build/./static/js/42.a928ac4c.chunk.js",
|
||||
"./static/js/43.7c664a90.chunk.js": "/build/./static/js/43.7c664a90.chunk.js",
|
||||
"static/css/44.57f61ec4.chunk.css": "/build/static/css/44.57f61ec4.chunk.css",
|
||||
"./static/js/44.f6e98158.chunk.js": "/build/./static/js/44.f6e98158.chunk.js",
|
||||
"static/css/45.b4a12036.chunk.css": "/build/static/css/45.b4a12036.chunk.css",
|
||||
"./static/js/45.02283a3c.chunk.js": "/build/./static/js/45.02283a3c.chunk.js",
|
||||
"static/css/46.f14403bb.chunk.css": "/build/static/css/46.f14403bb.chunk.css",
|
||||
"./static/js/46.65563171.chunk.js": "/build/./static/js/46.65563171.chunk.js",
|
||||
"static/css/47.c87fcf8a.chunk.css": "/build/static/css/47.c87fcf8a.chunk.css",
|
||||
"./static/js/47.6b5142e5.chunk.js": "/build/./static/js/47.6b5142e5.chunk.js",
|
||||
"static/css/48.594c5341.chunk.css": "/build/static/css/48.594c5341.chunk.css",
|
||||
"./static/js/48.ce1c292c.chunk.js": "/build/./static/js/48.ce1c292c.chunk.js",
|
||||
"static/css/49.78a1ba5d.chunk.css": "/build/static/css/49.78a1ba5d.chunk.css",
|
||||
"./static/js/49.e0587cd5.chunk.js": "/build/./static/js/49.e0587cd5.chunk.js",
|
||||
"static/css/50.aa1aedbe.chunk.css": "/build/static/css/50.aa1aedbe.chunk.css",
|
||||
"./static/js/50.bb2ef122.chunk.js": "/build/./static/js/50.bb2ef122.chunk.js",
|
||||
"static/css/51.3f716ced.chunk.css": "/build/static/css/51.3f716ced.chunk.css",
|
||||
"./static/js/51.94e7724d.chunk.js": "/build/./static/js/51.94e7724d.chunk.js",
|
||||
"static/css/52.3720ca68.chunk.css": "/build/static/css/52.3720ca68.chunk.css",
|
||||
"./static/js/52.1cd5d532.chunk.js": "/build/./static/js/52.1cd5d532.chunk.js",
|
||||
"static/css/53.4544e3c5.chunk.css": "/build/static/css/53.4544e3c5.chunk.css",
|
||||
"./static/js/53.e8ee9f61.chunk.js": "/build/./static/js/53.e8ee9f61.chunk.js",
|
||||
"static/css/54.1689373f.chunk.css": "/build/static/css/54.1689373f.chunk.css",
|
||||
"./static/js/54.7bce5148.chunk.js": "/build/./static/js/54.7bce5148.chunk.js",
|
||||
"static/css/55.1689373f.chunk.css": "/build/static/css/55.1689373f.chunk.css",
|
||||
"./static/js/55.74bb51b5.chunk.js": "/build/./static/js/55.74bb51b5.chunk.js",
|
||||
"static/css/56.10255b2a.chunk.css": "/build/static/css/56.10255b2a.chunk.css",
|
||||
"./static/js/56.3dbf8fe3.chunk.js": "/build/./static/js/56.3dbf8fe3.chunk.js",
|
||||
"static/css/57.10255b2a.chunk.css": "/build/static/css/57.10255b2a.chunk.css",
|
||||
"./static/js/57.d2d63b0d.chunk.js": "/build/./static/js/57.d2d63b0d.chunk.js",
|
||||
"static/css/58.ec3b9a0c.chunk.css": "/build/static/css/58.ec3b9a0c.chunk.css",
|
||||
"./static/js/58.88f27d13.chunk.js": "/build/./static/js/58.88f27d13.chunk.js",
|
||||
"static/css/59.77c696ba.chunk.css": "/build/static/css/59.77c696ba.chunk.css",
|
||||
"./static/js/59.ea1635c9.chunk.js": "/build/./static/js/59.ea1635c9.chunk.js",
|
||||
"./static/js/60.293e3852.chunk.js": "/build/./static/js/60.293e3852.chunk.js",
|
||||
"static/css/61.21590e13.chunk.css": "/build/static/css/61.21590e13.chunk.css",
|
||||
"./static/js/61.82c8e711.chunk.js": "/build/./static/js/61.82c8e711.chunk.js",
|
||||
"static/css/62.f8577cd6.chunk.css": "/build/static/css/62.f8577cd6.chunk.css",
|
||||
"./static/js/62.a4092a85.chunk.js": "/build/./static/js/62.a4092a85.chunk.js",
|
||||
"static/css/63.86dd1e31.chunk.css": "/build/static/css/63.86dd1e31.chunk.css",
|
||||
"./static/js/63.c508f1d6.chunk.js": "/build/./static/js/63.c508f1d6.chunk.js",
|
||||
"static/css/64.f8ce57b7.chunk.css": "/build/static/css/64.f8ce57b7.chunk.css",
|
||||
"./static/js/64.ede24cc4.chunk.js": "/build/./static/js/64.ede24cc4.chunk.js",
|
||||
"static/css/65.06715037.chunk.css": "/build/static/css/65.06715037.chunk.css",
|
||||
"./static/js/65.d7b3cf76.chunk.js": "/build/./static/js/65.d7b3cf76.chunk.js",
|
||||
"static/css/66.deeb1b7c.chunk.css": "/build/static/css/66.deeb1b7c.chunk.css",
|
||||
"./static/js/66.3e30971f.chunk.js": "/build/./static/js/66.3e30971f.chunk.js",
|
||||
"static/css/67.72b1c501.chunk.css": "/build/static/css/67.72b1c501.chunk.css",
|
||||
"./static/js/67.2c7f44d6.chunk.js": "/build/./static/js/67.2c7f44d6.chunk.js",
|
||||
"static/css/68.6b9ba3cb.chunk.css": "/build/static/css/68.6b9ba3cb.chunk.css",
|
||||
"./static/js/68.f243f03d.chunk.js": "/build/./static/js/68.f243f03d.chunk.js",
|
||||
"static/css/69.8dd8260d.chunk.css": "/build/static/css/69.8dd8260d.chunk.css",
|
||||
"./static/js/69.65a7a16c.chunk.js": "/build/./static/js/69.65a7a16c.chunk.js",
|
||||
"./static/js/70.9fe954b9.chunk.js": "/build/./static/js/70.9fe954b9.chunk.js",
|
||||
"./static/js/71.3b2374ed.chunk.js": "/build/./static/js/71.3b2374ed.chunk.js",
|
||||
"static/css/72.e34edd4c.chunk.css": "/build/static/css/72.e34edd4c.chunk.css",
|
||||
"./static/js/72.881f2d37.chunk.js": "/build/./static/js/72.881f2d37.chunk.js",
|
||||
"static/css/73.daebe093.chunk.css": "/build/static/css/73.daebe093.chunk.css",
|
||||
"./static/js/73.cd0b3742.chunk.js": "/build/./static/js/73.cd0b3742.chunk.js",
|
||||
"./static/js/74.2fa01ba6.chunk.js": "/build/./static/js/74.2fa01ba6.chunk.js",
|
||||
"static/css/75.9aa1849e.chunk.css": "/build/static/css/75.9aa1849e.chunk.css",
|
||||
"./static/js/75.6e6bc06b.chunk.js": "/build/./static/js/75.6e6bc06b.chunk.js",
|
||||
"static/css/76.cb568edc.chunk.css": "/build/static/css/76.cb568edc.chunk.css",
|
||||
"./static/js/76.49c32c89.chunk.js": "/build/./static/js/76.49c32c89.chunk.js",
|
||||
"./static/js/77.680e1c07.chunk.js": "/build/./static/js/77.680e1c07.chunk.js",
|
||||
"./static/js/78.bec7a013.chunk.js": "/build/./static/js/78.bec7a013.chunk.js",
|
||||
"static/css/79.520a4f34.chunk.css": "/build/static/css/79.520a4f34.chunk.css",
|
||||
"./static/js/79.5a5cc25d.chunk.js": "/build/./static/js/79.5a5cc25d.chunk.js",
|
||||
"./static/js/80.ac578db9.chunk.js": "/build/./static/js/80.ac578db9.chunk.js",
|
||||
"static/css/81.daebe093.chunk.css": "/build/static/css/81.daebe093.chunk.css",
|
||||
"./static/js/81.05ff896a.chunk.js": "/build/./static/js/81.05ff896a.chunk.js",
|
||||
"./static/js/82.5351faae.chunk.js": "/build/./static/js/82.5351faae.chunk.js",
|
||||
"static/css/83.18de873b.chunk.css": "/build/static/css/83.18de873b.chunk.css",
|
||||
"./static/js/83.6bd70cb5.chunk.js": "/build/./static/js/83.6bd70cb5.chunk.js",
|
||||
"./static/js/84.84caeccc.chunk.js": "/build/./static/js/84.84caeccc.chunk.js",
|
||||
"static/css/85.f6308980.chunk.css": "/build/static/css/85.f6308980.chunk.css",
|
||||
"./static/js/85.608fc360.chunk.js": "/build/./static/js/85.608fc360.chunk.js",
|
||||
"static/css/86.f58774d5.chunk.css": "/build/static/css/86.f58774d5.chunk.css",
|
||||
"./static/js/86.01c6ed27.chunk.js": "/build/./static/js/86.01c6ed27.chunk.js",
|
||||
"static/css/87.2c6a4087.chunk.css": "/build/static/css/87.2c6a4087.chunk.css",
|
||||
"./static/js/87.d34c1e8e.chunk.js": "/build/./static/js/87.d34c1e8e.chunk.js",
|
||||
"./static/js/88.6610a21d.chunk.js": "/build/./static/js/88.6610a21d.chunk.js",
|
||||
"static/css/89.163f59d9.chunk.css": "/build/static/css/89.163f59d9.chunk.css",
|
||||
"./static/js/89.0437bddd.chunk.js": "/build/./static/js/89.0437bddd.chunk.js",
|
||||
"static/css/90.632d7855.chunk.css": "/build/static/css/90.632d7855.chunk.css",
|
||||
"./static/js/90.3a1c1cc1.chunk.js": "/build/./static/js/90.3a1c1cc1.chunk.js",
|
||||
"static/css/91.82721c38.chunk.css": "/build/static/css/91.82721c38.chunk.css",
|
||||
"./static/js/91.4d89d314.chunk.js": "/build/./static/js/91.4d89d314.chunk.js",
|
||||
"static/css/92.163f59d9.chunk.css": "/build/static/css/92.163f59d9.chunk.css",
|
||||
"./static/js/92.70698c25.chunk.js": "/build/./static/js/92.70698c25.chunk.js",
|
||||
"static/css/93.3aeea5e9.chunk.css": "/build/static/css/93.3aeea5e9.chunk.css",
|
||||
"./static/js/93.88f6877f.chunk.js": "/build/./static/js/93.88f6877f.chunk.js",
|
||||
"./static/js/94.48ce348c.chunk.js": "/build/./static/js/94.48ce348c.chunk.js",
|
||||
"static/css/95.6c04c9a8.chunk.css": "/build/static/css/95.6c04c9a8.chunk.css",
|
||||
"./static/js/95.08b8f50b.chunk.js": "/build/./static/js/95.08b8f50b.chunk.js",
|
||||
"static/css/96.adba6539.chunk.css": "/build/static/css/96.adba6539.chunk.css",
|
||||
"./static/js/96.8c4f09ba.chunk.js": "/build/./static/js/96.8c4f09ba.chunk.js",
|
||||
"static/css/97.a403065b.chunk.css": "/build/static/css/97.a403065b.chunk.css",
|
||||
"./static/js/97.978190c1.chunk.js": "/build/./static/js/97.978190c1.chunk.js",
|
||||
"static/css/98.11a04942.chunk.css": "/build/static/css/98.11a04942.chunk.css",
|
||||
"./static/js/98.4147d385.chunk.js": "/build/./static/js/98.4147d385.chunk.js",
|
||||
"static/css/99.541803c4.chunk.css": "/build/static/css/99.541803c4.chunk.css",
|
||||
"./static/js/99.89288be1.chunk.js": "/build/./static/js/99.89288be1.chunk.js",
|
||||
"static/css/100.d788cda5.chunk.css": "/build/static/css/100.d788cda5.chunk.css",
|
||||
"./static/js/100.88a2a552.chunk.js": "/build/./static/js/100.88a2a552.chunk.js",
|
||||
"static/css/101.41b8aabd.chunk.css": "/build/static/css/101.41b8aabd.chunk.css",
|
||||
"./static/js/101.8fc5d397.chunk.js": "/build/./static/js/101.8fc5d397.chunk.js",
|
||||
"./static/js/102.7a1110de.chunk.js": "/build/./static/js/102.7a1110de.chunk.js",
|
||||
"./static/js/103.3902f083.chunk.js": "/build/./static/js/103.3902f083.chunk.js",
|
||||
"static/css/104.fd76673e.chunk.css": "/build/static/css/104.fd76673e.chunk.css",
|
||||
"./static/js/104.288c0c0e.chunk.js": "/build/./static/js/104.288c0c0e.chunk.js",
|
||||
"static/css/105.2370fbe9.chunk.css": "/build/static/css/105.2370fbe9.chunk.css",
|
||||
"./static/js/105.8aef3efb.chunk.js": "/build/./static/js/105.8aef3efb.chunk.js",
|
||||
"static/css/106.9aa1849e.chunk.css": "/build/static/css/106.9aa1849e.chunk.css",
|
||||
"./static/js/106.2d5e8a1e.chunk.js": "/build/./static/js/106.2d5e8a1e.chunk.js",
|
||||
"./static/js/107.02a6f635.chunk.js": "/build/./static/js/107.02a6f635.chunk.js",
|
||||
"static/css/108.610bb31e.chunk.css": "/build/static/css/108.610bb31e.chunk.css",
|
||||
"./static/js/108.3446a228.chunk.js": "/build/./static/js/108.3446a228.chunk.js",
|
||||
"static/css/109.ea97577b.chunk.css": "/build/static/css/109.ea97577b.chunk.css",
|
||||
"./static/js/109.5167ae28.chunk.js": "/build/./static/js/109.5167ae28.chunk.js",
|
||||
"static/css/110.c81bc07b.chunk.css": "/build/static/css/110.c81bc07b.chunk.css",
|
||||
"./static/js/110.b5ac119f.chunk.js": "/build/./static/js/110.b5ac119f.chunk.js",
|
||||
"static/css/111.426c2166.chunk.css": "/build/static/css/111.426c2166.chunk.css",
|
||||
"./static/js/111.70599d77.chunk.js": "/build/./static/js/111.70599d77.chunk.js",
|
||||
"./static/js/112.9b3218a2.chunk.js": "/build/./static/js/112.9b3218a2.chunk.js",
|
||||
"./static/js/113.1fe18ffb.chunk.js": "/build/./static/js/113.1fe18ffb.chunk.js",
|
||||
"static/css/114.9474d52b.chunk.css": "/build/static/css/114.9474d52b.chunk.css",
|
||||
"./static/js/114.405be1c6.chunk.js": "/build/./static/js/114.405be1c6.chunk.js",
|
||||
"./static/js/115.c3e24206.chunk.js": "/build/./static/js/115.c3e24206.chunk.js",
|
||||
"static/css/116.3ce18db9.chunk.css": "/build/static/css/116.3ce18db9.chunk.css",
|
||||
"./static/js/116.ef20fdf6.chunk.js": "/build/./static/js/116.ef20fdf6.chunk.js",
|
||||
"./static/js/117.3648fd18.chunk.js": "/build/./static/js/117.3648fd18.chunk.js",
|
||||
"static/css/118.a16009b1.chunk.css": "/build/static/css/118.a16009b1.chunk.css",
|
||||
"./static/js/118.19c69854.chunk.js": "/build/./static/js/118.19c69854.chunk.js",
|
||||
"static/css/119.ef7b39fb.chunk.css": "/build/static/css/119.ef7b39fb.chunk.css",
|
||||
"./static/js/119.e9f65403.chunk.js": "/build/./static/js/119.e9f65403.chunk.js",
|
||||
"static/css/120.56158b92.chunk.css": "/build/static/css/120.56158b92.chunk.css",
|
||||
"./static/js/120.e1ea5400.chunk.js": "/build/./static/js/120.e1ea5400.chunk.js",
|
||||
"static/css/121.a72d9adb.chunk.css": "/build/static/css/121.a72d9adb.chunk.css",
|
||||
"./static/js/121.c951bfba.chunk.js": "/build/./static/js/121.c951bfba.chunk.js",
|
||||
"static/css/122.d0ee7269.chunk.css": "/build/static/css/122.d0ee7269.chunk.css",
|
||||
"./static/js/122.ae5cee82.chunk.js": "/build/./static/js/122.ae5cee82.chunk.js",
|
||||
"static/css/123.f5a19396.chunk.css": "/build/static/css/123.f5a19396.chunk.css",
|
||||
"./static/js/123.ae5b568c.chunk.js": "/build/./static/js/123.ae5b568c.chunk.js",
|
||||
"static/css/124.78d24cb4.chunk.css": "/build/static/css/124.78d24cb4.chunk.css",
|
||||
"./static/js/124.2e2aa126.chunk.js": "/build/./static/js/124.2e2aa126.chunk.js",
|
||||
"./static/js/125.22089bf6.chunk.js": "/build/./static/js/125.22089bf6.chunk.js",
|
||||
"static/css/126.4054f41b.chunk.css": "/build/static/css/126.4054f41b.chunk.css",
|
||||
"./static/js/126.66fdb48d.chunk.js": "/build/./static/js/126.66fdb48d.chunk.js",
|
||||
"./static/js/127.6437d17b.chunk.js": "/build/./static/js/127.6437d17b.chunk.js",
|
||||
"static/css/128.f8577cd6.chunk.css": "/build/static/css/128.f8577cd6.chunk.css",
|
||||
"./static/js/128.bdff3f0c.chunk.js": "/build/./static/js/128.bdff3f0c.chunk.js",
|
||||
"static/css/129.15253a67.chunk.css": "/build/static/css/129.15253a67.chunk.css",
|
||||
"./static/js/129.422a4b8c.chunk.js": "/build/./static/js/129.422a4b8c.chunk.js",
|
||||
"./static/js/130.bbfd729c.chunk.js": "/build/./static/js/130.bbfd729c.chunk.js",
|
||||
"static/css/131.bf681b66.chunk.css": "/build/static/css/131.bf681b66.chunk.css",
|
||||
"./static/js/131.a4ec9bac.chunk.js": "/build/./static/js/131.a4ec9bac.chunk.js",
|
||||
"static/css/132.3491f75f.chunk.css": "/build/static/css/132.3491f75f.chunk.css",
|
||||
"./static/js/132.ca533c48.chunk.js": "/build/./static/js/132.ca533c48.chunk.js",
|
||||
"./static/js/133.acd80a77.chunk.js": "/build/./static/js/133.acd80a77.chunk.js",
|
||||
"./static/js/134.832850d3.chunk.js": "/build/./static/js/134.832850d3.chunk.js",
|
||||
"static/css/135.6b9ba3cb.chunk.css": "/build/static/css/135.6b9ba3cb.chunk.css",
|
||||
"./static/js/135.b489b40b.chunk.js": "/build/./static/js/135.b489b40b.chunk.js",
|
||||
"./static/js/136.f836cf60.chunk.js": "/build/./static/js/136.f836cf60.chunk.js",
|
||||
"static/css/137.f56c834f.chunk.css": "/build/static/css/137.f56c834f.chunk.css",
|
||||
"./static/js/137.ec453c76.chunk.js": "/build/./static/js/137.ec453c76.chunk.js",
|
||||
"static/css/138.77c696ba.chunk.css": "/build/static/css/138.77c696ba.chunk.css",
|
||||
"./static/js/138.65f107dc.chunk.js": "/build/./static/js/138.65f107dc.chunk.js",
|
||||
"static/css/139.77c696ba.chunk.css": "/build/static/css/139.77c696ba.chunk.css",
|
||||
"./static/js/139.7a1d0135.chunk.js": "/build/./static/js/139.7a1d0135.chunk.js",
|
||||
"./static/js/140.90aafcce.chunk.js": "/build/./static/js/140.90aafcce.chunk.js",
|
||||
"./static/js/141.4f326aba.chunk.js": "/build/./static/js/141.4f326aba.chunk.js",
|
||||
"static/css/142.41b8aabd.chunk.css": "/build/static/css/142.41b8aabd.chunk.css",
|
||||
"./static/js/142.83b7ad4a.chunk.js": "/build/./static/js/142.83b7ad4a.chunk.js",
|
||||
"static/css/143.4596ecd4.chunk.css": "/build/static/css/143.4596ecd4.chunk.css",
|
||||
"./static/js/143.e1434bae.chunk.js": "/build/./static/js/143.e1434bae.chunk.js",
|
||||
"static/css/144.0e237515.chunk.css": "/build/static/css/144.0e237515.chunk.css",
|
||||
"./static/js/144.d741baa8.chunk.js": "/build/./static/js/144.d741baa8.chunk.js",
|
||||
"static/css/145.0e10cfd1.chunk.css": "/build/static/css/145.0e10cfd1.chunk.css",
|
||||
"./static/js/145.d871a9e5.chunk.js": "/build/./static/js/145.d871a9e5.chunk.js",
|
||||
"static/css/146.b0f6abc7.chunk.css": "/build/static/css/146.b0f6abc7.chunk.css",
|
||||
"./static/js/146.05b09083.chunk.js": "/build/./static/js/146.05b09083.chunk.js",
|
||||
"static/css/147.924ff88a.chunk.css": "/build/static/css/147.924ff88a.chunk.css",
|
||||
"./static/js/147.a82c2042.chunk.js": "/build/./static/js/147.a82c2042.chunk.js",
|
||||
"static/css/148.42eb9df6.chunk.css": "/build/static/css/148.42eb9df6.chunk.css",
|
||||
"./static/js/148.02f01a12.chunk.js": "/build/./static/js/148.02f01a12.chunk.js",
|
||||
"./static/js/149.e5af9cd2.chunk.js": "/build/./static/js/149.e5af9cd2.chunk.js",
|
||||
"./static/js/150.044e4971.chunk.js": "/build/./static/js/150.044e4971.chunk.js",
|
||||
"./static/js/151.84c097d8.chunk.js": "/build/./static/js/151.84c097d8.chunk.js",
|
||||
"static/css/152.080d6958.chunk.css": "/build/static/css/152.080d6958.chunk.css",
|
||||
"./static/js/152.0bb03c62.chunk.js": "/build/./static/js/152.0bb03c62.chunk.js",
|
||||
"static/css/153.71fa167b.chunk.css": "/build/static/css/153.71fa167b.chunk.css",
|
||||
"./static/js/153.9bd9dade.chunk.js": "/build/./static/js/153.9bd9dade.chunk.js",
|
||||
"./static/js/154.96a46461.chunk.js": "/build/./static/js/154.96a46461.chunk.js",
|
||||
"./static/js/155.57d5991f.chunk.js": "/build/./static/js/155.57d5991f.chunk.js",
|
||||
"static/css/156.9c03336a.chunk.css": "/build/static/css/156.9c03336a.chunk.css",
|
||||
"./static/js/156.5eadc051.chunk.js": "/build/./static/js/156.5eadc051.chunk.js",
|
||||
"static/css/157.bdb62d78.chunk.css": "/build/static/css/157.bdb62d78.chunk.css",
|
||||
"./static/js/157.cf043aab.chunk.js": "/build/./static/js/157.cf043aab.chunk.js",
|
||||
"static/css/158.fe9e65c3.chunk.css": "/build/static/css/158.fe9e65c3.chunk.css",
|
||||
"./static/js/158.c88ecaaa.chunk.js": "/build/./static/js/158.c88ecaaa.chunk.js",
|
||||
"./static/js/159.964fbd59.chunk.js": "/build/./static/js/159.964fbd59.chunk.js",
|
||||
"./static/js/160.f48e8da4.chunk.js": "/build/./static/js/160.f48e8da4.chunk.js",
|
||||
"static/css/161.41b8aabd.chunk.css": "/build/static/css/161.41b8aabd.chunk.css",
|
||||
"./static/js/161.3c55ac9b.chunk.js": "/build/./static/js/161.3c55ac9b.chunk.js",
|
||||
"static/css/162.41b8aabd.chunk.css": "/build/static/css/162.41b8aabd.chunk.css",
|
||||
"./static/js/162.264b470b.chunk.js": "/build/./static/js/162.264b470b.chunk.js",
|
||||
"static/css/163.bc2cc2ee.chunk.css": "/build/static/css/163.bc2cc2ee.chunk.css",
|
||||
"./static/js/163.b2bc33b7.chunk.js": "/build/./static/js/163.b2bc33b7.chunk.js",
|
||||
"static/css/164.2e0e7edc.chunk.css": "/build/static/css/164.2e0e7edc.chunk.css",
|
||||
"./static/js/164.1b8b6c15.chunk.js": "/build/./static/js/164.1b8b6c15.chunk.js",
|
||||
"./static/js/165.cc354439.chunk.js": "/build/./static/js/165.cc354439.chunk.js",
|
||||
"./static/js/166.95f8b727.chunk.js": "/build/./static/js/166.95f8b727.chunk.js",
|
||||
"./static/js/167.474bef1b.chunk.js": "/build/./static/js/167.474bef1b.chunk.js",
|
||||
"./static/js/168.5016996a.chunk.js": "/build/./static/js/168.5016996a.chunk.js",
|
||||
"static/css/169.c2265b39.chunk.css": "/build/static/css/169.c2265b39.chunk.css",
|
||||
"./static/js/169.8d055a51.chunk.js": "/build/./static/js/169.8d055a51.chunk.js",
|
||||
"static/css/170.c121ca6d.chunk.css": "/build/static/css/170.c121ca6d.chunk.css",
|
||||
"./static/js/170.640fb40c.chunk.js": "/build/./static/js/170.640fb40c.chunk.js",
|
||||
"./static/js/171.9c3720c4.chunk.js": "/build/./static/js/171.9c3720c4.chunk.js",
|
||||
"./static/js/172.c6a26efb.chunk.js": "/build/./static/js/172.c6a26efb.chunk.js",
|
||||
"./static/js/173.405def89.chunk.js": "/build/./static/js/173.405def89.chunk.js",
|
||||
"static/css/174.15253a67.chunk.css": "/build/static/css/174.15253a67.chunk.css",
|
||||
"./static/js/174.99b0cdea.chunk.js": "/build/./static/js/174.99b0cdea.chunk.js",
|
||||
"static/css/175.8a2a0d50.chunk.css": "/build/static/css/175.8a2a0d50.chunk.css",
|
||||
"./static/js/175.f1dfc709.chunk.js": "/build/./static/js/175.f1dfc709.chunk.js",
|
||||
"./static/js/176.b9f0a967.chunk.js": "/build/./static/js/176.b9f0a967.chunk.js",
|
||||
"./static/js/177.044852a0.chunk.js": "/build/./static/js/177.044852a0.chunk.js",
|
||||
"static/css/178.d46d87fc.chunk.css": "/build/static/css/178.d46d87fc.chunk.css",
|
||||
"./static/js/178.f35e38a6.chunk.js": "/build/./static/js/178.f35e38a6.chunk.js",
|
||||
"static/css/179.adba6539.chunk.css": "/build/static/css/179.adba6539.chunk.css",
|
||||
"./static/js/179.d66cbc3e.chunk.js": "/build/./static/js/179.d66cbc3e.chunk.js",
|
||||
"./static/js/180.eb3855b7.chunk.js": "/build/./static/js/180.eb3855b7.chunk.js",
|
||||
"./static/js/181.34396f77.chunk.js": "/build/./static/js/181.34396f77.chunk.js",
|
||||
"static/css/182.634521e1.chunk.css": "/build/static/css/182.634521e1.chunk.css",
|
||||
"./static/js/182.d2b86b16.chunk.js": "/build/./static/js/182.d2b86b16.chunk.js",
|
||||
"static/css/183.3ce18db9.chunk.css": "/build/static/css/183.3ce18db9.chunk.css",
|
||||
"./static/js/183.44327dbf.chunk.js": "/build/./static/js/183.44327dbf.chunk.js",
|
||||
"static/css/184.58624376.chunk.css": "/build/static/css/184.58624376.chunk.css",
|
||||
"./static/js/184.1f65602e.chunk.js": "/build/./static/js/184.1f65602e.chunk.js",
|
||||
"static/css/185.de6b6b69.chunk.css": "/build/static/css/185.de6b6b69.chunk.css",
|
||||
"./static/js/185.9a945c78.chunk.js": "/build/./static/js/185.9a945c78.chunk.js",
|
||||
"./static/js/186.1e7707fd.chunk.js": "/build/./static/js/186.1e7707fd.chunk.js",
|
||||
"./static/js/187.97db53cf.chunk.js": "/build/./static/js/187.97db53cf.chunk.js",
|
||||
"./static/js/188.b7567c8f.chunk.js": "/build/./static/js/188.b7567c8f.chunk.js",
|
||||
"./static/js/189.57640a15.chunk.js": "/build/./static/js/189.57640a15.chunk.js",
|
||||
"static/css/190.c0242127.chunk.css": "/build/static/css/190.c0242127.chunk.css",
|
||||
"./static/js/190.642b3283.chunk.js": "/build/./static/js/190.642b3283.chunk.js",
|
||||
"static/css/191.873fe80e.chunk.css": "/build/static/css/191.873fe80e.chunk.css",
|
||||
"./static/js/191.c930fe6d.chunk.js": "/build/./static/js/191.c930fe6d.chunk.js",
|
||||
"static/css/192.e0db6c17.chunk.css": "/build/static/css/192.e0db6c17.chunk.css",
|
||||
"./static/js/192.134dd21e.chunk.js": "/build/./static/js/192.134dd21e.chunk.js",
|
||||
"static/css/193.f50a3cf0.chunk.css": "/build/static/css/193.f50a3cf0.chunk.css",
|
||||
"./static/js/193.69126653.chunk.js": "/build/./static/js/193.69126653.chunk.js",
|
||||
"static/css/194.9df86194.chunk.css": "/build/static/css/194.9df86194.chunk.css",
|
||||
"./static/js/194.898dd689.chunk.js": "/build/./static/js/194.898dd689.chunk.js",
|
||||
"static/css/195.6b9ba3cb.chunk.css": "/build/static/css/195.6b9ba3cb.chunk.css",
|
||||
"./static/js/195.310c8eb3.chunk.js": "/build/./static/js/195.310c8eb3.chunk.js",
|
||||
"static/css/196.f2060fe7.chunk.css": "/build/static/css/196.f2060fe7.chunk.css",
|
||||
"./static/js/196.4ddc6032.chunk.js": "/build/./static/js/196.4ddc6032.chunk.js",
|
||||
"static/css/197.88ec54a7.chunk.css": "/build/static/css/197.88ec54a7.chunk.css",
|
||||
"./static/js/197.d034cea2.chunk.js": "/build/./static/js/197.d034cea2.chunk.js",
|
||||
"./static/js/198.7a28b332.chunk.js": "/build/./static/js/198.7a28b332.chunk.js",
|
||||
"./static/js/199.bdb3d4df.chunk.js": "/build/./static/js/199.bdb3d4df.chunk.js",
|
||||
"static/css/200.b7a023bd.chunk.css": "/build/static/css/200.b7a023bd.chunk.css",
|
||||
"./static/js/200.9ad61cf8.chunk.js": "/build/./static/js/200.9ad61cf8.chunk.js",
|
||||
"static/css/201.4596ecd4.chunk.css": "/build/static/css/201.4596ecd4.chunk.css",
|
||||
"./static/js/201.9aff36ed.chunk.js": "/build/./static/js/201.9aff36ed.chunk.js",
|
||||
"./static/js/202.8a2f965f.chunk.js": "/build/./static/js/202.8a2f965f.chunk.js",
|
||||
"static/css/203.41b8aabd.chunk.css": "/build/static/css/203.41b8aabd.chunk.css",
|
||||
"./static/js/203.aa3eabfa.chunk.js": "/build/./static/js/203.aa3eabfa.chunk.js",
|
||||
"./static/js/204.92ea5190.chunk.js": "/build/./static/js/204.92ea5190.chunk.js",
|
||||
"./static/js/205.94116de6.chunk.js": "/build/./static/js/205.94116de6.chunk.js",
|
||||
"./static/js/206.7fa0c08a.chunk.js": "/build/./static/js/206.7fa0c08a.chunk.js",
|
||||
"./static/js/207.3b4e47f6.chunk.js": "/build/./static/js/207.3b4e47f6.chunk.js",
|
||||
"./static/js/208.9eefe935.chunk.js": "/build/./static/js/208.9eefe935.chunk.js",
|
||||
"./static/js/209.2d2cd769.chunk.js": "/build/./static/js/209.2d2cd769.chunk.js",
|
||||
"./static/js/210.f401c117.chunk.js": "/build/./static/js/210.f401c117.chunk.js",
|
||||
"./static/js/211.8f315a87.chunk.js": "/build/./static/js/211.8f315a87.chunk.js",
|
||||
"./static/js/212.31965617.chunk.js": "/build/./static/js/212.31965617.chunk.js",
|
||||
"./static/js/213.66fc8d7e.chunk.js": "/build/./static/js/213.66fc8d7e.chunk.js",
|
||||
"./static/js/214.e4357ec0.chunk.js": "/build/./static/js/214.e4357ec0.chunk.js",
|
||||
"./static/js/215.2d0fe979.chunk.js": "/build/./static/js/215.2d0fe979.chunk.js",
|
||||
"./static/js/216.0ade2680.chunk.js": "/build/./static/js/216.0ade2680.chunk.js",
|
||||
"./static/js/217.f4a3cb78.chunk.js": "/build/./static/js/217.f4a3cb78.chunk.js",
|
||||
"./static/js/218.4bda13ac.chunk.js": "/build/./static/js/218.4bda13ac.chunk.js",
|
||||
"./static/js/219.d42fdf24.chunk.js": "/build/./static/js/219.d42fdf24.chunk.js",
|
||||
"./static/js/220.824723aa.chunk.js": "/build/./static/js/220.824723aa.chunk.js",
|
||||
"./static/js/221.1cdc8bb9.chunk.js": "/build/./static/js/221.1cdc8bb9.chunk.js",
|
||||
"./static/js/222.e58d1756.chunk.js": "/build/./static/js/222.e58d1756.chunk.js",
|
||||
"./static/js/223.863582c5.chunk.js": "/build/./static/js/223.863582c5.chunk.js",
|
||||
"./static/js/224.5b1945f6.chunk.js": "/build/./static/js/224.5b1945f6.chunk.js",
|
||||
"./static/js/225.ed57abc6.chunk.js": "/build/./static/js/225.ed57abc6.chunk.js",
|
||||
"./static/js/226.c35c4fe7.chunk.js": "/build/./static/js/226.c35c4fe7.chunk.js",
|
||||
"./static/js/227.19c8a094.chunk.js": "/build/./static/js/227.19c8a094.chunk.js",
|
||||
"./static/js/228.65c1debf.chunk.js": "/build/./static/js/228.65c1debf.chunk.js",
|
||||
"./static/js/229.388be8ea.chunk.js": "/build/./static/js/229.388be8ea.chunk.js",
|
||||
"./static/js/230.904df1f6.chunk.js": "/build/./static/js/230.904df1f6.chunk.js",
|
||||
"./static/js/231.82f327eb.chunk.js": "/build/./static/js/231.82f327eb.chunk.js",
|
||||
"./static/js/232.13edfb75.chunk.js": "/build/./static/js/232.13edfb75.chunk.js",
|
||||
"./static/js/233.cb59f3f3.chunk.js": "/build/./static/js/233.cb59f3f3.chunk.js",
|
||||
"./static/js/234.d09c8f51.chunk.js": "/build/./static/js/234.d09c8f51.chunk.js",
|
||||
"./static/js/235.e087d241.chunk.js": "/build/./static/js/235.e087d241.chunk.js",
|
||||
"./static/js/236.2094d8c0.chunk.js": "/build/./static/js/236.2094d8c0.chunk.js",
|
||||
"./static/js/237.363401ef.chunk.js": "/build/./static/js/237.363401ef.chunk.js",
|
||||
"./static/js/238.87e14df3.chunk.js": "/build/./static/js/238.87e14df3.chunk.js",
|
||||
"./static/js/239.f2c1fc3c.chunk.js": "/build/./static/js/239.f2c1fc3c.chunk.js",
|
||||
"./static/js/240.9753e4d5.chunk.js": "/build/./static/js/240.9753e4d5.chunk.js",
|
||||
"./static/js/241.e7bd16fe.chunk.js": "/build/./static/js/241.e7bd16fe.chunk.js",
|
||||
"./static/js/242.1e5dd721.chunk.js": "/build/./static/js/242.1e5dd721.chunk.js",
|
||||
"./static/js/243.3e61fb73.chunk.js": "/build/./static/js/243.3e61fb73.chunk.js",
|
||||
"./static/js/244.d8f259f9.chunk.js": "/build/./static/js/244.d8f259f9.chunk.js",
|
||||
"./static/js/245.9fd4646d.chunk.js": "/build/./static/js/245.9fd4646d.chunk.js",
|
||||
"./static/js/246.e15c89b8.chunk.js": "/build/./static/js/246.e15c89b8.chunk.js",
|
||||
"./static/js/247.fec91160.chunk.js": "/build/./static/js/247.fec91160.chunk.js",
|
||||
"./static/js/248.eecc2e3f.chunk.js": "/build/./static/js/248.eecc2e3f.chunk.js",
|
||||
"./static/js/249.38aa7c42.chunk.js": "/build/./static/js/249.38aa7c42.chunk.js",
|
||||
"./static/js/250.4c33cb08.chunk.js": "/build/./static/js/250.4c33cb08.chunk.js",
|
||||
"./static/js/251.0a4aa5ea.chunk.js": "/build/./static/js/251.0a4aa5ea.chunk.js",
|
||||
"./static/js/252.7bd621cb.chunk.js": "/build/./static/js/252.7bd621cb.chunk.js",
|
||||
"./static/js/253.d1b514da.chunk.js": "/build/./static/js/253.d1b514da.chunk.js",
|
||||
"./static/js/254.80b9e19f.chunk.js": "/build/./static/js/254.80b9e19f.chunk.js",
|
||||
"./static/js/255.b10b3da1.chunk.js": "/build/./static/js/255.b10b3da1.chunk.js",
|
||||
"./static/js/256.5c3bf32e.chunk.js": "/build/./static/js/256.5c3bf32e.chunk.js",
|
||||
"./static/js/257.caadfa9b.chunk.js": "/build/./static/js/257.caadfa9b.chunk.js",
|
||||
"./static/js/258.b1b0e01a.chunk.js": "/build/./static/js/258.b1b0e01a.chunk.js",
|
||||
"./static/js/259.c1757545.chunk.js": "/build/./static/js/259.c1757545.chunk.js",
|
||||
"./static/js/260.f1187346.chunk.js": "/build/./static/js/260.f1187346.chunk.js",
|
||||
"./static/js/261.5ad799a0.chunk.js": "/build/./static/js/261.5ad799a0.chunk.js",
|
||||
"./static/js/262.e1e50e22.chunk.js": "/build/./static/js/262.e1e50e22.chunk.js",
|
||||
"./static/js/263.3d7f395c.chunk.js": "/build/./static/js/263.3d7f395c.chunk.js",
|
||||
"./static/js/264.0711b6c2.chunk.js": "/build/./static/js/264.0711b6c2.chunk.js",
|
||||
"./static/js/265.5d07b33a.chunk.js": "/build/./static/js/265.5d07b33a.chunk.js",
|
||||
"./static/js/266.a8502de4.chunk.js": "/build/./static/js/266.a8502de4.chunk.js",
|
||||
"./static/js/267.ffd4d545.chunk.js": "/build/./static/js/267.ffd4d545.chunk.js",
|
||||
"./static/js/268.1b8b27a0.chunk.js": "/build/./static/js/268.1b8b27a0.chunk.js",
|
||||
"./static/js/269.4db424a5.chunk.js": "/build/./static/js/269.4db424a5.chunk.js",
|
||||
"main.css": "/build/static/css/main.9aa2753f.chunk.css",
|
||||
"main.js": "/build/./static/js/main.5a3024c7.chunk.js",
|
||||
"runtime~main.js": "/build/./static/js/runtime~main.da995f14.js",
|
||||
"./static/js/10.e0a1c8da.chunk.js.LICENSE.txt": "/build/./static/js/10.e0a1c8da.chunk.js.LICENSE.txt",
|
||||
"./static/js/18.b1a95570.chunk.js.LICENSE.txt": "/build/./static/js/18.b1a95570.chunk.js.LICENSE.txt",
|
||||
"./static/js/2.557613ce.chunk.js.LICENSE.txt": "/build/./static/js/2.557613ce.chunk.js.LICENSE.txt",
|
||||
"./static/js/221.1cdc8bb9.chunk.js.LICENSE.txt": "/build/./static/js/221.1cdc8bb9.chunk.js.LICENSE.txt",
|
||||
"./static/js/23.0d819544.chunk.js.LICENSE.txt": "/build/./static/js/23.0d819544.chunk.js.LICENSE.txt",
|
||||
"./static/js/264.0711b6c2.chunk.js.LICENSE.txt": "/build/./static/js/264.0711b6c2.chunk.js.LICENSE.txt",
|
||||
"./static/js/35.70d1eae5.chunk.js.LICENSE.txt": "/build/./static/js/35.70d1eae5.chunk.js.LICENSE.txt",
|
||||
"./static/js/40.dd19e4ae.chunk.js.LICENSE.txt": "/build/./static/js/40.dd19e4ae.chunk.js.LICENSE.txt",
|
||||
"./static/js/44.f6e98158.chunk.js.LICENSE.txt": "/build/./static/js/44.f6e98158.chunk.js.LICENSE.txt",
|
||||
"./static/js/45.02283a3c.chunk.js.LICENSE.txt": "/build/./static/js/45.02283a3c.chunk.js.LICENSE.txt",
|
||||
"./static/js/46.65563171.chunk.js.LICENSE.txt": "/build/./static/js/46.65563171.chunk.js.LICENSE.txt",
|
||||
"./static/js/63.c508f1d6.chunk.js.LICENSE.txt": "/build/./static/js/63.c508f1d6.chunk.js.LICENSE.txt",
|
||||
"./static/js/7.ede75b8b.chunk.js.LICENSE.txt": "/build/./static/js/7.ede75b8b.chunk.js.LICENSE.txt",
|
||||
"./static/js/main.5a3024c7.chunk.js.LICENSE.txt": "/build/./static/js/main.5a3024c7.chunk.js.LICENSE.txt",
|
||||
"css.worker.js": "/build/css.worker.js",
|
||||
"editor.worker.js": "/build/editor.worker.js",
|
||||
"html.worker.js": "/build/html.worker.js",
|
||||
"index.html": "/build/index.html",
|
||||
"json.worker.js": "/build/json.worker.js",
|
||||
"static/media/Index.scss": "/build/static/media/typebg.b2b0ea32.png",
|
||||
"static/media/2-2-1.png": "/build/static/media/2-2-1.afd0f2f5.png",
|
||||
"static/media/2-2-2.png": "/build/static/media/2-2-2.26bc3301.png",
|
||||
"static/media/2-2-3.png": "/build/static/media/2-2-3.6d6ce99c.png",
|
||||
"static/media/2-2-head.png": "/build/static/media/2-2-head.5e69dbb2.png",
|
||||
"static/media/2-3-1.png": "/build/static/media/2-3-1.bcb33d47.png",
|
||||
"static/media/2-3-2.png": "/build/static/media/2-3-2.57ef08ae.png",
|
||||
"static/media/2-3-3.png": "/build/static/media/2-3-3.52733627.png",
|
||||
"static/media/2-3-4.png": "/build/static/media/2-3-4.339b2f1c.png",
|
||||
"static/media/2-6-1.png": "/build/static/media/2-6-1.302b729e.png",
|
||||
"static/media/2-6-2.png": "/build/static/media/2-6-2.b262b91e.png",
|
||||
"static/media/3-1.png": "/build/static/media/3-1.9fdda521.png",
|
||||
"static/media/3-2.png": "/build/static/media/3-2.47050941.png",
|
||||
"static/media/3-3.png": "/build/static/media/3-3.c767aae7.png",
|
||||
"static/media/3-4.png": "/build/static/media/3-4.92820cbc.png",
|
||||
"static/media/34@2x.png": "/build/static/media/34@2x.ed8e5910.png",
|
||||
"static/media/35@2x.png": "/build/static/media/35@2x.33462edc.png",
|
||||
"static/media/36@2x.png": "/build/static/media/36@2x.8f54f5ba.png",
|
||||
"static/media/37@2x.png": "/build/static/media/37@2x.97a40a2a.png",
|
||||
"static/media/38@2x.png": "/build/static/media/38@2x.f072fe68.png",
|
||||
"static/media/39@2x.png": "/build/static/media/39@2x.ee1af05a.png",
|
||||
"static/media/4-1.png": "/build/static/media/4-1.79fa159d.png",
|
||||
"static/media/4-2.png": "/build/static/media/4-2.9c066e75.png",
|
||||
"static/media/4-3.png": "/build/static/media/4-3.a1487a5b.png",
|
||||
"static/media/4-4.png": "/build/static/media/4-4.5eb40734.png",
|
||||
"static/media/40@2x.png": "/build/static/media/40@2x.f10a55e2.png",
|
||||
"static/media/42@2x.png": "/build/static/media/42@2x.25d6b5fd.png",
|
||||
"static/media/44@2x.png": "/build/static/media/44@2x.1374baf9.png",
|
||||
"static/media/46@2x.png": "/build/static/media/46@2x.e272d43e.png",
|
||||
"static/media/48@2x.png": "/build/static/media/48@2x.3bde4de9.png",
|
||||
"static/media/49.png": "/build/static/media/49.b03e6efe.png",
|
||||
"static/media/50@2x.png": "/build/static/media/50@2x.69b76634.png",
|
||||
"static/media/52@2x.png": "/build/static/media/52@2x.41805cbb.png",
|
||||
"static/media/55@2x.png": "/build/static/media/55@2x.83486b73.png",
|
||||
"static/media/57@2x.png": "/build/static/media/57@2x.8dc6b0b8.png",
|
||||
"static/media/59@2x.png": "/build/static/media/59@2x.b0884ef0.png",
|
||||
"static/media/61@2x.png": "/build/static/media/61@2x.99d3cc3e.png",
|
||||
"static/media/63@2x.png": "/build/static/media/63@2x.49f389b9.png",
|
||||
"static/media/65@2x.png": "/build/static/media/65@2x.ef33e2f9.png",
|
||||
"static/media/67@2x.png": "/build/static/media/67@2x.4a4f4b6c.png",
|
||||
"static/media/69@2x.png": "/build/static/media/69@2x.379c6a82.png",
|
||||
"static/media/70.png": "/build/static/media/70.df160b27.png",
|
||||
"static/media/BJHKHT.png": "/build/static/media/BJHKHT.f065403a.png",
|
||||
"static/media/CEC.png": "/build/static/media/CEC.3b748059.png",
|
||||
"static/media/GFKJ.png": "/build/static/media/GFKJ.eb30c414.png",
|
||||
"static/media/HSKY.png": "/build/static/media/HSKY.2e76ba44.png",
|
||||
"static/media/ISCAS.png": "/build/static/media/ISCAS.851fcfda.png",
|
||||
"static/media/KYRJLM.png": "/build/static/media/KYRJLM.2d659e5c.png",
|
||||
"static/media/katex.min.css": "/build/static/media/KaTeX_Typewriter-Regular.d3c8e68f.woff",
|
||||
"static/media/LC.png": "/build/static/media/LC.f247fdb8.png",
|
||||
"static/media/LSLM.png": "/build/static/media/LSLM.99387946.png",
|
||||
"static/media/ML.png": "/build/static/media/ML.08d278e2.png",
|
||||
"static/media/NJDX.png": "/build/static/media/NJDX.bb34b326.png",
|
||||
"static/media/QH.png": "/build/static/media/QH.b57a0131.png",
|
||||
"static/media/SHJT.png": "/build/static/media/SHJT.426bf0c7.png",
|
||||
"static/media/TX.png": "/build/static/media/TX.b703476c.png",
|
||||
"static/media/WXYJY.png": "/build/static/media/WXYJY.21e40191.png",
|
||||
"static/media/XH.png": "/build/static/media/XH.a0a88f17.png",
|
||||
"static/media/XJY.png": "/build/static/media/XJY.b4c57bf1.png",
|
||||
"static/media/YKD.png": "/build/static/media/YKD.4f7e2766.png",
|
||||
"static/media/ZC.png": "/build/static/media/ZC.ad056aa5.png",
|
||||
"static/media/achievements.png": "/build/static/media/achievements.f20b7e39.png",
|
||||
"static/media/index.scss": "/build/static/media/visionBackActive.14814f28.png",
|
||||
"static/media/back1.png": "/build/static/media/back1.1f20bd0a.png",
|
||||
"static/media/back2.png": "/build/static/media/back2.0041bb9e.png",
|
||||
"static/media/back3.png": "/build/static/media/back3.16134f64.png",
|
||||
"static/media/ball.png": "/build/static/media/ball.24214b6e.png",
|
||||
"static/media/banner-interim.png": "/build/static/media/banner-interim.c50ff667.png",
|
||||
"static/media/banner-interim1.png": "/build/static/media/banner-interim1.bc583d0a.png",
|
||||
"static/media/AboutUs.scss": "/build/static/media/teambanner.fad350dd.png",
|
||||
"static/media/banner.png": "/build/static/media/banner.f7da2db1.png",
|
||||
"static/media/banner2024.jpg": "/build/static/media/banner2024.65b24d59.jpg",
|
||||
"static/media/banner_list.jpg": "/build/static/media/banner_list.e02c5e16.jpg",
|
||||
"static/media/beijing.png": "/build/static/media/beijing.bfcd5b0e.png",
|
||||
"static/media/LoginRegisterPage.scss": "/build/static/media/rightBg.55f14f0c.png",
|
||||
"static/media/bgPng.png": "/build/static/media/bgPng.ed010245.png",
|
||||
"static/media/ccf_logo.png": "/build/static/media/ccf_logo.a54fdc70.png",
|
||||
"static/media/ccf_logo1.png": "/build/static/media/ccf_logo1.be10ead7.png",
|
||||
"static/media/codeafter.png": "/build/static/media/codeafter.c3088c74.png",
|
||||
"static/media/color1.png": "/build/static/media/color1.5ec57881.png",
|
||||
"static/media/color2.png": "/build/static/media/color2.a71ab734.png",
|
||||
"static/media/color3.png": "/build/static/media/color3.76d404ab.png",
|
||||
"static/media/color4.png": "/build/static/media/color4.e0954f96.png",
|
||||
"static/media/indexZone1.scss": "/build/static/media/vipTitleBg.64d456e6.png",
|
||||
"static/media/computer.png": "/build/static/media/computer.4fe86b12.png",
|
||||
"static/media/devops.png": "/build/static/media/devops.39983f5b.png",
|
||||
"static/media/earth.png": "/build/static/media/earth.050b1435.png",
|
||||
"static/media/educoder.png": "/build/static/media/educoder.c918f385.png",
|
||||
"static/media/emp.png": "/build/static/media/emp.35f6c709.png",
|
||||
"static/media/freeBanner.png": "/build/static/media/freeBanner.292dbf56.png",
|
||||
"static/media/fun1.png": "/build/static/media/fun1.c99ffa49.png",
|
||||
"static/media/fun2.png": "/build/static/media/fun2.12f22bca.png",
|
||||
"static/media/fun3.png": "/build/static/media/fun3.75c280e6.png",
|
||||
"static/media/fun4.png": "/build/static/media/fun4.f499794e.png",
|
||||
"static/media/fun5.png": "/build/static/media/fun5.96b44942.png",
|
||||
"static/media/gitee1.svg": "/build/static/media/gitee1.279a922b.svg",
|
||||
"static/media/github2.svg": "/build/static/media/github2.95ea181b.svg",
|
||||
"static/media/gitlink-gz.png": "/build/static/media/gitlink-gz.d351910b.png",
|
||||
"static/media/gitlink-qq.png": "/build/static/media/gitlink-qq.90d5ac1b.png",
|
||||
"static/media/gitlink1.png": "/build/static/media/gitlink1.4bf0ed96.png",
|
||||
"static/media/gitlink2.png": "/build/static/media/gitlink2.0ec0ec22.png",
|
||||
"static/media/green_nodata.png": "/build/static/media/green_nodata.be7b538b.png",
|
||||
"static/media/head.png": "/build/static/media/head.52aa3fc8.png",
|
||||
"static/media/help.png": "/build/static/media/help.0bfb2587.png",
|
||||
"static/media/help_bg.png": "/build/static/media/help_bg.d2bb4c18.png",
|
||||
"static/media/huake.png": "/build/static/media/huake.63b6a34d.png",
|
||||
"static/media/huawei.png": "/build/static/media/huawei.73ec7c22.png",
|
||||
"static/media/icon.svg": "/build/static/media/icon.1322725f.svg",
|
||||
"static/media/ideLogo.svg": "/build/static/media/ideLogo.0dca8d76.svg",
|
||||
"static/media/Teaching.scss": "/build/static/media/image22.6ff2b063.svg",
|
||||
"static/media/img1.png": "/build/static/media/img1.fc155528.png",
|
||||
"static/media/img10.png": "/build/static/media/img10.64149a3d.png",
|
||||
"static/media/img15.png": "/build/static/media/img15.87a3556c.png",
|
||||
"static/media/img16.png": "/build/static/media/img16.32badab9.png",
|
||||
"static/media/img17.png": "/build/static/media/img17.c25d5edc.png",
|
||||
"static/media/img18.png": "/build/static/media/img18.4963efc1.png",
|
||||
"static/media/img2.png": "/build/static/media/img2.ae303051.png",
|
||||
"static/media/img3.png": "/build/static/media/img3.cee3ac5b.png",
|
||||
"static/media/img4.png": "/build/static/media/img4.53c937cb.png",
|
||||
"static/media/img5.png": "/build/static/media/img5.ca3a2287.png",
|
||||
"static/media/img6.png": "/build/static/media/img6.8f81bf78.png",
|
||||
"static/media/img7.png": "/build/static/media/img7.e4a68e6e.png",
|
||||
"static/media/img8.png": "/build/static/media/img8.10500e00.png",
|
||||
"static/media/img9.png": "/build/static/media/img9.d25372ba.png",
|
||||
"static/media/introduce.png": "/build/static/media/introduce.30b50cda.png",
|
||||
"static/media/jijinhui.png": "/build/static/media/jijinhui.041fb524.png",
|
||||
"static/media/lightspot1.png": "/build/static/media/lightspot1.9214f0ae.png",
|
||||
"static/media/lightspot2.png": "/build/static/media/lightspot2.b7053786.png",
|
||||
"static/media/lightspot3.png": "/build/static/media/lightspot3.2f8af8da.png",
|
||||
"static/media/lightspot4.png": "/build/static/media/lightspot4.93769763.png",
|
||||
"static/media/logo.png": "/build/static/media/logo.62af9fee.png",
|
||||
"static/media/logo.svg": "/build/static/media/logo.f0d4927b.svg",
|
||||
"static/media/logo1.png": "/build/static/media/logo1.ec3c2e67.png",
|
||||
"static/media/logo2.png": "/build/static/media/logo2.b04c07f2.png",
|
||||
"static/media/mainbanner.png": "/build/static/media/mainbanner.659efd27.png",
|
||||
"static/media/mulan.png": "/build/static/media/mulan.690d2289.png",
|
||||
"static/media/newsBg.png": "/build/static/media/newsBg.66918645.png",
|
||||
"static/media/nodata.png": "/build/static/media/nodata.e34b5912.png",
|
||||
"static/media/TPMIndex.css": "/build/static/media/nps2.d5d0b666.png",
|
||||
"static/media/phone.svg": "/build/static/media/phone.14961064.svg",
|
||||
"static/media/qqChat.png": "/build/static/media/qqChat.9e56cc22.png",
|
||||
"static/media/resultBanner2.png": "/build/static/media/resultBanner2.c3095c5d.png",
|
||||
"static/media/resultBanner3.png": "/build/static/media/resultBanner3.e11193de.png",
|
||||
"static/media/resultBanner4.png": "/build/static/media/resultBanner4.6eda6ee5.png",
|
||||
"static/media/slick-theme.css": "/build/static/media/slick.c94f7671.ttf",
|
||||
"static/media/sponsor11.png": "/build/static/media/sponsor11.5e9da48d.png",
|
||||
"static/media/sponsor21.png": "/build/static/media/sponsor21.8a655acc.png",
|
||||
"static/media/sponsor22.png": "/build/static/media/sponsor22.96e2b643.png",
|
||||
"static/media/sponsor31.png": "/build/static/media/sponsor31.0fd95bcb.png",
|
||||
"static/media/sponsor33.png": "/build/static/media/sponsor33.27be3b2d.png",
|
||||
"static/media/sponsor42.png": "/build/static/media/sponsor42.cac8770a.png",
|
||||
"static/media/sponsor43.png": "/build/static/media/sponsor43.9e4a3afb.png",
|
||||
"static/media/studentProject.png": "/build/static/media/studentProject.f5bd2481.png",
|
||||
"static/media/studentProject2.png": "/build/static/media/studentProject2.78fd5476.png",
|
||||
"static/media/subtitle.png": "/build/static/media/subtitle.5019e086.png",
|
||||
"static/media/teacher1.png": "/build/static/media/teacher1.ee492a9b.png",
|
||||
"static/media/teacher10.png": "/build/static/media/teacher10.9298db29.png",
|
||||
"static/media/teacher11.png": "/build/static/media/teacher11.8a0d8669.png",
|
||||
"static/media/teacher12.png": "/build/static/media/teacher12.47e02224.png",
|
||||
"static/media/teacher13.png": "/build/static/media/teacher13.f7886e36.png",
|
||||
"static/media/teacher14.png": "/build/static/media/teacher14.83b48396.png",
|
||||
"static/media/teacher15.png": "/build/static/media/teacher15.5d777604.png",
|
||||
"static/media/teacher2.png": "/build/static/media/teacher2.b2b9919d.png",
|
||||
"static/media/teacher3.png": "/build/static/media/teacher3.20cb800b.png",
|
||||
"static/media/teacher4.png": "/build/static/media/teacher4.c15a0bda.png",
|
||||
"static/media/teacher5.png": "/build/static/media/teacher5.9397d078.png",
|
||||
"static/media/teacher6.png": "/build/static/media/teacher6.06b6f465.png",
|
||||
"static/media/teacher7.png": "/build/static/media/teacher7.4102dcc1.png",
|
||||
"static/media/teacher8.png": "/build/static/media/teacher8.5d3f117e.png",
|
||||
"static/media/teacher9.png": "/build/static/media/teacher9.69b0adae.png",
|
||||
"static/media/title.png": "/build/static/media/title.132e93bf.png",
|
||||
"static/media/vision-fw.png": "/build/static/media/vision-fw.feb9fd4c.png",
|
||||
"static/media/vision-jz.png": "/build/static/media/vision-jz.a991d471.png",
|
||||
"static/media/vision-yj.png": "/build/static/media/vision-yj.8ca7b113.png",
|
||||
"static/media/vision-zy.png": "/build/static/media/vision-zy.e4ac356e.png",
|
||||
"static/media/vision0.png": "/build/static/media/vision0.c7dbea1d.png",
|
||||
"static/media/vision1.png": "/build/static/media/vision1.072e7be4.png",
|
||||
"static/media/vision2.png": "/build/static/media/vision2.024daa92.png",
|
||||
"static/media/vision3.png": "/build/static/media/vision3.fee43e80.png",
|
||||
"static/media/xigongye.png": "/build/static/media/xigongye.d51231d3.png",
|
||||
"static/media/xiuos.png": "/build/static/media/xiuos.67682257.png",
|
||||
"static/media/xjy.png": "/build/static/media/xjy.6e62f4d6.png",
|
||||
"static/media/浙江大学.png": "/build/static/media/浙江大学.3c545e69.png",
|
||||
"ts.worker.js": "/build/ts.worker.js",
|
||||
"ts.worker.js.LICENSE.txt": "/build/ts.worker.js.LICENSE.txt"
|
||||
}
|
539
css/demo.css
|
@ -1,539 +0,0 @@
|
|||
/* Logo 字体 */
|
||||
@font-face {
|
||||
font-family: "iconfont logo";
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: "iconfont logo";
|
||||
font-size: 160px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* tabs */
|
||||
.nav-tabs {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-more {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#tabs {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid transparent;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: -1px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
|
||||
#tabs .active {
|
||||
border-bottom-color: #f00;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.tab-container .content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 页面布局 */
|
||||
.main {
|
||||
padding: 30px 100px;
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main .logo {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1;
|
||||
height: 110px;
|
||||
margin-top: -50px;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
font-size: 160px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.helps {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.helps pre {
|
||||
padding: 20px;
|
||||
margin: 10px 0;
|
||||
border: solid 1px #e7e1cd;
|
||||
background-color: #fffdef;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.icon_lists {
|
||||
width: 100% !important;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.icon_lists li {
|
||||
width: 100px;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
list-style: none !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon_lists li .code-name {
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.icon_lists .icon {
|
||||
display: block;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
font-size: 42px;
|
||||
margin: 10px auto;
|
||||
color: #333;
|
||||
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
-moz-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
transition: font-size 0.25s linear, width 0.25s linear;
|
||||
}
|
||||
|
||||
.icon_lists .icon:hover {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.icon_lists .svg-icon {
|
||||
/* 通过设置 font-size 来改变图标大小 */
|
||||
width: 1em;
|
||||
/* 图标和文字相邻时,垂直对齐 */
|
||||
vertical-align: -0.15em;
|
||||
/* 通过设置 color 来改变 SVG 的颜色/fill */
|
||||
fill: currentColor;
|
||||
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
|
||||
normalize.css 中也包含这行 */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.icon_lists li .name,
|
||||
.icon_lists li .code-name {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* markdown 样式 */
|
||||
.markdown {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
color: #404040;
|
||||
font-weight: 500;
|
||||
line-height: 40px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
color: #404040;
|
||||
margin: 1.6em 0 0.6em 0;
|
||||
font-weight: 500;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
background: #e9e9e9;
|
||||
margin: 16px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown>p,
|
||||
.markdown>blockquote,
|
||||
.markdown>.highlight,
|
||||
.markdown>ol,
|
||||
.markdown>ul {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.markdown ul>li {
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
.markdown>ul li,
|
||||
.markdown blockquote ul>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown>ul li p,
|
||||
.markdown>ol li p {
|
||||
margin: 0.6em 0;
|
||||
}
|
||||
|
||||
.markdown ol>li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.markdown>ol li,
|
||||
.markdown blockquote ol>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
margin: 0 3px;
|
||||
padding: 0 5px;
|
||||
background: #eee;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown strong,
|
||||
.markdown b {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0px;
|
||||
empty-cells: show;
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 95%;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table th,
|
||||
.markdown>table td {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 8px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
border-left: 4px solid #e9e9e9;
|
||||
padding-left: 0.8em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown .anchor {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.markdown .waiting {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.markdown h1:hover .anchor,
|
||||
.markdown h2:hover .anchor,
|
||||
.markdown h3:hover .anchor,
|
||||
.markdown h4:hover .anchor,
|
||||
.markdown h5:hover .anchor,
|
||||
.markdown h6:hover .anchor {
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown>br,
|
||||
.markdown>p>br {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
background: white;
|
||||
padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 代码高亮 */
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection,
|
||||
pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection,
|
||||
code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection,
|
||||
pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection,
|
||||
code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre)>code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre)>code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
7877
css/edu-all.css
3511
css/edu-common.css
4215
css/edu-main.css
2411
css/edu-public.css
6675
css/edu-purge.css
|
@ -0,0 +1,8 @@
|
|||
@font-face {
|
||||
font-family: Alimama ShuHeiTi;
|
||||
src: url(../font/AlimamaShuHeiTi-Bold.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: YouSheBiaoTiHei;
|
||||
src: url(../font/YouSheBiaoTiHei-2.ttf);
|
||||
}
|
3551
css/iconfont.css
6197
css/iconfont.json
BIN
css/iconfont.ttf
|
@ -0,0 +1,46 @@
|
|||
@import url(./reset.css);
|
||||
@import url(./font.css);
|
||||
|
||||
.task-hide {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.task-hide-2 {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
|
||||
.task-hide-6 {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 12;
|
||||
}
|
||||
.ant-spin-spinning {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.markdown-body {
|
||||
box-sizing: border-box;
|
||||
min-width: 200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.markdown-body {
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
width: 276px;
|
||||
height: 276px;
|
||||
display: block;
|
||||
margin: auto;
|
||||
}
|
111
css/merge.css
|
@ -1,111 +0,0 @@
|
|||
|
||||
.CodeMirror-merge {
|
||||
position: relative;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.CodeMirror-merge, .CodeMirror-merge .CodeMirror {
|
||||
min-height:50px;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 48%; }
|
||||
.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 4%; }
|
||||
.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }
|
||||
.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }
|
||||
|
||||
.CodeMirror-merge-pane {
|
||||
display: inline-block;
|
||||
white-space: normal;
|
||||
vertical-align: top;
|
||||
}
|
||||
.CodeMirror-merge-pane-rightmost {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-gap {
|
||||
z-index: 2;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background: #515151;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-scrolllock-wrap {
|
||||
position: absolute;
|
||||
bottom: 0; left: 50%;
|
||||
}
|
||||
.CodeMirror-merge-scrolllock {
|
||||
position: relative;
|
||||
left: -50%;
|
||||
cursor: pointer;
|
||||
color: #d8d8d8;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
right: 0; bottom: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copy {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
color: #ce374b;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copy-reverse {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
color: #44c;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }
|
||||
.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }
|
||||
|
||||
.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
|
||||
background-position: bottom left;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
|
||||
background-position: bottom left;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-r-chunk { background: #9a6868; }
|
||||
.CodeMirror-merge-r-chunk-start { /*border-top: 1px solid #ee8; */}
|
||||
.CodeMirror-merge-r-chunk-end {/* border-bottom: 1px solid #ee8; */}
|
||||
.CodeMirror-merge-r-connect { fill:#9a6868;}
|
||||
|
||||
.CodeMirror-merge-l-chunk { background: #eef; }
|
||||
.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }
|
||||
.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }
|
||||
.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }
|
||||
|
||||
.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }
|
||||
.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }
|
||||
.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }
|
||||
|
||||
.CodeMirror-merge-collapsed-widget:before {
|
||||
content: "(...)";
|
||||
}
|
||||
.CodeMirror-merge-collapsed-widget {
|
||||
cursor: pointer;
|
||||
color: #88b;
|
||||
background: #eef;
|
||||
border: 1px solid #ddf;
|
||||
font-size: 90%;
|
||||
padding: 0 3px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }
|
|
@ -0,0 +1,64 @@
|
|||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
text-decoration: none;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
a {
|
||||
color: unset;
|
||||
}
|
||||
|
||||
|
||||
/*清除浮动*/
|
||||
.clearfix:before,
|
||||
.clearfix:after{
|
||||
content:"";
|
||||
display:block;
|
||||
visibility:hidden;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
/*容器*/
|
||||
.container {
|
||||
margin: 10px auto 0px;
|
||||
width: 95%;
|
||||
}
|
BIN
favicon-.ico
Before Width: | Height: | Size: 27 KiB |
BIN
favicon.ico
Before Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 434 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 463 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 157 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 106 KiB |
After Width: | Height: | Size: 236 KiB |
After Width: | Height: | Size: 1.6 MiB |
After Width: | Height: | Size: 412 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 11 MiB |
After Width: | Height: | Size: 1.8 MiB |
After Width: | Height: | Size: 319 KiB |
After Width: | Height: | Size: 147 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 344 B |
After Width: | Height: | Size: 895 B |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 139 KiB |
After Width: | Height: | Size: 365 KiB |
After Width: | Height: | Size: 189 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 398 B |
After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 154 KiB |
12
index.html
|
@ -1 +1,11 @@
|
|||
<!doctype html><html lang="zh-hans-CN" class="notranslate translated-ltr" translate="no"><head><title>GitLink | 新一代开源创新服务平台</title><meta charset="utf-8"><meta name="Keywords" content="GitLink, git, 开源, 代码托管, 项目管理, 版本控制, 代码分享, 项目协作, 协同开发平台"><meta name="description" content="GitLink 是一个新一代的开源创新服务平台,提供分布式协作开发、流水线运维、代码分析等功能,基于 Git 打造分布式代码托管环境。"><meta property="og:title" content="GitLink | 确实开源"/><meta property="og:type" content="website"/><meta property="og:url" content="https://gitlink.org.cn/"/><meta property="og:image" content="https://www.gitlink.org.cn/images/logo.png"/><meta property="og:image:alt" content="GitLink | 确实开源"/><meta property="og:site_name" content="GitLink"/><meta property="og:description" content="GitLink 是一个新一代的开源创新服务平台,提供分布式协作开发、流水线运维、代码分析等功能,基于 Git 打造分布式代码托管环境。"/><meta name="hostname" content="gitlink.org.cn"><meta name="keyboard-shortcuts-preference" content="all"><meta name="expected-hostname" content="gitlink.org.cn"><meta name="go-import" content="gitlink.org.cn git https://gitlink.org.cn"><meta name="octolytics-dimension-user_login" content="GitLink"><meta name="octolytics-dimension-repository_nwo" content="GitLink"><meta name="octolytics-dimension-repository_network_root_nwo" content="GitLink"><meta name="theme-color" content="#000000"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="referrer" content="always"><link rel="canonical" href="https://gitlink.org.cn" data-turbo-transient=""><link rel="fluid-icon" href="https://www.gitlink.org.cn/images/logo.png" title="GitLink"><link rel="manifest" href="/build//manifest.json"><link rel="stylesheet" href="/build/css/alex/alex.all.global.min.css"><link rel="stylesheet" href="/build/css/iconfont.css"><link rel="stylesheet" href="/build/css/editormd.min.css"><link rel="stylesheet" href="/build/css/gitlink.min.css"><link href="/build/static/css/main.9aa2753f.chunk.css" rel="stylesheet"></head><body><div id="md_div" style="display:none"></div><div id="root" class="page -layout-v -fit widthunit"></div><div id="picture_display" style="display:none"></div><script src="https://gw.alipayobjects.com/os/lib/react/16.14.0/umd/react.production.min.js"></script><script src="https://gw.alipayobjects.com/os/lib/react-dom/16.14.0/umd/react-dom.production.min.js"></script><script src="/build/js/jquery-1.8.3.min.js"></script><script src="/build/js/js_min_all.js"></script><script src="/build/js/codemirror/codemirror.js"></script><script src="/build/js/editormd/editormd.min.js"></script><script src="/build/js/codemirror/merge/merge.js"></script><script src="/build/js/alex/moment.js"></script><script src="https://gw.alipayobjects.com/os/lib/alipay/alex/2.0.19/bundle/alex.all.global.min.js"></script><script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script><meta name="viewport" content=""><script src="/build/./static/js/runtime~main.da995f14.js"></script><script src="/build/./static/js/main.5a3024c7.chunk.js"></script><script>var _hmt=_hmt||[];!function(){var t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?7e2def1fe918f15f9f1c5c061f69b256";var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(t,e)}(),window.onload=function(){$(".newContainer").delegate("a.anchors","click",(function(){let t=$(this).offset().top-180;return $("html,body").animate({scrollTop:t},10),window.location.hash=$(this).attr("name"),!1}))}</script></body></html>
|
||||
<!DOCTYPE html><html><head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<meta name="viewport" content="">
|
||||
<link rel="shortcut icon" href="/favicon.png">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script src="/umi.47bca09b.js"></script>
|
||||
|
||||
</body></html>
|
113
index.test.html
|
@ -1,113 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="theme-color" content="#000000">
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is added to the
|
||||
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||
<!-- <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">-->
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<!-- <title>Educoder</title>-->
|
||||
<!--react-ssr-head-->
|
||||
<script type="text/javascript">
|
||||
window.__isR = true;
|
||||
</script>
|
||||
|
||||
|
||||
<!-- <link rel="stylesheet" type="text/css" href="/css/edu-common.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/edu-public.css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/taskstyle.css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/font-awesome.css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/editormd.min.css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/merge.css"> -->
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/css_min_all.css">
|
||||
|
||||
<link href="/stylesheets/educoder/edu-all.css" rel="stylesheet" type="text/css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_653600_qa9lwwv74z.css">
|
||||
|
||||
|
||||
<!-- <link rel="stylesheet" type="text/css" href="https://www.educoder.net/stylesheets/css/font-awesome.css?1510652321"> -->
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
You need to enable JavaScript to run this app.
|
||||
</noscript>
|
||||
<!--用于markdown转html -->
|
||||
<div id="md_div" style="display: none;"></div>
|
||||
<div id="root" class="page -layout-v -fit">
|
||||
</div>
|
||||
<div id="picture_display" style="display: none;"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
|
||||
<!-- js css合并 文件优先级的问题 -->
|
||||
|
||||
<!---->
|
||||
<script type="text/javascript" src="/js/jquery-1.8.3.min.js"></script>
|
||||
|
||||
|
||||
<script type="text/javascript" src="/js/editormd/lib/underscore.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/js/editormd/lib/marked.min.js"></script>
|
||||
<script type="text/javascript" src="/js/editormd/lib/prettify.min.js"></script>
|
||||
<script type="text/javascript" src="/js/editormd/lib/raphael.min.js"></script>
|
||||
<script type="text/javascript" src="/js/editormd/sequence-diagram.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/js/editormd/flowchart.min.js"></script>
|
||||
<script type="text/javascript" src="/js/editormd/jquery.flowchart.min.js"></script>
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="/js/editormd/editormd.min.js"></script>
|
||||
|
||||
<!-- codemirror addon -->
|
||||
<script type="text/javascript" src="/js/codemirror/codemirror.js"></script>
|
||||
|
||||
<!--hint-->
|
||||
<script type="text/javascript" src="/js/codemirror/lib/fuzzysort.js"></script>
|
||||
<script type="text/javascript" src="/js/codemirror/addon/hint/show-hint.js"></script>
|
||||
<!-- <script type="text/javascript" src="/js/codemirror/addon/hint/javascript-hint.js"></script> -->
|
||||
<script type="text/javascript" src="/js/codemirror/addon/hint/anyword-hint.js"></script>
|
||||
<script type="text/javascript" src="/js/codemirror/mode/javascript.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/js/diff_match_patch.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/js/merge.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/js/edu_tpi.js"></script>
|
||||
<script type="text/javascript" src="http://localhost:3000/javascripts/application.js"></script>
|
||||
|
||||
<script type="text/javascript" src="http://localhost:3000/assets/kindeditor/kindeditor.js"></script>
|
||||
|
||||
<!-- // <script type="text/javascript" src="http://localhost:3000/javascripts/create_kindeditor.js"></script> -->
|
||||
<script type="text/javascript" src="/js/create_kindeditor.js"></script>
|
||||
<script type="text/javascript" src="http://localhost:3000/javascripts/educoder/edu_application.js"></script>
|
||||
</body>
|
||||
</html>
|
5685
js/alex/moment.js
19833
js/applications.js
|
@ -1,70 +0,0 @@
|
|||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
var WRAP_CLASS = "CodeMirror-activeline";
|
||||
var BACK_CLASS = "CodeMirror-activeline-background";
|
||||
var GUTT_CLASS = "CodeMirror-activeline-gutter";
|
||||
|
||||
CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
|
||||
var prev = old == CodeMirror.Init ? false : old;
|
||||
if (val == prev) return
|
||||
if (prev) {
|
||||
cm.off("beforeSelectionChange", selectionChange);
|
||||
clearActiveLines(cm);
|
||||
delete cm.state.activeLines;
|
||||
}
|
||||
if (val) {
|
||||
cm.state.activeLines = [];
|
||||
updateActiveLines(cm, cm.listSelections());
|
||||
cm.on("beforeSelectionChange", selectionChange);
|
||||
}
|
||||
});
|
||||
|
||||
function clearActiveLines(cm) {
|
||||
for (var i = 0; i < cm.state.activeLines.length; i++) {
|
||||
cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
|
||||
cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
|
||||
cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
|
||||
}
|
||||
}
|
||||
|
||||
function sameArray(a, b) {
|
||||
if (a.length != b.length) return false;
|
||||
for (var i = 0; i < a.length; i++)
|
||||
if (a[i] != b[i]) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function updateActiveLines(cm, ranges) {
|
||||
var active = [];
|
||||
for (var i = 0; i < ranges.length; i++) {
|
||||
var range = ranges[i];
|
||||
var option = cm.getOption("styleActiveLine");
|
||||
if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())
|
||||
continue
|
||||
var line = cm.getLineHandleVisualStart(range.head.line);
|
||||
if (active[active.length - 1] != line) active.push(line);
|
||||
}
|
||||
if (sameArray(cm.state.activeLines, active)) return;
|
||||
cm.operation(function() {
|
||||
clearActiveLines(cm);
|
||||
for (var i = 0; i < active.length; i++) {
|
||||
cm.addLineClass(active[i], "wrap", WRAP_CLASS);
|
||||
cm.addLineClass(active[i], "background", BACK_CLASS);
|
||||
cm.addLineClass(active[i], "gutter", GUTT_CLASS);
|
||||
}
|
||||
cm.state.activeLines = active;
|
||||
});
|
||||
}
|
||||
|
||||
function selectionChange(cm, sel) {
|
||||
updateActiveLines(cm, sel.ranges);
|
||||
}
|
||||
});
|
|
@ -1,43 +0,0 @@
|
|||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
// var WORD = /[\w$]+/
|
||||
var WORD = /[A-z]+/
|
||||
, RANGE = 500;
|
||||
|
||||
CodeMirror.registerHelper("hint", "anyword", function(editor, options) {
|
||||
var word = options && options.word || WORD;
|
||||
var range = options && options.range || RANGE;
|
||||
var cur = editor.getCursor(), curLine = editor.getLine(cur.line);
|
||||
var end = cur.ch, start = end;
|
||||
while (start && word.test(curLine.charAt(start - 1))) --start;
|
||||
var curWord = start != end && curLine.slice(start, end);
|
||||
|
||||
var list = options && options.list || [], seen = {};
|
||||
var re = new RegExp(word.source, "g");
|
||||
for (var dir = -1; dir <= 1; dir += 2) {
|
||||
var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;
|
||||
for (; line != endLine; line += dir) {
|
||||
var text = editor.getLine(line), m;
|
||||
while (m = re.exec(text)) {
|
||||
if (line == cur.line && m[0] === curWord) continue;
|
||||
if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) {
|
||||
seen[m[0]] = true;
|
||||
list.push(m[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};
|
||||
});
|
||||
});
|
|
@ -1,188 +0,0 @@
|
|||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
var Pos = CodeMirror.Pos;
|
||||
|
||||
function forEach(arr, f) {
|
||||
for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
|
||||
}
|
||||
|
||||
function arrayContains(arr, item) {
|
||||
if (!Array.prototype.indexOf) {
|
||||
var i = arr.length;
|
||||
while (i--) {
|
||||
if (arr[i] === item) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return arr.indexOf(item) != -1;
|
||||
}
|
||||
|
||||
function scriptHint(editor, keywords, getToken, options) {
|
||||
// Find the token at the cursor
|
||||
var cur = editor.getCursor(), token = getToken(editor, cur);
|
||||
if (/\b(?:string|comment)\b/.test(token.type)) return;
|
||||
token.state = CodeMirror.innerMode(editor.getMode(), token.state).state;
|
||||
|
||||
// If it's not a 'word-style' token, ignore the token.
|
||||
if (!/^[\w$_]*$/.test(token.string)) {
|
||||
token = {start: cur.ch, end: cur.ch, string: "", state: token.state,
|
||||
type: token.string == "." ? "property" : null};
|
||||
} else if (token.end > cur.ch) {
|
||||
token.end = cur.ch;
|
||||
token.string = token.string.slice(0, cur.ch - token.start);
|
||||
}
|
||||
|
||||
var tprop = token;
|
||||
// If it is a property, find out what it is a property of.
|
||||
while (tprop.type == "property") {
|
||||
tprop = getToken(editor, Pos(cur.line, tprop.start));
|
||||
if (tprop.string != ".") return;
|
||||
tprop = getToken(editor, Pos(cur.line, tprop.start));
|
||||
if (!context) var context = [];
|
||||
context.push(tprop);
|
||||
}
|
||||
// 发消息让其他组件注入 其他hint
|
||||
CodeMirror.signal(editor, "hinting");
|
||||
var myhints = editor.state.myhints
|
||||
var needToClearJSHint = editor.state.needToClearJSHint
|
||||
if (needToClearJSHint) { // 不使用js的hint,可能注入了其他语言的hint
|
||||
keywords = []
|
||||
editor.state.needToClearJSHint = false;
|
||||
}
|
||||
myhints && myhints.forEach(function(item) {
|
||||
if (!arrayContains(keywords, item)) keywords.push(item)
|
||||
})
|
||||
|
||||
return {list: getCompletions(token, context, keywords, options),
|
||||
from: Pos(cur.line, token.start),
|
||||
to: Pos(cur.line, token.end)};
|
||||
}
|
||||
|
||||
function javascriptHint(editor, options) {
|
||||
return scriptHint(editor, javascriptKeywords,
|
||||
function (e, cur) {return e.getTokenAt(cur);},
|
||||
options);
|
||||
};
|
||||
CodeMirror.registerHelper("hint", "javascript", javascriptHint);
|
||||
|
||||
function getCoffeeScriptToken(editor, cur) {
|
||||
// This getToken, it is for coffeescript, imitates the behavior of
|
||||
// getTokenAt method in javascript.js, that is, returning "property"
|
||||
// type and treat "." as indepenent token.
|
||||
var token = editor.getTokenAt(cur);
|
||||
if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') {
|
||||
token.end = token.start;
|
||||
token.string = '.';
|
||||
token.type = "property";
|
||||
}
|
||||
else if (/^\.[\w$_]*$/.test(token.string)) {
|
||||
token.type = "property";
|
||||
token.start++;
|
||||
token.string = token.string.replace(/\./, '');
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
function coffeescriptHint(editor, options) {
|
||||
return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options);
|
||||
}
|
||||
CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint);
|
||||
|
||||
/* var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " +
|
||||
"toUpperCase toLowerCase split concat match replace search").split(" ");
|
||||
var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " +
|
||||
"lastIndexOf every some filter forEach map reduce reduceRight ").split(" ");
|
||||
var funcProps = "prototype apply call bind".split(" ");*/
|
||||
var javascriptKeywords = ("double float int long short null true false enum super this void auto for register static const friend mutable explicit virtual template typename printf " +
|
||||
"break continue return do while if else for instanceof switch case default try catch finally throw throws assert import package boolean byte char delete private " +
|
||||
"inline struct union signed unsigned export extern namespace using operator sizeof typedef typeid and del from not as elif or with pass except " +
|
||||
"print exec raise is def lambda private protected public abstract class extends final implements interface native new static strictfp synchronized transient main " +
|
||||
"String string System println vector bool boolean FALSE TRUE function").split(" ");
|
||||
/*
|
||||
var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " +
|
||||
"if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" ");
|
||||
*/
|
||||
|
||||
function forAllProps(obj, callback) {
|
||||
if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {
|
||||
for (var name in obj) callback(name)
|
||||
} else {
|
||||
for (var o = obj; o; o = Object.getPrototypeOf(o))
|
||||
Object.getOwnPropertyNames(o).forEach(callback)
|
||||
}
|
||||
}
|
||||
|
||||
function getCompletions(token, context, keywords, options) {
|
||||
var found = [], start = token.string, global = options && options.globalScope || window;
|
||||
function maybeAdd(str) {
|
||||
// var results = fuzzysort.go(start, [str])
|
||||
// if ( results.total && !arrayContains(found, str) ) found.push(str);
|
||||
|
||||
if (fuzzysort && fuzzysort.single) {
|
||||
// 使用模糊搜索
|
||||
var results = fuzzysort.single(start, str)
|
||||
if ( results && results.score <= 0 && !arrayContains(found, str)) found.push(str);
|
||||
} else {
|
||||
if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str);
|
||||
}
|
||||
}
|
||||
function gatherCompletions(obj) {
|
||||
if (typeof obj == "string") forEach(stringProps, maybeAdd);
|
||||
else if (obj instanceof Array) forEach(arrayProps, maybeAdd);
|
||||
else if (obj instanceof Function) forEach(funcProps, maybeAdd);
|
||||
forAllProps(obj, maybeAdd)
|
||||
}
|
||||
|
||||
// 不启用context context强制要求了lib的调用才提示,比如Math.a 就会提示 Math.abs
|
||||
if (false && context && context.length) {
|
||||
// If this is a property, see if it belongs to some object we can
|
||||
// find in the current environment.
|
||||
var obj = context.pop(), base;
|
||||
if (obj.type && obj.type.indexOf("variable") === 0) {
|
||||
if (options && options.additionalContext)
|
||||
base = options.additionalContext[obj.string];
|
||||
if (!options || options.useGlobalScope !== false)
|
||||
base = base || global[obj.string];
|
||||
} else if (obj.type == "string") {
|
||||
base = "";
|
||||
} else if (obj.type == "atom") {
|
||||
base = 1;
|
||||
} else if (obj.type == "function") {
|
||||
if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') &&
|
||||
(typeof global.jQuery == 'function'))
|
||||
base = global.jQuery();
|
||||
else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function'))
|
||||
base = global._();
|
||||
}
|
||||
while (base != null && context.length)
|
||||
base = base[context.pop().string];
|
||||
if (base != null) gatherCompletions(base);
|
||||
} else {
|
||||
// If not, just look in the global object and any local scope
|
||||
// (reading into JS mode internals to get at the local and global variables)
|
||||
/* for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);*/
|
||||
/* for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name);
|
||||
if (!options || options.useGlobalScope !== false)
|
||||
gatherCompletions(global);*/
|
||||
|
||||
// forEach(keywords, maybeAdd);
|
||||
|
||||
var result = fuzzysort.go(start, keywords)
|
||||
result && result.forEach(function(item) {
|
||||
found.push(item.target)
|
||||
})
|
||||
}
|
||||
return found;
|
||||
}
|
||||
});
|
|
@ -1,36 +0,0 @@
|
|||
.CodeMirror-hints {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
|
||||
-webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
|
||||
-moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
|
||||
box-shadow: 2px 3px 5px rgba(0,0,0,.2);
|
||||
border-radius: 3px;
|
||||
border: 1px solid silver;
|
||||
|
||||
background: white;
|
||||
font-size: 90%;
|
||||
font-family: monospace;
|
||||
|
||||
max-height: 20em;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-hint {
|
||||
margin: 0;
|
||||
padding: 0 4px;
|
||||
border-radius: 2px;
|
||||
white-space: pre;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
li.CodeMirror-hint-active {
|
||||
background: #08f;
|
||||
color: white;
|
||||
}
|
|
@ -1,458 +0,0 @@
|
|||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
var HINT_ELEMENT_CLASS = "CodeMirror-hint";
|
||||
var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
|
||||
|
||||
// This is the old interface, kept around for now to stay
|
||||
// backwards-compatible.
|
||||
CodeMirror.showHint = function(cm, getHints, options) {
|
||||
if (!getHints) return cm.showHint(options);
|
||||
if (options && options.async) getHints.async = true;
|
||||
var newOpts = {hint: getHints};
|
||||
if (options) for (var prop in options) newOpts[prop] = options[prop];
|
||||
return cm.showHint(newOpts);
|
||||
};
|
||||
|
||||
CodeMirror.defineExtension("showHint", function(options) {
|
||||
options = parseOptions(this, this.getCursor("start"), options);
|
||||
var selections = this.listSelections()
|
||||
if (selections.length > 1) return;
|
||||
// By default, don't allow completion when something is selected.
|
||||
// A hint function can have a `supportsSelection` property to
|
||||
// indicate that it can handle selections.
|
||||
if (this.somethingSelected()) {
|
||||
if (!options.hint.supportsSelection) return;
|
||||
// Don't try with cross-line selections
|
||||
for (var i = 0; i < selections.length; i++)
|
||||
if (selections[i].head.line != selections[i].anchor.line) return;
|
||||
}
|
||||
|
||||
if (this.state.completionActive) this.state.completionActive.close();
|
||||
var completion = this.state.completionActive = new Completion(this, options);
|
||||
if (!completion.options.hint) return;
|
||||
|
||||
CodeMirror.signal(this, "startCompletion", this);
|
||||
completion.update(true);
|
||||
});
|
||||
|
||||
function Completion(cm, options) {
|
||||
this.cm = cm;
|
||||
this.options = options;
|
||||
this.widget = null;
|
||||
this.debounce = 0;
|
||||
this.tick = 0;
|
||||
this.startPos = this.cm.getCursor("start");
|
||||
this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;
|
||||
|
||||
var self = this;
|
||||
cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); });
|
||||
}
|
||||
|
||||
var requestAnimationFrame = window.requestAnimationFrame || function(fn) {
|
||||
return setTimeout(fn, 1000/60);
|
||||
};
|
||||
var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
|
||||
|
||||
Completion.prototype = {
|
||||
close: function() {
|
||||
if (!this.active()) return;
|
||||
this.cm.state.completionActive = null;
|
||||
this.tick = null;
|
||||
this.cm.off("cursorActivity", this.activityFunc);
|
||||
|
||||
if (this.widget && this.data) CodeMirror.signal(this.data, "close");
|
||||
if (this.widget) this.widget.close();
|
||||
CodeMirror.signal(this.cm, "endCompletion", this.cm);
|
||||
},
|
||||
|
||||
active: function() {
|
||||
return this.cm.state.completionActive == this;
|
||||
},
|
||||
|
||||
pick: function(data, i) {
|
||||
var completion = data.list[i];
|
||||
if (completion.hint) completion.hint(this.cm, data, completion);
|
||||
else this.cm.replaceRange(getText(completion), completion.from || data.from,
|
||||
completion.to || data.to, "complete");
|
||||
CodeMirror.signal(data, "pick", completion);
|
||||
this.close();
|
||||
},
|
||||
|
||||
cursorActivity: function() {
|
||||
if (this.debounce) {
|
||||
cancelAnimationFrame(this.debounce);
|
||||
this.debounce = 0;
|
||||
}
|
||||
|
||||
var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);
|
||||
if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||
|
||||
pos.ch < this.startPos.ch || this.cm.somethingSelected() ||
|
||||
(pos.ch && this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
|
||||
this.close();
|
||||
} else {
|
||||
var self = this;
|
||||
this.debounce = requestAnimationFrame(function() {self.update();});
|
||||
if (this.widget) this.widget.disable();
|
||||
}
|
||||
},
|
||||
|
||||
update: function(first) {
|
||||
if (this.tick == null) return
|
||||
var self = this, myTick = ++this.tick
|
||||
fetchHints(this.options.hint, this.cm, this.options, function(data) {
|
||||
if (self.tick == myTick) self.finishUpdate(data, first)
|
||||
})
|
||||
},
|
||||
|
||||
finishUpdate: function(data, first) {
|
||||
if (this.data) CodeMirror.signal(this.data, "update");
|
||||
|
||||
var picked = (this.widget && this.widget.picked) // || (first && this.options.completeSingle);
|
||||
if (this.widget) this.widget.close();
|
||||
|
||||
if (data && this.data && isNewCompletion(this.data, data)) return;
|
||||
this.data = data;
|
||||
|
||||
if (data && data.list.length) {
|
||||
if (picked && data.list.length == 1) {
|
||||
this.pick(data, 0);
|
||||
} else {
|
||||
// 使得输入完后,刚好输入和hint一样,则不再显示hint
|
||||
if (data.list.length == 1 && data.to.ch - data.from.ch === data.list[0].length) {
|
||||
return;
|
||||
}
|
||||
this.widget = new Widget(this, data);
|
||||
CodeMirror.signal(data, "shown");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function isNewCompletion(old, nw) {
|
||||
var moved = CodeMirror.cmpPos(nw.from, old.from)
|
||||
return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch
|
||||
}
|
||||
|
||||
function parseOptions(cm, pos, options) {
|
||||
var editor = cm.options.hintOptions;
|
||||
var out = {};
|
||||
for (var prop in defaultOptions) out[prop] = defaultOptions[prop];
|
||||
if (editor) for (var prop in editor)
|
||||
if (editor[prop] !== undefined) out[prop] = editor[prop];
|
||||
if (options) for (var prop in options)
|
||||
if (options[prop] !== undefined) out[prop] = options[prop];
|
||||
if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)
|
||||
return out;
|
||||
}
|
||||
|
||||
function getText(completion) {
|
||||
if (typeof completion == "string") return completion;
|
||||
else return completion.text;
|
||||
}
|
||||
|
||||
function buildKeyMap(completion, handle) {
|
||||
var baseMap = {
|
||||
Up: function() {handle.moveFocus(-1);},
|
||||
Down: function() {handle.moveFocus(1);},
|
||||
PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},
|
||||
PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},
|
||||
Home: function() {handle.setFocus(0);},
|
||||
End: function() {handle.setFocus(handle.length - 1);},
|
||||
Enter: handle.pick,
|
||||
Tab: handle.pick,
|
||||
Esc: handle.close
|
||||
};
|
||||
var custom = completion.options.customKeys;
|
||||
var ourMap = custom ? {} : baseMap;
|
||||
function addBinding(key, val) {
|
||||
var bound;
|
||||
if (typeof val != "string")
|
||||
bound = function(cm) { return val(cm, handle); };
|
||||
// This mechanism is deprecated
|
||||
else if (baseMap.hasOwnProperty(val))
|
||||
bound = baseMap[val];
|
||||
else
|
||||
bound = val;
|
||||
ourMap[key] = bound;
|
||||
}
|
||||
if (custom)
|
||||
for (var key in custom) if (custom.hasOwnProperty(key))
|
||||
addBinding(key, custom[key]);
|
||||
var extra = completion.options.extraKeys;
|
||||
if (extra)
|
||||
for (var key in extra) if (extra.hasOwnProperty(key))
|
||||
addBinding(key, extra[key]);
|
||||
return ourMap;
|
||||
}
|
||||
|
||||
function getHintElement(hintsElement, el) {
|
||||
while (el && el != hintsElement) {
|
||||
if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el;
|
||||
el = el.parentNode;
|
||||
}
|
||||
}
|
||||
|
||||
function Widget(completion, data) {
|
||||
this.completion = completion;
|
||||
this.data = data;
|
||||
this.picked = false;
|
||||
var widget = this, cm = completion.cm;
|
||||
|
||||
var hints = this.hints = document.createElement("ul");
|
||||
hints.className = "CodeMirror-hints";
|
||||
this.selectedHint = data.selectedHint || 0;
|
||||
|
||||
var completions = data.list;
|
||||
for (var i = 0; i < completions.length; ++i) {
|
||||
var elt = hints.appendChild(document.createElement("li")), cur = completions[i];
|
||||
var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
|
||||
if (cur.className != null) className = cur.className + " " + className;
|
||||
elt.className = className;
|
||||
if (cur.render) cur.render(elt, data, cur);
|
||||
else elt.appendChild(document.createTextNode(cur.displayText || getText(cur)));
|
||||
elt.hintId = i;
|
||||
}
|
||||
|
||||
var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);
|
||||
var left = pos.left, top = pos.bottom, below = true;
|
||||
hints.style.left = left + "px";
|
||||
hints.style.top = top + "px";
|
||||
// If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
|
||||
var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
|
||||
var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);
|
||||
(completion.options.container || document.body).appendChild(hints);
|
||||
var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
|
||||
var scrolls = hints.scrollHeight > hints.clientHeight + 1
|
||||
var startScroll = cm.getScrollInfo();
|
||||
|
||||
if (overlapY > 0) {
|
||||
var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);
|
||||
if (curTop - height > 0) { // Fits above cursor
|
||||
hints.style.top = (top = pos.top - height) + "px";
|
||||
below = false;
|
||||
} else if (height > winH) {
|
||||
hints.style.height = (winH - 5) + "px";
|
||||
hints.style.top = (top = pos.bottom - box.top) + "px";
|
||||
var cursor = cm.getCursor();
|
||||
if (data.from.ch != cursor.ch) {
|
||||
pos = cm.cursorCoords(cursor);
|
||||
hints.style.left = (left = pos.left) + "px";
|
||||
box = hints.getBoundingClientRect();
|
||||
}
|
||||
}
|
||||
}
|
||||
var overlapX = box.right - winW;
|
||||
if (overlapX > 0) {
|
||||
if (box.right - box.left > winW) {
|
||||
hints.style.width = (winW - 5) + "px";
|
||||
overlapX -= (box.right - box.left) - winW;
|
||||
}
|
||||
hints.style.left = (left = pos.left - overlapX) + "px";
|
||||
}
|
||||
if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)
|
||||
node.style.paddingRight = cm.display.nativeBarWidth + "px"
|
||||
|
||||
cm.addKeyMap(this.keyMap = buildKeyMap(completion, {
|
||||
moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },
|
||||
setFocus: function(n) { widget.changeActive(n); },
|
||||
menuSize: function() { return widget.screenAmount(); },
|
||||
length: completions.length,
|
||||
close: function() { completion.close(); },
|
||||
pick: function() { widget.pick(); },
|
||||
data: data
|
||||
}));
|
||||
|
||||
if (completion.options.closeOnUnfocus) {
|
||||
var closingOnBlur;
|
||||
cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });
|
||||
cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); });
|
||||
}
|
||||
|
||||
cm.on("scroll", this.onScroll = function() {
|
||||
var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
|
||||
var newTop = top + startScroll.top - curScroll.top;
|
||||
var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop);
|
||||
if (!below) point += hints.offsetHeight;
|
||||
if (point <= editor.top || point >= editor.bottom) return completion.close();
|
||||
hints.style.top = newTop + "px";
|
||||
hints.style.left = (left + startScroll.left - curScroll.left) + "px";
|
||||
});
|
||||
|
||||
CodeMirror.on(hints, "dblclick", function(e) {
|
||||
var t = getHintElement(hints, e.target || e.srcElement);
|
||||
if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}
|
||||
});
|
||||
|
||||
CodeMirror.on(hints, "click", function(e) {
|
||||
var t = getHintElement(hints, e.target || e.srcElement);
|
||||
if (t && t.hintId != null) {
|
||||
widget.changeActive(t.hintId);
|
||||
if (completion.options.completeOnSingleClick) widget.pick();
|
||||
}
|
||||
});
|
||||
|
||||
CodeMirror.on(hints, "mousedown", function() {
|
||||
setTimeout(function(){cm.focus();}, 20);
|
||||
});
|
||||
|
||||
CodeMirror.signal(data, "select", completions[0], hints.firstChild);
|
||||
return true;
|
||||
}
|
||||
|
||||
Widget.prototype = {
|
||||
close: function() {
|
||||
if (this.completion.widget != this) return;
|
||||
this.completion.widget = null;
|
||||
this.hints.parentNode.removeChild(this.hints);
|
||||
this.completion.cm.removeKeyMap(this.keyMap);
|
||||
|
||||
var cm = this.completion.cm;
|
||||
if (this.completion.options.closeOnUnfocus) {
|
||||
cm.off("blur", this.onBlur);
|
||||
cm.off("focus", this.onFocus);
|
||||
}
|
||||
cm.off("scroll", this.onScroll);
|
||||
},
|
||||
|
||||
disable: function() {
|
||||
this.completion.cm.removeKeyMap(this.keyMap);
|
||||
var widget = this;
|
||||
this.keyMap = {Enter: function() { widget.picked = true; }};
|
||||
this.completion.cm.addKeyMap(this.keyMap);
|
||||
},
|
||||
|
||||
pick: function() {
|
||||
this.completion.pick(this.data, this.selectedHint);
|
||||
},
|
||||
|
||||
changeActive: function(i, avoidWrap) {
|
||||
if (i >= this.data.list.length)
|
||||
i = avoidWrap ? this.data.list.length - 1 : 0;
|
||||
else if (i < 0)
|
||||
i = avoidWrap ? 0 : this.data.list.length - 1;
|
||||
if (this.selectedHint == i) return;
|
||||
var node = this.hints.childNodes[this.selectedHint];
|
||||
node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
|
||||
node = this.hints.childNodes[this.selectedHint = i];
|
||||
node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
|
||||
if (node.offsetTop < this.hints.scrollTop)
|
||||
this.hints.scrollTop = node.offsetTop - 3;
|
||||
else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
|
||||
this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;
|
||||
CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
|
||||
},
|
||||
|
||||
screenAmount: function() {
|
||||
return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
|
||||
}
|
||||
};
|
||||
|
||||
function applicableHelpers(cm, helpers) {
|
||||
if (!cm.somethingSelected()) return helpers
|
||||
var result = []
|
||||
for (var i = 0; i < helpers.length; i++)
|
||||
if (helpers[i].supportsSelection) result.push(helpers[i])
|
||||
return result
|
||||
}
|
||||
|
||||
function fetchHints(hint, cm, options, callback) {
|
||||
if (hint.async) {
|
||||
hint(cm, callback, options)
|
||||
} else {
|
||||
var result = hint(cm, options)
|
||||
if (result && result.then) result.then(callback)
|
||||
else callback(result)
|
||||
}
|
||||
}
|
||||
|
||||
function resolveAutoHints(cm, pos) {
|
||||
var helpers = cm.getHelpers(pos, "hint"), words
|
||||
if (helpers.length) {
|
||||
var resolved = function(cm, callback, options) {
|
||||
var app = applicableHelpers(cm, helpers);
|
||||
function run(i) {
|
||||
if (i == app.length) return callback(null)
|
||||
fetchHints(app[i], cm, options, function(result) {
|
||||
if (result && result.list.length > 0) callback(result)
|
||||
else run(i + 1)
|
||||
})
|
||||
}
|
||||
run(0)
|
||||
}
|
||||
resolved.async = true
|
||||
resolved.supportsSelection = true
|
||||
return resolved
|
||||
} else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
|
||||
// 发消息让其他组件注入 其他hint
|
||||
CodeMirror.signal(cm, "hinting", words);
|
||||
var myhints = cm.state.myhints
|
||||
var wordsTemp = words.slice(0)
|
||||
myhints && myhints.forEach(function(item) {
|
||||
if (words.indexOf(item) === -1) wordsTemp.push(item)
|
||||
})
|
||||
return function(cm) {
|
||||
return CodeMirror.hint.fromList(cm, {words: wordsTemp})
|
||||
}
|
||||
} else if (CodeMirror.hint.anyword) {
|
||||
return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }
|
||||
} else {
|
||||
return function() {}
|
||||
}
|
||||
}
|
||||
|
||||
CodeMirror.registerHelper("hint", "auto", {
|
||||
resolve: resolveAutoHints
|
||||
});
|
||||
|
||||
CodeMirror.registerHelper("hint", "fromList", function(cm, options) {
|
||||
var cur = cm.getCursor(), token = cm.getTokenAt(cur);
|
||||
var to = CodeMirror.Pos(cur.line, token.end);
|
||||
if (token.string && /\w/.test(token.string[token.string.length - 1])) {
|
||||
var term = token.string, from = CodeMirror.Pos(cur.line, token.start);
|
||||
} else {
|
||||
var term = "", from = to;
|
||||
}
|
||||
var found = [];
|
||||
|
||||
if (fuzzysort && fuzzysort.go) {
|
||||
var result = fuzzysort.go(term, options.words)
|
||||
result && result.forEach(function(item) {
|
||||
found.push(item.target)
|
||||
})
|
||||
} else {
|
||||
for (var i = 0; i < options.words.length; i++) {
|
||||
var word = options.words[i];
|
||||
if (word.slice(0, term.length) == term)
|
||||
found.push(word);
|
||||
}
|
||||
}
|
||||
if (found.length) return {list: found, from: from, to: to};
|
||||
});
|
||||
|
||||
CodeMirror.commands.autocomplete = CodeMirror.showHint;
|
||||
|
||||
var defaultOptions = {
|
||||
hint: CodeMirror.hint.auto,
|
||||
completeSingle: true,
|
||||
alignWithWord: true,
|
||||
closeCharacters: /[\s()\[\]{};:>,]/,
|
||||
closeOnUnfocus: true,
|
||||
completeOnSingleClick: true,
|
||||
container: null,
|
||||
customKeys: null,
|
||||
extraKeys: null
|
||||
};
|
||||
|
||||
CodeMirror.defineOption("hintOptions", null);
|
||||
});
|
|
@ -1,603 +0,0 @@
|
|||
/*
|
||||
WHAT: SublimeText-like Fuzzy Search
|
||||
USAGE:
|
||||
fuzzysort.single('fs', 'Fuzzy Search') // {score: -16}
|
||||
fuzzysort.single('test', 'test') // {score: 0}
|
||||
fuzzysort.single('doesnt exist', 'target') // null
|
||||
fuzzysort.go('mr', ['Monitor.cpp', 'MeshRenderer.cpp'])
|
||||
// [{score: -18, target: "MeshRenderer.cpp"}, {score: -6009, target: "Monitor.cpp"}]
|
||||
fuzzysort.highlight(fuzzysort.single('fs', 'Fuzzy Search'), '<b>', '</b>')
|
||||
// <b>F</b>uzzy <b>S</b>earch
|
||||
|
||||
https://github.com/farzher/fuzzysort
|
||||
*/
|
||||
|
||||
// UMD (Universal Module Definition) for fuzzysort
|
||||
;(function(root, UMD) {
|
||||
if(typeof define === 'function' && define.amd) define([], UMD)
|
||||
else if(typeof module === 'object' && module.exports) module.exports = UMD()
|
||||
else root.fuzzysort = UMD()
|
||||
})(this, function UMD() { function fuzzysortNew(instanceOptions) {
|
||||
|
||||
var fuzzysort = {
|
||||
|
||||
single: function(search, target, options) {
|
||||
if(!search) return null
|
||||
if(!isObj(search)) search = fuzzysort.getPreparedSearch(search)
|
||||
|
||||
if(!target) return null
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo
|
||||
: instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo
|
||||
: true
|
||||
var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo
|
||||
return algorithm(search, target, search[0])
|
||||
// var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991
|
||||
// var result = algorithm(search, target, search[0])
|
||||
// if(result === null) return null
|
||||
// if(result.score < threshold) return null
|
||||
// return result
|
||||
},
|
||||
|
||||
go: function(search, targets, options) {
|
||||
if(!search) return noResults
|
||||
search = fuzzysort.prepareSearch(search)
|
||||
var searchLowerCode = search[0]
|
||||
|
||||
var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991
|
||||
var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991
|
||||
var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo
|
||||
: instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo
|
||||
: true
|
||||
var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo
|
||||
var resultsLen = 0; var limitedCount = 0
|
||||
var targetsLen = targets.length
|
||||
|
||||
// This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys]
|
||||
|
||||
// options.keys
|
||||
if(options && options.keys) {
|
||||
var scoreFn = options.scoreFn || defaultScoreFn
|
||||
var keys = options.keys
|
||||
var keysLen = keys.length
|
||||
for(var i = targetsLen - 1; i >= 0; --i) { var obj = targets[i]
|
||||
var objResults = new Array(keysLen)
|
||||
for (var keyI = keysLen - 1; keyI >= 0; --keyI) {
|
||||
var key = keys[keyI]
|
||||
var target = getValue(obj, key)
|
||||
if(!target) { objResults[keyI] = null; continue }
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
objResults[keyI] = algorithm(search, target, searchLowerCode)
|
||||
}
|
||||
objResults.obj = obj // before scoreFn so scoreFn can use it
|
||||
var score = scoreFn(objResults)
|
||||
if(score === null) continue
|
||||
if(score < threshold) continue
|
||||
objResults.score = score
|
||||
if(resultsLen < limit) { q.add(objResults); ++resultsLen }
|
||||
else {
|
||||
++limitedCount
|
||||
if(score > q.peek().score) q.replaceTop(objResults)
|
||||
}
|
||||
}
|
||||
|
||||
// options.key
|
||||
} else if(options && options.key) {
|
||||
var key = options.key
|
||||
for(var i = targetsLen - 1; i >= 0; --i) { var obj = targets[i]
|
||||
var target = getValue(obj, key)
|
||||
if(!target) continue
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
var result = algorithm(search, target, searchLowerCode)
|
||||
if(result === null) continue
|
||||
if(result.score < threshold) continue
|
||||
|
||||
// have to clone result so duplicate targets from different obj can each reference the correct obj
|
||||
result = {target:result.target, _targetLowerCodes:null, _nextBeginningIndexes:null, score:result.score, indexes:result.indexes, obj:obj} // hidden
|
||||
|
||||
if(resultsLen < limit) { q.add(result); ++resultsLen }
|
||||
else {
|
||||
++limitedCount
|
||||
if(result.score > q.peek().score) q.replaceTop(result)
|
||||
}
|
||||
}
|
||||
|
||||
// no keys
|
||||
} else {
|
||||
for(var i = targetsLen - 1; i >= 0; --i) { var target = targets[i]
|
||||
if(!target) continue
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
var result = algorithm(search, target, searchLowerCode)
|
||||
if(result === null) continue
|
||||
if(result.score < threshold) continue
|
||||
if(resultsLen < limit) { q.add(result); ++resultsLen }
|
||||
else {
|
||||
++limitedCount
|
||||
if(result.score > q.peek().score) q.replaceTop(result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(resultsLen === 0) return noResults
|
||||
var results = new Array(resultsLen)
|
||||
for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()
|
||||
results.total = resultsLen + limitedCount
|
||||
return results
|
||||
},
|
||||
|
||||
goAsync: function(search, targets, options) {
|
||||
var canceled = false
|
||||
var p = new Promise(function(resolve, reject) {
|
||||
if(!search) return resolve(noResults)
|
||||
search = fuzzysort.prepareSearch(search)
|
||||
var searchLowerCode = search[0]
|
||||
|
||||
var q = fastpriorityqueue()
|
||||
var iCurrent = targets.length - 1
|
||||
var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991
|
||||
var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991
|
||||
var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo
|
||||
: instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo
|
||||
: true
|
||||
var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo
|
||||
var resultsLen = 0; var limitedCount = 0
|
||||
function step() {
|
||||
if(canceled) return reject('canceled')
|
||||
|
||||
var startMs = Date.now()
|
||||
|
||||
// This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys]
|
||||
|
||||
// options.keys
|
||||
if(options && options.keys) {
|
||||
var scoreFn = options.scoreFn || defaultScoreFn
|
||||
var keys = options.keys
|
||||
var keysLen = keys.length
|
||||
for(; iCurrent >= 0; --iCurrent) { var obj = targets[iCurrent]
|
||||
var objResults = new Array(keysLen)
|
||||
for (var keyI = keysLen - 1; keyI >= 0; --keyI) {
|
||||
var key = keys[keyI]
|
||||
var target = getValue(obj, key)
|
||||
if(!target) { objResults[keyI] = null; continue }
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
objResults[keyI] = algorithm(search, target, searchLowerCode)
|
||||
}
|
||||
objResults.obj = obj // before scoreFn so scoreFn can use it
|
||||
var score = scoreFn(objResults)
|
||||
if(score === null) continue
|
||||
if(score < threshold) continue
|
||||
objResults.score = score
|
||||
if(resultsLen < limit) { q.add(objResults); ++resultsLen }
|
||||
else {
|
||||
++limitedCount
|
||||
if(score > q.peek().score) q.replaceTop(objResults)
|
||||
}
|
||||
|
||||
if(iCurrent%1000/*itemsPerCheck*/ === 0) {
|
||||
if(Date.now() - startMs >= 10/*asyncInterval*/) {
|
||||
isNode?setImmediate(step):setTimeout(step)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// options.key
|
||||
} else if(options && options.key) {
|
||||
var key = options.key
|
||||
for(; iCurrent >= 0; --iCurrent) { var obj = targets[iCurrent]
|
||||
var target = getValue(obj, key)
|
||||
if(!target) continue
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
var result = algorithm(search, target, searchLowerCode)
|
||||
if(result === null) continue
|
||||
if(result.score < threshold) continue
|
||||
|
||||
// have to clone result so duplicate targets from different obj can each reference the correct obj
|
||||
result = {target:result.target, _targetLowerCodes:null, _nextBeginningIndexes:null, score:result.score, indexes:result.indexes, obj:obj} // hidden
|
||||
|
||||
if(resultsLen < limit) { q.add(result); ++resultsLen }
|
||||
else {
|
||||
++limitedCount
|
||||
if(result.score > q.peek().score) q.replaceTop(result)
|
||||
}
|
||||
|
||||
if(iCurrent%1000/*itemsPerCheck*/ === 0) {
|
||||
if(Date.now() - startMs >= 10/*asyncInterval*/) {
|
||||
isNode?setImmediate(step):setTimeout(step)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// no keys
|
||||
} else {
|
||||
for(; iCurrent >= 0; --iCurrent) { var target = targets[iCurrent]
|
||||
if(!target) continue
|
||||
if(!isObj(target)) target = fuzzysort.getPrepared(target)
|
||||
|
||||
var result = algorithm(search, target, searchLowerCode)
|
||||
if(result === null) continue
|
||||
if(result.score < threshold) continue
|
||||
if(resultsLen < limit) { q.add(result); ++resultsLen }
|
||||
else {
|
||||
++limitedCount
|
||||
if(result.score > q.peek().score) q.replaceTop(result)
|
||||
}
|
||||
|
||||
if(iCurrent%1000/*itemsPerCheck*/ === 0) {
|
||||
if(Date.now() - startMs >= 10/*asyncInterval*/) {
|
||||
isNode?setImmediate(step):setTimeout(step)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(resultsLen === 0) return resolve(noResults)
|
||||
var results = new Array(resultsLen)
|
||||
for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()
|
||||
results.total = resultsLen + limitedCount
|
||||
resolve(results)
|
||||
}
|
||||
|
||||
isNode?setImmediate(step):step()
|
||||
})
|
||||
p.cancel = function() { canceled = true }
|
||||
return p
|
||||
},
|
||||
|
||||
highlight: function(result, hOpen, hClose) {
|
||||
if(result === null) return null
|
||||
if(hOpen === undefined) hOpen = '<b>'
|
||||
if(hClose === undefined) hClose = '</b>'
|
||||
var highlighted = ''
|
||||
var matchesIndex = 0
|
||||
var opened = false
|
||||
var target = result.target
|
||||
var targetLen = target.length
|
||||
var matchesBest = result.indexes
|
||||
for(var i = 0; i < targetLen; ++i) { var char = target[i]
|
||||
if(matchesBest[matchesIndex] === i) {
|
||||
++matchesIndex
|
||||
if(!opened) { opened = true
|
||||
highlighted += hOpen
|
||||
}
|
||||
|
||||
if(matchesIndex === matchesBest.length) {
|
||||
highlighted += char + hClose + target.substr(i+1)
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if(opened) { opened = false
|
||||
highlighted += hClose
|
||||
}
|
||||
}
|
||||
highlighted += char
|
||||
}
|
||||
|
||||
return highlighted
|
||||
},
|
||||
|
||||
prepare: function(target) {
|
||||
if(!target) return
|
||||
return {target:target, _targetLowerCodes:fuzzysort.prepareLowerCodes(target), _nextBeginningIndexes:null, score:null, indexes:null, obj:null} // hidden
|
||||
},
|
||||
prepareSlow: function(target) {
|
||||
if(!target) return
|
||||
return {target:target, _targetLowerCodes:fuzzysort.prepareLowerCodes(target), _nextBeginningIndexes:fuzzysort.prepareNextBeginningIndexes(target), score:null, indexes:null, obj:null} // hidden
|
||||
},
|
||||
prepareSearch: function(search) {
|
||||
if(!search) return
|
||||
return fuzzysort.prepareLowerCodes(search)
|
||||
},
|
||||
|
||||
|
||||
|
||||
// Below this point is only internal code
|
||||
// Below this point is only internal code
|
||||
// Below this point is only internal code
|
||||
// Below this point is only internal code
|
||||
|
||||
|
||||
|
||||
getPrepared: function(target) {
|
||||
if(target.length > 999) return fuzzysort.prepare(target) // don't cache huge targets
|
||||
var targetPrepared = preparedCache.get(target)
|
||||
if(targetPrepared !== undefined) return targetPrepared
|
||||
targetPrepared = fuzzysort.prepare(target)
|
||||
preparedCache.set(target, targetPrepared)
|
||||
return targetPrepared
|
||||
},
|
||||
getPreparedSearch: function(search) {
|
||||
if(search.length > 999) return fuzzysort.prepareSearch(search) // don't cache huge searches
|
||||
var searchPrepared = preparedSearchCache.get(search)
|
||||
if(searchPrepared !== undefined) return searchPrepared
|
||||
searchPrepared = fuzzysort.prepareSearch(search)
|
||||
preparedSearchCache.set(search, searchPrepared)
|
||||
return searchPrepared
|
||||
},
|
||||
|
||||
algorithm: function(searchLowerCodes, prepared, searchLowerCode) {
|
||||
var targetLowerCodes = prepared._targetLowerCodes
|
||||
var searchLen = searchLowerCodes.length
|
||||
var targetLen = targetLowerCodes.length
|
||||
var searchI = 0 // where we at
|
||||
var targetI = 0 // where you at
|
||||
var typoSimpleI = 0
|
||||
var matchesSimpleLen = 0
|
||||
|
||||
// very basic fuzzy match; to remove non-matching targets ASAP!
|
||||
// walk through target. find sequential matches.
|
||||
// if all chars aren't found then exit
|
||||
for(;;) {
|
||||
var isMatch = searchLowerCode === targetLowerCodes[targetI]
|
||||
if(isMatch) {
|
||||
matchesSimple[matchesSimpleLen++] = targetI
|
||||
++searchI; if(searchI === searchLen) break
|
||||
searchLowerCode = searchLowerCodes[typoSimpleI===0?searchI : (typoSimpleI===searchI?searchI+1 : (typoSimpleI===searchI-1?searchI-1 : searchI))]
|
||||
}
|
||||
|
||||
++targetI; if(targetI >= targetLen) { // Failed to find searchI
|
||||
// Check for typo or exit
|
||||
// we go as far as possible before trying to transpose
|
||||
// then we transpose backwards until we reach the beginning
|
||||
for(;;) {
|
||||
if(searchI <= 1) return null // not allowed to transpose first char
|
||||
if(typoSimpleI === 0) { // we haven't tried to transpose yet
|
||||
--searchI
|
||||
var searchLowerCodeNew = searchLowerCodes[searchI]
|
||||
if(searchLowerCode === searchLowerCodeNew) continue // doesn't make sense to transpose a repeat char
|
||||
typoSimpleI = searchI
|
||||
} else {
|
||||
if(typoSimpleI === 1) return null // reached the end of the line for transposing
|
||||
--typoSimpleI
|
||||
searchI = typoSimpleI
|
||||
searchLowerCode = searchLowerCodes[searchI + 1]
|
||||
var searchLowerCodeNew = searchLowerCodes[searchI]
|
||||
if(searchLowerCode === searchLowerCodeNew) continue // doesn't make sense to transpose a repeat char
|
||||
}
|
||||
matchesSimpleLen = searchI
|
||||
targetI = matchesSimple[matchesSimpleLen - 1] + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var searchI = 0
|
||||
var typoStrictI = 0
|
||||
var successStrict = false
|
||||
var matchesStrictLen = 0
|
||||
|
||||
var nextBeginningIndexes = prepared._nextBeginningIndexes
|
||||
if(nextBeginningIndexes === null) nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target)
|
||||
var firstPossibleI = targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]
|
||||
|
||||
// Our target string successfully matched all characters in sequence!
|
||||
// Let's try a more advanced and strict test to improve the score
|
||||
// only count it as a match if it's consecutive or a beginning character!
|
||||
if(targetI !== targetLen) for(;;) {
|
||||
if(targetI >= targetLen) {
|
||||
// We failed to find a good spot for this search char, go back to the previous search char and force it forward
|
||||
if(searchI <= 0) { // We failed to push chars forward for a better match
|
||||
// transpose, starting from the beginning
|
||||
++typoStrictI; if(typoStrictI > searchLen-2) break
|
||||
if(searchLowerCodes[typoStrictI] === searchLowerCodes[typoStrictI+1]) continue // doesn't make sense to transpose a repeat char
|
||||
targetI = firstPossibleI
|
||||
continue
|
||||
}
|
||||
|
||||
--searchI
|
||||
var lastMatch = matchesStrict[--matchesStrictLen]
|
||||
targetI = nextBeginningIndexes[lastMatch]
|
||||
|
||||
} else {
|
||||
var isMatch = searchLowerCodes[typoStrictI===0?searchI : (typoStrictI===searchI?searchI+1 : (typoStrictI===searchI-1?searchI-1 : searchI))] === targetLowerCodes[targetI]
|
||||
if(isMatch) {
|
||||
matchesStrict[matchesStrictLen++] = targetI
|
||||
++searchI; if(searchI === searchLen) { successStrict = true; break }
|
||||
++targetI
|
||||
} else {
|
||||
targetI = nextBeginningIndexes[targetI]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{ // tally up the score & keep track of matches for highlighting later
|
||||
if(successStrict) { var matchesBest = matchesStrict; var matchesBestLen = matchesStrictLen }
|
||||
else { var matchesBest = matchesSimple; var matchesBestLen = matchesSimpleLen }
|
||||
var score = 0
|
||||
var lastTargetI = -1
|
||||
for(var i = 0; i < searchLen; ++i) { var targetI = matchesBest[i]
|
||||
// score only goes down if they're not consecutive
|
||||
if(lastTargetI !== targetI - 1) score -= targetI
|
||||
lastTargetI = targetI
|
||||
}
|
||||
if(!successStrict) {
|
||||
score *= 1000
|
||||
if(typoSimpleI !== 0) score += -20/*typoPenalty*/
|
||||
} else {
|
||||
if(typoStrictI !== 0) score += -20/*typoPenalty*/
|
||||
}
|
||||
score -= targetLen - searchLen
|
||||
prepared.score = score
|
||||
prepared.indexes = new Array(matchesBestLen); for(var i = matchesBestLen - 1; i >= 0; --i) prepared.indexes[i] = matchesBest[i]
|
||||
|
||||
return prepared
|
||||
}
|
||||
},
|
||||
|
||||
algorithmNoTypo: function(searchLowerCodes, prepared, searchLowerCode) {
|
||||
var targetLowerCodes = prepared._targetLowerCodes
|
||||
var searchLen = searchLowerCodes.length
|
||||
var targetLen = targetLowerCodes.length
|
||||
var searchI = 0 // where we at
|
||||
var targetI = 0 // where you at
|
||||
var matchesSimpleLen = 0
|
||||
|
||||
// very basic fuzzy match; to remove non-matching targets ASAP!
|
||||
// walk through target. find sequential matches.
|
||||
// if all chars aren't found then exit
|
||||
for(;;) {
|
||||
var isMatch = searchLowerCode === targetLowerCodes[targetI]
|
||||
if(isMatch) {
|
||||
matchesSimple[matchesSimpleLen++] = targetI
|
||||
++searchI; if(searchI === searchLen) break
|
||||
searchLowerCode = searchLowerCodes[searchI]
|
||||
}
|
||||
++targetI; if(targetI >= targetLen) return null // Failed to find searchI
|
||||
}
|
||||
|
||||
var searchI = 0
|
||||
var successStrict = false
|
||||
var matchesStrictLen = 0
|
||||
|
||||
var nextBeginningIndexes = prepared._nextBeginningIndexes
|
||||
if(nextBeginningIndexes === null) nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target)
|
||||
var firstPossibleI = targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]
|
||||
|
||||
// Our target string successfully matched all characters in sequence!
|
||||
// Let's try a more advanced and strict test to improve the score
|
||||
// only count it as a match if it's consecutive or a beginning character!
|
||||
if(targetI !== targetLen) for(;;) {
|
||||
if(targetI >= targetLen) {
|
||||
// We failed to find a good spot for this search char, go back to the previous search char and force it forward
|
||||
if(searchI <= 0) break // We failed to push chars forward for a better match
|
||||
|
||||
--searchI
|
||||
var lastMatch = matchesStrict[--matchesStrictLen]
|
||||
targetI = nextBeginningIndexes[lastMatch]
|
||||
|
||||
} else {
|
||||
var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]
|
||||
if(isMatch) {
|
||||
matchesStrict[matchesStrictLen++] = targetI
|
||||
++searchI; if(searchI === searchLen) { successStrict = true; break }
|
||||
++targetI
|
||||
} else {
|
||||
targetI = nextBeginningIndexes[targetI]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{ // tally up the score & keep track of matches for highlighting later
|
||||
if(successStrict) { var matchesBest = matchesStrict; var matchesBestLen = matchesStrictLen }
|
||||
else { var matchesBest = matchesSimple; var matchesBestLen = matchesSimpleLen }
|
||||
var score = 0
|
||||
var lastTargetI = -1
|
||||
for(var i = 0; i < searchLen; ++i) { var targetI = matchesBest[i]
|
||||
// score only goes down if they're not consecutive
|
||||
if(lastTargetI !== targetI - 1) score -= targetI
|
||||
lastTargetI = targetI
|
||||
}
|
||||
if(!successStrict) score *= 1000
|
||||
score -= targetLen - searchLen
|
||||
prepared.score = score
|
||||
prepared.indexes = new Array(matchesBestLen); for(var i = matchesBestLen - 1; i >= 0; --i) prepared.indexes[i] = matchesBest[i]
|
||||
|
||||
return prepared
|
||||
}
|
||||
},
|
||||
|
||||
prepareLowerCodes: function(str) {
|
||||
var strLen = str.length
|
||||
var lowerCodes = [] // new Array(strLen) sparse array is too slow
|
||||
var lower = str.toLowerCase()
|
||||
for(var i = 0; i < strLen; ++i) lowerCodes[i] = lower.charCodeAt(i)
|
||||
return lowerCodes
|
||||
},
|
||||
prepareBeginningIndexes: function(target) {
|
||||
var targetLen = target.length
|
||||
var beginningIndexes = []; var beginningIndexesLen = 0
|
||||
var wasUpper = false
|
||||
var wasAlphanum = false
|
||||
for(var i = 0; i < targetLen; ++i) {
|
||||
var targetCode = target.charCodeAt(i)
|
||||
var isUpper = targetCode>=65&&targetCode<=90
|
||||
var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57
|
||||
var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum
|
||||
wasUpper = isUpper
|
||||
wasAlphanum = isAlphanum
|
||||
if(isBeginning) beginningIndexes[beginningIndexesLen++] = i
|
||||
}
|
||||
return beginningIndexes
|
||||
},
|
||||
prepareNextBeginningIndexes: function(target) {
|
||||
var targetLen = target.length
|
||||
var beginningIndexes = fuzzysort.prepareBeginningIndexes(target)
|
||||
var nextBeginningIndexes = [] // new Array(targetLen) sparse array is too slow
|
||||
var lastIsBeginning = beginningIndexes[0]
|
||||
var lastIsBeginningI = 0
|
||||
for(var i = 0; i < targetLen; ++i) {
|
||||
if(lastIsBeginning > i) {
|
||||
nextBeginningIndexes[i] = lastIsBeginning
|
||||
} else {
|
||||
lastIsBeginning = beginningIndexes[++lastIsBeginningI]
|
||||
nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning
|
||||
}
|
||||
}
|
||||
return nextBeginningIndexes
|
||||
},
|
||||
|
||||
cleanup: cleanup,
|
||||
new: fuzzysortNew,
|
||||
}
|
||||
return fuzzysort
|
||||
} // fuzzysortNew
|
||||
|
||||
// This stuff is outside fuzzysortNew, because it's shared with instances of fuzzysort.new()
|
||||
var isNode = typeof require !== 'undefined' && typeof window === 'undefined'
|
||||
// var MAX_INT = Number.MAX_SAFE_INTEGER
|
||||
// var MIN_INT = Number.MIN_VALUE
|
||||
var preparedCache = new Map()
|
||||
var preparedSearchCache = new Map()
|
||||
var noResults = []; noResults.total = 0
|
||||
var matchesSimple = []; var matchesStrict = []
|
||||
function cleanup() { preparedCache.clear(); preparedSearchCache.clear(); matchesSimple = []; matchesStrict = [] }
|
||||
function defaultScoreFn(a) {
|
||||
var max = -9007199254740991
|
||||
for (var i = a.length - 1; i >= 0; --i) {
|
||||
var result = a[i]; if(result === null) continue
|
||||
var score = result.score
|
||||
if(score > max) max = score
|
||||
}
|
||||
if(max === -9007199254740991) return null
|
||||
return max
|
||||
}
|
||||
|
||||
// prop = 'key' 2.5ms optimized for this case, seems to be about as fast as direct obj[prop]
|
||||
// prop = 'key1.key2' 10ms
|
||||
// prop = ['key1', 'key2'] 27ms
|
||||
function getValue(obj, prop) {
|
||||
var tmp = obj[prop]; if(tmp !== undefined) return tmp
|
||||
var segs = prop
|
||||
if(!Array.isArray(prop)) segs = prop.split('.')
|
||||
var len = segs.length
|
||||
var i = -1
|
||||
while (obj && (++i < len)) obj = obj[segs[i]]
|
||||
return obj
|
||||
}
|
||||
|
||||
function isObj(x) { return typeof x === 'object' } // faster as a function
|
||||
|
||||
// Hacked version of https://github.com/lemire/FastPriorityQueue.js
|
||||
var fastpriorityqueue=function(){var r=[],o=0,e={};function n(){for(var e=0,n=r[e],c=1;c<o;){var f=c+1;e=c,f<o&&r[f].score<r[c].score&&(e=f),r[e-1>>1]=r[e],c=1+(e<<1)}for(var a=e-1>>1;e>0&&n.score<r[a].score;a=(e=a)-1>>1)r[e]=r[a];r[e]=n}return e.add=function(e){var n=o;r[o++]=e;for(var c=n-1>>1;n>0&&e.score<r[c].score;c=(n=c)-1>>1)r[n]=r[c];r[n]=e},e.poll=function(){if(0!==o){var e=r[0];return r[0]=r[--o],n(),e}},e.peek=function(e){if(0!==o)return r[0]},e.replaceTop=function(o){r[0]=o,n()},e};
|
||||
var q = fastpriorityqueue() // reuse this, except for async, it needs to make its own
|
||||
|
||||
return fuzzysortNew()
|
||||
}) // UMD
|
||||
|
||||
// TODO: (performance) wasm version!?
|
||||
|
||||
// TODO: (performance) layout memory in an optimal way to go fast by avoiding cache misses
|
||||
|
||||
// TODO: (performance) preparedCache is a memory leak
|
||||
|
||||
// TODO: (like sublime) backslash === forwardslash
|
||||
|
||||
// TODO: (performance) i have no idea how well optizmied the allowing typos algorithm is
|
|
@ -1,111 +0,0 @@
|
|||
|
||||
.CodeMirror-merge {
|
||||
position: relative;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.CodeMirror-merge, .CodeMirror-merge .CodeMirror {
|
||||
min-height:50px;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 48%; }
|
||||
.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 4%; }
|
||||
.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }
|
||||
.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }
|
||||
|
||||
.CodeMirror-merge-pane {
|
||||
display: inline-block;
|
||||
white-space: normal;
|
||||
vertical-align: top;
|
||||
}
|
||||
.CodeMirror-merge-pane-rightmost {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-gap {
|
||||
z-index: 2;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background: #515151;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-scrolllock-wrap {
|
||||
position: absolute;
|
||||
bottom: 0; left: 50%;
|
||||
}
|
||||
.CodeMirror-merge-scrolllock {
|
||||
position: relative;
|
||||
left: -50%;
|
||||
cursor: pointer;
|
||||
color: #d8d8d8;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
right: 0; bottom: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copy {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
color: #ce374b;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copy-reverse {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
color: #44c;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }
|
||||
.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }
|
||||
|
||||
.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
|
||||
background-position: bottom left;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
|
||||
background-position: bottom left;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-r-chunk { background: #9a6868; }
|
||||
.CodeMirror-merge-r-chunk-start { /*border-top: 1px solid #ee8; */}
|
||||
.CodeMirror-merge-r-chunk-end {/* border-bottom: 1px solid #ee8; */}
|
||||
.CodeMirror-merge-r-connect { fill:#9a6868;}
|
||||
|
||||
.CodeMirror-merge-l-chunk { background: #eef; }
|
||||
.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }
|
||||
.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }
|
||||
.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }
|
||||
|
||||
.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }
|
||||
.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }
|
||||
.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }
|
||||
|
||||
.CodeMirror-merge-collapsed-widget:before {
|
||||
content: "(...)";
|
||||
}
|
||||
.CodeMirror-merge-collapsed-widget {
|
||||
cursor: pointer;
|
||||
color: #88b;
|
||||
background: #eef;
|
||||
border: 1px solid #ddf;
|
||||
font-size: 90%;
|
||||
padding: 0 3px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }
|
|
@ -1,692 +0,0 @@
|
|||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
// mode javascript
|
||||
// TODO actually recognize syntax of TypeScript constructs
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
||||
var indentUnit = config.indentUnit;
|
||||
var statementIndent = parserConfig.statementIndent;
|
||||
var jsonldMode = parserConfig.jsonld;
|
||||
var jsonMode = parserConfig.json || jsonldMode;
|
||||
var isTS = parserConfig.typescript;
|
||||
var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
|
||||
|
||||
// Tokenizer
|
||||
|
||||
var keywords = function(){
|
||||
function kw(type) {return {type: type, style: "keyword"};}
|
||||
var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
|
||||
var operator = kw("operator"), atom = {type: "atom", style: "atom"};
|
||||
|
||||
var jsKeywords = {
|
||||
"if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
|
||||
"return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, "debugger": C,
|
||||
"var": kw("var"), "const": kw("var"), "let": kw("var"),
|
||||
"function": kw("function"), "catch": kw("catch"),
|
||||
"for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
|
||||
"in": operator, "typeof": operator, "instanceof": operator,
|
||||
"true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
|
||||
"this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"),
|
||||
"yield": C, "export": kw("export"), "import": kw("import"), "extends": C
|
||||
};
|
||||
|
||||
// Extend the 'normal' keywords with the TypeScript language extensions
|
||||
if (isTS) {
|
||||
var type = {type: "variable", style: "variable-3"};
|
||||
var tsKeywords = {
|
||||
// object-like things
|
||||
"interface": kw("interface"),
|
||||
"extends": kw("extends"),
|
||||
"constructor": kw("constructor"),
|
||||
|
||||
// scope modifiers
|
||||
"public": kw("public"),
|
||||
"private": kw("private"),
|
||||
"protected": kw("protected"),
|
||||
"static": kw("static"),
|
||||
|
||||
// types
|
||||
"string": type, "number": type, "bool": type, "any": type
|
||||
};
|
||||
|
||||
for (var attr in tsKeywords) {
|
||||
jsKeywords[attr] = tsKeywords[attr];
|
||||
}
|
||||
}
|
||||
|
||||
return jsKeywords;
|
||||
}();
|
||||
|
||||
var isOperatorChar = /[+\-*&%=<>!?|~^]/;
|
||||
var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
|
||||
|
||||
function readRegexp(stream) {
|
||||
var escaped = false, next, inSet = false;
|
||||
while ((next = stream.next()) != null) {
|
||||
if (!escaped) {
|
||||
if (next == "/" && !inSet) return;
|
||||
if (next == "[") inSet = true;
|
||||
else if (inSet && next == "]") inSet = false;
|
||||
}
|
||||
escaped = !escaped && next == "\\";
|
||||
}
|
||||
}
|
||||
|
||||
// Used as scratch variables to communicate multiple values without
|
||||
// consing up tons of objects.
|
||||
var type, content;
|
||||
function ret(tp, style, cont) {
|
||||
type = tp; content = cont;
|
||||
return style;
|
||||
}
|
||||
function tokenBase(stream, state) {
|
||||
var ch = stream.next();
|
||||
if (ch == '"' || ch == "'") {
|
||||
state.tokenize = tokenString(ch);
|
||||
return state.tokenize(stream, state);
|
||||
} else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
|
||||
return ret("number", "number");
|
||||
} else if (ch == "." && stream.match("..")) {
|
||||
return ret("spread", "meta");
|
||||
} else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
|
||||
return ret(ch);
|
||||
} else if (ch == "=" && stream.eat(">")) {
|
||||
return ret("=>", "operator");
|
||||
} else if (ch == "0" && stream.eat(/x/i)) {
|
||||
stream.eatWhile(/[\da-f]/i);
|
||||
return ret("number", "number");
|
||||
} else if (/\d/.test(ch)) {
|
||||
stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
|
||||
return ret("number", "number");
|
||||
} else if (ch == "/") {
|
||||
if (stream.eat("*")) {
|
||||
state.tokenize = tokenComment;
|
||||
return tokenComment(stream, state);
|
||||
} else if (stream.eat("/")) {
|
||||
stream.skipToEnd();
|
||||
return ret("comment", "comment");
|
||||
} else if (state.lastType == "operator" || state.lastType == "keyword c" ||
|
||||
state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) {
|
||||
readRegexp(stream);
|
||||
stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);
|
||||
return ret("regexp", "string-2");
|
||||
} else {
|
||||
stream.eatWhile(isOperatorChar);
|
||||
return ret("operator", "operator", stream.current());
|
||||
}
|
||||
} else if (ch == "`") {
|
||||
state.tokenize = tokenQuasi;
|
||||
return tokenQuasi(stream, state);
|
||||
} else if (ch == "#") {
|
||||
stream.skipToEnd();
|
||||
return ret("error", "error");
|
||||
} else if (isOperatorChar.test(ch)) {
|
||||
stream.eatWhile(isOperatorChar);
|
||||
return ret("operator", "operator", stream.current());
|
||||
} else if (wordRE.test(ch)) {
|
||||
stream.eatWhile(wordRE);
|
||||
var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];
|
||||
return (known && state.lastType != ".") ? ret(known.type, known.style, word) :
|
||||
ret("variable", "variable", word);
|
||||
}
|
||||
}
|
||||
|
||||
function tokenString(quote) {
|
||||
return function(stream, state) {
|
||||
var escaped = false, next;
|
||||
if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
|
||||
state.tokenize = tokenBase;
|
||||
return ret("jsonld-keyword", "meta");
|
||||
}
|
||||
while ((next = stream.next()) != null) {
|
||||
if (next == quote && !escaped) break;
|
||||
escaped = !escaped && next == "\\";
|
||||
}
|
||||
if (!escaped) state.tokenize = tokenBase;
|
||||
return ret("string", "string");
|
||||
};
|
||||
}
|
||||
|
||||
function tokenComment(stream, state) {
|
||||
var maybeEnd = false, ch;
|
||||
while (ch = stream.next()) {
|
||||
if (ch == "/" && maybeEnd) {
|
||||
state.tokenize = tokenBase;
|
||||
break;
|
||||
}
|
||||
maybeEnd = (ch == "*");
|
||||
}
|
||||
return ret("comment", "comment");
|
||||
}
|
||||
|
||||
function tokenQuasi(stream, state) {
|
||||
var escaped = false, next;
|
||||
while ((next = stream.next()) != null) {
|
||||
if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
|
||||
state.tokenize = tokenBase;
|
||||
break;
|
||||
}
|
||||
escaped = !escaped && next == "\\";
|
||||
}
|
||||
return ret("quasi", "string-2", stream.current());
|
||||
}
|
||||
|
||||
var brackets = "([{}])";
|
||||
// This is a crude lookahead trick to try and notice that we're
|
||||
// parsing the argument patterns for a fat-arrow function before we
|
||||
// actually hit the arrow token. It only works if the arrow is on
|
||||
// the same line as the arguments and there's no strange noise
|
||||
// (comments) in between. Fallback is to only notice when we hit the
|
||||
// arrow, and not declare the arguments as locals for the arrow
|
||||
// body.
|
||||
function findFatArrow(stream, state) {
|
||||
if (state.fatArrowAt) state.fatArrowAt = null;
|
||||
var arrow = stream.string.indexOf("=>", stream.start);
|
||||
if (arrow < 0) return;
|
||||
|
||||
var depth = 0, sawSomething = false;
|
||||
for (var pos = arrow - 1; pos >= 0; --pos) {
|
||||
var ch = stream.string.charAt(pos);
|
||||
var bracket = brackets.indexOf(ch);
|
||||
if (bracket >= 0 && bracket < 3) {
|
||||
if (!depth) { ++pos; break; }
|
||||
if (--depth == 0) break;
|
||||
} else if (bracket >= 3 && bracket < 6) {
|
||||
++depth;
|
||||
} else if (wordRE.test(ch)) {
|
||||
sawSomething = true;
|
||||
} else if (/["'\/]/.test(ch)) {
|
||||
return;
|
||||
} else if (sawSomething && !depth) {
|
||||
++pos;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (sawSomething && !depth) state.fatArrowAt = pos;
|
||||
}
|
||||
|
||||
// Parser
|
||||
|
||||
var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
|
||||
|
||||
function JSLexical(indented, column, type, align, prev, info) {
|
||||
this.indented = indented;
|
||||
this.column = column;
|
||||
this.type = type;
|
||||
this.prev = prev;
|
||||
this.info = info;
|
||||
if (align != null) this.align = align;
|
||||
}
|
||||
|
||||
function inScope(state, varname) {
|
||||
for (var v = state.localVars; v; v = v.next)
|
||||
if (v.name == varname) return true;
|
||||
for (var cx = state.context; cx; cx = cx.prev) {
|
||||
for (var v = cx.vars; v; v = v.next)
|
||||
if (v.name == varname) return true;
|
||||
}
|
||||
}
|
||||
|
||||
function parseJS(state, style, type, content, stream) {
|
||||
var cc = state.cc;
|
||||
// Communicate our context to the combinators.
|
||||
// (Less wasteful than consing up a hundred closures on every call.)
|
||||
cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
|
||||
|
||||
if (!state.lexical.hasOwnProperty("align"))
|
||||
state.lexical.align = true;
|
||||
|
||||
while(true) {
|
||||
var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
|
||||
if (combinator(type, content)) {
|
||||
while(cc.length && cc[cc.length - 1].lex)
|
||||
cc.pop()();
|
||||
if (cx.marked) return cx.marked;
|
||||
if (type == "variable" && inScope(state, content)) return "variable-2";
|
||||
return style;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Combinator utils
|
||||
|
||||
var cx = {state: null, column: null, marked: null, cc: null};
|
||||
function pass() {
|
||||
for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
|
||||
}
|
||||
function cont() {
|
||||
pass.apply(null, arguments);
|
||||
return true;
|
||||
}
|
||||
function register(varname) {
|
||||
function inList(list) {
|
||||
for (var v = list; v; v = v.next)
|
||||
if (v.name == varname) return true;
|
||||
return false;
|
||||
}
|
||||
var state = cx.state;
|
||||
if (state.context) {
|
||||
cx.marked = "def";
|
||||
if (inList(state.localVars)) return;
|
||||
state.localVars = {name: varname, next: state.localVars};
|
||||
} else {
|
||||
if (inList(state.globalVars)) return;
|
||||
if (parserConfig.globalVars)
|
||||
state.globalVars = {name: varname, next: state.globalVars};
|
||||
}
|
||||
}
|
||||
|
||||
// Combinators
|
||||
|
||||
var defaultVars = {name: "this", next: {name: "arguments"}};
|
||||
function pushcontext() {
|
||||
cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
|
||||
cx.state.localVars = defaultVars;
|
||||
}
|
||||
function popcontext() {
|
||||
cx.state.localVars = cx.state.context.vars;
|
||||
cx.state.context = cx.state.context.prev;
|
||||
}
|
||||
function pushlex(type, info) {
|
||||
var result = function() {
|
||||
var state = cx.state, indent = state.indented;
|
||||
if (state.lexical.type == "stat") indent = state.lexical.indented;
|
||||
else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
|
||||
indent = outer.indented;
|
||||
state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
|
||||
};
|
||||
result.lex = true;
|
||||
return result;
|
||||
}
|
||||
function poplex() {
|
||||
var state = cx.state;
|
||||
if (state.lexical.prev) {
|
||||
if (state.lexical.type == ")")
|
||||
state.indented = state.lexical.indented;
|
||||
state.lexical = state.lexical.prev;
|
||||
}
|
||||
}
|
||||
poplex.lex = true;
|
||||
|
||||
function expect(wanted) {
|
||||
function exp(type) {
|
||||
if (type == wanted) return cont();
|
||||
else if (wanted == ";") return pass();
|
||||
else return cont(exp);
|
||||
};
|
||||
return exp;
|
||||
}
|
||||
|
||||
function statement(type, value) {
|
||||
if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex);
|
||||
if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex);
|
||||
if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
|
||||
if (type == "{") return cont(pushlex("}"), block, poplex);
|
||||
if (type == ";") return cont();
|
||||
if (type == "if") {
|
||||
if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
|
||||
cx.state.cc.pop()();
|
||||
return cont(pushlex("form"), expression, statement, poplex, maybeelse);
|
||||
}
|
||||
if (type == "function") return cont(functiondef);
|
||||
if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
|
||||
if (type == "variable") return cont(pushlex("stat"), maybelabel);
|
||||
if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"),
|
||||
block, poplex, poplex);
|
||||
if (type == "case") return cont(expression, expect(":"));
|
||||
if (type == "default") return cont(expect(":"));
|
||||
if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
|
||||
statement, poplex, popcontext);
|
||||
if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex);
|
||||
if (type == "class") return cont(pushlex("form"), className, poplex);
|
||||
if (type == "export") return cont(pushlex("form"), afterExport, poplex);
|
||||
if (type == "import") return cont(pushlex("form"), afterImport, poplex);
|
||||
return pass(pushlex("stat"), expression, expect(";"), poplex);
|
||||
}
|
||||
function expression(type) {
|
||||
return expressionInner(type, false);
|
||||
}
|
||||
function expressionNoComma(type) {
|
||||
return expressionInner(type, true);
|
||||
}
|
||||
function expressionInner(type, noComma) {
|
||||
if (cx.state.fatArrowAt == cx.stream.start) {
|
||||
var body = noComma ? arrowBodyNoComma : arrowBody;
|
||||
if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext);
|
||||
else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
|
||||
}
|
||||
|
||||
var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
|
||||
if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
|
||||
if (type == "function") return cont(functiondef, maybeop);
|
||||
if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression);
|
||||
if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop);
|
||||
if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
|
||||
if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
|
||||
if (type == "{") return contCommasep(objprop, "}", null, maybeop);
|
||||
if (type == "quasi") { return pass(quasi, maybeop); }
|
||||
return cont();
|
||||
}
|
||||
function maybeexpression(type) {
|
||||
if (type.match(/[;\}\)\],]/)) return pass();
|
||||
return pass(expression);
|
||||
}
|
||||
function maybeexpressionNoComma(type) {
|
||||
if (type.match(/[;\}\)\],]/)) return pass();
|
||||
return pass(expressionNoComma);
|
||||
}
|
||||
|
||||
function maybeoperatorComma(type, value) {
|
||||
if (type == ",") return cont(expression);
|
||||
return maybeoperatorNoComma(type, value, false);
|
||||
}
|
||||
function maybeoperatorNoComma(type, value, noComma) {
|
||||
var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
|
||||
var expr = noComma == false ? expression : expressionNoComma;
|
||||
if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
|
||||
if (type == "operator") {
|
||||
if (/\+\+|--/.test(value)) return cont(me);
|
||||
if (value == "?") return cont(expression, expect(":"), expr);
|
||||
return cont(expr);
|
||||
}
|
||||
if (type == "quasi") { return pass(quasi, me); }
|
||||
if (type == ";") return;
|
||||
if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
|
||||
if (type == ".") return cont(property, me);
|
||||
if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
|
||||
}
|
||||
function quasi(type, value) {
|
||||
if (type != "quasi") return pass();
|
||||
if (value.slice(value.length - 2) != "${") return cont(quasi);
|
||||
return cont(expression, continueQuasi);
|
||||
}
|
||||
function continueQuasi(type) {
|
||||
if (type == "}") {
|
||||
cx.marked = "string-2";
|
||||
cx.state.tokenize = tokenQuasi;
|
||||
return cont(quasi);
|
||||
}
|
||||
}
|
||||
function arrowBody(type) {
|
||||
findFatArrow(cx.stream, cx.state);
|
||||
return pass(type == "{" ? statement : expression);
|
||||
}
|
||||
function arrowBodyNoComma(type) {
|
||||
findFatArrow(cx.stream, cx.state);
|
||||
return pass(type == "{" ? statement : expressionNoComma);
|
||||
}
|
||||
function maybelabel(type) {
|
||||
if (type == ":") return cont(poplex, statement);
|
||||
return pass(maybeoperatorComma, expect(";"), poplex);
|
||||
}
|
||||
function property(type) {
|
||||
if (type == "variable") {cx.marked = "property"; return cont();}
|
||||
}
|
||||
function objprop(type, value) {
|
||||
if (type == "variable" || cx.style == "keyword") {
|
||||
cx.marked = "property";
|
||||
if (value == "get" || value == "set") return cont(getterSetter);
|
||||
return cont(afterprop);
|
||||
} else if (type == "number" || type == "string") {
|
||||
cx.marked = jsonldMode ? "property" : (cx.style + " property");
|
||||
return cont(afterprop);
|
||||
} else if (type == "jsonld-keyword") {
|
||||
return cont(afterprop);
|
||||
} else if (type == "[") {
|
||||
return cont(expression, expect("]"), afterprop);
|
||||
}
|
||||
}
|
||||
function getterSetter(type) {
|
||||
if (type != "variable") return pass(afterprop);
|
||||
cx.marked = "property";
|
||||
return cont(functiondef);
|
||||
}
|
||||
function afterprop(type) {
|
||||
if (type == ":") return cont(expressionNoComma);
|
||||
if (type == "(") return pass(functiondef);
|
||||
}
|
||||
function commasep(what, end) {
|
||||
function proceed(type) {
|
||||
if (type == ",") {
|
||||
var lex = cx.state.lexical;
|
||||
if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
|
||||
return cont(what, proceed);
|
||||
}
|
||||
if (type == end) return cont();
|
||||
return cont(expect(end));
|
||||
}
|
||||
return function(type) {
|
||||
if (type == end) return cont();
|
||||
return pass(what, proceed);
|
||||
};
|
||||
}
|
||||
function contCommasep(what, end, info) {
|
||||
for (var i = 3; i < arguments.length; i++)
|
||||
cx.cc.push(arguments[i]);
|
||||
return cont(pushlex(end, info), commasep(what, end), poplex);
|
||||
}
|
||||
function block(type) {
|
||||
if (type == "}") return cont();
|
||||
return pass(statement, block);
|
||||
}
|
||||
function maybetype(type) {
|
||||
if (isTS && type == ":") return cont(typedef);
|
||||
}
|
||||
function typedef(type) {
|
||||
if (type == "variable"){cx.marked = "variable-3"; return cont();}
|
||||
}
|
||||
function vardef() {
|
||||
return pass(pattern, maybetype, maybeAssign, vardefCont);
|
||||
}
|
||||
function pattern(type, value) {
|
||||
if (type == "variable") { register(value); return cont(); }
|
||||
if (type == "[") return contCommasep(pattern, "]");
|
||||
if (type == "{") return contCommasep(proppattern, "}");
|
||||
}
|
||||
function proppattern(type, value) {
|
||||
if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
|
||||
register(value);
|
||||
return cont(maybeAssign);
|
||||
}
|
||||
if (type == "variable") cx.marked = "property";
|
||||
return cont(expect(":"), pattern, maybeAssign);
|
||||
}
|
||||
function maybeAssign(_type, value) {
|
||||
if (value == "=") return cont(expressionNoComma);
|
||||
}
|
||||
function vardefCont(type) {
|
||||
if (type == ",") return cont(vardef);
|
||||
}
|
||||
function maybeelse(type, value) {
|
||||
if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
|
||||
}
|
||||
function forspec(type) {
|
||||
if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
|
||||
}
|
||||
function forspec1(type) {
|
||||
if (type == "var") return cont(vardef, expect(";"), forspec2);
|
||||
if (type == ";") return cont(forspec2);
|
||||
if (type == "variable") return cont(formaybeinof);
|
||||
return pass(expression, expect(";"), forspec2);
|
||||
}
|
||||
function formaybeinof(_type, value) {
|
||||
if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
|
||||
return cont(maybeoperatorComma, forspec2);
|
||||
}
|
||||
function forspec2(type, value) {
|
||||
if (type == ";") return cont(forspec3);
|
||||
if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
|
||||
return pass(expression, expect(";"), forspec3);
|
||||
}
|
||||
function forspec3(type) {
|
||||
if (type != ")") cont(expression);
|
||||
}
|
||||
function functiondef(type, value) {
|
||||
if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
|
||||
if (type == "variable") {register(value); return cont(functiondef);}
|
||||
if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext);
|
||||
}
|
||||
function funarg(type) {
|
||||
if (type == "spread") return cont(funarg);
|
||||
return pass(pattern, maybetype);
|
||||
}
|
||||
function className(type, value) {
|
||||
if (type == "variable") {register(value); return cont(classNameAfter);}
|
||||
}
|
||||
function classNameAfter(type, value) {
|
||||
if (value == "extends") return cont(expression, classNameAfter);
|
||||
if (type == "{") return cont(pushlex("}"), classBody, poplex);
|
||||
}
|
||||
function classBody(type, value) {
|
||||
if (type == "variable" || cx.style == "keyword") {
|
||||
cx.marked = "property";
|
||||
if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody);
|
||||
return cont(functiondef, classBody);
|
||||
}
|
||||
if (value == "*") {
|
||||
cx.marked = "keyword";
|
||||
return cont(classBody);
|
||||
}
|
||||
if (type == ";") return cont(classBody);
|
||||
if (type == "}") return cont();
|
||||
}
|
||||
function classGetterSetter(type) {
|
||||
if (type != "variable") return pass();
|
||||
cx.marked = "property";
|
||||
return cont();
|
||||
}
|
||||
function afterModule(type, value) {
|
||||
if (type == "string") return cont(statement);
|
||||
if (type == "variable") { register(value); return cont(maybeFrom); }
|
||||
}
|
||||
function afterExport(_type, value) {
|
||||
if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
|
||||
if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
|
||||
return pass(statement);
|
||||
}
|
||||
function afterImport(type) {
|
||||
if (type == "string") return cont();
|
||||
return pass(importSpec, maybeFrom);
|
||||
}
|
||||
function importSpec(type, value) {
|
||||
if (type == "{") return contCommasep(importSpec, "}");
|
||||
if (type == "variable") register(value);
|
||||
return cont();
|
||||
}
|
||||
function maybeFrom(_type, value) {
|
||||
if (value == "from") { cx.marked = "keyword"; return cont(expression); }
|
||||
}
|
||||
function arrayLiteral(type) {
|
||||
if (type == "]") return cont();
|
||||
return pass(expressionNoComma, maybeArrayComprehension);
|
||||
}
|
||||
function maybeArrayComprehension(type) {
|
||||
if (type == "for") return pass(comprehension, expect("]"));
|
||||
if (type == ",") return cont(commasep(maybeexpressionNoComma, "]"));
|
||||
return pass(commasep(expressionNoComma, "]"));
|
||||
}
|
||||
function comprehension(type) {
|
||||
if (type == "for") return cont(forspec, comprehension);
|
||||
if (type == "if") return cont(expression, comprehension);
|
||||
}
|
||||
|
||||
function isContinuedStatement(state, textAfter) {
|
||||
return state.lastType == "operator" || state.lastType == "," ||
|
||||
isOperatorChar.test(textAfter.charAt(0)) ||
|
||||
/[,.]/.test(textAfter.charAt(0));
|
||||
}
|
||||
|
||||
// Interface
|
||||
|
||||
return {
|
||||
startState: function(basecolumn) {
|
||||
var state = {
|
||||
tokenize: tokenBase,
|
||||
lastType: "sof",
|
||||
cc: [],
|
||||
lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
|
||||
localVars: parserConfig.localVars,
|
||||
context: parserConfig.localVars && {vars: parserConfig.localVars},
|
||||
indented: 0
|
||||
};
|
||||
if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
|
||||
state.globalVars = parserConfig.globalVars;
|
||||
return state;
|
||||
},
|
||||
|
||||
token: function(stream, state) {
|
||||
if (stream.sol()) {
|
||||
if (!state.lexical.hasOwnProperty("align"))
|
||||
state.lexical.align = false;
|
||||
state.indented = stream.indentation();
|
||||
findFatArrow(stream, state);
|
||||
}
|
||||
if (state.tokenize != tokenComment && stream.eatSpace()) return null;
|
||||
var style = state.tokenize(stream, state);
|
||||
if (type == "comment") return style;
|
||||
state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
|
||||
return parseJS(state, style, type, content, stream);
|
||||
},
|
||||
|
||||
indent: function(state, textAfter) {
|
||||
if (state.tokenize == tokenComment) return CodeMirror.Pass;
|
||||
if (state.tokenize != tokenBase) return 0;
|
||||
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;
|
||||
// Kludge to prevent 'maybelse' from blocking lexical scope pops
|
||||
if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
|
||||
var c = state.cc[i];
|
||||
if (c == poplex) lexical = lexical.prev;
|
||||
else if (c != maybeelse) break;
|
||||
}
|
||||
if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
|
||||
if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
|
||||
lexical = lexical.prev;
|
||||
var type = lexical.type, closing = firstChar == type;
|
||||
|
||||
if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0);
|
||||
else if (type == "form" && firstChar == "{") return lexical.indented;
|
||||
else if (type == "form") return lexical.indented + indentUnit;
|
||||
else if (type == "stat")
|
||||
return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
|
||||
else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
|
||||
return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
|
||||
else if (lexical.align) return lexical.column + (closing ? 0 : 1);
|
||||
else return lexical.indented + (closing ? 0 : indentUnit);
|
||||
},
|
||||
|
||||
electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
|
||||
blockCommentStart: jsonMode ? null : "/*",
|
||||
blockCommentEnd: jsonMode ? null : "*/",
|
||||
lineComment: jsonMode ? null : "//",
|
||||
fold: "brace",
|
||||
|
||||
helperType: jsonMode ? "json" : "javascript",
|
||||
jsonldMode: jsonldMode,
|
||||
jsonMode: jsonMode
|
||||
};
|
||||
});
|
||||
|
||||
CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
|
||||
|
||||
CodeMirror.defineMIME("text/javascript", "javascript");
|
||||
CodeMirror.defineMIME("text/ecmascript", "javascript");
|
||||
CodeMirror.defineMIME("application/javascript", "javascript");
|
||||
CodeMirror.defineMIME("application/x-javascript", "javascript");
|
||||
CodeMirror.defineMIME("application/ecmascript", "javascript");
|
||||
CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
|
||||
CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
|
||||
CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
|
||||
CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
|
||||
CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
|
||||
|
||||
});
|
|
@ -1,427 +0,0 @@
|
|||
//需求:表情栏可以隐藏显示,高度只要一点高
|
||||
function sd_create_editor(params) {
|
||||
// var minHeight; //最小高度
|
||||
var paramsHeight = params.height; //设定的高度
|
||||
var id = arguments[1] ? arguments[1] : undefined;
|
||||
var type = arguments[2] ? arguments[2] : '';
|
||||
var paramsWidth = params.width == undefined ? "100%" : params.width;
|
||||
|
||||
var editor = params.kindutil.create(params.textarea, {
|
||||
resizeType: 1, minWidth: "1px", width: "94%",
|
||||
height: "33px",// == undefined ? "30px":paramsHeight+"px",
|
||||
minHeight: "33px",// == undefined ? "30px":paramsHeight+"px",
|
||||
width: params.width,
|
||||
/*
|
||||
items:['emoticons','fontname',
|
||||
'forecolor', 'hilitecolor', 'bold', '|', 'justifyleft', 'justifycenter', 'insertorderedlist','insertunorderedlist', '|',
|
||||
'formatblock', 'fontsize', '|','indent', 'outdent',
|
||||
'|','imagedirectupload','more'],*/
|
||||
items: ['code', 'emoticons', 'fontname',
|
||||
'forecolor', 'hilitecolor', 'bold', '|', 'justifyleft', 'justifycenter', 'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'formatblock', 'fontsize', '|', 'indent', 'outdent',
|
||||
'|', 'imagedirectupload', 'table', 'media', 'preview', "more"
|
||||
],
|
||||
afterChange: function () {//按键事件
|
||||
var edit = this.edit;
|
||||
var body = edit.doc.body;
|
||||
edit.iframe.height(paramsHeight);
|
||||
this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : (params.kindutil.GECKO ? body.offsetHeight + 26 : body.offsetHeight + 7)), paramsHeight));
|
||||
},
|
||||
afterBlur: function () {
|
||||
//params.toolbar_container.hide();
|
||||
params.textarea.blur();
|
||||
sd_check_editor_form_field({ content: this, contentmsg: params.contentmsg, textarea: params.textarea });
|
||||
if (this.isEmpty()) {
|
||||
this.edit.html("<span id='hint' style='color:#999999;font-size:12px;'>我要回复</span>");
|
||||
}
|
||||
//params.toolbar_container.hide();
|
||||
$('#reply_image_' + id).addClass('imageFuzzy');
|
||||
if (/^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(this.edit.html())) {
|
||||
params.submit_btn.hide();
|
||||
params.toolbar_container.hide();
|
||||
this.resize("100%", null);
|
||||
} else if (this.edit.html().trim() != "") {
|
||||
params.submit_btn.show();
|
||||
params.toolbar_container.show();
|
||||
}
|
||||
|
||||
//params.submit_btn.css("display","none");
|
||||
|
||||
},
|
||||
afterFocus: function () {
|
||||
var edit = this.edit;
|
||||
var body = edit.doc.body;
|
||||
if (/^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(edit.html())) {
|
||||
edit.html('');
|
||||
}
|
||||
params.submit_btn.show();
|
||||
params.contentmsg.hide();
|
||||
params.toolbar_container.show();
|
||||
// params.toolbar_container.show();
|
||||
$('#reply_image_' + id).removeClass('imageFuzzy');
|
||||
//edit.iframe.width(paramsWidth);
|
||||
|
||||
this.resize("100%", null);
|
||||
this.resize(paramsWidth, null);
|
||||
//params.submit_btn.show();
|
||||
|
||||
},
|
||||
|
||||
afterCreate: function () {
|
||||
//params.submit_btn.hide();
|
||||
var toolbar = $("div[class='ke-toolbar']", params.div_form);
|
||||
toolbar.css('display', 'inline');
|
||||
toolbar.css('padding', 0);
|
||||
$(".ke-outline>.ke-toolbar-icon", toolbar).append('表情');
|
||||
params.toolbar_container.append(toolbar);
|
||||
params.toolbar_container.hide();
|
||||
params.submit_btn.hide();
|
||||
//init
|
||||
var edit = this.edit;
|
||||
var body = edit.doc.body;
|
||||
edit.iframe[0].scroll = 'no';
|
||||
body.style.overflowY = 'hidden';
|
||||
//reset height
|
||||
paramsHeight = paramsHeight == undefined ? params.kindutil.removeUnit(this.height) : paramsHeight;
|
||||
edit.iframe.height(paramsHeight);
|
||||
edit.html("<span id='hint' style='color:#999999;font-size:12px;'>我要回复</span>");
|
||||
this.resize(null, paramsHeight);// Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight)+ paramsHeight , paramsHeight)
|
||||
// params.toolbar_container.hide();
|
||||
if (typeof enableAt === 'function') {
|
||||
enableAt(this, id, type);
|
||||
}
|
||||
}
|
||||
}).loadPlugin('paste');
|
||||
return editor;
|
||||
}
|
||||
|
||||
function sd_create_shixun_editor(params) {
|
||||
// var minHeight; //最小高度
|
||||
var paramsHeight = params.height; //设定的高度
|
||||
var id = arguments[1] ? arguments[1] : undefined;
|
||||
var type = arguments[2] ? arguments[2] : '';
|
||||
var paramsWidth = params.width == undefined ? "100%" : params.width;
|
||||
|
||||
var editor = params.kindutil.create(params.textarea, {
|
||||
resizeType: 1, minWidth: "1px", width: "94%",
|
||||
height: "33px",// == undefined ? "30px":paramsHeight+"px",
|
||||
minHeight: "33px",// == undefined ? "30px":paramsHeight+"px",
|
||||
width: params.width,
|
||||
/*
|
||||
items:['emoticons','fontname',
|
||||
'forecolor', 'hilitecolor', 'bold', '|', 'justifyleft', 'justifycenter', 'insertorderedlist','insertunorderedlist', '|',
|
||||
'formatblock', 'fontsize', '|','indent', 'outdent',
|
||||
'|','imagedirectupload','more'],*/
|
||||
items: ['imagedirectupload'],
|
||||
afterChange: function () {//按键事件
|
||||
if (this.isEmpty() || this.edit.doc.body.innerText == '说点什么') {
|
||||
$('#mini_comment_section').height('auto')
|
||||
} else {
|
||||
var edit = this.edit;
|
||||
var body = edit.doc.body;
|
||||
var newHeight = 0;
|
||||
|
||||
var FF = !(window.mozInnerScreenX == null);
|
||||
if (FF) { // 火狐下处理方式不一样
|
||||
newHeight = $(body).height()
|
||||
} else {
|
||||
$(body).children().each(function () { newHeight += $(this).height() });
|
||||
}
|
||||
// var newHeight = $(body).height()
|
||||
|
||||
var maxHeight = 357 // $(window).height() - 150 - 57; // 150 上部距离 57 下部距离
|
||||
|
||||
newHeight = newHeight <= maxHeight ? newHeight : maxHeight
|
||||
|
||||
|
||||
if (newHeight > 150) {
|
||||
if (FF) { // 火狐下处理方式不一样
|
||||
this.resize("100%", (newHeight + 20) + 'px');
|
||||
} else {
|
||||
this.resize("100%", newHeight + 'px');
|
||||
}
|
||||
$('#mini_comment_section').height(newHeight + 57)
|
||||
} else {
|
||||
this.resize("100%", '150px');
|
||||
$('#mini_comment_section').height('auto')
|
||||
}
|
||||
}
|
||||
|
||||
//edit.iframe.height(paramsHeight);
|
||||
//this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : (params.kindutil.GECKO ? body.offsetHeight+26:body.offsetHeight+7)) , 15));
|
||||
},
|
||||
afterBlur: function () {
|
||||
//params.toolbar_container.hide();
|
||||
params.textarea.blur();
|
||||
sd_check_editor_form_field({ content: this, contentmsg: params.contentmsg, textarea: params.textarea });
|
||||
if (this.isEmpty()) {
|
||||
$('#mini_comment_section').height('auto')
|
||||
this.edit.html("<span id='hint' style='color:#999999;font-size:14px;'>说点什么</span>");
|
||||
params.submit_btn.hide();
|
||||
params.toolbar_container.hide();
|
||||
this.resize("100%", "30px");
|
||||
$("#dis_reply_id").val("");
|
||||
if ($("#editor_panel").length > 0) {
|
||||
$("#editor_panel").attr("style", "margin-top:9px;flex: 1;");
|
||||
$("#editor_panel").parents("form").addClass("df")
|
||||
}
|
||||
}
|
||||
//params.toolbar_container.hide();
|
||||
/*$('#reply_image_' + id).addClass('imageFuzzy');
|
||||
if(/^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(this.edit.html())){
|
||||
params.submit_btn.hide();
|
||||
params.toolbar_container.hide();
|
||||
this.resize("100%", "30px");
|
||||
}else if(this.edit.html().trim() != ""){
|
||||
params.submit_btn.show();
|
||||
params.toolbar_container.show();
|
||||
}*/
|
||||
//params.submit_btn.css("display","none");
|
||||
|
||||
// $('#mini_comment_section').height('auto')
|
||||
},
|
||||
afterFocus: function () {
|
||||
var edit = this.edit;
|
||||
var body = edit.doc.body;
|
||||
if (/^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(edit.html())) {
|
||||
edit.html("");
|
||||
}
|
||||
params.submit_btn.show();
|
||||
params.contentmsg.hide();
|
||||
params.toolbar_container.show();
|
||||
// params.toolbar_container.show();
|
||||
$('#reply_image_' + id).removeClass('imageFuzzy');
|
||||
//edit.iframe.width(paramsWidth);
|
||||
|
||||
var newHeight = $(body).height()
|
||||
if (newHeight < 150) {
|
||||
this.resize("100%", "150px");
|
||||
this.resize(paramsWidth, "150px");
|
||||
}
|
||||
if ($("#editor_panel").length > 0) {
|
||||
$("#editor_panel").attr("style", "width:100%;margin-top:9px;");
|
||||
$("#editor_panel").parents("form").removeClass("df")
|
||||
}
|
||||
//params.submit_btn.show();
|
||||
|
||||
// $('#mini_comment_section').height('244px')
|
||||
},
|
||||
|
||||
afterCreate: function () {
|
||||
//params.submit_btn.hide();
|
||||
var toolbar = $("div[class='ke-toolbar']", params.div_form);
|
||||
toolbar.css('display', 'inline');
|
||||
toolbar.css('padding', 0);
|
||||
$(".ke-outline>.ke-toolbar-icon", toolbar).append('表情');
|
||||
params.toolbar_container.append(toolbar);
|
||||
params.toolbar_container.hide();
|
||||
params.submit_btn.hide();
|
||||
//init
|
||||
var edit = this.edit;
|
||||
var body = edit.doc.body;
|
||||
edit.iframe[0].scroll = 'no';
|
||||
// body.style.overflowY = 'hidden';
|
||||
body.style['padding-top'] = '2px';
|
||||
body.style['padding-left'] = '5px';
|
||||
// <style type='text/css'>body{padding-top: 2px;padding-left: 5px;}</style>
|
||||
//reset height
|
||||
paramsHeight = paramsHeight == undefined ? params.kindutil.removeUnit(this.height) : paramsHeight;
|
||||
edit.iframe.height(paramsHeight);
|
||||
edit.html("<span id='hint' style='color:#999999;font-size:14px;'>说点什么</span>");
|
||||
this.resize(null, paramsHeight);// Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight)+ paramsHeight , paramsHeight)
|
||||
// params.toolbar_container.hide();
|
||||
if (typeof enableAt === 'function') {
|
||||
enableAt(this, id, type);
|
||||
}
|
||||
|
||||
var iframe = edit.iframe[0]
|
||||
$(iframe.contentDocument.head).append(
|
||||
$("<style type='text/css'>::-webkit-scrollbar{height: 10px;width: 6px !important;background: rgba(0,0,0,.1) !important;} ::-webkit-scrollbar-thumb {border-radius: 6px;background: #ADADAD;};</style>"));
|
||||
}
|
||||
}).loadPlugin('paste');
|
||||
return editor;
|
||||
}
|
||||
|
||||
function sd_check_editor_form_field(params) {
|
||||
var result = true;
|
||||
if (params.content != undefined) {
|
||||
if (params.content.isEmpty()) {
|
||||
result = false;
|
||||
}
|
||||
if (params.content.html() != params.textarea.html() || params.issubmit == true) {
|
||||
params.textarea.html(params.content.html());
|
||||
params.content.sync();
|
||||
if (params.content.isEmpty() || /^\s*<\w*\s*\w*\=\"\w*\"\s*\w*\=\"\w*\:\s*\#\d*\;\s*\w*\-\w*\:\s*\w*\;\"\>[\u4e00-\u9fa5]*<\/\w*\>\s*$/.test(params.textarea.html())) {
|
||||
params.contentmsg.html('内容不能为空');
|
||||
params.contentmsg.css({ color: '#ff0000' });
|
||||
} else {
|
||||
params.contentmsg.html('填写正确');
|
||||
params.contentmsg.css({ color: '#008000' });
|
||||
}
|
||||
params.contentmsg.show();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function sd_create_form(params) {
|
||||
params.form.submit(function () {
|
||||
var flag = false;
|
||||
if (params.form.attr('data-remote') != undefined) {
|
||||
flag = true
|
||||
}
|
||||
var is_checked = sd_check_editor_form_field({
|
||||
issubmit: true,
|
||||
content: params.editor,
|
||||
contentmsg: params.contentmsg,
|
||||
textarea: params.textarea
|
||||
});
|
||||
if (is_checked) {
|
||||
if (flag) {
|
||||
return true;
|
||||
} else {
|
||||
$(this)[0].submit();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
function sd_reset_editor_form(params) {
|
||||
params.form[0].reset();
|
||||
params.textarea.empty();
|
||||
if (params.editor != undefined) {
|
||||
params.editor.html(params.textarea.html());
|
||||
}
|
||||
params.contentmsg.hide();
|
||||
}
|
||||
//第二个参数是高度,可以传,可以不传
|
||||
function sd_create_editor_from_data(id) {
|
||||
var height = arguments[1] ? arguments[1] : undefined;
|
||||
var width = arguments[2] ? arguments[2] : undefined;
|
||||
var type = arguments[3] ? arguments[3] : undefined;
|
||||
var K = KindEditor;
|
||||
$("div[nhname='new_message_" + id + "']").each(function () {
|
||||
var params = {};
|
||||
params.kindutil = K;
|
||||
params.div_form = $(this);
|
||||
params.form = $("form", params.div_form);
|
||||
if (params.form == undefined || params.form.length == 0) {
|
||||
return;
|
||||
}
|
||||
params.textarea = $("textarea[nhname='new_message_textarea_" + id + "']", params.div_form);
|
||||
params.contentmsg = $("span[nhname='contentmsg_" + id + "']", params.div_form);
|
||||
params.toolbar_container = $("div[nhname='toolbar_container_" + id + "']", params.div_form);
|
||||
params.cancel_btn = $("#new_message_cancel_btn_" + id);
|
||||
params.submit_btn = $("#new_message_submit_btn_" + id);
|
||||
params.height = height;
|
||||
params.width = width;
|
||||
if (params.textarea.data('init') == undefined) {
|
||||
params.editor = sd_create_editor(params, id, type);
|
||||
sd_create_form(params);
|
||||
params.cancel_btn.click(function () {
|
||||
sd_reset_editor_form(params);
|
||||
});
|
||||
params.submit_btn.click(function () {
|
||||
var tContents = $("#comment_news_" + id).val();
|
||||
if (tContents != undefined) {
|
||||
var beforeImage = tContents.split("<img");
|
||||
var afterImage = tContents.split("/>");
|
||||
if (beforeImage[0] == "" && afterImage[1] == "") {
|
||||
notice_box('不支持纯图片评论<br/>请在评论中增加文字信息');
|
||||
return;
|
||||
}
|
||||
|
||||
if (tContents.startsWith('<') && tContents.endsWith('>')
|
||||
&& (tContents.indexOf('<link') != -1 || tContents.indexOf('<script') != -1)) {
|
||||
notice_box('不支持包含link或script标签的html内容');
|
||||
return;
|
||||
}
|
||||
}
|
||||
// react环境下,发消息给react组件
|
||||
if (window['__isR'] === true) {
|
||||
$(document).trigger("onReply", { commentContent: tContents, id: id, editor: params.editor });
|
||||
} else {
|
||||
params.form.submit();
|
||||
}
|
||||
});
|
||||
params.textarea.focus(function () {
|
||||
params.editor.focus();
|
||||
});
|
||||
params.textarea.data('init', 1);
|
||||
$(this).show();
|
||||
|
||||
__editor = params.editor
|
||||
}
|
||||
});
|
||||
// });
|
||||
|
||||
div_form = $("div[nhname='new_message_" + id + "']");
|
||||
$(".ke-edit", div_form).css("height", "33px");
|
||||
$(".ke-edit-iframe", div_form).css("height", "33px");
|
||||
|
||||
return __editor;
|
||||
}
|
||||
|
||||
|
||||
//第二个参数是高度,可以传,可以不传
|
||||
function sd_create_editor_from_shixun_data(id) {
|
||||
var height = arguments[1] ? arguments[1] : undefined;
|
||||
var width = arguments[2] ? arguments[2] : undefined;
|
||||
var type = arguments[3] ? arguments[3] : undefined;
|
||||
// KindEditor.ready(function (K) {
|
||||
// react 环境不需要ready方法,页面已经加载完了才执行sd_create_editor_from_data
|
||||
var K = KindEditor;
|
||||
|
||||
$("div[nhname='new_message_" + id + "']").each(function () {
|
||||
var params = {};
|
||||
params.kindutil = K;
|
||||
params.div_form = $(this);
|
||||
params.form = $("form", params.div_form);
|
||||
if (params.form == undefined || params.form.length == 0) {
|
||||
return;
|
||||
}
|
||||
params.textarea = $("textarea[nhname='new_message_textarea_" + id + "']", params.div_form);
|
||||
params.contentmsg = $("span[nhname='contentmsg_" + id + "']", params.div_form);
|
||||
params.toolbar_container = $("div[nhname='toolbar_container_" + id + "']", params.div_form);
|
||||
params.cancel_btn = $("#new_message_cancel_btn_" + id);
|
||||
params.submit_btn = $("#new_message_submit_btn_" + id);
|
||||
params.height = height;
|
||||
params.width = width;
|
||||
if (params.textarea.data('init') == undefined) {
|
||||
params.editor = sd_create_shixun_editor(params, id, type);
|
||||
window._commentInput = params.editor;
|
||||
sd_create_form(params);
|
||||
params.cancel_btn.click(function () {
|
||||
sd_reset_editor_form(params);
|
||||
});
|
||||
// 在react组件中hide
|
||||
// params.submit_btn.click(function () {
|
||||
// $(this).hide()
|
||||
// });
|
||||
// 非react环境才监听这个click
|
||||
!window['__isR'] && params.submit_btn.click(function () {
|
||||
var tContents = $("#comment_news_" + id).val();
|
||||
|
||||
if (tContents != undefined) {
|
||||
var beforeImage = tContents.split("<img");
|
||||
var afterImage = tContents.split("/>");
|
||||
if (beforeImage[0] == "" && afterImage[1] == "") {
|
||||
notice_box('不支持纯图片评论<br/>请在评论中增加文字信息');
|
||||
return;
|
||||
}
|
||||
}
|
||||
params.form.submit();
|
||||
});
|
||||
params.textarea.focus(function () {
|
||||
params.editor.focus();
|
||||
});
|
||||
params.textarea.data('init', 1);
|
||||
$(this).show();
|
||||
}
|
||||
});
|
||||
// });
|
||||
|
||||
div_form = $("div[nhname='new_message_" + id + "']");
|
||||
$(".ke-edit", div_form).css("height", "33px");
|
||||
$(".ke-edit-iframe", div_form).css("height", "33px");
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
/*!
|
||||
* Cropper.js v1.5.2
|
||||
* https://fengyuanchen.github.io/cropperjs
|
||||
*
|
||||
* Copyright 2015-present Chen Fengyuan
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Date: 2019-06-30T06:01:02.389Z
|
||||
*/.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cropper-container img{display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,.75);overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}
|