Browse Source

v1

tags/v1.0.0
3136352472 5 years ago
parent
commit
f6b22f3b72
  1. 3
      .gitignore
  2. BIN
      favicon.ico
  3. 19
      index.html
  4. 54
      lib/data.js
  5. 5
      lib/event.js
  6. 44
      lib/git.js
  7. 31
      lib/main.js
  8. 207
      lib/tray.js
  9. 107
      lib/web/data.js
  10. 64
      lib/web/main.js
  11. 2
      lib/web/tray.js
  12. 176
      main.js
  13. 699
      package-lock.json
  14. 25
      package.json
  15. 115
      preload.js
  16. 1
      project-map.json
  17. 6
      renderer.js
  18. 18
      res/jquery.ba-bbq.min.js
  19. 0
      res/tray.html

3
.gitignore

@ -1,2 +1,5 @@
node_modules
build
data
task.json
username.json

BIN
favicon.ico

19
index.html

@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
We are using Node.js <span id="node-version"></span>,
Chromium <span id="chrome-version"></span>,
and Electron <span id="electron-version"></span>.
<!-- You can also require other files to run in this process -->
<script src="./renderer.js"></script>
</body>
</html>

54
lib/data.js

@ -0,0 +1,54 @@
const osHomedir = require('os-homedir');
var app = require('electron').app
if (!app) {
r = require('electron').remote
app = require('electron').remote.app
}
const path = require('path')
const fs = require('fs');
var pathJoin = function (name) {
// return path.join(path.dirname(app.getPath('exe')), name);
return path.join(osHomedir(), "ouxuan.oa", name)
}
exports.pathJoin = pathJoin
if (!fs.existsSync(pathJoin("data"))) {
fs.mkdirSync(pathJoin("data"), {
recursive: true
})
}
exports.ProjectMapPath = pathJoin("data/project-map.json")
exports.TaskPath = pathJoin("data/task.json")
exports.UsernamePath = pathJoin("data/username.json")
if (!fs.existsSync(pathJoin("data/open-type-map.json"))) {
fs.writeFileSync(pathJoin("data/open-type-map.json"), "{}")
}
exports.OpenTypeMapPath = pathJoin("data/open-type-map.json")
if (!fs.existsSync(pathJoin("data/config.json"))) {
fs.writeFileSync(pathJoin("data/config.json"), JSON.stringify({
TaskType: "my", // wwc 未完成
TaskCount: 0,
}))
}
exports.GetConfig = function () {
return JSON.parse(fs.readFileSync(pathJoin("data/config.json")))
}
exports.SyncConfig = function (config) {
if (fs.readFileSync(pathJoin("data/config.json")) + "" != JSON.stringify(config) + "") {
fs.writeFileSync(pathJoin("data/config.json"), JSON.stringify(config))
}
}

5
lib/event.js

@ -0,0 +1,5 @@
const { ipcMain, Notification } = require('electron')
const path = require('path')
const libdata = require(path.join(__dirname, 'data.js'));

44
lib/git.js

@ -0,0 +1,44 @@
function checkoutLocalBranch(simpleGit, branches, title, cb) {
if (!branches[title]) {
simpleGit.checkoutLocalBranch(title, function (e) {
if (e) console.log(e)
if (!e && cb) cb()
})
} else {
simpleGit.checkout(title, function (e) {
if (e) console.log(e)
if (!e && cb) cb()
})
}
}
exports.autoCheckoutLocalBranch = function (simpleGit, title, cb, errcb) {
simpleGit.checkIsRepo(function (err, ok) {
if (ok) {
simpleGit.branchLocal(function (err, branchSummary) {
if (!err) {
if (branchSummary.current == "master") {
checkoutLocalBranch(simpleGit, branchSummary.branches, title, function () {
cb()
})
} else {
simpleGit.checkout("master", function () {
checkoutLocalBranch(simpleGit, branchSummary.branches, title, function () {
cb()
})
})
}
console.log(branchSummary)
} else {
console.log(err)
}
})
} else {
if (errcb) errcb(err)
}
})
}

31
lib/main.js

