dootask/public/site/en/log.html

532 lines
22 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="en">
<head>
<meta charset="UTF-8">
<title>DooTask</title>
<meta name="google" value="notranslate">
<meta name="description" content="Lightweight open source online project task management tool to help teams efficiently advance their projects and make work easier.">
<meta name="keywords" content="China DooTask Task management Lightweight Hitosea Teamwork">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../css/common.css">
<link rel="stylesheet" type="text/css" href="../css/rem.css">
<link rel="stylesheet" href="../css/log.css">
</head>
<body>
<div id="layout">
<!-- 页头区域 -->
<header>
<div class="nav">
<div class="nav-layout">
<a href="../en/index.html" class="logo">
<img id="logo" src="../img/light/logo.svg" alt="DooTask,Logo">
<i class="dootask txt-7002027">DooTask</i>
</a>
<ul class="nav-ul">
<li class="nav-ul-item">
<a class="txt-4001620 txt nav-product" href="../en/product.html">Product</a>
</li>
<li class="nav-ul-item">
<a class="txt-4001620 txt nav-solutions" href="../en/solutions.html">Solutions</a>
</li>
<li class="nav-ul-item">
<i class="txt-4001620 txt nav-support" id="support-txt" onclick="showMenuPopHandle()">
Support
<img src="../img/vector.svg" alt="Support" class="nav-vector" id="drop-down-svg">
</i>
<ol class="submenu-pop" id="submenu-pop">
<li class="submenu-pop-item" onclick="changeMenu()">
<a class="txt-4001418 txt-sub" href="../en/download.html">Download Center</a>
</li>
<li class="submenu-pop-item" onclick="changeMenu()">
<a class="txt-4001418 txt-sub" href="../en/help.html">Help Center</a>
</li>
<li class="submenu-pop-item" onclick="changeMenu()">
<a class="txt-4001418 txt-sub" href="../en/privacy.html" target="_blank">Privacy Policy</a>
</li>
<li class="submenu-pop-item" onclick="changeMenu()">
<a class="txt-4001418 txt-sub" href="../../docs/index.html" target="_blank">API document</a>
</li>
</ol>
</li>
<li class="nav-ul-item">
<a class="txt-4001620 txt nav-price" href="../en/price.html">Pricing</a>
</li>
<li class="nav-ul-item">
<a class="txt-4001620 txt nav-about" href="../en/about.html">About Us</a>
</li>
</ul>
<div class="nav-r">
<div class="lang" id="lang-img">
<img src="../img/lang-select.svg" alt="Language switch" onclick="shouLangPopHandle()">
<ul class="lang-pop" id="lang-pop">
<li class="lang-pop-item" onclick="changeLanguage('zh')">
<i class="lang-txt">简体中文</i>
</li>
<li class="lang-pop-item" onclick="changeLanguage('en')">
<i class="lang-txt">English</i>
</li>
</ul>
</div>
<i class="nav-r-icon theme_dark" onclick="setTheme('light')">
<img src="../img/light.svg" alt="Light theme">
</i>
<i class="nav-r-icon theme_light" onclick="setTheme('dark')">
<img src="../img/drak.svg" alt="Dark theme">
</i>
<a href="https://github.com/kuaifan/dootask" target="_blank">
<i class="nav-r-icon">
<img src="../img/github.svg" alt="github">
</i>
</a>
<i class="line-1"></i>
<span class="get-started">
<a href="../../manage/dashboard">
<button class="btn btn-primary" >Try Now</button>
</a>
</span>
</div>
<div class="menuBtn">
<img id="menuBtn" src="../img/menu.svg" alt="Menu">
</div>
</div>
</div>
</header>
<!-- logs抽屉 -->
<div class="logs-drawer">
<div class="drawer-t mb-36">
<a href="../en/index.html" class="logo">
<img id="logo" src="../img/light/logo.svg" alt="DooTask,Logo">
<i class="dootask txt-7002027">DooTask</i>
</a>
<i class="close-drawer" onclick="closeLogsDraweHandle()"></i>
</div>
<h5 class="logs-h5 mb-16">Logs</h5>
<ul class="logs-l-ul logs-l-768"></ul>
</div>
<!-- 菜单抽屉 -->
<div class="drawer">
<div class="drawer-t mb-36">
<a href="../en/index.html" class="logo">
<img id="logo" src="../img/light/logo.svg" alt="DooTaskLogo">
<i class="dootask txt-7002027">DooTask</i>
</a>
<i class="close-drawer" onclick="closeDraweHandle()"></i>
</div>
<ul class="drawer-ul">
<li class="drawer-item-t mb-16">
<div class="drawer-item" onclick="closeDraweHandle()">
<a class="txt-4001620 txt" href="../en/product.html">Product</a>
</div>
<div class="drawer-item" onclick="closeDraweHandle()">
<a class="txt-4001620 txt" href="../en/solutions.html">Solutions</a>
</div>
<div class="drawer-item" onclick="expandMenuHandle('support')">
<i class="txt-4001620 txt">
Support
<img src="../img/vector.svg" class="nav-vector" alt="Support" id="drawer-down-support-svg">
</i>
</div>
<ol class="drawer-active hide" id="support" >
<li class="drawer-item" onclick="changeMenu()">
<a class="txt-4001620 txt" href="../en/download.html">Download Center</a>
</li>
<li class="drawer-item" onclick="changeMenu()">
<a class="txt-4001620 txt" href="../en/help.html">Help Center</a>
</li>
<li class="drawer-item" onclick="changeMenu()">
<a class="txt-4001620 txt" href="../en/privacy.html" target="_blank">Privacy Policy</a>
</li>
<li class="drawer-item" onclick="changeMenu()">
<a class="txt-4001620 txt" href="../../docs/index.html" target="_blank">API document</a>
</li>
</ol>
<div class="drawer-item" onclick="closeDraweHandle()">
<a class="txt-4001620 txt" href="../en/price.html">Pricing</a>
</div>
<div class="drawer-item mb-16" onclick="closeDraweHandle()">
<a class="txt-4001620 txt" href="../en/about.html">About Us</a>
</div>
</li>
<li class="drawer-item-c">
<div class="drawer-item" onclick="expandMenuHandle('theme')">
<i class="txt-4001620 txt">
Theme
<img src="../img/vector.svg" alt="Theme" class="nav-vector" id="drawer-down-theme-svg">
</i>
</div>
<ol class="drawer-active hide" id="theme" >
<li class="drawer-item" onclick="setTheme('light')">
<i class="txt-4001620 txt">Light</i>
</li>
<li class="drawer-item" onclick="setTheme('dark')">
<i class="txt-4001620 txt">Dark</i>
</li>
</ol>
<div class="drawer-item" onclick="expandMenuHandle('language')">
<i class="txt-4001620 txt">
Language
<img src="../img/vector.svg" alt="Language" class="nav-vector" id="drawer-down-language-svg">
</i>
</div>
<ol class="drawer-active hide" id="language" >
<li class="drawer-item" onclick="changeLanguage('zh')">
<i class="txt-4001620 txt">简体中文</i>
</li>
<li class="drawer-item" onclick="changeLanguage('en')">
<i class="txt-4001620 txt">English</i>
</li>
</ol>
</li>
<li class="drawer-item-b">
<div class="drawer-item">
<a class="txt-4001620 txt" href="../../manage/dashboard">Try Now</a>
</div>
</li>
</ul>
</div>
<!-- 内容区域 -->
<main>
<!-- 主要区域划分 -->
<section>
<article class="logs">
<div class="logs-con">
<div class="logs-t-768" id="menuBtn-logs">
<img class="logs-t-prev" src="../img/prev.svg" alt="Logs">
<i class="logs-t-tit">Logs</i>
</div>
<div class="logs-layout">
<div class="logs-l logs-sticky">
<h5 class="logs-h5 mb-16">Logs</h5>
<ul class="logs-l-ul logs-l-1920" id="help-l-ul"></ul>
</div>
<div class="logs-r" id="google_translate_element">
<h1 class="txt-6003645 logs-h1 mb-36">DooTask Update Log </h1>
<ul class="logs-r-ul"></ul>
</div>
</div>
</div>
</article>
</section>
</main>
<!-- 页脚区域 -->
<footer>
<div class="footer-con">
<div class="footer-layut">
<div class="footer-l">
<a href="../en/index.html" class="logo">
<img id="logo" src="../img/light/logo.svg" alt="DooTask,Logo">
<i class="dootask txt-7002027">DooTask</i>
</a>
<i class="txt txt-4001624">Helps teams move projects forward efficiently and makes work easier.</i>
</div>
<div class="footer-r">
<ul class="footer-r-ul">
<li class="footer-r-item">
<ol class="footer-r-ol">
<li class="footer-ol-item txt-5001624 mb-24">Links</li>
<li class="footer-ol-item mb-16">
<a class="txt-4001624 txt" href="../en/product.html">Product</a>
</li>
<li class="footer-ol-item mb-16">
<a class="txt-4001624 txt" href="../en/solutions.html">Solutions</a>
</li>
<li class="footer-ol-item mb-16">
<a class="txt-4001624 txt" href="../en/price.html">Pricing</a>
</li>
<li class="footer-ol-item">
<a class="txt-4001624 txt" href="../en/solutions.html">About Us</a>
</li>
</ol>
</li>
<li class="footer-r-item">
<ol class="footer-r-ol">
<li class="footer-ol-item txt-5001624 mb-24">Support</li>
<li class="footer-ol-item mb-16">
<a class="txt-4001624 txt" href="../en/download.html">Download Center</a>
</li>
<li class="footer-ol-item mb-16">
<a class="txt-4001624 txt" href="../en/help.html">Help Center</a>
</li>
<li class="footer-ol-item mb-16">
<a class="txt-4001624 txt" href="../en/privacy.html" target="_blank">Privacy Policy</a>
</li>
<li class="footer-ol-item">
<a class="txt-4001624 txt" href="../../docs/index.html" target="_blank">API document</a>
</li>
</ol>
</li>
<li class="footer-r-item">
<ol class="footer-r-ol">
<li class="footer-ol-item txt-5001624 mb-24">Community</li>
<li class="footer-ol-item">
<div class="footer-ol-item mb-16">
<i class="txt-4001624 txt" onclick="openInNewTab('https://github.com/kuaifan/dootask')">Github</i>
</div>
<div class="footer-ol-item mb-16">
<i class="txt-4001624 txt" onclick="openInNewTab('https://gitee.com/aipaw/dootask')">Gitee</i>
</div>
<div class="footer-ol-item" id="qq_group">
<i class="txt-4001624 txt">QQ group</i>
<div class="group_code">
<img class="code-svg" id="home_code" src="../img/light/home_code.svg" alt="Group546574618">
<i class="group_num">Group546574618</i>
<i class="lower_triangle"></i>
</div>
</div>
</li>
</ol>
</li>
</ul>
</div>
</div>
<div class="txt-4001624 filings footer_copyright">
<span>
Copyright © 2022-2023 DooTask. All rights reserved.
</span>
<div class="footer_beian" style="display: flex;"><img src="../img/beian.png" alt=""><span style="padding-left: 3px;">桂公网安备 45010802000393号</span></div>
<a class="footer_beian_a" href="http://beian.miit.gov.cn">桂ICP备2021003642号-5</a>
</div>
</div>
</footer>
</div>
</body>
<script src="//cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script src="//cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>
<script src="../js/common.js"></script>
<script>
const getItem = (key)=> {
var record = JSON.parse(localStorage.getItem(key));
if (!record) return null;
if (new Date().getTime() > record.expired) {
localStorage.removeItem(key);
return null;
}
return record.value;
}
function getUpdatesFromHtml(html,li) {
html.map(item=>{
const liItem = document.createElement('li');
liItem.className = 'txt-4001624 r-ol-item mb-12 pl-26';
liItem.innerHTML = `
<i class="dots"></i>${item};
`;
const ol = li.querySelector('.logs-r-ol')
ol.appendChild(liItem)
})
}
const logsDrawer = document.querySelector('.logs-drawer');
const closeLogsDraweHandle = ()=>{
logsDrawer.classList.remove('open-logs-drawer');
}
function domHandle (html){
const changelog = document.querySelector('.logs-r-ul');
const rlog = document.querySelector('.logs-l-1920');
const rlog2 = document.querySelector('.logs-l-768');
const versions = html.match(/<h2>(.*?)<\/h2>/g).slice(0, 15);
const versionsNumbers = versions.map(str => str.split('<h2>[')[1].split(']</h2>')[0]);
for (let i = 0; i < versionsNumbers.length; i++) {
const updatesHtml = html.split(versionsNumbers[i])[1].split('<h2>')[0].match(/<li>(.*?)<\/li>/g);
const updatesHtmlText = updatesHtml.map(str => str.split('<li>')[1].split('</li>')[0]);
const rLi = document.createElement('li');
rLi.className = `l-ul-item ${i==0?'active':''}`;
rLi.setAttribute('data-id',`section-${i+1}`)
rLi.innerHTML = `
<a class="txt-4001620 txt log-a">v${versionsNumbers[i]} update</a>
`;
const rLi2 = document.createElement('li');
rLi2.className = `l-ul-item`;
rLi2.setAttribute('data-id',`section-${i+1}`)
rLi2.addEventListener('click', function() {
const logsDrawer = document.querySelector('.logs-drawer');
logsDrawer.classList.remove('open-logs-drawer');
});
rLi2.innerHTML = `
<a class="txt-4001620 txt">v${versionsNumbers[i]} update</a>
`;
rlog.appendChild(rLi);
rlog2.appendChild(rLi2);
const li = document.createElement('li');
li.className = 'r-ul-item mb-36';
li.innerHTML = `
<ol class="logs-r-ol">
<li class="txt-4001624 r-ol-item mb-24" id="section-${i+1}"><h4 class="logs-h4">v${versionsNumbers[i]} update</h4></li>
</ol>
`;
changelog.appendChild(li);
getUpdatesFromHtml(updatesHtmlText,li)
// translateAllText()
}
let updateLogNum = localStorage.getItem('update_log_num')
/* logs点击激活函数 */
let isThrottled = false;
let timerId;
const logs_tabs = document.querySelector('.logs-l-1920');
const logs_tabItems = logs_tabs.querySelectorAll('.l-ul-item');
const contentContainer = document.querySelector('.logs-r');
const contentContainer_Items = contentContainer.querySelectorAll('.r-ul-item');
const sections = Array.from(document.querySelectorAll('h4'));
logs_tabs.addEventListener('click', function (event) {
const clickedItem = event.target.closest('.l-ul-item');
clearTimeout(timerId);
if (clickedItem && !clickedItem.classList.contains('active')) {
// 切换激活状态
for (let value of logs_tabItems) {
value.classList.toggle('active', value === clickedItem);
}
}
});
const handleScroll = ()=> {
if (!isThrottled) {
isThrottled = true;
// 在下一个滴答钟时重置isThrottled标志位
timerId = setTimeout(() => {
isThrottled = false;
}, 0);
// 处理滚动事件
const currentScrollPosition = contentContainer.scrollTop;
// 获取当前滚动位置并遍历所有标题元素
sections.map((item,index)=>{
const section = sections[index];
if(section.offsetParent.offsetTop <= currentScrollPosition){
// 将对应的菜单项设置为激活状态
const activeMenuItem = logs_tabItems[index];
if (activeMenuItem) {
Array.from(logs_tabItems).forEach(titem => titem.classList.remove('active'));
activeMenuItem.classList.add('active');
}
}
})
}
}
contentContainer.addEventListener('scroll', handleScroll);
/* 当屏幕宽度低于768px时显示logs的抽屉的相关操作逻辑 */
const logsMenuBtn = document.getElementById('menuBtn-logs');
const logsDrawer = document.querySelector('.logs-drawer');
logsMenuBtn.addEventListener('click', () => {
logsDrawer.classList.add('open-logs-drawer');
});
/* 从下载页跳转过来执行的函数 */
const handleMou = ()=>{
const clickedItem = logs_tabItems[updateLogNum-1];
if (clickedItem && !clickedItem.classList.contains('active')) {
// 切换激活状态
for (let value of logs_tabItems) {
value.classList.toggle('active', value === clickedItem);
}
}
window.history.scrollRestoration = 'manual';
const topSection = changelog.querySelector(`#section-${updateLogNum}`)
if (topSection) {
const offset = 90; // 上偏移量(可以根据需要进行调整)
const targetPosition = topSection.getBoundingClientRect().top + window.scrollY; // 目标位置相对于视口的位置
// 滚动到目标位置,并考虑上偏移量
window.scrollTo({
top: targetPosition-offset,
});
}
}
handleMou()
localStorage.removeItem('update_log_num')
}
const logs = getItem('logs')
if(!logs) {
const url = "../../api/system/get/updatelog"
axios.get(url).then(res=>{
const changelog=res.data.data.updateLog
const md = new markdownit();
const html = md.render(changelog);
let record = {value: html, expired: new Date().getTime() + 30 * 60 * 1000};
localStorage.setItem('logs',JSON.stringify(record))
domHandle(html)
logsHandler()
}).catch(err=>{
console.log(err,"err");
})
}else{
domHandle(logs)
logsHandler()
}
let tabItems1 = document.querySelectorAll('.l-ul-item');
function rm(){
tabItems1.forEach(link1=>{
link1.classList.remove('active')
})
}
function logsHandler(){
let tabItems = document.querySelectorAll('.l-ul-item');
function rm(){
tabItems.forEach(link1=>{
link1.classList.remove('active')
})
}
tabItems.forEach(item=>{
item.addEventListener('click',function(event){
event.preventDefault()
const id = event.currentTarget.getAttribute('data-id')
const content = document.getElementById(`${id}`)
if (content) {
const offset = 90; // 上偏移量(可以根据需要进行调整)
const targetPosition = content.getBoundingClientRect().top + window.scrollY; // 目标位置相对于视口的位置
// 滚动到目标位置,并考虑上偏移量
window.scrollTo({
top: targetPosition-offset,
behavior: "smooth"
});
}
})
})
}
function getAllDataIds(parentId) {
let parentElement = document.getElementById(parentId);
if (parentElement) {
let elementsWithDataId = parentElement.querySelectorAll("[data-id]");
let dataIds = [];
for (let i = 0; i < elementsWithDataId.length; i++) {
let dataId = elementsWithDataId[i].getAttribute("data-id");
dataIds.push(dataId);
}
return dataIds;
}
return [];
}
let allDataIds = getAllDataIds("help-l-ul");
let arrOffsetTop = []
allDataIds.map(item=>{
let id = document.getElementById(`${item}`);
arrOffsetTop.push(id.offsetTop)
})
// 监听页面滚动事件
window.addEventListener('scroll',scrollHandler)
function scrollHandler(){
for (let i = 0; i < arrOffsetTop.length; i++) {
if(window.scrollY<=arrOffsetTop[0]){
rm()
let elementsWithDataId = document.querySelectorAll("[data-id='" + `section-${1}` + "']");
elementsWithDataId[1]?.classList?.add("active");
return;
}
if (arrOffsetTop[i] > window.scrollY || window.scrollY<=arrOffsetTop[0]){
rm()
let elementsWithDataId = document.querySelectorAll("[data-id='" + `section-${i}` + "']");
elementsWithDataId[1]?.classList?.add("active");
//滚动设置
const liHight = elementsWithDataId[1]?.offsetTop;
const pHihtt = elementsWithDataId[1]?.offsetHeight;
const ulElement = document.getElementById('help-l-ul'); // 替换为你的 <div> 元素的 id
const scrollHeight = ulElement.scrollTop;
const ulHeight = ulElement.offsetHeight;
if (liHight > scrollHeight + ulHeight) {
ulElement.scrollTop += (pHihtt + pHihtt);
}
if (liHight < scrollHeight) {
ulElement.scrollTop -= (pHihtt + pHihtt);
}
return;
}
}
}
</script>
</html>