<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
	license agreements. See the NOTICE file distributed with this work for additional 
	information regarding copyright ownership. The ASF licenses this file to 
	you under the Apache License, Version 2.0 (the "License"); you may not use 
	this file except in compliance with the License. You may obtain a copy of 
	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
	by applicable law or agreed to in writing, software distributed under the 
	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
	OF ANY KIND, either express or implied. See the License for the specific 
	language governing permissions and limitations under the License. -->
[Apache Sling](https://sling.apache.org) > [Sling CMS](https://github.com/apache/sling-org-apache-sling-app-cms) > [Developers](developers.md) > Reference Project

# Reference Project

The reference project provides a number of example components to use, develop on or extend.

These components are:

## General

 - base page - a basic page using the Apache Sling website styling
 - breadcrumb - breadcrumb based on the page hierarchy
 - cta - a call to action link / button
 - codeblock - displays a block of code in a `<pre>` tag
 - columncontrol - allows authors to create columns of content
 - form - adds a form to a page
 - iframe - allows for adding an iframe
 - image - a block level image allowing linked and styled images
 - list	- a base component for creating dynamic lists
 - search - a simple search component using JCR Queries to search page content	
 - sitemap - renders an XML sitemap
 - stylewrapper - wraps in a div with a defineable set of selectable styles
 - suffixheader - displays a header based on the jcr:title of the resource in the Sling Suffix
 - rss - renders an RSS feed backed on a query
 - tags - displays the taxonomy tags on a page
 
 
In addition to these reference components, there are two general use components in the main ui project. These are found at `/libs/sling-cms/components/general` and are:

 - container - a container into which other components can be added. This is the most foundational component in Sling CMS allowing for component-driven content development
 - rte - a HTML based rich text editor using [wysihtml](http://wysihtml.com/) as the RTE
 - textelement - a block level text element which can be run through i18n
 
## Form Components

There are a number of components specifically for configuring the form.

**Form Value Provider**

 - requestparameters - Loads form values from the request parameters
 - suffixresource - Loads form values from the suffix resource
 - userprofile - Loads form field values from the current user's profile subnode
 
**Form Field**

 - fieldset - displays a HTML Fieldset for grouping fields, with an optional legend
 - honeypot - adds a spam-blocking honeypot to the form, should be hidden from view, any submission with this field filled out will be blocked
 - selection - allows for the users to select from options defined in tags, can be rendered as radio, checkboxes or a dropdown
 - textfield - basic text field with support for HTML5 types
 - textarea - basic text area

**Form Actions**

 - createuser - creates a new user based on the form data
 - deleteugc - deletes user generated content
 - requestpasswordreset - requests a password reset
 - resetpassword - resets the password for a user
 - sendemail - sends an email
 - updateprofile - updates the user's profile
 - updateugc - updates user generated content
 - usergeneratedcontent - creates user generated content