@ -0,0 +1,31 @@
const { BrowserWindow } = require('electron')
const path = require('path')
exports.MainWindow = null
exports.createMainWindow = function () {
// Create the browser window.
// console.log(path.join(__dirname, 'web/main.js'))
exports.MainWindow = new BrowserWindow({
width: 500,
height: 800,
resizable: false,
// closable:false,
webPreferences: {
preload: path.join(__dirname, 'web/main.js')
}
})
// and load the index.html of the app.
exports.MainWindow.loadURL('http://oa.ouxuan.net/?d=we&m=login')
exports.MainWindow.on('minimize', function (event) {
event.preventDefault();
exports.MainWindow.hide();
});
// mainWindow.on("close",function(event){
// event.preventDefault();
// mainWindow.hide();
// })
}

207
lib/tray.js

@ -0,0 +1,207 @@
const { ipcMain, app, Menu, Tray, BrowserWindow, dialog } = require('electron')
const path = require('path')
const fs = require('fs');
const webdata = require(path.join(__dirname, 'web/data.js'));
const libdata = require(path.join(__dirname, 'data.js'));
const git = require(path.join(__dirname, 'git.js'));
const mainwin = require(path.join(__dirname, 'main.js'));
let tray = null
ipcMain.on('new-task-notification', (event) => {
tray.displayBalloon({
title: "可能有新的任务",
content: `当前总任务数${libdata.GetConfig().DaibanCount}`
})
});
ipcMain.on('put-in-tray', (event) => {
if (!tray) {
tray = new Tray(path.join(__dirname, '../windows-icon.png'))
tray.on("double-click", function () {
mainwin.MainWindow.show();
})
tray.on("right-click", function () {
let data = webdata.getTask()
let project_map = webdata.getProjectMap();
let ot = JSON.parse(fs.readFileSync(libdata.OpenTypeMapPath));
result = [];
for (var i in data) {
let submenu = [];
for (var k in data[i]) {
submenu.push({
label: data[i][k]["title"],
type: "submenu",
submenu: [
{
label: "查看详情",
click: (function () {
let id = data[i][k]["id"];
return function () {
mainwin.MainWindow.loadURL(`http://oa.ouxuan.net/task.php?a=x&num=work&show=we&mid=${id}`)
mainwin.MainWindow.show();
}
})()
},
{
label: "切换到该任务分支",
click: (function () {
let project_name = i;
let title = data[project_name][k]["title"];
return function () {
if (!project_map[project_name] || project_map[project_name] == "") {
dialog.showErrorBox(`无法切换分支`, `该项目找不到所在路径(${project_name})`);
return;
}
const workingDirPath = project_map[project_name]
const simpleGit = require('simple-git')(workingDirPath);
git.autoCheckoutLocalBranch(simpleGit, title, function () {
console.log("autoCheckoutLocalBranch")
if (ot[project_name] && ot[project_name] != "" && project_map[project_name] && project_map[project_name] != "") {
var exec = require('child_process').execFile;
exec(ot[project_name], [project_map[project_name]], function (err, data) {
if (err) console.log(err)
console.log(data.toString());
});
}
}, function (err) {
dialog.showErrorBox(`无法切换分支`, err);
})
}
})()
},
]
});
}
let project_dir = project_map[i]
if (!project_dir) {
project_dir = ""
} else {
project_dir = `(${project_dir})`
}
let project_opentype = ot[i]
if (!project_opentype) {
project_opentype = "(未设定)"
} else {
project_opentype = `(${project_opentype})`
}
let op = [
{
label: "关联项目路径" + project_dir,
click: (function (i) {
return function (menuItem, browserWindow, event) {
let project_map = JSON.parse(fs.readFileSync(libdata.ProjectMapPath));
let a = dialog.showOpenDialogSync({ properties: ['openDirectory'] })
if (a) {
project_map[i] = a[0]
fs.writeFileSync(libdata.ProjectMapPath, JSON.stringify(project_map))
}
}
})(i)
},
{
label: "关联程序" + project_opentype,
click: (function (i) {
return function (menuItem, browserWindow, event) {
ot = JSON.parse(fs.readFileSync(libdata.OpenTypeMapPath));
let a = dialog.showOpenDialogSync({ properties: ['openFile'] })
if (a) {
ot[i] = a[0]
fs.writeFileSync(libdata.OpenTypeMapPath, JSON.stringify(ot))
}
}
})(i)
},
,
{
label: "打开项目",
click: (function (i) {
return function (menuItem, browserWindow, event) {
let ot = JSON.parse(fs.readFileSync(libdata.OpenTypeMapPath));
let project_map = JSON.parse(fs.readFileSync(libdata.ProjectMapPath));
if (ot[i] && ot[i] != "" && project_map[i] && project_map[i] != "") {
var exec = require('child_process').execFile;
exec(ot[i], [project_map[i]], function (err, data) {
console.log(err)
console.log(data.toString());
});
}
}
})(i)
},
]
op = [
{
label: "项目操作",
type: "submenu",
submenu: op
},
{
type: "separator"
}
]
let item = {
label: i,
type: "submenu",
submenu: op.concat(submenu)
}
result.push(item);
}
tray.popUpContextMenu(Menu.buildFromTemplate(result.concat({
type: "separator"
}, {
label: "仅查看未完成",
type: "checkbox",
checked: libdata.GetConfig().TaskType == "wwc",
click: function (menuItem, browserWindow, event) {
var config = libdata.GetConfig()
config.TaskType = "my"
if (menuItem.checked) {
config.TaskType = "wwc"
}
libdata.SyncConfig(config)
mainwin.MainWindow.reload()
}
}, {
label: "退出",
click: function () {
app.quit()
}
})))
})
}
})
// exports.createTrayWindow = function () {
// // Create the browser window.
// const mainWindow = new BrowserWindow({
// width: 300,
// height: 600,
// webPreferences: {
// preload: path.join(__dirname, 'web/tray.js')
// }
// })
// mainWindow.loadFile("res/tray.html")
// mainWindow.hide()
// }

