Moved site html files to main repo. Started basic scripts to template the HTML and publish the site.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d19da4fe Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d19da4fe Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d19da4fe Branch: refs/heads/master Commit: d19da4fe220551a83f792d6b4b2aadeacebd524c Parents: 47e2cd7 Author: Stephen Mallette <[email protected]> Authored: Thu Oct 20 11:05:46 2016 -0400 Committer: Stephen Mallette <[email protected]> Committed: Thu Oct 27 07:39:50 2016 -0400 ---------------------------------------------------------------------- site/bin/generate-home.sh | 31 + site/bin/publish-home.sh | 39 + site/home/css/bootstrap-mods.css | 140 + site/home/css/carousel.css | 417 + site/home/css/prism.css | 145 + site/home/downloads.html | 253 + site/home/gremlin.html | 380 + site/home/images/apache-tinkerpop-logo.png | Bin 0 -> 118637 bytes site/home/images/blueprints-handdrawn.png | Bin 0 -> 39838 bytes site/home/images/cityscape-button.png | Bin 0 -> 54260 bytes site/home/images/egg-logo.png | Bin 0 -> 7241 bytes site/home/images/favicon.ico | Bin 0 -> 1406 bytes site/home/images/furnace-handdrawn.png | Bin 0 -> 27598 bytes site/home/images/goutte-blue.png | Bin 0 -> 13400 bytes site/home/images/graph-globe.png | Bin 0 -> 97146 bytes site/home/images/graph-vs-table.png | Bin 0 -> 35982 bytes site/home/images/gremlin-apache.png | Bin 0 -> 184276 bytes site/home/images/gremlin-download.png | Bin 0 -> 35666 bytes site/home/images/gremlin-github.png | Bin 0 -> 25806 bytes site/home/images/gremlin-gym-mini.png | Bin 0 -> 128185 bytes site/home/images/gremlin-handdrawn.png | Bin 0 -> 24985 bytes site/home/images/gremlin-head.png | Bin 0 -> 47157 bytes site/home/images/gremlin-language-variants.png | Bin 0 -> 157258 bytes site/home/images/gremlin-quill.png | Bin 0 -> 200459 bytes site/home/images/homepage.graffle | 63974 +++++++++++++++++ site/home/images/logos/blazegraph-logo.png | Bin 0 -> 58946 bytes site/home/images/logos/datastax-logo.png | Bin 0 -> 38630 bytes site/home/images/logos/gremlin-groovy-logo.png | Bin 0 -> 126622 bytes site/home/images/logos/gremlin-java-logo.png | Bin 0 -> 106573 bytes site/home/images/logos/gremlin-python-logo.png | Bin 0 -> 100190 bytes site/home/images/logos/gremlin-scala-logo.png | Bin 0 -> 83255 bytes site/home/images/logos/ibmgraph-logo.png | Bin 0 -> 70338 bytes site/home/images/logos/keylines-logo.png | Bin 0 -> 38740 bytes site/home/images/logos/linkurious-logo.png | Bin 0 -> 58124 bytes site/home/images/logos/neo4j-logo.png | Bin 0 -> 48361 bytes site/home/images/logos/ogre-logo.png | Bin 0 -> 119692 bytes site/home/images/logos/orientdb-logo.png | Bin 0 -> 38721 bytes site/home/images/logos/sparql-gremlin-logo.png | Bin 0 -> 102985 bytes site/home/images/logos/sql-gremlin-logo.png | Bin 0 -> 94816 bytes site/home/images/logos/stardog-logo.png | Bin 0 -> 78711 bytes site/home/images/logos/titan-logo.png | Bin 0 -> 76305 bytes site/home/images/logos/tomsawyer-logo.png | Bin 0 -> 68634 bytes site/home/images/meeting-room-button.png | Bin 0 -> 46717 bytes site/home/images/oltp-and-olap.png | Bin 0 -> 400257 bytes site/home/images/peon-head.png | Bin 0 -> 11761 bytes site/home/images/policy/adjacency-list.png | Bin 0 -> 36192 bytes .../home/images/policy/blueprints-character.png | Bin 0 -> 18474 bytes site/home/images/policy/business-gremlin.png | Bin 0 -> 412520 bytes site/home/images/policy/cyclicpath-step.png | Bin 0 -> 133628 bytes site/home/images/policy/flat-map-lambda.png | Bin 0 -> 26423 bytes site/home/images/policy/frames-character.png | Bin 0 -> 17482 bytes site/home/images/policy/furnace-character.png | Bin 0 -> 14118 bytes site/home/images/policy/gremlin-character.png | Bin 0 -> 16473 bytes site/home/images/policy/gremlin-chickenwing.png | Bin 0 -> 34307 bytes site/home/images/policy/gremlin-gremopoly.png | Bin 0 -> 28803 bytes site/home/images/policy/gremlin-gremreaper.png | Bin 0 -> 33275 bytes site/home/images/policy/gremlin-gremstefani.png | Bin 0 -> 32122 bytes .../policy/gremlin-new-sheriff-in-town.png | Bin 0 -> 30381 bytes .../policy/gremlin-no-more-mr-nice-guy.png | Bin 0 -> 27941 bytes site/home/images/policy/gremlintron.png | Bin 0 -> 219686 bytes site/home/images/policy/olap-traversal.png | Bin 0 -> 315037 bytes site/home/images/policy/pipes-character.png | Bin 0 -> 19807 bytes site/home/images/policy/rexster-character.png | Bin 0 -> 18100 bytes site/home/images/policy/tinkerpop-reading.png | Bin 0 -> 195749 bytes site/home/images/policy/tinkerpop3-splash.png | Bin 0 -> 643257 bytes .../images/resources/arxiv-article-resource.png | Bin 0 -> 306821 bytes .../benefits-gremlin-machine-resource.png | Bin 0 -> 159622 bytes .../resources/graph-databases-101-resource.png | Bin 0 -> 139229 bytes .../resources/on-graph-computing-resource.png | Bin 0 -> 159091 bytes .../resources/property-graph-resource.png | Bin 0 -> 162245 bytes .../images/resources/sql-2-gremlin-resource.png | Bin 0 -> 210892 bytes .../resources/tables-and-graphs-resource.png | Bin 0 -> 344091 bytes .../resources/why-graph-databases-resource.png | Bin 0 -> 243807 bytes site/home/images/rexster-handdrawn.png | Bin 0 -> 30247 bytes site/home/images/tinkerblocks.png | Bin 0 -> 802732 bytes site/home/images/tinkerpop-book.png | Bin 0 -> 195749 bytes site/home/images/tinkerpop-cityscape.png | Bin 0 -> 801856 bytes site/home/images/tinkerpop-conference.png | Bin 0 -> 719950 bytes site/home/images/tinkerpop-logo-small.png | Bin 0 -> 30662 bytes site/home/images/tinkerpop-meeting-room.png | Bin 0 -> 703938 bytes site/home/images/tinkerpop-reading-2.png | Bin 0 -> 211187 bytes site/home/images/tinkerpop-reading.png | Bin 0 -> 195749 bytes site/home/images/tinkerpop-splash.png | Bin 0 -> 653463 bytes site/home/images/tinkerpop3-splash.png | Bin 0 -> 643257 bytes site/home/index.html | 297 + site/home/js/bootstrap-3.3.5.min.js | 7 + site/home/js/jquery-1.11.0.min.js | 4 + site/home/js/prism.js | 423 + site/home/policy.html | 56 + site/home/providers.html | 343 + site/home/template/header-footer.html | 132 + 91 files changed, 66641 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/bin/generate-home.sh ---------------------------------------------------------------------- diff --git a/site/bin/generate-home.sh b/site/bin/generate-home.sh new file mode 100755 index 0000000..dc41a7c --- /dev/null +++ b/site/bin/generate-home.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +if [[ -d ../target/site/home ]]; then + rm -r ../target/site/home +fi +mkdir -p ../target/site/ +cp -R home ../target/site + +for filename in home/*.html; do + sed -e "/!!!!!BODY!!!!!/ r $filename" home/template/header-footer.html -e /!!!!!BODY!!!!!/d > "../target/site/$filename" +done + +echo "Home page site generated to target/site/home" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/bin/publish-home.sh ---------------------------------------------------------------------- diff --git a/site/bin/publish-home.sh b/site/bin/publish-home.sh new file mode 100644 index 0000000..7be58c8 --- /dev/null +++ b/site/bin/publish-home.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +USERNAME=$1 + +if [ "${USERNAME}" == "" ]; then + echo "Please provide a SVN username." + echo -e "\nUsage:\n\t$0 <username>\n" + exit 1 +fi + +read -s -p "Password for SVN user ${USERNAME}: " PASSWORD +echo + +SVN_CMD="svn --no-auth-cache --username=${USERNAME} --password=${PASSWORD}" + +rm -rf target/svn +bin/generate-home.sh + +mkdir -p target/svn +${SVN_CMD} co --depth immediates https://svn.apache.org/repos/asf/tinkerpop/site target/svn \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/css/bootstrap-mods.css ---------------------------------------------------------------------- diff --git a/site/home/css/bootstrap-mods.css b/site/home/css/bootstrap-mods.css new file mode 100644 index 0000000..68a6c31 --- /dev/null +++ b/site/home/css/bootstrap-mods.css @@ -0,0 +1,140 @@ +.nav-icon { + width: 24px; + height: 24px; + margin-right: 5px; +} +.hero-unit { + background-color: #f5f5f5; + margin-bottom: 2px; + padding: 20px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + margin-top: 20px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 50px; + line-height: 1; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} +.carousel-indicators-numbers li { + font-size: 12px; + text-indent: 0px; + margin: -2px 2px; + width: 25px; + height: 25px; + border: none; + border-radius: 100%; + line-height: 26px; + color: #fff; + background-color: #999; +} +.carousel-indicators-numbers li.active { + margin: -2px 2px; + width: 25px; + height: 25px; + background-color: #337ab7; +} +.carousel-indicators { + bottom: -39px; +} +.carousel-inner { + margin-bottom: 50px; +} +#footer { + background-color: #f5f5f5; +} +.container .credit { + margin: 20px 0; +} +.navbar { + margin-bottom: 0; +} + +.hovereffect { +width:100%; +height:100%; +float:left; +overflow:hidden; +position:relative; +text-align:center; +cursor:default; +border-radius:5px; +} + +.hovereffect .overlay { +width:100%; +height:100%; +position:absolute; +overflow:hidden; +top:0; +left:0; +opacity:0; +background-color:rgba(0,0,0,0.5); +-webkit-transition:all .4s ease-in-out; +transition:all .4s ease-in-out; +border-radius:5px; +} + +.hovereffect img { +display:block; +position:relative; +-webkit-transition:all .4s linear; +transition:all .4s linear; +border-radius:5px; +} + + +.hovereffect a.info { +text-decoration:none; +display:inline-block; +border-radius:5px; +color:#fff; +border:1px solid #fff; +background-color:transparent; +opacity:0; +filter:alpha(opacity=0); +-webkit-transition:all .2s ease-in-out; +transition:all .2s ease-in-out; +margin:25px 0 0; +padding:5px 5px; +} + +.hovereffect a.info:hover { +box-shadow:0 0 5px #fff; +border-radius:5px; +} + +.hovereffect:hover img { +-ms-transform:scale(1.2); +-webkit-transform:scale(1.2); +transform:scale(1.2); +border-radius:5px; +} + +.hovereffect:hover .overlay { +opacity:1; +filter:alpha(opacity=100); +border-radius:5px; +} + +.hovereffect:hover h2,.hovereffect:hover a.info { +opacity:1; +filter:alpha(opacity=100); +-ms-transform:translatey(0); +-webkit-transform:translatey(0); +transform:translatey(0); +border-radius:5px; +} + +.hovereffect:hover a.info { +-webkit-transition-delay:.2s; +transition-delay:.2s; +border-radius:5px; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/css/carousel.css ---------------------------------------------------------------------- diff --git a/site/home/css/carousel.css b/site/home/css/carousel.css new file mode 100644 index 0000000..a4eef64 --- /dev/null +++ b/site/home/css/carousel.css @@ -0,0 +1,417 @@ +/* Bootstrap items to overWrite */ + +.carouselGrid-inner > .item > img, +.carouselGrid-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} + +.carouselGrid-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carouselGrid-inner > .item { + position: relative; + display: none; + -webkit-transition: 1s ease-in-out left; + -o-transition: 1s ease-in-out left; + transition: 1s ease-in-out left; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.carouselGrid-inner > .item > img, +.carouselGrid-inner > .item > a > img { + line-height: 1; +} + + + +@media all and (transform-3d), (-webkit-transform-3d) { + .carouselGrid-inner > .item { + -webkit-transition: -webkit-transform 1s ease-in-out; + -o-transition: -o-transform 1s ease-in-out; + transition: transform 1s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + + + @media (max-width: 767px) { /* xs */ + .carouselGrid-inner > .item.next, + .carouselGrid-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(50%, 0, 0); + transform: translate3d(50%, 0, 0); + } + .carouselGrid-inner > .item.prev, + .carouselGrid-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-50%, 0, 0); + transform: translate3d(-50%, 0, 0); + } + .carouselGrid-inner > .item.next.left, + .carouselGrid-inner > .item.prev.right, + .carouselGrid-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); + } + } + @media (min-width: 767px) and (max-width: 992px ) { /* sm */ + .carouselGrid-inner > .item.next, + .carouselGrid-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(33%, 0, 0); + transform: translate3d(33%, 0, 0); + } + .carouselGrid-inner > .item.prev, + .carouselGrid-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-33%, 0, 0); + transform: translate3d(-33%, 0, 0); + } + .carouselGrid-inner > .item.next.left, + .carouselGrid-inner > .item.prev.right, + .carouselGrid-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); + } + } + @media (min-width: 992px ) and (max-width: 1200px) { /* md */ + .carouselGrid-inner > .item.next, + .carouselGrid-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(25%, 0, 0); + transform: translate3d(25%, 0, 0); + } + .carouselGrid-inner > .item.prev, + .carouselGrid-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-25%, 0, 0); + transform: translate3d(-25%, 0, 0); + } + .carouselGrid-inner > .item.next.left, + .carouselGrid-inner > .item.prev.right, + .carouselGrid-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); + } + } + @media (min-width: 1200px ) { /* lg */ + + .carouselGrid-inner > .item.next, + .carouselGrid-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(20%, 0, 0); + transform: translate3d(20%, 0, 0); + } + .carouselGrid-inner > .item.prev, + .carouselGrid-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-20%, 0, 0); + transform: translate3d(-20%, 0, 0); + } + .carouselGrid-inner > .item.next.left, + .carouselGrid-inner > .item.prev.right, + .carouselGrid-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); + } + } + +} + + .carouselGrid-inner > .active, + .carouselGrid-inner > .next, + .carouselGrid-inner > .prev { + display: block; + } + .carouselGrid-inner > .active { + left: 0; + } + .carouselGrid-inner > .next, + .carouselGrid-inner > .prev { + position: absolute; + top: 0; + width: 100%; + } + .carouselGrid-inner > .next { + left: 100%; + } + .carouselGrid-inner > .prev { + left: -100%; + } + .carouselGrid-inner > .next.left, + .carouselGrid-inner > .prev.right { + left: 0; + } + + + @media (max-width: 767px) { /* xs */ + .carouselGrid-inner > .active.left { + left: -50%; + } + .carouselGrid-inner > .active.right { + left: 50%; + } + } + @media (min-width: 767px) and (max-width: 992px ) { /* sm */ + .carouselGrid-inner > .active.left { + left: -33%; + } + .carouselGrid-inner > .active.right { + left: 33%; + } + } + @media (min-width: 992px ) and (max-width: 1200px) { /* md */ + .carouselGrid-inner > .active.left { + left: -25%; + } + .carouselGrid-inner > .active.right { + left: 25%; + } + } + @media (min-width: 1200px ) { /* lg */ + .carouselGrid-inner > .active.left { + left: -20%; + } + .carouselGrid-inner > .active.right { + left: 20%; + } + } + + +.carouselGrid-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carouselGrid-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carouselGrid-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carouselGrid-control:hover, +.carouselGrid-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carouselGrid-control .icon-prev, +.carouselGrid-control .icon-next, +.carouselGrid-control .glyphicon-chevron-left, +.carouselGrid-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carouselGrid-control .icon-prev, +.carouselGrid-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carouselGrid-control .icon-next, +.carouselGrid-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carouselGrid-control .icon-prev, +.carouselGrid-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carouselGrid-control .icon-prev:before { + content: '\2039'; +} +.carouselGrid-control .icon-next:before { + content: '\203a'; +} +.carouselGrid-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carouselGrid-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carouselGrid-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carouselGrid-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carouselGrid-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carouselGrid-control .glyphicon-chevron-left, + .carouselGrid-control .glyphicon-chevron-right, + .carouselGrid-control .icon-prev, + .carouselGrid-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carouselGrid-control .glyphicon-chevron-left, + .carouselGrid-control .icon-prev { + margin-left: -15px; + } + .carouselGrid-control .glyphicon-chevron-right, + .carouselGrid-control .icon-next { + margin-right: -15px; + } + .carouselGrid-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carouselGrid-indicators { + bottom: 20px; + } +} + +.carouselGrid-control { width: 4%; } +.carouselGrid-control.left,.carouselGrid-control.right {margin-left:15px;background-image:none;} +@media (max-width: 767px) { /* xs */ + .carouselGrid-inner .active.left { left: -50%; } + .carouselGrid-inner .next { left: 50%;} + .carouselGrid-inner .prev { left: -50%; } + .active > div { display:none; } + .active > div:first-child { display:block; } + .active > div:first-child + div { display:block; } + .active > div:first-child + div + div { display:none; } + .active > div:first-child + div + div + div { display:none; } + + +} +@media (min-width: 767px) and (max-width: 992px ) { /* sm */ + .carouselGrid-inner .active.left { left: -33%; } + .carouselGrid-inner .next { left: 33%; } + .carouselGrid-inner .prev { left: -33%; } + .active > div { display:none; } + .active > div:first-child { display:block; } + .active > div:first-child + div { display:block; } + .active > div:first-child + div + div { display:block; } + .active > div:first-child + div + div + div { display:none; } +} + + + +@media (min-width: 992px ) and (max-width: 1200px) { /* md */ + .carouselGrid-inner .active.left { left: -25%; } + .carouselGrid-inner .next { left: 25%; } + .carouselGrid-inner .prev { left: -25%; } + .active > div { display:none; } + .active > div:first-child { display:block; } + .active > div:first-child + div { display:block; } + .active > div:first-child + div + div { display:block; } + .active > div:first-child + div + div + div { display:block; } + +} + +@media (min-width: 1200px ) { /* lg */ + .carouselGrid-inner .active.left { left: -20%; } + .carouselGrid-inner .next { left: 20%;} + .carouselGrid-inner .prev {left: -20%; } + +} + + +/* NECESSARY FOR FIVE ITEMS (Extends Bootstrap to 5 columns) */ +/*http://www.wearesicc.com/quick-tips-5-column-layout-with-twitter-bootstrap/ */ +.col-xs-15, +.col-sm-15, +.col-md-15, +.col-lg-15 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-15 { + width: 33%; + float: left; +} +@media (min-width: 768px) { +.col-sm-15 { + width: 33%; + float: left; + } +} +@media (min-width: 992px) { + .col-md-15 { + width: 33%; + float: left; + } +} +@media (min-width: 1200px) { + .col-lg-15 { + width: 33%; + float: left; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/css/prism.css ---------------------------------------------------------------------- diff --git a/site/home/css/prism.css b/site/home/css/prism.css new file mode 100644 index 0000000..e25f79d --- /dev/null +++ b/site/home/css/prism.css @@ -0,0 +1,145 @@ +/* http://prismjs.com/download.html?themes=prism&languages=clike+javascript+groovy+jade */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #337ab7; + background: none; + text-shadow: 0 0px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #f5f5f5; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #f5f5f5; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +.carousel-control.left, .carousel-control.right { + background-image: none +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 0em; + margin: 0em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f5f5; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0em; + border-radius: 0em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: gray; +} + +.token.punctuation { + color: black; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword, +.token.traversalSource { + color: #800080; +} + +.token.function { + color: #337ab7; +} + +.token.regex, +.token.important, +.token.variable { + color: #337ab7; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; + color: #337ab7; +} + http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/downloads.html ---------------------------------------------------------------------- diff --git a/site/home/downloads.html b/site/home/downloads.html new file mode 100644 index 0000000..c905083 --- /dev/null +++ b/site/home/downloads.html @@ -0,0 +1,253 @@ +<div class="container"> + <div class="row"> + <h3>Download Apache TinkerPop™</h3> + <p><img src="images/gremlin-download.png" style="float:right;width:150px;padding:10px;"/>Apache TinkerPop provides three packaged downloads per release version. The + <a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-console">Gremlin Console</a> and <a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-server">Gremlin Server</a> + downloads are binary distributions, which contain pre-packaged versions of these important TinkerPop applications that are designed to work out-of-the-box + when unpackaged. The source distribution is a snapshot of the source code and files used in the building of those binary distributions.</p> + <p>TinkerPop also deploys artifacts to <a href="http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.tinkerpop%22">Maven Central</a>, which is helpful to + developers who wish to depend on the various libraries that TinkerPop provides. + <br/> + <h4>Current Releases</h4> + <table class="table"> + <tr> + <td> + <strong>3.2.2</strong> (latest, stable) + </td> + <td> + 6-Sep-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.2.2/CHANGELOG.asciidoc#release-3-2-2">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.2.2/upgrade/#_tinkerpop_3_2_2">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.2.2/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.2.2/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.2.2/apache-tinkerpop-gremlin-console-3.2.2-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.2.2/apache-tinkerpop-gremlin-server-3.2.2-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.2.2/apache-tinkerpop-3.2.2-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.1.4</strong> (maintenance) + </td> + <td> + 6-Sep-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.1.4/CHANGELOG.asciidoc#release-3-1-4">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.4/upgrade/#_tinkerpop_3_1_4">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.4/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.1.4/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.1.4/apache-tinkerpop-gremlin-console-3.1.4-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.1.4/apache-tinkerpop-gremlin-server-3.1.4-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.1.4/apache-tinkerpop-3.1.4-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + </table> + <h4>Archived Releases</small></h4> + <table class="table"> + <tr> + <td> + <strong>3.2.1</strong> + </td> + <td> + 18-Jul-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.2.1/CHANGELOG.asciidoc#tinkerpop-321-release-date-july-18-2016">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.2.1/upgrade/#_tinkerpop_3_2_1">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.2.1/reference/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.2.1/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/tinkerpop/3.2.1/apache-gremlin-console-3.2.1-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/tinkerpop/3.2.1/apache-gremlin-server-3.2.1-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/tinkerpop/3.2.1/apache-tinkerpop-3.2.1-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.1.3</strong> + </td> + <td> + 18-Jul-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.1.3/CHANGELOG.asciidoc#tinkerpop-313-release-date-july-18-2016">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.3/upgrade/#_tinkerpop_3_1_3">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.3/reference/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.1.3/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/tinkerpop/3.1.3/apache-gremlin-console-3.1.3-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/tinkerpop/3.1.3/apache-gremlin-server-3.1.3-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/tinkerpop/3.1.3/apache-tinkerpop-3.1.3-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.2.0-incubating</strong> + </td> + <td> + 8-Apr-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.2.0-incubating/CHANGELOG.asciidoc#tinkerpop-320-release-date-april-8-2016">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.2.0-incubating/upgrade/#_tinkerpop_3_2_0_2">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.2.0-incubating/reference/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.2.0-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.2.0-incubating/apache-gremlin-console-3.2.0-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.2.0-incubating/apache-gremlin-server-3.2.0-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.2.0-incubating/apache-tinkerpop-3.2.0-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.1.2-incubating</strong> + </td> + <td> + 8-Apr-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.1.2-incubating/CHANGELOG.asciidoc#tinkerpop-312-release-date-april-8-2016">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.2-incubating/upgrade/#_tinkerpop_3_1_2">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.2-incubating/reference/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.1.2-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.2-incubating/apache-gremlin-console-3.1.2-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.2-incubating/apache-gremlin-server-3.1.2-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.2-incubating/apache-tinkerpop-3.1.2-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.1.1-incubating</strong> + </td> + <td> + 8-Feb-2016 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.1.1-incubating/CHANGELOG.asciidoc#tinkerpop-311-release-date-february-8-2016">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.1-incubating/upgrade/#_tinkerpop_3_1_1">upgrade</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.1-incubating/reference/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.1.1-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.1-incubating/apache-gremlin-console-3.1.1-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.1-incubating/apache-gremlin-server-3.1.1-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.1-incubating/apache-tinkerpop-3.1.1-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.1.0-incubating</strong> + </td> + <td> + 16-Nov-2015 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.1.0-incubating/CHANGELOG.asciidoc#tinkerpop-310-release-date-november-16-2015">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.1.0-incubating/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.1.0-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.0-incubating/apache-gremlin-console-3.1.0-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.0-incubating/apache-gremlin-server-3.1.0-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.1.0-incubating/apache-tinkerpop-3.1.0-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.0.2-incubating</strong> + </td> + <td> + 19-Oct-2015 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.0.2-incubating/CHANGELOG.asciidoc#tinkerpop-302-release-date-october-19-2015">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.0.2-incubating/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.0.2-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.2-incubating/apache-gremlin-console-3.0.2-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.2-incubating/apache-gremlin-server-3.0.2-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.2-incubating/apache-tinkerpop-3.0.2-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.0.1-incubating</strong> + </td> + <td> + 2-Sep-2015 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.0.1-incubating/CHANGELOG.asciidoc#tinkerpop-301-release-date-september-2-2015">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.0.1-incubating/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.0.1-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.1-incubating/apache-gremlin-console-3.0.1-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.1-incubating/apache-gremlin-server-3.0.1-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.1-incubating/apache-tinkerpop-3.0.1-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + <tr> + <td> + <strong>3.0.0-incubating</strong> + </td> + <td> + 9-Jul-2015 + </td> + <td> + <a href="https://github.com/apache/tinkerpop/blob/3.0.0-incubating/CHANGELOG.asciidoc#tinkerpop-300-release-date-july-9-2015">release notes</a> | + <a href="http://tinkerpop.apache.org/docs/3.0.0-incubating/">documentation</a> | + <a href="http://tinkerpop.apache.org/javadocs/3.0.0-incubating/full/">javadoc</a> + </td> + <td align="right"> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.0-incubating/apache-gremlin-console-3.0.0-incubating-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.0-incubating/apache-gremlin-server-3.0.0-incubating-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a> + <a href="https://archive.apache.org/dist/incubator/tinkerpop/3.0.0-incubating/apache-tinkerpop-3.0.0-incubating-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a> + </td> + </tr> + </table> + <p><strong>Note</strong> that upgrade documentation was only introduced at 3.1.1-incubating which is why there are no links "upgrade" links in versions prior to that one. + <h4>Verifying Downloads</h4> + <p>All downloads have associated PGP and MD5 signatures to help verify a distribution provided by a mirror. To verify a distribution via PGP or GPG first download the + <a href="https://www.apache.org/dist/tinkerpop/KEYS">KEYS</a> file (it is important to use the linked file which is from the main distribution directory and not a + mirror. Next download the appropriate "asc" signature file for the relevant distribution (again, this file should come from the <a href="https://www.apache.org/dist/tinkerpop/">main + distribution directory</a> - note that older releases will have such files in the <a href="https://archive.apache.org/dist/tinkerpop/">archives</a> or if released under Apache + Incubator then they will be found in the <a href="https://archive.apache.org/dist/incubator/tinkerpop/">Incubator archives</a>).</p> + <p>Then verify the signatures as follows:</p> + <p> + <pre><code> + pgpk -a KEYS + pgpv apache-gremlin-console-x.y.z-bin.zip.asc + </code></pre> + </p> + <p>or</p> + <p> + <pre><code> + pgpk -ka KEYS + pgp apache-gremlin-console-x.y.z-bin.zip.asc + </code></pre> + </p> + <p>or</p> + <p> + <pre><code> + gpg --import KEYS + gpg --verify apache-gremlin-console-x.y.z-bin.zip.asc apache-gremlin-console-x.y.z-bin.zip + </code></pre> + </p> + <p>Alternatively, consider verifying the MD5 signature on the files. An MD5 signature consists of 32 hex characters, and a SHA1 signature consists of 40 hex characters. + Ensure that the generated signature string matches the signature string published in the files above.</p> + </div> +</div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/gremlin.html ---------------------------------------------------------------------- diff --git a/site/home/gremlin.html b/site/home/gremlin.html new file mode 100644 index 0000000..7038f34 --- /dev/null +++ b/site/home/gremlin.html @@ -0,0 +1,380 @@ +<img src="images/tinkerpop-cityscape.png" class="img-responsive" /> +<div class="container"> + <div class="hero-unit" style="padding:10px"> + <b><font size="5" face="american typewriter">Apache TinkerPop™</font></b> + <p><font size="5">The Gremlin Graph Traversal Machine and Language</font></p> + </div> +</div> +<br/> +<div class="container-fluid"> + <div class="container"> + <div class="row"> + <div class="col-sm-10 col-md-10"> + <a href="http://arxiv.org/abs/1508.03843">Gremlin</a> is the graph traversal language of <a href="http://tinkerpop.apache.org/">Apache TinkerPop</a>. + Gremlin is a <a href="https://en.wikipedia.org/wiki/Functional_programming">functional</a>, <a href="https://en.wikipedia.org/wiki/Dataflow_programming">data-flow</a> + language that enables users to succinctly express complex traversals on (or queries of) their application's property graph. Every Gremlin traversal is composed of a sequence of (potentially nested) steps. A step + performs an atomic operation on the data stream. Every step is either a <em>map</em>-step (transforming the objects in the stream), a <em>filter</em>-step (removing objects + from the stream), or a <em>sideEffect</em>-step (computing statistics about the stream). The Gremlin step library extends on these 3-fundamental operations to provide + users a rich collection of steps that they can compose in order to ask any conceivable question they may have of their data for Gremlin is <a href="http://arxiv.org/abs/1508.03843">Turing Complete</a>. + </div> + <div class="col-sm-2 col-md-2"> + <img src="images/gremlin-head.png" width="100%"> + </div> + </div> + <br/> + <div style="border-radius:3px;border:1px solid black;padding:10px;padding-left:10px;height:170px" id="gremlinCarousel" class="carousel slide" data-ride="carousel" data-interval="30000"> + <!-- Indicators --> + <ol class="carousel-indicators carousel-indicators-numbers"> + <li data-target="#gremlinCarousel" data-slide-to="0" class="active">1</li> + <li data-target="#gremlinCarousel" data-slide-to="1">2</li> + <li data-target="#gremlinCarousel" data-slide-to="2">3</li> + <li data-target="#gremlinCarousel" data-slide-to="3">4</li> + <li data-target="#gremlinCarousel" data-slide-to="4">5</li> + <li data-target="#gremlinCarousel" data-slide-to="5">6</li> + </ol> + <div class="carousel-inner" role="listbox"> + <div class="item active"> + <div class="row"> + <div class="col-xs-5"> + <pre style="padding-left:10px;height:148px;overflow:hidden;"><code class="language-gremlin"> +g.V().has("name","gremlin"). + out("knows"). + out("knows"). + values("name") + + </code></pre> + </div> + <div class="col-xs-7" style="border-left: thin solid #000000;height:148px"> + <b>What are the names of Gremlin's friends' friends?</b> + <p/> + <ol style="padding-left:20px"> + <li>Get the vertex with name "gremlin."</li> + <li>Traverse to the people that Gremlin knows.</li> + <li>Traverse to the people those people know.</li> + <li>Get those people's names.</li> + </ol> + <br/> + </div> + </div> + </div> + <div class="item"> + <div class="row"> + <div class="col-xs-5"> + <pre style="padding-left:10px;height:148px;overflow:hidden;"><code class="language-gremlin"> +g.V().match( + as("a").out("knows").as("b"), + as("a").out("created").as("c"), + as("b").out("created").as("c"), + as("c").in("created").count().is(2)). + select("c").by("name")</code></pre> + </div> + <div class="col-xs-7" style="border-left: thin solid #000000;height:148px"> + <b>What are the names of the projects created by two friends?</b> + <p/> + <ol style="padding-left:20px"> + <li>...there exists some "a" who knows "b".</li> + <li>...there exists some "a" who created "c".</li> + <li>...there exists some "b" who created "c".</li> + <li>...there exists some "c" created by 2 people.</li> + <li>Get the name of all matching "c" projects.</li> + </ol> + </div> + </div> + </div> + <div class="item"> + <div class="row"> + <div class="col-xs-5"> + <pre style="padding-left:10px;height:148px;overflow:hidden;"><code class="language-gremlin"> +g.V().has("name","gremlin"). + repeat(in("manages")). + until(has("title","ceo")). + path().by("name") + +</code></pre> + </div> + <div class="col-xs-7" style="border-left: thin solid #000000;height:148px"> + <b>Get the managers from Gremlin to the CEO in the hiearchy.</b> + <p/> + <ol style="padding-left:20px"> + <li>Get the vertex with the name "gremlin."</li> + <li>Traverse up the management chain...</li> + <li>...until a person with the title of CEO is reached.</li> + <li>Get name of the managers in the path traversed.</li> + </ol> + <br/> + </div> + </div> + </div> + <div class="item"> + <div class="row"> + <div class="col-xs-5"> + <pre style="padding-left:10px;height:148px;overflow:hidden;"><code class="language-gremlin"> +g.V().has("name","gremlin").as("a"). + out("created").in("created"). + where(neq("a")). + groupCount().by("title") + +</code></pre> + </div> + <div class="col-xs-7" style="border-left: thin solid #000000;height:148px"> + <b>Get the distribution of titles amongst Gremlin's collaborators.</b> + <p/> + <ol style="padding-left:20px"> + <li>Get the vertex with the name "gremlin" and label it "a."</li> + <li>Get Gremlin's created projects and then who created them...</li> + <li>...that are not Gremlin.</li> + <li>Group count those collaborators by their titles.</li> + </ol> + <br/> + </div> + </div> + </div> + <div class="item"> + <div class="row"> + <div class="col-xs-5"> + <pre style="padding-left:10px;height:148px;overflow:hidden;"><code class="language-gremlin"> +g.V().has("name","gremlin"). + out("bought").aggregate("stash"). + in("bought").out("bought"). + where(not(within("stash"))). + groupCount().order(local).by(values,decr) +</code></pre> + </div> + <div class="col-xs-7" style="border-left: thin solid #000000;height:148px"> + <b>Get a ranked list of relevant products for Gremlin to purchase.</b> + <p/> + <ol style="padding-left:20px"> + <li>Get the vertex with the name "gremlin."</li> + <li>Get the products Gremlin has purchased and save as "stash."</li> + <li>Who else bought those products and what else did they buy...</li> + <li>...that Gremlin has not already purchased.</li> + <li>Group count the products and order by their relevance.</li> + </ol> + </div> + </div> + </div> + <div class="item"> + <div class="row"> + <div class="col-xs-5"> + <pre style="padding-left:10px;height:148px;overflow:hidden;"><code class="language-gremlin"> +g.V().hasLabel("person"). + pageRank(). + by("friendRank"). + by(outE("knows")). + order().by("friendRank",decr). + limit(10)</code></pre> + </div> + <div class="col-xs-7" style="border-left: thin solid #000000;height:148px"> + <b>Get the 10 most central people in the knows-graph.</b> + <p/> + <ol style="padding-left:20px"> + <li>Get all people vertices.</li> + <li>Calculate their PageRank using knows-edges.</li> + <li>Order the people by their friendRank score.</li> + <li>Get the top 10 ranked people.</li> + </ol> + </div> + </div> + </div> + </div> + </div> + </div> + <br/> + <div class="container"> + <a name="oltp-and-olap-traversals"></a> + <h3>OLTP and OLAP Traversals</h3> + <br/> + Gremlin was designed according to the "write once, run anywhere"-philosophy. This means that not only can all TinkerPop-enabled + graph systems execute Gremlin traversals, but also, every Gremlin traversal can be evaluated as either a real-time database query + or as a batch analytics query. The former is known as an <em>online transactional process</em> (<a href="https://en.wikipedia.org/wiki/Online_transaction_processing">OLTP</a>) and the latter as an <em>online analytics + process</em> (<a href="https://en.wikipedia.org/wiki/Online_analytical_processing">OLAP</a>). This universality is made possible by the Gremlin traversal machine. This distributed, graph-based <a href="https://en.wikipedia.org/wiki/Virtual_machine#Abstract_virtual_machine_techniques">virtual machine</a> + understands how to coordinate the execution of a multi-machine graph traversal. Moreover, not only can the execution either be OLTP or + OLAP, it is also possible for certain subsets of a traversal to execute OLTP while others via OLAP. The benefit is that the user does + not need to learn both a database query language and a domain-specific BigData analytics language (e.g. Spark DSL, MapReduce, etc.). + Gremlin is all that is required to build a graph-based application because the Gremlin traversal machine will handle the rest. + <br/><br/> + <center><img src="images/oltp-and-olap.png" style="width:80%;" class="img-responsive"></center> + </div> + <br/> + <div class="container"> + <a name="imperative-and-declarative-traversals"></a> + <h3>Imperative and Declarative Traversals</h3> + <br/> + <div class="row"> + <div class="col-sm-7 col-md-8"> + A Gremlin traversal can be written in either an <em>imperative</em> (<a href="https://en.wikipedia.org/wiki/Imperative_programming">procedural</a>) manner, a <em>declarative</em> (<a href="https://en.wikipedia.org/wiki/Declarative_programming">descriptive</a>) manner, + or in a hybrid manner containing both imperative and declarative aspects. An imperative Gremlin traversal tells the traversers how to proceed at each step in the traversal. For instance, + the imperative traversal on the right first places a traverser at the vertex denoting Gremlin. That traverser then splits itself across all of Gremlin's collaborators that are not Gremlin + himself. Next, the traversers walk to the managers of those collaborators to ultimately be grouped into a manager name count distribution. This traversal is imperative in that it tells the + traversers to "go here and then go there" in an explicit, procedural manner. + </div> + <div class="col-sm-5 col-md-4"> + <pre style="padding:10px;"> +<code class="language-gremlin">g.V().has("name","gremlin").as("a"). +out("created").in("created"). +where(neq("a")). +in("manages"). +groupCount().by("name")</code> +</pre> + </div> + </div> + <p/> + <div class="row"> + <div class="col-sm-5 col-md-4"> + <pre style="padding:10px;"> +<code class="language-gremlin">g.V().match( +as("a").has("name","gremlin"), +as("a").out("created").as("b"), +as("b").in("created").as("c"), +as("c").in("manages").as("d"), +where("a",neq("c"))). +select("d"). +groupCount().by("name")</code> +</pre> + </div> + <div class="col-sm-7 col-md-8"> + A declarative Gremlin traversal does not tell the traversers the order in which to execute their walk, but instead, allows each traverser to select a pattern to execute from a collection + of (potentially nested) patterns. The <a href="http://tinkerpop.apache.org/docs/current/reference/#match-step">declarative traversal</a> on the left yields the same result as the imperative traversal above. However, the declarative traversal has the added benefit + that it leverages not only a compile-time query planner (like imperative traversals), but also a runtime query planner that chooses which traversal pattern to execute next based on the + historic statistics of each pattern -- favoring those patterns which tend to reduce/filter the most data. + </div> + </div> + <br/> + The user can write their traversals in any way they choose. However, ultimately when their traversal is compiled, and depending on the underlying execution engine + (i.e. an OLTP graph database or an OLAP graph processor), the user's traversal is rewritten by a set of <em><a href="http://tinkerpop.apache.org/docs/current/reference/#traversalstrategy">traversal strategies</a></em> which do their best to determine the most optimal execution + plan based on an understanding of graph data access costs as well as the underlying data systems's unique capabilities (e.g. fetch the Gremlin vertex from the graph database's "name"-index). + Gremlin has been designed to give users flexibility in how they express their queries and graph system providers flexibility in how to efficiently evaluate traversals against their TinkerPop-enabled data system. + </div> + <br/> + <div class="container"> + <a name="host-language-embedding"></a> + <h3>Host Language Embedding</h3> + <br/> + <div class="row"> + <div class="col-sm-5 col-md-4"> + <img src="images/gremlin-language-variants.png" class="img-responsive"> + </div> + <div class="col-sm-7 col-md-8"> + Classic database query languages, like <a href="https://en.wikipedia.org/wiki/SQL">SQL</a>, were conceived as being fundamentally different from the programming languages that would + ultimately use them in a production setting. For this reason, classical databases require the developer to code both in their native programming + language as well as in the database's respective query language. An argument can be made that the difference between "query languages" and + "programming languages" are not as great as we are taught to believe. Gremlin unifies this divide because traversals can be written in any + programming language that supports function <a href="https://en.wikipedia.org/wiki/Function_composition">composition</a> and <a href="https://en.wikipedia.org/wiki/Nested_function">nesting</a> (which every major programming language supports). In this way, the user's + Gremlin traversals are written along side their application code and benefit from the advantages afforded by the host language and its tooling + (e.g. type checking, syntax highlighting, dot completion, etc.). Various <a href="http://tinkerpop.apache.org/docs/current/tutorials/gremlin-language-variants/">Gremlin language variants</a> exist including: Gremlin-Java, Gremlin-Groovy, <a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-python">Gremlin-Python</a>, + <a href="https://github.com/mpollmeier/gremlin-scala">Gremlin-Scala</a>, etc. + </div> + <div class="col-md-12"> + <p><br/>The first example below shows a simple Java class. Note that the Gremlin traversal is expressed in Gremlin-Java and thus, is part of the user's application code. There is no need for the + developer to create a <code>String</code> representation of their query in (yet) another language to ultimately pass that <code>String</code> to the graph computing system and be returned a result set. Instead, + traversals are embedded in the user's host programming language and are on equal footing with all other application code. With Gremlin, users <strong>do not</strong> have to deal with the awkwardness exemplified + in the second example below which is a common anti-pattern found throughout the industry. + </p> + </div> + <br/><br/> + <div class="col-md-5"> + <pre style="padding:10px;"><code class="language-gremlin">public class GremlinTinkerPopExample { +public void run(String name, String property) { + +Graph graph = GraphFactory.open(...); +GraphTraversalSource g = graph.traversal(); + +double avg = g.V().has("name",name). + out("knows").out("created"). + values(property).mean().next(); + +System.out.println("Average rating: " + avg); +} +} + + +</code> +</pre> + </div> + <div class="col-md-7"> + <pre style="padding:10px;"><code class="language-gremlin">public class SqlJdbcExample { +public void run(String name, String property) { + +Connection connection = DriverManager.getConnection(...) +Statement statement = connection.createStatement(); +ResultSet result = statement.executeQuery( +"SELECT AVG(pr." + property + ") as AVERAGE FROM PERSONS p1" + +"INNER JOIN KNOWS k ON k.person1 = p1.id " + +"INNER JOIN PERSONS p2 ON p2.id = k.person2 " + +"INNER JOIN CREATED c ON c.person = p2.id " + +"INNER JOIN PROJECTS pr ON pr.id = c.project " + + "WHERE p.name = '" + name + "'); + +System.out.println("Average rating: " + result.next().getDouble("AVERAGE") +} +}</code> +</pre> + </div> + <div class="col-md-12"> + <p><br/>Behind the scenes, a Gremlin traversal will evaluate locally against an embedded graph database, serialize itself across the network to a remote + graph database, or send itself to an OLAP processor for cluster-wide distributed execution. The traversal source definition determines where the traversal executes. Once a traversal source is + defined it can be used over and over again in a manner analogous to a database connection. The ultimate effect is that the user "feels" that their data and their traversals are all + co-located in their application and accessible via their application's native programming language. The "query language/programming language"-divide is bridged by Gremlin. + </p> + <br/> + </div> + <div class="col-md-12"> + <pre style="padding:10px;"><code class="language-gremlin">Graph graph = GraphFactory.open(...); +GraphTraversalSource g; +g = graph.traversal(); // local OLTP +g = graph.traversal().withRemote(DriverRemoteConnection.using("server.yaml")) // remote OLTP +g = graph.traversal().withComputer(SparkGraphComputer.class); // distributed OLAP +g = graph.traversal().withComputer(GiraphGraphComputer.class); // distributed OLAP</code> +</pre> + </div> + <br/> + </div> + <div class="container"> + <hr/> + <h4>Related Resources</h4> + <br/> + <div class="carousel slide" data-ride="carousel" data-type="multi" data-interval="7000" id="relatedResources"> + <div class="carouselGrid-inner"> + <div class="item active"> + <div class="col-lg-3 col-md-3 col-sm-4 col-xs-6"><a href="https://academy.datastax.com/resources/getting-started-graph-databases"><img src="images/resources/graph-databases-101-resource.png" width="100%" /></a></div> + </div> + <div class="item"> + <div class="col-lg-3 col-md-3 col-sm-4 col-xs-6"><a href="http://datastax.com/dev/blog/the-benefits-of-the-gremlin-graph-traversal-machine"><img src="images/resources/benefits-gremlin-machine-resource.png" width="100%" /></a></div> + </div> + <div class="item"> + <div class="col-lg-3 col-md-3 col-sm-4 col-xs-6"><a href="http://arxiv.org/abs/1508.03843"><img src="images/resources/arxiv-article-resource.png" width="100%" /></a></div> + </div> + <div class="item"> + <div class="col-lg-3 col-md-3 col-sm-4 col-xs-6"><a href="http://sql2gremlin.com/"><img src="images/resources/sql-2-gremlin-resource.png" width="100%" /></a></div> + </div> + </div> + <a class="left carouselGrid-control" href="#relatedResources" data-slide="prev"> + <span class="icon-prev" aria-hidden="true"></span> + <span class="sr-only">Previous</span> + </a> + <a class="right carouselGrid-control" href="#relatedResources" data-slide="next"> + <span class="icon-next" aria-hidden="true"></span> + <span class="sr-only">Next</span> + </a> + </div> + <script> + $('.carousel[data-type="multi"] .item').each(function(){ + var next = $(this).next(); + if (!next.length) { // if ther isn't a next + next = $(this).siblings(':first'); // this is the first + } + next.children(':first-child').clone().appendTo($(this)); // put the next ones on the array + + for (var i=0;i<2;i++) { // THIS LOOP SPITS OUT EXTRA ITEMS TO THE CAROUSEL + next=next.next(); + if (!next.length) { + next = $(this).siblings(':first'); + } + next.children(':first-child').clone().appendTo($(this)); + } + + }); + </script> + </div> + </div> +</div> http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/apache-tinkerpop-logo.png ---------------------------------------------------------------------- diff --git a/site/home/images/apache-tinkerpop-logo.png b/site/home/images/apache-tinkerpop-logo.png new file mode 100644 index 0000000..8d222ed Binary files /dev/null and b/site/home/images/apache-tinkerpop-logo.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/blueprints-handdrawn.png ---------------------------------------------------------------------- diff --git a/site/home/images/blueprints-handdrawn.png b/site/home/images/blueprints-handdrawn.png new file mode 100644 index 0000000..8a7aba6 Binary files /dev/null and b/site/home/images/blueprints-handdrawn.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/cityscape-button.png ---------------------------------------------------------------------- diff --git a/site/home/images/cityscape-button.png b/site/home/images/cityscape-button.png new file mode 100644 index 0000000..85f986d Binary files /dev/null and b/site/home/images/cityscape-button.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/egg-logo.png ---------------------------------------------------------------------- diff --git a/site/home/images/egg-logo.png b/site/home/images/egg-logo.png new file mode 100644 index 0000000..9d25899 Binary files /dev/null and b/site/home/images/egg-logo.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/favicon.ico ---------------------------------------------------------------------- diff --git a/site/home/images/favicon.ico b/site/home/images/favicon.ico new file mode 100644 index 0000000..79782c4 Binary files /dev/null and b/site/home/images/favicon.ico differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/furnace-handdrawn.png ---------------------------------------------------------------------- diff --git a/site/home/images/furnace-handdrawn.png b/site/home/images/furnace-handdrawn.png new file mode 100644 index 0000000..53fa34b Binary files /dev/null and b/site/home/images/furnace-handdrawn.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/goutte-blue.png ---------------------------------------------------------------------- diff --git a/site/home/images/goutte-blue.png b/site/home/images/goutte-blue.png new file mode 100644 index 0000000..224dd38 Binary files /dev/null and b/site/home/images/goutte-blue.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/graph-globe.png ---------------------------------------------------------------------- diff --git a/site/home/images/graph-globe.png b/site/home/images/graph-globe.png new file mode 100644 index 0000000..9f37885 Binary files /dev/null and b/site/home/images/graph-globe.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/graph-vs-table.png ---------------------------------------------------------------------- diff --git a/site/home/images/graph-vs-table.png b/site/home/images/graph-vs-table.png new file mode 100644 index 0000000..04945ca Binary files /dev/null and b/site/home/images/graph-vs-table.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-apache.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-apache.png b/site/home/images/gremlin-apache.png new file mode 100644 index 0000000..e2d3bce Binary files /dev/null and b/site/home/images/gremlin-apache.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-download.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-download.png b/site/home/images/gremlin-download.png new file mode 100644 index 0000000..d9e1efd Binary files /dev/null and b/site/home/images/gremlin-download.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-github.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-github.png b/site/home/images/gremlin-github.png new file mode 100644 index 0000000..923bf43 Binary files /dev/null and b/site/home/images/gremlin-github.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-gym-mini.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-gym-mini.png b/site/home/images/gremlin-gym-mini.png new file mode 100644 index 0000000..5c3d023 Binary files /dev/null and b/site/home/images/gremlin-gym-mini.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-handdrawn.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-handdrawn.png b/site/home/images/gremlin-handdrawn.png new file mode 100644 index 0000000..ff3e9d3 Binary files /dev/null and b/site/home/images/gremlin-handdrawn.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-head.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-head.png b/site/home/images/gremlin-head.png new file mode 100644 index 0000000..ec54d65 Binary files /dev/null and b/site/home/images/gremlin-head.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-language-variants.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-language-variants.png b/site/home/images/gremlin-language-variants.png new file mode 100644 index 0000000..2c6ee8b Binary files /dev/null and b/site/home/images/gremlin-language-variants.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d19da4fe/site/home/images/gremlin-quill.png ---------------------------------------------------------------------- diff --git a/site/home/images/gremlin-quill.png b/site/home/images/gremlin-quill.png new file mode 100644 index 0000000..bafcd63 Binary files /dev/null and b/site/home/images/gremlin-quill.png differ
