2020-09-27 02:43:51 +09:00
|
|
|
<!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">
|
|
|
|
|
|
|
|
{% 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]-->
|
2020-09-27 15:06:01 +09:00
|
|
|
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
|
2020-09-27 02:43:51 +09:00
|
|
|
</head>
|
|
|
|
<body>
|
2020-09-27 14:39:28 +09:00
|
|
|
<div class="wrapper" style="width:100% !important;">
|
|
|
|
<header style="width:20% !important;">
|
2020-09-27 02:43:51 +09:00
|
|
|
{% 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() {
|
2020-09-27 02:45:08 +09:00
|
|
|
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'
|
2020-09-27 02:47:17 +09:00
|
|
|
saveInCookies: true, // default: true,
|
2020-09-27 02:45:08 +09:00
|
|
|
label: '🌓', // default: ''
|
|
|
|
autoMatchOsTheme: true // default: true
|
|
|
|
}
|
|
|
|
|
|
|
|
const darkmode = new Darkmode(options);
|
|
|
|
darkmode.showWidget();
|
|
|
|
}
|
2020-09-27 02:43:51 +09:00
|
|
|
window.addEventListener('load', addDarkmodeWidget);
|
|
|
|
</script>
|
|
|
|
</header>
|
2020-09-27 14:39:28 +09:00
|
|
|
<section style="width:70% !important;">
|
2020-09-27 02:43:51 +09:00
|
|
|
|
|
|
|
{{ content }}
|
|
|
|
|
2020-09-27 14:28:00 +09:00
|
|
|
</hr>
|
2020-09-27 15:24:13 +09:00
|
|
|
{% raw %}
|
2020-09-27 15:18:15 +09:00
|
|
|
<div class="container">
|
2020-09-27 14:28:00 +09:00
|
|
|
<div id="app">
|
2020-09-27 15:34:15 +09:00
|
|
|
<checklist></checklist>
|
|
|
|
</div>
|
2020-09-27 14:28:00 +09:00
|
|
|
</div>
|
2020-09-27 15:24:13 +09:00
|
|
|
{% endraw %}
|
|
|
|
</section>
|
2020-09-27 14:43:15 +09:00
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
|
2020-09-27 14:28:00 +09:00
|
|
|
<script>
|
2020-09-27 14:45:18 +09:00
|
|
|
window.onload = function(){
|
2020-09-27 15:04:39 +09:00
|
|
|
vueData = []
|
2020-09-27 15:34:15 +09:00
|
|
|
vueList = []
|
2020-09-27 15:04:39 +09:00
|
|
|
$.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: jsonData[property]['Install']
|
|
|
|
}
|
|
|
|
vueData.push(tool)
|
2020-09-27 15:34:15 +09:00
|
|
|
vueList.push(property)
|
2020-09-27 15:04:39 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-09-27 15:34:15 +09:00
|
|
|
|
|
|
|
Vue.component('checklist-item', {
|
|
|
|
template: '<div>' +
|
|
|
|
'<input :checked="complete" @click="progress" type="checkbox" :name="\'checkbox\' + id" :id="\'checkbox\' + id" value="">' +
|
|
|
|
'<label :for="\'checkbox\' + id" v-html="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"><div>{{ c }} / {{ t }}</div><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;
|
|
|
|
}
|
2020-09-27 14:36:40 +09:00
|
|
|
},
|
2020-09-27 15:27:17 +09:00
|
|
|
methods: {
|
2020-09-27 15:34:15 +09:00
|
|
|
updateProgress(complete) {
|
|
|
|
(complete) ? this.complete++ : this.complete--;
|
2020-09-27 14:28:00 +09:00
|
|
|
}
|
|
|
|
}
|
2020-09-27 15:34:15 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
new Vue().$mount('#app');
|
2020-09-27 14:34:04 +09:00
|
|
|
};
|
2020-09-27 14:28:00 +09:00
|
|
|
</script>
|
2020-09-27 02:43:51 +09:00
|
|
|
</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 %}
|
|
|
|
</body>
|
|
|
|
</html>
|