107
lib/web/data.js

@ -0,0 +1,107 @@
const fs = require('fs');
const path = require('path');
const libdata2 = require(path.join(__dirname, "../data.js"));
console.log("libdata2")
console.log(libdata2)
function syncTask(page, cb) {
$.get(`http://oa.ouxuan.net/api.php?m=index&a=getyydata&adminid=${adminid}&cfrom=mweb&event=${libdata2.GetConfig().TaskType}&num=work&key=&loadci=1&page=${page}`, function (data) {
var data = JSON.parse(data);
if (data.code == 200) {
if (page < data["data"]["maxpage"]) {
syncTask(page + 1, function (rows) {
cb(data["data"]["rows"].concat(rows))
})
} else {
for (var i in data["data"]["rows"]) {
$.ajax({
url: "http://oa.ouxuan.net/task.php?a=x&num=work&show=we&mid=" + data["data"]["rows"][i]["id"],
async: false,
success: function (html) {
var last = ""
$(html).find("div").each(function (item) {
if (last == "所属项目") {
a = ($(this).text()).split("(")
a.pop()
a = a.join("(")
data["data"]["rows"][i]["project"] = a;
}
last = $(this).text()
})
if (!data["data"]["rows"][i]["project"] || data["data"]["rows"][i]["project"] == "") {
data["data"]["rows"][i]["project"] = "未归属项目"
}
}
});
}
cb(data["data"]["rows"], data["data"]["count"])
}
}
})
}
function syncTaskConfig(url, key, apikey) {
var isNew = false;
var config = libdata2.GetConfig()
$.ajax({
url: url,
async: false,
success: function (data) {
data = JSON.parse(data)
console.log(data)
if (data.code == 200) {
if (config[key] != data["data"][apikey]) {
isNew = true
}
config[key] = data["data"][apikey]
libdata2.SyncConfig(config)
}
}, error: function (err) {
console.log(err)
}
})
console.log("isNew", isNew)
return isNew;
}
exports.syncDaibanCount = function () {
return syncTaskConfig(`http://oa.ouxuan.net/api.php?m=index&a=getyydata&adminid=${adminid}&cfrom=mweb&page=1&event=daib&num=daiban&key=&loadci=1`, "DaibanCount", "count")
}
exports.syncTaskCount = function () {
return syncTaskConfig(`http://oa.ouxuan.net/api.php?m=index&a=getyydata&adminid=${adminid}&cfrom=mweb&event=my&num=work&key=&loadci=1&page=1`, "TaskCount", "count")
}
exports.syncTaskToFile = function (cb) {
if (!fs.existsSync(libdata2.ProjectMapPath)) fs.writeFileSync(libdata2.ProjectMapPath, JSON.stringify({}))
syncTask(1, function (data, count) {
result = {};
for (let i in data) {
if (!result[data[i]["project"]]) {
result[data[i]["project"]] = [];
}
result[data[i]["project"]].push(data[i])
}
fs.writeFileSync(libdata2.TaskPath, JSON.stringify(result))
for (var i in result) {
var project_map = JSON.parse(fs.readFileSync(libdata2.ProjectMapPath));
if (!project_map[i]) {
project_map[i] = "";
}
}
fs.writeFileSync(libdata2.ProjectMapPath, JSON.stringify(project_map))
if (cb) cb();
})
}
exports.getTask = function () {
return JSON.parse(fs.readFileSync(libdata2.TaskPath));
}
exports.getProjectMap = function () {
return JSON.parse(fs.readFileSync(libdata2.ProjectMapPath));
}

