//
//  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.
//

<sling = 'http://sling.apache.org/jcr/sling/1.0'>

//-----------------------------------------------------------------------------
// Node type to be used as a replacement for nt:folder: it can be used
// as a child of nt:folder and allows to add unstructured content
// (See SLING-663)
[sling:Folder] > nt:folder
  - * (undefined) multiple
  - * (undefined)
  + * (nt:base) = sling:Folder version


//-----------------------------------------------------------------------------
// Mixin node type to turn any node into an nt:hierarchyNode to place
// below any nt:folder (or extension thereof such as sling:Folder) 
// (See SLING-663)
[sling:HierarchyNode] > nt:hierarchyNode
    mixin


//-----------------------------------------------------------------------------
// Node type extending sling:Folder supporting the creation of folder
// structured with child node ordering.
// (See SLING-663)
[sling:OrderedFolder] > sling:Folder
    orderable
  + * (nt:base) = sling:OrderedFolder version 
