This commit is contained in:
caishi 2024-08-14 15:43:08 +08:00
parent 2ec49f6391
commit d55af38908
1068 changed files with 142608 additions and 999 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

600
asset-manifest.json Normal file
View File

@ -0,0 +1,600 @@
{
"./static/js/0.b26c77b7.chunk.js": "/build/./static/js/0.b26c77b7.chunk.js",
"./static/js/1.4a924e00.chunk.js": "/build/./static/js/1.4a924e00.chunk.js",
"./static/js/2.25240ef8.chunk.js": "/build/./static/js/2.25240ef8.chunk.js",
"./static/js/3.aff98d9d.chunk.js": "/build/./static/js/3.aff98d9d.chunk.js",
"./static/js/4.2f13b054.chunk.js": "/build/./static/js/4.2f13b054.chunk.js",
"./static/js/5.baf226cf.chunk.js": "/build/./static/js/5.baf226cf.chunk.js",
"./static/js/6.9bf7dd91.chunk.js": "/build/./static/js/6.9bf7dd91.chunk.js",
"./static/js/7.b3a58fcc.chunk.js": "/build/./static/js/7.b3a58fcc.chunk.js",
"static/css/8.8bdeed6f.chunk.css": "/build/static/css/8.8bdeed6f.chunk.css",
"./static/js/8.411c88ff.chunk.js": "/build/./static/js/8.411c88ff.chunk.js",
"static/css/9.c0e03858.chunk.css": "/build/static/css/9.c0e03858.chunk.css",
"./static/js/9.10a727a3.chunk.js": "/build/./static/js/9.10a727a3.chunk.js",
"static/css/10.f7228588.chunk.css": "/build/static/css/10.f7228588.chunk.css",
"./static/js/10.99988b84.chunk.js": "/build/./static/js/10.99988b84.chunk.js",
"static/css/11.1c5f3a58.chunk.css": "/build/static/css/11.1c5f3a58.chunk.css",
"./static/js/11.e74abe4f.chunk.js": "/build/./static/js/11.e74abe4f.chunk.js",
"static/css/12.a2914384.chunk.css": "/build/static/css/12.a2914384.chunk.css",
"./static/js/12.49fbdd73.chunk.js": "/build/./static/js/12.49fbdd73.chunk.js",
"./static/js/13.2d48a370.chunk.js": "/build/./static/js/13.2d48a370.chunk.js",
"./static/js/14.8e87787f.chunk.js": "/build/./static/js/14.8e87787f.chunk.js",
"./static/js/15.986b6025.chunk.js": "/build/./static/js/15.986b6025.chunk.js",
"./static/js/16.489cb93e.chunk.js": "/build/./static/js/16.489cb93e.chunk.js",
"./static/js/17.250784aa.chunk.js": "/build/./static/js/17.250784aa.chunk.js",
"./static/js/18.a1ce0247.chunk.js": "/build/./static/js/18.a1ce0247.chunk.js",
"./static/js/19.0f4190f5.chunk.js": "/build/./static/js/19.0f4190f5.chunk.js",
"./static/js/20.1ac253a3.chunk.js": "/build/./static/js/20.1ac253a3.chunk.js",
"./static/js/21.fe7031fa.chunk.js": "/build/./static/js/21.fe7031fa.chunk.js",
"static/css/22.c232713f.chunk.css": "/build/static/css/22.c232713f.chunk.css",
"./static/js/22.5a90402c.chunk.js": "/build/./static/js/22.5a90402c.chunk.js",
"./static/js/23.0dceea05.chunk.js": "/build/./static/js/23.0dceea05.chunk.js",
"static/css/24.d2ddda53.chunk.css": "/build/static/css/24.d2ddda53.chunk.css",
"./static/js/24.95c9e4d0.chunk.js": "/build/./static/js/24.95c9e4d0.chunk.js",
"./static/js/25.232bade1.chunk.js": "/build/./static/js/25.232bade1.chunk.js",
"static/css/26.9f579fa1.chunk.css": "/build/static/css/26.9f579fa1.chunk.css",
"./static/js/26.c27513ac.chunk.js": "/build/./static/js/26.c27513ac.chunk.js",
"./static/js/27.f2a5f30d.chunk.js": "/build/./static/js/27.f2a5f30d.chunk.js",
"./static/js/28.3b2f8715.chunk.js": "/build/./static/js/28.3b2f8715.chunk.js",
"./static/js/29.af6dddc8.chunk.js": "/build/./static/js/29.af6dddc8.chunk.js",
"./static/js/30.144d0aff.chunk.js": "/build/./static/js/30.144d0aff.chunk.js",
"./static/js/31.74318f67.chunk.js": "/build/./static/js/31.74318f67.chunk.js",
"./static/js/32.b600b9e3.chunk.js": "/build/./static/js/32.b600b9e3.chunk.js",
"static/css/33.557eaa2f.chunk.css": "/build/static/css/33.557eaa2f.chunk.css",
"./static/js/33.7fde5fc0.chunk.js": "/build/./static/js/33.7fde5fc0.chunk.js",
"static/css/34.551e5fab.chunk.css": "/build/static/css/34.551e5fab.chunk.css",
"./static/js/34.dbeb4770.chunk.js": "/build/./static/js/34.dbeb4770.chunk.js",
"static/css/35.be4e1d7d.chunk.css": "/build/static/css/35.be4e1d7d.chunk.css",
"./static/js/35.46695d2e.chunk.js": "/build/./static/js/35.46695d2e.chunk.js",
"./static/js/36.b9db1aac.chunk.js": "/build/./static/js/36.b9db1aac.chunk.js",
"static/css/37.8531cf67.chunk.css": "/build/static/css/37.8531cf67.chunk.css",
"./static/js/37.69e6f062.chunk.js": "/build/./static/js/37.69e6f062.chunk.js",
"./static/js/38.34fc6343.chunk.js": "/build/./static/js/38.34fc6343.chunk.js",
"static/css/39.e0764343.chunk.css": "/build/static/css/39.e0764343.chunk.css",
"./static/js/39.496b9c8d.chunk.js": "/build/./static/js/39.496b9c8d.chunk.js",
"static/css/40.6417fb3d.chunk.css": "/build/static/css/40.6417fb3d.chunk.css",
"./static/js/40.0b491691.chunk.js": "/build/./static/js/40.0b491691.chunk.js",
"static/css/41.6f3ab3c8.chunk.css": "/build/static/css/41.6f3ab3c8.chunk.css",
"./static/js/41.47dca887.chunk.js": "/build/./static/js/41.47dca887.chunk.js",
"static/css/42.8bdeed6f.chunk.css": "/build/static/css/42.8bdeed6f.chunk.css",
"./static/js/42.ccd08181.chunk.js": "/build/./static/js/42.ccd08181.chunk.js",
"static/css/43.3262fb19.chunk.css": "/build/static/css/43.3262fb19.chunk.css",
"./static/js/43.1ca32157.chunk.js": "/build/./static/js/43.1ca32157.chunk.js",
"static/css/44.5fc996d6.chunk.css": "/build/static/css/44.5fc996d6.chunk.css",
"./static/js/44.eb2c6b47.chunk.js": "/build/./static/js/44.eb2c6b47.chunk.js",
"static/css/45.abf6bb9b.chunk.css": "/build/static/css/45.abf6bb9b.chunk.css",
"./static/js/45.61c26e0d.chunk.js": "/build/./static/js/45.61c26e0d.chunk.js",
"./static/js/46.18bbd415.chunk.js": "/build/./static/js/46.18bbd415.chunk.js",
"static/css/47.20969d43.chunk.css": "/build/static/css/47.20969d43.chunk.css",
"./static/js/47.f9bec50b.chunk.js": "/build/./static/js/47.f9bec50b.chunk.js",
"./static/js/48.5d67a7ec.chunk.js": "/build/./static/js/48.5d67a7ec.chunk.js",
"./static/js/49.fa20e1ec.chunk.js": "/build/./static/js/49.fa20e1ec.chunk.js",
"static/css/50.acffe7d4.chunk.css": "/build/static/css/50.acffe7d4.chunk.css",
"./static/js/50.19fa6a67.chunk.js": "/build/./static/js/50.19fa6a67.chunk.js",
"static/css/51.4323f278.chunk.css": "/build/static/css/51.4323f278.chunk.css",
"./static/js/51.001ff30b.chunk.js": "/build/./static/js/51.001ff30b.chunk.js",
"static/css/52.8897a42f.chunk.css": "/build/static/css/52.8897a42f.chunk.css",
"./static/js/52.6833c261.chunk.js": "/build/./static/js/52.6833c261.chunk.js",
"static/css/53.ec1571c8.chunk.css": "/build/static/css/53.ec1571c8.chunk.css",
"./static/js/53.34c607c1.chunk.js": "/build/./static/js/53.34c607c1.chunk.js",
"static/css/54.a8e7b652.chunk.css": "/build/static/css/54.a8e7b652.chunk.css",
"./static/js/54.9e6251ef.chunk.js": "/build/./static/js/54.9e6251ef.chunk.js",
"static/css/55.458347c6.chunk.css": "/build/static/css/55.458347c6.chunk.css",
"./static/js/55.11ee5370.chunk.js": "/build/./static/js/55.11ee5370.chunk.js",
"./static/js/56.74cced0f.chunk.js": "/build/./static/js/56.74cced0f.chunk.js",
"./static/js/57.080d0056.chunk.js": "/build/./static/js/57.080d0056.chunk.js",
"static/css/58.b1c46d31.chunk.css": "/build/static/css/58.b1c46d31.chunk.css",
"./static/js/58.56e6009b.chunk.js": "/build/./static/js/58.56e6009b.chunk.js",
"static/css/59.db767247.chunk.css": "/build/static/css/59.db767247.chunk.css",
"./static/js/59.900f52e1.chunk.js": "/build/./static/js/59.900f52e1.chunk.js",
"static/css/60.95c8fd70.chunk.css": "/build/static/css/60.95c8fd70.chunk.css",
"./static/js/60.c22d0927.chunk.js": "/build/./static/js/60.c22d0927.chunk.js",
"static/css/61.3144ed07.chunk.css": "/build/static/css/61.3144ed07.chunk.css",
"./static/js/61.a53804aa.chunk.js": "/build/./static/js/61.a53804aa.chunk.js",
"./static/js/62.fabeb5f2.chunk.js": "/build/./static/js/62.fabeb5f2.chunk.js",
"static/css/63.9cb5574e.chunk.css": "/build/static/css/63.9cb5574e.chunk.css",
"./static/js/63.1514d0a5.chunk.js": "/build/./static/js/63.1514d0a5.chunk.js",
"static/css/64.909d3daf.chunk.css": "/build/static/css/64.909d3daf.chunk.css",
"./static/js/64.26904b69.chunk.js": "/build/./static/js/64.26904b69.chunk.js",
"static/css/65.306147eb.chunk.css": "/build/static/css/65.306147eb.chunk.css",
"./static/js/65.2f51c43c.chunk.js": "/build/./static/js/65.2f51c43c.chunk.js",
"./static/js/66.a9a60764.chunk.js": "/build/./static/js/66.a9a60764.chunk.js",
"static/css/67.f4704690.chunk.css": "/build/static/css/67.f4704690.chunk.css",
"./static/js/67.ba5721fa.chunk.js": "/build/./static/js/67.ba5721fa.chunk.js",
"static/css/68.3dea4405.chunk.css": "/build/static/css/68.3dea4405.chunk.css",
"./static/js/68.99b49880.chunk.js": "/build/./static/js/68.99b49880.chunk.js",
"static/css/69.2317255e.chunk.css": "/build/static/css/69.2317255e.chunk.css",
"./static/js/69.0d062c15.chunk.js": "/build/./static/js/69.0d062c15.chunk.js",
"./static/js/70.1a1b9fb1.chunk.js": "/build/./static/js/70.1a1b9fb1.chunk.js",
"./static/js/71.ccef6f3c.chunk.js": "/build/./static/js/71.ccef6f3c.chunk.js",
"static/css/72.bfe97be1.chunk.css": "/build/static/css/72.bfe97be1.chunk.css",
"./static/js/72.b2199a90.chunk.js": "/build/./static/js/72.b2199a90.chunk.js",
"./static/js/73.b335ce14.chunk.js": "/build/./static/js/73.b335ce14.chunk.js",
"static/css/74.6a13e222.chunk.css": "/build/static/css/74.6a13e222.chunk.css",
"./static/js/74.fd963c32.chunk.js": "/build/./static/js/74.fd963c32.chunk.js",
"static/css/75.0c76283e.chunk.css": "/build/static/css/75.0c76283e.chunk.css",
"./static/js/75.6376f871.chunk.js": "/build/./static/js/75.6376f871.chunk.js",
"static/css/76.746d3b5f.chunk.css": "/build/static/css/76.746d3b5f.chunk.css",
"./static/js/76.04279520.chunk.js": "/build/./static/js/76.04279520.chunk.js",
"static/css/77.a65c9d2d.chunk.css": "/build/static/css/77.a65c9d2d.chunk.css",
"./static/js/77.4dfd49d3.chunk.js": "/build/./static/js/77.4dfd49d3.chunk.js",
"./static/js/78.bb7a4b5f.chunk.js": "/build/./static/js/78.bb7a4b5f.chunk.js",
"static/css/79.a8369a12.chunk.css": "/build/static/css/79.a8369a12.chunk.css",
"./static/js/79.14d639b1.chunk.js": "/build/./static/js/79.14d639b1.chunk.js",
"static/css/80.1587d9f3.chunk.css": "/build/static/css/80.1587d9f3.chunk.css",
"./static/js/80.de51e78b.chunk.js": "/build/./static/js/80.de51e78b.chunk.js",
"./static/js/81.4f0af52e.chunk.js": "/build/./static/js/81.4f0af52e.chunk.js",
"./static/js/82.0b8f0dcf.chunk.js": "/build/./static/js/82.0b8f0dcf.chunk.js",
"static/css/83.16f611d2.chunk.css": "/build/static/css/83.16f611d2.chunk.css",
"./static/js/83.9d32d150.chunk.js": "/build/./static/js/83.9d32d150.chunk.js",
"static/css/84.285c512b.chunk.css": "/build/static/css/84.285c512b.chunk.css",
"./static/js/84.d2326074.chunk.js": "/build/./static/js/84.d2326074.chunk.js",
"static/css/85.bcb1f451.chunk.css": "/build/static/css/85.bcb1f451.chunk.css",
"./static/js/85.cd887c24.chunk.js": "/build/./static/js/85.cd887c24.chunk.js",
"static/css/86.17d1bb70.chunk.css": "/build/static/css/86.17d1bb70.chunk.css",
"./static/js/86.655f4d6c.chunk.js": "/build/./static/js/86.655f4d6c.chunk.js",
"static/css/87.c713331c.chunk.css": "/build/static/css/87.c713331c.chunk.css",
"./static/js/87.5f5e124e.chunk.js": "/build/./static/js/87.5f5e124e.chunk.js",
"static/css/88.fff00769.chunk.css": "/build/static/css/88.fff00769.chunk.css",
"./static/js/88.4db267f0.chunk.js": "/build/./static/js/88.4db267f0.chunk.js",
"static/css/89.0a9590f5.chunk.css": "/build/static/css/89.0a9590f5.chunk.css",
"./static/js/89.9991edcc.chunk.js": "/build/./static/js/89.9991edcc.chunk.js",
"static/css/90.d077de88.chunk.css": "/build/static/css/90.d077de88.chunk.css",
"./static/js/90.861874e9.chunk.js": "/build/./static/js/90.861874e9.chunk.js",
"static/css/91.834ebd5d.chunk.css": "/build/static/css/91.834ebd5d.chunk.css",
"./static/js/91.b8d44d1c.chunk.js": "/build/./static/js/91.b8d44d1c.chunk.js",
"static/css/92.72bd9d4a.chunk.css": "/build/static/css/92.72bd9d4a.chunk.css",
"./static/js/92.d7f18353.chunk.js": "/build/./static/js/92.d7f18353.chunk.js",
"./static/js/93.1d6fcf7b.chunk.js": "/build/./static/js/93.1d6fcf7b.chunk.js",
"static/css/94.7cc79b14.chunk.css": "/build/static/css/94.7cc79b14.chunk.css",
"./static/js/94.25615e79.chunk.js": "/build/./static/js/94.25615e79.chunk.js",
"static/css/95.0cea9315.chunk.css": "/build/static/css/95.0cea9315.chunk.css",
"./static/js/95.1aef208d.chunk.js": "/build/./static/js/95.1aef208d.chunk.js",
"static/css/96.89efd2d4.chunk.css": "/build/static/css/96.89efd2d4.chunk.css",
"./static/js/96.aab77732.chunk.js": "/build/./static/js/96.aab77732.chunk.js",
"static/css/97.b374ea9c.chunk.css": "/build/static/css/97.b374ea9c.chunk.css",
"./static/js/97.335799a0.chunk.js": "/build/./static/js/97.335799a0.chunk.js",
"./static/js/98.ba4f9a9d.chunk.js": "/build/./static/js/98.ba4f9a9d.chunk.js",
"static/css/99.ade1d045.chunk.css": "/build/static/css/99.ade1d045.chunk.css",
"./static/js/99.26338c37.chunk.js": "/build/./static/js/99.26338c37.chunk.js",
"static/css/100.db767247.chunk.css": "/build/static/css/100.db767247.chunk.css",
"./static/js/100.e0bb646f.chunk.js": "/build/./static/js/100.e0bb646f.chunk.js",
"static/css/101.02c763e8.chunk.css": "/build/static/css/101.02c763e8.chunk.css",
"./static/js/101.5a4f72ae.chunk.js": "/build/./static/js/101.5a4f72ae.chunk.js",
"./static/js/102.fa2370be.chunk.js": "/build/./static/js/102.fa2370be.chunk.js",
"./static/js/103.fab7d6e6.chunk.js": "/build/./static/js/103.fab7d6e6.chunk.js",
"static/css/104.4c8c6a11.chunk.css": "/build/static/css/104.4c8c6a11.chunk.css",
"./static/js/104.503e393e.chunk.js": "/build/./static/js/104.503e393e.chunk.js",
"static/css/105.d4e40697.chunk.css": "/build/static/css/105.d4e40697.chunk.css",
"./static/js/105.c1bc4d4a.chunk.js": "/build/./static/js/105.c1bc4d4a.chunk.js",
"static/css/106.89bc1500.chunk.css": "/build/static/css/106.89bc1500.chunk.css",
"./static/js/106.10233678.chunk.js": "/build/./static/js/106.10233678.chunk.js",
"static/css/107.f392094f.chunk.css": "/build/static/css/107.f392094f.chunk.css",
"./static/js/107.2ce9ab05.chunk.js": "/build/./static/js/107.2ce9ab05.chunk.js",
"./static/js/108.6bc045f6.chunk.js": "/build/./static/js/108.6bc045f6.chunk.js",
"./static/js/109.c9b42c0b.chunk.js": "/build/./static/js/109.c9b42c0b.chunk.js",
"./static/js/110.89a79b3a.chunk.js": "/build/./static/js/110.89a79b3a.chunk.js",
"static/css/111.4054f41b.chunk.css": "/build/static/css/111.4054f41b.chunk.css",
"./static/js/111.2d55c1b9.chunk.js": "/build/./static/js/111.2d55c1b9.chunk.js",
"static/css/112.6cf7864c.chunk.css": "/build/static/css/112.6cf7864c.chunk.css",
"./static/js/112.1f78fee1.chunk.js": "/build/./static/js/112.1f78fee1.chunk.js",
"./static/js/113.e7de6572.chunk.js": "/build/./static/js/113.e7de6572.chunk.js",
"./static/js/114.c3bfba52.chunk.js": "/build/./static/js/114.c3bfba52.chunk.js",
"./static/js/115.3252add0.chunk.js": "/build/./static/js/115.3252add0.chunk.js",
"static/css/116.4e686135.chunk.css": "/build/static/css/116.4e686135.chunk.css",
"./static/js/116.e47abfb6.chunk.js": "/build/./static/js/116.e47abfb6.chunk.js",
"./static/js/117.25f1c1b4.chunk.js": "/build/./static/js/117.25f1c1b4.chunk.js",
"./static/js/118.503770a9.chunk.js": "/build/./static/js/118.503770a9.chunk.js",
"static/css/119.41b8aabd.chunk.css": "/build/static/css/119.41b8aabd.chunk.css",
"./static/js/119.69413fb9.chunk.js": "/build/./static/js/119.69413fb9.chunk.js",
"static/css/120.b7b78777.chunk.css": "/build/static/css/120.b7b78777.chunk.css",
"./static/js/120.1861529e.chunk.js": "/build/./static/js/120.1861529e.chunk.js",
"static/css/121.177bb0f3.chunk.css": "/build/static/css/121.177bb0f3.chunk.css",
"./static/js/121.f4490ade.chunk.js": "/build/./static/js/121.f4490ade.chunk.js",
"./static/js/122.01941469.chunk.js": "/build/./static/js/122.01941469.chunk.js",
"static/css/123.2411548c.chunk.css": "/build/static/css/123.2411548c.chunk.css",
"./static/js/123.a2542ea9.chunk.js": "/build/./static/js/123.a2542ea9.chunk.js",
"./static/js/124.c7a5f92c.chunk.js": "/build/./static/js/124.c7a5f92c.chunk.js",
"./static/js/125.dccaaa6b.chunk.js": "/build/./static/js/125.dccaaa6b.chunk.js",
"./static/js/126.44695327.chunk.js": "/build/./static/js/126.44695327.chunk.js",
"static/css/127.54bd5dfb.chunk.css": "/build/static/css/127.54bd5dfb.chunk.css",
"./static/js/127.6e6e726e.chunk.js": "/build/./static/js/127.6e6e726e.chunk.js",
"static/css/128.41b8aabd.chunk.css": "/build/static/css/128.41b8aabd.chunk.css",
"./static/js/128.ac7ce709.chunk.js": "/build/./static/js/128.ac7ce709.chunk.js",
"static/css/129.95547330.chunk.css": "/build/static/css/129.95547330.chunk.css",
"./static/js/129.f3d7ba5c.chunk.js": "/build/./static/js/129.f3d7ba5c.chunk.js",
"static/css/130.41b8aabd.chunk.css": "/build/static/css/130.41b8aabd.chunk.css",
"./static/js/130.5a946590.chunk.js": "/build/./static/js/130.5a946590.chunk.js",
"static/css/131.41b8aabd.chunk.css": "/build/static/css/131.41b8aabd.chunk.css",
"./static/js/131.ba4f798b.chunk.js": "/build/./static/js/131.ba4f798b.chunk.js",
"static/css/132.ea81d4f1.chunk.css": "/build/static/css/132.ea81d4f1.chunk.css",
"./static/js/132.6b3df827.chunk.js": "/build/./static/js/132.6b3df827.chunk.js",
"static/css/133.56776e6e.chunk.css": "/build/static/css/133.56776e6e.chunk.css",
"./static/js/133.a61fec97.chunk.js": "/build/./static/js/133.a61fec97.chunk.js",
"./static/js/134.faf46f99.chunk.js": "/build/./static/js/134.faf46f99.chunk.js",
"./static/js/135.3a42ba90.chunk.js": "/build/./static/js/135.3a42ba90.chunk.js",
"./static/js/136.ee5c0e4b.chunk.js": "/build/./static/js/136.ee5c0e4b.chunk.js",
"./static/js/137.ab2546f8.chunk.js": "/build/./static/js/137.ab2546f8.chunk.js",
"./static/js/138.e4a82cf9.chunk.js": "/build/./static/js/138.e4a82cf9.chunk.js",
"static/css/139.de5ed58f.chunk.css": "/build/static/css/139.de5ed58f.chunk.css",
"./static/js/139.bc094754.chunk.js": "/build/./static/js/139.bc094754.chunk.js",
"static/css/140.c041974c.chunk.css": "/build/static/css/140.c041974c.chunk.css",
"./static/js/140.df17eb58.chunk.js": "/build/./static/js/140.df17eb58.chunk.js",
"./static/js/141.1be727bd.chunk.js": "/build/./static/js/141.1be727bd.chunk.js",
"./static/js/142.f3bc4dd0.chunk.js": "/build/./static/js/142.f3bc4dd0.chunk.js",
"static/css/143.83a06073.chunk.css": "/build/static/css/143.83a06073.chunk.css",
"./static/js/143.da8821d3.chunk.js": "/build/./static/js/143.da8821d3.chunk.js",
"./static/js/144.9e9eff23.chunk.js": "/build/./static/js/144.9e9eff23.chunk.js",
"./static/js/145.99cbe99b.chunk.js": "/build/./static/js/145.99cbe99b.chunk.js",
"static/css/146.fdd673d6.chunk.css": "/build/static/css/146.fdd673d6.chunk.css",
"./static/js/146.868a0a70.chunk.js": "/build/./static/js/146.868a0a70.chunk.js",
"static/css/147.e59d7372.chunk.css": "/build/static/css/147.e59d7372.chunk.css",
"./static/js/147.f0ca2a27.chunk.js": "/build/./static/js/147.f0ca2a27.chunk.js",
"static/css/148.72319a07.chunk.css": "/build/static/css/148.72319a07.chunk.css",
"./static/js/148.ba37e18d.chunk.js": "/build/./static/js/148.ba37e18d.chunk.js",
"static/css/149.8841b1b9.chunk.css": "/build/static/css/149.8841b1b9.chunk.css",
"./static/js/149.d2cbb4bd.chunk.js": "/build/./static/js/149.d2cbb4bd.chunk.js",
"static/css/150.1b154d7a.chunk.css": "/build/static/css/150.1b154d7a.chunk.css",
"./static/js/150.ae158621.chunk.js": "/build/./static/js/150.ae158621.chunk.js",
"static/css/151.65678519.chunk.css": "/build/static/css/151.65678519.chunk.css",
"./static/js/151.267f4478.chunk.js": "/build/./static/js/151.267f4478.chunk.js",
"static/css/152.ba8f71f0.chunk.css": "/build/static/css/152.ba8f71f0.chunk.css",
"./static/js/152.6852d544.chunk.js": "/build/./static/js/152.6852d544.chunk.js",
"static/css/153.ba8f71f0.chunk.css": "/build/static/css/153.ba8f71f0.chunk.css",
"./static/js/153.9840ba0c.chunk.js": "/build/./static/js/153.9840ba0c.chunk.js",
"./static/js/154.f3ceab4a.chunk.js": "/build/./static/js/154.f3ceab4a.chunk.js",
"static/css/155.83a06073.chunk.css": "/build/static/css/155.83a06073.chunk.css",
"./static/js/155.9d2a74cd.chunk.js": "/build/./static/js/155.9d2a74cd.chunk.js",
"./static/js/156.5614d6ee.chunk.js": "/build/./static/js/156.5614d6ee.chunk.js",
"./static/js/157.1108fd3f.chunk.js": "/build/./static/js/157.1108fd3f.chunk.js",
"static/css/158.4188cd3d.chunk.css": "/build/static/css/158.4188cd3d.chunk.css",
"./static/js/158.95d6f950.chunk.js": "/build/./static/js/158.95d6f950.chunk.js",
"static/css/159.c232713f.chunk.css": "/build/static/css/159.c232713f.chunk.css",
"./static/js/159.fc4d8667.chunk.js": "/build/./static/js/159.fc4d8667.chunk.js",
"static/css/160.1b154d7a.chunk.css": "/build/static/css/160.1b154d7a.chunk.css",
"./static/js/160.2d1c312f.chunk.js": "/build/./static/js/160.2d1c312f.chunk.js",
"static/css/161.b92181f7.chunk.css": "/build/static/css/161.b92181f7.chunk.css",
"./static/js/161.9dc81fa5.chunk.js": "/build/./static/js/161.9dc81fa5.chunk.js",
"static/css/162.1b154d7a.chunk.css": "/build/static/css/162.1b154d7a.chunk.css",
"./static/js/162.4d1de144.chunk.js": "/build/./static/js/162.4d1de144.chunk.js",
"static/css/163.4cedb0b7.chunk.css": "/build/static/css/163.4cedb0b7.chunk.css",
"./static/js/163.a7178a03.chunk.js": "/build/./static/js/163.a7178a03.chunk.js",
"./static/js/164.d8cb2a98.chunk.js": "/build/./static/js/164.d8cb2a98.chunk.js",
"./static/js/165.aa5bdbde.chunk.js": "/build/./static/js/165.aa5bdbde.chunk.js",
"./static/js/166.38613a2f.chunk.js": "/build/./static/js/166.38613a2f.chunk.js",
"static/css/167.0a2b06f0.chunk.css": "/build/static/css/167.0a2b06f0.chunk.css",
"./static/js/167.8d1fbbe0.chunk.js": "/build/./static/js/167.8d1fbbe0.chunk.js",
"./static/js/168.f2635dbf.chunk.js": "/build/./static/js/168.f2635dbf.chunk.js",
"./static/js/169.80945d2f.chunk.js": "/build/./static/js/169.80945d2f.chunk.js",
"./static/js/170.3554c095.chunk.js": "/build/./static/js/170.3554c095.chunk.js",
"static/css/171.5a0bfe2e.chunk.css": "/build/static/css/171.5a0bfe2e.chunk.css",
"./static/js/171.8f107773.chunk.js": "/build/./static/js/171.8f107773.chunk.js",
"static/css/172.5a0bfe2e.chunk.css": "/build/static/css/172.5a0bfe2e.chunk.css",
"./static/js/172.da3cca4a.chunk.js": "/build/./static/js/172.da3cca4a.chunk.js",
"static/css/173.8ddbb070.chunk.css": "/build/static/css/173.8ddbb070.chunk.css",
"./static/js/173.4463b409.chunk.js": "/build/./static/js/173.4463b409.chunk.js",
"static/css/174.e6754f94.chunk.css": "/build/static/css/174.e6754f94.chunk.css",
"./static/js/174.f36c8264.chunk.js": "/build/./static/js/174.f36c8264.chunk.js",
"static/css/175.a8369a12.chunk.css": "/build/static/css/175.a8369a12.chunk.css",
"./static/js/175.3712bfba.chunk.js": "/build/./static/js/175.3712bfba.chunk.js",
"static/css/176.d34dec6c.chunk.css": "/build/static/css/176.d34dec6c.chunk.css",
"./static/js/176.6bf10460.chunk.js": "/build/./static/js/176.6bf10460.chunk.js",
"static/css/177.53604072.chunk.css": "/build/static/css/177.53604072.chunk.css",
"./static/js/177.3ed0cb97.chunk.js": "/build/./static/js/177.3ed0cb97.chunk.js",
"static/css/178.c041974c.chunk.css": "/build/static/css/178.c041974c.chunk.css",
"./static/js/178.683215f4.chunk.js": "/build/./static/js/178.683215f4.chunk.js",
"static/css/179.c041974c.chunk.css": "/build/static/css/179.c041974c.chunk.css",
"./static/js/179.eba55c8f.chunk.js": "/build/./static/js/179.eba55c8f.chunk.js",
"static/css/180.e4e6348b.chunk.css": "/build/static/css/180.e4e6348b.chunk.css",
"./static/js/180.dd74ce86.chunk.js": "/build/./static/js/180.dd74ce86.chunk.js",
"static/css/181.0235d756.chunk.css": "/build/static/css/181.0235d756.chunk.css",
"./static/js/181.de985d7d.chunk.js": "/build/./static/js/181.de985d7d.chunk.js",
"static/css/182.46fb7389.chunk.css": "/build/static/css/182.46fb7389.chunk.css",
"./static/js/182.e29fb64c.chunk.js": "/build/./static/js/182.e29fb64c.chunk.js",
"static/css/183.ae767d6d.chunk.css": "/build/static/css/183.ae767d6d.chunk.css",
"./static/js/183.e8d87699.chunk.js": "/build/./static/js/183.e8d87699.chunk.js",
"./static/js/184.1093278d.chunk.js": "/build/./static/js/184.1093278d.chunk.js",
"static/css/185.d4ed71fa.chunk.css": "/build/static/css/185.d4ed71fa.chunk.css",
"./static/js/185.ce36a111.chunk.js": "/build/./static/js/185.ce36a111.chunk.js",
"static/css/186.4ad9941b.chunk.css": "/build/static/css/186.4ad9941b.chunk.css",
"./static/js/186.9076df83.chunk.js": "/build/./static/js/186.9076df83.chunk.js",
"static/css/187.bb3f7513.chunk.css": "/build/static/css/187.bb3f7513.chunk.css",
"./static/js/187.d4d58b02.chunk.js": "/build/./static/js/187.d4d58b02.chunk.js",
"static/css/188.95547330.chunk.css": "/build/static/css/188.95547330.chunk.css",
"./static/js/188.ccce7cb1.chunk.js": "/build/./static/js/188.ccce7cb1.chunk.js",
"static/css/189.41b8aabd.chunk.css": "/build/static/css/189.41b8aabd.chunk.css",
"./static/js/189.15b14820.chunk.js": "/build/./static/js/189.15b14820.chunk.js",
"./static/js/190.06ee4343.chunk.js": "/build/./static/js/190.06ee4343.chunk.js",
"./static/js/191.4a7c5dd1.chunk.js": "/build/./static/js/191.4a7c5dd1.chunk.js",
"static/css/192.a4e6c551.chunk.css": "/build/static/css/192.a4e6c551.chunk.css",
"./static/js/192.faad7840.chunk.js": "/build/./static/js/192.faad7840.chunk.js",
"./static/js/193.80b4acdb.chunk.js": "/build/./static/js/193.80b4acdb.chunk.js",
"static/css/194.87b2f83c.chunk.css": "/build/static/css/194.87b2f83c.chunk.css",
"./static/js/194.1180e40d.chunk.js": "/build/./static/js/194.1180e40d.chunk.js",
"static/css/195.6d12ef9c.chunk.css": "/build/static/css/195.6d12ef9c.chunk.css",
"./static/js/195.a4f2059a.chunk.js": "/build/./static/js/195.a4f2059a.chunk.js",
"./static/js/196.f83c2513.chunk.js": "/build/./static/js/196.f83c2513.chunk.js",
"./static/js/197.bc4b64b0.chunk.js": "/build/./static/js/197.bc4b64b0.chunk.js",
"./static/js/198.eb51f5f6.chunk.js": "/build/./static/js/198.eb51f5f6.chunk.js",
"./static/js/199.34ee37ad.chunk.js": "/build/./static/js/199.34ee37ad.chunk.js",
"./static/js/200.43bc2631.chunk.js": "/build/./static/js/200.43bc2631.chunk.js",
"./static/js/201.e0f642c5.chunk.js": "/build/./static/js/201.e0f642c5.chunk.js",
"./static/js/202.667a7de6.chunk.js": "/build/./static/js/202.667a7de6.chunk.js",
"./static/js/203.b15cb798.chunk.js": "/build/./static/js/203.b15cb798.chunk.js",
"./static/js/204.8eaa10b2.chunk.js": "/build/./static/js/204.8eaa10b2.chunk.js",
"./static/js/205.3461238d.chunk.js": "/build/./static/js/205.3461238d.chunk.js",
"./static/js/206.be1878e8.chunk.js": "/build/./static/js/206.be1878e8.chunk.js",
"./static/js/207.d113dd91.chunk.js": "/build/./static/js/207.d113dd91.chunk.js",
"./static/js/208.f1e0da34.chunk.js": "/build/./static/js/208.f1e0da34.chunk.js",
"./static/js/209.8cb83987.chunk.js": "/build/./static/js/209.8cb83987.chunk.js",
"./static/js/210.f84ede04.chunk.js": "/build/./static/js/210.f84ede04.chunk.js",
"./static/js/211.2f1393c9.chunk.js": "/build/./static/js/211.2f1393c9.chunk.js",
"./static/js/212.8bdeef11.chunk.js": "/build/./static/js/212.8bdeef11.chunk.js",
"./static/js/213.f1622259.chunk.js": "/build/./static/js/213.f1622259.chunk.js",
"./static/js/214.8e7dbb29.chunk.js": "/build/./static/js/214.8e7dbb29.chunk.js",
"./static/js/215.789f7bf0.chunk.js": "/build/./static/js/215.789f7bf0.chunk.js",
"./static/js/216.4281d5ce.chunk.js": "/build/./static/js/216.4281d5ce.chunk.js",
"./static/js/217.ca24093e.chunk.js": "/build/./static/js/217.ca24093e.chunk.js",
"./static/js/218.5a45951e.chunk.js": "/build/./static/js/218.5a45951e.chunk.js",
"./static/js/219.27cc1ecb.chunk.js": "/build/./static/js/219.27cc1ecb.chunk.js",
"./static/js/220.acb7ab55.chunk.js": "/build/./static/js/220.acb7ab55.chunk.js",
"./static/js/221.d8294163.chunk.js": "/build/./static/js/221.d8294163.chunk.js",
"./static/js/222.9088cfd4.chunk.js": "/build/./static/js/222.9088cfd4.chunk.js",
"./static/js/223.ed691371.chunk.js": "/build/./static/js/223.ed691371.chunk.js",
"./static/js/224.9f6b6a4a.chunk.js": "/build/./static/js/224.9f6b6a4a.chunk.js",
"./static/js/225.943befca.chunk.js": "/build/./static/js/225.943befca.chunk.js",
"./static/js/226.43408ecc.chunk.js": "/build/./static/js/226.43408ecc.chunk.js",
"./static/js/227.2963daae.chunk.js": "/build/./static/js/227.2963daae.chunk.js",
"./static/js/228.9738bc6d.chunk.js": "/build/./static/js/228.9738bc6d.chunk.js",
"./static/js/229.f3398f7e.chunk.js": "/build/./static/js/229.f3398f7e.chunk.js",
"./static/js/230.8296374b.chunk.js": "/build/./static/js/230.8296374b.chunk.js",
"./static/js/231.a2ac319b.chunk.js": "/build/./static/js/231.a2ac319b.chunk.js",
"./static/js/232.96480116.chunk.js": "/build/./static/js/232.96480116.chunk.js",
"./static/js/233.e02130a2.chunk.js": "/build/./static/js/233.e02130a2.chunk.js",
"./static/js/234.4db5c335.chunk.js": "/build/./static/js/234.4db5c335.chunk.js",
"./static/js/235.d84f75f2.chunk.js": "/build/./static/js/235.d84f75f2.chunk.js",
"./static/js/236.35cfb0f0.chunk.js": "/build/./static/js/236.35cfb0f0.chunk.js",
"./static/js/237.33fdaf9a.chunk.js": "/build/./static/js/237.33fdaf9a.chunk.js",
"./static/js/238.9ab0eae7.chunk.js": "/build/./static/js/238.9ab0eae7.chunk.js",
"./static/js/239.8f07290e.chunk.js": "/build/./static/js/239.8f07290e.chunk.js",
"./static/js/240.53956ffc.chunk.js": "/build/./static/js/240.53956ffc.chunk.js",
"./static/js/241.1213bfc2.chunk.js": "/build/./static/js/241.1213bfc2.chunk.js",
"./static/js/242.3947fffa.chunk.js": "/build/./static/js/242.3947fffa.chunk.js",
"./static/js/243.fb9f1b03.chunk.js": "/build/./static/js/243.fb9f1b03.chunk.js",
"./static/js/244.eac3e57c.chunk.js": "/build/./static/js/244.eac3e57c.chunk.js",
"./static/js/245.4280d2cd.chunk.js": "/build/./static/js/245.4280d2cd.chunk.js",
"./static/js/246.a1741b45.chunk.js": "/build/./static/js/246.a1741b45.chunk.js",
"./static/js/247.c8b111dc.chunk.js": "/build/./static/js/247.c8b111dc.chunk.js",
"./static/js/248.74044371.chunk.js": "/build/./static/js/248.74044371.chunk.js",
"./static/js/249.a58b8848.chunk.js": "/build/./static/js/249.a58b8848.chunk.js",
"./static/js/250.a9a6a15e.chunk.js": "/build/./static/js/250.a9a6a15e.chunk.js",
"./static/js/251.a5ebfdaf.chunk.js": "/build/./static/js/251.a5ebfdaf.chunk.js",
"./static/js/252.a423ddb9.chunk.js": "/build/./static/js/252.a423ddb9.chunk.js",
"./static/js/253.feb737b5.chunk.js": "/build/./static/js/253.feb737b5.chunk.js",
"./static/js/254.6596f120.chunk.js": "/build/./static/js/254.6596f120.chunk.js",
"./static/js/255.b1c9e338.chunk.js": "/build/./static/js/255.b1c9e338.chunk.js",
"./static/js/256.7a24c82f.chunk.js": "/build/./static/js/256.7a24c82f.chunk.js",
"./static/js/257.8bd67482.chunk.js": "/build/./static/js/257.8bd67482.chunk.js",
"./static/js/258.b7fc7746.chunk.js": "/build/./static/js/258.b7fc7746.chunk.js",
"./static/js/259.fce0a7e2.chunk.js": "/build/./static/js/259.fce0a7e2.chunk.js",
"./static/js/260.b3b15045.chunk.js": "/build/./static/js/260.b3b15045.chunk.js",
"./static/js/261.5bf52151.chunk.js": "/build/./static/js/261.5bf52151.chunk.js",
"./static/js/262.eb68764c.chunk.js": "/build/./static/js/262.eb68764c.chunk.js",
"./static/js/263.87e3c9ab.chunk.js": "/build/./static/js/263.87e3c9ab.chunk.js",
"./static/js/264.708414cd.chunk.js": "/build/./static/js/264.708414cd.chunk.js",
"./static/js/265.c8b44404.chunk.js": "/build/./static/js/265.c8b44404.chunk.js",
"./static/js/266.fec9786e.chunk.js": "/build/./static/js/266.fec9786e.chunk.js",
"./static/js/267.8f65000c.chunk.js": "/build/./static/js/267.8f65000c.chunk.js",
"./static/js/268.1623f7d1.chunk.js": "/build/./static/js/268.1623f7d1.chunk.js",
"./static/js/269.414e56f3.chunk.js": "/build/./static/js/269.414e56f3.chunk.js",
"./static/js/270.efe20e74.chunk.js": "/build/./static/js/270.efe20e74.chunk.js",
"./static/js/271.3ab3a289.chunk.js": "/build/./static/js/271.3ab3a289.chunk.js",
"./static/js/272.c0102a51.chunk.js": "/build/./static/js/272.c0102a51.chunk.js",
"./static/js/273.31be1441.chunk.js": "/build/./static/js/273.31be1441.chunk.js",
"./static/js/274.56798539.chunk.js": "/build/./static/js/274.56798539.chunk.js",
"main.css": "/build/static/css/main.34f8b4f8.chunk.css",
"main.js": "/build/./static/js/main.32a56dba.chunk.js",
"runtime~main.js": "/build/./static/js/runtime~main.7eb5721b.js",
"./static/js/10.99988b84.chunk.js.LICENSE.txt": "/build/./static/js/10.99988b84.chunk.js.LICENSE.txt",
"./static/js/269.414e56f3.chunk.js.LICENSE.txt": "/build/./static/js/269.414e56f3.chunk.js.LICENSE.txt",
"./static/js/36.b9db1aac.chunk.js.LICENSE.txt": "/build/./static/js/36.b9db1aac.chunk.js.LICENSE.txt",
"./static/js/39.496b9c8d.chunk.js.LICENSE.txt": "/build/./static/js/39.496b9c8d.chunk.js.LICENSE.txt",
"./static/js/93.1d6fcf7b.chunk.js.LICENSE.txt": "/build/./static/js/93.1d6fcf7b.chunk.js.LICENSE.txt",
"./static/js/main.32a56dba.chunk.js.LICENSE.txt": "/build/./static/js/main.32a56dba.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.afd0f2f5.png": "/build/static/media/2-2-1.afd0f2f5.png",
"static/media/2-2-2.26bc3301.png": "/build/static/media/2-2-2.26bc3301.png",
"static/media/2-2-3.6d6ce99c.png": "/build/static/media/2-2-3.6d6ce99c.png",
"static/media/2-2-head.5e69dbb2.png": "/build/static/media/2-2-head.5e69dbb2.png",
"static/media/2-3-1.bcb33d47.png": "/build/static/media/2-3-1.bcb33d47.png",
"static/media/2-3-2.57ef08ae.png": "/build/static/media/2-3-2.57ef08ae.png",
"static/media/2-3-3.52733627.png": "/build/static/media/2-3-3.52733627.png",
"static/media/2-3-4.339b2f1c.png": "/build/static/media/2-3-4.339b2f1c.png",
"static/media/2-6-1.302b729e.png": "/build/static/media/2-6-1.302b729e.png",
"static/media/2-6-2.b262b91e.png": "/build/static/media/2-6-2.b262b91e.png",
"static/media/3-1.9fdda521.png": "/build/static/media/3-1.9fdda521.png",
"static/media/3-2.47050941.png": "/build/static/media/3-2.47050941.png",
"static/media/3-3.c767aae7.png": "/build/static/media/3-3.c767aae7.png",
"static/media/3-4.92820cbc.png": "/build/static/media/3-4.92820cbc.png",
"static/media/34@2x.ed8e5910.png": "/build/static/media/34@2x.ed8e5910.png",
"static/media/35@2x.33462edc.png": "/build/static/media/35@2x.33462edc.png",
"static/media/36@2x.8f54f5ba.png": "/build/static/media/36@2x.8f54f5ba.png",
"static/media/37@2x.97a40a2a.png": "/build/static/media/37@2x.97a40a2a.png",
"static/media/38@2x.f072fe68.png": "/build/static/media/38@2x.f072fe68.png",
"static/media/39@2x.ee1af05a.png": "/build/static/media/39@2x.ee1af05a.png",
"static/media/4-1.79fa159d.png": "/build/static/media/4-1.79fa159d.png",
"static/media/4-2.9c066e75.png": "/build/static/media/4-2.9c066e75.png",
"static/media/4-3.a1487a5b.png": "/build/static/media/4-3.a1487a5b.png",
"static/media/4-4.5eb40734.png": "/build/static/media/4-4.5eb40734.png",
"static/media/40@2x.f10a55e2.png": "/build/static/media/40@2x.f10a55e2.png",
"static/media/42@2x.25d6b5fd.png": "/build/static/media/42@2x.25d6b5fd.png",
"static/media/44@2x.1374baf9.png": "/build/static/media/44@2x.1374baf9.png",
"static/media/46@2x.e272d43e.png": "/build/static/media/46@2x.e272d43e.png",
"static/media/48@2x.3bde4de9.png": "/build/static/media/48@2x.3bde4de9.png",
"static/media/49.b03e6efe.png": "/build/static/media/49.b03e6efe.png",
"static/media/50@2x.69b76634.png": "/build/static/media/50@2x.69b76634.png",
"static/media/52@2x.41805cbb.png": "/build/static/media/52@2x.41805cbb.png",
"static/media/55@2x.83486b73.png": "/build/static/media/55@2x.83486b73.png",
"static/media/57@2x.8dc6b0b8.png": "/build/static/media/57@2x.8dc6b0b8.png",
"static/media/59@2x.b0884ef0.png": "/build/static/media/59@2x.b0884ef0.png",
"static/media/61@2x.99d3cc3e.png": "/build/static/media/61@2x.99d3cc3e.png",
"static/media/63@2x.49f389b9.png": "/build/static/media/63@2x.49f389b9.png",
"static/media/65@2x.ef33e2f9.png": "/build/static/media/65@2x.ef33e2f9.png",
"static/media/67@2x.4a4f4b6c.png": "/build/static/media/67@2x.4a4f4b6c.png",
"static/media/69@2x.379c6a82.png": "/build/static/media/69@2x.379c6a82.png",
"static/media/70.df160b27.png": "/build/static/media/70.df160b27.png",
"static/media/BJHKHT.f065403a.png": "/build/static/media/BJHKHT.f065403a.png",
"static/media/CEC.3b748059.png": "/build/static/media/CEC.3b748059.png",
"static/media/GFKJ.eb30c414.png": "/build/static/media/GFKJ.eb30c414.png",
"static/media/HSKY.2e76ba44.png": "/build/static/media/HSKY.2e76ba44.png",
"static/media/ISCAS.851fcfda.png": "/build/static/media/ISCAS.851fcfda.png",
"static/media/KYRJLM.2d659e5c.png": "/build/static/media/KYRJLM.2d659e5c.png",
"static/media/katex.css": "/build/static/media/KaTeX_Typewriter-Regular.d3c8e68f.woff",
"static/media/LC.f247fdb8.png": "/build/static/media/LC.f247fdb8.png",
"static/media/LSLM.99387946.png": "/build/static/media/LSLM.99387946.png",
"static/media/ML.08d278e2.png": "/build/static/media/ML.08d278e2.png",
"static/media/NJDX.bb34b326.png": "/build/static/media/NJDX.bb34b326.png",
"static/media/QH.b57a0131.png": "/build/static/media/QH.b57a0131.png",
"static/media/SHJT.426bf0c7.png": "/build/static/media/SHJT.426bf0c7.png",
"static/media/TX.b703476c.png": "/build/static/media/TX.b703476c.png",
"static/media/WXYJY.21e40191.png": "/build/static/media/WXYJY.21e40191.png",
"static/media/XH.a0a88f17.png": "/build/static/media/XH.a0a88f17.png",
"static/media/XJY.b4c57bf1.png": "/build/static/media/XJY.b4c57bf1.png",
"static/media/YKD.4f7e2766.png": "/build/static/media/YKD.4f7e2766.png",
"static/media/ZC.ad056aa5.png": "/build/static/media/ZC.ad056aa5.png",
"static/media/achievements.f20b7e39.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.24214b6e.png": "/build/static/media/ball.24214b6e.png",
"static/media/banner-interim.c50ff667.png": "/build/static/media/banner-interim.c50ff667.png",
"static/media/banner-interim1.bc583d0a.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.84187e6e.png",
"static/media/banner.f7da2db1.png": "/build/static/media/banner.f7da2db1.png",
"static/media/banner2024.65b24d59.jpg": "/build/static/media/banner2024.65b24d59.jpg",
"static/media/banner_list.e02c5e16.jpg": "/build/static/media/banner_list.e02c5e16.jpg",
"static/media/beijing.bfcd5b0e.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.a54fdc70.png": "/build/static/media/ccf_logo.a54fdc70.png",
"static/media/ccf_logo1.be10ead7.png": "/build/static/media/ccf_logo1.be10ead7.png",
"static/media/codeafter.c3088c74.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.4fe86b12.png": "/build/static/media/computer.4fe86b12.png",
"static/media/devops.39983f5b.png": "/build/static/media/devops.39983f5b.png",
"static/media/earth.050b1435.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.292dbf56.png": "/build/static/media/freeBanner.292dbf56.png",
"static/media/fun1.c99ffa49.png": "/build/static/media/fun1.c99ffa49.png",
"static/media/fun2.12f22bca.png": "/build/static/media/fun2.12f22bca.png",
"static/media/fun3.75c280e6.png": "/build/static/media/fun3.75c280e6.png",
"static/media/fun4.f499794e.png": "/build/static/media/fun4.f499794e.png",
"static/media/fun5.96b44942.png": "/build/static/media/fun5.96b44942.png",
"static/media/gitlink-gz.d351910b.png": "/build/static/media/gitlink-gz.d351910b.png",
"static/media/gitlink-qq.90d5ac1b.png": "/build/static/media/gitlink-qq.90d5ac1b.png",
"static/media/gitlink1.4bf0ed96.png": "/build/static/media/gitlink1.4bf0ed96.png",
"static/media/gitlink2.0ec0ec22.png": "/build/static/media/gitlink2.0ec0ec22.png",
"static/media/green_nodata.be7b538b.png": "/build/static/media/green_nodata.be7b538b.png",
"static/media/head.52aa3fc8.png": "/build/static/media/head.52aa3fc8.png",
"static/media/help.0bfb2587.png": "/build/static/media/help.0bfb2587.png",
"static/media/help_bg.d2bb4c18.png": "/build/static/media/help_bg.d2bb4c18.png",
"static/media/huake.63b6a34d.png": "/build/static/media/huake.63b6a34d.png",
"static/media/huawei.73ec7c22.png": "/build/static/media/huawei.73ec7c22.png",
"static/media/icon.1322725f.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.676de78a.png",
"static/media/img1.8560258f.png": "/build/static/media/img1.8560258f.png",
"static/media/img1.e0beda57.png": "/build/static/media/img1.e0beda57.png",
"static/media/img1.fc155528.png": "/build/static/media/img1.fc155528.png",
"static/media/img10.64149a3d.png": "/build/static/media/img10.64149a3d.png",
"static/media/img15.87a3556c.png": "/build/static/media/img15.87a3556c.png",
"static/media/img16.32badab9.png": "/build/static/media/img16.32badab9.png",
"static/media/img17.c25d5edc.png": "/build/static/media/img17.c25d5edc.png",
"static/media/img18.4963efc1.png": "/build/static/media/img18.4963efc1.png",
"static/media/img2.789fbbfe.png": "/build/static/media/img2.789fbbfe.png",
"static/media/img2.9e713c6e.png": "/build/static/media/img2.9e713c6e.png",
"static/media/img2.ae303051.png": "/build/static/media/img2.ae303051.png",
"static/media/img3.cee3ac5b.png": "/build/static/media/img3.cee3ac5b.png",
"static/media/img4.53c937cb.png": "/build/static/media/img4.53c937cb.png",
"static/media/img5.ca3a2287.png": "/build/static/media/img5.ca3a2287.png",
"static/media/img6.8f81bf78.png": "/build/static/media/img6.8f81bf78.png",
"static/media/img7.e4a68e6e.png": "/build/static/media/img7.e4a68e6e.png",
"static/media/img8.10500e00.png": "/build/static/media/img8.10500e00.png",
"static/media/img9.d25372ba.png": "/build/static/media/img9.d25372ba.png",
"static/media/importNone.5bada960.png": "/build/static/media/importNone.5bada960.png",
"static/media/introduce.30b50cda.png": "/build/static/media/introduce.30b50cda.png",
"static/media/jijinhui.041fb524.png": "/build/static/media/jijinhui.041fb524.png",
"static/media/lightspot1.9214f0ae.png": "/build/static/media/lightspot1.9214f0ae.png",
"static/media/lightspot2.b7053786.png": "/build/static/media/lightspot2.b7053786.png",
"static/media/lightspot3.2f8af8da.png": "/build/static/media/lightspot3.2f8af8da.png",
"static/media/lightspot4.93769763.png": "/build/static/media/lightspot4.93769763.png",
"static/media/logo.png": "/build/static/media/logo.62af9fee.png",
"static/media/logo.f0d4927b.svg": "/build/static/media/logo.f0d4927b.svg",
"static/media/logo1.77949f0b.png": "/build/static/media/logo1.77949f0b.png",
"static/media/logo1.ec3c2e67.png": "/build/static/media/logo1.ec3c2e67.png",
"static/media/logo2.b04c07f2.png": "/build/static/media/logo2.b04c07f2.png",
"static/media/mainbanner.659efd27.png": "/build/static/media/mainbanner.659efd27.png",
"static/media/mulan.690d2289.png": "/build/static/media/mulan.690d2289.png",
"static/media/newsBg.66918645.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.14961064.svg": "/build/static/media/phone.14961064.svg",
"static/media/qqChat.9e56cc22.png": "/build/static/media/qqChat.9e56cc22.png",
"static/media/resultBanner2.c3095c5d.png": "/build/static/media/resultBanner2.c3095c5d.png",
"static/media/resultBanner3.e11193de.png": "/build/static/media/resultBanner3.e11193de.png",
"static/media/resultBanner4.6eda6ee5.png": "/build/static/media/resultBanner4.6eda6ee5.png",
"static/media/slick-theme.css": "/build/static/media/slick.c94f7671.ttf",
"static/media/sponsor11.5e9da48d.png": "/build/static/media/sponsor11.5e9da48d.png",
"static/media/sponsor21.8a655acc.png": "/build/static/media/sponsor21.8a655acc.png",
"static/media/sponsor22.96e2b643.png": "/build/static/media/sponsor22.96e2b643.png",
"static/media/sponsor31.0fd95bcb.png": "/build/static/media/sponsor31.0fd95bcb.png",
"static/media/sponsor33.27be3b2d.png": "/build/static/media/sponsor33.27be3b2d.png",
"static/media/sponsor42.cac8770a.png": "/build/static/media/sponsor42.cac8770a.png",
"static/media/sponsor43.9e4a3afb.png": "/build/static/media/sponsor43.9e4a3afb.png",
"static/media/studentProject.f5bd2481.png": "/build/static/media/studentProject.f5bd2481.png",
"static/media/studentProject2.78fd5476.png": "/build/static/media/studentProject2.78fd5476.png",
"static/media/subtitle.5019e086.png": "/build/static/media/subtitle.5019e086.png",
"static/media/teacher1.ee492a9b.png": "/build/static/media/teacher1.ee492a9b.png",
"static/media/teacher10.9298db29.png": "/build/static/media/teacher10.9298db29.png",
"static/media/teacher11.8a0d8669.png": "/build/static/media/teacher11.8a0d8669.png",
"static/media/teacher12.47e02224.png": "/build/static/media/teacher12.47e02224.png",
"static/media/teacher13.f7886e36.png": "/build/static/media/teacher13.f7886e36.png",
"static/media/teacher14.83b48396.png": "/build/static/media/teacher14.83b48396.png",
"static/media/teacher15.5d777604.png": "/build/static/media/teacher15.5d777604.png",
"static/media/teacher2.b2b9919d.png": "/build/static/media/teacher2.b2b9919d.png",
"static/media/teacher3.20cb800b.png": "/build/static/media/teacher3.20cb800b.png",
"static/media/teacher4.c15a0bda.png": "/build/static/media/teacher4.c15a0bda.png",
"static/media/teacher5.9397d078.png": "/build/static/media/teacher5.9397d078.png",
"static/media/teacher6.06b6f465.png": "/build/static/media/teacher6.06b6f465.png",
"static/media/teacher7.4102dcc1.png": "/build/static/media/teacher7.4102dcc1.png",
"static/media/teacher8.5d3f117e.png": "/build/static/media/teacher8.5d3f117e.png",
"static/media/teacher9.69b0adae.png": "/build/static/media/teacher9.69b0adae.png",
"static/media/title.132e93bf.png": "/build/static/media/title.132e93bf.png",
"static/media/vision-fw.feb9fd4c.png": "/build/static/media/vision-fw.feb9fd4c.png",
"static/media/vision-jz.a991d471.png": "/build/static/media/vision-jz.a991d471.png",
"static/media/vision-yj.8ca7b113.png": "/build/static/media/vision-yj.8ca7b113.png",
"static/media/vision-zy.e4ac356e.png": "/build/static/media/vision-zy.e4ac356e.png",
"static/media/vision0.c7dbea1d.png": "/build/static/media/vision0.c7dbea1d.png",
"static/media/vision1.072e7be4.png": "/build/static/media/vision1.072e7be4.png",
"static/media/vision2.024daa92.png": "/build/static/media/vision2.024daa92.png",
"static/media/vision3.fee43e80.png": "/build/static/media/vision3.fee43e80.png",
"static/media/xigongye.d51231d3.png": "/build/static/media/xigongye.d51231d3.png",
"static/media/xiuos.67682257.png": "/build/static/media/xiuos.67682257.png",
"static/media/xjy.6e62f4d6.png": "/build/static/media/xjy.6e62f4d6.png",
"static/media/浙江大学.3c545e69.png": "/build/static/media/浙江大学.3c545e69.png",
"ts.worker.js": "/build/ts.worker.js",
"ts.worker.js.LICENSE.txt": "/build/ts.worker.js.LICENSE.txt"
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,239 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
KindEditor.lang({
imagedirectupload:'本地图片',
more: '切换到更多功能',
less: '切换到简单功能',
source : 'HTML代码',
preview : '预览',
undo : '后退(Ctrl+Z)',
redo : '前进(Ctrl+Y)',
cut : '剪切(Ctrl+X)',
copy : '复制(Ctrl+C)',
paste : '粘贴(Ctrl+V)',
plainpaste : '粘贴为无格式文本',
wordpaste : '从Word粘贴',
selectall : '全选(Ctrl+A)',
justifyleft : '左对齐',
justifycenter : '居中',
justifyright : '右对齐',
justifyfull : '两端对齐',
insertorderedlist : '编号',
insertunorderedlist : '项目符号',
indent : '增加缩进',
outdent : '减少缩进',
subscript : '下标',
superscript : '上标',
formatblock : '段落',
fontname : '字体',
fontsize : '文字大小',
forecolor : '文字颜色',
hilitecolor : '文字背景',
bold : '粗体(Ctrl+B)',
italic : '斜体(Ctrl+I)',
underline : '下划线(Ctrl+U)',
strikethrough : '删除线',
removeformat : '删除格式',
image : '图片',
multiimage : '批量图片上传',
flash : 'Flash',
media : '视音频',
table : '表格',
tablecell : '单元格',
hr : '插入横线',
emoticons : '插入表情',
link : '超级链接',
unlink : '取消超级链接',
fullscreen : '全屏显示',
about : '关于',
print : '打印(Ctrl+P)',
filemanager : '文件空间',
code : '插入程序代码',
map : 'Google地图',
baidumap : '百度地图',
lineheight : '行距',
clearhtml : '清理HTML代码',
pagebreak : '插入分页符',
quickformat : '一键排版',
insertfile : '插入文件',
template : '插入模板',
anchor : '锚点',
yes : '确定',
no : '取消',
close : '关闭',
editImage : '图片属性',
deleteImage : '删除图片',
editFlash : 'Flash属性',
deleteFlash : '删除Flash',
editMedia : '视音频属性',
deleteMedia : '删除视音频',
editLink : '超级链接属性',
deleteLink : '取消超级链接',
editAnchor : '锚点属性',
deleteAnchor : '删除锚点',
tableprop : '表格属性',
tablecellprop : '单元格属性',
tableinsert : '插入表格',
tabledelete : '删除表格',
tablecolinsertleft : '左侧插入列',
tablecolinsertright : '右侧插入列',
tablerowinsertabove : '上方插入行',
tablerowinsertbelow : '下方插入行',
tablerowmerge : '向下合并单元格',
tablecolmerge : '向右合并单元格',
tablerowsplit : '拆分行',
tablecolsplit : '拆分列',
tablecoldelete : '删除列',
tablerowdelete : '删除行',
noColor : '无颜色',
pleaseSelectFile : '请选择文件。',
invalidImg : "请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",
invalidMedia : "请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",
invalidWidth : "宽度必须为数字。",
invalidHeight : "高度必须为数字。",
invalidBorder : "边框必须为数字。",
invalidUrl : "请输入有效的URL地址。",
invalidRows : '行数为必选项只允许输入大于0的数字。',
invalidCols : '列数为必选项只允许输入大于0的数字。',
invalidPadding : '边距必须为数字。',
invalidSpacing : '间距必须为数字。',
invalidJson : '服务器发生故障。',
uploadSuccess : '上传成功。',
cutError : '您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。',
copyError : '您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。',
pasteError : '您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。',
ajaxLoading : '加载中,请稍候 ...',
uploadLoading : '上传中,请稍候 ...',
uploadError : '上传错误',
'plainpaste.comment' : '请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。',
'wordpaste.comment' : '请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。',
'code.pleaseInput' : '请输入程序代码。',
'link.url' : 'URL',
'link.linkType' : '打开类型',
'link.newWindow' : '新窗口',
'link.selfWindow' : '当前窗口',
'flash.url' : 'URL',
'flash.width' : '宽度',
'flash.height' : '高度',
'flash.upload' : '上传',
'flash.viewServer' : '文件空间',
'media.url' : 'URL',
'media.width' : '宽度',
'media.height' : '高度',
'media.autostart' : '自动播放',
'media.upload' : '上传',
'media.viewServer' : '文件空间',
'image.remoteImage' : '网络图片',
'image.localImage' : '本地上传',
'image.remoteUrl' : '图片地址',
'image.localUrl' : '上传文件',
'image.size' : '图片大小',
'image.width' : '宽',
'image.height' : '高',
'image.resetSize' : '重置大小',
'image.align' : '对齐方式',
'image.defaultAlign' : '默认方式',
'image.leftAlign' : '左对齐',
'image.rightAlign' : '右对齐',
'image.imgTitle' : '图片说明',
'image.upload' : '浏览...',
'image.viewServer' : '图片空间',
'multiimage.uploadDesc' : '允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>',
'multiimage.startUpload' : '开始上传',
'multiimage.clearAll' : '全部清空',
'multiimage.insertAll' : '全部插入',
'multiimage.queueLimitExceeded' : '文件数量超过限制。',
'multiimage.fileExceedsSizeLimit' : '文件大小超过限制。',
'multiimage.zeroByteFile' : '无法上传空文件。',
'multiimage.invalidFiletype' : '文件类型不正确。',
'multiimage.unknownError' : '发生异常,无法上传。',
'multiimage.pending' : '等待上传',
'multiimage.uploadError' : '上传失败',
'filemanager.emptyFolder' : '空文件夹',
'filemanager.moveup' : '移到上一级文件夹',
'filemanager.viewType' : '显示方式:',
'filemanager.viewImage' : '缩略图',
'filemanager.listImage' : '详细信息',
'filemanager.orderType' : '排序方式:',
'filemanager.fileName' : '名称',
'filemanager.fileSize' : '大小',
'filemanager.fileType' : '类型',
'insertfile.url' : 'URL',
'insertfile.title' : '文件说明',
'insertfile.upload' : '上传',
'insertfile.viewServer' : '文件空间',
'table.cells' : '单元格数',
'table.rows' : '行数',
'table.cols' : '列数',
'table.size' : '大小',
'table.width' : '宽度',
'table.height' : '高度',
'table.percent' : '%',
'table.px' : 'px',
'table.space' : '边距间距',
'table.padding' : '边距',
'table.spacing' : '间距',
'table.align' : '对齐方式',
'table.textAlign' : '水平对齐',
'table.verticalAlign' : '垂直对齐',
'table.alignDefault' : '默认',
'table.alignLeft' : '左对齐',
'table.alignCenter' : '居中',
'table.alignRight' : '右对齐',
'table.alignTop' : '顶部',
'table.alignMiddle' : '中部',
'table.alignBottom' : '底部',
'table.alignBaseline' : '基线',
'table.border' : '边框',
'table.borderWidth' : '边框',
'table.borderColor' : '颜色',
'table.backgroundColor' : '背景颜色',
'map.address' : '地址: ',
'map.search' : '搜索',
'baidumap.address' : '地址: ',
'baidumap.search' : '搜索',
'baidumap.insertDynamicMap' : '插入动态地图',
'anchor.name' : '锚点名称',
'formatblock.formatBlock' : {
h1 : '标题 1',
h2 : '标题 2',
h3 : '标题 3',
h4 : '标题 4',
p : '正 文'
},
'fontname.fontName' : {
'SimSun' : '宋体',
'NSimSun' : '新宋体',
'FangSong_GB2312' : '仿宋_GB2312',
'KaiTi_GB2312' : '楷体_GB2312',
'SimHei' : '黑体',
'Microsoft YaHei' : '微软雅黑',
'Arial' : 'Arial',
'Arial Black' : 'Arial Black',
'Times New Roman' : 'Times New Roman',
'Courier New' : 'Courier New',
'Tahoma' : 'Tahoma',
'Verdana' : 'Verdana'
},
'lineheight.lineHeight' : [
{'1' : '单倍行距'},
{'1.5' : '1.5倍行距'},
{'2' : '2倍行距'},
{'2.5' : '2.5倍行距'},
{'3' : '3倍行距'}
],
'template.selectTemplate' : '可选模板',
'template.replaceContent' : '替换当前内容',
'template.fileList' : {
'1.html' : '图片和文字',
'2.html' : '表格',
'3.html' : '项目编号'
}
}, 'zh_CN');

View File

@ -0,0 +1,71 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
KindEditor.plugin('autoheight', function(K) {
var self = this;
//self.autoHeightMode = true;
if (!self.autoHeightMode) {
return;
}
var minHeight;
function hideScroll() {
var edit = self.edit;
var body = edit.doc.body;
edit.iframe[0].scroll = 'no';
body.style.overflowY = 'hidden';
}
function resetHeight() {
var edit = self.edit;
var body = edit.doc.body;
edit.iframe.height(minHeight);
//最高418 超过用滚动条
self.resize(null, Math.max(
(K.IE ? body.scrollHeight : body.offsetHeight) > 385 ? 385+33 : (K.IE ? body.scrollHeight : body.offsetHeight)
+ 33, minHeight));
if( self.height == "418px" ){
edit.iframe[0].scroll = 'yes';
body.style.overflowY = 'auto';
}
else{
hideScroll();
}
}
function init() {
minHeight = K.removeUnit(self.height);
self.edit.afterChange(resetHeight);
hideScroll();
var edit = self.edit;
var body = edit.doc.body;
edit.iframe.height(minHeight);
self.resize(null, Math.max(
((K.IE ? body.scrollHeight : body.offsetHeight) > 250 ? 250 : (K.IE ? body.scrollHeight : body.offsetHeight)) //限制初始化太高的情况
+ 33, minHeight));
}
if (self.isCreated) {
init();
} else {
self.afterCreate(init);
}
});
/*
* 如何实现真正的自动高度
* 修改编辑器高度之后再次获取body内容高度时最小值只会是当前iframe的设置高度这样就导致高度只增不减
* 所以每次获取body内容高度之前先将iframe的高度重置为最小高度这样就能获取body的实际高度
* 由此就实现了真正的自动高度
* 测试chromefirefoxIE9IE8
* */

View File

@ -0,0 +1,56 @@
.ke-content {
font-family: "微软雅黑","宋体";
}
.ke-content pre {
font-size:9pt;
font-family:Courier New,Arial;
border:1px solid #ddd;
border-left:5px solid #6CE26C;
background:#f6f6f6;
padding:5px;
}
.ke-content code {
margin: 0 2px;
padding: 0 5px;
white-space: nowrap;
border: 1px solid #DDD;
background-color: #F6F6F6;
border-radius: 3px;
}
.ke-content pre>code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}
.ke-content pre code {
background-color: transparent;
border: none;
}
.ke-content p {
/*margin: 0 0 15px 0;*/
/*margin-bottom:15pt;*/
line-height:1.5;
/*letter-spacing: 1px;*/
}
.ke-content div.ref {border:1px solid #ddd;margin:0 0 10px 0;padding:2px;font-size:9pt;background:#ffe;}
.ke-content div.ref h4 {margin:0;padding:1px 3px;background:#CC9966;color:#fff;font-size:9pt;font-weight:normal;}
.ke-content div.ref .ref_body {margin:0;padding:2px;line-height:20px;color:#666;font-size:9pt;}
.ke-content blockquote{background: none;border: none;padding: 0px;margin: 0 0 0 40px;}
span.at {color:#269ac9;}
span.at a{color:#269ac9;text-decoration: none;}
/*yk*/
.ke-content ol li{list-style-type: decimal;}
.ke-content ul li{list-style-type: disc;}
.ke-content ol,.ke-content ul,.ke-content h1,.ke-content h2,.ke-content h3,.ke-content h4{margin-top:0;margin-bottom: 0;}
.ke-content a{color: #136ec2;}
.ke-content a:link,.ke-content a:visited{text-decoration:none;}

View File

@ -0,0 +1,361 @@
// Generated by CoffeeScript 1.9.0
/*
paste.js is an interface to read data ( text / image ) from clipboard in different browsers. It also contains several hacks.
https://github.com/layerssss/paste.js
*/
(function() {
var $, Paste, createHiddenEditable, dataURLtoBlob;
$ = window.jQuery;
$.paste = function(pasteContainer) {
var pm;
if (typeof console !== "undefined" && console !== null) {
console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead.");
}
pm = Paste.mountNonInputable(pasteContainer);
return pm._container;
};
$.fn.pastableNonInputable = function() {
var el, _i, _len;
for (_i = 0, _len = this.length; _i < _len; _i++) {
el = this[_i];
Paste.mountNonInputable(el);
}
return this;
};
$.fn.pastableTextarea = function() {
var el, _i, _len;
for (_i = 0, _len = this.length; _i < _len; _i++) {
el = this[_i];
Paste.mountTextarea(el);
}
return this;
};
$.fn.pastableContenteditable = function() {
var el, _i, _len;
for (_i = 0, _len = this.length; _i < _len; _i++) {
el = this[_i];
Paste.mountContenteditable(el);
}
return this;
};
dataURLtoBlob = function(dataURL, sliceSize) {
var b64Data, byteArray, byteArrays, byteCharacters, byteNumbers, contentType, i, m, offset, slice, _ref;
if (sliceSize == null) {
sliceSize = 512;
}
if (!(m = dataURL.match(/^data\:([^\;]+)\;base64\,(.+)$/))) {
return null;
}
_ref = m, m = _ref[0], contentType = _ref[1], b64Data = _ref[2];
byteCharacters = atob(b64Data);
byteArrays = [];
offset = 0;
while (offset < byteCharacters.length) {
slice = byteCharacters.slice(offset, offset + sliceSize);
byteNumbers = new Array(slice.length);
i = 0;
while (i < slice.length) {
byteNumbers[i] = slice.charCodeAt(i);
i++;
}
byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
offset += sliceSize;
}
return new Blob(byteArrays, {
type: contentType
});
};
createHiddenEditable = function() {
return $(document.createElement('div')).attr('contenteditable', true).css({
width: 1,
height: 1,
position: 'fixed',
left: -100,
overflow: 'hidden'
});
};
Paste = (function() {
Paste.prototype._target = null;
Paste.prototype._container = null;
Paste.mountNonInputable = function(nonInputable) {
var paste;
paste = new Paste(createHiddenEditable().appendTo(nonInputable), nonInputable);
$(nonInputable).on('click', (function(_this) {
return function() {
return paste._container.focus();
};
})(this));
paste._container.on('focus', (function(_this) {
return function() {
return $(nonInputable).addClass('pastable-focus');
};
})(this));
return paste._container.on('blur', (function(_this) {
return function() {
return $(nonInputable).removeClass('pastable-focus');
};
})(this));
};
Paste.mountTextarea = function(textarea) {
var ctlDown, paste;
if (-1 !== navigator.userAgent.toLowerCase().indexOf('chrome')) {
return this.mountContenteditable(textarea);
}
paste = new Paste(createHiddenEditable().insertBefore(textarea), textarea);
ctlDown = false;
$(textarea).on('keyup', function(ev) {
var _ref;
if ((_ref = ev.keyCode) === 17 || _ref === 224) {
return ctlDown = false;
}
});
$(textarea).on('keydown', function(ev) {
var _ref;
if ((_ref = ev.keyCode) === 17 || _ref === 224) {
ctlDown = true;
}
if (ctlDown && ev.keyCode === 86) {
return paste._container.focus();
}
});
$(paste._target).on('pasteImage', (function(_this) {
return function() {
return $(textarea).focus();
};
})(this));
$(paste._target).on('pasteText', (function(_this) {
return function() {
return $(textarea).focus();
};
})(this));
$(textarea).on('focus', (function(_this) {
return function() {
return $(textarea).addClass('pastable-focus');
};
})(this));
return $(textarea).on('blur', (function(_this) {
return function() {
return $(textarea).removeClass('pastable-focus');
};
})(this));
};
Paste.mountContenteditable = function(contenteditable) {
var paste;
paste = new Paste(contenteditable, contenteditable);
$(contenteditable).on('focus', (function(_this) {
return function() {
return $(contenteditable).addClass('pastable-focus');
};
})(this));
return $(contenteditable).on('blur', (function(_this) {
return function() {
return $(contenteditable).removeClass('pastable-focus');
};
})(this));
};
function Paste(_at__container, _at__target) {
this._container = _at__container;
this._target = _at__target;
this._container = $(this._container);
this._target = $(this._target).addClass('pastable');
this._container.on('paste', (function(_this) {
return function(ev) {
var clipboardData, file, item, reader, text, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3, _results;
if (((_ref = ev.originalEvent) != null ? _ref.clipboardData : void 0) != null) {
clipboardData = ev.originalEvent.clipboardData;
if (clipboardData.items) {
_ref1 = clipboardData.items;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
item = _ref1[_i];
if (item.type.match(/^image\//)) {
reader = new FileReader();
reader.onload = function(event) {
return _this._handleImage(event.target.result);
};
reader.readAsDataURL(item.getAsFile());
}
if (item.type === 'text/plain') {
item.getAsString(function(string) {
return _this._target.trigger('pasteText', {
text: string
});
});
}
}
} else {
if (-1 !== Array.prototype.indexOf.call(clipboardData.types, 'text/plain')) {
text = clipboardData.getData('Text');
_this._target.trigger('pasteText', {
text: text
});
}
_this._checkImagesInContainer(function(src) {
return _this._handleImage(src);
});
}
}
if (clipboardData = window.clipboardData) {
if ((_ref2 = (text = clipboardData.getData('Text'))) != null ? _ref2.length : void 0) {
return _this._target.trigger('pasteText', {
text: text
});
} else {
_ref3 = clipboardData.files;
_results = [];
for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
file = _ref3[_j];
_this._handleImage(URL.createObjectURL(file));
_results.push(_this._checkImagesInContainer(function() {}));
}
return _results;
}
}
};
})(this));
}
Paste.prototype._handleImage = function(src) {
var loader;
loader = new Image();
loader.onload = (function(_this) {
return function() {
var blob, canvas, ctx, dataURL;
canvas = document.createElement('canvas');
canvas.width = loader.width;
canvas.height = loader.height;
ctx = canvas.getContext('2d');
ctx.drawImage(loader, 0, 0, canvas.width, canvas.height);
dataURL = null;
try {
dataURL = canvas.toDataURL('image/png');
blob = dataURLtoBlob(dataURL);
} catch (_error) {}
if (dataURL) {
return _this._target.trigger('pasteImage', {
blob: blob,
dataURL: dataURL,
width: loader.width,
height: loader.height
});
}
};
})(this);
return loader.src = src;
};
Paste.prototype._checkImagesInContainer = function(cb) {
var img, timespan, _i, _len, _ref;
timespan = Math.floor(1000 * Math.random());
_ref = this._container.find('img');
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
img = _ref[_i];
img["_paste_marked_" + timespan] = true;
}
return setTimeout((function(_this) {
return function() {
var _j, _len1, _ref1, _results;
_ref1 = _this._container.find('img');
_results = [];
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
img = _ref1[_j];
if (!img["_paste_marked_" + timespan]) {
cb(img.src);
}
//firefox问题处理因为采用了 pastableContenteditable 模式,故只需要删除默认的粘贴
if ($(img).attr('src').startsWith('data:image/')) {
_results.push($(img).remove());
};
}
return _results;
};
})(this), 1);
};
return Paste;
})();
}).call(this);
KindEditor.plugin('paste', function(K) {
var editor = this,
name = 'paste';
if(editor.edit == undefined || editor.edit.iframe == undefined){
return;
}
var contentWindow = editor.edit.iframe[0].contentWindow;
//var contentWindow = editor.iframeDoc;
//var contentWindow = document.getElementsByTagName('iframe')[0].contentWindow;
var nodeBody = contentWindow.document.getElementsByTagName('body')[0];
console.log(nodeBody);
$(nodeBody).pastableContenteditable();
dataURItoBlob = function(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
};
$(nodeBody).on('pasteImage', function(ev, data) {
console.log('pasteImage');
console.log("dataURL: " + data.dataURL);
console.log("width: " + data.width);
console.log("height: " + data.height);
var blob = dataURItoBlob(data.dataURL);
if (data.blob !== null) {
var data = new FormData();
// data.append("imgFile",blob, "imageFilename.png");
data.append("file",blob, "imageFilename.png");
console.log(data);
$.ajax({
url: '/kindeditor/upload?dir=image',
url: '/api/attachments.json',
contentType: false,
type: 'POST',
data: data,
processData: false,
success: function(data) {
console.log(data);
// editor.exec('insertimage', JSON.parse(data).url);
// /api/attachments/227362
editor.exec('insertimage', '/api/attachments/' + data.id);
}
});
}
});
return;
});

File diff suppressed because it is too large Load Diff

1
css.worker.js Normal file

File diff suppressed because one or more lines are too long

1
css/alex/alex.all.global.min.css vendored Normal file

File diff suppressed because one or more lines are too long

539
css/demo.css Normal file
View File

@ -0,0 +1,539 @@
/* 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;
}

1
css/detail.css Normal file

File diff suppressed because one or more lines are too long

5
css/editormd.min.css vendored Normal file

File diff suppressed because one or more lines are too long

7877
css/edu-all.css Normal file

File diff suppressed because it is too large Load Diff

3511
css/edu-common.css Normal file

File diff suppressed because it is too large Load Diff

4215
css/edu-main.css Normal file

File diff suppressed because it is too large Load Diff

2411
css/edu-public.css Normal file

File diff suppressed because it is too large Load Diff

6675
css/edu-purge.css Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +0,0 @@
@font-face {
font-family: Alimama ShuHeiTi;
src: url(../font/AlimamaShuHeiTi-Bold.ttf);
}
@font-face {
font-family: Alibaba PuHuiTi;
src: url(../font/ALIBABA-PUHUITI-MEDIUM.TTF);
}
@font-face {
font-family: YouSheBiaoTiHei;
src: url(../font/YouSheBiaoTiHei-2.ttf);
}

1
css/gitlink.min.css vendored Normal file

File diff suppressed because one or more lines are too long

3567
css/iconfont.css Normal file

File diff suppressed because it is too large Load Diff

1
css/iconfont.js Normal file

File diff suppressed because one or more lines are too long

6225
css/iconfont.json Normal file

File diff suppressed because it is too large Load Diff

BIN
css/iconfont.ttf Normal file

Binary file not shown.

BIN
css/iconfont.woff Normal file

Binary file not shown.

BIN
css/iconfont.woff2 Normal file

Binary file not shown.

View File

@ -1,47 +0,0 @@
@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;
background-color: #F8F9FF;
}
@media (max-width: 767px) {
.markdown-body {
padding: 15px;
}
}
.empty {
width: 276px;
height: 276px;
display: block;
margin: auto;
}

111
css/merge.css Normal file
View File

@ -0,0 +1,111 @@
.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; }

View File

@ -1,64 +0,0 @@
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%;
}

1
editor.worker.js Normal file

File diff suppressed because one or more lines are too long

BIN
favicon-.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
fonts/FontAwesome.otf Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
html.worker.js Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 895 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

BIN
images/loading@2x.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
images/share_logo_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
images/testPicture.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

View File

@ -1,11 +1 @@
<!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.7d2ecdc7.js"></script>
</body></html>
<!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"><meta name="google-site-verification" content="rGWc47_e6dmJlLtT6ngl3WSiXMsY8FCcll2dbdlNHm0"/><meta name="viewport" content=""><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.34f8b4f8.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><script src="/build/./static/js/runtime~main.7eb5721b.js"></script><script src="/build/./static/js/main.32a56dba.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>

113
index.test.html Normal file
View File

@ -0,0 +1,113 @@
<!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 Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

19833
js/applications.js Normal file

File diff suppressed because one or more lines are too long

70
js/codemirror/addon/active-line.js vendored Normal file
View File

@ -0,0 +1,70 @@
(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);
}
});

View File

@ -0,0 +1,43 @@
// 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)};
});
});

View File

@ -0,0 +1,188 @@
// 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;
}
});

36
js/codemirror/addon/hint/show-hint.css vendored Normal file
View File

@ -0,0 +1,36 @@
.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;
}

458
js/codemirror/addon/hint/show-hint.js vendored Normal file
View File

@ -0,0 +1,458 @@
// 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);
});

9304
js/codemirror/codemirror.js Normal file

File diff suppressed because it is too large Load Diff

603
js/codemirror/lib/fuzzysort.js vendored Normal file
View File

@ -0,0 +1,603 @@
/*
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

View File

@ -0,0 +1,111 @@
.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; }

1040
js/codemirror/merge/merge.js Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More