<?xml version="1.0" ?>
<!--
  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.
-->

<!-- $Id: config.xml 161854 2005-04-19 08:16:31Z andreas $ -->

<config>
    <files>
        <input>
            <!-- The XML-document with the actual data -->
            <file name="BX_xmlfile">index-bxe.xml</file>
           <!-- The xhtml with the appropriate div tag (e.g. <div bxe_xpath="/xhtml:html/lenya:meta/dc:title" />)
                 An xhtml file can be used instead of an xsl to provide the page layout of the non-editable part -->
            <file name="BX_xhtmlfile">testxhtml.xml</file>

            <!-- The XSL-document which transforms the xml to the output format -->
            <file name="BX_xslfile">entry-bxe.xsl</file>
            <!-- The RelaxNG (XML Schema) -->
            <file name="BX_validationfile">relaxng.xml</file>
        </input>
        <output>
            <file name="BX_exitdestination">index.html</file>

         </output>
        
        <!-- You can't provide a different "method" than http.get for the following files -->
        <css>
            <!-- Document specific css, which you should adjust.  -->
             <file>entry-bxe.css</file>
          
        </css>
        
        <scripts>
        <!-- These are the to be included js files 
        the important .js files are included by bxeLoader.js, but you should
        not have to worry about them. 
        You can also add your own js-files here.
        -->

            <file>js/bxehtmltb.js</file>
            <file>js/table.js</file>
            <file>mozile/jsdav.js</file>
            <file>mozile/td/webdav.js</file>
            <file>mozile/mozilekb.js</file>
            
            
            <file>relaxng/AttributeVDOM.js</file>

            <file>relaxng/NodeVDOM.js</file>
            <file>relaxng/DocumentVDOM.js</file>
            <file>relaxng/ElementVDOM.js</file>
            <file>relaxng/DocumentVAL.js</file>
            <file>relaxng/NodeVAL.js</file>
            <file>relaxng/ElementVAL.js</file>

            <file>relaxng/RelaxNG.js</file>
        
        </scripts>
        
        
    </files>
    <options> 
    <option name="autoParaElementName">p</option>
    <option name="autoParaElementNamespace">http://www.w3.org/1999/xhtml</option>
    <option name="showSplashScreen">true</option>
    <option name="mergeDifferentBlocksOnDelete">true</option>
    </options>
<!-- here we define the buttons for the top button bar -->
    <buttons>
    
    <!-- The location of the image for the buttons
           if none is provided, the images/buttons.png is taken 
    <location src="../../images/bxe.png"/>
    -->
     <!-- the dimension tag is for defining the dimensions of your button image and how
            large each button is. -->
    <dimension  width="120" height="140" buttonwidth="20" buttonheight="20"/>
    <!-- For each button, we need a definition
    attributes:  
        col: in which column the button is in the button image
        row: in which row the button is in the button image
        name: the name of the button, this has to be unique and is used as tool tip at the moment
        ns: a namespace associated to the button (usually the namespace of the element to be inserted)
        type: The type of the "event" which should happen
            "function": This function will be called, when the button is clicked
            "insertElement": This element will be inserted
            "event": This event will be triggered
            
            If there's no "type" attribute, but a "action" attribute, the event in the action attribute
            will be triggered. 
            
            If type "event" or the action attribute is defined, the event gets the value of @name as parameter.
        examples: 
        - inserts the element xhtml:strong at cursor position 
          <button name="strong" col="1" row="1" type="insertElement" ns="http://www.w3.org/1999/xhtml">b</button>
        - calls the function DoSomething(), when clicked
          <button name="strong" col="1" row="1" type="function">DoSomething</button>
        - triggers the event ToggleTextClass (and makes the selection bold in this example)
          the 2 examples are the same, the later is here for backwards compatibility.
          <button name="strong" col="1" row="1" type="event" ns="http://www.w3.org/1999/xhtml">ToggleTextClass</button>
          <button name="strong" col="1" row="1" action="ToggleTextClass" ns="http://www.w3.org/1999/xhtml"/>
          
    -->

        <button name="strong" col="1" row="1" action="ToggleTextClass" ns="http://www.w3.org/1999/xhtml"/>
        <button name="em" col="0" row="1" action="ToggleTextClass" ns="http://www.w3.org/1999/xhtml"/>

        <button name="sub" col="4" row="1" action="ToggleTextClass" ns="http://www.w3.org/1999/xhtml"/>
        <button name="sup" col="5" row="1" action="ToggleTextClass" ns="http://www.w3.org/1999/xhtml"/>
        <button name="clean_inline" col="0" row="6" action="CleanInline"/>
        <!--button name="link" col="0" row="5" type="insertElement" ns="http://www.w3.org/1999/xhtml">a</button-->
        <button name="link" col="0" row="5" type="function">triggerInsertLink</button>
        <button name="unlink" col="1" row="5" action="DeleteLink"/>
        <button name="create_table" col="2" row="5" action="InsertTable"/>
        <button name="Unordered_List" col="3" row="2" action="UnorderedList"/>
        <button name="Ordered_List" col="2" row="2" action="OrderedList"/>

        <button name="Copy" col="0" row="4" action="ClipboardCopy"/>
        <button name="Cut" col="1" row="4" action="ClipboardCut"/>
        <!-- see https://ssl.bitflux.ch/horde/chora/diff.php/trunk/examples/uni/config.xml?rt=svneditor&ws=0&r1=1027&r2=1444&ty=u -->
        <button name="PasteDialog" col="4" row="4" action="ClipboardPasteDialog"/>

        <button name="Paste" col="2" row="4" action="ClipboardPaste"/>
        <!--button name="Image" col="3" row="5" action="InsertImage"/-->
        <button name="Image" col="3" row="5" type="function">triggerInsertImage</button>
        <button name="Save" col="1" row="6" action="DocumentSave"/>
        <button name="Undo" col="3" row="6" action="Undo"/>
        <button name="Redo" col="4" row="6" action="Redo"/>
        <!-- button name="Asset" col="2" row="6" action="InsertAsset"/-->
        <button name="Asset" col="2" row="6" type="function">triggerInsertAsset</button>
    </buttons>
    <callbacks>
        <element name="table" ns="http://www.w3.org/1999/xhtml" type="function">bxe_InsertTableCallback</element>
<!--
        <element name="object" ns="http://www.w3.org/1999/xhtml" type="popup">?lenya.usecase=bxe.insertImage</element>
        <element name="img" ns="http://www.w3.org/1999/xhtml" type="popup">?lenya.usecase=bxe.insertImage</element>
        <element name="asset" ns="http://apache.org/cocoon/lenya/page-envelope/1.0" type="popup">?lenya.usecase=bxe.insertAsset</element>
        <element name="a" ns="http://www.w3.org/1999/xhtml" precheck="bxe_checkIfNotALink" type="popup">?lenya.module=bxe&amp;lenya.step=link-show</element>
-->
    </callbacks>
    <options>
     <option name="autoParaElementName">p</option>
     <option name="autoParaElementNamespace">http://www.w3.org/1999/xhtml</option>
    </options>
    <plugins>
      <plugin name="ClipboardPasteDialog"/>
    </plugins>
</config>
