Ignore:
Timestamp:
2010-08-04T16:42:22+12:00 (14 years ago)
Author:
sjb48
Message:

More work on javascript DOM manipulation using sortables and draggables

Location:
main/trunk/greenstone3/web/interfaces/oran
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/oran/js/gui_div.js

    r22516 r22569  
    1616    $('a.remove').bind('click', removeContent);
    1717
    18     /*   
    19     $('div.blockWrapper').NestedSortable(
    20     {
    21         accept: 'block',
    22         helperclass: 'sortHelper',
    23         activeclass :   'sortableactive',
    24         hoverclass :    'sortablehover',
    25 
    26         // Restricts sort start click to the specified element.
    27         handle: 'div.header',
    28         onStart : function()
    29             {
    30                 $.iAutoscroller.start(this, document.getElementsByTagName('body'));
     18    $(".elementType").draggable({
     19            connectToSortable: '.gsf_template',
     20            helper: 'clone',
     21            revert: 'invalid',
     22            //start: function(event, ui) { ui.item.addClass('replaceMe');},
     23            stop: function(event, ui) {
     24                console.log("Stopped dragging - do we want to create element?"+ui.helper);
     25                ui.helper.addClass('replaceMe');
    3126            },
    32             onStop : function()
    33             {
    34                 $.iAutoscroller.stop();
     27        });
     28
     29    /*
     30    $('.elementType').sortable({
     31            cursor: 'pointer',
     32            tolerance: 'pointer',
     33            //placeholder:'placeholder',
     34            connectWith:'.gsf_template',
     35            //cancel: '.elementType',
     36           
     37            start: function(event, ui) {
     38                        $(this).clone().insertAfter(this);;
     39            },
     40
     41    });
     42    */
     43   
     44     function templateAdded() {
     45         var item = $('.elementType');
     46         // do something with "item" - its your new pretty cloned dropped item ;]
     47         item.replaceWith('<h2>REPLACED</h2>'); 
     48         //item.addClass( 'added' );
     49     };   
     50 
     51    $('#formatStatement').sortable({
     52            cursor: 'pointer',
     53            tolerance: 'pointer',
     54            items: '.gsf_template',
     55            placeholder:'placeholder'
     56            //'nested':'div'
     57    });
     58   
     59    $('.gsf_template').sortable({
     60            'cursor':'pointer',
     61            'tolerance': 'pointer',
     62            'items':'.table, .gsf_choose-metadata, .gsf_metadata',
     63            'placeholder':'placeholder',
     64            //'nested':'.gsf:metadata'
     65            stop: function(event, ui) {
     66                if (ui.item.hasClass("elementType") && ui.item.hasClass('css_gsf_template')) {
     67                        ui.item.replaceWith(gsf_metadata_element); //'<div class="element element-txt">This text box has been added!</div>');
     68                        //ui.item.style.border =
     69                }
    3570            }
    36     }
    37     );
    38     */
     71
     72            //receive: function(event, ui) {
     73            //    console.log("I have received an item");
     74                //var item = $('.ui_sortable/.elementType');
     75            //    var item = $('.div/.elementType'); //css_gsf_template not(.gsf_template)');
     76            //    console.log(item);
     77                //item.replaceWith('<h2>REPLACED</h2>');
     78            //}
     79
     80    });
     81
     82    $('.td').sortable({
     83            'cursor':'pointer',
     84            'tolerance': 'pointer',
     85            'items':'.leaf .gsf_choose-metadata, .gsf_link, .gsf_switch',
     86            'placeholder':'placeholder'
     87            //'nested':'.gsf:metadata'
     88    });
    3989 
    40      
    41     $('#formatStatement').sortable({
    42             'cursor':'pointer',
    43             'tolerance': 'pointer',
    44             'items':'.gsf\\:template',
     90    $('.gsf_choose-metadata').sortable({
     91            'cursor':'pointer',
     92            'tolerance': 'pointer',
     93            'items':'.gsf_metadata',
    4594            'placeholder':'placeholder',
    46             //'nested':'div'
     95            'connectWith':'.gsf_choose-metadata'
     96            //'nested':'.gsf:metadata'
    4797    });
    4898   
    49     $('.gsf\\:template').sortable({
    50             'cursor':'pointer',
    51             'tolerance': 'pointer',
    52             'items':'.table, .gsf\\:choose-metadata, .gsf\\:metadata',
    53             'placeholder':'placeholder'
    54             //'nested':'.gsf:metadata'
    55     });
    56 
    57     $('.table').sortable({
    58             'cursor':'pointer',
    59             'tolerance': 'pointer',
    60             'items':'.leaf .gsf\\:choose-metadata, .gsf\\:link, .gsf\\:switch',
    61             'placeholder':'placeholder'
    62             //'nested':'.gsf:metadata'
    63     });
    64  
    65     $('.gsf\\:choose-metadata').sortable({
    66             'cursor':'pointer',
    67             'tolerance': 'pointer',
    68             'items':'.gsf\\:metadata',
    69             'placeholder':'placeholder',
    70             'connectWith':'.gsf\\:choose-metadata'
    71             //'nested':'.gsf:metadata'
    72     });
    73    
    74     $('.gsf\\:link').sortable({
    75             'cursor':'pointer',
    76             'tolerance': 'pointer',
    77             'items':'.gsf\\:icon',
    78             'placeholder':'placeholder'
    79             //'nested':'.gsf:metadata'
    80     });
    81 
    82     $('.gsf\\:switch').sortable({
    83             'cursor':'pointer',
    84             'tolerance': 'pointer',
    85             'items':'.gsf\\:metadata, .gsf\\:when, .gsf\\otherwise',
    86             'placeholder':'placeholder'
    87             //'nested':'.gsf:metadata'
    88     });
    89 
    90     $('.gsf\\:when').sortable({
     99    $('.gsf_link').sortable({
     100            'cursor':'pointer',
     101            'tolerance': 'pointer',
     102            'items':'.gsf_icon',
     103            'placeholder':'placeholder'
     104            //'nested':'.gsf:metadata'
     105    });
     106
     107    $('.gsf_switch').sortable({
     108            'cursor':'pointer',
     109            'tolerance': 'pointer',
     110            'items':'.gsf_metadata, .gsf_when, .gsf_otherwise',
     111            'placeholder':'placeholder'
     112            //'nested':'.gsf:metadata'
     113    });
     114
     115    $('.gsf_when').sortable({
    91116            'cursor':'pointer',
    92117            'tolerance': 'pointer',
     
    96121    });
    97122
    98     $('.gsf\\:otherwise').sortable({
     123    $('.gsf_otherwise').sortable({
    99124            'cursor':'pointer',
    100125            'tolerance': 'pointer',
     
    104129    });
    105130
    106     /*
    107     $('div.blockWrapper').sortable(
    108         {
    109             accept: 'block',
    110             helperclass: 'sortHelper',
    111             activeclass :   'sortableactive',
    112             hoverclass :    'sortablehover',
    113 
    114             // Restricts sort start click to the specified element.
    115             handle: 'div.header',
    116 
    117             // This is the way the reordering behaves during drag. Possible values: 'intersect', 'pointer'. In some setups, 'pointer' is more natural.
    118             // * intersect: draggable overlaps the droppable at least 50%
    119             // * pointer: mouse pointer overlaps the droppable
    120             tolerance: 'pointer',
    121             //containment: 'parent',
    122             nested: 'div',
    123             onChange : function(ser)
    124             {
    125             },
    126             onStart : function()
    127             {
    128                 $.iAutoscroller.start(this, document.getElementsByTagName('body'));
    129             },
    130             onStop : function()
    131             {
    132                 $.iAutoscroller.stop();
    133             }
    134         }
    135     );
    136     */
     131    //$(".resizable").resizable({containment: 'parent', alsoResize:'parent'});
     132
     133    $('.tr').equalHeights();
     134
     135    $(".td").resizable({
     136                alsoResize: 'parent',
     137                //containment: 'parent',
     138                handles: 'e,s',
     139                stop: function(event, ui) {
     140                        $(this).parent().parent().equalHeights();
     141                }, });
     142
    137143
    138144    $(".block").mouseover(function()
     
    175181};
    176182
    177 
     183/*--------------------------------------------------------------------
     184 * JQuery Plugin: "EqualHeights"
     185 * by:  Scott Jehl, Todd Parker, Maggie Costello Wachs (http://www.filamentgroup.com)
     186 *
     187 * Copyright (c) 2008 Filament Group
     188 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
     189 *
     190 * Description: Compares the heights or widths of the top-level children of a provided element
     191        and sets their min-height to the tallest height (or width to widest width). Sets in em units
     192        by default if pxToEm() method is available.
     193 * Dependencies: jQuery library, pxToEm method  (article:
     194        http://www.filamentgroup.com/lab/retaining_scalable_interfaces_with_pixel_to_em_conversion/)                             
     195 * Usage Example: $(element).equalHeights();
     196        Optional: to set min-height in px, pass a true argument: $(element).equalHeights(true);
     197 * Version: 2.0, 08.01.2008
     198--------------------------------------------------------------------*/
     199
     200// Modified to get children of children ie. tr -> td -> div
     201
     202$.fn.equalHeights = function(px) {
     203    console.log("EQUAL HEIGHTS");
     204    $(this).each(function(){
     205        var currentTallest = 0;
     206        console.log($(this).children());
     207        console.log($(this).children().children());
     208        //$(this).children().children().each(function(i){
     209        //    console.log($(this));
     210        //    console.log("THIS HEIGHT="+$(this).height()+ " CURRENT TALLEST="+ currentTallest);
     211            //if ($(this).height() > currentTallest) { currentTallest = $(this).height(); }
     212            //if ($(this).height() > currentTallest) { currentTallest = $(this).height(); }
     213        //});
     214        //if (!px || !Number.prototype.pxToEm) currentTallest = currentTallest.pxToEm(); //use ems unless px is specified
     215        // for ie6, set height since min-height isn't supported
     216        //if ($.browser.msie && $.browser.version == 6.0) { $(this).children().children().css({'height': $(this).currentTallest}); }
     217        $(this).children().children().css({'height': $(this).height()}); //currentTallest});
     218    });
     219    return this;
     220};
     221
  • main/trunk/greenstone3/web/interfaces/oran/transform/layouts/main.xsl

    r22516 r22569  
    3131                <title><xsl:call-template name="pageTitle"/> :: <xsl:call-template name="siteName"/></title>
    3232                <link rel="stylesheet" href="interfaces/{$interface_name}/style/core.css" type="text/css"/>
    33                 <script type="text/javascript" src="interfaces/oran/js/jquery.js"><xsl:text> </xsl:text></script>
     33                <!-- <script type="text/javascript" src="interfaces/oran/js/jquery.js"><xsl:text> </xsl:text></script> -->
     34                <script type="text/javascript" src="interfaces/oran/js/jquery-1.4.2.min.js"><xsl:text> </xsl:text></script>
     35                <script type="text/javascript" src="interfaces/oran/js/jquery-ui-1.8.2.custom.min.js"><xsl:text> </xsl:text></script>
    3436                <!-- <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"><xsl:text> </xsl:text></script> -->
    3537                <!-- <script type="text/javascript" src="interfaces/oran/js/jquery-ui-1.8rc1/jquery-1.4.1.js"><xsl:text> </xsl:text></script> -->
     
    121123    <!-- <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"><xsl:text> </xsl:text></script> -->
    122124    <!-- <script type="text/javascript" src="/interface/interface.js"><xsl:text> </xsl:text></script> -->
    123     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"><xsl:text> </xsl:text></script>
     125    <!-- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"><xsl:text> </xsl:text></script> -->
    124126    <!-- <script language="JavaScript" src="http://stats.byspirit.ro/track.js" type="text/javascript"><xsl:text> </xsl:text></script> -->
    125127
    126128    <!-- <script type="text/javascript" src="interfaces/oran/js/interface/interface.js"><xsl:text> </xsl:text></script> -->
    127     <script type="text/javascript" src="interfaces/oran/js/ui.nestedSortable.js"><xsl:text> </xsl:text></script>
     129    <!-- <script type="text/javascript" src="interfaces/oran/js/ui.nestedSortable.js"><xsl:text> </xsl:text></script> -->
    128130    <!-- <script type="text/javascript" src="interfaces/oran/js/inestedsortable.js"> <xsl:text> </xsl:text></script> -->
    129131    <script type="text/javascript" src="interfaces/oran/js/gui_div.js"><xsl:text> </xsl:text></script>
     
    148150            height:20px;
    149151        }
     152
     153        .resizable { width: 150px; height: 150px; padding: 0.5em; }
     154
     155        <!-- .gsf_metadata { border: solid 2px #0000BB; background-color: #440077; } -->
     156
     157        <!-- .gsf_choose-metadata { border: solid 1px #000000; background-color: #223344; } -->
    150158    </style>
    151159
    152     <table width="80%">
     160    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/base/jquery-ui.css"/>
     161
     162
     163    <table width="100%" border="1">
    153164
    154165    <td width="60%">
     
    164175    </td>   
    165176
     177
    166178    <td width="40%" valign="top">
    167     <div class="gsf:metadata block leaf" title="gsf:metadata" id="gsf:metadata-{generate-id()}">
    168             <!--<div class="header">-->
    169                 METADATA
    170             <!--</div>-->
    171             <!--<div class="content">-->
    172                 <xsl:call-template name="meta-to-combo">
    173                     <xsl:with-param name="metadataSets" select="//metadataSetList"/>
    174                     <xsl:with-param name="current" select="ex.Title"/>
    175                 </xsl:call-template>
    176                 <!-- <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a> -->
    177             <!--</div>-->
    178         </div>
     179        <h2> Elements to add </h2>
     180        <div class="elementType css_gsf_template" title="gsf:metadata">NEW GSF:TEMPLATE</div>
     181        <div class="elementType css_gsf_choose-metadata" title="gsf:metadata">NEW GSF:CHOOSE-METADATA</div>
     182        <div class="elementType css_gsf_metadata" title="gsf:metadata">NEW GSF:METADATA</div>
     183        <br/>
     184        <div class="elementType css_table" title="gsf:metadata">NEW TABLE</div>
     185        <div class="elementType css_tr" title="gsf:metadata">NEW TABLE ROW</div>
     186        <div class="elementType css_td" title="gsf:metadata">NEW TABLE COLUMN</div>
     187
    179188    </td>
    180189    </table>
  • main/trunk/greenstone3/web/interfaces/oran/transform/layouts/xml-to-gui.xsl

    r22516 r22569  
    2020<xsl:stylesheet version="1.0"
    2121    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    22     xmlns:gsf="http://www.greenstone.org/greenstone3/schema/ConfigFormat">
     22    xmlns:gsf="http://www.greenstone.org/greenstone3/schema/ConfigFormat"
     23    xmlns:exsl="http://exslt.org/common"
     24    extension-element-prefixes="exsl" >   
    2325
    2426    <xsl:output omit-xml-declaration="yes"/>
     
    4446        </xsl:apply-templates>
    4547    </xsl:template>
    46 
    47    
     48    <!-- **************************************************************************** -->
     49
    4850    <!-- **************************************************************************** -->
    4951    <!-- COMBO BOX CREATION                                                           -->
     
    106108    <!-- **************************************************************************** -->
    107109
    108 
    109110    <!-- **************************************************************************** -->
    110111    <!-- GSF STATEMENTS                                                               -->
     
    116117        <xsl:param name="depth"/>
    117118        <xsl:param name="metadataSets"/>
    118        
    119         <div class="gsf:choose-metadata block" title="gsf:choose-metadata" id="gsf:choose-metadata-{generate-id()}">
    120             <!-- <div class="header"> -->
     119
     120        <div class="gsf_choose-metadata css_gsf_choose-metadata block" title="gsf:choose-metadata">
    121121                CHOOSE <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    122             <!--</div>-->
    123             <!--<div class="content">-->
    124122                <xsl:apply-templates mode="xml-to-gui">
    125123                    <xsl:with-param name="depth" select="$depth"/>
    126124                    <xsl:with-param name="metadataSets" select="$metadataSets"/>
    127125                </xsl:apply-templates>
    128             <!--</div>-->
    129             <!--<div class="footer">-->
    130126                END CHOOSE
    131             <!--</div>-->
    132         </div>   
     127        </div>   
    133128    </xsl:template>
    134129
     
    139134        <xsl:param name="metadataSets"/>
    140135
    141         <div class="gsf:metadata block leaf" title="gsf:metadata" id="gsf:metadata-{generate-id()}">
    142             <!--<div class="header">-->
    143                 METADATA
    144             <!--</div>-->
    145             <!--<div class="content">-->
    146                 <xsl:call-template name="meta-to-combo">
    147                     <xsl:with-param name="metadataSets" select="$metadataSets"/>
    148                     <xsl:with-param name="current" select="@name"/>
    149                 </xsl:call-template>
    150                 <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    151             <!--</div>-->
    152         </div>
     136        <xsl:variable name="one">
     137        <div class="gsf_metadata css_gsf_metadata block leaf" title="gsf:metadata">METADATA <xsl:call-template name="meta-to-combo">
     138                        <xsl:with-param name="metadataSets" select="$metadataSets"/>
     139                        <xsl:with-param name="current" select="@name"/>
     140                     </xsl:call-template> <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
     141        </div>
     142        </xsl:variable>
     143
     144     
     145        <xsl:variable name="meta">
     146        <xsl:call-template name="xml-to-string">
     147            <xsl:with-param name="node-set" select="exsl:node-set($one)"/>
     148        </xsl:call-template>
     149        </xsl:variable>
     150
     151        <xsl:copy-of select="$one"/>
     152
     153        <br/>
     154        <script type="text/javascript">
     155            gsf_metadata_element = <xsl:text disable-output-escaping="yes">'</xsl:text><xsl:copy-of select="$one" disable-output-escaping="yes"/><xsl:text disable-output-escaping="yes">';</xsl:text>
     156
     157        </script>
     158
    153159    </xsl:template>
    154160
     
    158164        <xsl:param name="depth"/>
    159165        <xsl:param name="metadataSets"/>
    160        
    161         <div class="gsf:link block" title="gsf:link" id="gsf:link-{generate-id()}">
     166
     167        <div class="gsf_link css_gsf_link block" title="gsf:link">
    162168                LINK[type=
    163169                <select>
     
    200206        <xsl:param name="metadataSets"/>
    201207
    202         <div class="gsf:template block" title="gsf:template" id="gsf:template-{generate-id()}">
     208            <!-- CHILD = <xsl:value-of select="child[1]/@name"/> -->
     209            <!-- CHILD = <xsl:value-of select="child::*[name()][1]"/> -->
     210
     211
     212            <!-- <xsl:for-each select="child::*"> -->
     213            <!-- <xsl:value-of select="name()"/> -->
     214            <!-- </xsl:for-each> -->
     215
     216
     217        <div class="gsf_template block" title="gsf:template">
    203218                TEMPLATE[match=<xsl:value-of select="@match"/>]<a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
     219                <table border="1">
     220                <tr class="tr">
    204221                <xsl:apply-templates mode="xml-to-gui">
    205222                    <xsl:with-param name="depth" select="$depth"/>
    206223                    <xsl:with-param name="metadataSets" select="$metadataSets"/>
    207224                </xsl:apply-templates>
     225                </tr>
     226                </table>
    208227                END TEMPLATE <br/>
    209228        </div>
     
    215234        <xsl:param name="metadataSets"/>
    216235
    217         <div class="gsf:switch block" title="gsf:switch" id="gsf:switch-{generate-id()}">
     236        <div class="gsf_switch block" title="gsf:switch">
    218237                SWITCH <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    219238                <xsl:apply-templates mode="xml-to-gui">
     
    231250        <xsl:param name="metadataSets"/>
    232251
    233         <div class="gsf:when block" title="gsf:when" id="gsf:when-{generate-id()}">
     252        <div class="gsf_when block" title="gsf:when">
    234253                WHEN[test=<xsl:value-of select="@test"/>] <br/><a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    235254                <xsl:apply-templates mode="xml-to-gui">
     
    247266        <xsl:param name="metadataSets"/>
    248267
    249         <div class="gsf:otherwise block" title="gsf:otherwise" id="gsf:otherwise-{generate-id()}">
     268        <div class="gsf_otherwise block" title="gsf:otherwise">
    250269                OTHERWISE <br/><a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    251270                <xsl:apply-templates mode="xml-to-gui">
     
    263282        <xsl:param name="metadataSets"/>
    264283
    265         <div class="gsf:icon block leaf" title="gsf:icon" id="gsf:icon-{generate-id()}">
     284        <div class="gsf_icon block leaf" title="gsf:icon">
    266285                ICON[type=
    267286                <select>
     
    293312        <xsl:param name="metadataSets"/>
    294313
    295         <div class="block" title="gsf:default" id="gsf:default-{generate-id()}">
    296             <div class="header">
     314        <div class="block" title="gsf:default">
    297315                DEFAULT <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    298             </div>
    299             <div class="content">
    300316                <xsl:apply-templates mode="xml-to-gui">
    301317                    <xsl:with-param name="depth" select="$depth"/>
    302318                    <xsl:with-param name="metadataSets" select="$metadataSets"/>
    303319                </xsl:apply-templates>
    304             </div>
    305             <div class="footer">
    306320                END DEFAULT
    307             </div>
    308321        </div>
    309322    </xsl:template>
     
    315328        <xsl:param name="metadataSets"/>
    316329       
    317         <div class="block leaf" title="gsf:text" id="gsf:text-{generate-id()}">
     330        <div class="block leaf" title="gsf:text">
    318331                TEXT <a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
    319332                <xsl:variable name="rawtext"><xsl:value-of select="."/></xsl:variable>
     
    327340        <xsl:param name="depth"/>
    328341        <xsl:param name="metadataSets"/>
    329 
    330         <div class="table block" title="gsf:table" id="gsf:table-{generate-id()}">
    331                 <xsl:text>&lt;td</xsl:text>valign=<xsl:value-of select="@valign"/><xsl:text>&gt;</xsl:text><a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a>
     342       
     343
     344        <!-- <td class="td block resizable" title="td" valign="{@valign}" style='overflow: hidden;'> -->
     345        <td valign="{@valign}" title="td">
     346            <div class="td block" title="td-div">
     347            <!-- <xsl:text>&lt;td</xsl:text>valign=<xsl:value-of select="@valign"/><xsl:text>&gt;</xsl:text><a href="#" class="minmax">[-]</a><a href="#" class="remove">[x]</a> -->
    332348                <xsl:apply-templates mode="xml-to-gui">
    333349                    <xsl:with-param name="depth" select="$depth"/>
    334350                    <xsl:with-param name="metadataSets" select="$metadataSets"/>
    335351                </xsl:apply-templates>
    336                 <xsl:text>&lt;/td&gt;</xsl:text><br/><br/>
    337         </div>
     352                <!-- <xsl:text>&lt;/td&gt;</xsl:text><br/><br/> -->
     353            </div>
     354        </td>
    338355    </xsl:template>
    339356
Note: See TracChangeset for help on using the changeset viewer.