1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-26 17:24:05 +08:00
This commit is contained in:
shaoying 2018-12-18 09:25:25 +08:00
parent d72d769efb
commit b65bacaf72
6 changed files with 175 additions and 147 deletions

View File

@ -2298,29 +2298,25 @@ var CGI = template.FuncMap{
} }
cli := Pulse.Sess("cli") cli := Pulse.Sess("cli")
cli.Cmd("source", strings.Join(Trans(arg), " ")) cmd := strings.Join(Trans(arg), " ")
cli.Cmd("source", cmd)
result := []string{} result := []string{}
if len(cli.Meta["append"]) > 0 { if len(cli.Meta["append"]) > 0 {
result = append(result, "<table>") result = append(result, "<table>")
result = append(result, "<caption>") result = append(result, "<caption>", cmd, "</caption>")
result = append(result, Trans(arg)...)
result = append(result, "</caption>")
cli.Table(func(maps map[string]string, list []string, line int) bool { cli.Table(func(maps map[string]string, list []string, line int) bool {
if line == -1 { if line == -1 {
result = append(result, "<tr>") result = append(result, "<tr>")
for _, v := range list { for _, v := range list {
result = append(result, "<th>") result = append(result, "<th>", v, "</th>")
result = append(result, v)
result = append(result, "</th>")
} }
result = append(result, "</tr>") result = append(result, "</tr>")
return true return true
} }
result = append(result, "<tr>") result = append(result, "<tr>")
for _, v := range list { for _, v := range list {
result = append(result, "<td>") result = append(result, "<td>", v, "</td>")
result = append(result, v)
result = append(result, "</td>")
} }
result = append(result, "</tr>") result = append(result, "</tr>")
return true return true
@ -2328,12 +2324,9 @@ var CGI = template.FuncMap{
result = append(result, "</table>") result = append(result, "</table>")
} else { } else {
result = append(result, "<pre><code>") result = append(result, "<pre><code>")
result = append(result, fmt.Sprintf("%s", cli.Find("shy", false).Conf("prompt"))) result = append(result, fmt.Sprintf("%s", cli.Find("shy", false).Conf("prompt")), cmd, "\n")
result = append(result, Trans(arg)...)
result = append(result, "\n")
result = append(result, cli.Meta["result"]...) result = append(result, cli.Meta["result"]...)
result = append(result, "</code></pre>") result = append(result, "</code></pre>")
} }
return template.HTML(strings.Join(result, "")) return template.HTML(strings.Join(result, ""))

View File

@ -36,11 +36,15 @@ function save_clipboard(item) {
alert("保存成功") alert("保存成功")
}) })
} }
function copy_to_clipboard(text, skip_docker) { function copy_to_clipboard(text, skip_blur, skip_docker) {
var clipboard = modify_node(".clipboard", {"value": text}) var clipboard = modify_node(".clipboard", {"value": text})
if (skip_blur) {
document.execCommand("copy")
} else {
clipboard.select() clipboard.select()
document.execCommand("copy") document.execCommand("copy")
clipboard.blur() clipboard.blur()
}
var clipstack = document.querySelector("#clipstack") var clipstack = document.querySelector("#clipstack")
insert_child(clipstack, "option").value = text insert_child(clipstack, "option").value = text
@ -62,12 +66,13 @@ function copy_to_clipboard(text, skip_docker) {
target.parentElement.removeChild(target) target.parentElement.removeChild(target)
return return
} }
if (event.shiftKey) { if (event.shiftKey) {
var cmd = document.querySelector("form.option.command"+code.current_cmd+" input[name=cmd]") var cmd = document.querySelector("form.option.command"+code.current_cmd+" input[name=cmd]")
cmd && (cmd.value += " "+text) cmd && (cmd.value += " "+text)
return return
} }
copy_to_clipboard(text, true) copy_to_clipboard(text, false, true)
}, },
}) })
} }
@ -99,10 +104,16 @@ function add_sort(append, field, cb) {
if (tr.childNodes[i].innerText.startsWith(field)) { if (tr.childNodes[i].innerText.startsWith(field)) {
typeof cb == "function" && cb(event) typeof cb == "function" && cb(event)
} }
var text = window.getSelection().toString()
if (!text) {
var has = document.querySelector("td.clip") var has = document.querySelector("td.clip")
has && (has.className = "") has && (has.className = "")
target.className = "clip" target.className = "clip"
copy_to_clipboard(target.innerText, !event.shiftKey) text = target.innerText
}
copy_to_clipboard(text, true, !event.shiftKey)
} }
} }
} }
@ -582,7 +593,10 @@ function init_append(event) {
function init_result(event) { function init_result(event) {
var result = document.querySelectorAll("code.result pre").forEach(function(item) { var result = document.querySelectorAll("code.result pre").forEach(function(item) {
item.onclick = function(event) { item.onclick = function(event) {
// copy_to_clipboard(event.target.innerText) var text = window.getSelection().toString()
if (text) {
copy_to_clipboard(text, true, !event.shiftKey)
}
} }
}) })
} }

View File

@ -131,6 +131,42 @@ context = {
context.isMobile = navigator.userAgent.indexOf("Mobile") > -1 context.isMobile = navigator.userAgent.indexOf("Mobile") > -1
context.scroll_by = window.innerHeight/2 context.scroll_by = window.innerHeight/2
function right(arg) {
if (arg == "true") {
return true
}
if (arg == "false") {
return false
}
if (arg) {
return true
}
return false
}
function format_date(arg) {
var date = arg.getDate()
if (date < 10) {
date = "0"+date
}
var month = arg.getMonth()+1
if (month < 10) {
month = "0"+month
}
var hour = arg.getHours()
if (hour < 10) {
hour = "0"+hour
}
var minute = arg.getMinutes()
if (minute < 10) {
minute = "0"+minute
}
var second = arg.getSeconds()
if (second < 10) {
second = "0"+second
}
return arg.getFullYear()+"-"+month+"-"+date+" "+hour+":"+minute+":"+second
}
function modify_node(which, html) { function modify_node(which, html) {
var node = which var node = which
if (typeof which == "string") { if (typeof which == "string") {
@ -174,42 +210,6 @@ function insert_button(which, value, callback) {
"type": "button", "value": value, "onclick": callback, "type": "button", "value": value, "onclick": callback,
}) })
} }
function right(arg) {
if (arg == "true") {
return true
}
if (arg == "false") {
return false
}
if (arg) {
return true
}
return false
}
function format_date(arg) {
var date = arg.getDate()
if (date < 10) {
date = "0"+date
}
var month = arg.getMonth()+1
if (month < 10) {
month = "0"+month
}
var hour = arg.getHours()
if (hour < 10) {
hour = "0"+hour
}
var minute = arg.getMinutes()
if (minute < 10) {
minute = "0"+minute
}
var second = arg.getSeconds()
if (second < 10) {
second = "0"+second
}
return arg.getFullYear()+"-"+month+"-"+date+" "+hour+":"+minute+":"+second
}
function sort_table(table, index, sort_asc) { function sort_table(table, index, sort_asc) {
var list = table.querySelectorAll("tr") var list = table.querySelectorAll("tr")
@ -277,4 +277,24 @@ function sort_table(table, index, sort_asc) {
} }
return sort_order return sort_order
} }
function add_sort(append, field, cb) {
append.onclick = function(event) {
var target = event.target
var dataset = target.dataset
var nodes = target.parentElement.childNodes
for (var i = 0; i < nodes.length; i++) {
if (nodes[i] == target) {
if (target.tagName == "TH") {
dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1
sort_table(append, i, dataset["sort_asc"] == "1")
} else if (target.tagName == "TD") {
var tr = target.parentElement.parentElement.querySelector("tr")
if (tr.childNodes[i].innerText.startsWith(field)) {
typeof cb == "function" && cb(event)
}
}
}
}
}
}