64
lib/web/main.js

@ -0,0 +1,64 @@
const fs = require('fs');
const path = require('path')
const libdata = require(path.join(__dirname, "data.js"));
const libdata2 = require(path.join(__dirname, "../data.js"));
const ipc = require('electron').ipcRenderer
function get(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return (r[2]); return null;
}
window.addEventListener('DOMContentLoaded', () => {
libdata.syncTaskToFile(function () {
ipc.send('put-in-tray')
})
setInterval(function () {
if (libdata.syncDaibanCount()) {
ipc.send('new-task-notification')
console.log("通知中...")
libdata.syncTaskToFile();
}
}, 5 * 1000)
let m = get("m");
if (PageJs[m]) {
PageJs[m]()
} else {
// alert("未有指定动作:" + m);
}
})
PageJs = {
login() {
if (fs.existsSync(libdata2.UsernamePath)) {
let data = fs.readFileSync(libdata2.UsernamePath);
data = JSON.parse(data)
const adminuser = document.getElementById("adminuser")
adminuser.value = data["username"];
const adminpass = document.getElementById("adminpass")
adminpass.value = data["password"];
loginsubmit(0)
} else {
_loginsubmit = loginsubmit
loginsubmit = function () {
const adminuser = document.getElementById("adminuser")
const adminpass = document.getElementById("adminpass")
fs.writeFileSync(libdata2.UsernamePath, JSON.stringify({
username: adminuser.value,
password: adminpass.value,
}))
_loginsubmit(0)
}
}
}
}

2
lib/web/tray.js

@ -0,0 +1,2 @@
// const ipc = require('electron').ipcRenderer
// ipc.send('put-in-tray')

176
main.js

