<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<?eclipse version="3.0"?>
<plugin>

   <!-- Completion proposals -->
   <extension
       point="org.eclipse.wst.sse.ui.completionProposal">
    	<proposalCategory
          icon="icons/full/obj16/sling_misc.gif"
          id="org.apache.sling.ide.eclipse.sightly.proposalCategory.htmlTags"
          name="Sightly" >
        </proposalCategory>       	
	    <proposalComputer
	          activate="true"
	          categoryId="org.apache.sling.ide.eclipse.sightly.proposalCategory.htmlTags"
	          class="org.apache.sling.ide.eclipse.sightly.ui.internal.ProposalComputer"
	          id="org.apache.sling.ide.eclipse.sightly.proposalComputer.htmlTags">
	       <contentType
	             id="org.eclipse.wst.html.core.htmlsource">
	          <partitionType
	                id="org.eclipse.wst.html.HTML_DEFAULT">
	          </partitionType>
	       </contentType>	       	          	       
	    </proposalComputer>
	</extension>

	<!-- Validation -->
	<extension point="org.eclipse.wst.sse.ui.sourcevalidation">
		<validator
			scope="total"
			class="org.apache.sling.ide.eclipse.sightly.ui.internal.TotalValidator"
			id="org.apache.sling.ide.eclipse.sightly.htmlSyntaxTotalValidator">
			<contentTypeIdentifier
				id="org.eclipse.wst.html.core.htmlsource">
				<partitionType id="org.eclipse.wst.html.HTML_DEFAULT"/>
				<partitionType id="org.eclipse.wst.html.HTML_DECLARATION"/>
				<partitionType id="org.eclipse.wst.html.HTML_COMMENT"/>
				<partitionType id="org.eclipse.wst.xml.XML_DEFAULT"/>
				<partitionType id="org.eclipse.wst.sse.ST_DEFAULT"/>
			</contentTypeIdentifier>
		</validator>
	</extension>
	
	<!-- Facet images  --> 
    <extension point="org.eclipse.wst.common.project.facet.ui.images">
        <image facet="sightly" path="icons/obj16/sightly.gif" />
  </extension>
  
   <!-- Wizards -->
   <extension
         point="org.eclipse.ui.newWizards">
      <category
            id="org.apache.sling.ide.eclipse.sightly.ui"
            name="Sightly">
      </category>
      <wizard
            category="org.apache.sling.ide.eclipse.sightly.ui"
            class="org.apache.sling.ide.eclipse.sightly.ui.internal.NewSightlyFileWizard"
            icon="icons/obj16/sightly.gif"
            id="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyFileWizard"
            name="Sightly File">
      </wizard>
      <wizard
            category="org.apache.sling.ide.eclipse.sightly.ui"
            class="org.apache.sling.ide.eclipse.sightly.ui.internal.NewSightlyJsUseScriptWizard"
            icon="icons/obj16/sightly.gif"
            id="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyJsUseWizard"
            name="Sightly JS Use-Script">
      </wizard>
      <wizard
            category="org.apache.sling.ide.eclipse.sightly.ui"
            class="org.apache.sling.ide.eclipse.sightly.ui.internal.NewSightlyJavaUseScriptWizard"
            icon="icons/obj16/sightly.gif"
            id="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyJavaUseWizard"
            name="Sightly Java Use-Script">
      </wizard>
   </extension>
   
   <!-- Menu contributions -->
   <extension
         point="org.eclipse.ui.menus">
        <menuContribution
              locationURI="popup:common.new.menu?after=new">
              <!-- enabled for all resources part of a Sightly Project -->
              <command
              	commandId="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyFileHandler"
              	icon="icons/obj16/sightly.gif"
              	label="&amp;Sightly File">
                 <visibleWhen
                       checkEnabled="false">
                   <iterate ifEmpty="false">
                        <test
                            property="org.apache.sling.ide.eclipse.sightly.sightlyNature">
                        </test>
                   </iterate>
                 </visibleWhen>
              </command>              
              <command
              	commandId="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyJsUseScriptHandler"
              	icon="icons/obj16/sightly.gif"
              	label="&amp;Sightly JS Use-Script">
                 <visibleWhen
                       checkEnabled="false">
                   <iterate ifEmpty="false">
                        <test
                            property="org.apache.sling.ide.eclipse.sightly.sightlyNature">
                        </test>
                   </iterate>
                 </visibleWhen>
              </command>              
              <command
              	commandId="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyJavaUseScriptHandler"
              	icon="icons/obj16/sightly.gif"
              	label="&amp;Sightly Java Use-Script">
                 <visibleWhen
                       checkEnabled="false">
                   <iterate ifEmpty="false">
                        <test
                            property="org.apache.sling.ide.eclipse.sightly.sightlyNature">
                        </test>
                   </iterate>
                 </visibleWhen>
              </command>              
        </menuContribution>         
   </extension>
   
   <!-- commands -->
   <extension
         point="org.eclipse.ui.commands">
   	      <command
   	      		id="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyFileHandler"
   	      		defaultHandler="org.apache.sling.ide.eclipse.sightly.ui.internal.NewSightlyFileHandler"
   	      		name="New Sightly File...">
         </command>
   	      <command
   	      		id="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyJsUseScriptHandler"
   	      		defaultHandler="org.apache.sling.ide.eclipse.sightly.ui.internal.NewSightlyJsUseScriptHandler"
   	      		name="New Sightly Javascript Use-Object...">
         </command>
 	     <command
   	      		id="org.apache.sling.ide.eclipse.sightly.ui.internal.newSightlyJavaUseScriptHandler"
   	      		defaultHandler="org.apache.sling.ide.eclipse.sightly.ui.internal.NewSightlyJavaUseScriptHandler"
   	      		name="New Sightly Java Use-Object...">
         </command>
   </extension>
</plugin>
