@ -1,17 +0,0 @@ |
|||||||
{ |
|
||||||
"env": { |
|
||||||
"browser": true, |
|
||||||
"es2020": true |
|
||||||
}, |
|
||||||
"extends": [ |
|
||||||
"standard" |
|
||||||
], |
|
||||||
"parserOptions": { |
|
||||||
"ecmaVersion": 11 |
|
||||||
}, |
|
||||||
"rules": { |
|
||||||
}, |
|
||||||
"globals": { |
|
||||||
"chrome": "readonly" |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,5 @@ |
|||||||
|
[*.{js,jsx,ts,tsx,vue,less}] |
||||||
|
indent_style = space |
||||||
|
indent_size = 2 |
||||||
|
trim_trailing_whitespace = true |
||||||
|
insert_final_newline = true |
@ -0,0 +1,17 @@ |
|||||||
|
module.exports = { |
||||||
|
root: true, |
||||||
|
env: { |
||||||
|
node: true |
||||||
|
}, |
||||||
|
extends: [ |
||||||
|
'plugin:vue/essential', |
||||||
|
'@vue/standard' |
||||||
|
], |
||||||
|
parserOptions: { |
||||||
|
parser: 'babel-eslint' |
||||||
|
}, |
||||||
|
rules: { |
||||||
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', |
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
.DS_Store |
||||||
|
node_modules |
||||||
|
/dist |
||||||
|
|
||||||
|
|
||||||
|
# local env files |
||||||
|
.env.local |
||||||
|
.env.*.local |
||||||
|
|
||||||
|
# Log files |
||||||
|
npm-debug.log* |
||||||
|
yarn-debug.log* |
||||||
|
yarn-error.log* |
||||||
|
pnpm-debug.log* |
||||||
|
|
||||||
|
# Editor directories and files |
||||||
|
.idea |
||||||
|
.vscode |
||||||
|
*.suo |
||||||
|
*.ntvs* |
||||||
|
*.njsproj |
||||||
|
*.sln |
||||||
|
*.sw? |
@ -0,0 +1,5 @@ |
|||||||
|
module.exports = { |
||||||
|
presets: [ |
||||||
|
'@vue/cli-plugin-babel/preset' |
||||||
|
] |
||||||
|
} |
@ -1,349 +0,0 @@ |
|||||||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ |
|
||||||
|
|
||||||
/* Document |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Correct the line height in all browsers. |
|
||||||
* 2. Prevent adjustments of font size after orientation changes in iOS. |
|
||||||
*/ |
|
||||||
|
|
||||||
html { |
|
||||||
line-height: 1.15; /* 1 */ |
|
||||||
-webkit-text-size-adjust: 100%; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/* Sections |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the margin in all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
body { |
|
||||||
margin: 0; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Render the `main` element consistently in IE. |
|
||||||
*/ |
|
||||||
|
|
||||||
main { |
|
||||||
display: block; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Correct the font size and margin on `h1` elements within `section` and |
|
||||||
* `article` contexts in Chrome, Firefox, and Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
h1 { |
|
||||||
font-size: 2em; |
|
||||||
margin: 0.67em 0; |
|
||||||
} |
|
||||||
|
|
||||||
/* Grouping content |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Add the correct box sizing in Firefox. |
|
||||||
* 2. Show the overflow in Edge and IE. |
|
||||||
*/ |
|
||||||
|
|
||||||
hr { |
|
||||||
box-sizing: content-box; /* 1 */ |
|
||||||
height: 0; /* 1 */ |
|
||||||
overflow: visible; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Correct the inheritance and scaling of font size in all browsers. |
|
||||||
* 2. Correct the odd `em` font sizing in all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
pre { |
|
||||||
font-family: monospace, monospace; /* 1 */ |
|
||||||
font-size: 1em; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/* Text-level semantics |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the gray background on active links in IE 10. |
|
||||||
*/ |
|
||||||
|
|
||||||
a { |
|
||||||
background-color: transparent; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Remove the bottom border in Chrome 57- |
|
||||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
abbr[title] { |
|
||||||
border-bottom: none; /* 1 */ |
|
||||||
text-decoration: underline; /* 2 */ |
|
||||||
text-decoration: underline dotted; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Add the correct font weight in Chrome, Edge, and Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
b, |
|
||||||
strong { |
|
||||||
font-weight: bolder; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Correct the inheritance and scaling of font size in all browsers. |
|
||||||
* 2. Correct the odd `em` font sizing in all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
code, |
|
||||||
kbd, |
|
||||||
samp { |
|
||||||
font-family: monospace, monospace; /* 1 */ |
|
||||||
font-size: 1em; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Add the correct font size in all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
small { |
|
||||||
font-size: 80%; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Prevent `sub` and `sup` elements from affecting the line height in |
|
||||||
* all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
sub, |
|
||||||
sup { |
|
||||||
font-size: 75%; |
|
||||||
line-height: 0; |
|
||||||
position: relative; |
|
||||||
vertical-align: baseline; |
|
||||||
} |
|
||||||
|
|
||||||
sub { |
|
||||||
bottom: -0.25em; |
|
||||||
} |
|
||||||
|
|
||||||
sup { |
|
||||||
top: -0.5em; |
|
||||||
} |
|
||||||
|
|
||||||
/* Embedded content |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the border on images inside links in IE 10. |
|
||||||
*/ |
|
||||||
|
|
||||||
img { |
|
||||||
border-style: none; |
|
||||||
} |
|
||||||
|
|
||||||
/* Forms |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Change the font styles in all browsers. |
|
||||||
* 2. Remove the margin in Firefox and Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
button, |
|
||||||
input, |
|
||||||
optgroup, |
|
||||||
select, |
|
||||||
textarea { |
|
||||||
font-family: inherit; /* 1 */ |
|
||||||
font-size: 100%; /* 1 */ |
|
||||||
line-height: 1.15; /* 1 */ |
|
||||||
margin: 0; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Show the overflow in IE. |
|
||||||
* 1. Show the overflow in Edge. |
|
||||||
*/ |
|
||||||
|
|
||||||
button, |
|
||||||
input { /* 1 */ |
|
||||||
overflow: visible; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the inheritance of text transform in Edge, Firefox, and IE. |
|
||||||
* 1. Remove the inheritance of text transform in Firefox. |
|
||||||
*/ |
|
||||||
|
|
||||||
button, |
|
||||||
select { /* 1 */ |
|
||||||
text-transform: none; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Correct the inability to style clickable types in iOS and Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
button, |
|
||||||
[type="button"], |
|
||||||
[type="reset"], |
|
||||||
[type="submit"] { |
|
||||||
-webkit-appearance: button; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the inner border and padding in Firefox. |
|
||||||
*/ |
|
||||||
|
|
||||||
button::-moz-focus-inner, |
|
||||||
[type="button"]::-moz-focus-inner, |
|
||||||
[type="reset"]::-moz-focus-inner, |
|
||||||
[type="submit"]::-moz-focus-inner { |
|
||||||
border-style: none; |
|
||||||
padding: 0; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Restore the focus styles unset by the previous rule. |
|
||||||
*/ |
|
||||||
|
|
||||||
button:-moz-focusring, |
|
||||||
[type="button"]:-moz-focusring, |
|
||||||
[type="reset"]:-moz-focusring, |
|
||||||
[type="submit"]:-moz-focusring { |
|
||||||
outline: 1px dotted ButtonText; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Correct the padding in Firefox. |
|
||||||
*/ |
|
||||||
|
|
||||||
fieldset { |
|
||||||
padding: 0.35em 0.75em 0.625em; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Correct the text wrapping in Edge and IE. |
|
||||||
* 2. Correct the color inheritance from `fieldset` elements in IE. |
|
||||||
* 3. Remove the padding so developers are not caught out when they zero out |
|
||||||
* `fieldset` elements in all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
legend { |
|
||||||
box-sizing: border-box; /* 1 */ |
|
||||||
color: inherit; /* 2 */ |
|
||||||
display: table; /* 1 */ |
|
||||||
max-width: 100%; /* 1 */ |
|
||||||
padding: 0; /* 3 */ |
|
||||||
white-space: normal; /* 1 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Add the correct vertical alignment in Chrome, Firefox, and Opera. |
|
||||||
*/ |
|
||||||
|
|
||||||
progress { |
|
||||||
vertical-align: baseline; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the default vertical scrollbar in IE 10+. |
|
||||||
*/ |
|
||||||
|
|
||||||
textarea { |
|
||||||
overflow: auto; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Add the correct box sizing in IE 10. |
|
||||||
* 2. Remove the padding in IE 10. |
|
||||||
*/ |
|
||||||
|
|
||||||
[type="checkbox"], |
|
||||||
[type="radio"] { |
|
||||||
box-sizing: border-box; /* 1 */ |
|
||||||
padding: 0; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Correct the cursor style of increment and decrement buttons in Chrome. |
|
||||||
*/ |
|
||||||
|
|
||||||
[type="number"]::-webkit-inner-spin-button, |
|
||||||
[type="number"]::-webkit-outer-spin-button { |
|
||||||
height: auto; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Correct the odd appearance in Chrome and Safari. |
|
||||||
* 2. Correct the outline style in Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
[type="search"] { |
|
||||||
-webkit-appearance: textfield; /* 1 */ |
|
||||||
outline-offset: -2px; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Remove the inner padding in Chrome and Safari on macOS. |
|
||||||
*/ |
|
||||||
|
|
||||||
[type="search"]::-webkit-search-decoration { |
|
||||||
-webkit-appearance: none; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 1. Correct the inability to style clickable types in iOS and Safari. |
|
||||||
* 2. Change font properties to `inherit` in Safari. |
|
||||||
*/ |
|
||||||
|
|
||||||
::-webkit-file-upload-button { |
|
||||||
-webkit-appearance: button; /* 1 */ |
|
||||||
font: inherit; /* 2 */ |
|
||||||
} |
|
||||||
|
|
||||||
/* Interactive |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/* |
|
||||||
* Add the correct display in Edge, IE 10+, and Firefox. |
|
||||||
*/ |
|
||||||
|
|
||||||
details { |
|
||||||
display: block; |
|
||||||
} |
|
||||||
|
|
||||||
/* |
|
||||||
* Add the correct display in all browsers. |
|
||||||
*/ |
|
||||||
|
|
||||||
summary { |
|
||||||
display: list-item; |
|
||||||
} |
|
||||||
|
|
||||||
/* Misc |
|
||||||
========================================================================== */ |
|
||||||
|
|
||||||
/** |
|
||||||
* Add the correct display in IE 10+. |
|
||||||
*/ |
|
||||||
|
|
||||||
template { |
|
||||||
display: none; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Add the correct display in IE 10. |
|
||||||
*/ |
|
||||||
|
|
||||||
[hidden] { |
|
||||||
display: none; |
|
||||||
} |
|
@ -1,8 +0,0 @@ |
|||||||
body { |
|
||||||
font-size: 12px; |
|
||||||
width: 300px; |
|
||||||
max-width: 300px; |
|
||||||
height: 558px; |
|
||||||
max-height: 558px; |
|
||||||
overflow: hidden; |
|
||||||
} |
|
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 495 B |
Before Width: | Height: | Size: 814 B |
Before Width: | Height: | Size: 1.2 KiB |
@ -1,33 +0,0 @@ |
|||||||
{ |
|
||||||
"manifest_version": 2, |
|
||||||
"name": "__MSG_name__", |
|
||||||
"version": "1.0", |
|
||||||
"default_locale": "zh_CN", |
|
||||||
"description": "__MSG_description__", |
|
||||||
"icons": { |
|
||||||
"16": "images/get_started16.png", |
|
||||||
"32": "images/get_started32.png", |
|
||||||
"48": "images/get_started48.png", |
|
||||||
"128": "images/get_started128.png" |
|
||||||
}, |
|
||||||
"browser_action": { |
|
||||||
"default_popup": "popup.html", |
|
||||||
"default_icon": { |
|
||||||
"16": "images/get_started16.png", |
|
||||||
"32": "images/get_started32.png", |
|
||||||
"48": "images/get_started48.png", |
|
||||||
"128": "images/get_started128.png" |
|
||||||
} |
|
||||||
}, |
|
||||||
"background": { |
|
||||||
"scripts": ["background.js"], |
|
||||||
"persistent": false |
|
||||||
}, |
|
||||||
"homepage_url": "https://github.com/alvisisme", |
|
||||||
"permissions": [ |
|
||||||
"activeTab", |
|
||||||
"bookmarks", |
|
||||||
"storage" |
|
||||||
], |
|
||||||
"content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" |
|
||||||
} |
|
@ -0,0 +1,44 @@ |
|||||||
|
{ |
||||||
|
"name": "chrome-extension-syncmarks", |
||||||
|
"version": "1.0.0", |
||||||
|
"description": "A chrome extension to sync bookmarks", |
||||||
|
"private": true, |
||||||
|
"scripts": { |
||||||
|
"serve": "vue-cli-service serve", |
||||||
|
"build": "vue-cli-service build", |
||||||
|
"lint": "vue-cli-service lint" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"axios": "^0.21.1", |
||||||
|
"core-js": "^3.6.5", |
||||||
|
"normalize.css": "^8.0.1", |
||||||
|
"vue": "^2.6.11" |
||||||
|
}, |
||||||
|
"devDependencies": { |
||||||
|
"@vue/cli-plugin-babel": "~4.5.0", |
||||||
|
"@vue/cli-plugin-eslint": "~4.5.0", |
||||||
|
"@vue/cli-service": "~4.5.0", |
||||||
|
"@vue/eslint-config-standard": "^5.1.2", |
||||||
|
"babel-eslint": "^10.1.0", |
||||||
|
"eslint": "^6.7.2", |
||||||
|
"eslint-plugin-import": "^2.20.2", |
||||||
|
"eslint-plugin-node": "^11.1.0", |
||||||
|
"eslint-plugin-promise": "^4.2.1", |
||||||
|
"eslint-plugin-standard": "^4.0.0", |
||||||
|
"eslint-plugin-vue": "^6.2.2", |
||||||
|
"html-webpack-plugin": "^5.3.1", |
||||||
|
"less": "^3.0.4", |
||||||
|
"less-loader": "^5.0.0", |
||||||
|
"lint-staged": "^9.5.0", |
||||||
|
"vue-template-compiler": "^2.6.11" |
||||||
|
}, |
||||||
|
"gitHooks": { |
||||||
|
"pre-commit": "lint-staged" |
||||||
|
}, |
||||||
|
"lint-staged": { |
||||||
|
"*.{js,jsx,vue}": [ |
||||||
|
"vue-cli-service lint", |
||||||
|
"git add" |
||||||
|
] |
||||||
|
} |
||||||
|
} |
@ -1,21 +0,0 @@ |
|||||||
<html lang="zh-CN"> |
|
||||||
<head> |
|
||||||
<meta charset="UTF-8"> |
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
|
||||||
<title>Chrome Bookmarks Sync Tools</title> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<div> |
|
||||||
<span>服务器地址</span> |
|
||||||
<input id='server' type="text" value='http://192.168.31.238:3000' placeholder="http://192.168.31.161:3000"> |
|
||||||
<button id='connect' type="button">连接服务器</button> |
|
||||||
<span id='version'></span> |
|
||||||
</div> |
|
||||||
<button id='overwriteSync' type="button">同步(覆盖模式)</button> |
|
||||||
<button id='mergeSync' type="button">同步(合并模式)</button> |
|
||||||
<button id='upload' type="button" >备份</button> |
|
||||||
<button id='removeAll' type="button" >清空</button> |
|
||||||
<script src='./js/popup.js'></script> |
|
||||||
</body> |
|
||||||
</html> |
|
@ -0,0 +1,10 @@ |
|||||||
|
chrome.runtime.onInstalled.addListener(function() { |
||||||
|
// 扩展第一次安装时触发
|
||||||
|
// alert('安装完成')
|
||||||
|
}) |
||||||
|
|
||||||
|
chrome.bookmarks.onCreated.addListener(function() { |
||||||
|
// alert('新增书签')
|
||||||
|
}) |
||||||
|
// chrome.browserAction.setBadgeText({text: '↑'})
|
||||||
|
// chrome.browserAction.setBadgeText({text: '↓'})
|
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 596 B |
After Width: | Height: | Size: 891 B |
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,17 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="zh-CN"> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0"> |
||||||
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
||||||
|
<title><%= htmlWebpackPlugin.options.title %></title> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<noscript> |
||||||
|
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> |
||||||
|
</noscript> |
||||||
|
<div id="app"></div> |
||||||
|
<!-- built files will be auto injected --> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,36 @@ |
|||||||
|
{ |
||||||
|
"manifest_version": 2, |
||||||
|
"name": "__MSG_name__", |
||||||
|
"version": "1.0", |
||||||
|
"default_locale": "zh_CN", |
||||||
|
"description": "__MSG_description__", |
||||||
|
"icons": { |
||||||
|
"16": "images/bookmark16.png", |
||||||
|
"32": "images/bookmark32.png", |
||||||
|
"48": "images/bookmark48.png", |
||||||
|
"128": "images/bookmark128.png" |
||||||
|
}, |
||||||
|
"browser_action": { |
||||||
|
"default_popup": "popup.html", |
||||||
|
"default_icon": { |
||||||
|
"16": "images/bookmark16.png", |
||||||
|
"32": "images/bookmark32.png", |
||||||
|
"48": "images/bookmark48.png", |
||||||
|
"128": "images/bookmark128.png" |
||||||
|
} |
||||||
|
}, |
||||||
|
"background": { |
||||||
|
"scripts": [ |
||||||
|
"background.js" |
||||||
|
], |
||||||
|
"persistent": false |
||||||
|
}, |
||||||
|
"options_page": "options.html", |
||||||
|
"homepage_url": "https://github.com/alvisisme", |
||||||
|
"permissions": [ |
||||||
|
"activeTab", |
||||||
|
"bookmarks", |
||||||
|
"storage" |
||||||
|
], |
||||||
|
"content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
<template> |
||||||
|
<div id="app"> |
||||||
|
<loading class="loading"></loading> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import Loading from '@/components/loading.vue' |
||||||
|
export default { |
||||||
|
name: 'App', |
||||||
|
components: { |
||||||
|
Loading |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
.loading { |
||||||
|
height: 24px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
<style lang="less"> |
||||||
|
html,body { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
|
||||||
|
#app { |
||||||
|
font-family: Avenir, Helvetica, Arial, sans-serif; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
-moz-osx-font-smoothing: grayscale; |
||||||
|
text-align: center; |
||||||
|
color: #2c3e50; |
||||||
|
width: 300px; |
||||||
|
} |
||||||
|
</style> |
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1,21 @@ |
|||||||
|
<template> |
||||||
|
<button class="v-button"> |
||||||
|
<slot></slot> |
||||||
|
</button> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: 'VButton', |
||||||
|
props: { |
||||||
|
msg: String |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
.v-button { |
||||||
|
color: red; |
||||||
|
padding: 6px 24px; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,67 @@ |
|||||||
|
<template> |
||||||
|
<div class="v-col" :class="classes"> |
||||||
|
<slot></slot> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: 'vCol', |
||||||
|
props: { |
||||||
|
span: { |
||||||
|
type: Number, |
||||||
|
default: 24 |
||||||
|
} |
||||||
|
}, |
||||||
|
data () { |
||||||
|
return { |
||||||
|
classes: { |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
|
||||||
|
}, |
||||||
|
methods: { |
||||||
|
}, |
||||||
|
created () { |
||||||
|
this.classes[`v-col-${this.span}`] = true |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
[class*="v-col-"] { |
||||||
|
float: left; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
|
||||||
|
.v-col-0 { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
// 栅格类函数循环 |
||||||
|
.v-col-loop(@n, @i: 0) when (@i <= @n) { |
||||||
|
.v-col-@{i} { |
||||||
|
width: (1 / @n * @i * 100) * 1%; |
||||||
|
} |
||||||
|
|
||||||
|
.v-col-offset-@{i} { |
||||||
|
margin-left: (1 / @n * @i * 100) * 1%; |
||||||
|
} |
||||||
|
|
||||||
|
.v-col-pull-@{i} { |
||||||
|
position: relative; |
||||||
|
right: (1 / @n * @i * 100) * 1%; |
||||||
|
} |
||||||
|
|
||||||
|
.v-col-push-@{i} { |
||||||
|
position: relative; |
||||||
|
left: (1 / @n * @i * 100) * 1%; |
||||||
|
} |
||||||
|
|
||||||
|
.v-col-loop(@n, (@i + 1)); |
||||||
|
} |
||||||
|
|
||||||
|
.v-col-loop(24); |
||||||
|
</style> |
@ -0,0 +1,17 @@ |
|||||||
|
<template> |
||||||
|
<div class="loading-bar"> |
||||||
|
loading... |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: 'vLoading' |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
.loading-bar { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,22 @@ |
|||||||
|
<template> |
||||||
|
<div class="v-row"> |
||||||
|
<slot></slot> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: 'VRow' |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
@import "~@/styles/mixins.less"; |
||||||
|
|
||||||
|
.v-row { |
||||||
|
position: relative; |
||||||
|
box-sizing: border-box; |
||||||
|
|
||||||
|
.utils-clearfix-mixin() |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,10 @@ |
|||||||
|
import Vue from 'vue' |
||||||
|
import 'normalize.css' |
||||||
|
|
||||||
|
import App from './app.vue' |
||||||
|
|
||||||
|
Vue.config.productionTip = false |
||||||
|
|
||||||
|
new Vue({ |
||||||
|
render: h => h(App) |
||||||
|
}).$mount('#app') |
@ -0,0 +1,55 @@ |
|||||||
|
<template> |
||||||
|
<div id="app"> |
||||||
|
<v-row> |
||||||
|
<h1>配置页面</h1> |
||||||
|
</v-row> |
||||||
|
<v-row> |
||||||
|
配置项 |
||||||
|
</v-row> |
||||||
|
|
||||||
|
<v-row> |
||||||
|
<v-col :span=12> |
||||||
|
<v-button>保存</v-button> |
||||||
|
</v-col> |
||||||
|
<v-col :span=12> |
||||||
|
<v-button>取消</v-button> |
||||||
|
</v-col> |
||||||
|
</v-row> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import vRow from '@/components/vrow.vue' |
||||||
|
import vCol from '@/components/vcol.vue' |
||||||
|
import vButton from '@/components/vbutton.vue' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'App', |
||||||
|
components: { |
||||||
|
vRow, |
||||||
|
vCol, |
||||||
|
vButton |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
.loading { |
||||||
|
height: 24px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
<style lang="less"> |
||||||
|
html,body { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
|
||||||
|
#app { |
||||||
|
font-family: Avenir, Helvetica, Arial, sans-serif; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
-moz-osx-font-smoothing: grayscale; |
||||||
|
text-align: center; |
||||||
|
color: #2c3e50; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,10 @@ |
|||||||
|
import Vue from 'vue' |
||||||
|
import 'normalize.css' |
||||||
|
|
||||||
|
import App from './app.vue' |
||||||
|
|
||||||
|
Vue.config.productionTip = false |
||||||
|
|
||||||
|
new Vue({ |
||||||
|
render: h => h(App) |
||||||
|
}).$mount('#app') |
@ -0,0 +1,83 @@ |
|||||||
|
<template> |
||||||
|
<div id="app"> |
||||||
|
<v-loading class="loading" v-if="loading"></v-loading> |
||||||
|
|
||||||
|
<v-row> |
||||||
|
<v-col :span=12> |
||||||
|
最近更新: |
||||||
|
</v-col> |
||||||
|
<v-col :span=12> |
||||||
|
{{updateTime}} |
||||||
|
</v-col> |
||||||
|
</v-row> |
||||||
|
|
||||||
|
<v-row> |
||||||
|
<v-col :span=12> |
||||||
|
<v-button>上传</v-button> |
||||||
|
</v-col> |
||||||
|
<v-col :span=12> |
||||||
|
<v-button>下载</v-button> |
||||||
|
</v-col> |
||||||
|
</v-row> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import vLoading from '@/components/vloading.vue' |
||||||
|
import vRow from '@/components/vrow.vue' |
||||||
|
import vCol from '@/components/vcol.vue' |
||||||
|
import vButton from '@/components/vbutton.vue' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'App', |
||||||
|
components: { |
||||||
|
vLoading, |
||||||
|
vButton, |
||||||
|
vRow, |
||||||
|
vCol |
||||||
|
}, |
||||||
|
data () { |
||||||
|
return { |
||||||
|
loading: false, |
||||||
|
updateTime: new Date() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="less" scoped> |
||||||
|
.loading { |
||||||
|
height: 24px; |
||||||
|
} |
||||||
|
|
||||||
|
.row { |
||||||
|
position: relative; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
|
||||||
|
.col { |
||||||
|
position: relative; |
||||||
|
box-sizing: border-box; |
||||||
|
float: left; |
||||||
|
} |
||||||
|
|
||||||
|
.col-12 { |
||||||
|
width: 100% * 12 * 1 / 24; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
<style lang="less"> |
||||||
|
html,body { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
|
||||||
|
#app { |
||||||
|
font-family: Avenir, Helvetica, Arial, sans-serif; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
-moz-osx-font-smoothing: grayscale; |
||||||
|
text-align: center; |
||||||
|
color: #2c3e50; |
||||||
|
width: 300px; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,10 @@ |
|||||||
|
import Vue from 'vue' |
||||||
|
import 'normalize.css' |
||||||
|
|
||||||
|
import App from './app.vue' |
||||||
|
|
||||||
|
Vue.config.productionTip = false |
||||||
|
|
||||||
|
new Vue({ |
||||||
|
render: h => h(App) |
||||||
|
}).$mount('#app') |
@ -0,0 +1,11 @@ |
|||||||
|
.utils-clearfix-mixin() { |
||||||
|
&::before, |
||||||
|
&::after { |
||||||
|
display: table; |
||||||
|
content: ""; |
||||||
|
} |
||||||
|
|
||||||
|
&::after { |
||||||
|
clear: both; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin') |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
publicPath: '', |
||||||
|
pages: { |
||||||
|
popup: { |
||||||
|
entry: 'src/pages/popup/main.js', |
||||||
|
template: 'public/index.html', |
||||||
|
filename: 'popup.html', |
||||||
|
title: '书签同步助手', |
||||||
|
chunks: ['chunk-vendors', 'chunk-common', 'popup'] // 'chunk-vendors', 'chunk-common' 是公用资源文件
|
||||||
|
}, |
||||||
|
options: { |
||||||
|
entry: 'src/pages/options/main.js', |
||||||
|
template: 'public/index.html', |
||||||
|
filename: 'options.html', |
||||||
|
title: '书签同步助手配置页', |
||||||
|
chunks: ['chunk-vendors', 'chunk-common', 'options'] |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -1,23 +0,0 @@ |
|||||||
{ |
|
||||||
"name": "chrome-extension-syncmarks", |
|
||||||
"version": "1.0.0", |
|
||||||
"description": "A chrome extension to sync bookmarks", |
|
||||||
"main": "index.js", |
|
||||||
"scripts": { |
|
||||||
"test": "echo \"Error: no test specified\" && exit 1" |
|
||||||
}, |
|
||||||
"repository": { |
|
||||||
"type": "git", |
|
||||||
"url": "https://github.com/alvisisme/chrome-extension-syncmarks.git" |
|
||||||
}, |
|
||||||
"author": "", |
|
||||||
"license": "ISC", |
|
||||||
"devDependencies": { |
|
||||||
"eslint": "^7.7.0", |
|
||||||
"eslint-config-standard": "^14.1.1", |
|
||||||
"eslint-plugin-import": "^2.22.0", |
|
||||||
"eslint-plugin-node": "^11.1.0", |
|
||||||
"eslint-plugin-promise": "^4.2.1", |
|
||||||
"eslint-plugin-standard": "^4.0.1" |
|
||||||
} |
|
||||||
} |
|