View File

@ -1,3 +1,34 @@
var wiki = {
layout: {
header: {
height: 40,
},
nav: {
min_width: 240,
},
article: {
padding: 20,
},
footer: {
height: 40,
},
},
}
function set_layout() {
var nav = document.querySelector("nav")
var article = document.querySelector("article")
if (window.innerWidth > 600) {
nav.className = "fixed"
wiki.layout.article.width = window.innerWidth - nav.offsetWidth- 2*wiki.layout.article.padding
article.style.width = wiki.layout.article.width+"px"
} else {
nav.className = ""
article.style.width = ""
}
}
function action(event, cmd) { function action(event, cmd) {
switch (cmd) { switch (cmd) {
case "toggle_nav": case "toggle_nav":
@ -6,20 +37,31 @@ function action(event, cmd) {
set_layout(event) set_layout(event)
break break
case "toggle_list": case "toggle_list":
var list = document.querySelector(".list") var list = event.target.nextElementSibling
list.hidden = !list.hidden list.hidden = !list.hidden
break break
case "toggle_menu":
var menu = document.querySelector(".menu")
menu.hidden = !menu.hidden
break
case "toggle_link":
var link = document.querySelector(".link")
link.hidden = !link.hidden
break
} }
} }
function init_layout() {
var header = document.querySelector("header")
var nav = document.querySelector("nav")
var article = document.querySelector("article")
var footer = document.querySelector("footer")
wiki.layout.nav.height = window.innerHeight - wiki.layout.header.height - wiki.layout.footer.height
wiki.layout.article.min_height = window.innerHeight - wiki.layout.header.height - wiki.layout.footer.height - 2*wiki.layout.article.padding
header.style.height = wiki.layout.header.height+"px"
footer.style.height = wiki.layout.footer.height+"px"
nav.style.height = wiki.layout.nav.height+"px"
nav.style.minWidth = wiki.layout.nav.min_width+"px"
nav.style.marginTop = wiki.layout.header.height+"px"
article.style.minHeight = wiki.layout.article.min_height+"px"
article.style.marginTop = wiki.layout.header.height+"px"
article.style.padding = wiki.layout.article.padding+"px"
set_layout()
}
function init_menu() { function init_menu() {
var max = 0; var max = 0;
var min = 1000; var min = 1000;
@ -96,35 +138,22 @@ function init_menu() {
} }
} }
} }
function init_link() { function init_link() {
var link = []; var link = document.querySelector("nav .link");
var a = document.querySelectorAll(".text a"); document.querySelectorAll("article a").forEach(function(item) {
for (var i = 0; i < a.length; i++) { append_child(append_child(link, "li", {"innertText": item.innerText}), "a", {
link.push({href: a[i].href, title: a[i].innerText}); "href": item.href,
"innerText": item.href,
})
})
} }
var m = document.getElementsByClassName("link");
for (var i = 0; i < m.length; i++) {
var one = append_child(m[i], "li")
var a = one.appendChild(document.createTextNode("相关链接: "));
for (var j = 0; j < link.length; j++) {
var one = append_child(m[i], "li")
var a = one.appendChild(document.createTextNode(link[j].title+": "));
var a = append_child(one, "a");
a.href = link[j].href
a.innerText = a.href
}
}
}
function init_code() { function init_code() {
var fuck = context.isMobile? 22: 16 var fuck = context.isMobile? 22: 16
var m = document.getElementsByTagName("pre");
for (var i = 0; i < m.length; i++) {
var nu = insert_before(m[i], "div", {"className": "number1"})
var line = (m[i].clientHeight-10)/fuck document.querySelectorAll("article pre").forEach(function(item, i) {
var nu = insert_before(item, "div", {"className": "number1"})
var line = (item.clientHeight-10)/fuck
for (var j = 1; j <= line; j++) { for (var j = 1; j <= line; j++) {
append_child(nu, "div", { append_child(nu, "div", {
"style": { "style": {
@ -137,54 +166,23 @@ function init_code() {
}, },
}).appendChild(document.createTextNode(""+j)); }).appendChild(document.createTextNode(""+j));
} }
}
}
function add_sort(append, field, cb) { item.onclick = function(event) {
append.onclick = function(event) { window.getSelection().toString() && document.execCommand("copy")
var target = event.target
var dataset = target.dataset
var nodes = target.parentElement.childNodes
for (var i = 0; i < nodes.length; i++) {
if (nodes[i] == target) {
if (target.tagName == "TH") {
dataset["sort_asc"] = (dataset["sort_asc"] == "1") ? 0: 1
sort_table(append, i, dataset["sort_asc"] == "1")
} else if (target.tagName == "TD") {
var tr = target.parentElement.parentElement.querySelector("tr")
if (tr.childNodes[i].innerText.startsWith(field)) {
typeof cb == "function" && cb(event)
} }
})
} }
}
}
}
}
function init_table(event) { function init_table(event) {
var append = document.querySelectorAll("article table").forEach(add_sort) var append = document.querySelectorAll("article table").forEach(add_sort)
} }
function set_layout() {
article = document.querySelector("article")
nav = document.querySelector("nav")
if (window.innerWidth > 600) {
article.style.maxWidth = (window.innerWidth - nav.offsetWidth-40)+"px"
nav.className = "fixed"
} else {
article.style.maxWidth = ""
nav.className = ""
}
}
window.onresize = function (event) { window.onresize = function (event) {
set_layout() init_layout()
} }
window.onload = function(event) {
window.onload = function() { init_layout()
init_menu() init_menu()
init_link() init_link()
init_code() init_code()
init_table() init_table()
set_layout()
} }

View File

@ -3,6 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=0.7"> <meta name="viewport" content="width=device-width, initial-scale=0.7">
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
<title>code</title> <title>code</title>
<style> <style>
html, body { html, body {

View File

@ -3,13 +3,14 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=0.7"> <meta name="viewport" content="width=device-width, initial-scale=0.7">
<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
<title>{{option .Meta "page_title"}}</title> <title>{{option .Meta "page_title"}}</title>
<style> <style>
html, body { html, body {
height:100%;
width:100%;
margin:0px;
background-color:#d8d8d8; background-color:#d8d8d8;
width:100%;
height:100%;
margin:0px;
} }
header { header {
color:white; color:white;
@ -18,7 +19,6 @@ header {
text-align:center; text-align:center;
background-color:#0747a6; background-color:#0747a6;
width:100%; width:100%;
height:40px;
position:fixed; position:fixed;
} }
header .title { header .title {
@ -50,13 +50,10 @@ header .search input:focus {
} }
nav { nav {
min-width:240px; overflow:auto;
margin-top:40px;
float:left; float:left;
} }
nav.fixed { nav.fixed {
overflow:auto;
max-height:calc(100% - 40px);
position:fixed; position:fixed;
} }
nav>ul { nav>ul {
@ -80,13 +77,11 @@ nav>ul>li>ul>li:hover {
nav>ul>li>ul>li>a { nav>ul>li>ul>li>a {
text-decoration-line:none; text-decoration-line:none;
} }
.mono { nav>ul>li>ul>li .mono {
font-family:monospace; font-family:monospace;
} }
article { article {
padding:20px;
max-width:calc(100% - 40px);
float:right; float:right;
} }
article h2 { article h2 {
@ -135,6 +130,7 @@ article pre {
padding:5px; padding:5px;
border:solid 2px green; border:solid 2px green;
border-left:solid 4px green; border-left:solid 4px green;
max-width:800px;
margin:0; margin:0;
font-size:14px; font-size:14px;
line-height:16px; line-height:16px;
@ -157,12 +153,18 @@ article div.number1 div:hover {
} }
footer { footer {
height:40px; color:white;
font-size:20px;
font-family:monospace;
text-align:center;
background-color:red; background-color:red;
text-align:center; text-align:center;
vertical-align:middle; vertical-align:middle;
clear:both; clear:both;
} }
footer .title {
padding:6px;
}
</style> </style>
</head> </head>
<body> <body>
@ -172,14 +174,14 @@ footer {
<header> <header>
<div class="toggle" onclick="action(event, 'toggle_nav')">三</div> <div class="toggle" onclick="action(event, 'toggle_nav')">三</div>
<div class="search"><input type="text" placeholder="搜索"></div> <div class="search"><input type="text" placeholder="搜索"></div>
<div class="title">shylinux</div> <div class="title">shylinux 天行健,君子以自强不息</div>
</header> </header>
{{end}} {{end}}
{{define "list"}} {{define "list"}}
<nav> <nav>
<ul> <ul>
<li><div class="toggle_menu" onclick="action(event, 'toggle_list')">文</div> <li><div onclick="action(event, 'toggle_list')">文</div>
<ul class="list" hidden> <ul class="list" hidden>
{{range $i, $l := table .}} {{range $i, $l := table .}}
<li> <li>
@ -189,10 +191,10 @@ footer {
{{end}} {{end}}
</ul> </ul>
</li> </li>
<li><div class="toggle_menu" onclick="action(event, 'toggle_menu')">目录</div> <li><div onclick="action(event, 'toggle_list')">目录</div>
<ul class="menu"></ul> <ul class="menu"></ul>
</li> </li>
<li><div class="toggle_link" onclick="action(event, 'toggle_link')">参考链接</div> <li><div onclick="action(event, 'toggle_list')">链接</div>
<ul class="link" hidden></ul> <ul class="link" hidden></ul>
</li> </li>
</ul> </ul>
@ -204,7 +206,7 @@ footer {
{{end}} {{end}}
{{define "footer"}} {{define "footer"}}
<footer><div>shylinux</div></footer> <footer><div class="title">shycontext 地势坤,君子以厚德载物</div></footer>
{{end}} {{end}}
{{define "tail"}} {{define "tail"}}