From 834c7a3d97875410521f2bd73de5cb371601cb1b Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Fri, 14 Sep 2018 12:03:23 +0200 Subject: [PATCH 1/9] update hard-source-webpack-plugin to make make node-install work with node 10.x --- web/package.json | 2 +- web/yarn.lock | 290 ++++++++++++++++++++----------------------------------- 2 files changed, 108 insertions(+), 184 deletions(-) diff --git a/web/package.json b/web/package.json index 1f83c69..bb756dc 100644 --- a/web/package.json +++ b/web/package.json @@ -69,7 +69,7 @@ "exports-loader": "~0.6.4", "flotr2": "git+https://github.com/EnterpriseDB/Flotr2.git", "font-awesome": "^4.7.0", - "hard-source-webpack-plugin": "^0.4.9", + "hard-source-webpack-plugin": "0.12.0", "immutability-helper": "^2.2.0", "imports-loader": "^0.7.1", "ip-address": "^5.8.9", diff --git a/web/yarn.lock b/web/yarn.lock index f35ad96..addd2e4 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -31,16 +31,14 @@ JSONStream@^1.0.3: jsonparse "^1.2.0" through ">=2.2.7 <3" +JSV@^4.0.x: + version "4.0.2" + resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -abstract-leveldown@~2.6.0, abstract-leveldown@~2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" - dependencies: - xtend "~4.0.0" - accepts@~1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -215,6 +213,10 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -1326,10 +1328,6 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" -bindings@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - bitsyntax@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.0.4.tgz#eb10cc6f82b8c490e3e85698f07e83d46e0cba82" @@ -1359,7 +1357,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.0.0, bluebird@^3.3.0, bluebird@^3.4.6: +bluebird@^3.3.0, bluebird@^3.4.6: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -1905,6 +1903,14 @@ chalk@^2.4.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@~0.4.0: + version "0.4.0" + resolved "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + checkstyle-formatter@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/checkstyle-formatter/-/checkstyle-formatter-1.1.0.tgz#1c4922dbac72d67242cfb85e7706917d5587b512" @@ -2697,12 +2703,6 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deferred-leveldown@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" - dependencies: - abstract-leveldown "~2.6.0" - define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -2795,7 +2795,7 @@ detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" -detect-libc@^1.0.2, detect-libc@^1.0.3: +detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -3161,7 +3161,7 @@ eonasdan-bootstrap-datetimepicker@^4.17.47: moment "^2.10" moment-timezone "^0.4.0" -errno@^0.1.3, errno@~0.1.1: +errno@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: @@ -3477,10 +3477,6 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-template@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" - exports-loader@~0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" @@ -3576,10 +3572,6 @@ fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" -fast-future@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fast-future/-/fast-future-1.0.2.tgz#8435a9aaa02d79248d17d704e76259301d99280a" - fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3727,6 +3719,14 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-cache-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^3.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3740,6 +3740,12 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + find-versions@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62" @@ -4021,10 +4027,6 @@ gifsicle@^3.0.0: bin-wrapper "^3.0.0" logalot "^2.0.0" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -4344,19 +4346,19 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" -hard-source-webpack-plugin@^0.4.9: - version "0.4.15" - resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.4.15.tgz#e005d48d2dda231343bd79f413745304f3a149f0" +hard-source-webpack-plugin@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.12.0.tgz#ea21f0407538fcb62f6995371541baab0a5f679e" dependencies: - bluebird "^3.0.0" - level "^1.4.0" + chalk "^2.4.1" + find-cache-dir "^2.0.0" + jsonlint "^1.6.3" lodash "^4.15.0" mkdirp "^0.5.1" node-object-hash "^1.2.0" + pkg-dir "^3.0.0" rimraf "^2.6.2" - source-list-map "^0.1.6" - source-map "^0.5.6" - webpack-core "~0.6.0" + tapable "^1.0.0-beta.5" webpack-sources "^1.0.1" write-json-file "^2.3.0" @@ -4372,6 +4374,10 @@ has-binary2@~1.0.2: dependencies: isarray "2.0.1" +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" @@ -5425,6 +5431,13 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsonlint@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" + dependencies: + JSV "^4.0.x" + nomnom "^1.5.x" + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -5614,66 +5627,6 @@ leaflet@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.3.3.tgz#5c8f2fd50e4a41ead93ab850dcd9e058811da9b9" -level-codec@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" - -level-errors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" - dependencies: - errno "~0.1.1" - -level-errors@~1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" - dependencies: - errno "~0.1.1" - -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - dependencies: - inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" - xtend "^4.0.0" - -level-packager@~1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-1.2.1.tgz#067fedfd072b7fe3c6bec6080c0cbd4a6b2e11f4" - dependencies: - levelup "~1.3.0" - -level@^1.4.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/level/-/level-1.7.0.tgz#43464a3a8ba73b2f3de56a24292805146da213a1" - dependencies: - level-packager "~1.2.0" - leveldown "~1.7.0" - -leveldown@~1.7.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-1.7.2.tgz#5e3467bb27ee246a4a7b8dbd8fb2b16206a6eb8b" - dependencies: - abstract-leveldown "~2.6.1" - bindings "~1.2.1" - fast-future "~1.0.2" - nan "~2.6.1" - prebuild-install "^2.1.0" - -levelup@~1.3.0: - version "1.3.9" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" - dependencies: - deferred-leveldown "~1.2.1" - level-codec "~7.0.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.4.1" - xtend "~4.0.0" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -5757,6 +5710,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -6331,10 +6291,6 @@ nan@^2.10.0, nan@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" -nan@~2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" - nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" @@ -6393,12 +6349,6 @@ nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" -node-abi@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.1.tgz#7628c4d4ec4e9cd3764ceb3652f36b2e7f8d4923" - dependencies: - semver "^5.4.1" - node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -6552,6 +6502,13 @@ nodemailer@^2.5.0: nodemailer-smtp-transport "2.7.2" socks "1.1.9" +nomnom@^1.5.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + nomnom@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" @@ -6559,10 +6516,6 @@ nomnom@~1.6.2: colors "0.5.x" underscore "~1.4.4" -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -6642,7 +6595,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -6829,7 +6782,7 @@ os-filter-obj@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-1.0.3.tgz#5915330d90eced557d2d938a31c6dd214d9c63ad" -os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -6896,12 +6849,24 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + p-map-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" @@ -6932,6 +6897,10 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + pac-proxy-agent@1: version "1.1.0" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" @@ -7121,6 +7090,12 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + dependencies: + find-up "^3.0.0" + plugin-error@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" @@ -7368,26 +7343,6 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" -prebuild-install@^2.1.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" - dependencies: - detect-libc "^1.0.3" - expand-template "^1.0.2" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - node-abi "^2.2.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - os-homedir "^1.0.1" - pump "^2.0.1" - rc "^1.1.6" - simple-get "^2.7.0" - tar-fs "^1.13.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - precond@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" @@ -7477,14 +7432,7 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^2.0.0, pump@^2.0.1: +pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" dependencies: @@ -7626,7 +7574,7 @@ raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" -rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: +rc@^1.1.2, rc@^1.1.7: version "1.2.7" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" dependencies: @@ -7732,7 +7680,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@^1.0.33, readable-stream@~1.1.9: +readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: @@ -8215,10 +8163,6 @@ semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -8323,18 +8267,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - -simple-get@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - slack-node@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" @@ -8499,7 +8431,7 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^0.1.4, source-list-map@^0.1.6, source-list-map@~0.1.7: +source-list-map@^0.1.4, source-list-map@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" @@ -8538,7 +8470,7 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.4.x, source-map@^0.4.2, source-map@~0.4.1: +source-map@0.4.x, source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: @@ -8748,6 +8680,10 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + strip-bom-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" @@ -8882,16 +8818,11 @@ tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" -tar-fs@^1.13.0: - version "1.16.2" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.2.tgz#17e5239747e399f7e77344f5f53365f04af53577" - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" +tapable@^1.0.0-beta.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" -tar-stream@^1.1.1, tar-stream@^1.1.2, tar-stream@^1.5.2: +tar-stream@^1.1.1, tar-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.0.tgz#a50efaa7b17760b82c27b3cae4a301a8254a5715" dependencies: @@ -9209,6 +9140,10 @@ underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + underscore@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" @@ -9526,13 +9461,6 @@ watchpack@^1.4.0: jquery "^3.3.1" jquery-contextmenu "^2.6.4" -webpack-core@~0.6.0: - version "0.6.9" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" - dependencies: - source-list-map "~0.1.7" - source-map "~0.4.1" - webpack-dev-middleware@^1.12.0: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" @@ -9611,10 +9539,6 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - which@1, which@^1.2.1, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" -- 2.7.4 From 5c20aa8f9bfc2f5305d2c529d6468868eea7f664 Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Fri, 14 Sep 2018 14:43:51 +0200 Subject: [PATCH 2/9] Convert dictionary of L.Lof L.tileLayer objects passto list and parse in code. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This aĆølllowlllows for getting list from config. Also handles es case w no avaailable layers. redf #3646 --- web/pgadmin/static/js/sqleditor/geometry_viewer.js | 92 +++++++++++++--------- 1 file changed, 55 insertions(+), 37 deletions(-) diff --git a/web/pgadmin/static/js/sqleditor/geometry_viewer.js b/web/pgadmin/static/js/sqleditor/geometry_viewer.js index 6635e8f..a70ebec 100644 --- a/web/pgadmin/static/js/sqleditor/geometry_viewer.js +++ b/web/pgadmin/static/js/sqleditor/geometry_viewer.js @@ -72,6 +72,42 @@ let GeometryViewer = { parse_data: parseData, }; +const availableLayers = [ + { + name: 'Street', + tileUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + attribution: '© OpenStreetMap', + }, + { + name: 'Topography', + tileUrl: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', + maxZoom: 17, + attribution: '© OpenStreetMap, © SRTM, © OpenTopoMap', + }, + { + name: 'Gray Style', + tileUrl: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}{r}.png', + attribution: '© OpenStreetMap, © CartoDB', + subdomains: 'abcd', + maxZoom: 19, + }, + { + name: 'Light Color', + tileUrl: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager/{z}/{x}/{y}{r}.png', + attribution: '© OpenStreetMap, © CartoDB', + subdomains: 'abcd', + maxZoom: 19, + }, + { + name: 'Dark Matter', + tileUrl: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}{r}.png', + attribution: '© OpenStreetMap, © CartoDB', + subdomains: 'abcd', + maxZoom: 19, + }, +]; + + function initMapComponent() { const geojsonMarkerOptions = { radius: 4, @@ -102,44 +138,26 @@ function initMapComponent() { }, }); vectorLayer.addTo(lmap); - let baseLayersObj = { - 'Empty': L.tileLayer(''), - 'Street': L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - { - maxZoom: 19, - attribution: '© OpenStreetMap', - }), - 'Topography': L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - { - maxZoom: 17, - attribution: '© OpenStreetMap,' + - ' © SRTM,' + - ' © OpenTopoMap', - }), - 'Gray Style': L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}{r}.png', - { - attribution: '© OpenStreetMap,' + - ' © CartoDB', - subdomains: 'abcd', - maxZoom: 19, - }), - 'Light Color': L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager/{z}/{x}/{y}{r}.png', - { - attribution: '© OpenStreetMap,' + - ' © CartoDB', - subdomains: 'abcd', - maxZoom: 19, - }), - 'Dark Matter': L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}{r}.png', - { - attribution: '© OpenStreetMap,' + - ' © CartoDB', - subdomains: 'abcd', - maxZoom: 19, - }), - }; + + let emptyLayer = L.tileLayer(''); + + //create a layers dictionary. Use _.pick to not pass in empty values as options + let baseLayersObj = availableLayers.reduce((acc, layer) => { + acc[layer.name] = L.tileLayer(layer.tileUrl , _.pick({ + attribution: layer.attribution || undefined, + subdomains: layer.subdomains || undefined, + maxZoom: layer.maxZoom || 19, + }, _.identity)); + return acc; + }, {'Empty': emptyLayer}); + let layerControl = L.control.layers(baseLayersObj); - let defaultBaseLayer = baseLayersObj.Street; + + //default layer is first in list (or Empty if none is provided) + let defaultBaseLayer = availableLayers.length > 0 + ? baseLayersObj[availableLayers[0].name] + : emptyLayer; + let baseLayers = _.values(baseLayersObj); let infoControl = L.control({position: 'topright'}); -- 2.7.4 From e954fdbb393ef50e8dd269b36d7bfd244c05f4e9 Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Fri, 14 Sep 2018 15:42:52 +0200 Subject: [PATCH 3/9] Add RegisterGeometryViewerPreferences too Sql Editor and expose these to geometry_editor.js Includes: - adding a new preference type "orderedlist" - Setting default values in geometry_viewer_preferences.py - DefiUsing fields property of Preference (inspired by keyboard sShortcut) - Using browser.get_preferences_for_module in jhs too get preferences ref #3646 --- web/pgadmin/static/js/sqleditor/geometry_viewer.js | 45 +++--------- web/pgadmin/tools/sqleditor/__init__.py | 3 + .../sqleditor/utils/geometry_viewer_preferences.py | 84 ++++++++++++++++++++++ web/pgadmin/utils/preferences.py | 17 ++++- 4 files changed, 113 insertions(+), 36 deletions(-) create mode 100644 web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py diff --git a/web/pgadmin/static/js/sqleditor/geometry_viewer.js b/web/pgadmin/static/js/sqleditor/geometry_viewer.js index a70ebec..223f388 100644 --- a/web/pgadmin/static/js/sqleditor/geometry_viewer.js +++ b/web/pgadmin/static/js/sqleditor/geometry_viewer.js @@ -72,40 +72,15 @@ let GeometryViewer = { parse_data: parseData, }; -const availableLayers = [ - { - name: 'Street', - tileUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - attribution: '© OpenStreetMap', - }, - { - name: 'Topography', - tileUrl: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', - maxZoom: 17, - attribution: '© OpenStreetMap, © SRTM, © OpenTopoMap', - }, - { - name: 'Gray Style', - tileUrl: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}{r}.png', - attribution: '© OpenStreetMap, © CartoDB', - subdomains: 'abcd', - maxZoom: 19, - }, - { - name: 'Light Color', - tileUrl: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager/{z}/{x}/{y}{r}.png', - attribution: '© OpenStreetMap, © CartoDB', - subdomains: 'abcd', - maxZoom: 19, - }, - { - name: 'Dark Matter', - tileUrl: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}{r}.png', - attribution: '© OpenStreetMap, © CartoDB', - subdomains: 'abcd', - maxZoom: 19, - }, -]; +function getLayerList () { + let browser = window.opener ? + window.opener.pgAdmin.Browser + : window.top.pgAdmin.Browser; + + let sqlEditPreferences = browser.get_preferences_for_module('sqleditor'); + + return sqlEditPreferences.available_background_layers; +} function initMapComponent() { @@ -141,6 +116,8 @@ function initMapComponent() { let emptyLayer = L.tileLayer(''); + let availableLayers = getLayerList(); + //create a layers dictionary. Use _.pick to not pass in empty values as options let baseLayersObj = availableLayers.reduce((acc, layer) => { acc[layer.name] = L.tileLayer(layer.tileUrl , _.pick({ diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py index 3f0055d..ed82085 100644 --- a/web/pgadmin/tools/sqleditor/__init__.py +++ b/web/pgadmin/tools/sqleditor/__init__.py @@ -39,6 +39,8 @@ from pgadmin.utils.exception import ConnectionLost, SSHTunnelConnectionLost from pgadmin.utils.sqlautocomplete.autocomplete import SQLAutoComplete from pgadmin.tools.sqleditor.utils.query_tool_preferences import \ RegisterQueryToolPreferences +from pgadmin.tools.sqleditor.utils.geometry_viewer_preferences import \ + RegisterGeometryViewerPreferences from pgadmin.tools.sqleditor.utils.query_tool_fs_utils import \ read_file_generator from pgadmin.tools.sqleditor.utils.filter_dialog import FilterDialog @@ -118,6 +120,7 @@ class SqlEditorModule(PgAdminModule): def register_preferences(self): RegisterQueryToolPreferences(self) + RegisterGeometryViewerPreferences(self) blueprint = SqlEditorModule(MODULE_NAME, __name__, static_url_path='/static') diff --git a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py new file mode 100644 index 0000000..bfbcab9 --- /dev/null +++ b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py @@ -0,0 +1,84 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2018, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +"""Register preferences for geometry view""" +from flask_babelex import gettext + + +fields = [ + { + 'name': 'name', + 'type': 'text', + 'label': gettext('Layer Name') + }, + { + 'name': 'tileUrl', + 'type': 'text', + 'label': gettext('Tile Url') + }, + { + 'name': 'maxZoom', + 'type': 'integer', + 'label': gettext('Max Zoom level') + }, + { + 'name': 'attribution', + 'type': 'text', + 'label': gettext('Attribution text') + }, + { + 'name': 'subdomains', + 'type': 'text', + 'label': gettext('subdomains for url') + }, +] + +default_layers = [ + { + 'name': 'Street', + 'tileUrl': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + 'attribution': '© OpenStreetMap', + }, + { + 'name': 'Topography', + 'tileUrl': 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', + 'maxZoom': 17, + 'attribution': '© OpenStreetMap, © SRTM, © OpenTopoMap', + }, + { + 'name': 'Gray Style', + 'tileUrl': 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}{r}.png', + 'attribution': '© OpenStreetMap, © CartoDB', + 'subdomains': 'abcd' + }, + { + 'name': 'Light Color', + 'tileUrl': 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager/{z}/{x}/{y}{r}.png', + 'attribution': '© OpenStreetMap, © CartoDB', + 'subdomains': 'abcd' + }, + { + 'name': 'Dark Matter', + 'tileUrl': 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}{r}.png', + 'attribution': '© OpenStreetMap, © CartoDB', + 'subdomains': 'abcd' + }, +] + + +def RegisterGeometryViewerPreferences(self): + self.available_background_layers = self.preference.register( + 'geometryviewer', 'available_background_layers', + gettext("Map background layers"), 'orderedlist', default_layers, + category_label=gettext('Geometry Viewer'), + help_str=gettext( + 'Description here' + ), + fields=fields + ) diff --git a/web/pgadmin/utils/preferences.py b/web/pgadmin/utils/preferences.py index d91da1e..11fdcef 100644 --- a/web/pgadmin/utils/preferences.py +++ b/web/pgadmin/utils/preferences.py @@ -147,7 +147,12 @@ class _Preference(object): except Exception as e: current_app.logger.exeception(e) return self.default - + if self._type == 'orderedlist': + try: + return json.loads(res.value) + except Exception as e: + current_app.logger.exeception(e) + return self.default return res.value def set(self, value): @@ -214,6 +219,14 @@ class _Preference(object): return False, gettext( "Invalid value for a keyboard shortcut option." ) + elif self._type == 'orderedlist': + try: + value = json.dumps(value) + except Exception as e: + current_app.logger.exeception(e) + return False, gettext( + "Invalid value for a ordered list option." + ) pref = UserPrefTable.query.filter_by( pid=self.pid @@ -424,7 +437,7 @@ class Preferences(object): assert _type in ( 'boolean', 'integer', 'numeric', 'date', 'datetime', 'options', 'multiline', 'switch', 'node', 'text', - 'keyboardshortcut' + 'keyboardshortcut', 'orderedlist' ), "Type cannot be found in the defined list!" (cat['preferences'])[name] = res = _Preference( -- 2.7.4 From 34d57e13e63f6ef7fcd504f2e8542201dbaf767f Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Mon, 17 Sep 2018 15:51:22 +0200 Subject: [PATCH 4/9] make Backform.OrderedListControl, and use this for GeometryViewer available layers preference (ref #3646) --- web/pgadmin/preferences/static/js/preferences.js | 4 +- web/pgadmin/static/js/backform.pgadmin.js | 222 +++++++++++++++++++++ .../sqleditor/utils/geometry_viewer_preferences.py | 2 +- 3 files changed, 225 insertions(+), 3 deletions(-) diff --git a/web/pgadmin/preferences/static/js/preferences.js b/web/pgadmin/preferences/static/js/preferences.js index eeaf4bb..a76b21e 100644 --- a/web/pgadmin/preferences/static/js/preferences.js +++ b/web/pgadmin/preferences/static/js/preferences.js @@ -112,7 +112,6 @@ define('pgadmin.preferences', [ * list of preferences using the Backform Field, Control. */ _.each(prefs, function(p) { - var m = preferences.get(p.id); m.errorModel = new Backbone.Model(); var f = new Backform.Field( @@ -259,6 +258,8 @@ define('pgadmin.preferences', [ return 'switch'; case 'keyboardshortcut': return 'keyboardShortcut'; + case 'orderedlist': + return 'orderedList'; default: if (console && console.warn) { // Warning for developer only. @@ -448,7 +449,6 @@ define('pgadmin.preferences', [ modulesChanged[pref.module] = true; } }); - // Refresh preferences cache pgBrowser.cache_preferences(modulesChanged); } diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js index e0575cc..ddf985c 100644 --- a/web/pgadmin/static/js/backform.pgadmin.js +++ b/web/pgadmin/static/js/backform.pgadmin.js @@ -2779,5 +2779,227 @@ define([ }, }); + var OrderedListItem = Backform.Control.extend({ + + initialize: function (options) { + Backform.Control.prototype.initialize.apply(this, arguments); + this.innerModel = new Backbone.Model(); + this.onChange = options.onChange; + this.onDelete = options.onDelete; + this.onMove = options.onMove; + this.onAdd = options.onAdd; + }, + tagName: 'tr', + + onInnerModelChange: function() { + if (this.model.has('idx')) { + this.onChange(this.model.get('idx'), this.innerModel.toJSON()); + } else { + this.onAdd(this.innerModel.toJSON()); + } + }, + + render: function() { + var self = this, + initial_value = {}, + values = self.model.get('value'); + + _.each(self.field.get('fields'), function(field) { + initial_value[field['name']] = values[field['name']]; + }); + + self.innerModel.set(initial_value); + + self.listenTo(self.innerModel, 'change', self.onInnerModelChange); + + var moveButtons = []; + if (this.model.get('canMoveUp')) { + var upBtn = $(''); + upBtn.on('click', function () { + self.onMove(self.model.get('idx'), -1); + }); + moveButtons.push(upBtn); + } + if (this.model.get('canMoveDown')) { + var downBtn = $(''); + downBtn.on('click', function () { + self.onMove(self.model.get('idx'), 1); + }); + moveButtons.push(downBtn); + } + + self.$el.append($('').append(moveButtons)); + _.each(self.field.get('fields'), function(fld) { + + var f = new Backform.Field( + _.extend({}, { + id: fld['name'], + name: fld['name'], + control: Backform.getMappedControl(fld['type'], 'edit'), + label: fld['label'], + }) + ), + cntr = new (f.get('control')) ({ + field: f, + model: self.innerModel, + }); + + cntr.render(); + cntr.$el.find('label.control-label').remove(); + self.$el.append($('').append(cntr.$el)); + }); + + var deleteBtn = $(''); + + deleteBtn.on('click', function () { + self.onDelete(self.model.get('idx'), null); + }); + + self.$el.append($('').append(deleteBtn)); + self.$el.attr('class', ''); + + return self; + }, + + }); + + Backform.OrderedListControl = Backform.Control.extend({ + + initialize: function() { + Backform.Control.prototype.initialize.apply(this, arguments); + this.controls = []; + }, + + cleanup: function() { + _.each(this.controls, function(c) { + c.remove(); + }); + this.controls.length = 0; + }, + + template: _.template([ + '', + '
', + '
', + ].join('\n')), + + tableTemplate: _.template([ + '', + '', + '', + '', + '<% _.map(fields, function (field) {%>', + '', + '<%})%>', + '', + '', + '', + '', + '', + '
<%=field.label%>
', + ].join('\n')), + + onChange: function (idx, data) { + var list = _.clone(this.model.get('value')); + list[idx] = data; + this.model.set('value', list); + this.render(); + }, + + onDelete: function (idx) { + var list = _.clone(this.model.get('value')); + list.splice(idx, 1); + this.model.set('value', list); + this.render(); + }, + + onMove: function (idx, direction) { + var list = _.clone(this.model.get('value')); + var newPos = idx + direction; + if (newPos >= 0 && newPos < list.length) { + var element = list[idx]; + list.splice(idx, 1); + list.splice(newPos, 0, element); + this.model.set('value', list); + this.render(); + } + }, + + onAdd: function (data) { + var list = _.clone(this.model.get('value')); + list.push(data); + this.model.set('value', list); + this.render(); + }, + + render: function() { + var self = this, + initial_value = {}, + field = _.defaults(this.field.toJSON(), this.defaults), + value = self.model.get(field['name']), + innerFields = field['fields']; + + _.each(innerFields, function(field) { + initial_value[field['name']] = value[field['name']]; + }); + this.cleanup(); + this.$el.empty(); + + this.$el.html(self.template(field)).addClass(field.name); + + var table = $(self.tableTemplate({fields: innerFields})); + + var values = self.model.get('value'); + self.controls = _.map(values, function (row, idx) { + return new OrderedListItem({ + field: new Backbone.Model({fields: innerFields, name: 'row_' + idx}), + model: new Backbone.Model({ + errorModel: new Backbone.Model(), + value: row, + idx: idx, + canMoveDown: idx < values.length - 1, + canMoveUp: idx > 0, + }), + onChange: _.bind(self.onChange, self), + onDelete: _.bind(self.onDelete, self), + onMove: _.bind(self.onMove, self), + onAdd: _.bind(self.onAdd, self), + }); + }); + self.controls.push(new OrderedListItem({ + field: new Backbone.Model({fields: innerFields, name: 'row_new'}), + model: new Backbone.Model({ + errorModel: new Backbone.Model(), + canMoveDown: false, + canMoveUp: false, + value: _.reduce(innerFields, function (acc, field) { + acc[field.name] = undefined; + return acc; + }, {}), + }), + onChange: _.bind(self.onChange, self), + onDelete: _.bind(self.onDelete, self), + onMove: _.bind(self.onMove, self), + onAdd: _.bind(self.onAdd, self), + })); + + + table.find('tbody').append(_.map(self.controls, function (c) { + return c.render().$el; + })); + + var $container = $(self.$el.find('.pgadmin-controls')); + $container.append(table); + + return self; + }, + + remove: function() { + /* First do the clean up */ + this.cleanup(); + Backform.Control.prototype.remove.apply(this, arguments); + }, + }); + return Backform; }); diff --git a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py index bfbcab9..ac0b264 100644 --- a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py +++ b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py @@ -24,7 +24,7 @@ fields = [ }, { 'name': 'maxZoom', - 'type': 'integer', + 'type': 'int', 'label': gettext('Max Zoom level') }, { -- 2.7.4 From 93f4a68ef9b0f87c1f4765ab077c4e178062dab2 Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Mon, 17 Sep 2018 21:04:40 +0200 Subject: [PATCH 5/9] rewrite OrderedListControl to use Backgrid (ref #3646) --- web/pgadmin/static/js/backform.pgadmin.js | 288 +++++++++----------------- web/pgadmin/static/scss/resources/_utils.scss | 7 +- 2 files changed, 108 insertions(+), 187 deletions(-) diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js index ddf985c..34d9231 100644 --- a/web/pgadmin/static/js/backform.pgadmin.js +++ b/web/pgadmin/static/js/backform.pgadmin.js @@ -934,7 +934,7 @@ define([ this.undelegateEvents(); this.$el.empty(); - + console.log(this.field) var field = _.defaults(this.field.toJSON(), this.defaults), attributes = this.model.toJSON(), attrArr = field.name.split('.'), @@ -2779,226 +2779,142 @@ define([ }, }); - var OrderedListItem = Backform.Control.extend({ + var OrderedListItem = Backbone.Model.extend({}); + + var OrderedListItemCollection = Backbone.Collection.extend({ + model: OrderedListItem, + }); + + var cellGridMap = { + text: 'string', + int: 'integer', + }; + + function formToCell(form) { + form.cell = cellGridMap[form.type]; + return form; + } + + var MoveCell = Backgrid.Cell.extend({ initialize: function (options) { - Backform.Control.prototype.initialize.apply(this, arguments); - this.innerModel = new Backbone.Model(); - this.onChange = options.onChange; - this.onDelete = options.onDelete; - this.onMove = options.onMove; - this.onAdd = options.onAdd; + Backgrid.Cell.prototype.initialize.apply(this, arguments); + this.options = _.extend(options, {moveDirection: 'up'}); }, - tagName: 'tr', - onInnerModelChange: function() { - if (this.model.has('idx')) { - this.onChange(this.model.get('idx'), this.innerModel.toJSON()); - } else { - this.onAdd(this.innerModel.toJSON()); - } + events: { + 'click .fa-arrow-up': 'moveUp', + 'click .fa-arrow-down': 'moveDown', }, - render: function() { - var self = this, - initial_value = {}, - values = self.model.get('value'); + moveUp: function(e) { + e.preventDefault(); + this.move(-1); + }, - _.each(self.field.get('fields'), function(field) { - initial_value[field['name']] = values[field['name']]; - }); + moveDown: function(e) { + e.preventDefault(); + this.move(1); + }, - self.innerModel.set(initial_value); + move: function (direction) { + var collection = this.model.collection; + var index = collection.indexOf(this.model); + var newIndex = index + direction; + collection.remove(this.model, {silent: true}); + collection.add(this.model, {at: newIndex}); + }, - self.listenTo(self.innerModel, 'change', self.onInnerModelChange); + render: function() { + var index = this.model.collection.indexOf(this.model); + var btns = []; - var moveButtons = []; - if (this.model.get('canMoveUp')) { - var upBtn = $(''); - upBtn.on('click', function () { - self.onMove(self.model.get('idx'), -1); - }); - moveButtons.push(upBtn); + if (index > 0) { + btns.push(''); + } else { + btns.push(''); } - if (this.model.get('canMoveDown')) { - var downBtn = $(''); - downBtn.on('click', function () { - self.onMove(self.model.get('idx'), 1); - }); - moveButtons.push(downBtn); + if (index < this.model.collection.length -1) { + btns.push(''); } - - self.$el.append($('').append(moveButtons)); - _.each(self.field.get('fields'), function(fld) { - - var f = new Backform.Field( - _.extend({}, { - id: fld['name'], - name: fld['name'], - control: Backform.getMappedControl(fld['type'], 'edit'), - label: fld['label'], - }) - ), - cntr = new (f.get('control')) ({ - field: f, - model: self.innerModel, - }); - - cntr.render(); - cntr.$el.find('label.control-label').remove(); - self.$el.append($('').append(cntr.$el)); - }); - - var deleteBtn = $(''); - - deleteBtn.on('click', function () { - self.onDelete(self.model.get('idx'), null); - }); - - self.$el.append($('').append(deleteBtn)); - self.$el.attr('class', ''); - - return self; + this.$el.empty(); + this.$el.html(btns.join('\n')); + this.delegateEvents(); + return this; }, - }); Backform.OrderedListControl = Backform.Control.extend({ - - initialize: function() { + initialize: function () { Backform.Control.prototype.initialize.apply(this, arguments); - this.controls = []; + this.collection = new OrderedListItemCollection(this.model.get('value')); + this.collection.on('change'); + + this.listenTo(this.collection, 'change', this.onChange); + this.listenTo(this.collection, 'remove', this.onChange); + this.listenTo(this.collection, 'add', this.onChange); }, - cleanup: function() { - _.each(this.controls, function(c) { - c.remove(); - }); - this.controls.length = 0; + events: { + 'click .add': 'addRow', }, template: _.template([ - '', - '
', + '
', + ' ', + '
', + ' ', + '
', + '
', + ' <% if (helpMessage && helpMessage.length) { %>', + ' <%=helpMessage%>', + ' <% } %>', '
', ].join('\n')), - tableTemplate: _.template([ - '', - '', - '', - '', - '<% _.map(fields, function (field) {%>', - '', - '<%})%>', - '', - '', - '', - '', - '', - '
<%=field.label%>
', - ].join('\n')), - - onChange: function (idx, data) { - var list = _.clone(this.model.get('value')); - list[idx] = data; - this.model.set('value', list); - this.render(); + addRow: function () { + this.collection.add(new this.collection.model()); }, - onDelete: function (idx) { - var list = _.clone(this.model.get('value')); - list.splice(idx, 1); - this.model.set('value', list); - this.render(); + onChange: function () { + this.model.set('value', this.collection.toJSON()); }, - onMove: function (idx, direction) { - var list = _.clone(this.model.get('value')); - var newPos = idx + direction; - if (newPos >= 0 && newPos < list.length) { - var element = list[idx]; - list.splice(idx, 1); - list.splice(newPos, 0, element); - this.model.set('value', list); - this.render(); + render: function () { + if (this.grid) { + this.grid.remove(); } - }, - - onAdd: function (data) { - var list = _.clone(this.model.get('value')); - list.push(data); - this.model.set('value', list); - this.render(); - }, - - render: function() { - var self = this, - initial_value = {}, - field = _.defaults(this.field.toJSON(), this.defaults), - value = self.model.get(field['name']), - innerFields = field['fields']; - - _.each(innerFields, function(field) { - initial_value[field['name']] = value[field['name']]; - }); - this.cleanup(); - this.$el.empty(); - - this.$el.html(self.template(field)).addClass(field.name); + var columns = _.map(this.field.get('fields'), formToCell); + var extraColumns = [ + { + name: 'pg-backform-delete', + label: '', + editable: false, + cell_priority: -1, + cell: MoveCell, + }, + { + name: 'pg-backform-delete', + label: '', + cell: Backgrid.Extension.DeleteCell, + editable: false, + cell_priority: -1, + canDeleteRow: true, + }, + ]; - var table = $(self.tableTemplate({fields: innerFields})); - - var values = self.model.get('value'); - self.controls = _.map(values, function (row, idx) { - return new OrderedListItem({ - field: new Backbone.Model({fields: innerFields, name: 'row_' + idx}), - model: new Backbone.Model({ - errorModel: new Backbone.Model(), - value: row, - idx: idx, - canMoveDown: idx < values.length - 1, - canMoveUp: idx > 0, - }), - onChange: _.bind(self.onChange, self), - onDelete: _.bind(self.onDelete, self), - onMove: _.bind(self.onMove, self), - onAdd: _.bind(self.onAdd, self), - }); + columns = columns.concat(); + this.grid = new Backgrid.Grid({ + columns: extraColumns.concat(columns), + collection: this.collection, }); - self.controls.push(new OrderedListItem({ - field: new Backbone.Model({fields: innerFields, name: 'row_new'}), - model: new Backbone.Model({ - errorModel: new Backbone.Model(), - canMoveDown: false, - canMoveUp: false, - value: _.reduce(innerFields, function (acc, field) { - acc[field.name] = undefined; - return acc; - }, {}), - }), - onChange: _.bind(self.onChange, self), - onDelete: _.bind(self.onDelete, self), - onMove: _.bind(self.onMove, self), - onAdd: _.bind(self.onAdd, self), - })); - - - table.find('tbody').append(_.map(self.controls, function (c) { - return c.render().$el; - })); - var $container = $(self.$el.find('.pgadmin-controls')); - $container.append(table); - - return self; + this.$el.html(this.template(this.field.toJSON())); + this.$el.find('div.table').append(this.grid.render().$el); + this.delegateEvents(); + return this; }, - remove: function() { - /* First do the clean up */ - this.cleanup(); - Backform.Control.prototype.remove.apply(this, arguments); - }, }); return Backform; diff --git a/web/pgadmin/static/scss/resources/_utils.scss b/web/pgadmin/static/scss/resources/_utils.scss index ed74924..ceb555a 100644 --- a/web/pgadmin/static/scss/resources/_utils.scss +++ b/web/pgadmin/static/scss/resources/_utils.scss @@ -6,4 +6,9 @@ ms-user-select: none; user-select: none; cursor: default; -} \ No newline at end of file +} + +.icon-blank::before { + width: 1em; + content: ' '; +} -- 2.7.4 From 3d484c25ba196805a9f8835390375029ac22f22a Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Mon, 17 Sep 2018 23:30:33 +0200 Subject: [PATCH 6/9] handle required fields in Backform.OrderedListControl (ref #3646) --- web/pgadmin/static/js/backform.pgadmin.js | 101 ++++++++++++++++----- .../sqleditor/utils/geometry_viewer_preferences.py | 12 ++- 2 files changed, 85 insertions(+), 28 deletions(-) diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js index 34d9231..fc0bd40 100644 --- a/web/pgadmin/static/js/backform.pgadmin.js +++ b/web/pgadmin/static/js/backform.pgadmin.js @@ -934,7 +934,6 @@ define([ this.undelegateEvents(); this.$el.empty(); - console.log(this.field) var field = _.defaults(this.field.toJSON(), this.defaults), attributes = this.model.toJSON(), attrArr = field.name.split('.'), @@ -2733,12 +2732,12 @@ define([ _.each(innerFields, function(fld) { var f = new Backform.Field( - _.extend({}, { - id: fld['name'], - name: fld['name'], - control: fld['type'], - label: fld['label'], - }) + _.extend({}, { + id: fld['name'], + name: fld['name'], + control: fld['type'], + label: fld['label'], + }) ), cntr = new (f.get('control')) ({ field: f, @@ -2779,20 +2778,75 @@ define([ }, }); - var OrderedListItem = Backbone.Model.extend({}); + var OrderedListItem = Backbone.Model.extend({ + + isColumnValid: function(name) { + var isRequired = this.collection.columns.find(c => c.name === name).required; + if (isRequired) { + return this.has(name) && !_.isUndefined(this.get(name)) && this.get(name) !== ''; + } + return true; + }, + + validate: function () { + //find columns with errors + var errors = this.collection.columns + .filter(c => !this.isColumnValid(c.name), this) + .map(c => c.name); + if (errors.length) { + //revert all error cols to prev version + _.forEach(errors, error => { + this.set(error, this.previousAttributes()[error], {silent: true}); + }, this); + + //return the list of errors to make this.isValid() return false + return errors; + } + }, + }); var OrderedListItemCollection = Backbone.Collection.extend({ + + initialize: function(models, options) { + Backbone.Collection.prototype.initialize.apply(this, arguments); + //convenience to get the columns + this.columns = options.columns; + }, + model: OrderedListItem, + + }); + + var ValidatingStringCell = Backgrid.Cell.extend({ + + className: 'string-cell', + + formatter: Backgrid.StringFormatter, + + render: function () { + Backgrid.Cell.prototype.render.apply(this, arguments); + var $el = this.$el; + if (!this.model.isColumnValid(this.column.get('name'))) { + $el.addClass('error'); + } else { + $el.removeClass('error'); + } + this.updateStateClassesMaybe(); + this.delegateEvents(); + return this; + }, }); var cellGridMap = { - text: 'string', + text: ValidatingStringCell, int: 'integer', }; function formToCell(form) { - form.cell = cellGridMap[form.type]; - return form; + var f = _.clone(form); + f.cell = cellGridMap[form.type]; + f.editable = true; + return f; } var MoveCell = Backgrid.Cell.extend({ @@ -2828,13 +2882,13 @@ define([ render: function() { var index = this.model.collection.indexOf(this.model); var btns = []; - - if (index > 0) { + var isValid = this.model.isValid(); + if (isValid && index > 0) { btns.push(''); } else { btns.push(''); } - if (index < this.model.collection.length -1) { + if (isValid && index < this.model.collection.length -1) { btns.push(''); } this.$el.empty(); @@ -2847,9 +2901,8 @@ define([ Backform.OrderedListControl = Backform.Control.extend({ initialize: function () { Backform.Control.prototype.initialize.apply(this, arguments); - this.collection = new OrderedListItemCollection(this.model.get('value')); - this.collection.on('change'); - + var columns = _.map(this.field.get('fields'), formToCell); + this.collection = new OrderedListItemCollection(this.model.get('value'), {columns: columns}); this.listenTo(this.collection, 'change', this.onChange); this.listenTo(this.collection, 'remove', this.onChange); this.listenTo(this.collection, 'add', this.onChange); @@ -2877,14 +2930,17 @@ define([ }, onChange: function () { - this.model.set('value', this.collection.toJSON()); + var data = this.collection + .filter(m => m.isValid()) + .map(m => m.attributes); + this.model.set('value', data); }, render: function () { if (this.grid) { this.grid.remove(); } - var columns = _.map(this.field.get('fields'), formToCell); + var extraColumns = [ { name: 'pg-backform-delete', @@ -2894,7 +2950,7 @@ define([ cell: MoveCell, }, { - name: 'pg-backform-delete', + name: 'pg-backform-move', label: '', cell: Backgrid.Extension.DeleteCell, editable: false, @@ -2903,9 +2959,8 @@ define([ }, ]; - columns = columns.concat(); this.grid = new Backgrid.Grid({ - columns: extraColumns.concat(columns), + columns: extraColumns.concat(this.collection.columns), collection: this.collection, }); @@ -2913,7 +2968,7 @@ define([ this.$el.find('div.table').append(this.grid.render().$el); this.delegateEvents(); return this; - }, + } }); diff --git a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py index ac0b264..4dc38b9 100644 --- a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py +++ b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py @@ -15,27 +15,29 @@ fields = [ { 'name': 'name', 'type': 'text', - 'label': gettext('Layer Name') + 'label': gettext('Layer Name'), + 'required': True, }, { 'name': 'tileUrl', 'type': 'text', - 'label': gettext('Tile Url') + 'label': gettext('Tile Url'), + 'required': True, }, { 'name': 'maxZoom', 'type': 'int', - 'label': gettext('Max Zoom level') + 'label': gettext('Max Zoom level'), }, { 'name': 'attribution', 'type': 'text', - 'label': gettext('Attribution text') + 'label': gettext('Attribution text'), }, { 'name': 'subdomains', 'type': 'text', - 'label': gettext('subdomains for url') + 'label': gettext('subdomains for url'), }, ] -- 2.7.4 From 73f832b3fc4fcbc031d534a14c3db3a08fb4b3d8 Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Tue, 18 Sep 2018 11:44:35 +0200 Subject: [PATCH 7/9] style fixes for Backform.OrderedListControl (ref #3646) --- web/pgadmin/preferences/static/css/preferences.css | 18 ++++++++++++++ web/pgadmin/static/js/backform.pgadmin.js | 28 +++++++++++----------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/web/pgadmin/preferences/static/css/preferences.css b/web/pgadmin/preferences/static/css/preferences.css index 408dd3d..39cec34 100644 --- a/web/pgadmin/preferences/static/css/preferences.css +++ b/web/pgadmin/preferences/static/css/preferences.css @@ -45,3 +45,21 @@ div.pgadmin-preference-body div.ajs-content { .preferences_content .pgadmin-controls .alt { margin-left: 15px !important; } + +.fa-hidden { + visibility: hidden; +} + +.fa-clickable { + cursor: pointer; +} + +button.add-btn { + border: 2px solid #cccccc !important; + background-color: #e8e8e8 !important; + font-size: 12px; + border-radius: 5px 5px 5px 5px; + color: #000 !important; + padding-left: 3px !important; + padding-right: 3px !important; +} \ No newline at end of file diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js index fc0bd40..f30a829 100644 --- a/web/pgadmin/static/js/backform.pgadmin.js +++ b/web/pgadmin/static/js/backform.pgadmin.js @@ -2884,12 +2884,12 @@ define([ var btns = []; var isValid = this.model.isValid(); if (isValid && index > 0) { - btns.push(''); + btns.push(''); } else { - btns.push(''); + btns.push(''); } if (isValid && index < this.model.collection.length -1) { - btns.push(''); + btns.push(''); } this.$el.empty(); this.$el.html(btns.join('\n')); @@ -2908,16 +2908,9 @@ define([ this.listenTo(this.collection, 'add', this.onChange); }, - events: { - 'click .add': 'addRow', - }, - template: _.template([ '
', ' ', - '
', - ' ', - '
', '
', ' <% if (helpMessage && helpMessage.length) { %>', ' <%=helpMessage%>', @@ -2943,14 +2936,14 @@ define([ var extraColumns = [ { - name: 'pg-backform-delete', + name: 'pg-backform-move', label: '', editable: false, cell_priority: -1, cell: MoveCell, }, { - name: 'pg-backform-move', + name: 'pg-backform-delete', label: '', cell: Backgrid.Extension.DeleteCell, editable: false, @@ -2964,11 +2957,18 @@ define([ collection: this.collection, }); + + var addBtn = $(''); + addBtn.on('click', _.bind(this.addRow, this)); + + var gridEl = this.grid.render().$el; + gridEl.find('th.pg-backform-move').empty().append(addBtn); this.$el.html(this.template(this.field.toJSON())); - this.$el.find('div.table').append(this.grid.render().$el); + this.$el.find('div.table').append(gridEl); + this.delegateEvents(); return this; - } + }, }); -- 2.7.4 From 55e478254f73f295d612a25ad7bd2f1f2b673fa3 Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Tue, 18 Sep 2018 11:46:37 +0200 Subject: [PATCH 8/9] move Backform.OrderedListControl styles (ref #3646) --- web/pgadmin/preferences/static/css/preferences.css | 18 ------------------ web/pgadmin/static/scss/_backform.overrides.scss | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/web/pgadmin/preferences/static/css/preferences.css b/web/pgadmin/preferences/static/css/preferences.css index 39cec34..408dd3d 100644 --- a/web/pgadmin/preferences/static/css/preferences.css +++ b/web/pgadmin/preferences/static/css/preferences.css @@ -45,21 +45,3 @@ div.pgadmin-preference-body div.ajs-content { .preferences_content .pgadmin-controls .alt { margin-left: 15px !important; } - -.fa-hidden { - visibility: hidden; -} - -.fa-clickable { - cursor: pointer; -} - -button.add-btn { - border: 2px solid #cccccc !important; - background-color: #e8e8e8 !important; - font-size: 12px; - border-radius: 5px 5px 5px 5px; - color: #000 !important; - padding-left: 3px !important; - padding-right: 3px !important; -} \ No newline at end of file diff --git a/web/pgadmin/static/scss/_backform.overrides.scss b/web/pgadmin/static/scss/_backform.overrides.scss index 96a13c1..74c5d6f 100644 --- a/web/pgadmin/static/scss/_backform.overrides.scss +++ b/web/pgadmin/static/scss/_backform.overrides.scss @@ -32,3 +32,23 @@ z-index: 3; } } + + + +.fa-hidden { + visibility: hidden; +} + +.fa-clickable { + cursor: pointer; +} + +button.add-btn { + border: 2px solid #cccccc !important; + background-color: #e8e8e8 !important; + font-size: 12px; + border-radius: 5px 5px 5px 5px; + color: #000 !important; + padding-left: 3px !important; + padding-right: 3px !important; +} \ No newline at end of file -- 2.7.4 From 2e15f35965ef9328e8dabbb26f358a419ef56aef Mon Sep 17 00:00:00 2001 From: Atle Frenvik Sveen Date: Tue, 18 Sep 2018 11:54:23 +0200 Subject: [PATCH 9/9] fix GeoViewer preferences initialization (ref #3646) --- web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py index 4dc38b9..2df95ba 100644 --- a/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py +++ b/web/pgadmin/tools/sqleditor/utils/geometry_viewer_preferences.py @@ -27,17 +27,17 @@ fields = [ { 'name': 'maxZoom', 'type': 'int', - 'label': gettext('Max Zoom level'), + 'label': gettext('Max Zoom'), }, { 'name': 'attribution', 'type': 'text', - 'label': gettext('Attribution text'), + 'label': gettext('Attribution'), }, { 'name': 'subdomains', 'type': 'text', - 'label': gettext('subdomains for url'), + 'label': gettext('Subdomains'), }, ] @@ -80,7 +80,7 @@ def RegisterGeometryViewerPreferences(self): gettext("Map background layers"), 'orderedlist', default_layers, category_label=gettext('Geometry Viewer'), help_str=gettext( - 'Description here' + 'Add a new background layer for the map by entering a valid XYZ Tiles Url and a name. Other options relate to Leaflet TileLayer.' ), fields=fields ) -- 2.7.4