diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..f4e0e90 --- /dev/null +++ b/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..340801b --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +bin +build +distribution +reference +applet +application.windows +application.linux +application.macosx +.settings \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..4127f46 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + AnimataPlayback + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/examples/AddScene/AddScene.pde b/examples/AddScene/AddScene.pde new file mode 100644 index 0000000..c7a6619 --- /dev/null +++ b/examples/AddScene/AddScene.pde @@ -0,0 +1,9 @@ +import animata.*; +void setup() { + size(400,400); + AnimataPlayback playback = new AnimataPlayback(this); +} + +void draw() { + background(0); +} diff --git a/readme.html b/readme.html new file mode 100644 index 0000000..55f6b85 --- /dev/null +++ b/readme.html @@ -0,0 +1,202 @@ + + +Library Template >> Develop Processing + + + + + + + + + + + + + + + + + +
 
+ + + + + + + + + + + + +
  + + + + + + + + + + + + + + + + + + + + + + + +
Cover \ Build \ Source \ Bugs  + \ Reference \ Libraries  
      + Overview \ Guidelines \ Template \ Basics + +
+
 
  
+ + + + + +
 
+ + + + + + + +
+ + + +
+

Eclipse Library Template

+

The following describe how to set up a Processing library project in Eclipse and build it successfully, and to make your library ready for distribution.

+
    +
  1. Download the latest Eclipse template from here. Don't unzip the .zip file yet.

  2. + +
  3. Create a new java project in eclipse. from the menubar choose File → New → Java Project. Give the project the name of your library.

  4. +
  5. Right-click (ctrl-click) onto the folder icon of your newly created project in the "Package Explorer" and choose "Import" from the menu that pops up. Select General → Archive File, click "Next" and navigate to the zip file you downloaded earlier in step 1. Confirm the archive with "Finish".

  6. + +
  7. Open your project's "Properties" window. Under "Java Build Path", select the "Libraries" tab and use "add external JARs" and add processing's core.jar to your build path. It is recommended that a copy of core.jar is located in your eclipse workspace in a folder libs. If folder libs does not exist yet, create it. Read the section below regarding where to find the core.jar file.

  8. +
  9. Confirm the setup with "finish".

  10. + +
  11. Open the "resources" folder inside of your java project and double click the build.xml file. This file will be used to compile your library with apache ant. After double clicking the file, you should see its content in the eclipse editor. Edit the ant file, make changes to items 1-14 at the beginning of the file so that the values and paths are properly set for your project to compile. A path can be a relative path or absolute. (1-4 are settings for compiling your project. 5-14 are settings for the automatically generated html document.)

  12. +
  13. From the menu bar, choose Window → Show View → Ant. A tab with the title ant will pop up on the right side of your eclipse editor. Drag the resources/build.xml file in there, and a new item "processingLibs" will appear. Press the play button inside the ant tab.

  14. +
  15. BUILD SUCCESSFUL. The library template will start to compile, control-messages will appear in the console window, warnings can be ignored. When finished it should say BUILD SUCCESSFUL. congratulations, you are set and you can start writing your own library by making changes to the source code in folder "src".

  16. + +
  17. BUILD FAILED. In case the compile process fails, check the output in the console which will give you a closer idea of what went wrong. Wrrors may have been caused by

    +
      +
    • Incorrect path settings in the build.xml file.

    • +
    • Error "Javadoc failed". if you are on windows, make sure you are using a JDK instead of a JRE in order to be able to create the javadoc for your library. JRE does not come with the javadoc application, but it is required to create libraries from this template.
    • +
    +
  18. + +
+ After having compiled and built your project successfully, you should be able to find your library in processing's sketchbook folder, examples will be listed in processing's sketchbook menu. Files that have been created for the distribution of the library are located in your eclipse's workspace/yourProject/distribution folder. In there you find the web folder which contains the documentation, a zip file for downloading your library, a folder with examples as well as the index.html and css file. +

To distribute your library please refer to the guidelines.

+
+ + +Source code + +

If you want to share your library's source code, we recommend to use an online repository available for free at code.google.com or sourceforge.net.

+
+ +Adding core.jar and other .jar files to your classpath +
+

The core.jar file contains the core classes of processing and has to be part of your classpath when building a library. On Windows and Linux, the file is located in the Processing distribution folder inside a folder named "lib". On Mac OS X, right-click Processing.app and use Show Package Contents to see the guts. The lib folder is at Contents → Resources → Java → lib. For further information about the classes in core.jar, you can see the source here and the developer documentation here.