@ -1,187 +1,27 @@
// Modules to control application life and create native browser window
const { app, dialog, BrowserWindow, Menu, Tray, ipcMain } = require('electron')
const { app, BrowserWindow } = require('electron')
const path = require('path')
const fs = require('fs');
const main = require(path.join(__dirname, "lib/main.js"))
var result = [{
label: "title",
sublabel: "title",
type: "submenu",
submenu: [
{
label: "切换到该任务分支",
},
]
}
];
let tray = null
function createMenu() {
const iconPath = path.join(__dirname, 'windows-icon.png')
tray = new Tray(iconPath)
tray.setToolTip('This is my application.')
var menu_data = "";
var project_map_data = "";
tray.on("right-click", function () {
// tray.popUpContextMenu(Menu.buildFromTemplate(result.concat({
// type: "separator"
// }, {
// label: "退出",
// click: function () {
// for (var i in BrowserWindow.getAllWindows()) {
// BrowserWindow.getAllWindows()[i].close()
// }
// app.quit()
// }
// })))
// return
console.log("right-click")
if (!fs.existsSync("task.json") || !fs.existsSync("project-map.json")) {
return
}
// if (!fs.existsSync("project-map.json")) fs.writeFileSync("project-map.json", JSON.stringify({}))
var project_map_str = fs.readFileSync("project-map.json");
var project_map = JSON.parse(fs.readFileSync("project-map.json"));
var data = fs.readFileSync("task.json") + "";
if (data != menu_data && menu_data != "") {
tray.displayBalloon({
title: "你有一个新任务",
content: "你有一个新任务,请及时查看"
})
}
project_map_data = project_map_str
menu_data = data
data = JSON.parse(data);
result = [];
for (var i in data) {
let submenu = [];
for (var k in data[i]) {
submenu.push({
label: data[i][k]["title"],
type: "submenu",
submenu: [
{
label: "切换到该任务分支",
click: (function () {
i, data[i][k]["title"]
return function () {
}
})()
},
]
});
}
let project_dir = project_map[i]
if (!project_dir) {
project_dir = ""
} else {
project_dir = `(${project_dir})`
}
let item = {
label: i,
type: "submenu",
submenu: submenu.concat([
{
type: "separator"
},
{
label: "关联项目路径" + project_dir,
click: (function (i) {
return function (menuItem, browserWindow, event) {
let project_map = JSON.parse(fs.readFileSync("project-map.json"));
let a = dialog.showOpenDialogSync({ properties: ['openDirectory'] })
if (a) {
project_map[i] = a[0]
fs.writeFileSync("project-map.json", JSON.stringify(project_map))
}
}
})(i)
},
])
}
result.push(item);
}
tray.popUpContextMenu(Menu.buildFromTemplate(result.concat({
type: "separator"
}, {
label: "退出",
click: function () {
for (var i in BrowserWindow.getAllWindows()) {
BrowserWindow.getAllWindows()[i].close()
}
app.quit()
}
})))
})
}
function createWindow() {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 300,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
// and load the index.html of the app.
mainWindow.loadURL('http://oa.ouxuan.net/?d=we&m=login')
mainWindow.webContents.on('crashed', function () {
const options = {
type: 'info',
title: '渲染器进程崩溃',
message: '这个进程已经崩溃.',
buttons: ['重载', '关闭']
}
dialog.showMessageBox(options, function (index) {
if (index === 0) mainWindow.reload()
else mainWindow.close()
})
})
mainWindow.on('minimize', function (event) {
event.preventDefault();
mainWindow.hide();
});
// Open the DevTools.
// mainWindow.webContents.openDevTools()
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(function () {
createWindow()
createMenu()
require(path.join(__dirname, "lib/event.js"))
main.createMainWindow()
const tray = require(path.join(__dirname, "lib/tray.js"))
// tray.createTrayWindow()
})
// Quit when all windows are closed.
app.on('window-all-closed', function () {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
for (var i in BrowserWindow.getAllWindows()) {
BrowserWindow.getAllWindows()[i].close()
}

699
package-lock.json

@ -36,18 +36,109 @@
"defer-to-connect": "^1.0.1"
}
},
"@types/events": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
"dev": true,
"optional": true
},
"@types/glob": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
"integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
"dev": true,
"optional": true,
"requires": {
"@types/events": "*",
"@types/minimatch": "*",
"@types/node": "*"
}
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true,
"optional": true
},
"@types/node": {
"version": "12.12.34",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.34.tgz",
"integrity": "sha512-BneGN0J9ke24lBRn44hVHNeDlrXRYF+VRp0HbSUNnEZahXGAysHZIqnf/hER6aabdBgzM4YOV4jrR8gj4Zfi0g==",
"dev": true
},
"asar": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz",
"integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==",
"dev": true,
"requires": {
"@types/glob": "^7.1.1",
"chromium-pickle-js": "^0.2.0",
"commander": "^2.20.0",
"cuint": "^0.2.2",
"glob": "^7.1.3",
"minimatch": "^3.0.4",
"mkdirp": "^0.5.1",
"tmp-promise": "^1.0.5"
}
},
"author-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz",
"integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"dev": true
},
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
"dev": true
},
"boolean": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz",
"integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"optional": true
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"buffer-alloc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
"dev": true,
"requires": {
"buffer-alloc-unsafe": "^1.1.0",
"buffer-fill": "^1.0.0"
}
},
"buffer-alloc-unsafe": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
"dev": true
},
"buffer-crc32": {
"version": "0.2.13",
@ -55,6 +146,12 @@
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
"dev": true
},
"buffer-fill": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@ -93,6 +190,18 @@
}
}
},
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
"chromium-pickle-js": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
"integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
"dev": true
},
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
@ -102,6 +211,24 @@
"mimic-response": "^1.0.0"
}
},
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
"compare-version": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
"integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
@ -138,15 +265,46 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
"cross-zip": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cross-zip/-/cross-zip-3.0.0.tgz",
"integrity": "sha512-cm+l8PJ6WiSQmKZ/x8DGvUm2u/3FX2JFs1AFd18gdHaVhP5Lf4oE6Jrj2Jd05JYSioz5x+nIRVp0zBQuzuCRcQ==",
"dev": true,
"requires": {
"rimraf": "^3.0.0"
},
"dependencies": {
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
}
}
},
"cuint": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
"integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
"dev": true
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
"decompress-response": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
@ -196,6 +354,80 @@
"extract-zip": "^1.0.3"
}
},
"electron-notarize": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-0.2.1.tgz",
"integrity": "sha512-oZ6/NhKeXmEKNROiFmRNfytqu3cxqC95sjooG7kBXQVEUSQkZnbiAhxVh5jXngL881G197pbwpeVPJyM7Ikmxw==",
"dev": true,
"requires": {
"debug": "^4.1.1",
"fs-extra": "^8.1.0"
}
},
"electron-osx-sign": {
"version": "0.4.15",
"resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.15.tgz",
"integrity": "sha512-1QtPNpjIji9bGZ0VRFwtJUyU1uHi7q3XUAOG0qFsvAUfs5H0T8hbgUfyg3xvPzmF1ruV8T8pQmQ86vNfLrcRiA==",
"dev": true,
"requires": {
"bluebird": "^3.5.0",
"compare-version": "^0.1.2",
"debug": "^2.6.8",
"isbinaryfile": "^3.0.2",
"minimist": "^1.2.0",
"plist": "^3.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
"electron-packager": {
"version": "14.2.1",
"resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-14.2.1.tgz",
"integrity": "sha512-g6y3BVrAOz/iavKD+VMFbehrQcwCWuA3CZvVbmmbQuCfegGA1ytwWn0BNIDDrEdbuz31Fti7mnNHhb5L+3Wq9A==",
"dev": true,
"requires": {
"@electron/get": "^1.6.0",
"asar": "^2.0.1",
"cross-zip": "^3.0.0",
"debug": "^4.0.1",
"electron-notarize": "^0.2.0",
"electron-osx-sign": "^0.4.11",
"fs-extra": "^8.1.0",
"galactus": "^0.2.1",
"get-package-info": "^1.0.0",
"junk": "^3.1.0",
"parse-author": "^2.0.0",
"plist": "^3.0.0",
"rcedit": "^2.0.0",
"resolve": "^1.1.6",
"sanitize-filename": "^1.6.0",
"semver": "^6.0.0",
"yargs-parser": "^16.0.0"
},
"dependencies": {
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
}
}
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
@ -218,6 +450,15 @@
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
"dev": true
},
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
},
"es6-error": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
@ -270,6 +511,38 @@
"pend": "~1.2.0"
}
},
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
"locate-path": "^2.0.0"
}
},
"flora-colossus": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz",
"integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==",
"dev": true,
"requires": {
"debug": "^4.1.1",
"fs-extra": "^7.0.0"
},
"dependencies": {
"fs-extra": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
}
}
},
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
@ -281,6 +554,74 @@
"universalify": "^0.1.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"galactus": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz",
"integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=",
"dev": true,
"requires": {
"debug": "^3.1.0",
"flora-colossus": "^1.0.0",
"fs-extra": "^4.0.0"
},
"dependencies": {
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
}
}
},
"get-package-info": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz",
"integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=",
"dev": true,
"requires": {
"bluebird": "^3.1.1",
"debug": "^2.2.0",
"lodash.get": "^4.0.0",
"read-pkg-up": "^2.0.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@ -290,6 +631,20 @@
"pump": "^3.0.0"
}
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"global-agent": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.8.tgz",
@ -354,12 +709,28 @@
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
"dev": true
},
"hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true
},
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@ -373,12 +744,27 @@
"dev": true,
"optional": true
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"isbinaryfile": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
"integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
"dev": true,
"requires": {
"buffer-alloc": "^1.2.0"
}
},
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
@ -401,6 +787,12 @@
"graceful-fs": "^4.1.6"
}
},
"junk": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
"integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
"dev": true
},
"keyv": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
@ -410,6 +802,36 @@
"json-buffer": "3.0.0"
}
},
"load-json-file": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
"pify": "^2.0.0",
"strip-bom": "^3.0.0"
},
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
}
},
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
}
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
@ -417,6 +839,12 @@
"dev": true,
"optional": true
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@ -439,6 +867,15 @@
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
@ -457,8 +894,27 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
},
"dependencies": {
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
}
},
"normalize-url": {
"version": "4.5.0",
@ -493,12 +949,94 @@
"wrappy": "1"
}
},
"os-homedir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz",
"integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q=="
},
"p-cancelable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
"dev": true
},
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
"p-try": "^1.0.0"
}
},
"p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
"p-limit": "^1.1.0"
}
},
"p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
"parse-author": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
"integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=",
"dev": true,
"requires": {
"author-regex": "^1.0.0"
}
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": {
"error-ex": "^1.2.0"
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"path-type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
"dev": true,
"requires": {
"pify": "^2.0.0"
},
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
}
},
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@ -512,6 +1050,17 @@
"dev": true,
"optional": true
},
"plist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
"integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
"dev": true,
"requires": {
"base64-js": "^1.2.3",
"xmlbuilder": "^9.0.7",
"xmldom": "0.1.x"
}
},
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
@ -547,6 +1096,33 @@
"once": "^1.3.1"
}
},
"rcedit": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.1.1.tgz",
"integrity": "sha512-N1JyXxHD2zpqqW4A77RNK1d/M+tyed9JkvL/lnUI5cf4igF/8B9FNLFCtDUhGrk2GWEPxC+RF0WXWWB3I8QC7w==",
"dev": true
},
"read-pkg": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
"dev": true,
"requires": {
"load-json-file": "^2.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^2.0.0"
}
},
"read-pkg-up": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
"dev": true,
"requires": {
"find-up": "^2.0.0",
"read-pkg": "^2.0.0"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@ -562,6 +1138,15 @@
"util-deprecate": "~1.0.1"
}
},
"resolve": {
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.0.tgz",
"integrity": "sha512-LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
"responselike": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
@ -571,6 +1156,15 @@
"lowercase-keys": "^1.0.0"
}
},
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"roarr": {
"version": "2.15.3",
"resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz",
@ -625,6 +1219,46 @@
"type-fest": "^0.8.0"
}
},
"simple-git": {
"version": "1.132.0",
"resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz",
"integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==",
"requires": {
"debug": "^4.0.1"
}
},
"spdx-correct": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
"integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
"dev": true
},
"spdx-expression-parse": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
"dev": true
},
"sprintf-js": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
@ -641,6 +1275,12 @@
"safe-buffer": "~5.1.0"
}
},
"strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
"sumchecker": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
@ -650,6 +1290,25 @@
"debug": "^4.1.0"
}
},
"tmp": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
"integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
"dev": true,
"requires": {
"rimraf": "^2.6.3"
}
},
"tmp-promise": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz",
"integrity": "sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==",
"dev": true,
"requires": {
"bluebird": "^3.5.0",
"tmp": "0.1.0"
}
},
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@ -712,12 +1371,44 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"xmlbuilder": {
"version": "9.0.7",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
"dev": true
},
"xmldom": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
"integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
"dev": true
},
"yargs-parser": {
"version": "16.1.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz",
"integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
},
"yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",

