Browse Source

清理文件

pull/6/head
hole-thu 5 years ago
parent
commit
f6a9d4c58d
  1. 92
      src/AudioWidget.js
  2. BIN
      src/infrastructure/appicon/course_survey.png
  3. BIN
      src/infrastructure/appicon/dropdown.png
  4. BIN
      src/infrastructure/appicon/dropdown_rev.png
  5. BIN
      src/infrastructure/appicon/hole.png
  6. BIN
      src/infrastructure/appicon/homepage.png
  7. BIN
      src/infrastructure/appicon/imasugu.png
  8. BIN
      src/infrastructure/appicon/imasugu_rev.png
  9. BIN
      src/infrastructure/appicon/score.png
  10. BIN
      src/infrastructure/appicon/syllabus.png
  11. 47
      src/infrastructure/elevator.js
  12. 9
      src/infrastructure/widgets.js

92
src/AudioWidget.js

@ -1,92 +0,0 @@
import React, { Component } from 'react';
import load from 'load-script';
window.audio_cache = {};
function load_amrnb() {
return new Promise((resolve, reject) => {
if (window.AMR) resolve();
else
load('static/amr_all.min.js', (err) => {
if (err) reject(err);
else resolve();
});
});
}
export class AudioWidget extends Component {
constructor(props) {
super(props);
this.state = {
url: this.props.src,
state: 'waiting',
data: null,
};
}
load() {
if (window.audio_cache[this.state.url]) {
this.setState({
state: 'loaded',
data: window.audio_cache[this.state.url],
});
return;
}
console.log('fetching audio', this.state.url);
this.setState({
state: 'loading',
});
Promise.all([fetch(this.state.url), load_amrnb()]).then((res) => {
res[0].blob().then((blob) => {
const reader = new FileReader();
reader.onload = (event) => {
const raw = new window.AMR().decode(event.target.result);
if (!raw) {
alert('audio decoding failed');
return;
}
const wave = window.PCMData.encode({
sampleRate: 8000,
channelCount: 1,
bytesPerSample: 2,
data: raw,
});
const binary_wave = new Uint8Array(wave.length);
for (let i = 0; i < wave.length; i++)
binary_wave[i] = wave.charCodeAt(i);
const objurl = URL.createObjectURL(
new Blob([binary_wave], { type: 'audio/wav' }),
);
window.audio_cache[this.state.url] = objurl;
this.setState({
state: 'loaded',
data: objurl,
});
};
reader.readAsBinaryString(blob);
});
this.setState({
state: 'decoding',
});
});
}
render() {
if (this.state.state === 'waiting')
return (
<p>
<a onClick={this.load.bind(this)}>加载音频</a>
</p>
);
if (this.state.state === 'loading') return <p>正在下载</p>;
else if (this.state.state === 'decoding') return <p>正在解码</p>;
else if (this.state.state === 'loaded')
return (
<p>
<audio src={this.state.data} controls />
</p>
);
}
}

BIN
src/infrastructure/appicon/course_survey.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/infrastructure/appicon/dropdown.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/infrastructure/appicon/dropdown_rev.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/infrastructure/appicon/hole.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/infrastructure/appicon/homepage.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/infrastructure/appicon/imasugu.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/infrastructure/appicon/imasugu_rev.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/infrastructure/appicon/score.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/infrastructure/appicon/syllabus.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

47
src/infrastructure/elevator.js

@ -1,47 +0,0 @@
const DUMP_VER='dump_v1';
function dump() {
return JSON.stringify({
_dump_ver: DUMP_VER,
token: localStorage['TOKEN']||null,
hole_config: localStorage['hole_config']||null,
});
}
function load(s) {
console.log('elevator: loading',s);
let obj=JSON.parse(s);
if(obj._dump_ver!==DUMP_VER) {
console.error('elevator: loading version mismatch, current',DUMP_VER,'param',obj._dump_ver);
return;
}
if(localStorage['TOKEN']===undefined && obj.token) {
console.log('replace token');
localStorage['TOKEN']=obj.token;
}
if(localStorage['hole_config']===undefined && obj.hole_config) {
console.log('replace hole config');
localStorage['hole_config']=obj.hole_config;
}
}
export function elevate() {
// load
// '?foo=fo&bar=ba' -> [["foo","fo"],["bar","ba"]]
let params=window.location.search.substr(1).split('&').map((kv)=>kv.split('='));
params.forEach((kv)=>{
if(kv.length===2 && kv[0]==='_elevator_data') {
load(decodeURIComponent(kv[1]));
let url=new URL(window.location.href);
url.search='';
window.history.replaceState('','',url.href);
}
});
// dump
if(window.location.protocol==='http:' && window.location.hostname==='pkuhelper.pku.edu.cn') {
let url=new URL(window.location.href);
url.protocol='https:';
url.search='?_elevator_data='+encodeURIComponent(dump());
window.location.replace(url.href);
}
}

9
src/infrastructure/widgets.js

@ -8,15 +8,6 @@ import buildFormatter from 'react-timeago/lib/formatters/buildFormatter';
import './global.css'; import './global.css';
import './widgets.css'; import './widgets.css';
import appicon_hole from './appicon/hole.png';
import appicon_imasugu from './appicon/imasugu.png';
import appicon_imasugu_rev from './appicon/imasugu_rev.png';
import appicon_syllabus from './appicon/syllabus.png';
import appicon_score from './appicon/score.png';
import appicon_course_survey from './appicon/course_survey.png';
import appicon_dropdown from './appicon/dropdown.png';
import appicon_dropdown_rev from './appicon/dropdown_rev.png';
import appicon_homepage from './appicon/homepage.png';
import {get_json, API_VERSION_PARAM} from './functions'; import {get_json, API_VERSION_PARAM} from './functions';
function pad2(x) { function pad2(x) {

Loading…
Cancel
Save