+ +

If you created a "libs" folder as described above, put the libraries you need to add to your classpath in there. In the "Properties" of your java project, navigate to Java Build Path → Libraries, and click "Add External JARs". Select the .jar files from the libs folder that are required for compiling you project. Adjust the build.xml file accordingly.

+ +

The libs folder is recommended but not a requirement, nevertheless you need to specify where your jar files are located in your system in order to add them to the classpath.

+ +

In case a library depends on systems libraries, put these dependencies next to the jar file. For example processing's opengl.jar library depends on jogl hence the dlls (for windows) or jnilibs (for osx) have to be located next to the opengl.jar file.

+ +
+What is the difference between JDK and JRE? + +

JDK stands for Java Development Kit whereas JRE stands for Java Runtime Environment. +For developers it is recommended to work with a JDK instead of a JRE since more Java development related applications such as Javadoc. Javadoc is a requirement to properly compile and document a Processing library as described on the guidelines page.

+ +

You can have both, a JDK and a JRE, installed on your system. in eclipse you need to specify which one you want to use.

+ +
+The JRE System Library + +

This primarily affects Windows and Linux users (because the full JDK is installed by default on Mac OS X). It is recommended that you use the JDK instead of a JRE. The JDK can be downloaded from Sun's download site. Also see the Java webnotes which contain useful information about installation.

+ +

To change the JRE used to compile your java project: + +

    + +
  1. open the properties of your project from the menu Project → Properties", select "Java Build Path" and in its sub menu, click on the "Libraries" tab. +
  2. A list of JARs and class folders in the build path will show up. In this list you can find the JRE System Library that is used to compile your code. Remove this JRE System library. +
  3. Click "Add Library..." In the popup window choose "JRE System Library" and press "Next". +
  4. Select an alternate JRE from the pull-down menu or click and modify the "installed JREs". Confirm with "Finish" and "OK". +
+
+Compiling with ant and javadoc + +

+Ant is a Java-based build tool. For more information visit the ant web site. Ant uses a file named build.xml to store build settings for a project. + +

+ +

+Javadoc is an application that creates an HTML-based API documentation of Java code. You can check for its existence by typing javadoc on the command line. On Mac OS X it is installed by default. On Windows and Linux, installing the JDK will also install the javadoc tool. +

+
+ + +
+ + + + + + + + + + + + + + + + + + +









+
 
 Processing is an open project + initiated by Ben Fry and Casey + Reas 
 © + Info \ Site hosted by Media Temple! 
