From sling-commits-return-osmith@example.org Fri Feb 01 08:10:30 2008 Return-Path: <sling-commits-return-osmith@example.org> Delivered-To: osmith@example.org Received: (qmail 6846 invoked from network); 1 Feb 2008 08:10:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Feb 2008 08:10:30 -0000 Received: (qmail 57896 invoked by uid 500); 1 Feb 2008 08:10:21 -0000 Delivered-To: osmith@example.org Received: (qmail 57881 invoked by uid 500); 1 Feb 2008 08:10:21 -0000 Mailing-List: contact osmith@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:osmith@example.org> List-Unsubscribe: <mailto:osmith@example.org> List-Post: <mailto:osmith@example.org> List-Id: <sling-commits.incubator.apache.org> Reply-To: osmith@example.org Delivered-To: mailing list osmith@example.org Received: (qmail 57872 invoked by uid 99); 1 Feb 2008 08:10:21 -0000 Received: from nike.apache.org (HELO nike.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 00:10:21 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 08:10:14 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 6BD9F1A9832; Fri, 1 Feb 2008 00:10:06 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r617368 - /incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/helper/PathSupport.java Date: Fri, 01 Feb 2008 08:10:05 -0000 To: osmith@example.org From: osmith@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <osmith@example.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmeschbe Date: Fri Feb 1 00:10:03 2008 New Revision: 617368 URL: http://svn.apache.org/viewvc?rev=617368&view=rev Log: SLING-215 Correctly parenthezie expression to not get false positives Modified: incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/helper/PathSupport.java Modified: incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/helper/PathSupport.java URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/helper/PathSupport.java?rev=617368&r1=617367&r2=617368&view=diff ============================================================================== --- incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/helper/PathSupport.java (original) +++ incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/helper/PathSupport.java Fri Feb 1 00:10:03 2008 @@ -39,8 +39,8 @@ throw new IllegalArgumentException( "HTTP Method name must not be empty"); - } else if (HttpConstants.METHOD_GET.equalsIgnoreCase(methodName) - || HttpConstants.METHOD_HEAD.equalsIgnoreCase(methodName) + } else if ((HttpConstants.METHOD_GET.equalsIgnoreCase(methodName) + || HttpConstants.METHOD_HEAD.equalsIgnoreCase(methodName)) && extension != null && extension.length() > 0) { // for GET, we use the request extension From sling-commits-return-osmith@example.org Fri Feb 01 08:36:21 2008 Return-Path: <sling-commits-return-osmith@example.org> Delivered-To: osmith@example.org Received: (qmail 14961 invoked from network); 1 Feb 2008 08:36:20 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Feb 2008 08:36:20 -0000 Received: (qmail 96942 invoked by uid 500); 1 Feb 2008 08:36:12 -0000 Delivered-To: osmith@example.org Received: (qmail 96903 invoked by uid 500); 1 Feb 2008 08:36:12 -0000 Mailing-List: contact osmith@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:osmith@example.org> List-Unsubscribe: <mailto:osmith@example.org> List-Post: <mailto:osmith@example.org> List-Id: <sling-commits.incubator.apache.org> Reply-To: osmith@example.org Delivered-To: mailing list osmith@example.org Received: (qmail 96894 invoked by uid 99); 1 Feb 2008 08:36:12 -0000 Received: from nike.apache.org (HELO nike.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 00:36:12 -0800 X-ASF-Spam-Status: No, hits=-98.0 required=10.0 tests=ALL_TRUSTED,URIBL_BLACK X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO eris.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 08:36:05 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3D3BD1A9832; Fri, 1 Feb 2008 00:35:57 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r617370 - /incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/SlingMainServlet.java Date: Fri, 01 Feb 2008 08:35:50 -0000 To: osmith@example.org From: osmith@example.org X-Mailer: svnmailer-1.0.8 Message-Id: <osmith@example.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmeschbe Date: Fri Feb 1 00:35:43 2008 New Revision: 617370 URL: http://svn.apache.org/viewvc?rev=617370&view=rev Log: Log exceptions caught and handled in the SlingMainServlet.service mthod Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/SlingMainServlet.java Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/SlingMainServlet.java URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/SlingMainServlet.java?rev=617370&r1=617369&r2=617370&view=diff ============================================================================== --- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/SlingMainServlet.java (original) +++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/SlingMainServlet.java Fri Feb 1 00:35:43 2008 @@ -264,6 +264,8 @@ } catch (ResourceNotFoundException rnfe) { // send this exception as a 404 status + log.info("service: Resource {} not found", rnfe.getResource()); + getErrorHandler().handleError(HttpServletResponse.SC_NOT_FOUND, rnfe.getMessage(), request, response); @@ -280,11 +282,15 @@ // send this exception as is (albeit unwrapping and wrapped // exception. Throwable t = (se.getCause() != null) ? se.getCause() : se; + log.error("service: Uncaught SlingException", t); getErrorHandler().handleError(t, request, response); } catch (AccessControlException ace) { // try to request authentication fail, if not possible + log.info( + "service: Authenticated user {} does not have enough rights to executed requested action", + request.getRemoteUser()); getSlingAuthenticator().requestAuthentication(request, response); } catch (Throwable t) { @@ -297,6 +303,7 @@ requestData.getActiveServletName()); } + log.error("service: Uncaught Throwable", t); getErrorHandler().handleError(t, request, response); } finally { From sling-commits-return-osmith@example.org Fri Feb 01 09:07:36 2008 Return-Path: <sling-commits-return-osmith@example.org> Delivered-To: osmith@example.org Received: (qmail 23687 invoked from network); 1 Feb 2008 09:07:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Feb 2008 09:07:36 -0000 Received: (qmail 35046 invoked by uid 500); 1 Feb 2008 09:07:27 -0000 Delivered-To: osmith@example.org Received: (qmail 35001 invoked by uid 500); 1 Feb 2008 09:07:27 -0000 Mailing-List: contact osmith@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:osmith@example.org> List-Unsubscribe: <mailto:osmith@example.org> List-Post: <mailto:osmith@example.org> List-Id: <sling-commits.incubator.apache.org> Reply-To: osmith@example.org Delivered-To: mailing list osmith@example.org Received: (qmail 34992 invoked by uid 99); 1 Feb 2008 09:07:27 -0000 Received: from nike.apache.org (HELO nike.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 01:07:27 -0800 X-ASF-Spam-Status: No, hits=-96.3 required=10.0 tests=ALL_TRUSTED,HTML_MESSAGE,MIME_HTML_ONLY X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO brutus.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 09:07:08 +0000 Received: from brutus (localhost [83.161.120.155]) by brutus.apache.org (Postfix) with ESMTP id 0801D714035 for <osmith@example.org>; Fri, 1 Feb 2008 01:07:00 -0800 (PST) Message-ID: <21328550.1201856820018.JavaMail.www-data@brutus> Date: Fri, 1 Feb 2008 01:07:00 -0800 (PST) From: osmith@example.org To: osmith@example.org Subject: [CONF] Apache Sling: Discover Sling in 15 minutes (page edited) MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org <html> <head> <base href=3D"http://cwiki.apache.org/confluence" /> <style type=3D"text/css"> <!-- body, p, td, table, tr, .bodytext, .stepfield { =09font-family: Verdana, arial, sans-serif; =09font-size: 11px; =09line-height: 16px; =09color: #000000; =09font-weight: normal; } #PageContent { =09text-align: left; =09background-color: #fff; =09padding: 0px; =09margin: 0px; padding-bottom:20px; } /* ** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area= , we can't ** use an id=3DPageContent or class=3Dwiki-content, so we must ** set the body style to that used for PageContent, and p to that used for = wiki-content. */ body { =09margin: 0px; =09padding: 0px; =09text-align: center; background-color: #f0f0f0; } @media print { body { background-color: #fff; } } .monospaceInput { font:12px monospace } .wiki-content p, .commentblock p { margin: 16px 0px 16px 0px; padding: 0px; } .wiki-content-preview { padding: 5px; border-left: 1px solid #3c78b5; border-right: 1px solid #3c78b5; } ul, ol { margin-top: 2px; margin-bottom: 2px; padding-top: 0px; padding-bottom: 0px; } pre { padding: 0px; margin-top: 5px; margin-left: 15px; margin-bottom: 5px; margin-right: 5px; text-align: left; } .helpheading { font-weight: bold; background-color: #D0D9BD; border-bottom: 1px solid #3c78b5; padding: 4px 4px 4px 4px; margin: 0px; margin-top: 10px; } .helpcontent { padding: 4px 4px 20px 4px; background-color: #f5f7f1; } .code { =09border: 1px dashed #3c78b5; font-size: 11px; =09font-family: Courier; margin: 10px; =09line-height: 13px; } .focusedComment { background: #ffffce; } .commentBox, .focusedComment { padding: 10px; margin: 5px 0 5px 0; border: 1px #bbb solid; } .codeHeader { background-color: #f0f0f0; =09border-bottom: 1px dashed #3c78b5; padding: 3px; =09text-align: center; } .codeContent { text-align: left; background-color: #f0f0f0; padding: 3px; } .preformatted { =09border: 1px dashed #3c78b5; font-size: 11px; =09font-family: Courier; margin: 10px; =09line-height: 13px; } .preformattedHeader { background-color: #f0f0f0; =09border-bottom: 1px dashed #3c78b5; padding: 3px; =09text-align: center; } .preformattedContent { background-color: #f0f0f0; padding: 3px; } .panel { =09border: 1px dashed #3c78b5; margin: 10px; margin-top: 0px; } .panelHeader { background-color: #f0f0f0; =09border-bottom: 1px dashed #3c78b5; padding: 3px; =09text-align: center; } .panelContent { background-color: #f0f0f0; padding: 5px; } .anonymousAlert { background-color: #f0f0f0; =09border: 1px dashed red; font-size: 11px; padding: 10px 5px 10px 5px; margin: 4px; =09line-height: 13px; } .lockAlert { background-color: #f0f0f0; width: 50%; =09border: 1px dashed red; font-size: 11px; padding: 10px 5px 10px 5px; margin: 4px; =09line-height: 13px; } .code-keyword { color: #000091; background-color: inherit; } .code-object { color: #910091; background-color: inherit; } .code-quote { color: #009100; background-color: inherit; } .code-comment { color: #808080; background-color: inherit; } .code-xml .code-keyword { color: inherit; font-weight: bold; } .code-tag { color: #000091; background-color: inherit; } .breadcrumbs { background-color: #f0f0f0; =09border-color: #3c78b5; =09border-width: 1px 0px 1px 0px; =09border-style: solid; font-size: 11px; padding: 3px 0px 3px 0px; } .navmenu { border: 1px solid #ccc; } .menuheading { font-weight: bold; background-color: #f0f0f0; =09border-bottom: 1px solid #3c78b5; =09padding: 4px 4px 2px 4px; } .menuitems { =09padding: 4px 4px 20px 4px; } .rightpanel { border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; } #helpheading { text-align: left; font-weight: bold; background-color: #D0D9BD; =09border-bottom: 1px solid #3c78b5; =09padding: 4px 4px 4px 4px; =09margin: 0px; } #helpcontent { =09padding: 4px 4px 4px 4px; background-color: #f5f7f1; } .helptab-unselected { font-weight: bold; =09padding: 5px; background-color: #f5f7f1; } .helptab-selected { font-weight: bold; background-color: #D0D9BD; =09padding: 5px; } .helptabs { margin: 0px; background-color: #f5f7f1; =09padding: 5px; } .infopanel-heading { font-weight: bold; =09padding: 4px 0px 2px 0px; } .pagebody { } .pageheader { =09padding: 5px 5px 5px 0px; =09border-bottom: 1px solid #3c78b5; } .pagetitle { =09font-size: 22px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: #003366; } .newpagetitle { color: #ccc !important; } .steptitle { =09font-size: 18px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: #003366; =09margin-bottom: 7px; } .substeptitle { font-size: 12px; font-weight: bold; font-family: Arial, sans-serif; color: #003366; margin: 2px 4px 4px 4px; padding: 2px 4px 1px 4px; } .stepdesc { font-family: Verdana, arial, sans-serif; =09font-size: 11px; =09line-height: 16px; =09font-weight: normal; color: #666666; margin-top: 7px; margin-bottom: 7px; } .steplabel { font-weight: bold; margin-right: 4px; color: black; float: left; width: 15%; text-align: right; } .stepfield { background: #f0f0f0; padding: 5px; } .submitButtons{ margin-top:5px; text-align:right; } .formtitle { =09font-size: 12px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: #003366; } .sectionbottom { border-bottom: 1px solid #3c78b5; } .topRow { border-top: 2px solid #3c78b5; } .tabletitle { =09font-size: 14px; =09font-weight: bold; =09font-family: Arial, sans-serif; padding: 3px 0px 2px 0px; margin: 8px 4px 2px 0px; =09color: #003366; =09border-bottom: 2px solid #3c78b5; } .pagesubheading { color: #666666; font-size: 10px; padding: 0px 0px 5px 0px; } HR { =09color: 3c78b5; =09height: 1; } A:link, A:visited, A:active, A:hover { =09color: #003366; } h1 A:link, h1 A:visited, h1 A:active { =09text-decoration: none; } h1 A:hover { border-bottom: 1px dotted #003366; } .wiki-content > :first-child, .commentblock > :first-child { margin-top: 3px; } .logocell { padding: 10px; } input { =09font-family: verdana, geneva, arial, sans-serif; =09font-size: 11px; =09color: #000000; } textarea, textarea.editor { =09font-family: verdana, geneva, arial, sans-serif; =09font-size: 11px; =09color: #333333; } /* use logoSpaceLink instead. .spacenametitle { =09font: 21px/31px Impact, Arial, Helvetica; font-weight: 100; color: #999999; =09margin: 0px; } .spacenametitle img { margin: 0 0 -4px 0; } .spacenametitle a { text-decoration: none; color: #999999; } .spacenametitle a:visited { text-decoration: none; color: #999999; }*/ .spacenametitle-printable { =09font: 20px/25px Impact, Arial, Helvetica; font-weight: 100; color: #999999; =09margin: 0px; } .spacenametitle-printable a { text-decoration: none; color: #999999; } .spacenametitle-printable a:visited { text-decoration: none; color: #999999; } .blogDate { =09font-weight: bold; =09text-decoration: none; =09color: black; } .blogSurtitle { background: #f0f0f0; =09border: 1px solid #ddd; =09padding: 3px; =09margin: 1px 1px 10px 1px; } .blogHeading { font-size: 20px; line-height: normal; font-weight: bold; padding: 0px; margin: 0px; } .blogHeading a { text-decoration: none; color: black; } .endsection { =09align: right; =09color: #666666; =09margin-top: 10px; } .endsectionleftnav { =09align: right; =09color: #666666; =09margin-top: 10px; } h1 { =09font-size: 24px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09color: #003366; =09border-bottom: 1px solid #3c78b5; =09padding: 2px; =09margin: 36px 0px 4px 0px; } h2 { =09font-size: 18px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09border-bottom: 1px solid #3c78b5; =09padding: 2px; =09margin: 27px 0px 4px 0px; } h3 { =09font-size: 14px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 21px 0px 4px 0px; } h4 { =09font-size: 12px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 18px 0px 4px 0px; } h4.search { =09font-size: 12px; =09line-height: normal; =09font-weight: normal; =09background-color: #f0f0f0; =09padding: 4px; =09margin: 18px 0px 4px 0px; } h5 { =09font-size: 10px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 14px 0px 4px 0px; } h6 { =09font-size: 8px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 14px 0px 4px 0px; } .smallfont { font-size: 10px; } .descfont { font-size: 10px; color: #666666; } .smallerfont { font-size: 9px; } .smalltext { color: #666666; font-size: 10px; } .smalltext a { color: #666666; } .smalltext-blue { color: #3c78b5; font-size: 10px; } .surtitle { margin-left: 1px; margin-bottom: 5px; font-size: 14px; color: #666666; } /* css hack found here: http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/c= ss/hacks/ */ .navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; backgrou= nd-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inheri= t; cursor: pointer;} .navItemOver a { color: #ffffff; background-color:#003366; text-decoration:= none; } .navItemOver a:visited { color: #ffffff; background-color:#003366; text-dec= oration: none; } .navItemOver a:hover { color: #ffffff; background-color:#003366; text-decor= ation: none; } .navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-c= olor: #3c78b5; } .navItem a { color: #ffffff; text-decoration: none; } .navItem a:hover { color: #ffffff; text-decoration: none; } .navItem a:visited { color: #ffffff; text-decoration: none; } div.padded { padding: 4px; } div.thickPadded { padding: 10px; } h3.macrolibrariestitle { margin: 0px 0px 0px 0px; } div.centered { text-align: center; margin: 10px; } div.centered table {margin: 0px auto; text-align: left; } .tableview table { margin: 0; } .tableview th { text-align: left; color: #003366; font-size: 12px; padding: 5px 0px 0px 5px; border-bottom: 2px solid #3c78b5; } .tableview td { text-align: left; border-color: #ccc; border-width: 0px 0px 1px 0px; border-style: solid; margin: 0; padding: 4px 10px 4px 5px; } .grid { margin: 2px 0px 5px 0px; border-collapse: collapse; } .grid th { border: 1px solid #ccc; padding: 2px 4px 2px 4px; background: #f0f0f0; text-align: center; } .grid td { border: 1px solid #ccc; padding: 3px 4px 3px 4px; } .gridHover { =09background-color: #f9f9f9; } td.infocell { background-color: #f0f0f0; } .label { =09font-weight: bold; =09color: #003366; } label { =09font-weight: bold; =09color: #003366; } .error { =09background-color: #fcc; } .errorBox { =09background-color: #fcc; border: 1px solid #c00; padding: 5px; margin: 5px; } .errorMessage { =09color: #c00; } .success { =09background-color: #dfd; } .successBox { =09background-color: #dfd; border: 1px solid #090; padding: 5px; margin-top:5px; margin-bottom:5px; } blockquote { =09padding-left: 10px; =09padding-right: 10px; =09margin-left: 5px; =09margin-right: 0px; =09border-left: 1px solid #3c78b5; } table.confluenceTable { margin: 5px; border-collapse: collapse; } /* Added as a temporary fix for CONF-4223. The table elements appear to be = inheriting the border: none attribute from the sectionMacro class */ table.confluenceTable td.confluenceTd { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; } /* Added as a temporary fix for CONF-4223. The table elements appear to be = inheriting the border: none attribute from the sectionMacro class */ table.confluenceTable th.confluenceTh { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; background-color: #f0f0f0; text-align: center; } td.confluenceTd { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; } th.confluenceTh { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; background-color: #f0f0f0; text-align: center; } DIV.small { =09font-size: 9px; } H1.pagename { =09margin-top: 0px; } IMG.inline {} .loginform { margin: 5px; border: 1px solid #ccc; } /* The text how the "This is a preview" comment should be shown. */ .previewnote { text-align: center; font-size: 11px; color: red; } /* How the preview content should be shown */ .previewcontent { background: #E0E0E0; } /* How the system messages should be shown (DisplayMessage.jsp) */ .messagecontent { background: #E0E0E0; } /* How the "This page has been modified..." -comment should be shown. */ .conflictnote { } .createlink { color: maroon; } a.createlink { color: maroon; } .templateparameter { font-size: 9px; color: darkblue; } .diffadded { background: #ddffdd; padding: 1px 1px 1px 4px; =09border-left: 4px solid darkgreen; } .diffdeleted { color: #999; background: #ffdddd; padding: 1px 1px 1px 4px; =09border-left: 4px solid darkred; } .diffnochange { padding: 1px 1px 1px 4px; =09border-left: 4px solid lightgrey; } .differror { background: brown; } .diff { font-family: lucida console, courier new, fixed-width; =09font-size: 12px; =09line-height: 14px; } .diffaddedchars { background-color:#99ff99; font-weight:bolder; } .diffremovedchars { background-color:#ff9999; text-decoration: line-through; font-weight:bolder; } .greybackground { background: #f0f0f0 } .greybox { =09border: 1px solid #ddd; =09padding: 3px; =09margin: 1px 1px 10px 1px; } .borderedGreyBox { border: 1px solid #cccccc; background-color: #f0f0f0; padding: 10px; } .greyboxfilled { =09border: 1px solid #ddd; background: #f0f0f0; padding: 3px; =09margin: 1px 1px 10px 1px; } .navBackgroundBox { padding: 5px 5px 5px 5px; font-size: 22px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: white; background: #3c78b5; text-decoration: none; } .previewBoxTop { =09background-color: #f0f0f0; border-width: 1px 1px 0px 1px; border-style: solid; border-color: #3c78b5; padding: 5px; margin: 5px 0px 0px 0px; text-align: center; } .previewContent { background-color: #fff; =09border-color: #3c78b5; =09border-width: 0px 1px 0px 1px; =09border-style: solid; =09padding: 10px; =09margin: 0px; } .previewBoxBottom { =09background-color: #f0f0f0; border-width: 0px 1px 1px 1px; border-style: solid; border-color: #3c78b5; padding: 5px; margin: 0px 0px 5px 0px; text-align: center; } .functionbox { background-color: #f0f0f0; =09border: 1px solid #3c78b5; =09padding: 3px; =09margin: 1px 1px 10px 1px; } .functionbox-greyborder { background-color: #f0f0f0; =09border: 1px solid #ddd; =09padding: 3px; =09margin: 1px 1px 10px 1px; } .search-highlight { background-color: #ffffcc; } /* normal (white) background */ .rowNormal { background-color: #ffffff; } /* alternate (pale yellow) background */ .rowAlternate { background-color: #f7f7f7; } /* used in the list attachments table */ .rowAlternateNoBottomColor { background-color: #f7f7f7; } .rowAlternateNoBottomNoColor { } .rowAlternateNoBottomColor td { border-bottom: 0px; } .rowAlternateNoBottomNoColor td { border-bottom: 0px; } /* row highlight (grey) background */ .rowHighlight { background-color: #f0f0f0; } TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c= ; PADDING: 0px; } TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; = PADDING: 0px; } TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c= 9c; PADDING: 0px; } TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; } TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; } .toolbar { margin: 0px; border-collapse: collapse; } .toolbar td { border: 1px solid #ccc; padding: 2px 2px 2px 2px; color: #ccc; } td.noformatting { border-width: 0px; border-style: none; text-align: center; =09padding: 0px; } .commentblock { margin: 12px 0 12px 0; } /* * Divs displaying the license information, if necessary. */ .license-eval, .license-none, .license-nonprofit { border-top: 1px solid #bbbbbb; text-align: center; font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; } .license-eval, .license-none { background-color: #ffcccc; } .license-eval b, .license-none b { color: #990000 } .license-nonprofit { background-color: #ffffff; } /* * The shadow at the bottom of the page between the main content and the * "powered by" section. */ .bottomshadow { height: 12px; background-image: url("$req.contextPath/images/border/border_bottom.gif= "); background-repeat: repeat-x; } /* * Styling of the operations box */ .navmenu .operations li, .navmenu .operations ul { list-style: none; margin-left: 0; padding-left: 0; } .navmenu .operations ul { margin-bottom: 9px; } .navmenu .label { font-weight: inherit; } /* * Styling of ops as a toolbar */ .toolbar div { display: none; } .toolbar .label { display: none; } .toolbar .operations { display: block; } .toolbar .operations ul { display: inline; list-style: none; margin-left: 10px; padding-left: 0; } .toolbar .operations li { list-style: none; display: inline; } /* list page navigational tabs */ #foldertab { padding: 3px 0px 3px 8px; margin-left: 0; border-bottom: 1px solid #3c78b5; font: bold 11px Verdana, sans-serif; } #foldertab li { list-style: none; margin: 0; display: inline; } #foldertab li a { padding: 3px 0.5em; margin-left: 3px; border: 1px solid #3c78b5; border-bottom: none; background: #3c78b5; text-decoration: none; } #foldertab li a:link { color: #ffffff; } #foldertab li a:visited { color: #ffffff; } #foldertab li a:hover { color: #ffffff; background: #003366; border-color: #003366; } #foldertab li a.current { background: white; border-bottom: 1px solid white; color: black; } #foldertab li a.current:link { color: black; } #foldertab li a.current:visited { color: black; } #foldertab li a.current:hover { background: white; border-bottom: 1px solid white; color: black; } /* alphabet list */ ul#squaretab { margin-left: 0; padding-left: 0; white-space: nowrap; font: bold 8px Verdana, sans-serif; } #squaretab li { display: inline; list-style-type: none; } #squaretab a { padding: 2px 6px; border: 1px solid #3c78b5; } #squaretab a:link, #squaretab a:visited { color: #fff; background-color: #3c78b5; text-decoration: none; } #squaretab a:hover { color: #ffffff; background-color: #003366; border-color: #003366; text-decoration: none; } #squaretab li a#current { background: white; color: black; } .blogcalendar * { font-family:verdana, arial, sans-serif; font-size:x-small; font-weight:normal; line-height:140%; padding:2px; } table.blogcalendar { border: 1px solid #3c78b5; } .blogcalendar th.calendarhead, a.calendarhead { font-size:x-small; font-weight:bold; padding:2px; text-transform:uppercase; background-color: #3c78b5; color: #ffffff; letter-spacing: .3em; text-transform: uppercase; } .calendarhead:visited {color: white;} .calendarhead:active {color: white;} .calendarhead:hover {color: white;} .blogcalendar th { font-size:x-small; font-weight:bold; padding:2px; background-color:#f0f0f0; } .blogcalendar td { font-size:x-small; font-weight:normal; } .searchGroup { padding: 0 0 10px 0; background: #f0f0f0; } .searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; b= ackground-color: #3c78b5; padding: 2px 4px 1px 4px; } .searchItem { padding: 1px 4px 1px 4px; } .searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; backgrou= nd: #ddd; } /* permissions page styles */ .permissionHeading { border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font= -size: 16px; text-align: left; } .permissionTab { border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; colo= r: #ffffff; font-size: 10px; } .permissionSuperTab { border-width: 0 0 0 1px; border-style: solid; background: #003366; colo= r: #ffffff; } .permissionCell { border-left: #bbb; border-width: 0 0 0 1px; border-style: solid; } /* warning panel */ .warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px= ; margin: 10px; } /* alert panel */ .alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; mar= gin: 10px; } /* info panel */ .infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; m= argin: 10px; } /* side menu highlighting (e.g. space content screen) */ .optionPadded { padding: 2px; } .optionSelected { background-color: #ffffcc; padding: 2px; border: 1px soli= d #ddd; margin: -1px; } .optionSelected a { font-weight: bold; text-decoration: none; color: black;= } /* information macros */ .noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000;= background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom= : 5px} .warningMacro { border-style: solid; border-width: 1px; border-color: #c00;= background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5= px} .infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5;= background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom= : 5px} .tipMacro { border-style: solid; border-width: 1px; border-color: #090; bac= kground-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px} .informationMacroPadding { padding: 5px 0 0 5px; } table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMac= ro td, table.sectionMacro td { border: none; } table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-= width: 1px; border-color: #cccccc;} .pagecontent { padding: 10px; text-align: left; } /* styles for links in the top bar */ .topBarDiv a:link {color: #ffffff;} .topBarDiv a:visited {color: #ffffff;} .topBarDiv a:active {color: #ffffff;} .topBarDiv a:hover {color: #ffffff;} .topBarDiv {color: #ffffff;} .topBar { background-color: #003366; } /* styles for extended operations */ .greyLinks a:link {color: #666666; text-decoration:underline;} .greyLinks a:visited {color: #666666; text-decoration:underline;} .greyLinks a:active {color: #666666; text-decoration:underline;} .greyLinks a:hover {color: #666666; text-decoration:underline;} .greyLinks {color: #666666; display:block; padding: 10px} .logoSpaceLink {color: #999999; text-decoration: none} .logoSpaceLink a:link {color: #999999; text-decoration: none} .logoSpaceLink a:visited {color: #999999; text-decoration: none} .logoSpaceLink a:active {color: #999999; text-decoration: none} .logoSpaceLink a:hover {color: #003366; text-decoration: none} /* basic panel (basicpanel.vmd) style */ .basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bo= ttom: 8px; width: 100%} .basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; col= or: black; font-weight: bold;} .basicPanelBody {padding: 5px; margin: 0px} .separatorLinks a:link {color: white} .separatorLinks a:visited {color: white} .separatorLinks a:active {color: white} .greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; marg= in-top: 2px} div.headerField { float: left; width: auto; height: 100%; } .headerFloat { margin-left: auto; width: 50%; } .headerFloatLeft { float: left; margin-right: 20px; margin-bottom: 10px; } #headerRow { padding: 10px; } div.license-personal { background-color: #003366; color: #ffffff; } div.license-personal a { color: #ffffff; } .greyFormBox { border: 1px solid #cccccc; padding: 5px; } /* IE automatically adds a margin before and after form tags. Use this styl= e to remove that */ .marginlessForm { margin: 0px; } .openPageHighlight { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; } .editPageInsertLinks, .editPageInsertLinks a { color: #666666; font-weight: bold; font-size: 10px; } /* Style for label heatmap. */ .top10 a { font-weight: bold; font-size: 2em; color: #003366; } .top25 a { font-weight: bold; font-size: 1.6em; color: #003366; } .top50 a { font-size: 1.4em; color: #003366; } .top100 a { font-size: 1.2em; color: #003366; } .heatmap { list-style:none; width: 95%; margin: 0px auto; } .heatmap a { text-decoration:none; } .heatmap a:hover { text-decoration:underline; } .heatmap li { display: inline; } .minitab { padding: 3px 0px 3px 8px; margin-left: 0; margin-top: 1px; margin-bottom: 0px; border-bottom: 1px solid #3c78b5; font: bold 9px Verdana, sans-serif; text-decoration: none; float:none; } .selectedminitab { padding: 3px 0.5em; margin-left: 3px; margin-top: 1px; border: 1px solid #3c78b5; background: white; border-bottom: 1px solid white; color: #000000; text-decoration: none; } .unselectedminitab { padding: 3px 0.5em; margin-left: 3px; margin-top: 1px; border: 1px solid #3c78b5; border-bottom: none; background: #3c78b5; color: #ffffff; text-decoration: none; } a.unselectedminitab:hover { color: #ffffff; background: #003366; border-color: #003366; } a.unselectedminitab:link { color: white; } a.unselectedminitab:visited { color: white; } a.selectedminitab:link { color: black; } a.selectedminitab:visited { color: black; } .linkerror { background-color: #fcc;} a.labelOperationLink:link {text-decoration: underline} a.labelOperationLink:active {text-decoration: underline} a.labelOperationLink:visited {text-decoration: underline} a.labelOperationLink:hover {text-decoration: underline} a.newLabel:link {background-color: #ddffdd} a.newLabel:active {background-color: #ddffdd} a.newLabel:visited {background-color: #ddffdd} a.newLabel:hover {background-color: #ddffdd} ul.square {list-style-type: square} .inline-control-link { background: #ffc; font-size: 9px; color: #666; padding: 2px; text-transform: uppercase; text-decoration: none; } .inline-control-link a:link {text-decoration: none} .inline-control-link a:active {text-decoration: none} .inline-control-link a:visited {text-decoration: none} .inline-control-link a:hover {text-decoration: none} .inline-control-link { background: #ffc; font-size: 9px; color: #666; padding: 2px; text-transform: uppercase; text-decoration: none; cursor: pointer; } div.auto_complete { width: 350px; background: #fff; } div.auto_complete ul { border: 1px solid #888; margin: 0; padding: 0; width: 100%; list-style-type: none; } div.auto_complete ul li { margin: 0; padding: 3px; } div.auto_complete ul li.selected { background-color: #ffb; } div.auto_complete ul strong.highlight { color: #800; margin: 0; padding: 0; } /******* Edit Page Styles *******/ .toogleFormDiv{ border:1px solid #A7A6AA; background-color:white; padding:5px; margin-top: 5px; } .toogleInfoDiv{ border:1px solid #A7A6AA; background-color:white; display:none; padding:5px; margin-top: 10px; } .inputSection{ margin-bottom:20px; } #editBox{ border:1px solid lightgray; background-color:#F0F0F0; } /******* Left Navigation Theme Styles ********/ .leftnav li a { text-decoration:none; color:white; margin:0px; display:block; padding:2px; padding-left:5px; background-color: #3c78b5; border-top:1px solid #3c78b5; } .leftnav li a:active {color:white;} .leftnav li a:visited {color:white;} .leftnav li a:hover {background-color: #003366; color:white;} /* Added by Shaun during i18n */ .replaced { background-color: #33CC66; } .topPadding { margin-top: 20px; } /* new form style */ .form-block { padding: 6px; } .form-error-block { padding: 6px; background: #fcc; border-top: #f0f0f0 1px solid; border-bottom: #f0f0f0 1px solid; margin-bottom: 6px; padding: 0 12px 0 12px; } .form-element-large { font-size: 16px; font-weight: bold; font-family: Arial, sans-serif; color: #003366; } .form-element-small { font-size: 12px; font-weight: bold; font-family: Arial, sans-serif; color: #003366; } .form-header { background: lightyellow; border-top: #f0f0f0 1px solid; border-bottom: #f0f0f0 1px solid; margin-bottom: 6px; padding: 0 12px 0 12px; } .form-header p, .form-block p, .form-error-block p { line-height: normal; margin: 12px 0 12px 0; } .form-example { color: #888; font-size: 11px; } .form-divider { border-bottom: #ccc 1px solid; margin-bottom: 6px; } .form-buttons { margin-top: 6px; border-top: #ccc 1px solid; border-bottom: #ccc 1px solid; background: #f0f0f0; padding: 10px; text-align: center; } .form-buttons input { width: 100px; } .form-block .error { padding: 6px; margin-bottom: 6px; } --> </style> </head> <body> <div id=3D"PageContent"> <table class=3D"pagecontent" border=3D"0" cellpadding=3D"0" cellspacing=3D"= 0" width=3D"100%"><tr> <td valign=3D"top" class=3D"pagebody"> <div class=3D"pageheader"> <span class=3D"pagetitle"> Page Edited : <a href=3D"http://cwiki.apache.org/confluence/display/SLING">SL= ING</a> : <a href=3D"http://cwiki.apache.org/confluence/display/SLING/Dis= cover+Sling+in+15+minutes">Discover Sling in 15 minutes</a> </span> </div> <p> <a href=3D"http://cwiki.apache.org/confluence/display/SLING/Discove= r+Sling+in+15+minutes">Discover Sling in 15 minutes</a> has been edited by <a href=3D"http://cwiki.apache.org/c= onfluence/display/~bdelacretaz">Bertrand Delacretaz</a> <span class=3D"smallfont">(Feb 01, 2008)</span>. </p> <p> Change summary: <div class=3D"greybox wiki-content"><p>page status note added</p></di= v> </p> <p> <a href=3D"http://cwiki.apache.org/confluence/pages/diffpa= gesbyversion.action?pageId=3D75173&originalVersion=3D8&revisedVersion=3D9">= (View changes)</a> </p> <span class=3D"label">Content:</span><br/> <div class=3D"greybox wiki-content"><h1><a name=3D"DiscoverSlingin15min= utes-TheSlingLaunchpad"></a>The Sling Launchpad</h1> <table cellpadding=3D'5' width=3D'85%' cellspacing=3D'8px' class=3D'noteMac= ro' border=3D"0" align=3D'center'><colgroup><col width=3D'24'><col></colgro= up><tr><td valign=3D'top'><img src=3D"/confluence/images/icons/emoticons/wa= rning.gif" width=3D"16" height=3D"16" align=3D"absmiddle" alt=3D"" border= =3D"0"></td><td><b class=3D"strong">Page Status</b><br /> <p>Reviewed 2008-02-01, this page's information is in sync with the current= Sling codebase.</p></td></tr></table> <p>The Sling Launchpad is a ready-to-run Sling configuration, providing an = embedded JCR content repository and web server, a selection of Sling compon= ents, and documentation and examples. The Launchpad makes it easy to get st= arted with Sling and to develop script-based applications.</p> <p>This page will help you in getting started with the Launchpad. Fifteen m= inutes should be enough to get an overview of what Sling does.</p> <p>While simple to run and understand, the Launchpad is a full-featured ins= tance of Sling, an example configuration that we have created with the most= common modules and configurations. The full functionality of Sling is avai= lable by loading additional Sling (or custom) OSGi modules as needed, using= the Launchpad's web-based OSGi management console. </p> <table cellpadding=3D'5' width=3D'85%' cellspacing=3D'8px' class=3D'infoMac= ro' border=3D"0" align=3D'center'><colgroup><col width=3D'24'><col></colgro= up><tr><td valign=3D'top'><img src=3D"/confluence/images/icons/emoticons/in= formation.gif" width=3D"16" height=3D"16" align=3D"absmiddle" alt=3D"" bord= er=3D"0"></td><td><b class=3D"strong">Launchpad Status</b><br /> <p>The Launchpad is not released as I write this (January 29th, 2008), so y= ou'll have to get the code from our Subversion code repository, and build i= t yourself with Maven.</p> <p>Also, the Launchpad does not yet include any built-in examples, so some = assembly is required...things will get better - stay tuned!</p></td></tr></= table> <h2><a name=3D"DiscoverSlingin15minutes-Prerequisites"></a>Prerequisites</h= 2> <ul> =09<li>A Subversion client to get the Sling code</li> =09<li>A Java 5 JDK</li> =09<li><span class=3D"nobr"><a href=3D"http://maven.apache.org/" title=3D"V= isit page outside Confluence" rel=3D"nofollow">Maven<sup><img class=3D"rend= ericon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" width=3D= "7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span> is used to= build Sling, we currently recommend V 2.0.7</li> =09<li><span class=3D"nobr"><a href=3D"http://curl.haxx.se/" title=3D"Visit= page outside Confluence" rel=3D"nofollow">cURL<sup><img class=3D"renderico= n" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" width=3D"7" a= lign=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span> to create conte= nt in the JCR repository</li> </ul> <p>A WebDAV client makes editing server-side scripts much more convenient, = but to make our examples easy to reproduce, we're using cURL below to creat= e and update files in the JCR repository, via the Sling WebDAV server.</p> <h2><a name=3D"DiscoverSlingin15minutes-GettheLaunchpad"></a>Get the Launch= pad</h2> <p>Checkout the code from our Subversion repository:</p> <p><tt>svn co <span class=3D"nobr"><a href=3D"http://svn.apache.org/repos/a= sf/incubator/sling/trunk" title=3D"Visit page outside Confluence" rel=3D"no= follow">http://svn.apache.org/repos/asf/incubator/sling/trunk<sup><img clas= s=3D"rendericon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7"= width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span> s= ling</tt></p> <p>This creates a directory named <em>sling</em> under the current director= y, with the completed Sling source code.</p> <table cellpadding=3D'5' width=3D'85%' cellspacing=3D'8px' class=3D'tipMacr= o' border=3D"0" align=3D'center'><colgroup><col width=3D'24'><col></colgrou= p><tr><td valign=3D'top'><img src=3D"/confluence/images/icons/emoticons/che= ck.gif" width=3D"16" height=3D"16" align=3D"absmiddle" alt=3D"" border=3D"0= "></td><td><b class=3D"strong">Client-less SVN</b><br /> <p>In a pinch, the code can also be copied using HTTP from the above URL, w= ithout installing a Subversion client.</p></td></tr></table> <h2><a name=3D"DiscoverSlingin15minutes-BuildtheLaunchpad"></a>Build the La= unchpad</h2> <p>In the top-level <em>sling</em> directory that was created by the <em>sv= n</em> command, run:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>mvn clean install </pre> </div></div> <p>This builds and tests all the Sling modules that are required to run the= Launchpad.</p> <p>Maven should say <em>BUILD SUCCESSFUL</em> once the build is complete. N= ote that extensive automated tests of the Launchpad run during this build, = so if this works Sling should run without problems on your system.</p> <table cellpadding=3D'5' width=3D'85%' cellspacing=3D'8px' class=3D'tipMacr= o' border=3D"0" align=3D'center'><colgroup><col width=3D'24'><col></colgrou= p><tr><td valign=3D'top'><img src=3D"/confluence/images/icons/emoticons/che= ck.gif" width=3D"16" height=3D"16" align=3D"absmiddle" alt=3D"" border=3D"0= "></td><td><b class=3D"strong">Maven build duration</b><br /> <p>The first time you run this, Maven downloads all the required dependenci= es (jar files mostly) from public Maven repositories, and stores them in a = local cache on your system. Builds will be much faster after that.</p></td>= </tr></table> <p>Okay, this might send our 15 minutes deadline right out of the window...= things will get better once we have a ready-to-run release.</p> <h2><a name=3D"DiscoverSlingin15minutes-StarttheLaunchpad"></a>Start the La= unchpad</h2> <p>Change to the <em>launchpad/launchpad-webapp</em> directory under the to= p-level <em>sling</em> directory, and run</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>mvn jetty:run </pre> </div></div> <p>To start the launchpad.</p> <p>Once started, look at <span class=3D"nobr"><a href=3D"http://localhost:8= 080/sling" title=3D"Visit page outside Confluence" rel=3D"nofollow">http://= localhost:8080/sling<sup><img class=3D"rendericon" src=3D"/confluence/image= s/icons/linkext7.gif" height=3D"7" width=3D"7" align=3D"absmiddle" alt=3D""= border=3D"0"/></sup></a></span> with your browser. Sling asks you for a lo= gin (<em>admin</em> with password <em>admin</em> by default), and displays = the <em>Sling Management Console</em> page.</p> <p>We don't need the Sling management console right now, but it tells us th= at Sling is started. </p> <p>If you look at the <span class=3D"nobr"><a href=3D"http://localhost:8080= /sling/list" title=3D"Visit page outside Confluence" rel=3D"nofollow">http:= //localhost:8080/sling/list<sup><img class=3D"rendericon" src=3D"/confluenc= e/images/icons/linkext7.gif" height=3D"7" width=3D"7" align=3D"absmiddle" a= lt=3D"" border=3D"0"/></sup></a></span> page, all bundles should be marked = <em>Active</em>. They're <span class=3D"nobr"><a href=3D"http://www.osgi.or= g/" title=3D"Visit page outside Confluence" rel=3D"nofollow">OSGi<sup><img = class=3D"rendericon" src=3D"/confluence/images/icons/linkext7.gif" height= =3D"7" width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></s= pan> bundles powered by <span class=3D"nobr"><a href=3D"http://felix.apache= .org" title=3D"Visit page outside Confluence" rel=3D"nofollow">Apache Felix= <sup><img class=3D"rendericon" src=3D"/confluence/images/icons/linkext7.gif= " height=3D"7" width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup= ></a></span>, but that doesn't really matter to us right now.</p> <table cellpadding=3D'5' width=3D'85%' cellspacing=3D'8px' class=3D'tipMacr= o' border=3D"0" align=3D'center'><colgroup><col width=3D'24'><col></colgrou= p><tr><td valign=3D'top'><img src=3D"/confluence/images/icons/emoticons/che= ck.gif" width=3D"16" height=3D"16" align=3D"absmiddle" alt=3D"" border=3D"0= "></td><td><b class=3D"strong">Log files</b><br /> <p>If things go wrong, have a look at the <tt>target/sling/logs/error.log</= tt> log file under <tt>launchpad-webapp</tt> - that's where Sling writes an= y error messages.</p></td></tr></table> <h2><a name=3D"DiscoverSlingin15minutes-Createsomecontent"></a>Create some = content</h2> <p>Until we have ready-to-test forms, you can create content with cURL, or = you can create an HTML form that posts to the specified URL.</p> <p>To create a content node (nodes are a <span class=3D"nobr"><a href=3D"ht= tp://jackrabbit.apache.org/" title=3D"Visit page outside Confluence" rel=3D= "nofollow">JCR<sup><img class=3D"rendericon" src=3D"/confluence/images/icon= s/linkext7.gif" height=3D"7" width=3D"7" align=3D"absmiddle" alt=3D"" borde= r=3D"0"/></sup></a></span> concept, a unit of storage) with cURL, use:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -F"sling:resourceType=3Dfoo/bar" -F"title=3Dsome title" http://ad= min:admin@localhost:8080/content/mynode </pre> </div></div> <p>The resulting node can be seen at <span class=3D"nobr"><a href=3D"http:/= /localhost:8080/content/mynode" title=3D"Visit page outside Confluence" rel= =3D"nofollow">http://localhost:8080/content/mynode<sup><img class=3D"render= icon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" width=3D"7= " align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span>, with defaul= t renderings in various formats at <span class=3D"nobr"><a href=3D"http://l= ocalhost:8080/content/mynode.html" title=3D"Visit page outside Confluence" = rel=3D"nofollow">http://localhost:8080/content/mynode.html<sup><img class= =3D"rendericon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" = width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span> an= d <span class=3D"nobr"><a href=3D"http://localhost:8080/content/mynode.json= " title=3D"Visit page outside Confluence" rel=3D"nofollow">http://localhost= :8080/content/mynode.json<sup><img class=3D"rendericon" src=3D"/confluence/= images/icons/linkext7.gif" height=3D"7" width=3D"7" align=3D"absmiddle" alt= =3D"" border=3D"0"/></sup></a></span>.</p> <h2><a name=3D"DiscoverSlingin15minutes-Renderyourcontentusingserversidejav= ascript%28ESP%29"></a>Render your content using server-side javascript (ESP= )</h2> <p>Sling uses scripts or servlets to render and process content.</p> <p>Several scripting languages are available as additional Sling modules (p= ackaged as OSGi <em>bundles</em> that can be installed via the Sling manage= ment console), but the launchpad currently only includes the ESP server-sid= e javascript module.</p> <p>To select a script, Sling uses the node's <em>sling:resourceType</em> pr= operty, if it is set.</p> <p>That's the case in our example, so the following script will be used by = Sling to render the node in HTML, if the script is found at <em>/apps/foo/b= ar/html.esp</em> in the repository.</p> <div class=3D"code"><div class=3D"codeHeader"><b>html.esp</b></div><div cla= ss=3D"codeContent"> <pre class=3D"code-java">&lt;html&gt; &lt;body&gt; &lt;h1&gt;&lt;%=3D resource.node.title %&gt;&lt;/h1&gt; &lt;/body&gt; &lt;/html&gt;</pre> </div></div> <p>To select the script, Sling looks under <em>/apps</em>, appends the <em>= sling:resourceType</em> value of our node, which is <em>foo/bar</em>, and a= ppends <em>html.esp</em> as the extension in our URL is <em>html</em> and t= he language of our script is <em>esp</em>.</p> <p>Store this script under <em>apps/foo/bar/html.esp</em>, either using a W= ebDAV client (connected to <span class=3D"nobr"><a href=3D"http://admin:adm= in@localhost:8080/dav/default/" title=3D"Visit page outside Confluence" rel= =3D"nofollow">http://admin:admin@localhost:8080/dav/default/<sup><img class= =3D"rendericon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" = width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span>), = or using cURL as shown here, after creating the <em>html.esp</em> script in= the current directory on your system:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -X MKCOL http://admin:admin@localhost:8080/dav/default/apps curl -X MKCOL http://admin:admin@localhost:8080/dav/default/apps/foo curl -X MKCOL http://admin:admin@localhost:8080/dav/default/apps/foo/bar curl -X PUT -d @html.esp http://admin:admin@localhost:8080/dav/default/apps= /foo/bar/html.esp </pre> </div></div> <p>The HTML rendering of your node, at <span class=3D"nobr"><a href=3D"http= ://localhost:8080/content/mynode.html" title=3D"Visit page outside Confluen= ce" rel=3D"nofollow">http://localhost:8080/content/mynode.html<sup><img cla= ss=3D"rendericon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7= " width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span>,= is now created by this ESP script. You should see the node's title alone a= s an &lt;h1&gt; element in that page.</p> <h2><a name=3D"DiscoverSlingin15minutes-Whatnext%3F"></a>What next?</h2> <p>These simple examples show how Sling uses scripts to work with JCR data,= based on _sling:resourceType or node types.</p> <p>There's much more to Sling of course - you'll find some additional simpl= e examples below.</p> <p>TODO: add references to the next docs to study.</p> <h1><a name=3D"DiscoverSlingin15minutes-Additionalexamples"></a>Additional = examples</h1> <h2><a name=3D"DiscoverSlingin15minutes-LetSlinggeneratethepathofanewlycrea= tednode."></a>Let Sling generate the path of a newly created node.</h2> <p>To create a node with a unique path at a given location, end the URL of = the POST request with <em>/*</em>.</p> <p>In this case, the Sling response redirects to the URL of the created nod= e.</p> <p>Start by creating a new <em>/blog</em> folder:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -X POST "http://admin:admin@localhost:8080/content/blog" </pre> </div></div> <p>And create a node with a Sling-generated name under it:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -D - -F"title=3DAdventures with Sling" "http://admin:admin@localh= ost:8080/content/blog/*" </pre> </div></div> <p>Using cURL's <em>-D</em> option shows the full HTTP response, which incl= udes a <em>Location</em> header to indicate where the new node was created:= </p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>Location: http://localhost:8080/content/blog/adventures_with_slin_0 </pre> </div></div> <p>Note that Sling generated the node path based on the <em>title</em> valu= e - several well-know property values like title, description, etc. are use= d for this if provided.</p> <p>So, in our case, our new node can be displayed in HTML via the <span cla= ss=3D"nobr"><a href=3D"http://localhost:8080/content/blog/adventures_with_s= lin_0.html" title=3D"Visit page outside Confluence" rel=3D"nofollow">http:/= /localhost:8080/content/blog/adventures_with_slin_0.html<sup><img class=3D"= rendericon" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" widt= h=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span> URL.</= p> <p>Note that we didn't set a <em>sling:resourceType</em> property on our no= de, so if you want to render that node with a script, you'll have to store = the script under <em>/apps/nt/unstructured/html.esp</em>.</p> <h2><a name=3D"DiscoverSlingin15minutes-Addapageheaderwithsling.include"></= a>Add a page header with sling.include</h2> <p>The <em>sling.include</em> function can be called from scripts to includ= e the rendered result of another node.</p> <p>In this example, we create a node at <em>/content/header</em>, rendered = with a logo using an <em>html.esp</em> script, and use that header at the t= op of the <em>html.esp</em> script that we previously created for the <em>f= oo/bar</em> resource type.</p> <p>Start by checking that <span class=3D"nobr"><a href=3D"http://localhost:= 8080/content/mynode.html" title=3D"Visit page outside Confluence" rel=3D"no= follow">http://localhost:8080/content/mynode.html<sup><img class=3D"renderi= con" src=3D"/confluence/images/icons/linkext7.gif" height=3D"7" width=3D"7"= align=3D"absmiddle" alt=3D"" border=3D"0"/></sup></a></span> is rendered u= sing the <em>html.esp</em> script created above.</p> <p>Create this script and name it <em>header.esp</em>:</p> <div class=3D"code"><div class=3D"codeHeader"><b>header.esp</b></div><div c= lass=3D"codeContent"> <pre class=3D"code-java">&lt;div&gt; &lt;p style=3D<span class=3D"code-quote">"color:blue;"</span>&gt; &lt;img src=3D<span class=3D"code-quote">"/images/sling.jpg"</span> ali= gn=3D<span class=3D"code-quote">"right"</span>/&gt; &lt;%=3D resource.node.headline %&gt; &lt;/p&gt; &lt;/div&gt;</pre> </div></div> <p>Upload it so that it is used to render resources having <em>sling:resour= ceType=3Dfoo/header</em>:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -X MKCOL http://admin:admin@localhost:8080/dav/default/apps/foo/= header/ curl -X PUT -d @header.esp http://admin:admin@localhost:8080/dav/default/a= pps/foo/header/html.esp </pre> </div></div> <p>Create the header node:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -F"sling:resourceType=3Dfoo/header" -F'headline=3DHello, Sling wo= rld!' http://admin:admin@localhost:8080/content/header </pre> </div></div> <p>Upload the logo that the script uses (using some sling.jpg or other logo= in the current directory):</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -X MKCOL http://admin:admin@localhost:8080/dav/default/images/ curl -T sling.jpg http://admin:admin@localhost:8080/dav/default/images/sli= ng.jpg </pre> </div></div> <p>And check that the header is rendered with the logo at <span class=3D"no= br"><a href=3D"http://localhost:8080/content/header.html" title=3D"Visit pa= ge outside Confluence" rel=3D"nofollow">http://localhost:8080/content/heade= r.html<sup><img class=3D"rendericon" src=3D"/confluence/images/icons/linkex= t7.gif" height=3D"7" width=3D"7" align=3D"absmiddle" alt=3D"" border=3D"0"/= ></sup></a></span>.</p> <p>Now, update the html.esp script that we created for our first example ab= ove, to include the header:</p> <div class=3D"code"><div class=3D"codeHeader"><b>html.esp</b></div><div cla= ss=3D"codeContent"> <pre class=3D"code-java">&lt;html&gt; &lt;body&gt; &lt;div id=3D<span class=3D"code-quote">"header"</span>&gt; &lt;% sling.include(<span class=3D"code-quote">"/content/header"</spa= n>); %&gt; &lt;/div&gt; &lt;h1&gt;&lt;%=3D resource.node.title %&gt;&lt;/h1&gt; &lt;/body&gt; &lt;/html&gt;</pre> </div></div> <p>And re-upload it to replace the previous version:</p> <div class=3D"preformatted"><div class=3D"preformattedContent"> <pre>curl -X PUT -d @html.esp http://admin:admin@localhost:8080/dav/defaul= t/apps/foo/bar/html.esp </pre> </div></div> <p>The <span class=3D"nobr"><a href=3D"http://localhost:8080/content/mynode= .html" title=3D"Visit page outside Confluence" rel=3D"nofollow">http://loca= lhost:8080/content/mynode.html<sup><img class=3D"rendericon" src=3D"/conflu= ence/images/icons/linkext7.gif" height=3D"7" width=3D"7" align=3D"absmiddle= " alt=3D"" border=3D"0"/></sup></a></span>, once refreshed, now shows the b= lue headline and logo, and that layout applies to any node created with <em= >sling:resourceType=3Dfoo/bar</em>.</p></div> </td></tr></table></div> <p> <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"100%"> <tr> <td height=3D"12" background=3D"http://cwiki.apache.org/confluence/= images/border/border_bottom.gif"><img src=3D"http://cwiki.apache.org/conflu= ence/images/border/spacer.gif" width=3D"1" height=3D"1" border=3D"0"/></td> </tr> </table> <div class=3D"smalltext"> Powered by <a href=3D"http://www.atlassian.com/software/confluence/default.jsp?cli= cked=3Dfooter" class=3D"smalltext">Atlassian Confluence</a> (Version: 2.2.9 Build:#527 Sep 07, 2006) - <a href=3D"http://jira.atlassian.com/secure/BrowseProject.jspa?id=3D104= 70" class=3D"smalltext">Bug/feature request</a><br/> <br> <a href=3D"http://cwiki.apache.org/confluence/users/viewnotifications.a= ction">Unsubscribe or edit your notifications preferences</a> </div> </body> </html> From sling-commits-return-osmith@example.org Fri Feb 01 09:09:34 2008 Return-Path: <sling-commits-return-osmith@example.org> Delivered-To: osmith@example.org Received: (qmail 24604 invoked from network); 1 Feb 2008 09:09:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (83.161.120.155) by minotaur.apache.org with SMTP; 1 Feb 2008 09:09:33 -0000 Received: (qmail 39483 invoked by uid 500); 1 Feb 2008 09:09:24 -0000 Delivered-To: osmith@example.org Received: (qmail 39444 invoked by uid 500); 1 Feb 2008 09:09:24 -0000 Mailing-List: contact osmith@example.org; run by ezmlm Precedence: bulk List-Help: <mailto:osmith@example.org> List-Unsubscribe: <mailto:osmith@example.org> List-Post: <mailto:osmith@example.org> List-Id: <sling-commits.incubator.apache.org> Reply-To: osmith@example.org Delivered-To: mailing list osmith@example.org Received: (qmail 39408 invoked by uid 99); 1 Feb 2008 09:09:24 -0000 Received: from athena.apache.org (HELO athena.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 01:09:24 -0800 X-ASF-Spam-Status: No, hits=-96.3 required=10.0 tests=ALL_TRUSTED,HTML_MESSAGE,MIME_HTML_ONLY X-Spam-Check-By: apache.org Received: from [83.161.120.155] (HELO brutus.apache.org) (83.161.120.155) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2008 09:08:53 +0000 Received: from brutus (localhost [83.161.120.155]) by brutus.apache.org (Postfix) with ESMTP id 110D8714035 for <osmith@example.org>; Fri, 1 Feb 2008 01:09:00 -0800 (PST) Message-ID: <9062287.1201856940023.JavaMail.www-data@brutus> Date: Fri, 1 Feb 2008 01:09:00 -0800 (PST) From: osmith@example.org To: osmith@example.org Subject: [CONF] Apache Sling: Architecture (page edited) MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org <html> <head> <base href=3D"http://cwiki.apache.org/confluence" /> <style type=3D"text/css"> <!-- body, p, td, table, tr, .bodytext, .stepfield { =09font-family: Verdana, arial, sans-serif; =09font-size: 11px; =09line-height: 16px; =09color: #000000; =09font-weight: normal; } #PageContent { =09text-align: left; =09background-color: #fff; =09padding: 0px; =09margin: 0px; padding-bottom:20px; } /* ** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area= , we can't ** use an id=3DPageContent or class=3Dwiki-content, so we must ** set the body style to that used for PageContent, and p to that used for = wiki-content. */ body { =09margin: 0px; =09padding: 0px; =09text-align: center; background-color: #f0f0f0; } @media print { body { background-color: #fff; } } .monospaceInput { font:12px monospace } .wiki-content p, .commentblock p { margin: 16px 0px 16px 0px; padding: 0px; } .wiki-content-preview { padding: 5px; border-left: 1px solid #3c78b5; border-right: 1px solid #3c78b5; } ul, ol { margin-top: 2px; margin-bottom: 2px; padding-top: 0px; padding-bottom: 0px; } pre { padding: 0px; margin-top: 5px; margin-left: 15px; margin-bottom: 5px; margin-right: 5px; text-align: left; } .helpheading { font-weight: bold; background-color: #D0D9BD; border-bottom: 1px solid #3c78b5; padding: 4px 4px 4px 4px; margin: 0px; margin-top: 10px; } .helpcontent { padding: 4px 4px 20px 4px; background-color: #f5f7f1; } .code { =09border: 1px dashed #3c78b5; font-size: 11px; =09font-family: Courier; margin: 10px; =09line-height: 13px; } .focusedComment { background: #ffffce; } .commentBox, .focusedComment { padding: 10px; margin: 5px 0 5px 0; border: 1px #bbb solid; } .codeHeader { background-color: #f0f0f0; =09border-bottom: 1px dashed #3c78b5; padding: 3px; =09text-align: center; } .codeContent { text-align: left; background-color: #f0f0f0; padding: 3px; } .preformatted { =09border: 1px dashed #3c78b5; font-size: 11px; =09font-family: Courier; margin: 10px; =09line-height: 13px; } .preformattedHeader { background-color: #f0f0f0; =09border-bottom: 1px dashed #3c78b5; padding: 3px; =09text-align: center; } .preformattedContent { background-color: #f0f0f0; padding: 3px; } .panel { =09border: 1px dashed #3c78b5; margin: 10px; margin-top: 0px; } .panelHeader { background-color: #f0f0f0; =09border-bottom: 1px dashed #3c78b5; padding: 3px; =09text-align: center; } .panelContent { background-color: #f0f0f0; padding: 5px; } .anonymousAlert { background-color: #f0f0f0; =09border: 1px dashed red; font-size: 11px; padding: 10px 5px 10px 5px; margin: 4px; =09line-height: 13px; } .lockAlert { background-color: #f0f0f0; width: 50%; =09border: 1px dashed red; font-size: 11px; padding: 10px 5px 10px 5px; margin: 4px; =09line-height: 13px; } .code-keyword { color: #000091; background-color: inherit; } .code-object { color: #910091; background-color: inherit; } .code-quote { color: #009100; background-color: inherit; } .code-comment { color: #808080; background-color: inherit; } .code-xml .code-keyword { color: inherit; font-weight: bold; } .code-tag { color: #000091; background-color: inherit; } .breadcrumbs { background-color: #f0f0f0; =09border-color: #3c78b5; =09border-width: 1px 0px 1px 0px; =09border-style: solid; font-size: 11px; padding: 3px 0px 3px 0px; } .navmenu { border: 1px solid #ccc; } .menuheading { font-weight: bold; background-color: #f0f0f0; =09border-bottom: 1px solid #3c78b5; =09padding: 4px 4px 2px 4px; } .menuitems { =09padding: 4px 4px 20px 4px; } .rightpanel { border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; } #helpheading { text-align: left; font-weight: bold; background-color: #D0D9BD; =09border-bottom: 1px solid #3c78b5; =09padding: 4px 4px 4px 4px; =09margin: 0px; } #helpcontent { =09padding: 4px 4px 4px 4px; background-color: #f5f7f1; } .helptab-unselected { font-weight: bold; =09padding: 5px; background-color: #f5f7f1; } .helptab-selected { font-weight: bold; background-color: #D0D9BD; =09padding: 5px; } .helptabs { margin: 0px; background-color: #f5f7f1; =09padding: 5px; } .infopanel-heading { font-weight: bold; =09padding: 4px 0px 2px 0px; } .pagebody { } .pageheader { =09padding: 5px 5px 5px 0px; =09border-bottom: 1px solid #3c78b5; } .pagetitle { =09font-size: 22px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: #003366; } .newpagetitle { color: #ccc !important; } .steptitle { =09font-size: 18px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: #003366; =09margin-bottom: 7px; } .substeptitle { font-size: 12px; font-weight: bold; font-family: Arial, sans-serif; color: #003366; margin: 2px 4px 4px 4px; padding: 2px 4px 1px 4px; } .stepdesc { font-family: Verdana, arial, sans-serif; =09font-size: 11px; =09line-height: 16px; =09font-weight: normal; color: #666666; margin-top: 7px; margin-bottom: 7px; } .steplabel { font-weight: bold; margin-right: 4px; color: black; float: left; width: 15%; text-align: right; } .stepfield { background: #f0f0f0; padding: 5px; } .submitButtons{ margin-top:5px; text-align:right; } .formtitle { =09font-size: 12px; =09font-weight: bold; =09font-family: Arial, sans-serif; =09color: #003366; } .sectionbottom { border-bottom: 1px solid #3c78b5; } .topRow { border-top: 2px solid #3c78b5; } .tabletitle { =09font-size: 14px; =09font-weight: bold; =09font-family: Arial, sans-serif; padding: 3px 0px 2px 0px; margin: 8px 4px 2px 0px; =09color: #003366; =09border-bottom: 2px solid #3c78b5; } .pagesubheading { color: #666666; font-size: 10px; padding: 0px 0px 5px 0px; } HR { =09color: 3c78b5; =09height: 1; } A:link, A:visited, A:active, A:hover { =09color: #003366; } h1 A:link, h1 A:visited, h1 A:active { =09text-decoration: none; } h1 A:hover { border-bottom: 1px dotted #003366; } .wiki-content > :first-child, .commentblock > :first-child { margin-top: 3px; } .logocell { padding: 10px; } input { =09font-family: verdana, geneva, arial, sans-serif; =09font-size: 11px; =09color: #000000; } textarea, textarea.editor { =09font-family: verdana, geneva, arial, sans-serif; =09font-size: 11px; =09color: #333333; } /* use logoSpaceLink instead. .spacenametitle { =09font: 21px/31px Impact, Arial, Helvetica; font-weight: 100; color: #999999; =09margin: 0px; } .spacenametitle img { margin: 0 0 -4px 0; } .spacenametitle a { text-decoration: none; color: #999999; } .spacenametitle a:visited { text-decoration: none; color: #999999; }*/ .spacenametitle-printable { =09font: 20px/25px Impact, Arial, Helvetica; font-weight: 100; color: #999999; =09margin: 0px; } .spacenametitle-printable a { text-decoration: none; color: #999999; } .spacenametitle-printable a:visited { text-decoration: none; color: #999999; } .blogDate { =09font-weight: bold; =09text-decoration: none; =09color: black; } .blogSurtitle { background: #f0f0f0; =09border: 1px solid #ddd; =09padding: 3px; =09margin: 1px 1px 10px 1px; } .blogHeading { font-size: 20px; line-height: normal; font-weight: bold; padding: 0px; margin: 0px; } .blogHeading a { text-decoration: none; color: black; } .endsection { =09align: right; =09color: #666666; =09margin-top: 10px; } .endsectionleftnav { =09align: right; =09color: #666666; =09margin-top: 10px; } h1 { =09font-size: 24px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09color: #003366; =09border-bottom: 1px solid #3c78b5; =09padding: 2px; =09margin: 36px 0px 4px 0px; } h2 { =09font-size: 18px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09border-bottom: 1px solid #3c78b5; =09padding: 2px; =09margin: 27px 0px 4px 0px; } h3 { =09font-size: 14px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 21px 0px 4px 0px; } h4 { =09font-size: 12px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 18px 0px 4px 0px; } h4.search { =09font-size: 12px; =09line-height: normal; =09font-weight: normal; =09background-color: #f0f0f0; =09padding: 4px; =09margin: 18px 0px 4px 0px; } h5 { =09font-size: 10px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 14px 0px 4px 0px; } h6 { =09font-size: 8px; =09line-height: normal; =09font-weight: bold; =09background-color: #f0f0f0; =09padding: 2px; =09margin: 14px 0px 4px 0px; } .smallfont { font-size: 10px; } .descfont { font-size: 10px; color: #666666; } .smallerfont { font-size: 9px; } .smalltext { color: #666666; font-size: 10px; } .smalltext a { color: #666666; } .smalltext-blue { color: #3c78b5; font-size: 10px; } .surtitle { margin-left: 1px; margin-bottom: 5px; font-size: 14px; color: #666666; } /* css hack found here: http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/c= ss/hacks/ */ .navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; backgrou= nd-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inheri= t; cursor: pointer;} .navItemOver a { color: #ffffff; background-color:#003366; text-decoration:= none; } .navItemOver a:visited { color: #ffffff; background-color:#003366; text-dec= oration: none; } .navItemOver a:hover { color: #ffffff; background-color:#003366; text-decor= ation: none; } .navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-c= olor: #3c78b5; } .navItem a { color: #ffffff; text-decoration: none; } .navItem a:hover { color: #ffffff; text-decoration: none; } .navItem a:visited { color: #ffffff; text-decoration: none; } div.padded { padding: 4px; } div.thickPadded { padding: 10px; } h3.macrolibrariestitle { margin: 0px 0px 0px 0px; } div.centered { text-align: center; margin: 10px; } div.centered table {margin: 0px auto; text-align: left; } .tableview table { margin: 0; } .tableview th { text-align: left; color: #003366; font-size: 12px; padding: 5px 0px 0px 5px; border-bottom: 2px solid #3c78b5; } .tableview td { text-align: left; border-color: #ccc; border-width: 0px 0px 1px 0px; border-style: solid; margin: 0; padding: 4px 10px 4px 5px; } .grid { margin: 2px 0px 5px 0px; border-collapse: collapse; } .grid th { border: 1px solid #ccc; padding: 2px 4px 2px 4px; background: #f0f0f0; text-align: center; } .grid td { border: 1px solid #ccc; padding: 3px 4px 3px 4px; } .gridHover { =09background-color: #f9f9f9; } td.infocell { background-color: #f0f0f0; } .label { =09font-weight: bold; =09color: #003366; } label { =09font-weight: bold; =09color: #003366; } .error { =09background-color: #fcc; } .errorBox { =09background-color: #fcc; border: 1px solid #c00; padding: 5px; margin: 5px; } .errorMessage { =09color: #c00; } .success { =09background-color: #dfd; } .successBox { =09background-color: #dfd; border: 1px solid #090; padding: 5px; margin-top:5px; margin-bottom:5px; } blockquote { =09padding-left: 10px; =09padding-right: 10px; =09margin-left: 5px; =09margin-right: 0px; =09border-left: 1px solid #3c78b5; } table.confluenceTable { margin: 5px; border-collapse: collapse; } /* Added as a temporary fix for CONF-4223. The table elements appear to be = inheriting the border: none attribute from the sectionMacro class */ table.confluenceTable td.confluenceTd { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; } /* Added as a temporary fix for CONF-4223. The table elements appear to be = inheriting the border: none attribute from the sectionMacro class */ table.confluenceTable th.confluenceTh { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; background-color: #f0f0f0; text-align: center; } td.confluenceTd { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; } th.confluenceTh { border-width: 1px; border-style: solid; border-color: #ccc; padding: 3px 4px 3px 4px; background-color: #f0f0f0; text-align: center; } DIV.small { =09font-size: 9px; } H1.pagename { =09margin-top: 0px; } IMG.inline {} .loginform { margin: 5px; border: 1px solid #ccc; } /* The text how the "This is a preview" comment should be shown. */ .previewnote { text-align: center; font-size: 11px; color: red; } /* How the preview content should be shown */ .previewcontent { background: #E0E0E0; } /* How the system messages should be shown (DisplayMessage.jsp) */ .messagecontent { background: #E0E0E0; } /* How the "This page has been modified..." -comment should be shown. */ .conflictnote { } .createlink { color: maroon; } a.createlink { color: maroon; } .templateparameter { font-size: 9px; color: darkblue; } .diffadded { background: #ddffdd; padding: 1px 1px 1px 4px; =09border-left: 4px solid darkgreen; } .diffdeleted { color: #999; background: #ffdddd; padding: 1px 1px 1px 4px; =09border-left: 4px solid darkred; } .diffnochange { padding: 1px 1px 1px 4px; =09border-left: 4px solid lightgrey; } .differror { background:
{'source': 'Apache Software Foundation Public Mail Archives'}