From ced3b4ecc5c18692815366ccf6a9978daaecece6 Mon Sep 17 00:00:00 2001 From: Andreas Kollegger Date: Fri, 23 Dec 2011 10:42:43 -0500 Subject: [PATCH] ported sdn-todos example into org.neo4j namespace, altered text as appropriate --- spring-data-neo4j-examples/todos/.gitignore | 9 + spring-data-neo4j-examples/todos/Procfile | 1 + spring-data-neo4j-examples/todos/bin/todo | 60 +++ spring-data-neo4j-examples/todos/pom.xml | 362 ++++++++++++++++++ spring-data-neo4j-examples/todos/readme.md | 87 +++++ .../todos/src/main/java/Main.java | 23 ++ .../main/java/org/neo4j/app/todos/Todo.java | 76 ++++ .../org/neo4j/app/todos/TodoController.java | 127 ++++++ .../org/neo4j/app/todos/TodoRepository.java | 7 + .../spring/applicationContext-graph.xml | 26 ++ .../META-INF/spring/applicationContext.xml | 64 ++++ .../todos/src/main/resources/log4j.properties | 17 + .../todos/src/main/webapp/404.html | 47 +++ .../webapp/WEB-INF/classes/alt.properties | 1 + .../WEB-INF/classes/standard.properties | 1 + .../webapp/WEB-INF/spring/webmvc-config.xml | 9 + .../todos/src/main/webapp/WEB-INF/web.xml | 88 +++++ .../images/apple-touch-icon-114x114.png | Bin 0 -> 4349 bytes .../webapp/images/apple-touch-icon-72x72.png | Bin 0 -> 4072 bytes .../main/webapp/images/apple-touch-icon.png | Bin 0 -> 3369 bytes .../todos/src/main/webapp/images/favicon.ico | Bin 0 -> 2614 bytes .../src/main/webapp/images/icon_neo4j.png | Bin 0 -> 8133 bytes .../todos/src/main/webapp/images/icon_sdn.png | Bin 0 -> 6474 bytes .../todos/src/main/webapp/index.jsp | 107 ++++++ .../src/main/webapp/javascripts/sdn-todos.js | 25 ++ .../todos/src/main/webapp/javascripts/tabs.js | 42 ++ .../todos/src/main/webapp/log4j.properties | 17 + .../todos/src/main/webapp/robots.txt | 5 + .../src/main/webapp/stylesheets/base.css | 338 ++++++++++++++++ .../src/main/webapp/stylesheets/layout.css | 58 +++ .../src/main/webapp/stylesheets/skeleton.css | 236 ++++++++++++ 31 files changed, 1833 insertions(+) create mode 100644 spring-data-neo4j-examples/todos/.gitignore create mode 100644 spring-data-neo4j-examples/todos/Procfile create mode 100755 spring-data-neo4j-examples/todos/bin/todo create mode 100644 spring-data-neo4j-examples/todos/pom.xml create mode 100644 spring-data-neo4j-examples/todos/readme.md create mode 100644 spring-data-neo4j-examples/todos/src/main/java/Main.java create mode 100644 spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/Todo.java create mode 100644 spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoController.java create mode 100644 spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoRepository.java create mode 100644 spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext-graph.xml create mode 100644 spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext.xml create mode 100644 spring-data-neo4j-examples/todos/src/main/resources/log4j.properties create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/404.html create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/alt.properties create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/standard.properties create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/spring/webmvc-config.xml create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/web.xml create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon-114x114.png create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon-72x72.png create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon.png create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/images/favicon.ico create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/images/icon_neo4j.png create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/images/icon_sdn.png create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/index.jsp create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/javascripts/sdn-todos.js create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/javascripts/tabs.js create mode 100644 spring-data-neo4j-examples/todos/src/main/webapp/log4j.properties create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/robots.txt create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/base.css create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/layout.css create mode 100755 spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/skeleton.css diff --git a/spring-data-neo4j-examples/todos/.gitignore b/spring-data-neo4j-examples/todos/.gitignore new file mode 100644 index 000000000..126bde297 --- /dev/null +++ b/spring-data-neo4j-examples/todos/.gitignore @@ -0,0 +1,9 @@ +target/ +.idea +*.iml +.project +.classpath +.settings/ +*.swp +*~ +.DS_Store diff --git a/spring-data-neo4j-examples/todos/Procfile b/spring-data-neo4j-examples/todos/Procfile new file mode 100644 index 000000000..845910083 --- /dev/null +++ b/spring-data-neo4j-examples/todos/Procfile @@ -0,0 +1 @@ +web: sh target/bin/webapp diff --git a/spring-data-neo4j-examples/todos/bin/todo b/spring-data-neo4j-examples/todos/bin/todo new file mode 100755 index 000000000..0d140bc2d --- /dev/null +++ b/spring-data-neo4j-examples/todos/bin/todo @@ -0,0 +1,60 @@ +#!/bin/sh + +while getopts ":r" opt; do + case $opt in + r) + export APP_URL=`heroku info --raw | sed -n 's/^web_url=\(.*\)$/\1/p'` + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + ;; + esac + shift +done + +APP_URL=${APP_URL:="http://localhost:8080/"} +REST_ENDPOINT="${APP_URL}api/todos" +CURL_OPTS="--verbose --fail -H Accept:application/json -H Content-Type:application/json" + +list() { + curl ${CURL_OPTS} ${REST_ENDPOINT} +} + +make() { + TITLE=$1 + curl -d "{ \"title\" :\"${TITLE}\"}" ${CURL_OPTS} ${REST_ENDPOINT} +} + +remove() { + ID=$1 + REST_ENDPOINT="${REST_ENDPOINT}/${ID}" + curl -X DELETE ${CURL_OPTS} ${REST_ENDPOINT} +} + +usage() { + echo "Usage: $0 { list | mk | rm }" +} + +if [ "$1" == "" ]; then + usage + exit 1 +fi + + +case "$1" in + list) + list + ;; + + mk) + if [ "$2" == "" ]; then usage; echo " mk \"text\""; exit 1; fi + make "$2" + ;; + rm) + if [ "$2" == "" ]; then usage; echo " rm {id}"; exit 1; fi + remove "$2" + ;; + *) + usage + ;; +esac diff --git a/spring-data-neo4j-examples/todos/pom.xml b/spring-data-neo4j-examples/todos/pom.xml new file mode 100644 index 000000000..e0603aa67 --- /dev/null +++ b/spring-data-neo4j-examples/todos/pom.xml @@ -0,0 +1,362 @@ + + 4.0.0 + + org.neo4j.app + sdn-todos + 1.0-SNAPSHOT + jar + + sdn-todos + + + UTF-8 + 1.5 + 3.0.6.RELEASE + 2.0.0.RC1 + 1.6.12 + 1.6.1 + + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + neo4j-public-repository + http://m2.neo4j.org/ + Publicly available Maven 2 repository for Neo4j + + + spring-maven-milestone + http://maven.springframework.org/milestone + Spring Framework Maven MILESTONE Repository + + true + + + + spring-maven-snapshot + http://maven.springframework.org/snapshot + Springframework Maven SNAPSHOT Repository + + true + + + + + + spring-maven-release + Spring Maven Release Repository + http://maven.springframework.org/release + + + spring-maven-milestone + Spring Maven Milestone Repository + http://maven.springframework.org/milestone + + + + + + junit + junit + 4.8.2 + test + + + log4j + log4j + 1.2.16 + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + javax.servlet + servlet-api + 2.5 + compile + + + net.sf.flexjson + flexjson + 2.1 + + + + org.eclipse.jetty + jetty-webapp + 7.4.4.v20110707 + + + org.mortbay.jetty + jsp-2.1-glassfish + 2.1.v20100127 + + + + + org.springframework + spring-core + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-test + ${spring.version} + test + + + commons-logging + commons-logging + + + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-aop + ${spring.version} + + + org.springframework + spring-aspects + ${spring.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework.data + spring-data-neo4j-aspects + ${spring-data-neo4j.version} + + + org.springframework.data + spring-data-neo4j-rest + ${spring-data-neo4j.version} + + + javax.validation + validation-api + 1.0.0.GA + + + org.neo4j + neo4j + ${neo4j.version} + + + org.neo4j + neo4j-udc + + + + + org.springframework + spring-web + ${spring.version} + + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${spring.version} + + + + commons-logging + commons-logging + + + + + + + + org.codehaus.mojo + appassembler-maven-plugin + 1.1.1 + + + package + assemble + + target + -Xmx512m + + + Main + webapp + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + UTF-8 + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.2 + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + compile + test-compile + + + + + true + + + org.springframework + spring-aspects + + + org.springframework.data + spring-data-neo4j-aspects + + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.8 + + false + true + + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.7 + + true + false + 2.0 + + + org.eclipse.ajdt.core.ajbuilder + + org.springframework.aspects + + + + org.springframework.ide.eclipse.core.springbuilder + + + + org.eclipse.ajdt.ui.ajnature + org.springframework.ide.eclipse.core.springnature + + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2 + + true + true + + + + org.codehaus.mojo + tomcat-maven-plugin + 1.1 + + + org.mortbay.jetty + jetty-maven-plugin + 7.4.2.v20110526 + + + /${project.name} + + + + + + + diff --git a/spring-data-neo4j-examples/todos/readme.md b/spring-data-neo4j-examples/todos/readme.md new file mode 100644 index 000000000..fb4fbbe38 --- /dev/null +++ b/spring-data-neo4j-examples/todos/readme.md @@ -0,0 +1,87 @@ +Spring Data Neo4j Todos +======================= + +A simple todo list using Spring Data Neo4j, configured for easy deployment to Heroku. + +Get Ready +--------- + +To prepare for deploying to Heroku, you must first become a Hero: + +* Create an account on [Heroku](http://heroku.com) +* Install the `heroku` command-line client +* See the [Heroku Quickstart](http://devcenter.heroku.com/articles/quickstart) for details + +Feel ready? OK, then get a copy of this project and checkout the heroku-deploy branch: + +```bash +git clone git://github.com/akollegger/sdn-todos.git +cd sdn-todos +git checkout heroku-deploy +``` + +Local build and run +------------------- + +* Run a local Neo4j server (using default config) + +```bash +export NEO4J_REST_URL=http://localhost:7474/db/data +export NEO4J_LOGIN="" +export NEO4J_PASSWORD="" +``` +* Build, then run locally + +```bash +mvn package +sh target/bin/webapp +``` + +* check that it is working + +```bash +./bin/todo mk "tweet high praises to @neo4j" +./bin/todo list +``` + +Satisfied? Then `ctrl-c` to kill the application. + + +Deploy on Heroku +---------------- + +Create a new provisioning stack on Heroku for the app. + +```bash +heroku create --stack cedar` +heroku addons:add neo4j +git push heroku heroku-deploy:master +``` + +Check to make sure it is running with `heroku ps`, which should show a `web.1` process with an "up" state. + +Finally try it out using the `-r` flag to indicate remote access. + +```bash +./bin/todo -r mk "tweet thanks for the good work @mesirii @akollegger" +./bin/todo -r list +``` + +To see the Neo4j graph you just created through Heroku, use `heroku config` to reveal the NEO4J_URL +which can take you to Neo4j's Webadmin. Have fun! + +For a detailed play-by-play, read [Becoming a Heroku](https://github.com/akollegger/sdn-todos/wiki/Becoming-a-Hero(ku)) + +CLI Tool +-------- + +A simplistic `todo` script in the `bin` directory can directly create, delete and list todos. + + Usage: todo [-r] [ list | mk | rm ] + + todo -r - access the remote (Heroku) todo application + todo list - list current todos + todo mk "a new todo" - to create a todo + todo rm 1 - to remove the todo with id 1 + + diff --git a/spring-data-neo4j-examples/todos/src/main/java/Main.java b/spring-data-neo4j-examples/todos/src/main/java/Main.java new file mode 100644 index 000000000..b34ddc186 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/java/Main.java @@ -0,0 +1,23 @@ +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.webapp.WebAppContext; +public class Main +{ + public static void main(String[] args) throws Exception + { + String webappDirLocation = "src/main/webapp/"; + String webPort = System.getenv("PORT"); + if(webPort == null || webPort.isEmpty()) { + webPort = "8080"; + } + Server server = new Server(Integer.valueOf(webPort)); + WebAppContext root = new WebAppContext(); + root.setContextPath("/"); + root.setDescriptor(webappDirLocation+"/WEB-INF/web.xml"); + root.setResourceBase(webappDirLocation); + root.setParentLoaderPriority(true); + server.setHandler(root); + server.start(); + server.join(); + } +} + diff --git a/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/Todo.java b/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/Todo.java new file mode 100644 index 000000000..acafebb11 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/Todo.java @@ -0,0 +1,76 @@ +package org.neo4j.app.todos; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.neo4j.graphdb.Node; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.data.neo4j.annotation.GraphId; +import org.springframework.data.neo4j.annotation.NodeEntity; + +import flexjson.JSONDeserializer; +import flexjson.JSONSerializer; + +@NodeEntity +@Configurable +public class Todo { + + @SuppressWarnings("unused") + @GraphId + private Long id; + + private String title; + + private Boolean isDone = false; + + public Todo() {;} + + public Todo(Node n) { + setPersistentState(n); + } + + public Long getId() { + return getNodeId(); + } + + public String getTitle() { + return this.title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Boolean getIsDone() { + return this.isDone; + } + + public void setIsDone(Boolean done) { + this.isDone = done; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Done: ").append(getIsDone()).append(", "); + sb.append("Title: ").append(getTitle()); + return sb.toString(); + } + + public String toJson() { + return new JSONSerializer().exclude("*.class", "*.persistentState", "*.entityState").serialize(this); + } + + public static String toJsonArray(Iterable collection) { + return new JSONSerializer().exclude("*.class", "*.persistentState", "*.entityState").serialize(collection); + } + + public static Todo fromJsonToTodo(String json) { + return new JSONDeserializer().use(null, Todo.class).deserialize(json); + } + + public static Collection fromJsonArrayToTodoes(String json) { + return new JSONDeserializer>().use(null, ArrayList.class).use("values", Todo.class).deserialize(json); + } + +} diff --git a/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoController.java b/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoController.java new file mode 100644 index 000000000..a747f87c7 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoController.java @@ -0,0 +1,127 @@ +package org.neo4j.app.todos; + +import java.io.UnsupportedEncodingException; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.util.UriUtils; +import org.springframework.web.util.WebUtils; + +@RequestMapping("/todos") +@Controller +public class TodoController { + + @Autowired TodoRepository todos; + + /** + * POST /todos { "title": "text of the todo" } + * + * Creates a new todo. + * + * @param json + * @return json containing the id of the newly created todo + */ + @RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json") + public ResponseEntity createFromJson(@RequestBody String json) { + Todo createdTodo = todos.save(Todo.fromJsonToTodo(json)); + HttpHeaders headers= new HttpHeaders(); + headers.add("Content-Type", "application/text"); + return new ResponseEntity("{\"id\":" + createdTodo.getId() + "}", headers, HttpStatus.CREATED); + } + + /** + * GET /todos/{id} + * + * Gets the full json for a todo. + * + * @param id + * @return json representation of the requested todo, or HttpStatus.NOT_FOUND + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET, headers = "Accept=application/json") + @ResponseBody + public ResponseEntity showJson(@PathVariable("id") Long id) { + Todo todo = todos.findOne(id); + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", "application/text; charset=utf-8"); + if (todo == null) { + return new ResponseEntity(headers, HttpStatus.NOT_FOUND); + } + return new ResponseEntity(todo.toJson(), headers, HttpStatus.OK); + } + + /** + * Get /todos/ + * + * Gets a json array of all todos. + * + * @return json array representation of all todos + */ + @RequestMapping(headers = "Accept=application/json") + @ResponseBody + public ResponseEntity listJson() { + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", "application/text; charset=utf-8"); + return new ResponseEntity(Todo.toJsonArray(todos.findAll()), headers, HttpStatus.OK); + } + + /** + * PUT /todos/ { "id": id, "title": "text of todo", idDone: true|false } + * + * Updates an existing todo. + * + * @param json full json representation of the todo to update + * @return + */ + @RequestMapping(method = RequestMethod.PUT, headers = "Accept=application/json") + public ResponseEntity updateFromJson(@RequestBody String json) { + HttpHeaders headers= new HttpHeaders(); + headers.add("Content-Type", "application/text"); + if (todos.save(Todo.fromJsonToTodo(json)) == null) { + return new ResponseEntity(headers, HttpStatus.NOT_FOUND); + } + return new ResponseEntity(headers, HttpStatus.OK); + } + + /** + * DELETE /todos/{id} + * + * Deletes an existing todo. + * + * @param id + * @return + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE, headers = "Accept=application/json") + public ResponseEntity deleteFromJson(@PathVariable("id") Long id) { + Todo todo = todos.findOne(id); + HttpHeaders headers= new HttpHeaders(); + headers.add("Content-Type", "application/text"); + if (todo == null) { + return new ResponseEntity(headers, HttpStatus.NOT_FOUND); + } + todos.delete(todo); + return new ResponseEntity(headers, HttpStatus.OK); + } + + String encodeUrlPathSegment(String pathSegment, HttpServletRequest httpServletRequest) { + String enc = httpServletRequest.getCharacterEncoding(); + if (enc == null) { + enc = WebUtils.DEFAULT_CHARACTER_ENCODING; + } + try { + pathSegment = UriUtils.encodePathSegment(pathSegment, enc); + } + catch (UnsupportedEncodingException uee) {} + return pathSegment; + } + +} diff --git a/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoRepository.java b/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoRepository.java new file mode 100644 index 000000000..be2bf1228 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/java/org/neo4j/app/todos/TodoRepository.java @@ -0,0 +1,7 @@ +package org.neo4j.app.todos; + +import org.springframework.data.neo4j.repository.GraphRepository; + +public interface TodoRepository extends GraphRepository { + +} diff --git a/spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext-graph.xml b/spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext-graph.xml new file mode 100644 index 000000000..c6c1e230f --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext-graph.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext.xml b/spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext.xml new file mode 100644 index 000000000..4ad95b926 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/resources/META-INF/spring/applicationContext.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-neo4j-examples/todos/src/main/resources/log4j.properties b/spring-data-neo4j-examples/todos/src/main/resources/log4j.properties new file mode 100644 index 000000000..5014b358b --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/resources/log4j.properties @@ -0,0 +1,17 @@ +log4j.rootLogger=error, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +log4j.appender.R=org.apache.log4j.RollingFileAppender +log4j.appender.R.File=application.log + +log4j.appender.R.MaxFileSize=100KB +# Keep one backup file +log4j.appender.R.MaxBackupIndex=1 + +log4j.appender.R.layout=org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/404.html b/spring-data-neo4j-examples/todos/src/main/webapp/404.html new file mode 100755 index 000000000..a24448f41 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/404.html @@ -0,0 +1,47 @@ + + + + + + + + + + Your Page Title Here :) + + + + + + + + + + + + + + + + + + + + + + +
+

