├── .babelrc ├── .gitignore ├── README.md ├── dist └── vue-json-edit.js ├── example ├── App.vue ├── dist │ ├── index.html │ └── main_2660daf9816ab5cf481c.js ├── index.html └── main.js ├── package-lock.json ├── package.json ├── src ├── ArrayView.vue ├── ItemAddForm.vue ├── JsonEditor.vue ├── JsonView.vue ├── assets │ ├── .DS_Store │ ├── font │ │ ├── demo.css │ │ ├── demo_index.html │ │ ├── fontello.eot │ │ ├── fontello.svg │ │ ├── fontello.ttf │ │ ├── fontello.woff │ │ ├── fontello.woff2 │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.js │ │ ├── iconfont.json │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ └── styles │ │ ├── common.less │ │ ├── fontello.less │ │ └── pure │ │ ├── base-min.css │ │ ├── base-min.less │ │ ├── buttons-min.css │ │ ├── buttons-min.less │ │ ├── forms-min.css │ │ └── forms-min.less └── index.js ├── webpack.base.js ├── webpack.build.js └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0"], 3 | "plugins": [[ 4 | "transform-runtime", 5 | { 6 | "helpers": false, 7 | "polyfill": false, 8 | "regenerator": true, 9 | "moduleName": "babel-runtime" 10 | } 11 | ]] 12 | } 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | node_modules 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue-Json-Edit 2 | 3 | > Visual JSON Editor built as an vue component. Provides a basic GUI 4 | 5 | 6 |
7 | 8 | 9 | ## **[DEMO](http://jinkin1995.github.io/vue-json-edit)** 10 | 11 |
12 | 13 | 14 | ## Getting Started 15 | ``` 16 | npm install vue-json-edit --save 17 | ``` 18 | 19 |
20 | 21 | 22 | ## Usage 23 | 24 | ``` javascript 25 | //import it in your project At your entry point 26 | 27 | import Vue from 'vue' 28 | import JsonEditor from 'vue-json-edit' 29 | 30 | Vue.use(JsonEditor) 31 | ``` 32 | ### Props 33 | 34 | * objData: json data 35 | * options 36 | * confirmText: strings of the confirm button 37 | * cancelText: strings of the cancel button 38 | 39 | 40 |
41 | 42 | ## Example 43 | Single file component 44 | ``` html 45 | 46 | 56 | 71 | ``` 72 | 73 |
74 | 75 | 76 | ## .. 77 | 78 | Aplipay:
79 | 80 | 81 | 82 | USDT:
83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /example/App.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 135 | 136 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /example/dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vue-Json-Edit 6 | 52 | 53 | 54 |
55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vue-Json-Edit 6 | 52 | 53 | 54 |
55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /example/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import JsonEditor from '../src/index.js' 3 | import App from './App.vue' 4 | 5 | Vue.use(JsonEditor) 6 | 7 | 8 | /* eslint-disable no-new */ 9 | new Vue({ 10 | el: '#app', 11 | render: h => (h)(App) 12 | }) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-json-edit", 3 | "version": "1.4.3", 4 | "description": "visual JSON editor built as an vue component", 5 | "author": "Jinkin1995 ", 6 | "keywords": [ 7 | "vue", 8 | "json" 9 | ], 10 | "main": "./src/index.js", 11 | "module": "./dist/vue-json-edit.js", 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/jinkin1995/vue-json-edit.git" 15 | }, 16 | "homepage": "https://github.com/jinkin1995/vue-json-edit", 17 | "bugs": { 18 | "url": "https://github.com/jinkin1995/vue-json-edit/issues" 19 | }, 20 | "license": "Apache 2", 21 | "scripts": { 22 | "dev": "webpack-dev-server --open --config webpack.config.js", 23 | "example": "rm -rf ./example/dist/*.js && rm -rf ./example/dist/*.html && webpack --progress --config webpack.config.js", 24 | "build": "webpack --progress --config webpack.build.js" 25 | }, 26 | "devDependencies": { 27 | "babel-core": "^6.26.3", 28 | "babel-loader": "^7.1.5", 29 | "babel-plugin-transform-runtime": "^6.23.0", 30 | "babel-preset-es2015": "^6.24.1", 31 | "babel-preset-stage-0": "^6.24.1", 32 | "css-loader": "^2.1.0", 33 | "html-webpack-plugin": "^3.2.0", 34 | "less": "^3.9.0", 35 | "less-loader": "^4.1.0", 36 | "resolve-url-loader": "^3.0.1", 37 | "style-loader": "^0.23.1", 38 | "url-loader": "^1.1.2", 39 | "vue-loader": "^15.7.0", 40 | "vue-template-compiler": "^2.6.8", 41 | "webpack": "^4.29.6", 42 | "webpack-cli": "^3.3.11", 43 | "webpack-dev-server": "^3.11.0" 44 | }, 45 | "dependencies": { 46 | "highlight.js": "^9.15.6", 47 | "lodash.clonedeep": "^4.5.0", 48 | "vue": "^2.6.8", 49 | "vuedraggable": "^2.23.2" 50 | }, 51 | "browserslist": [ 52 | "> 1%", 53 | "last 2 versions", 54 | "not ie <= 8" 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /src/ArrayView.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | 170 | -------------------------------------------------------------------------------- /src/ItemAddForm.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 119 | 120 | -------------------------------------------------------------------------------- /src/JsonEditor.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 226 | -------------------------------------------------------------------------------- /src/JsonView.vue: -------------------------------------------------------------------------------- 1 | 83 | 84 | 192 | 193 | -------------------------------------------------------------------------------- /src/assets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/.DS_Store -------------------------------------------------------------------------------- /src/assets/font/demo.css: -------------------------------------------------------------------------------- 1 | /* Logo 字体 */ 2 | @font-face { 3 | font-family: "iconfont logo"; 4 | src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); 5 | src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), 6 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), 7 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), 8 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); 9 | } 10 | 11 | .logo { 12 | font-family: "iconfont logo"; 13 | font-size: 160px; 14 | font-style: normal; 15 | -webkit-font-smoothing: antialiased; 16 | -moz-osx-font-smoothing: grayscale; 17 | } 18 | 19 | /* tabs */ 20 | .nav-tabs { 21 | position: relative; 22 | } 23 | 24 | .nav-tabs .nav-more { 25 | position: absolute; 26 | right: 0; 27 | bottom: 0; 28 | height: 42px; 29 | line-height: 42px; 30 | color: #666; 31 | } 32 | 33 | #tabs { 34 | border-bottom: 1px solid #eee; 35 | } 36 | 37 | #tabs li { 38 | cursor: pointer; 39 | width: 100px; 40 | height: 40px; 41 | line-height: 40px; 42 | text-align: center; 43 | font-size: 16px; 44 | border-bottom: 2px solid transparent; 45 | position: relative; 46 | z-index: 1; 47 | margin-bottom: -1px; 48 | color: #666; 49 | } 50 | 51 | 52 | #tabs .active { 53 | border-bottom-color: #f00; 54 | color: #222; 55 | } 56 | 57 | .tab-container .content { 58 | display: none; 59 | } 60 | 61 | /* 页面布局 */ 62 | .main { 63 | padding: 30px 100px; 64 | width: 960px; 65 | margin: 0 auto; 66 | } 67 | 68 | .main .logo { 69 | color: #333; 70 | text-align: left; 71 | margin-bottom: 30px; 72 | line-height: 1; 73 | height: 110px; 74 | margin-top: -50px; 75 | overflow: hidden; 76 | *zoom: 1; 77 | } 78 | 79 | .main .logo a { 80 | font-size: 160px; 81 | color: #333; 82 | } 83 | 84 | .helps { 85 | margin-top: 40px; 86 | } 87 | 88 | .helps pre { 89 | padding: 20px; 90 | margin: 10px 0; 91 | border: solid 1px #e7e1cd; 92 | background-color: #fffdef; 93 | overflow: auto; 94 | } 95 | 96 | .icon_lists { 97 | width: 100% !important; 98 | overflow: hidden; 99 | *zoom: 1; 100 | } 101 | 102 | .icon_lists li { 103 | width: 100px; 104 | margin-bottom: 10px; 105 | margin-right: 20px; 106 | text-align: center; 107 | list-style: none !important; 108 | cursor: default; 109 | } 110 | 111 | .icon_lists li .code-name { 112 | line-height: 1.2; 113 | } 114 | 115 | .icon_lists .icon { 116 | display: block; 117 | height: 100px; 118 | line-height: 100px; 119 | font-size: 42px; 120 | margin: 10px auto; 121 | color: #333; 122 | -webkit-transition: font-size 0.25s linear, width 0.25s linear; 123 | -moz-transition: font-size 0.25s linear, width 0.25s linear; 124 | transition: font-size 0.25s linear, width 0.25s linear; 125 | } 126 | 127 | .icon_lists .icon:hover { 128 | font-size: 100px; 129 | } 130 | 131 | .icon_lists .svg-icon { 132 | /* 通过设置 font-size 来改变图标大小 */ 133 | width: 1em; 134 | /* 图标和文字相邻时,垂直对齐 */ 135 | vertical-align: -0.15em; 136 | /* 通过设置 color 来改变 SVG 的颜色/fill */ 137 | fill: currentColor; 138 | /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 139 | normalize.css 中也包含这行 */ 140 | overflow: hidden; 141 | } 142 | 143 | .icon_lists li .name, 144 | .icon_lists li .code-name { 145 | color: #666; 146 | } 147 | 148 | /* markdown 样式 */ 149 | .markdown { 150 | color: #666; 151 | font-size: 14px; 152 | line-height: 1.8; 153 | } 154 | 155 | .highlight { 156 | line-height: 1.5; 157 | } 158 | 159 | .markdown img { 160 | vertical-align: middle; 161 | max-width: 100%; 162 | } 163 | 164 | .markdown h1 { 165 | color: #404040; 166 | font-weight: 500; 167 | line-height: 40px; 168 | margin-bottom: 24px; 169 | } 170 | 171 | .markdown h2, 172 | .markdown h3, 173 | .markdown h4, 174 | .markdown h5, 175 | .markdown h6 { 176 | color: #404040; 177 | margin: 1.6em 0 0.6em 0; 178 | font-weight: 500; 179 | clear: both; 180 | } 181 | 182 | .markdown h1 { 183 | font-size: 28px; 184 | } 185 | 186 | .markdown h2 { 187 | font-size: 22px; 188 | } 189 | 190 | .markdown h3 { 191 | font-size: 16px; 192 | } 193 | 194 | .markdown h4 { 195 | font-size: 14px; 196 | } 197 | 198 | .markdown h5 { 199 | font-size: 12px; 200 | } 201 | 202 | .markdown h6 { 203 | font-size: 12px; 204 | } 205 | 206 | .markdown hr { 207 | height: 1px; 208 | border: 0; 209 | background: #e9e9e9; 210 | margin: 16px 0; 211 | clear: both; 212 | } 213 | 214 | .markdown p { 215 | margin: 1em 0; 216 | } 217 | 218 | .markdown>p, 219 | .markdown>blockquote, 220 | .markdown>.highlight, 221 | .markdown>ol, 222 | .markdown>ul { 223 | width: 80%; 224 | } 225 | 226 | .markdown ul>li { 227 | list-style: circle; 228 | } 229 | 230 | .markdown>ul li, 231 | .markdown blockquote ul>li { 232 | margin-left: 20px; 233 | padding-left: 4px; 234 | } 235 | 236 | .markdown>ul li p, 237 | .markdown>ol li p { 238 | margin: 0.6em 0; 239 | } 240 | 241 | .markdown ol>li { 242 | list-style: decimal; 243 | } 244 | 245 | .markdown>ol li, 246 | .markdown blockquote ol>li { 247 | margin-left: 20px; 248 | padding-left: 4px; 249 | } 250 | 251 | .markdown code { 252 | margin: 0 3px; 253 | padding: 0 5px; 254 | background: #eee; 255 | border-radius: 3px; 256 | } 257 | 258 | .markdown strong, 259 | .markdown b { 260 | font-weight: 600; 261 | } 262 | 263 | .markdown>table { 264 | border-collapse: collapse; 265 | border-spacing: 0px; 266 | empty-cells: show; 267 | border: 1px solid #e9e9e9; 268 | width: 95%; 269 | margin-bottom: 24px; 270 | } 271 | 272 | .markdown>table th { 273 | white-space: nowrap; 274 | color: #333; 275 | font-weight: 600; 276 | } 277 | 278 | .markdown>table th, 279 | .markdown>table td { 280 | border: 1px solid #e9e9e9; 281 | padding: 8px 16px; 282 | text-align: left; 283 | } 284 | 285 | .markdown>table th { 286 | background: #F7F7F7; 287 | } 288 | 289 | .markdown blockquote { 290 | font-size: 90%; 291 | color: #999; 292 | border-left: 4px solid #e9e9e9; 293 | padding-left: 0.8em; 294 | margin: 1em 0; 295 | } 296 | 297 | .markdown blockquote p { 298 | margin: 0; 299 | } 300 | 301 | .markdown .anchor { 302 | opacity: 0; 303 | transition: opacity 0.3s ease; 304 | margin-left: 8px; 305 | } 306 | 307 | .markdown .waiting { 308 | color: #ccc; 309 | } 310 | 311 | .markdown h1:hover .anchor, 312 | .markdown h2:hover .anchor, 313 | .markdown h3:hover .anchor, 314 | .markdown h4:hover .anchor, 315 | .markdown h5:hover .anchor, 316 | .markdown h6:hover .anchor { 317 | opacity: 1; 318 | display: inline-block; 319 | } 320 | 321 | .markdown>br, 322 | .markdown>p>br { 323 | clear: both; 324 | } 325 | 326 | 327 | .hljs { 328 | display: block; 329 | background: white; 330 | padding: 0.5em; 331 | color: #333333; 332 | overflow-x: auto; 333 | } 334 | 335 | .hljs-comment, 336 | .hljs-meta { 337 | color: #969896; 338 | } 339 | 340 | .hljs-string, 341 | .hljs-variable, 342 | .hljs-template-variable, 343 | .hljs-strong, 344 | .hljs-emphasis, 345 | .hljs-quote { 346 | color: #df5000; 347 | } 348 | 349 | .hljs-keyword, 350 | .hljs-selector-tag, 351 | .hljs-type { 352 | color: #a71d5d; 353 | } 354 | 355 | .hljs-literal, 356 | .hljs-symbol, 357 | .hljs-bullet, 358 | .hljs-attribute { 359 | color: #0086b3; 360 | } 361 | 362 | .hljs-section, 363 | .hljs-name { 364 | color: #63a35c; 365 | } 366 | 367 | .hljs-tag { 368 | color: #333333; 369 | } 370 | 371 | .hljs-title, 372 | .hljs-attr, 373 | .hljs-selector-id, 374 | .hljs-selector-class, 375 | .hljs-selector-attr, 376 | .hljs-selector-pseudo { 377 | color: #795da3; 378 | } 379 | 380 | .hljs-addition { 381 | color: #55a532; 382 | background-color: #eaffea; 383 | } 384 | 385 | .hljs-deletion { 386 | color: #bd2c00; 387 | background-color: #ffecec; 388 | } 389 | 390 | .hljs-link { 391 | text-decoration: underline; 392 | } 393 | 394 | /* 代码高亮 */ 395 | /* PrismJS 1.15.0 396 | https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ 397 | /** 398 | * prism.js default theme for JavaScript, CSS and HTML 399 | * Based on dabblet (http://dabblet.com) 400 | * @author Lea Verou 401 | */ 402 | code[class*="language-"], 403 | pre[class*="language-"] { 404 | color: black; 405 | background: none; 406 | text-shadow: 0 1px white; 407 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 408 | text-align: left; 409 | white-space: pre; 410 | word-spacing: normal; 411 | word-break: normal; 412 | word-wrap: normal; 413 | line-height: 1.5; 414 | 415 | -moz-tab-size: 4; 416 | -o-tab-size: 4; 417 | tab-size: 4; 418 | 419 | -webkit-hyphens: none; 420 | -moz-hyphens: none; 421 | -ms-hyphens: none; 422 | hyphens: none; 423 | } 424 | 425 | pre[class*="language-"]::-moz-selection, 426 | pre[class*="language-"] ::-moz-selection, 427 | code[class*="language-"]::-moz-selection, 428 | code[class*="language-"] ::-moz-selection { 429 | text-shadow: none; 430 | background: #b3d4fc; 431 | } 432 | 433 | pre[class*="language-"]::selection, 434 | pre[class*="language-"] ::selection, 435 | code[class*="language-"]::selection, 436 | code[class*="language-"] ::selection { 437 | text-shadow: none; 438 | background: #b3d4fc; 439 | } 440 | 441 | @media print { 442 | 443 | code[class*="language-"], 444 | pre[class*="language-"] { 445 | text-shadow: none; 446 | } 447 | } 448 | 449 | /* Code blocks */ 450 | pre[class*="language-"] { 451 | padding: 1em; 452 | margin: .5em 0; 453 | overflow: auto; 454 | } 455 | 456 | :not(pre)>code[class*="language-"], 457 | pre[class*="language-"] { 458 | background: #f5f2f0; 459 | } 460 | 461 | /* Inline code */ 462 | :not(pre)>code[class*="language-"] { 463 | padding: .1em; 464 | border-radius: .3em; 465 | white-space: normal; 466 | } 467 | 468 | .token.comment, 469 | .token.prolog, 470 | .token.doctype, 471 | .token.cdata { 472 | color: slategray; 473 | } 474 | 475 | .token.punctuation { 476 | color: #999; 477 | } 478 | 479 | .namespace { 480 | opacity: .7; 481 | } 482 | 483 | .token.property, 484 | .token.tag, 485 | .token.boolean, 486 | .token.number, 487 | .token.constant, 488 | .token.symbol, 489 | .token.deleted { 490 | color: #905; 491 | } 492 | 493 | .token.selector, 494 | .token.attr-name, 495 | .token.string, 496 | .token.char, 497 | .token.builtin, 498 | .token.inserted { 499 | color: #690; 500 | } 501 | 502 | .token.operator, 503 | .token.entity, 504 | .token.url, 505 | .language-css .token.string, 506 | .style .token.string { 507 | color: #9a6e3a; 508 | background: hsla(0, 0%, 100%, .5); 509 | } 510 | 511 | .token.atrule, 512 | .token.attr-value, 513 | .token.keyword { 514 | color: #07a; 515 | } 516 | 517 | .token.function, 518 | .token.class-name { 519 | color: #DD4A68; 520 | } 521 | 522 | .token.regex, 523 | .token.important, 524 | .token.variable { 525 | color: #e90; 526 | } 527 | 528 | .token.important, 529 | .token.bold { 530 | font-weight: bold; 531 | } 532 | 533 | .token.italic { 534 | font-style: italic; 535 | } 536 | 537 | .token.entity { 538 | cursor: help; 539 | } 540 | -------------------------------------------------------------------------------- /src/assets/font/demo_index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IconFont Demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |

19 | 27 |
28 |
29 |
    30 | 31 |
  • 32 | 33 |
    drag
    34 |
    &#xe603;
    35 |
  • 36 | 37 |
  • 38 | 39 |
    add_square_outlined
    40 |
    &#xe925;
    41 |
  • 42 | 43 |
  • 44 | 45 |
    窗口
    46 |
    &#xe664;
    47 |
  • 48 | 49 |
  • 50 | 51 |
    arrow_drop_down
    52 |
    &#xe62b;
    53 |
  • 54 | 55 |
  • 56 | 57 |
    搜索
    58 |
    &#xe614;
    59 |
  • 60 | 61 |
  • 62 | 63 |
    回收站
    64 |
    &#xe615;
    65 |
  • 66 | 67 |
68 |
69 |

Unicode 引用

70 |
71 | 72 |

Unicode 是字体在网页端最原始的应用方式,特点是:

73 |
    74 |
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • 75 |
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • 76 |
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • 77 |
78 |
79 |

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

80 |
81 |

Unicode 使用步骤如下:

82 |

第一步:拷贝项目下面生成的 @font-face

83 |
@font-face {
 85 |   font-family: 'iconfont';
 86 |   src: url('iconfont.eot');
 87 |   src: url('iconfont.eot?#iefix') format('embedded-opentype'),
 88 |       url('iconfont.woff2') format('woff2'),
 89 |       url('iconfont.woff') format('woff'),
 90 |       url('iconfont.ttf') format('truetype'),
 91 |       url('iconfont.svg#iconfont') format('svg');
 92 | }
 93 | 
94 |

第二步:定义使用 iconfont 的样式

95 |
.iconfont {
 97 |   font-family: "iconfont" !important;
 98 |   font-size: 16px;
 99 |   font-style: normal;
100 |   -webkit-font-smoothing: antialiased;
101 |   -moz-osx-font-smoothing: grayscale;
102 | }
103 | 
104 |

第三步:挑选相应图标并获取字体编码,应用于页面

105 |
106 | <span class="iconfont">&#x33;</span>
108 | 
109 |
110 |

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

111 |
112 |
113 |
114 |
115 |
    116 | 117 |
  • 118 | 119 |
    120 | drag 121 |
    122 |
    .icon-drag 123 |
    124 |
  • 125 | 126 |
  • 127 | 128 |
    129 | add_square_outlined 130 |
    131 |
    .icon-add_square_outlined 132 |
    133 |
  • 134 | 135 |
  • 136 | 137 |
    138 | 窗口 139 |
    140 |
    .icon-chuangkou 141 |
    142 |
  • 143 | 144 |
  • 145 | 146 |
    147 | arrow_drop_down 148 |
    149 |
    .icon-arrow_drop_down 150 |
    151 |
  • 152 | 153 |
  • 154 | 155 |
    156 | 搜索 157 |
    158 |
    .icon-sousuo_huaban 159 |
    160 |
  • 161 | 162 |
  • 163 | 164 |
    165 | 回收站 166 |
    167 |
    .icon-huishouzhan_huaban 168 |
    169 |
  • 170 | 171 |
172 |
173 |

font-class 引用

174 |
175 | 176 |

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

177 |

与 Unicode 使用方式相比,具有如下特点:

178 |
    179 |
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • 180 |
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • 181 |
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • 182 |
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • 183 |
184 |

使用步骤如下:

185 |

第一步:引入项目下面生成的 fontclass 代码:

186 |
<link rel="stylesheet" href="./iconfont.css">
187 | 
188 |

第二步:挑选相应图标并获取类名,应用于页面:

189 |
<span class="iconfont icon-xxx"></span>
190 | 
191 |
192 |

" 193 | iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

194 |
195 |
196 |
197 |
198 |
    199 | 200 |
  • 201 | 204 |
    drag
    205 |
    #icon-drag
    206 |
  • 207 | 208 |
  • 209 | 212 |
    add_square_outlined
    213 |
    #icon-add_square_outlined
    214 |
  • 215 | 216 |
  • 217 | 220 |
    窗口
    221 |
    #icon-chuangkou
    222 |
  • 223 | 224 |
  • 225 | 228 |
    arrow_drop_down
    229 |
    #icon-arrow_drop_down
    230 |
  • 231 | 232 |
  • 233 | 236 |
    搜索
    237 |
    #icon-sousuo_huaban
    238 |
  • 239 | 240 |
  • 241 | 244 |
    回收站
    245 |
    #icon-huishouzhan_huaban
    246 |
  • 247 | 248 |
249 |
250 |

Symbol 引用

251 |
252 | 253 |

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 254 | 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

255 |
    256 |
  • 支持多色图标了,不再受单色限制。
  • 257 |
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • 258 |
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • 259 |
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • 260 |
261 |

使用步骤如下:

262 |

第一步:引入项目下面生成的 symbol 代码:

263 |
<script src="./iconfont.js"></script>
264 | 
265 |

第二步:加入通用 CSS 代码(引入一次就行):

266 |
<style>
267 | .icon {
268 |   width: 1em;
269 |   height: 1em;
270 |   vertical-align: -0.15em;
271 |   fill: currentColor;
272 |   overflow: hidden;
273 | }
274 | </style>
275 | 
276 |

第三步:挑选相应图标并获取类名,应用于页面:

277 |
<svg class="icon" aria-hidden="true">
278 |   <use xlink:href="#icon-xxx"></use>
279 | </svg>
280 | 
281 |
282 |
283 | 284 |
285 |
286 | 305 | 306 | 307 | -------------------------------------------------------------------------------- /src/assets/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/fontello.eot -------------------------------------------------------------------------------- /src/assets/font/fontello.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Copyright (C) 2017 by original authors @ fontello.com 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/fontello.ttf -------------------------------------------------------------------------------- /src/assets/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/fontello.woff -------------------------------------------------------------------------------- /src/assets/font/fontello.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/fontello.woff2 -------------------------------------------------------------------------------- /src/assets/font/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('iconfont.eot?t=1578908417703'); /* IE9 */ 3 | src: url('iconfont.eot?t=1578908417703#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAATkAAsAAAAACpQAAASWAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDVgqHRIYoATYCJAMcCxAABCAFhG0HgQcbHwnIHpIkSEABBQooMA8ucTz8t9//9pmZK1/UEO8e1SqLZJrwDlVLYnVKJ4slQno//57vuUmZPCOPGuhmc3mTOl0wsN3cTtan3M6fgPNv/P/gWPKX/1vl2duDvGJGLbJ5NBxQVFGU8AaSwjaF2NUu6JHAiwl0m1cJHevUYwDoFMpWgbjp4M2gC5mUHFxotXXKgQXiHai1aTZxFcBb+/PjH9QLHUiqDMqOp290tEGbn+TLItL/32+YaYFAew5wh5GxAyjEs1TXU6Sb2oHU/bmNynGgVyspP8lnyc8qntleFv2fEE+STHGEXhXV/w8eoVIrskTUAFUvjbmcrvlJ6gbxUSfBoII6GaJ8dQUMCtQ2cMj8KWokgcY8oB/zIHYDxCNQNAds1yByf5dIqtCrf3+cqjAuPotMiYmOYjQqF7VyZ2h3YFdwh8EdiaFl7js+JngTVJ/PNowN3UHqwO1hMepYGw0vltJ0aDlCBimwjKJIwSUAD/NiqSEcZslIZGD0vXsG4u7dAc4jN7OItbcaRh+/g8jA7UZRUlTK7kDH+juNo4/eyibW3GxAQU/p05PhMB89aDwbeciG5wy4O8Vw6x4divQ2LB3MSt5wYOD5SOhey3v+1MIgH9wBxItBClqz7TK4OwR3WCm06lwxteVMGlChhH8nTasMRWyWUU1PqdBSYAA/NXwaJXuVeqrT5ep0ak94M3Q3XG5dqPcF2JX4Apb8X2vzdXv+Llapd97gdOqv6svRRedUsGdsB2QcgrquRB2HjOiKNnRAI0I7b4AO10Z0QetXmuI1GzTxpg02vmRbaVx8a48NXVDye0DHqU7p2jjTSh9o32uQr7h//a5oyAjUYQPqahwCmf8vlgWN7zaaNYt1UVoTdnEZGpZzZdSp56/foaVYqpPqrkyvn+7e3n/QM+B32st8qp3+CoP6P4P1/2PiYxhdlWXaFuZ6fGyce/BCK7rDgTMHOtCtLiQp2hQU6aLMA6+h7LOoBUFsNAIDnlHuld4QOwA6Zz8JdORf2QNA+o4+pSEDBvI0eS/t11g8q55ojG3xVUerAL61G4bsUEeB+pr2VimjpvAVFZfsU75SxdwUuXN9U4HGaXHgpiq61TG8mr5hT9vTjJVOENqQmIOkMQdZaxVRMDug0uMA1FoHodt2nQ/vMUJEiqIHtplOQRi0H5J+XyEbdA1RME+gMu4t1AaDhG4XI/GEPdbDQbUXsVnGNsYylnFYBS+nWWXKqe6HecVtFoNSm85iUXJEmbrq2mi2M/ZisY1dpFF8PVnmGE4UPEwn6nLY7RYYnyg4sVWutsuyr1lNDZf2RNVWwQOUo0SYmQyzYViMxXCwEnhx5sIyKvbx/WA8hZuZmNPhh5uFiSSO5TPqVKstgeis8pbqcCz1JaPw6pFJgsPguEqBB6MTcWBuNSVg+NLXc8KsZNXsNRI+zdSQgbiyqur+NZ7jvAi6Ke/cBIFIpEJqpEFapINyXTTziWabzSiNVMwiNgqK7HZ4sU1vtStmL+8SlFizKAqjjTZR8Bl8p743WhIUSRGMeX6L2ZtgNXdIdkEZZzd7o0YAAA==') format('woff2'), 5 | url('iconfont.woff?t=1578908417703') format('woff'), 6 | url('iconfont.ttf?t=1578908417703') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 7 | url('iconfont.svg?t=1578908417703#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family: "iconfont" !important; 12 | font-size: 16px; 13 | font-style: normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-drag:before { 19 | content: "\e603"; 20 | } 21 | 22 | .icon-add_square_outlined:before { 23 | content: "\e925"; 24 | } 25 | 26 | .icon-chuangkou:before { 27 | content: "\e664"; 28 | } 29 | 30 | .icon-arrow_drop_down:before { 31 | content: "\e62b"; 32 | } 33 | 34 | .icon-sousuo_huaban:before { 35 | content: "\e614"; 36 | } 37 | 38 | .icon-huishouzhan_huaban:before { 39 | content: "\e615"; 40 | } 41 | 42 | -------------------------------------------------------------------------------- /src/assets/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/iconfont.eot -------------------------------------------------------------------------------- /src/assets/font/iconfont.js: -------------------------------------------------------------------------------- 1 | !function(l){var t,i='',e=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(e&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(t,0);else{var e=function(){document.removeEventListener("DOMContentLoaded",e,!1),t()};document.addEventListener("DOMContentLoaded",e,!1)}else document.attachEvent&&(o=t,n=l.document,c=!1,(i=function(){try{n.documentElement.doScroll("left")}catch(t){return void setTimeout(i,50)}a()})(),n.onreadystatechange=function(){"complete"==n.readyState&&(n.onreadystatechange=null,a())});function a(){c||(c=!0,o())}var o,n,c,i}(function(){var t,e,a,o,n,c;(t=document.createElement("div")).innerHTML=i,i=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",a=e,(o=document.body).firstChild?(n=a,(c=o.firstChild).parentNode.insertBefore(n,c)):o.appendChild(a))})}(window); -------------------------------------------------------------------------------- /src/assets/font/iconfont.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "", 3 | "name": "", 4 | "font_family": "iconfont", 5 | "css_prefix_text": "icon-", 6 | "description": "", 7 | "glyphs": [ 8 | { 9 | "icon_id": "5397020", 10 | "name": "drag", 11 | "font_class": "drag", 12 | "unicode": "e603", 13 | "unicode_decimal": 58883 14 | }, 15 | { 16 | "icon_id": "11981168", 17 | "name": "add_square_outlined", 18 | "font_class": "add_square_outlined", 19 | "unicode": "e925", 20 | "unicode_decimal": 59685 21 | }, 22 | { 23 | "icon_id": "12331647", 24 | "name": "窗口", 25 | "font_class": "chuangkou", 26 | "unicode": "e664", 27 | "unicode_decimal": 58980 28 | }, 29 | { 30 | "icon_id": "12590280", 31 | "name": "arrow_drop_down", 32 | "font_class": "arrow_drop_down", 33 | "unicode": "e62b", 34 | "unicode_decimal": 58923 35 | }, 36 | { 37 | "icon_id": "12752068", 38 | "name": "搜索", 39 | "font_class": "sousuo_huaban", 40 | "unicode": "e614", 41 | "unicode_decimal": 58900 42 | }, 43 | { 44 | "icon_id": "12752070", 45 | "name": "回收站", 46 | "font_class": "huishouzhan_huaban", 47 | "unicode": "e615", 48 | "unicode_decimal": 58901 49 | } 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /src/assets/font/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/assets/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/iconfont.woff -------------------------------------------------------------------------------- /src/assets/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinkin1995/vue-json-edit/a0ecb7a2cf91fea75ee64a27653b9db1a792e6e0/src/assets/font/iconfont.woff2 -------------------------------------------------------------------------------- /src/assets/styles/common.less: -------------------------------------------------------------------------------- 1 | @import "./pure/base-min.less"; 2 | @import "./pure/buttons-min.less"; 3 | @import "./pure/forms-min.less"; 4 | @import "./fontello.less"; 5 | 6 | .json-view-main::v-deep { 7 | p { 8 | margin: 0; 9 | } 10 | 11 | ol, ul { 12 | margin: 0; 13 | } 14 | 15 | .block{ 16 | position: relative; 17 | display: block; 18 | line-height: 30px; 19 | } 20 | 21 | .block.hide-block { 22 | background: #f5f5f5; 23 | 24 | .json-val { 25 | display: none; 26 | } 27 | 28 | .collapse-down { 29 | transform: rotate(-90deg); 30 | } 31 | } 32 | 33 | .tools { 34 | position: absolute; 35 | right: 0; 36 | top: 0; 37 | height: 30px; 38 | } 39 | 40 | .tools-types { 41 | position: relative; 42 | right: 20px; 43 | } 44 | 45 | .del-btn { 46 | cursor: pointer; 47 | transition: opacity .4s ease; 48 | 49 | &:hover { 50 | opacity: .6; 51 | } 52 | } 53 | 54 | .dragbar { 55 | position: absolute; 56 | top: 0; 57 | right: 20px; 58 | bottom: 0; 59 | width: 5px; 60 | font-size: 18px; 61 | margin-right: 15px; 62 | cursor: pointer; 63 | } 64 | 65 | .des { 66 | position: absolute; 67 | right: 14px; 68 | font-size: 10px; 69 | line-height: 30px; 70 | color: #6190e8; 71 | cursor: pointer; 72 | } 73 | 74 | .add-des { 75 | color: #999; 76 | } 77 | 78 | .block_content { 79 | text-align: left; 80 | margin-left: 20px; 81 | line-height: 1.5 !important; 82 | 83 | .i-type { 84 | color: #999; 85 | } 86 | 87 | .key-input, 88 | .val-input { 89 | width: 140px; 90 | border: none; 91 | height: 25px; 92 | padding: 0 5px; 93 | font-weight: bold; 94 | font-size: 14px; 95 | background: rgba(0,0,0,0); 96 | 97 | &:focus { 98 | background: #ffffa0; 99 | border: none; 100 | outline: 0; 101 | } 102 | } 103 | 104 | .val-input { 105 | font-weight: normal; 106 | color: #0b8e6b; 107 | } 108 | } 109 | 110 | .block_content .json-key { 111 | font-weight: bold; 112 | 113 | &.json-desc { 114 | color: #999; 115 | font-size: .8em; 116 | } 117 | } 118 | 119 | 120 | .collopsed:before { 121 | content: ''; 122 | display: inline-block; 123 | height: 10px; 124 | width: 10px; 125 | background: #333; 126 | } 127 | 128 | .collapse-down { 129 | float: left; 130 | color: #000; 131 | cursor: pointer; 132 | transition: transform .2s ease; 133 | } 134 | 135 | .add-key { 136 | display: inline-block; 137 | padding-left: 2px; 138 | padding-right: 2px; 139 | margin-bottom: 10px; 140 | font-size: .8em; 141 | line-height: 1em; 142 | cursor: pointer; 143 | } 144 | 145 | 146 | .array-ol { 147 | padding-left: 20px !important; 148 | } 149 | 150 | .array-item { 151 | position: relative; 152 | 153 | &.hide-item { 154 | background: #f5f5f5; 155 | 156 | .json-val { 157 | display: none; 158 | } 159 | 160 | .collapse-down { 161 | transform: rotate(-90deg); 162 | transition: transform .4s ease; 163 | } 164 | } 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /src/assets/styles/fontello.less: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('../font/iconfont.eot?t=1578908417703'); /* IE9 */ 3 | src: url('../font/iconfont.eot?t=1578908417703#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAATkAAsAAAAACpQAAASWAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDVgqHRIYoATYCJAMcCxAABCAFhG0HgQcbHwnIHpIkSEABBQooMA8ucTz8t9//9pmZK1/UEO8e1SqLZJrwDlVLYnVKJ4slQno//57vuUmZPCOPGuhmc3mTOl0wsN3cTtan3M6fgPNv/P/gWPKX/1vl2duDvGJGLbJ5NBxQVFGU8AaSwjaF2NUu6JHAiwl0m1cJHevUYwDoFMpWgbjp4M2gC5mUHFxotXXKgQXiHai1aTZxFcBb+/PjH9QLHUiqDMqOp290tEGbn+TLItL/32+YaYFAew5wh5GxAyjEs1TXU6Sb2oHU/bmNynGgVyspP8lnyc8qntleFv2fEE+STHGEXhXV/w8eoVIrskTUAFUvjbmcrvlJ6gbxUSfBoII6GaJ8dQUMCtQ2cMj8KWokgcY8oB/zIHYDxCNQNAds1yByf5dIqtCrf3+cqjAuPotMiYmOYjQqF7VyZ2h3YFdwh8EdiaFl7js+JngTVJ/PNowN3UHqwO1hMepYGw0vltJ0aDlCBimwjKJIwSUAD/NiqSEcZslIZGD0vXsG4u7dAc4jN7OItbcaRh+/g8jA7UZRUlTK7kDH+juNo4/eyibW3GxAQU/p05PhMB89aDwbeciG5wy4O8Vw6x4divQ2LB3MSt5wYOD5SOhey3v+1MIgH9wBxItBClqz7TK4OwR3WCm06lwxteVMGlChhH8nTasMRWyWUU1PqdBSYAA/NXwaJXuVeqrT5ep0ak94M3Q3XG5dqPcF2JX4Apb8X2vzdXv+Llapd97gdOqv6svRRedUsGdsB2QcgrquRB2HjOiKNnRAI0I7b4AO10Z0QetXmuI1GzTxpg02vmRbaVx8a48NXVDye0DHqU7p2jjTSh9o32uQr7h//a5oyAjUYQPqahwCmf8vlgWN7zaaNYt1UVoTdnEZGpZzZdSp56/foaVYqpPqrkyvn+7e3n/QM+B32st8qp3+CoP6P4P1/2PiYxhdlWXaFuZ6fGyce/BCK7rDgTMHOtCtLiQp2hQU6aLMA6+h7LOoBUFsNAIDnlHuld4QOwA6Zz8JdORf2QNA+o4+pSEDBvI0eS/t11g8q55ojG3xVUerAL61G4bsUEeB+pr2VimjpvAVFZfsU75SxdwUuXN9U4HGaXHgpiq61TG8mr5hT9vTjJVOENqQmIOkMQdZaxVRMDug0uMA1FoHodt2nQ/vMUJEiqIHtplOQRi0H5J+XyEbdA1RME+gMu4t1AaDhG4XI/GEPdbDQbUXsVnGNsYylnFYBS+nWWXKqe6HecVtFoNSm85iUXJEmbrq2mi2M/ZisY1dpFF8PVnmGE4UPEwn6nLY7RYYnyg4sVWutsuyr1lNDZf2RNVWwQOUo0SYmQyzYViMxXCwEnhx5sIyKvbx/WA8hZuZmNPhh5uFiSSO5TPqVKstgeis8pbqcCz1JaPw6pFJgsPguEqBB6MTcWBuNSVg+NLXc8KsZNXsNRI+zdSQgbiyqur+NZ7jvAi6Ke/cBIFIpEJqpEFapINyXTTziWabzSiNVMwiNgqK7HZ4sU1vtStmL+8SlFizKAqjjTZR8Bl8p743WhIUSRGMeX6L2ZtgNXdIdkEZZzd7o0YAAA==') format('woff2'), 5 | url('../font/iconfont.woff?t=1578908417703') format('woff'), 6 | url('../font/iconfont.ttf?t=1578908417703') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 7 | url('../font/iconfont.svg?t=1578908417703#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | [class^="v-json-edit-icon-"]:before, 11 | [class*=" v-json-edit-icon-"]:before { 12 | font-family: "iconfont" !important; 13 | font-style: normal; 14 | font-weight: normal; 15 | speak: none; 16 | 17 | display: inline-block; 18 | text-decoration: inherit; 19 | width: 1em; 20 | margin-right: .2em; 21 | text-align: center; 22 | /* opacity: .8; */ 23 | 24 | /* For safety - reset parent styles, that can break glyph codes*/ 25 | font-variant: normal; 26 | text-transform: none; 27 | 28 | /* fix buttons height, for twitter bootstrap */ 29 | line-height: 1em; 30 | 31 | /* Animation center compensation - margins should be symmetric */ 32 | /* remove if not needed */ 33 | margin-left: .2em; 34 | 35 | /* you can be more comfortable with increased icons size */ 36 | /* font-size: 120%; */ 37 | 38 | /* Font smoothing. That was taken from TWBS */ 39 | -webkit-font-smoothing: antialiased; 40 | -moz-osx-font-smoothing: grayscale; 41 | 42 | /* Uncomment for 3D effect */ 43 | /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ 44 | } 45 | 46 | .iconfont { 47 | font-family: "iconfont" !important; 48 | font-size: 16px; 49 | font-style: normal; 50 | -webkit-font-smoothing: antialiased; 51 | -moz-osx-font-smoothing: grayscale; 52 | } 53 | 54 | .v-json-edit-icon-drag:before { 55 | content: "\e603"; 56 | } 57 | 58 | .v-json-edit-icon-add:before { 59 | content: "\e925"; 60 | } 61 | 62 | .v-json-edit-icon-copy:before { 63 | content: "\e664"; 64 | } 65 | 66 | .v-json-edit-icon-arrow_drop_down:before { 67 | content: "\e62b"; 68 | } 69 | 70 | .v-json-edit-icon-sousuo_huaban:before { 71 | content: "\e614"; 72 | } 73 | 74 | .v-json-edit-icon-huishouzhan_huaban:before { 75 | content: "\e615"; 76 | } 77 | 78 | -------------------------------------------------------------------------------- /src/assets/styles/pure/base-min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v1.0.0 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/yahoo/pure/blob/master/LICENSE.md 6 | */ 7 | /*! 8 | normalize.css v^3.0 | MIT License | git.io/normalize 9 | Copyright (c) Nicolas Gallagher and Jonathan Neal 10 | */ 11 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */img,legend{border:0}legend,td,th{padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-collapse:collapse;border-spacing:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block} -------------------------------------------------------------------------------- /src/assets/styles/pure/base-min.less: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v1.0.0 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/yahoo/pure/blob/master/LICENSE.md 6 | */ 7 | /*! 8 | normalize.css v^3.0 | MIT License | git.io/normalize 9 | Copyright (c) Nicolas Gallagher and Jonathan Neal 10 | */ 11 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */img,legend{border:0}legend,td,th{padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-collapse:collapse;border-spacing:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block} -------------------------------------------------------------------------------- /src/assets/styles/pure/buttons-min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v1.0.0 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/yahoo/pure/blob/master/LICENSE.md 6 | */ 7 | .pure-button{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);border:1px solid #999;border:transparent;background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{filter:alpha(opacity=90);background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000\9}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;margin:0;border-radius:0;border-right:1px solid #111;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none} -------------------------------------------------------------------------------- /src/assets/styles/pure/buttons-min.less: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v1.0.0 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/yahoo/pure/blob/master/LICENSE.md 6 | */ 7 | .pure-button{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);border:1px solid #999;border:transparent;background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{filter:alpha(opacity=90);background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000\9}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;margin:0;border-radius:0;border-right:1px solid #111;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none} -------------------------------------------------------------------------------- /src/assets/styles/pure/forms-min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v1.0.0 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/yahoo/pure/blob/master/LICENSE.md 6 | */ 7 | .pure-form input[type=text],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input:not([type]):focus,.pure-form input[type=text]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:#129FEA auto 1px}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input:not([type])[disabled],.pure-form input[type=text][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input:not([type]),.pure-form-stacked input[type=text],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked input[type=file],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned .pure-help-inline,.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=text],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=text],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}} -------------------------------------------------------------------------------- /src/assets/styles/pure/forms-min.less: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v1.0.0 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/yahoo/pure/blob/master/LICENSE.md 6 | */ 7 | .pure-form input[type=text],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input:not([type]):focus,.pure-form input[type=text]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:#129FEA auto 1px}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input:not([type])[disabled],.pure-form input[type=text][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input:not([type]),.pure-form-stacked input[type=text],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked input[type=file],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned .pure-help-inline,.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=text],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=text],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}} -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import JsonEditor from './JsonEditor.vue' 2 | import JsonView from './JsonView.vue' 3 | import ArrayView from './ArrayView.vue' 4 | import draggable from 'vuedraggable' 5 | import PackageFile from '../package.json' 6 | 7 | const VERSION = PackageFile.version 8 | 9 | const install = (Vue) => { 10 | if (install.installed) return 11 | 12 | Vue.component('draggable', draggable) 13 | Vue.component('JsonEditor', JsonEditor) 14 | Vue.component('json-view', JsonView) 15 | Vue.component('array-view', ArrayView) 16 | 17 | } 18 | 19 | export default install 20 | 21 | export const components = { 22 | JsonEditor, 23 | VERSION 24 | } -------------------------------------------------------------------------------- /webpack.base.js: -------------------------------------------------------------------------------- 1 | const VueLoaderPlugin = require('vue-loader/lib/plugin'); 2 | 3 | const config = {}; 4 | 5 | config.module = { 6 | rules: [{ 7 | test: /\.vue$/, 8 | loader: 'vue-loader', 9 | }, 10 | { 11 | test: /\.js$/, 12 | loader: 'babel-loader', 13 | exclude: file => ( 14 | /node_modules/.test(file) && 15 | !/\.vue\.js/.test(file) 16 | ), 17 | query: { 18 | presets: ['es2015', 'stage-0'] 19 | } 20 | }, 21 | { 22 | test: /\.css$/, 23 | use: [ 24 | 'vue-style-loader', 25 | 'css-loader' 26 | ] 27 | }, 28 | { 29 | test: /\.less$/, 30 | use: [{ 31 | loader: "style-loader" // 将 JS 字符串生成为 style 节点 32 | }, { 33 | loader: "css-loader" // 将 CSS 转化成 CommonJS 模块 34 | }, { 35 | loader: "less-loader" 36 | }] 37 | }, 38 | { 39 | test: /\.(png|jpg|gif|webp)$/, 40 | loader: 'file-loader', 41 | options: { 42 | name: '[name].[ext]?[hash]', 43 | }, 44 | }, 45 | { 46 | test: /\.svg/, 47 | loader: 'url-loader', 48 | }, { 49 | test: /\.(woff2?|woff|eot|ttf|otf)(\?.*)?$/, 50 | loader: 'url-loader', 51 | options: { 52 | name: '[name].[ext]?[hash]' 53 | } 54 | } 55 | ] 56 | } 57 | 58 | config.plugins = [ 59 | new VueLoaderPlugin(), 60 | ] 61 | 62 | module.exports = config; -------------------------------------------------------------------------------- /webpack.build.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const baseConfig = require('./webpack.base'); 3 | 4 | const config = baseConfig; 5 | 6 | config.mode = 'production'; 7 | config.entry = './src/index.js'; 8 | 9 | config.optimization = { 10 | minimize: true, 11 | } 12 | 13 | config.output = { 14 | path: path.resolve(__dirname, './dist'), 15 | filename: 'vue-json-edit.js', 16 | library: 'vue-json-edit', 17 | libraryTarget: 'umd', 18 | }; 19 | config.externals = { 20 | vue: 'Vue', 21 | }; 22 | 23 | module.exports = config -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | const baseConfig = require('./webpack.base'); 4 | 5 | const config = baseConfig; 6 | 7 | config.mode = 'development'; 8 | 9 | config.entry = './example/main.js'; 10 | config.output = { 11 | path: path.resolve(__dirname, './example/dist/'), 12 | publicPath: '', 13 | filename: '[name]_[hash].js', 14 | }; 15 | 16 | config.devtool = 'inline-source-map'; 17 | config.devServer = { 18 | contentBase: './dist' 19 | }; 20 | 21 | config.plugins = config.plugins.concat([ 22 | new HtmlWebpackPlugin({ 23 | template: './example/index.html' 24 | }) 25 | ]) 26 | 27 | module.exports = config 28 | --------------------------------------------------------------------------------