2020-10-27 00:03:05 +09:00

395 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="{{ site.lang | default: "en-US" }}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css"
/>
{% seo %}
<link rel="stylesheet" href="{{ "/assets/css/style.css?v=" | append: site.github.build_revision | relative_url }}">
<!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<![endif]-->
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
<style>
@charset "UTF-8";
*,
*::before,
*::after {
box-sizing: border-box;
}
input {
display: none;
}
ul,
li {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: block;
width: 100%;
text-align: left;
}
li + li {
border-top: thin solid #ccc;
}
li div {
display: -webkit-box;
display: flex;
padding: 0.2rem 0;
-webkit-box-align: start;
align-items: flex-start;
}
input:checked + label {
/*text-decoration: line-through;*/
color: #4CAF50;
}
input:checked + label::before {
opacity: 0;
}
label {
-webkit-transition: 0.2s ease;
transition: 0.2s ease;
-webkit-transition-property: color, padding;
transition-property: color, padding;
cursor: pointer;
display: block;
padding: 1rem 0.5rem 1rem 3.5rem;
color: #C62828;
position: relative;
-webkit-transition: color ease 0.3s;
transition: color ease 0.3s;
}
label::before,
label::after {
content: '𝗫';
box-sizing: border-box;
display: block;
text-align: center;
position: absolute;
top: 50%;
left: 0.5rem;
padding: 0.4rem 0.1rem 0.2rem 0;
width: 2rem;
margin-top: -1rem;
height: 2rem;
border-radius: 0.2rem;
background: rgb(71, 0, 0);
-webkit-transition: opacity ease 0.3s;
transition: opacity ease 0.3s;
z-index: 2;
}
label::after {
content: '𝗢';
background: rgb(97, 186, 101);
z-index: 1;
}
button {
margin-left: auto;
height: auto;
cursor: pointer;
}
.invalid label,
.invalid input:checked + label {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #ccc;
}
.invalid label::before,
.invalid label::after {
display: none;
}
.status {
display: -webkit-box;
display: flex;
position: -webkit-sticky;
position: sticky;
top: 0;
padding: 1rem;
width: calc(100% + 2rem);
margin-left: -1rem;
border-bottom: 0.125rem solid #ccc;
z-index: 10;
margin-bottom: 1rem;
}
.status > div {
white-space: nowrap;
}
.progress {
background: #ddd;
height: 1rem;
position: relative;
margin: 0 1rem;
width: 100%;
}
.progress .bar {
-webkit-transition: width 0.2s ease;
transition: width 0.2s ease;
background: #4CAF50;
position: absolute;
top: 0;
left: 0;
height: 100%;
}
.button {
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 5px 15px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
}
</style>
</head>
<body>
<div class="wrapper" style="width:100% !important;">
<header style="width:20% !important;">
{% if site.logo %}
<img src="{{site.logo | relative_url}}" alt="Logo" />
{% endif %}
<p>{{ site.description | default: site.github.project_tagline }}</p>
{% if site.github.is_project_page %}
<p class="view"><a href="{{ site.github.repository_url }}">View the Project on GitHub <small>{{ site.github.repository_nwo }}</small></a></p>
{% endif %}
{% if site.github.is_user_page %}
<p class="view"><a href="{{ site.github.owner_url }}">View My GitHub Profile</a></p>
{% endif %}
{% if site.show_downloads %}
<ul class="downloads">
<li><a href="{{ site.github.zip_url }}">Download <strong>ZIP File</strong></a></li>
<li><a href="{{ site.github.tar_url }}">Download <strong>TAR Ball</strong></a></li>
<li><a href="{{ site.github.repository_url }}">View On <strong>GitHub</strong></a></li>
</ul>
{% endif %}
<script src="https://cdn.jsdelivr.net/npm/darkmode-js@1.5.7/lib/darkmode-js.min.js"></script>
<script>
function addDarkmodeWidget() {
const options = {
bottom: '64px', // default: '32px'
right: 'unset', // default: '32px'
left: '32px', // default: 'unset'
time: '0.5s', // default: '0.3s'
mixColor: '#fff', // default: '#fff'
backgroundColor: '#fff', // default: '#fff'
buttonColorDark: '#100f2c', // default: '#100f2c'
buttonColorLight: '#fff', // default: '#fff'
saveInCookies: true, // default: true,
label: '◐', // default: ''
autoMatchOsTheme: true // default: true
}
const darkmode = new Darkmode(options);
darkmode.showWidget();
}
window.addEventListener('load', addDarkmodeWidget);
</script>
</header>
<section style="width:70% !important;">
{{ content }}
<hr>
{% raw %}
<div class="container">
<div id="app">
<checklist></checklist>
</div>
</div>
{% endraw %}
</section>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<script>
window.onload = function(){
vueData = []
vueList = []
$.ajax({
async: false,
type: 'GET',
url: 'https://raw.githubusercontent.com/hahwul/WebHackersWeapons/master/data.json',
success: function(data){
jsonData = JSON.parse(data)
for (const property in jsonData) {
tool = {
name: property,
method: jsonData[property]['Method'],
dtype: jsonData[property]['Type'],
desc: jsonData[property]['Description'],
install_linux: jsonData[property]['Install']['Linux'],
install_macos: jsonData[property]['Install']['MacOS'],
install_windows: jsonData[property]['Install']['Windows'],
update_linux: jsonData[property]['Update']['Linux'],
update_macos: jsonData[property]['Update']['MacOS'],
update_windows: jsonData[property]['Update']['Windows']
}
if ((tool.install_linux != '') || (tool.install_macos != '') || (tool.install_windows != '')) {
vueData.push(tool)
vueList.push(tool)
}
}
}
});
Vue.component('checklist-item', {
template: '<div>' +
'<input :checked="complete" @click="progress" type="checkbox" :name="\'checkbox\' + id" :id="\'checkbox\' + id" class="checkboxes" value="">' +
'<label :for="\'checkbox\' + id"><b v-html="i.name"></b> &nbsp; &nbsp; | &nbsp; &nbsp; <i v-if="i.install_macos != \'\'" class="fab fa-apple"></i> <i v-if="i.install_linux != \'\'" class="fab fa-linux"></i> <i v-if="i.install_windows != \'\'" class="fab fa-windows"></i></label>' +
'</div>',
data() {
return {
id: this._uid,
complete: false
};
},
props: {
i: String
},
methods: {
progress() {
this.complete = !this.complete;
this.$emit('complete', this.complete);
this.updateStorage();
},
updateStorage() {
localStorage.setItem(this.id, JSON.stringify({
complete: this.complete
}));
}
},
created() {
if(localStorage.getItem(this.id)) {
let storage = JSON.parse(localStorage.getItem(this.id));
if(storage.complete) {
this.progress();
}
}
}
});
Vue.component('progress-bar', {
template: '<div class="status"><input type="input" id="path" style="display:block !important;" placeholder="~/tools" value=""><select name="os" id="os"><option value="macos">MacOS</option><option value="linux">Linux</option><option value="windows">windows</option></select><input type="button" style="display:block !important;" value="Make" class="button" onclick="whwmake()"><div class="progress"><div class="bar" :style="{width: width + \'%\'}"></div></div></div>',
props: {
c: Number,
t: Number
},
computed: {
width() {
return (this.c / this.t) * 100;
}
}
});
Vue.component('checklist', {
template: '<div>' +
'<progress-bar :c="complete" :t="total"></progress-bar>' +
'<ul>' +
'<li v-for="item in items">' +
'<checklist-item :i="item" v-on:complete="updateProgress"></checklist-item>' +
'</li>' +
'</ul>' +
'</div>',
data() {
return {
items: vueList,
complete: 0
};
},
computed: {
total() {
return this.items.length;
}
},
methods: {
updateProgress(complete) {
(complete) ? this.complete++ : this.complete--;
}
}
});
new Vue().$mount('#app');
};
</script>
<script>
function whwmake() {
document.body.style.padding='0px'
document.getElementsByClassName("wrapper")[0].style.display='none'
document.getElementById("output-area").style.display='block'
var path = document.getElementById("path").value
var os = document.getElementById("os").selectedOptions[0].value
var checkboxes = document.getElementsByClassName("checkboxes")
for (const [key, value] of Object.entries(checkboxes)) {
if value.checked {
console.log(vueData[key])
}
}
}
function gohome() {
document.body.style.padding='50px'
document.getElementsByClassName("wrapper")[0].style.display='block'
document.getElementById("output-area").style.display='none'
}
</script>
</div>
<script src="{{ "/assets/js/scale.fix.js" | relative_url }}"></script>
{% if site.google_analytics %}
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.google_analytics }}', 'auto');
ga('send', 'pageview');
</script>
{% endif %}
<div style="width:100%; display:none;" id="output-area">
<button class="button" onclick="gohome()">Back</button>
<table>
<tr>
<td width=50%>Install script</td>
<td width=50%>Update script</td>
</tr>
<tr>
<td style="vertical-align:top;">
<pre><code id="output-install" style="white-space: pre-line; overflow: auto;"></code></pre>
</td>
<td style="vertical-align:top;">
<pre><code id="output-update" style="white-space: pre-line; overflow: auto;"></code></pre>
</td>
</tr>
</table>
</div>
</body>
</html>