2020-09-27 15:34:15 +09:00

195 lines
6.8 KiB
HTML

<!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]-->
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
</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: jsonData[property]['Install']
}
vueData.push(tool)
vueList.push(property)
}
}
});
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;
}
},
methods: {
updateProgress(complete) {
(complete) ? this.complete++ : this.complete--;
}
}
});
new Vue().$mount('#app');
};
</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 %}
</body>
</html>