Sorry. Couldn't Find That Page!

+
+ + + + \ No newline at end of file diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/alt.properties b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/alt.properties new file mode 100644 index 000000000..48df87ff7 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/alt.properties @@ -0,0 +1 @@ +styleSheet=resources/styles/alt.css diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/standard.properties b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/standard.properties new file mode 100644 index 000000000..d8dc0164d --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/classes/standard.properties @@ -0,0 +1 @@ +styleSheet=resources/styles/standard.css diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/spring/webmvc-config.xml b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/spring/webmvc-config.xml new file mode 100644 index 000000000..18d9cf3b1 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/spring/webmvc-config.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/web.xml b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..25ccf72ae --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,88 @@ + + + + + sdn-todos + + Neo4j SDN Todo Application + + + + + defaultHtmlEscape + true + + + + contextConfigLocation + classpath*:META-INF/spring/applicationContext*.xml + + + + CharacterEncodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + + + + HttpMethodFilter + org.springframework.web.filter.HiddenHttpMethodFilter + + + CharacterEncodingFilter + /* + + + + HttpMethodFilter + /* + + + + + org.springframework.web.context.ContextLoaderListener + + + + + dispatcher + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + /WEB-INF/spring/webmvc-config.xml + + 1 + + + + dispatcher + /api/* + + + + 10 + + + + index.jsp + + + + java.lang.Exception + /uncaughtException + + + + 404 + /resourceNotFound + + diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon-114x114.png b/spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon-114x114.png new file mode 100755 index 0000000000000000000000000000000000000000..1c956e0b86066715e7e5bf28bb318c56da951d29 GIT binary patch literal 4349 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon-72x72.png b/spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon-72x72.png new file mode 100755 index 0000000000000000000000000000000000000000..45469aa1760e1bb99bdfc1f1ea2c2af52095419d GIT binary patch literal 4072 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 NTt~}5vr-)u{yzyfR#5-| literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon.png b/spring-data-neo4j-examples/todos/src/main/webapp/images/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..a3e9bcbc9501f7aa210cb855b3e83826bffa3bb6 GIT binary patch literal 3369 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/images/favicon.ico b/spring-data-neo4j-examples/todos/src/main/webapp/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..12fab2490e096ff379e98c3064100c2288146507 GIT binary patch literal 2614 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 Y0bLq=5JP7ek^lez07*qoM6N<$f~@q|+5i9m literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/images/icon_neo4j.png b/spring-data-neo4j-examples/todos/src/main/webapp/images/icon_neo4j.png new file mode 100644 index 0000000000000000000000000000000000000000..d41005e7b5b5d3b5f97d889ffcf3fdf9a696756b GIT binary patch literal 8133 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 literal 0 HcmV?d00001 diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/index.jsp b/spring-data-neo4j-examples/todos/src/main/webapp/index.jsp new file mode 100644 index 000000000..042033731 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/index.jsp @@ -0,0 +1,107 @@ + + + + + + + + + + SDN Todos + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Spring Data Neo4j: Todos

+
heroku-deploy
+
+
+
+ + + +
+ + +
+
Todos (a simply jquery pull from the json endpoint):
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+ + + + + + + + + + diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/javascripts/sdn-todos.js b/spring-data-neo4j-examples/todos/src/main/webapp/javascripts/sdn-todos.js new file mode 100755 index 000000000..f693369bb --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/javascripts/sdn-todos.js @@ -0,0 +1,25 @@ +$(document).ready(function() { + + $.ajaxSetup ({ + cache: false + }); + + var jsonUrl = "api/todos"; + + $.getJSON( + jsonUrl, + function(json) { + var items = []; + + $.each(json, function(i, todo) { + items.push('
  • ' + todo.title + '
  • '); + }); + + $('
      ', { + 'class': 'disc', + html: items.join('') + }).appendTo('div#todos'); + } + ); + +}); \ No newline at end of file diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/javascripts/tabs.js b/spring-data-neo4j-examples/todos/src/main/webapp/javascripts/tabs.js new file mode 100755 index 000000000..8a74b100d --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/javascripts/tabs.js @@ -0,0 +1,42 @@ +/* +* Skeleton V1.1 +* Copyright 2011, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 8/17/2011 +*/ + + +$(document).ready(function() { + + /* Tabs Activiation + ================================================== */ + + var tabs = $('ul.tabs'); + + tabs.each(function(i) { + + //Get all tabs + var tab = $(this).find('> li > a'); + tab.click(function(e) { + + //Get Location of tab's content + var contentLocation = $(this).attr('href'); + + //Let go if not a hashed one + if(contentLocation.charAt(0)=="#") { + + e.preventDefault(); + + //Make Tab Active + tab.removeClass('active'); + $(this).addClass('active'); + + //Show Tab Content & add active class + $(contentLocation).show().addClass('active').siblings().hide().removeClass('active'); + + } + }); + }); +}); \ No newline at end of file diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/log4j.properties b/spring-data-neo4j-examples/todos/src/main/webapp/log4j.properties new file mode 100644 index 000000000..5014b358b --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/log4j.properties @@ -0,0 +1,17 @@ +log4j.rootLogger=error, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +log4j.appender.R=org.apache.log4j.RollingFileAppender +log4j.appender.R.File=application.log + +log4j.appender.R.MaxFileSize=100KB +# Keep one backup file +log4j.appender.R.MaxBackupIndex=1 + +log4j.appender.R.layout=org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/robots.txt b/spring-data-neo4j-examples/todos/src/main/webapp/robots.txt new file mode 100755 index 000000000..d310d070b --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/robots.txt @@ -0,0 +1,5 @@ +# www.robotstxt.org/ +# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 + +User-agent: * + diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/base.css b/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/base.css new file mode 100755 index 000000000..4533d8903 --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/base.css @@ -0,0 +1,338 @@ +/* +* Skeleton V1.1 +* Copyright 2011, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 8/17/2011 +*/ + + +/* Table of Content +================================================== + #Reset & Basics + #Basic Styles + #Site Styles + #Typography + #Links + #Lists + #Images + #Buttons + #Tabs + #Forms + #Misc */ + + +/* #Reset & Basics (Inspired by E. Meyers) +================================================== */ + html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; } + article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; } + body { + line-height: 1; } + ol, ul { + list-style: none; } + blockquote, q { + quotes: none; } + blockquote:before, blockquote:after, + q:before, q:after { + content: ''; + content: none; } + table { + border-collapse: collapse; + border-spacing: 0; } + + +/* #Basic Styles +================================================== */ + body { + background: #fff; + font: 14px/21px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #444; + -webkit-font-smoothing: antialiased; /* Fix for webkit rendering */ + -webkit-text-size-adjust: 100%; + } + + +/* #Typography +================================================== */ + h1, h2, h3, h4, h5, h6 { + color: #181818; + font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif; + font-weight: normal; } + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } + h1 { font-size: 46px; line-height: 50px; margin-bottom: 14px;} + h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; } + h3 { font-size: 28px; line-height: 34px; margin-bottom: 8px; } + h4 { font-size: 21px; line-height: 30px; margin-bottom: 4px; } + h5 { font-size: 17px; line-height: 24px; } + h6 { font-size: 14px; line-height: 21px; } + .subheader { color: #777; } + + p { margin: 0 0 20px 0; } + p img { margin: 0; } + p.lead { font-size: 21px; line-height: 27px; color: #777; } + + em { font-style: italic; } + strong { font-weight: bold; color: #333; } + small { font-size: 80%; } + +/* Blockquotes */ + blockquote, blockquote p { font-size: 17px; line-height: 24px; color: #777; font-style: italic; } + blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; } + blockquote cite { display: block; font-size: 12px; color: #555; } + blockquote cite:before { content: "\2014 \0020"; } + blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; } + + hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; } + + +/* #Links +================================================== */ + a, a:visited { color: #333; text-decoration: underline; outline: 0; } + a:hover, a:focus { color: #000; } + p a, p a:visited { line-height: inherit; } + + +/* #Lists +================================================== */ + ul, ol { margin-bottom: 20px; } + ul { list-style: none outside; } + ol { list-style: decimal; } + ol, ul.square, ul.circle, ul.disc { margin-left: 30px; } + ul.square { list-style: square outside; } + ul.circle { list-style: circle outside; } + ul.disc { list-style: disc outside; } + ul ul, ul ol, + ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; } + ul ul li, ul ol li, + ol ol li, ol ul li { margin-bottom: 6px; } + li { line-height: 18px; margin-bottom: 12px; } + ul.large li { line-height: 21px; } + li p { line-height: 21px; } + +/* #Images +================================================== */ + + img.scale-with-grid { + max-width: 100%; + height: auto; } + + +/* #Buttons +================================================== */ + + a.button, + button, + input[type="submit"], + input[type="reset"], + input[type="button"] { + background: #eee; /* Old browsers */ + background: #eee -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */ + background: #eee -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */ + background: #eee -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */ + background: #eee -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */ + background: #eee -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */ + background: #eee linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */ + border: 1px solid #aaa; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + padding: 4px 12px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + color: #444; + display: inline-block; + font-size: 11px; + font-weight: bold; + text-decoration: none; + text-shadow: 0 1px rgba(255, 255, 255, .75); + cursor: pointer; + margin-bottom: 20px; + line-height: 21px; + font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; } + + a.button:hover, + button:hover, + input[type="submit"]:hover, + input[type="reset"]:hover, + input[type="button"]:hover { + color: #222; + background: #ddd; /* Old browsers */ + background: #ddd -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */ + background: #ddd -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */ + background: #ddd -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */ + background: #ddd -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */ + background: #ddd -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */ + background: #ddd linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */ + border: 1px solid #888; + border-top: 1px solid #aaa; + border-left: 1px solid #aaa; } + + a.button:active, + button:active, + input[type="submit"]:active, + input[type="reset"]:active, + input[type="button"]:active { + border: 1px solid #666; + background: #ccc; /* Old browsers */ + background: #ccc -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */ + background: #ccc -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */ + background: #ccc -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */ + background: #ccc -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */ + background: #ccc -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */ + background: #ccc linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ } + + .button.full-width, + button.full-width, + input[type="submit"].full-width, + input[type="reset"].full-width, + input[type="button"].full-width { + width: 100%; + padding-left: 0 !important; + padding-right: 0 !important; + text-align: center; } + + +/* #Tabs (activate in tabs.js) +================================================== */ + ul.tabs { + display: block; + margin: 0 0 20px 0; + padding: 0; + border-bottom: solid 1px #ddd; } + ul.tabs li { + display: block; + width: auto; + height: 30px; + padding: 0; + float: left; + margin-bottom: 0; } + ul.tabs li a { + display: block; + text-decoration: none; + width: auto; + height: 29px; + padding: 0px 20px; + line-height: 30px; + border: solid 1px #ddd; + border-width: 1px 1px 0 0; + margin: 0; + background: #f5f5f5; + font-size: 13px; } + ul.tabs li a.active { + background: #fff; + height: 30px; + position: relative; + top: -4px; + padding-top: 4px; + border-left-width: 1px; + margin: 0 0 0 -1px; + color: #111; + -moz-border-radius-topleft: 2px; + -webkit-border-top-left-radius: 2px; + border-top-left-radius: 2px; + -moz-border-radius-topright: 2px; + -webkit-border-top-right-radius: 2px; + border-top-right-radius: 2px; } + ul.tabs li:first-child a.active { + margin-left: 0; } + ul.tabs li:first-child a { + border-width: 1px 1px 0 1px; + -moz-border-radius-topleft: 2px; + -webkit-border-top-left-radius: 2px; + border-top-left-radius: 2px; } + ul.tabs li:last-child a { + -moz-border-radius-topright: 2px; + -webkit-border-top-right-radius: 2px; + border-top-right-radius: 2px; } + + ul.tabs-content { margin: 0; display: block; } + ul.tabs-content > li { display:none; } + ul.tabs-content > li.active { display: block; } + + /* Clearfixing tabs for beautiful stacking */ + ul.tabs:before, + ul.tabs:after { + content: '\0020'; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; } + ul.tabs:after { + clear: both; } + ul.tabs { + zoom: 1; } + + +/* #Forms +================================================== */ + + form { + margin-bottom: 20px; } + fieldset { + margin-bottom: 20px; } + input[type="text"], + input[type="password"], + input[type="email"], + textarea, + select { + border: 1px solid #ccc; + padding: 6px 4px; + outline: none; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + font: 13px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #777; + margin: 0; + width: 210px; + max-width: 100%; + display: block; + margin-bottom: 20px; + background: #fff; } + select { + padding: 0; } + input[type="text"]:focus, + input[type="password"]:focus, + input[type="email"]:focus, + textarea:focus { + border: 1px solid #aaa; + color: #444; + -moz-box-shadow: 0 0 3px rgba(0,0,0,.2); + -webkit-box-shadow: 0 0 3px rgba(0,0,0,.2); + box-shadow: 0 0 3px rgba(0,0,0,.2); } + textarea { + min-height: 60px; } + label, + legend { + display: block; + font-weight: bold; + font-size: 13px; } + select { + width: 220px; } + input[type="checkbox"] { + display: inline; } + label span, + legend span { + font-weight: normal; + font-size: 13px; + color: #444; } + +/* #Misc +================================================== */ + .remove-bottom { margin-bottom: 0 !important; } + .half-bottom { margin-bottom: 10px !important; } + .add-bottom { margin-bottom: 20px !important; } + + +/* #SDN styling +================================================== */ + #footer { background: #eee; } \ No newline at end of file diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/layout.css b/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/layout.css new file mode 100755 index 000000000..aff5b477e --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/layout.css @@ -0,0 +1,58 @@ +/* +* Skeleton V1.1 +* Copyright 2011, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 8/17/2011 +*/ + +/* Table of Content +================================================== + #Site Styles + #Page Styles + #Media Queries + #Font-Face */ + +/* #Site Styles +================================================== */ + +/* #Page Styles +================================================== */ + +/* #Media Queries +================================================== */ + + /* Smaller than standard 960 (devices and browsers) */ + @media only screen and (max-width: 959px) {} + + /* Tablet Portrait size to standard 960 (devices and browsers) */ + @media only screen and (min-width: 768px) and (max-width: 959px) {} + + /* All Mobile Sizes (devices and browser) */ + @media only screen and (max-width: 767px) {} + + /* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ + @media only screen and (min-width: 480px) and (max-width: 767px) {} + + /* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ + @media only screen and (max-width: 479px) {} + + +/* #Font-Face +================================================== */ +/* This is the proper syntax for an @font-face file + Just create a "fonts" folder at the root, + copy your FontName into code below and remove + comment brackets */ + +/* @font-face { + font-family: 'FontName'; + src: url('../fonts/FontName.eot'); + src: url('../fonts/FontName.eot?iefix') format('eot'), + url('../fonts/FontName.woff') format('woff'), + url('../fonts/FontName.ttf') format('truetype'), + url('../fonts/FontName.svg#webfontZam02nTh') format('svg'); + font-weight: normal; + font-style: normal; } +*/ \ No newline at end of file diff --git a/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/skeleton.css b/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/skeleton.css new file mode 100755 index 000000000..d0264a40b --- /dev/null +++ b/spring-data-neo4j-examples/todos/src/main/webapp/stylesheets/skeleton.css @@ -0,0 +1,236 @@ +/* +* Skeleton V1.1 +* Copyright 2011, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 8/17/2011 +*/ + + +/* Table of Contents +================================================== + #Base 960 Grid + #Tablet (Portrait) + #Mobile (Portrait) + #Mobile (Landscape) + #Clearing */ + + + +/* #Base 960 Grid +================================================== */ + + .container { position: relative; width: 960px; margin: 0 auto; padding: 0; } + .column, .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; } + .row { margin-bottom: 20px; } + + /* Nested Column Classes */ + .column.alpha, .columns.alpha { margin-left: 0; } + .column.omega, .columns.omega { margin-right: 0; } + + /* Base Grid */ + .container .one.column { width: 40px; } + .container .two.columns { width: 100px; } + .container .three.columns { width: 160px; } + .container .four.columns { width: 220px; } + .container .five.columns { width: 280px; } + .container .six.columns { width: 340px; } + .container .seven.columns { width: 400px; } + .container .eight.columns { width: 460px; } + .container .nine.columns { width: 520px; } + .container .ten.columns { width: 580px; } + .container .eleven.columns { width: 640px; } + .container .twelve.columns { width: 700px; } + .container .thirteen.columns { width: 760px; } + .container .fourteen.columns { width: 820px; } + .container .fifteen.columns { width: 880px; } + .container .sixteen.columns { width: 940px; } + + .container .one-third.column { width: 300px; } + .container .two-thirds.column { width: 620px; } + + /* Offsets */ + .container .offset-by-one { padding-left: 60px; } + .container .offset-by-two { padding-left: 120px; } + .container .offset-by-three { padding-left: 180px; } + .container .offset-by-four { padding-left: 240px; } + .container .offset-by-five { padding-left: 300px; } + .container .offset-by-six { padding-left: 360px; } + .container .offset-by-seven { padding-left: 420px; } + .container .offset-by-eight { padding-left: 480px; } + .container .offset-by-nine { padding-left: 540px; } + .container .offset-by-ten { padding-left: 600px; } + .container .offset-by-eleven { padding-left: 660px; } + .container .offset-by-twelve { padding-left: 720px; } + .container .offset-by-thirteen { padding-left: 780px; } + .container .offset-by-fourteen { padding-left: 840px; } + .container .offset-by-fifteen { padding-left: 900px; } + + + +/* #Tablet (Portrait) +================================================== */ + + /* Note: Design for a width of 768px */ + + @media only screen and (min-width: 768px) and (max-width: 959px) { + .container { width: 768px; } + .container .column, + .container .columns { margin-left: 10px; margin-right: 10px; } + .column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; } + .column.omega, .columns.omega { margin-right: 0; margin-left: 10px; } + + .container .one.column { width: 28px; } + .container .two.columns { width: 76px; } + .container .three.columns { width: 124px; } + .container .four.columns { width: 172px; } + .container .five.columns { width: 220px; } + .container .six.columns { width: 268px; } + .container .seven.columns { width: 316px; } + .container .eight.columns { width: 364px; } + .container .nine.columns { width: 412px; } + .container .ten.columns { width: 460px; } + .container .eleven.columns { width: 508px; } + .container .twelve.columns { width: 556px; } + .container .thirteen.columns { width: 604px; } + .container .fourteen.columns { width: 652px; } + .container .fifteen.columns { width: 700px; } + .container .sixteen.columns { width: 748px; } + + .container .one-third.column { width: 236px; } + .container .two-thirds.column { width: 492px; } + + /* Offsets */ + .container .offset-by-one { padding-left: 48px; } + .container .offset-by-two { padding-left: 96px; } + .container .offset-by-three { padding-left: 144px; } + .container .offset-by-four { padding-left: 192px; } + .container .offset-by-five { padding-left: 240px; } + .container .offset-by-six { padding-left: 288px; } + .container .offset-by-seven { padding-left: 336px; } + .container .offset-by-eight { padding-left: 348px; } + .container .offset-by-nine { padding-left: 432px; } + .container .offset-by-ten { padding-left: 480px; } + .container .offset-by-eleven { padding-left: 528px; } + .container .offset-by-twelve { padding-left: 576px; } + .container .offset-by-thirteen { padding-left: 624px; } + .container .offset-by-fourteen { padding-left: 672px; } + .container .offset-by-fifteen { padding-left: 720px; } + } + + +/* #Mobile (Portrait) +================================================== */ + + /* Note: Design for a width of 320px */ + + @media only screen and (max-width: 767px) { + .container { width: 300px; } + .columns, .column { margin: 0; } + + .container .one.column, + .container .two.columns, + .container .three.columns, + .container .four.columns, + .container .five.columns, + .container .six.columns, + .container .seven.columns, + .container .eight.columns, + .container .nine.columns, + .container .ten.columns, + .container .eleven.columns, + .container .twelve.columns, + .container .thirteen.columns, + .container .fourteen.columns, + .container .fifteen.columns, + .container .sixteen.columns, + .container .one-third.column, + .container .two-thirds.column { width: 300px; } + + /* Offsets */ + .container .offset-by-one, + .container .offset-by-two, + .container .offset-by-three, + .container .offset-by-four, + .container .offset-by-five, + .container .offset-by-six, + .container .offset-by-seven, + .container .offset-by-eight, + .container .offset-by-nine, + .container .offset-by-ten, + .container .offset-by-eleven, + .container .offset-by-twelve, + .container .offset-by-thirteen, + .container .offset-by-fourteen, + .container .offset-by-fifteen { padding-left: 0; } + + } + + +/* #Mobile (Landscape) +================================================== */ + + /* Note: Design for a width of 480px */ + + @media only screen and (min-width: 480px) and (max-width: 767px) { + .container { width: 420px; } + .columns, .column { margin: 0; } + + .container .one.column, + .container .two.columns, + .container .three.columns, + .container .four.columns, + .container .five.columns, + .container .six.columns, + .container .seven.columns, + .container .eight.columns, + .container .nine.columns, + .container .ten.columns, + .container .eleven.columns, + .container .twelve.columns, + .container .thirteen.columns, + .container .fourteen.columns, + .container .fifteen.columns, + .container .sixteen.columns, + .container .one-third.column, + .container .two-thirds.column { width: 420px; } + } + + +/* #Clearing +================================================== */ + + /* Self Clearing Goodness */ + .container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; } + + /* Use clearfix class on parent to clear nested columns, + or wrap each row of columns in a
      */ + .clearfix:before, + .clearfix:after, + .row:before, + .row:after { + content: '\0020'; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; } + .row:after, + .clearfix:after { + clear: both; } + .row, + .clearfix { + zoom: 1; } + + /* You can also use a
      to clear columns */ + .clear { + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; + } + +