columbus3 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/README.md +122 -0
- data/bin/console +0 -0
- data/bin/setup +0 -0
- data/bower.json +25 -0
- data/bower_components/jquery/.bower.json +7 -20
- data/bower_components/jquery/AUTHORS.txt +301 -0
- data/bower_components/jquery/{MIT-LICENSE.txt → LICENSE.txt} +17 -2
- data/bower_components/jquery/README.md +67 -0
- data/bower_components/jquery/bower.json +2 -16
- data/bower_components/jquery/dist/core.js +476 -0
- data/bower_components/jquery/dist/jquery.js +3861 -2818
- data/bower_components/jquery/dist/jquery.min.js +4 -5
- data/bower_components/jquery/dist/jquery.min.map +1 -1
- data/bower_components/jquery/dist/jquery.slim.js +8160 -0
- data/bower_components/jquery/dist/jquery.slim.min.js +4 -0
- data/bower_components/jquery/dist/jquery.slim.min.map +1 -0
- data/bower_components/jquery/external/sizzle/LICENSE.txt +36 -0
- data/bower_components/jquery/{src → external}/sizzle/dist/sizzle.js +445 -240
- data/bower_components/jquery/external/sizzle/dist/sizzle.min.js +3 -0
- data/bower_components/jquery/external/sizzle/dist/sizzle.min.map +1 -0
- data/bower_components/jquery/src/.eslintrc.json +5 -0
- data/bower_components/jquery/src/ajax.js +174 -105
- data/bower_components/jquery/src/ajax/jsonp.js +27 -14
- data/bower_components/jquery/src/ajax/load.js +24 -23
- data/bower_components/jquery/src/ajax/parseXML.js +8 -6
- data/bower_components/jquery/src/ajax/script.js +25 -12
- data/bower_components/jquery/src/ajax/var/location.js +5 -0
- data/bower_components/jquery/src/ajax/var/nonce.js +4 -2
- data/bower_components/jquery/src/ajax/var/rquery.js +5 -3
- data/bower_components/jquery/src/ajax/xhr.js +76 -43
- data/bower_components/jquery/src/attributes.js +4 -2
- data/bower_components/jquery/src/attributes/attr.js +60 -60
- data/bower_components/jquery/src/attributes/classes.js +87 -71
- data/bower_components/jquery/src/attributes/prop.js +81 -32
- data/bower_components/jquery/src/attributes/support.js +11 -13
- data/bower_components/jquery/src/attributes/val.js +66 -37
- data/bower_components/jquery/src/callbacks.js +119 -90
- data/bower_components/jquery/src/core.js +108 -134
- data/bower_components/jquery/src/core/DOMEval.js +16 -0
- data/bower_components/jquery/src/core/access.js +21 -11
- data/bower_components/jquery/src/core/init.js +33 -28
- data/bower_components/jquery/src/core/nodeName.js +13 -0
- data/bower_components/jquery/src/core/parseHTML.js +39 -13
- data/bower_components/jquery/src/core/ready-no-deferred.js +96 -0
- data/bower_components/jquery/src/core/ready.js +40 -51
- data/bower_components/jquery/src/core/readyException.js +13 -0
- data/bower_components/jquery/src/core/stripAndCollapse.js +14 -0
- data/bower_components/jquery/src/core/support.js +20 -0
- data/bower_components/jquery/src/core/var/rsingleTag.js +5 -3
- data/bower_components/jquery/src/css.js +146 -158
- data/bower_components/jquery/src/css/addGetHookIf.js +7 -3
- data/bower_components/jquery/src/css/adjustCSS.js +71 -0
- data/bower_components/jquery/src/css/curCSS.js +22 -14
- data/bower_components/jquery/src/css/hiddenVisibleSelectors.js +8 -8
- data/bower_components/jquery/src/css/showHide.js +105 -0
- data/bower_components/jquery/src/css/support.js +69 -76
- data/bower_components/jquery/src/css/var/cssExpand.js +4 -2
- data/bower_components/jquery/src/css/var/getStyles.js +11 -6
- data/bower_components/jquery/src/css/var/isHiddenWithinTree.js +34 -0
- data/bower_components/jquery/src/css/var/rmargin.js +5 -3
- data/bower_components/jquery/src/css/var/rnumnonpx.js +4 -2
- data/bower_components/jquery/src/css/{swap.js → var/swap.js} +5 -7
- data/bower_components/jquery/src/data.js +67 -66
- data/bower_components/jquery/src/data/Data.js +87 -107
- data/bower_components/jquery/src/data/{accepts.js → var/acceptData.js} +6 -7
- data/bower_components/jquery/src/data/var/{data_priv.js → dataPriv.js} +4 -2
- data/bower_components/jquery/src/data/var/{data_user.js → dataUser.js} +4 -2
- data/bower_components/jquery/src/deferred.js +314 -72
- data/bower_components/jquery/src/deferred/exceptionHook.js +21 -0
- data/bower_components/jquery/src/deprecated.js +36 -9
- data/bower_components/jquery/src/dimensions.js +16 -10
- data/bower_components/jquery/src/effects.js +257 -206
- data/bower_components/jquery/src/effects/Tween.js +18 -9
- data/bower_components/jquery/src/effects/animatedSelector.js +7 -5
- data/bower_components/jquery/src/event.js +297 -419
- data/bower_components/jquery/src/event/ajax.js +13 -4
- data/bower_components/jquery/src/event/alias.js +13 -23
- data/bower_components/jquery/src/event/focusin.js +55 -0
- data/bower_components/jquery/src/event/support.js +5 -3
- data/bower_components/jquery/src/event/trigger.js +185 -0
- data/bower_components/jquery/src/exports/amd.js +5 -3
- data/bower_components/jquery/src/exports/global.js +8 -6
- data/bower_components/jquery/src/jquery.js +6 -2
- data/bower_components/jquery/src/manipulation.js +218 -310
- data/bower_components/jquery/src/manipulation/_evalUrl.js +9 -4
- data/bower_components/jquery/src/manipulation/buildFragment.js +104 -0
- data/bower_components/jquery/src/manipulation/getAll.js +32 -0
- data/bower_components/jquery/src/manipulation/setGlobalEval.js +22 -0
- data/bower_components/jquery/src/manipulation/support.js +11 -8
- data/bower_components/jquery/src/manipulation/var/rcheckableType.js +5 -3
- data/bower_components/jquery/src/manipulation/var/rscriptType.js +5 -0
- data/bower_components/jquery/src/manipulation/var/rtagName.js +5 -0
- data/bower_components/jquery/src/manipulation/wrapMap.js +29 -0
- data/bower_components/jquery/src/offset.js +75 -53
- data/bower_components/jquery/src/queue.js +26 -23
- data/bower_components/jquery/src/queue/delay.js +8 -6
- data/bower_components/jquery/src/selector-native.js +133 -68
- data/bower_components/jquery/src/selector-sizzle.js +10 -5
- data/bower_components/jquery/src/selector.js +3 -1
- data/bower_components/jquery/src/serialize.js +52 -33
- data/bower_components/jquery/src/traversing.js +61 -69
- data/bower_components/jquery/src/traversing/findFilter.js +37 -31
- data/bower_components/jquery/src/traversing/var/dir.js +22 -0
- data/bower_components/jquery/src/traversing/var/rneedsContext.js +4 -2
- data/bower_components/jquery/src/traversing/var/siblings.js +17 -0
- data/bower_components/jquery/src/var/ObjectFunctionString.js +7 -0
- data/bower_components/jquery/src/var/arr.js +4 -2
- data/bower_components/jquery/src/var/class2type.js +4 -2
- data/bower_components/jquery/src/var/concat.js +4 -2
- data/bower_components/jquery/src/var/document.js +5 -0
- data/bower_components/jquery/src/var/documentElement.js +7 -0
- data/bower_components/jquery/src/var/fnToString.js +7 -0
- data/bower_components/jquery/src/var/getProto.js +5 -0
- data/bower_components/jquery/src/var/hasOwn.js +4 -2
- data/bower_components/jquery/src/var/indexOf.js +4 -2
- data/bower_components/jquery/src/var/pnum.js +5 -3
- data/bower_components/jquery/src/var/push.js +4 -2
- data/bower_components/jquery/src/var/rcssNum.js +9 -0
- data/bower_components/jquery/src/var/rnothtmlwhite.js +8 -0
- data/bower_components/jquery/src/var/slice.js +4 -2
- data/bower_components/jquery/src/var/support.js +4 -2
- data/bower_components/jquery/src/var/toString.js +4 -2
- data/bower_components/jquery/src/wrap.js +24 -26
- data/bower_components/leaflet-providers/.bower.json +6 -7
- data/bower_components/leaflet-providers/CHANGELOG.md +62 -0
- data/bower_components/leaflet-providers/README.md +12 -3
- data/bower_components/leaflet-providers/bower.json +1 -1
- data/bower_components/leaflet-providers/leaflet-providers.js +133 -92
- data/bower_components/leaflet-providers/package.json +14 -7
- data/bower_components/leaflet/.bower.json +10 -14
- data/bower_components/leaflet/CHANGELOG.md +648 -3
- data/bower_components/leaflet/CONTRIBUTING.md +88 -33
- data/bower_components/leaflet/ISSUE_TEMPLATE.md +25 -0
- data/bower_components/leaflet/Jakefile.js +73 -14
- data/bower_components/leaflet/LICENSE +1 -1
- data/bower_components/leaflet/PLUGIN-GUIDE.md +97 -3
- data/bower_components/leaflet/README.md +6 -8
- data/bower_components/leaflet/bower.json +3 -9
- data/bower_components/leaflet/dist/images/layers-2x.png +0 -0
- data/bower_components/leaflet/dist/images/layers.png +0 -0
- data/bower_components/leaflet/dist/images/marker-icon-2x.png +0 -0
- data/bower_components/leaflet/dist/images/marker-icon.png +0 -0
- data/bower_components/leaflet/dist/images/marker-shadow.png +0 -0
- data/bower_components/leaflet/dist/leaflet-src.js +12301 -7898
- data/bower_components/leaflet/dist/leaflet-src.js.map +1 -0
- data/bower_components/leaflet/dist/leaflet.css +196 -43
- data/bower_components/leaflet/dist/leaflet.js +6 -9
- data/bower_components/leaflet/dist/leaflet.js.map +1 -0
- data/bower_components/leaflet/docs/CNAME +1 -0
- data/bower_components/leaflet/docs/Gemfile +4 -0
- data/bower_components/leaflet/docs/_config.yml +19 -0
- data/bower_components/leaflet/docs/_includes/frame.html +9 -0
- data/bower_components/leaflet/docs/_includes/tutorial_link.html +8 -0
- data/bower_components/leaflet/docs/_layouts/post.html +30 -0
- data/bower_components/leaflet/docs/_layouts/redirected.html +14 -0
- data/bower_components/leaflet/docs/_layouts/tutorial.html +9 -0
- data/bower_components/leaflet/docs/_layouts/tutorial_frame.html +32 -0
- data/bower_components/leaflet/docs/_layouts/tutorial_v2.html +9 -0
- data/bower_components/leaflet/docs/_layouts/v2.html +159 -0
- data/bower_components/leaflet/docs/_posts/2012-07-30-leaflet-0-4-released.md +240 -0
- data/bower_components/leaflet/docs/_posts/2012-08-07-leaflet-0-4-3-and-a-new-tutorial.md +47 -0
- data/bower_components/leaflet/docs/_posts/2012-08-20-guest-post-markerclusterer-0-1-released.md +112 -0
- data/bower_components/leaflet/docs/_posts/2012-10-25-leaflet-0-4-5-bugfix-release-and-plans-for-0.5.md +36 -0
- data/bower_components/leaflet/docs/_posts/2013-01-17-leaflet-0-5-released.md +24 -0
- data/bower_components/leaflet/docs/_posts/2013-02-20-guest-post-draw.md +146 -0
- data/bower_components/leaflet/docs/_posts/2013-06-26-leaflet-0-6-released-dc-code-sprint-mapbox.md +31 -0
- data/bower_components/leaflet/docs/_posts/2013-06-28-leaflet-plugin-authoring-guide.md +111 -0
- data/bower_components/leaflet/docs/_posts/2013-11-18-leaflet-0-7-released-plans-for-future.md +56 -0
- data/bower_components/leaflet/docs/_posts/2015-07-01-leaflet-is-alive-and-kicking.md +21 -0
- data/bower_components/leaflet/docs/_posts/2015-07-15-leaflet-1.0-beta1-released.md +60 -0
- data/bower_components/leaflet/docs/_posts/2015-09-01-leaflet-0.7.4-released.md +29 -0
- data/bower_components/leaflet/docs/_posts/2015-10-14-leaflet-1.0-beta2-released.md +35 -0
- data/bower_components/leaflet/docs/_posts/2016-03-20-debugging-touch-interactions.md +101 -0
- data/bower_components/leaflet/docs/_posts/2016-04-18-leaflet-1.0-rc1.md +78 -0
- data/bower_components/leaflet/docs/_posts/2016-07-16-leaflet-1.0-rc2.md +60 -0
- data/bower_components/leaflet/docs/_posts/2016-08-05-leaflet-1.0-rc3.md +53 -0
- data/bower_components/leaflet/docs/_posts/2016-09-27-leaflet-1.0-final.md +50 -0
- data/bower_components/leaflet/docs/_posts/2016-11-21-leaflet-1.0.2.md +25 -0
- data/bower_components/leaflet/docs/_posts/2017-01-23-leaflet-1.0.3.md +27 -0
- data/bower_components/leaflet/docs/atom.xml +29 -0
- data/bower_components/leaflet/docs/blog.md +24 -0
- data/bower_components/leaflet/docs/docs/css/main.css +1092 -0
- data/bower_components/leaflet/docs/docs/css/normalize.css +426 -0
- data/bower_components/leaflet/docs/docs/highlight/LICENSE +24 -0
- data/bower_components/leaflet/docs/docs/highlight/highlight.pack.js +1 -0
- data/bower_components/leaflet/docs/docs/highlight/styles/github-gist.css +211 -0
- data/bower_components/leaflet/docs/docs/images/2016-03-20-prosthetic-hand-zooming.gif +0 -0
- data/bower_components/leaflet/docs/docs/images/2016-04-18-inheritances.gif +0 -0
- data/bower_components/leaflet/docs/docs/images/2016-04-18-leaflet-toilet-paper.jpeg +0 -0
- data/bower_components/leaflet/docs/docs/images/2016-04-18-madrid-leaflet-864px.jpg +0 -0
- data/bower_components/leaflet/docs/docs/images/2016-07-18-remote-session.png +0 -0
- data/bower_components/leaflet/docs/docs/images/2016-07-18-tooltip.png +0 -0
- data/bower_components/leaflet/docs/docs/images/2016-08-03-iraq-hacking.jpg +0 -0
- data/bower_components/leaflet/docs/docs/images/favicon.ico +0 -0
- data/bower_components/leaflet/docs/docs/images/forum-round.png +0 -0
- data/bower_components/leaflet/docs/docs/images/github-round.png +0 -0
- data/bower_components/leaflet/docs/docs/images/logo.png +0 -0
- data/bower_components/leaflet/docs/docs/images/logos.png +0 -0
- data/bower_components/leaflet/docs/docs/images/sprite.png +0 -0
- data/bower_components/leaflet/docs/docs/images/sprite.svg +75 -0
- data/bower_components/leaflet/docs/docs/images/twitter-round.png +0 -0
- data/bower_components/leaflet/docs/docs/images/twitter.png +0 -0
- data/bower_components/leaflet/docs/docs/js/docs.js +52 -0
- data/bower_components/leaflet/docs/download.md +95 -0
- data/bower_components/leaflet/docs/examples.md +125 -0
- data/bower_components/leaflet/docs/examples/choropleth-example.md +5 -0
- data/bower_components/leaflet/docs/examples/choropleth.md +5 -0
- data/bower_components/leaflet/docs/examples/choropleth/example-basic.md +20 -0
- data/bower_components/leaflet/docs/examples/choropleth/example-color.md +46 -0
- data/bower_components/leaflet/docs/examples/choropleth/example.md +159 -0
- data/bower_components/leaflet/docs/examples/choropleth/index.md +232 -0
- data/bower_components/leaflet/docs/examples/choropleth/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/choropleth/us-states.js +54 -0
- data/bower_components/leaflet/docs/examples/crs-simple/crs-simple-example1.md +16 -0
- data/bower_components/leaflet/docs/examples/crs-simple/crs-simple-example2.md +20 -0
- data/bower_components/leaflet/docs/examples/crs-simple/crs-simple-example3.md +38 -0
- data/bower_components/leaflet/docs/examples/crs-simple/crs-simple.md +117 -0
- data/bower_components/leaflet/docs/examples/crs-simple/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/crs-simple/uqm_map_400px.png +0 -0
- data/bower_components/leaflet/docs/examples/crs-simple/uqm_map_detail.png +0 -0
- data/bower_components/leaflet/docs/examples/crs-simple/uqm_map_full.png +0 -0
- data/bower_components/leaflet/docs/examples/custom-icons-example.md +5 -0
- data/bower_components/leaflet/docs/examples/custom-icons.md +5 -0
- data/bower_components/leaflet/docs/examples/custom-icons/example-one-icon.md +27 -0
- data/bower_components/leaflet/docs/examples/custom-icons/example.md +31 -0
- data/bower_components/leaflet/docs/examples/custom-icons/index.md +79 -0
- data/bower_components/leaflet/docs/examples/custom-icons/leaf-green.png +0 -0
- data/bower_components/leaflet/docs/examples/custom-icons/leaf-orange.png +0 -0
- data/bower_components/leaflet/docs/examples/custom-icons/leaf-red.png +0 -0
- data/bower_components/leaflet/docs/examples/custom-icons/leaf-shadow.png +0 -0
- data/bower_components/leaflet/docs/examples/custom-icons/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/extending/canvascircles.md +37 -0
- data/bower_components/leaflet/docs/examples/extending/class-diagram.md +24 -0
- data/bower_components/leaflet/docs/examples/extending/class-diagram.png +0 -0
- data/bower_components/leaflet/docs/examples/extending/class-diagram.txt +100 -0
- data/bower_components/leaflet/docs/examples/extending/extending-1-classes.md +196 -0
- data/bower_components/leaflet/docs/examples/extending/extending-2-layers.md +210 -0
- data/bower_components/leaflet/docs/examples/extending/extending-3-controls.md +100 -0
- data/bower_components/leaflet/docs/examples/extending/gridcoords.md +32 -0
- data/bower_components/leaflet/docs/examples/extending/kittenlayer.md +29 -0
- data/bower_components/leaflet/docs/examples/extending/pixelorigin.md +90 -0
- data/bower_components/leaflet/docs/examples/extending/thumbnail-1.png +0 -0
- data/bower_components/leaflet/docs/examples/extending/thumbnail-2.png +0 -0
- data/bower_components/leaflet/docs/examples/extending/thumbnail-3.png +0 -0
- data/bower_components/leaflet/docs/examples/extending/tilt.md +59 -0
- data/bower_components/leaflet/docs/examples/extending/watermark.md +36 -0
- data/bower_components/leaflet/docs/examples/geojson-example.md +5 -0
- data/bower_components/leaflet/docs/examples/geojson.md +5 -0
- data/bower_components/leaflet/docs/examples/geojson/baseball-marker.png +0 -0
- data/bower_components/leaflet/docs/examples/geojson/example.md +78 -0
- data/bower_components/leaflet/docs/examples/geojson/geojson-example.html +89 -0
- data/bower_components/leaflet/docs/examples/geojson/geojson.html +281 -0
- data/bower_components/leaflet/docs/examples/geojson/index.md +205 -0
- data/bower_components/leaflet/docs/examples/geojson/sample-geojson.js +248 -0
- data/bower_components/leaflet/docs/examples/geojson/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/layers-control-example.md +5 -0
- data/bower_components/leaflet/docs/examples/layers-control.md +5 -0
- data/bower_components/leaflet/docs/examples/layers-control/example.md +38 -0
- data/bower_components/leaflet/docs/examples/layers-control/index.md +72 -0
- data/bower_components/leaflet/docs/examples/layers-control/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/map-panes-example.md +5 -0
- data/bower_components/leaflet/docs/examples/map-panes.md +5 -0
- data/bower_components/leaflet/docs/examples/map-panes/eu-countries.js +79 -0
- data/bower_components/leaflet/docs/examples/map-panes/example.md +38 -0
- data/bower_components/leaflet/docs/examples/map-panes/index.md +105 -0
- data/bower_components/leaflet/docs/examples/map-panes/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/mobile-example.md +5 -0
- data/bower_components/leaflet/docs/examples/mobile.md +5 -0
- data/bower_components/leaflet/docs/examples/mobile/example.md +42 -0
- data/bower_components/leaflet/docs/examples/mobile/index.md +72 -0
- data/bower_components/leaflet/docs/examples/mobile/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/quick-start-example.md +5 -0
- data/bower_components/leaflet/docs/examples/quick-start.md +5 -0
- data/bower_components/leaflet/docs/examples/quick-start/example-basic.md +19 -0
- data/bower_components/leaflet/docs/examples/quick-start/example-overlays.md +35 -0
- data/bower_components/leaflet/docs/examples/quick-start/example-popups.md +37 -0
- data/bower_components/leaflet/docs/examples/quick-start/example.md +46 -0
- data/bower_components/leaflet/docs/examples/quick-start/index.md +143 -0
- data/bower_components/leaflet/docs/examples/quick-start/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/video-overlay/example-bounds.md +23 -0
- data/bower_components/leaflet/docs/examples/video-overlay/example-nocontrols.md +31 -0
- data/bower_components/leaflet/docs/examples/video-overlay/example.md +58 -0
- data/bower_components/leaflet/docs/examples/video-overlay/index.md +122 -0
- data/bower_components/leaflet/docs/examples/video-overlay/thumbnail.gif +0 -0
- data/bower_components/leaflet/docs/examples/wms/qgis-wms-layers.png +0 -0
- data/bower_components/leaflet/docs/examples/wms/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/examples/wms/wms-example-crs.md +18 -0
- data/bower_components/leaflet/docs/examples/wms/wms-example1.md +16 -0
- data/bower_components/leaflet/docs/examples/wms/wms-example2.md +16 -0
- data/bower_components/leaflet/docs/examples/wms/wms-example3.md +34 -0
- data/bower_components/leaflet/docs/examples/wms/wms-example4.md +29 -0
- data/bower_components/leaflet/docs/examples/wms/wms.md +157 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/example-delta.md +40 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/example-fractional.md +56 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/example-scale.md +29 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/example-setzoom.md +44 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/example-zero.md +19 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/index.md +275 -0
- data/bower_components/leaflet/docs/examples/zoom-levels/thumbnail.png +0 -0
- data/bower_components/leaflet/docs/index.html +218 -0
- data/bower_components/leaflet/docs/plugins.md +3854 -0
- data/bower_components/leaflet/docs/reference-0.7.7.html +6424 -0
- data/bower_components/leaflet/docs/reference-1.0.0.html +22889 -0
- data/bower_components/leaflet/docs/reference-1.0.2.html +23382 -0
- data/bower_components/leaflet/docs/reference-1.0.3.html +23495 -0
- data/bower_components/leaflet/docs/reference-tpl.html +89 -0
- data/bower_components/leaflet/docs/reference-versions.html +16 -0
- data/bower_components/leaflet/docs/reference.html +3 -0
- data/bower_components/leaflet/package.json +77 -16
- data/columbus3.gemspec +1 -1
- data/doc/ChangeLog.org +10 -0
- data/doc/manual.txt +122 -0
- data/doc/todo.org +63 -0
- data/exe/columbus3 +2 -246
- data/lib/columbus3.rb +12 -7
- data/lib/columbus3/cli/command_semantics.rb +352 -0
- data/lib/columbus3/cli/command_syntax.rb +103 -0
- data/lib/columbus3/metadata/query_parser.racc +21 -7
- data/lib/columbus3/metadata/query_parser.tab.rb +34 -34
- data/lib/columbus3/metadata/sidecar.rb +1 -1
- data/lib/columbus3/renderer/flot_renderer.rb +3 -8
- data/lib/columbus3/renderer/leaflet_renderer.rb +18 -29
- data/lib/columbus3/renderer/sanitizer.rb +8 -0
- data/lib/columbus3/v900track/gpx2v900.rb +31 -0
- data/lib/columbus3/v900track/v900track.rb +34 -8
- data/lib/columbus3/v900track/v900waypoint.rb +9 -0
- data/lib/columbus3/version.rb +1 -1
- data/lib/html/flot.html.erb +6 -6
- data/lib/html/show.html.erb +53 -76
- data/lib/html/track.js.erb +58 -12
- metadata +222 -23
- data/README.textile +0 -67
- data/bower_components/jquery/src/ajax/parseJSON.js +0 -13
- data/bower_components/jquery/src/css/defaultDisplay.js +0 -70
- data/bower_components/jquery/src/css/var/isHidden.js +0 -13
- data/bower_components/jquery/src/intro.js +0 -44
- data/bower_components/jquery/src/outro.js +0 -1
- data/bower_components/jquery/src/sizzle/dist/sizzle.min.js +0 -3
- data/bower_components/jquery/src/sizzle/dist/sizzle.min.map +0 -1
- data/bower_components/jquery/src/var/rnotwhite.js +0 -3
- data/bower_components/jquery/src/var/strundefined.js +0 -3
- data/bower_components/leaflet/component.json +0 -20
data/lib/columbus3.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
require 'columbus3/metadata/query_parser.tab'
|
2
|
+
require 'columbus3/metadata/sidecar'
|
3
|
+
require 'columbus3/v900track/gpx2v900'
|
4
|
+
require 'columbus3/v900track/v900track'
|
5
|
+
require 'columbus3/v900track/v900waypoint'
|
6
|
+
require 'columbus3/renderer/leaflet_renderer'
|
7
|
+
require 'columbus3/renderer/flot_renderer'
|
8
|
+
|
9
|
+
require 'columbus3/cli/command_syntax'
|
10
|
+
require 'columbus3/cli/command_semantics'
|
11
|
+
|
12
|
+
require 'columbus3/version'
|
@@ -0,0 +1,352 @@
|
|
1
|
+
require 'columbus3/version'
|
2
|
+
require 'find'
|
3
|
+
require 'readline'
|
4
|
+
|
5
|
+
module Columbus3
|
6
|
+
module CommandSemantics
|
7
|
+
APPNAME = 'columbus3'
|
8
|
+
VERSION = Columbus3::VERSION
|
9
|
+
MAN = <<EOS
|
10
|
+
NAME
|
11
|
+
#{APPNAME} -- manage Columbus V900 and V990 tracks from the command line
|
12
|
+
|
13
|
+
SYNOPSYS
|
14
|
+
#{APPNAME} [-h|-v]
|
15
|
+
#{APPNAME} command [options] [args]
|
16
|
+
|
17
|
+
DESCRIPTION
|
18
|
+
|
19
|
+
columbus3 manages Columbus V900 and V990 tracks from the command line,
|
20
|
+
allowing a user to associate a sidecar file with the main information
|
21
|
+
about a track, searching tracks (through sidecar files), displaying
|
22
|
+
tracks on a map.
|
23
|
+
|
24
|
+
EXAMPLES
|
25
|
+
|
26
|
+
#{APPNAME} -h # get syntax of each command
|
27
|
+
columbus3 process 11010101.CSV # generate a sidecar file
|
28
|
+
columbus3 search 'location ~ "USA"' # get tracks in the USA
|
29
|
+
columbus3 show 11010101.CSV 11010201.CSV # show tracks on a map (_show.html)
|
30
|
+
columbus3 graph 11010101.CSV # show info about a track (_graph.html)
|
31
|
+
|
32
|
+
if you do not want to type columbus3 each type, you can invoke a console:
|
33
|
+
|
34
|
+
columbus3 console
|
35
|
+
columbus3:000> process 11010101.CSV
|
36
|
+
columbus3:001> show 11010101.CSV
|
37
|
+
columbus3:002>
|
38
|
+
|
39
|
+
columbus3 also has a function to convert a GPX into a bunch of CSV
|
40
|
+
files (which you can then process with the other commands), with some
|
41
|
+
limitations (see below).
|
42
|
+
|
43
|
+
The command is useful if you are using different loggers for generating your
|
44
|
+
tracks:
|
45
|
+
|
46
|
+
columbus3 convert file.gpx
|
47
|
+
|
48
|
+
will generate
|
49
|
+
|
50
|
+
file-1.csv
|
51
|
+
file-2.csv
|
52
|
+
...
|
53
|
+
|
54
|
+
one per track in the GPX file.
|
55
|
+
|
56
|
+
**CSV export limitations** The Columbus V900 format has fields with fixed width,
|
57
|
+
and uses ^@ as a filler. The CSV file generated by the convert command generates fields
|
58
|
+
of variable width (standard CSV files, I dare say). The heading field is not computed
|
59
|
+
and the field is filled with -1.
|
60
|
+
|
61
|
+
Piping commands. You can pipe the output of a search command to show, using
|
62
|
+
the following syntax:
|
63
|
+
|
64
|
+
columbus3 search 'location ~ "USA"' --fields path | columbus3 show --sidecar
|
65
|
+
|
66
|
+
The option --fields shows only the pathname of the files found; the option
|
67
|
+
--sidecar removes the .yaml extension from the list of files found.
|
68
|
+
|
69
|
+
SEARCH SYNTAX
|
70
|
+
|
71
|
+
>>> DON'T FORGET TO EMBED YOUR QUERY IN SINGLE QUOTES <<<
|
72
|
+
|
73
|
+
Terms you can search for:
|
74
|
+
|
75
|
+
location, start_location, end_location
|
76
|
+
date, start_date, end_date
|
77
|
+
year
|
78
|
+
duration
|
79
|
+
max_speed
|
80
|
+
min_height
|
81
|
+
max_height
|
82
|
+
|
83
|
+
Numerical operators:
|
84
|
+
<, <=, ==, >=, >
|
85
|
+
|
86
|
+
String operators (locations):
|
87
|
+
~ (contains), == (is exactly)
|
88
|
+
|
89
|
+
Complex Terms:
|
90
|
+
Use "and" and "or" to build complex queries
|
91
|
+
|
92
|
+
Examples of simple searches
|
93
|
+
'location ~ "USA"' any track whose start or end location contains USA
|
94
|
+
'date > 2015-02-14' any track whose start or end date is after Feb 14, 2015
|
95
|
+
'year == 2015' any track whose start or end date is in 2015
|
96
|
+
'duration <= 01:02:03' any track with a duration of less than 1h, 2min, and 3secs
|
97
|
+
'max_speed > 120' any track with a max speed greater than 120 km/h
|
98
|
+
'min_height == 10' any track with a min height lower than 10 meters
|
99
|
+
|
100
|
+
Examples of complex searches
|
101
|
+
'location ~ "USA" and start_date >= 2015-01-01' tracks in the USA after or on Jan 1, 2015
|
102
|
+
'start_location ~ "Trenton" and end_location ~ "New York"' trips from Trenton to New York
|
103
|
+
|
104
|
+
List of supported fields in output
|
105
|
+
path -> relative path of the CSV file
|
106
|
+
filename -> basename of the CSV file
|
107
|
+
start_location -> start location
|
108
|
+
end_location -> end location
|
109
|
+
start_date -> start date (and time)
|
110
|
+
end_date -> end date (and time)
|
111
|
+
duration -> duration in seconds
|
112
|
+
min_speed -> minimum speed in km/h
|
113
|
+
max_speed -> maximum speed in km/h
|
114
|
+
min_height -> minimum height in meters
|
115
|
+
max_height -> maximum height in meters
|
116
|
+
|
117
|
+
VERSION
|
118
|
+
This is version #{VERSION}
|
119
|
+
|
120
|
+
LICENSE
|
121
|
+
MIT
|
122
|
+
|
123
|
+
Columbus3 uses leaflet, leafleft-providers, flot, and jquery. They
|
124
|
+
are distributed under a different license: see their websites for more
|
125
|
+
details (or have a look at the license file shipped with the Gem)
|
126
|
+
|
127
|
+
SEE ALSO
|
128
|
+
If you are looking for a full graphical client, you might want to
|
129
|
+
download Columbus from http://www.minimalbit.com
|
130
|
+
|
131
|
+
https://github.com/avillafiorita/columbus3
|
132
|
+
EOS
|
133
|
+
|
134
|
+
#
|
135
|
+
# Main App Starts Here!
|
136
|
+
#
|
137
|
+
def self.version opts = nil, argv = []
|
138
|
+
puts "#{APPNAME} version #{VERSION}"
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.man opts = nil, argv = []
|
142
|
+
puts MAN
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.help opts = nil, argv = []
|
146
|
+
all_commands = CommandSyntax.commands
|
147
|
+
|
148
|
+
if argv != []
|
149
|
+
argv.map { |x| puts all_commands[x.to_sym][0] }
|
150
|
+
else
|
151
|
+
puts "#{APPNAME} command [options] [args]"
|
152
|
+
puts ""
|
153
|
+
puts "Available commands:"
|
154
|
+
puts ""
|
155
|
+
all_commands.keys.each do |key|
|
156
|
+
puts " " + all_commands[key][0].banner
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def self.console opts, argv = []
|
162
|
+
all_commands = CommandSyntax.commands
|
163
|
+
all_commands.delete(:console)
|
164
|
+
|
165
|
+
i = 0
|
166
|
+
while true
|
167
|
+
string = Readline.readline("#{APPNAME}:%03d> " % i, true)
|
168
|
+
string.gsub!(/^#{APPNAME} /, "") # as a courtesy, remove any leading appname string
|
169
|
+
if string == "exit" or string == "quit" or string == "." then
|
170
|
+
exit 0
|
171
|
+
end
|
172
|
+
reps all_commands, string.split(' ')
|
173
|
+
i = i + 1
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
#
|
179
|
+
# APP SPECIFIC COMMANDS
|
180
|
+
#
|
181
|
+
def self.process opts, argv
|
182
|
+
force = opts[:force]
|
183
|
+
|
184
|
+
argv.each do |arg|
|
185
|
+
track = V900Track.new filename: arg
|
186
|
+
sidecar = Columbus3::Sidecar.new arg
|
187
|
+
if sidecar.exist? and not force
|
188
|
+
puts "Sidecar file for #{track.filename} already exists. Use --force if you want to overwrite it."
|
189
|
+
else
|
190
|
+
printf "Processing %s ...", track.filename
|
191
|
+
sidecar.metadata = track.metadata
|
192
|
+
sidecar.save
|
193
|
+
puts " done!"
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def self.search opts, argv
|
199
|
+
debug = opts[:debug]
|
200
|
+
directory = opts[:dir] || "."
|
201
|
+
recurse = opts[:recurse]
|
202
|
+
fields = opts[:fields].any? ? opts[:fields].map { |x| x.to_sym } : [:path, :filename, :start_location, :end_location, :start_date, :end_date, :duration, :min_speed, :max_speed, :min_height, :max_height]
|
203
|
+
|
204
|
+
if recurse then
|
205
|
+
files = Find.find(directory).select { |e| File.extname(e) == ".yaml" }
|
206
|
+
else
|
207
|
+
files = Dir.glob(File.join(directory, "*.yaml"))
|
208
|
+
end
|
209
|
+
query = QueryParser.new.parse(argv.join(" "))
|
210
|
+
|
211
|
+
if debug then
|
212
|
+
puts "Searched files: #{files.join(",")}"
|
213
|
+
puts "Searched files count: #{files.size}"
|
214
|
+
puts "Processed query: #{query}"
|
215
|
+
puts "Fields: #{fields}"
|
216
|
+
else
|
217
|
+
sidecar_search = Columbus3::SidecarSearch.new
|
218
|
+
sidecar_search.load files
|
219
|
+
match = sidecar_search.search query
|
220
|
+
match.each do |m|
|
221
|
+
string = fields.map { |x| "#{m[x]}" }.join("\t")
|
222
|
+
printf "%s\n", string
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def self.show opts, args
|
228
|
+
filename = opts[:filename] || "_show.html"
|
229
|
+
force = opts[:force]
|
230
|
+
sidecar = opts[:sidecar]
|
231
|
+
|
232
|
+
# build the argument list, which are either provided from the command line
|
233
|
+
# or, if args, is empty, from the standard input
|
234
|
+
files = args == [] ? STDIN.read.split("\n") : args
|
235
|
+
|
236
|
+
# remove .yaml from files, if required to do so
|
237
|
+
pruned_args = sidecar ? files.map { |x| x.gsub(/\.(YAML|yaml)$/, '') } : files
|
238
|
+
|
239
|
+
pruned_args.each do |arg|
|
240
|
+
# generate the js file(s), if not already existing or forced to
|
241
|
+
# do so by the force directive
|
242
|
+
if force or not File.exist? arg
|
243
|
+
printf "Creating json file for #{arg} ..."
|
244
|
+
complete = true
|
245
|
+
else
|
246
|
+
puts "Json file for #{arg} already exists (--force to force updating)"
|
247
|
+
complete = false
|
248
|
+
end
|
249
|
+
Columbus3::LeafletRenderer::to_leaflet arg, force
|
250
|
+
puts "done!" if complete
|
251
|
+
end
|
252
|
+
if force or not File.exist? filename
|
253
|
+
printf "Creating #{filename} ..."
|
254
|
+
complete = true
|
255
|
+
else
|
256
|
+
puts "#{filename} already exists (--force to force updating)"
|
257
|
+
complete = false
|
258
|
+
end
|
259
|
+
Columbus3::LeafletRenderer::show(filename, pruned_args) if args
|
260
|
+
puts "done!" if complete
|
261
|
+
puts "You might now want to open #{filename}."
|
262
|
+
end
|
263
|
+
|
264
|
+
def self.graph opts, args
|
265
|
+
filename = opts[:filename] || "_graph.html"
|
266
|
+
force = opts[:force]
|
267
|
+
|
268
|
+
input_filename = args[0]
|
269
|
+
if input_filename
|
270
|
+
if force or not File.exist? input_filename
|
271
|
+
printf "Creating javascript graph data for #{input_filename} ..."
|
272
|
+
complete = true
|
273
|
+
else
|
274
|
+
puts "Javascript graph data for #{input_filename} already exists (--force to force updating)"
|
275
|
+
complete = false
|
276
|
+
end
|
277
|
+
Columbus3::FlotRenderer::to_graph_data input_filename, force
|
278
|
+
puts "done!" if complete
|
279
|
+
|
280
|
+
if force or not File.exist? arg
|
281
|
+
printf "Creating #{filename} ..."
|
282
|
+
complete = true
|
283
|
+
else
|
284
|
+
puts "#{filename} already exists (--force to force updating)"
|
285
|
+
complete = false
|
286
|
+
end
|
287
|
+
Columbus3::FlotRenderer::show filename, input_filename
|
288
|
+
puts "done!" if complete
|
289
|
+
puts "You might now want to open #{filename}."
|
290
|
+
else
|
291
|
+
puts "Error: please specify a track file"
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
def self.convert opts, args
|
296
|
+
force = opts[:force]
|
297
|
+
|
298
|
+
input_filename = args[0]
|
299
|
+
|
300
|
+
if input_filename
|
301
|
+
tracks = GPX2V900::gpx2v900 input_filename
|
302
|
+
tracks.each do |track|
|
303
|
+
if File.exist?(track.filename) and not force
|
304
|
+
puts "Error: #{track.filename} already exists (--force to force updating)"
|
305
|
+
else
|
306
|
+
track.save
|
307
|
+
puts "Track #{track.filename} created"
|
308
|
+
end
|
309
|
+
end
|
310
|
+
else
|
311
|
+
puts "Error: please specify a track file"
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
def self.split opts, args
|
316
|
+
end
|
317
|
+
|
318
|
+
def self.export opts, args
|
319
|
+
end
|
320
|
+
|
321
|
+
# read-eval-print step
|
322
|
+
def self.reps all_commands, argv
|
323
|
+
if argv == []
|
324
|
+
CommandSemantics.help
|
325
|
+
exit 0
|
326
|
+
else
|
327
|
+
command = argv[0]
|
328
|
+
syntax_and_semantics = all_commands[command.to_sym]
|
329
|
+
if syntax_and_semantics
|
330
|
+
opts = syntax_and_semantics[0]
|
331
|
+
function = syntax_and_semantics[1]
|
332
|
+
|
333
|
+
begin
|
334
|
+
parser = Slop::Parser.new(opts)
|
335
|
+
|
336
|
+
result = parser.parse(argv[1..-1])
|
337
|
+
options = result.to_hash
|
338
|
+
arguments = result.arguments
|
339
|
+
|
340
|
+
eval "CommandSemantics::#{function}(options, arguments)"
|
341
|
+
rescue Slop::Error => e
|
342
|
+
puts "#{APPNAME}: #{e}"
|
343
|
+
rescue Exception => e
|
344
|
+
puts e
|
345
|
+
end
|
346
|
+
else
|
347
|
+
puts "#{APPNAME}: '#{command}' is not a valid command. See '#{APPNAME} help'"
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'slop'
|
2
|
+
|
3
|
+
module Columbus3
|
4
|
+
module CommandSyntax
|
5
|
+
# return a hash with all the commands and their options
|
6
|
+
def self.commands
|
7
|
+
h = Hash.new
|
8
|
+
self.methods.each do |method|
|
9
|
+
if method.to_s.include?("_opts") then
|
10
|
+
h = h.merge(eval(method.to_s))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
return h
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def self.version_opts
|
19
|
+
opts = Slop::Options.new
|
20
|
+
opts.banner = "version -- print version information"
|
21
|
+
return { :version => [opts, :version] }
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.console_opts
|
25
|
+
opts = Slop::Options.new
|
26
|
+
opts.banner = "console [options] -- Enter the console"
|
27
|
+
opts.string "-f", "--filename", "Password file to encrypt. Write to <file>.enc"
|
28
|
+
return { :console => [opts, :console] }
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.man_opts
|
32
|
+
opts = Slop::Options.new
|
33
|
+
opts.banner = "man -- print a manual page"
|
34
|
+
return { :man => [opts, :man] }
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.help_opts
|
38
|
+
opts = Slop::Options.new
|
39
|
+
opts.banner = "help [command] -- print usage string"
|
40
|
+
return { :help => [opts, :help] }
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.process_opts
|
44
|
+
opts = Slop::Options.new
|
45
|
+
opts.banner = "process [track ...] -- generate sidecar files for given tracks"
|
46
|
+
opts.boolean "-f", "--force", "Overwrite existing sidecar file"
|
47
|
+
|
48
|
+
return { process: [opts, :process] }
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.search_opts
|
52
|
+
opts = Slop::Options.new
|
53
|
+
opts.banner = "search [-r] [--dir directory] [--fields fields] query -- search for tracks matching query"
|
54
|
+
|
55
|
+
opts.boolean "--debug", "Show how the query is processed"
|
56
|
+
opts.boolean "-r", "--recurse", "Recurse in subdirectories"
|
57
|
+
opts.string "-d", "--dir", "Directory to search"
|
58
|
+
opts.array "--fields", "Comma separated list of fields to print"
|
59
|
+
|
60
|
+
return { search: [opts, :search] }
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.show_opts
|
64
|
+
opts = Slop::Options.new
|
65
|
+
opts.banner = "show [--filename filename] [--force] [track ...] -- view one or more tracks (use stdin if no track)"
|
66
|
+
|
67
|
+
opts.string "-f", "--filename=", "Output filename (default is _show.html)"
|
68
|
+
opts.boolean "--force", "Force rewriting of the js file, even if it already exists"
|
69
|
+
opts.boolean "--sidecar", "Pass sidecar files rather than CSV files (use it when piping searches)"
|
70
|
+
|
71
|
+
return { show: [opts, :show] }
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.graph_opts
|
75
|
+
opts = Slop::Options.new
|
76
|
+
opts.banner = "graph [--filename filename] [--force] track -- plot speed and height profile of track"
|
77
|
+
|
78
|
+
opts.boolean "--force", "Force rewriting of the js file, even if it already exists"
|
79
|
+
|
80
|
+
return { graph: [opts, :graph] }
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.convert_opts
|
84
|
+
opts = Slop::Options.new
|
85
|
+
opts.banner = "convert track -- convert a GPX into a set of CSV files"
|
86
|
+
opts.boolean "--force", "Force rewriting of the csv files, even if it already exists"
|
87
|
+
|
88
|
+
return { convert: [opts, :convert] }
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# def self.split_opts
|
93
|
+
# opts = Slop::Options.new
|
94
|
+
# opts.banner "split [--help] [--point N] track -- split a track"
|
95
|
+
# opts.integer "--point", "Split at point N"
|
96
|
+
|
97
|
+
# return { split: [opts, :split] }
|
98
|
+
# end
|
99
|
+
|
100
|
+
# def self.export_opts
|
101
|
+
# end
|
102
|
+
end
|
103
|
+
end
|