-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathindex.html
executable file
·164 lines (162 loc) · 8.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<!DOCTYPE html>
<html>
<head>
<title>overscript/ - Overscript Imageboard Software & Textboard Software list</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="keywords" content="9ch, 9-ch, bbs, overscript, kareha, matsuba, kusaba, drydock, futaba, shiichan, tinybb, tablecat, siokara, yotsuba, yotsubanome, tinyib, joyful note, maitaba, pixmicat, danbooru, img2, imageboard, textboard, software, bbsen" />
<meta name="description" content="overscript - a list of imageboard software and *board software" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
<script src="data.js"></script>
<style type="text/css">
body, html { font-size: 14px; background: url('bg.jpg') }
.container {
background: rgba(255,255,255,0.85);
border: 1px solid #aaa;
margin: 20px auto;
border-radius: 2px;
box-shadow: 3px 3px 4px #dedede
}
.text-purple { color: #6610f2 }
.text-black { color: black !important }
</style>
</head>
<body>
<div id="app">
<div class="container pt-4">
<div class="float-left">(<b>{{ sortedScripts.length }}</b> scripts catalogued)</div>
<div class="text-right">
<a class="nav-link" href="https://github.com/tanami/overscript"><span class="d-none d-sm-inline">View on GitHub </span><svg version=1.1 width=16 height=16 viewBox="0 0 16 16" class="octicon octicon-mark-github" aria-hidden=true><path fill-rule=evenodd d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg></a>
</div>
<div class="text-center">
<h1>Overscript</h1>
<h5>a little list of bbs scripts</h5>
<p id="spiel">
This is overscript, a comprehensive overview of all known anonymous futaba-style bulletin board scripts.
<br />
if you have any scripts you know about that aren't listed here, please email weitzeug@gmail.com with details about it
<br /><br />I am hosting a tarball archive at <a href="http://tanami.org/pub/software/TrueScript/">/pub/software/TrueScript/</a> and a git mirror <a href="http://git.tanami.org">here</a> but you should always try and get the latest version.
<br /><br />
You are also welcome to email me if you want assistance with setting up a script.
</p>
</div>
<!-- it is a pretty well-known fact that modern javascript pretends to solve all templating problems but in the end the most useful code is always the hairiest.. -->
<div id="content">
<div class="p-4 text-center">
<div class="form-group">
<label>Sort By:</label>
<div class="btn-group" role="group">
<button type="button" class="btn btn-outline-dark" @click="sortMethod = ''">None</button>
<template v-for="sortOption in sortOptions">
<button v-if="sortMethod !== sortOption[0]" type="button" class="btn btn-outline-dark" @click="sortMethod = sortOption[0]">{{ sortOption[1] }}</button>
<button v-else type="button" class="btn btn-dark" @click="sortToggle = !sortToggle">{{ sortOption[1] }} {{ (sortToggle ? '▼' : '▲') }}</button>
</template>
</div>
</div>
</div>
<table class="table table-sm table-borderless">
<template v-for="(script, index) in sortedScripts">
<tr class="border-top">
<td class="p-2">
<h5>{{ script.name }}</h5>
<h6>by <a :href="script.author_url">{{ script.author_name || 'unknown' }}</a></h6>
<div>
<template v-if="script.download_url.includes('github')">
<a class="btn btn-sm btn-outline-success" target="_none" :href="script.download_url">GitHub</a>
</template>
<template v-else-if="script.download_url !== '#none'">
<a class="btn btn-sm btn-outline-primary" target="_none" :href="script.download_url">Download</a>
</template>
<template v-else>
<a class="btn btn-sm btn-outline-secondary" target="_none" :href="script.download_url">no source</a>
</template>
</div>
</td>
<td>
<a class="text-black" :href="'img/'+getImageURL(script.name)"><img :src="'thumb/'+getImageURL(script.name)" alt="no image"></img></a>
</td>
<td>
<table class="table table-sm table-borderless">
<tr>
<td>
<div class="row">
<div class="col-3">
{{ script.language || '' }}
</div>
<div class="col-3">
<div>created: {{ script.created }}</h6></div>
</div>
<div class="col-3">
<div>status: <span :class="status[script.status]">{{ script.status }}</span></div>
</div>
<div class="col-3">
{{ script.version || '' }}
</div>
</div>
</td>
</tr>
<tr class="border-top">
<td class="align-text-bottom" colspan="2" id="note">{{ script.notes || 'no details available' }}</td>
</tr>
</table>
</td>
</tr>
</template>
</table>
</div>
<div class="text-center p-4"><small>This section of tanami.org and overscript.net is explictly provided under the GNU GPLv3 License.</small></div>
</div>
</div>
<script>
new Vue({
el: '#app',
data: {
scripts: script_data,
sortToggle: false,
sortMethod: '',
sortOptions: [
['name', 'Name'],
['language', 'Language'],
['author_name', 'Author'],
['status', 'Status'],
['created', 'Created'],
['last_checked', 'Last Checked']
],
status: {
maintained: 'text-success',
stable: 'text-success',
discontinued: 'text-danger',
missing: 'muted',
unknown: 'text-dark',
}
},
mounted: function() {
// hmm.. guess we don't need to do anything here
},
computed: {
sortedScripts: function() {
function maybe(a) {
return a ? a : ''
}
if (this.sortMethod === '') {
return this.scripts
}
else {
if (this.sortToggle) {
return this.scripts.concat().sort((a, b) => (maybe(a[this.sortMethod]).localeCompare(maybe(b[this.sortMethod]))))
}
else {
return this.scripts.concat().sort((a, b) => (maybe(b[this.sortMethod]).localeCompare(maybe(a[this.sortMethod]))))
}
}
}
},
methods: {
getImageURL: function(name) {
return name.toLowerCase().replace(/ /g, '_') + '.png';
},
},
})
</script>
</body>
</html>