25
package.json

@ -1,22 +1,17 @@
{
"name": "electron-quick-start",
"name": "ouxuan.oa",
"version": "1.0.0",
"description": "A minimal Electron application",
"main": "main.js",
"scripts": {
"start": "electron ."
"start": "electron .",
"package": "electron-packager ./ ouxuan.oa --out ./build --overwrite --icon=favicon"
},
"repository": "https://github.com/electron/electron-quick-start",
"keywords": [
"Electron",
"quick",
"start",
"tutorial",
"demo"
],
"author": "GitHub",
"license": "CC0-1.0",
"devDependencies": {
"electron": "^8.2.1"
"electron": "^8.2.1",
"electron-packager": "^14.2.1"
},
"dependencies": {
"os-homedir": "^2.0.0",
"simple-git": "^1.132.0"
}
}
}

115
preload.js

@ -1,115 +0,0 @@
// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
const fs = require('fs');
const ipc = require('electron').ipcRenderer
function get(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return (r[2]); return null;
}
function inits() {
function p(page, cb) {
$.get(`http://oa.ouxuan.net/api.php?m=index&a=getyydata&adminid=${adminid}&cfrom=mweb&event=wwc&num=work&key=&loadci=1&page=${page}`, function (data) {
var data = JSON.parse(data);
if (data.code == 200) {
if (page < data["data"]["maxpage"]) {
p(page + 1, function (rows) {
cb(data["data"]["rows"].concat(rows))
})
} else {
for (var i in data["data"]["rows"]) {
$.ajax({
url: "http://oa.ouxuan.net/task.php?a=x&num=work&show=we&mid=" + data["data"]["rows"][i]["id"],
async: false,
success: function (html) {
var last = ""
$(html).find("div").each(function (item) {
if (last == "所属项目") {
a = ($(this).text()).split("(")
a.pop()
a = a.join("(")
data["data"]["rows"][i]["project"] = a
console.log(a)
}
last = $(this).text()
})
}
});
}
cb(data["data"]["rows"])
}
}
})
}
var start = function () {
p(1, function (data) {
// alert( JSON.stringify(data));
result = {};
for (let i in data) {
if (!result[data[i]["project"]]) {
result[data[i]["project"]] = [];
}
result[data[i]["project"]].push(data[i])
}
fs.writeFileSync("task.json", JSON.stringify(result))
setTimeout(function () {
// location.reload()
}, 1 * 1000);
})
}
setTimeout(() => {
console.log(js)
console.log(js.request('adminid'))
console.log(adminid)
start()
}, 2000);
}
window.addEventListener('DOMContentLoaded', () => {
let m = get("m");
inits()
if (PageJs[m]) {
PageJs[m]()
} else {
// alert("未有指定动作:" + m);
}
})
PageJs = {
login() {
if (fs.existsSync("username.json")) {
let data = fs.readFileSync("username.json");
data = JSON.parse(data)
const adminuser = document.getElementById("adminuser")
adminuser.value = data["username"];
const adminpass = document.getElementById("adminpass")
adminpass.value = data["password"];
loginsubmit(0)
} else {
_loginsubmit = loginsubmit
loginsubmit = function () {
const adminuser = document.getElementById("adminuser")
const adminpass = document.getElementById("adminpass")
fs.writeFileSync("username.json", JSON.stringify({
username: adminuser.value,
password: adminpass.value,
}))
_loginsubmit(0)
}
}
}
}

1
project-map.json

@ -1 +0,0 @@
{"同济人脸识别签到系统授权库放到云上(离线版及在线版)":"C:\\Users\\admin\\Desktop\\临时项目\\tjrl","壁球馆智能系统":["C:\\Users\\admin\\go\\src\\git.ouxuan.net\\3136352472\\ouxuanac"]}

6
renderer.js

@ -1,6 +0,0 @@
// This file is required by the index.html file and will
// be executed in the renderer process for that window.
// No Node.js APIs are available in this process because
// `nodeIntegration` is turned off. Use `preload.js` to
// selectively enable features needed in the rendering
// process.

18
res/jquery.ba-bbq.min.js

@ -1,18 +0,0 @@
/*
* jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
* http://benalman.com/projects/jquery-bbq-plugin/
*
* Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
/*
* jQuery hashchange event - v1.2 - 2/11/2010
* http://benalman.com/projects/jquery-hashchange-plugin/
*
* Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);

0
res/tray.html

Loading…
Cancel
Save