+ + + diff --git a/resources/build.xml b/resources/build.xml new file mode 100644 index 0000000..3c80349 --- /dev/null +++ b/resources/build.xml @@ -0,0 +1,304 @@ + + + + processingLibs. ant build file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Properties initialized. + src path ${src} + bin path ${bin} + libraryClasspath ${libraryClasspath} + processing Libraries ${processing} + java version ${javaVersion} + + building library ... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --------------------- + + --------------------- + + + + + + + + + + + + + + done, finished. + + + + + + + + + + + + + + + + + diff --git a/resources/code/ExampleTaglet.class b/resources/code/ExampleTaglet.class new file mode 100644 index 0000000..b17c64e Binary files /dev/null and b/resources/code/ExampleTaglet.class differ diff --git a/resources/code/ExampleTaglet.java b/resources/code/ExampleTaglet.java new file mode 100644 index 0000000..461ea08 --- /dev/null +++ b/resources/code/ExampleTaglet.java @@ -0,0 +1,231 @@ +/* + * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * -Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * -Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any + * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND + * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY + * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY + * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR + * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR + * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE + * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, + * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER + * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF + * THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that Software is not designed, licensed or + * intended for use in the design, construction, operation or + * maintenance of any nuclear facility. + */ + +import com.sun.tools.doclets.Taglet; +import com.sun.javadoc.*; +import java.util.Map; +import java.io.*; +/** + * A sample Taglet representing @example. This tag can be used in any kind of + * {@link com.sun.javadoc.Doc}. It is not an inline tag. The text is displayed + * in yellow to remind the developer to perform a task. For + * example, "@example Hello" would be shown as: + *
+ *
+ * To Do: + *
Fix this! + *
+ *
+ * + * @author Jamie Ho + * @since 1.4 + */ + +public class ExampleTaglet implements Taglet { + + private static final String NAME = "example"; + private static final String HEADER = "example To Do:"; + + /** + * Return the name of this custom tag. + */ + public String getName() { + return NAME; + } + + /** + * Will return true since @example + * can be used in field documentation. + * @return true since @example + * can be used in field documentation and false + * otherwise. + */ + public boolean inField() { + return true; + } + + /** + * Will return true since @example + * can be used in constructor documentation. + * @return true since @example + * can be used in constructor documentation and false + * otherwise. + */ + public boolean inConstructor() { + return true; + } + + /** + * Will return true since @example + * can be used in method documentation. + * @return true since @example + * can be used in method documentation and false + * otherwise. + */ + public boolean inMethod() { + return true; + } + + /** + * Will return true since @example + * can be used in method documentation. + * @return true since @example + * can be used in overview documentation and false + * otherwise. + */ + public boolean inOverview() { + return true; + } + + /** + * Will return true since @example + * can be used in package documentation. + * @return true since @example + * can be used in package documentation and false + * otherwise. + */ + public boolean inPackage() { + return true; + } + + /** + * Will return true since @example + * can be used in type documentation (classes or interfaces). + * @return true since @example + * can be used in type documentation and false + * otherwise. + */ + public boolean inType() { + return true; + } + + /** + * Will return false since @example + * is not an inline tag. + * @return false since @example + * is not an inline tag. + */ + + public boolean isInlineTag() { + return false; + } + + /** + * Register this Taglet. + * @param tagletMap the map to register this tag to. + */ + public static void register(Map tagletMap) { + ExampleTaglet tag = new ExampleTaglet(); + Taglet t = (Taglet) tagletMap.get(tag.getName()); + if (t != null) { + tagletMap.remove(tag.getName()); + } + tagletMap.put(tag.getName(), tag); + } + + /** + * Given the Tag representation of this custom + * tag, return its string representation. + * @param tag the Tag representation of this custom tag. + */ + public String toString(Tag tag) { + return createHTML(readFile(tag.text())); + } + + + /** + * Given an array of Tags representing this custom + * tag, return its string representation. + * @param tags the array of Tags representing of this custom tag. + */ + public String toString(Tag[] tags) { + if (tags.length == 0) { + return null; + } + return createHTML(readFile(tags[0].text())); + } + + + + String createHTML(String theString) { + if(theString!=null) { + String dd = ""; + + return dd+"\n
" + + "
+Example
" + + "
"+theString+"
" + + "
"; + } + return ""; + } + + + /** + * check if the examples directory exists and return the example as given in the tag. + * @param theExample the name of the example + */ + String readFile(String theExample) { + String record = ""; + String myResult = ""; + int recCount = 0; + String myDir = "../examples"; + File file=new File(myDir); + if(file.exists()==false) { + myDir = "./examples"; + } + try { + FileReader fr = new FileReader(myDir+"/"+theExample+"/"+theExample+".pde"); + BufferedReader br = new BufferedReader(fr); + record = new String(); + while ((record = br.readLine()) != null) { + myResult += record+"\n"; + } + } catch (IOException e) { + System.out.println(e); + return null; + } + return myResult; + } +} + + diff --git a/resources/code/ant-contrib-1.0b3.jar b/resources/code/ant-contrib-1.0b3.jar new file mode 100644 index 0000000..0625376 Binary files /dev/null and b/resources/code/ant-contrib-1.0b3.jar differ diff --git a/resources/code/doc.sh b/resources/code/doc.sh new file mode 100644 index 0000000..1db9a92 --- /dev/null +++ b/resources/code/doc.sh @@ -0,0 +1,18 @@ +# a shell script to create a java documentation +# for a processing library. +# +# make changes to the variables below so they +# fit the structure of your library + +# the package name of your library +package=template; + +# source folder location +src=../src; + +# the destination folder of your documentation +dest=../documentation; + + +# compile the java documentation +javadoc -d $dest -stylesheetfile ./stylesheet.css -sourcepath ${src} ${package} diff --git a/resources/stylesheet.css b/resources/stylesheet.css new file mode 100644 index 0000000..54998c2 --- /dev/null +++ b/resources/stylesheet.css @@ -0,0 +1,310 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +/* processingLibs style by andreas schlegel, sojamo */ + + +body { + margin : 0; + padding : 0; + padding-left : 10px; + padding-right : 8px; + background-color : #FFFFFF; + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.7em; + font-weight : normal; + line-height : normal; + margin-bottom:30px; +} + + + + +/* Headings */ +h1, h2, h3, h4, h5, th { + font-family :Arial, Helvetica, sans-serif; + font-size:1.2em; +} + + +p { + font-size : 1em; + width:80%; +} + +pre, code { + font-family : "Courier New", Courier, monospace; + font-size : 12px; + line-height : normal; +} + + + +table { + border:0; + margin-bottom:10px; + margin-top:10px; +} + + +tr, td { + border-top: 0px solid; + border-left: 0px solid; + padding-top:8px; + padding-bottom:8px; +} + + + +hr { + border:0; + height:1px; + padding:0; + margin:0; + margin-bottom:4px; + +} + + + +dd, th, td, font { + font-size:1.0em; + line-height:1.0em; +} + + + +dt { + margin-bottom:0px; +} + + + +dd { + margin-top:2px; + margin-bottom:4px; +} + + + +a { + text-decoration: underline; + font-weight: normal; +} + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + +img { + border: 0px solid #000000; +} + + + +/* Navigation bar fonts */ +.NavBarCell1 { + border:0; +} + +.NavBarCell1Rev { + border:0; +} + +.NavBarFont1 { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + + +.NavBarFont1 b { + font-weight:normal; +} + + + +.NavBarFont1:after, .NavBarFont1Rev:after { + font-weight:normal; + content: " \\"; +} + + +.NavBarFont1Rev { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; +} + +.NavBarFont1Rev b { + font-family: Arial, Helvetica, sans-serif; + font-size:1.1em; + font-weight:normal; +} + +.NavBarCell2 { + font-family: Arial, Helvetica, sans-serif; +} + +.NavBarCell3 { + font-family: Arial, Helvetica, sans-serif; +} + + + +font.FrameItemFont { + font-family: Helvetica, Arial, sans-serif; + font-size:1.1em; + line-height:1.1em; +} + +font.FrameHeadingFont { + font-family: Helvetica, Arial, sans-serif; + line-height:32px; +} + +/* Font used in left-hand frame lists */ +.FrameTitleFont { + font-family: Helvetica, Arial, sans-serif +} + + +.toggleList { + padding:0; + margin:0; + margin-top:12px; +} + +.toggleList dt { + font-weight:bold; + font-size:12px; + font-family:arial,sans-serif; + padding:0px; + margin:10px 0px 10px 0px; +} + +.toggleList dt span { + font-family: monospace; + padding:0; + margin:0; +} + + +.toggleList dd { + margin:0; + padding:0; +} + +html.isjs .toggleList dd { + display: none; +} + +.toggleList pre { + padding: 4px 4px 4px 4px; +} + + + + + +/* COLORS */ + +pre, code { + color: #000000; +} + + +body { + color : #333333; + background-color :#FFFFFF; +} + + +h1, h2, h3, h4, h5, h6 { + color:#555; +} + +a, +.toggleList dt { + color: #1a7eb0; +} + +a:hover, +a:active { + color: #1a7eb0; +} + +a:visited, +a:link:visited { + color: #1a7eb0; +} + +td,tr { + border-color: #999999; +} + +hr { + color:#999999; + background:#999999; +} + + +.TableHeadingColor { + background: #dcdcdc; + color: #555; +} + + +.TableSubHeadingColor { + background: #EEEEFF +} + +.TableRowColor { + background: #FFFFFF +} + + +.NavBarCell1 { + background-color:#dcdcdc; + color:#000; +} + +.NavBarCell1 a { + color:#333; +} + + +.NavBarCell1Rev { + background-color:transparent; +} + +.NavBarFont1 { + color:#333; +} + + +.NavBarFont1Rev { + color:#fff; +} + +.NavBarCell2 { + background-color:#999; +} + +.NavBarCell2 a { + color:#fff; +} + + + +.NavBarCell3 { + background-color:#dcdcdc; +} + diff --git a/src/animata/AnimataPlayback.java b/src/animata/AnimataPlayback.java new file mode 100644 index 0000000..188bee3 --- /dev/null +++ b/src/animata/AnimataPlayback.java @@ -0,0 +1,23 @@ +package animata; + +import processing.core.PApplet; + +public class AnimataPlayback { + private final PApplet applet; + private LayerView root; + + public AnimataPlayback(PApplet applet){ + this.applet = applet; + this.applet.registerDraw(this); + root = new LayerView(applet); + } + public void addScene(String xml){ + addScene(xml, root); + } + public void addScene(String xml, LayerView parent){ + + } + public void draw(){ + + } +} \ No newline at end of file diff --git a/src/animata/LayerView.java b/src/animata/LayerView.java new file mode 100644 index 0000000..c36775f --- /dev/null +++ b/src/animata/LayerView.java @@ -0,0 +1,11 @@ +package animata; + +import processing.core.PApplet; + +public class LayerView { + + public LayerView(PApplet applet) { + // TODO Auto-generated constructor stub + } + +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..a1c0e33 --- /dev/null +++ b/web/index.html @@ -0,0 +1,132 @@ + + + +##yourLibrary## + + + + + + + + + + + + + + +
+ + + + + +
+ +
+

##yourLibrary##

+

+ A library by ##author## for the programming environment processing. Last update, ##date##. +

+

+ Feel free to replace this paragraph with a description of the library. Contributed libraries are developed, documented, and maintained by members of the Processing community. Further directions are included with each library. For feedback and support, please post to the Discourse. We strongly encourage all libraries to be open source, but not all of them are. +

+
+ + + +
+

Download

+

+ Download ##yourLibrary## version ##versionNumber## in + .zip format. +

+

Installation

+

+ Unzip and put the extracted ##yourLibrary## folder into the libraries folder of your processing sketches. Reference and examples are included in the ##yourLibrary## folder. +

+
+ + +
+

Keywords ##keywords##

+

Reference. Have a look at the javadoc reference here. a copy of the reference is included in the .zip as well.

+

Source. The source code of ##yourLibrary## is available at ##source:host##, and its repository can be browsed here.

+
+ +
+

Examples

+

Find a list of examples in the current distribution of ##yourLibrary##, or have a look at them by following the links below.

+
    + ##examples## +
+
+ + +
+

Tested

+

+ + Platform ##tested:platform## + + +
Processing ##tested:processingVersion## + + +
Dependencies ##tested:dependencies## +

+
+ + + + + + + + + + + + +
+
+ + +
+ + \ No newline at end of file diff --git a/web/stylesheet.css b/web/stylesheet.css new file mode 100644 index 0000000..4348b38 --- /dev/null +++ b/web/stylesheet.css @@ -0,0 +1,203 @@ +/* processingLibs style by andreas schlegel, sojamo. */ + + +* { + margin:0; + padding:0; + border:0; +} + + +body { + font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size : 100%; + font-size : 0.70em; + font-weight : normal; + line-height : normal; +} + + + +#container { + margin-left:64px; + background-color:#fff; +} + +#header { + float:left; + padding-top:24px; + padding-bottom:48px; +} + +#menu { + margin-top:16px; + float:left; + margin-bottom:64px; +} + + +#about, +#download, +#examples, +#demos, +#misc { + width:480px; + float:left; + margin-right:24px; +} + + +#resources, #info { + width:320px; + float:left; +} + + +.clear { + clear:both; +} + +#footer { + margin-top:300px; + height:20px; + margin-bottom:32px; +} + + +ul { + list-style:none; + padding:0; + margin:0; +} + + +#menu ul li, #subMenu ul li { + float:left; + padding-right:6px; +} + + + + + + +/* Headings */ + +h1 { + font-size:2em; + font-weight:normal; +} + + +h2, h3, h4, h5, th { + font-size:1.3em; + font-weight:normal; + margin-bottom:4px; +} + + + +p { + font-size:1em; + width:90%; + margin-bottom:32px; +} + + +pre, code { + font-family:"Courier New", Courier, monospace; + font-size:1em; + line-height:normal; +} + + + + +hr { + border:0; + height:1px; + margin-bottom:24px; +} + + +a { + text-decoration: underline; + font-weight: normal; +} + + +a:hover, +a:active { + text-decoration: underline; + font-weight: normal; +} + + +a:visited, +a:link:visited { + text-decoration: underline; + font-weight: normal; +} + + + +img { + border: 0px solid #000000; +} + + + + + +/* COLORS */ + + +body { + color : #333; + background-color :#fff; +} + + +#header { + background-color:#fff; + color:#333; +} + + + +h1, h2, h3, h4, h5, h6 { + color:#666; +} + + +pre, code { + color: #000000; +} + + +a,strong { + color: #333; +} + + +a:hover, +a:active { + color: #333; +} + + +a:visited, +a:link:visited { + color: #333; +} + + +#footer, #menu { + background-color:#fff; + color:#333; +} + + +#footer a, #menu a { + color:#333; +}