Changeset 1198

Show
Ignore:
Timestamp:
08/07/08 04:13:55
Author:
piv
Message:

added sorting functionality

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup.plonetabs.egg-info/PKG-INFO

    r1174 r1198  
    11Metadata-Version: 1.0 
    22Name: quintagroup.plonetabs 
    3 Version: 0.5dev-r1095 
     3Version: 0.5dev-r1193 
    44Summary: Quintagroup Plone Tabs 
    55Home-page: http://projects.quintagroup.com/products/wiki/qPloneTabs 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup.plonetabs.egg-info/SOURCES.txt

    r1174 r1198  
    1313quintagroup.plonetabs.egg-info/namespace_packages.txt 
    1414quintagroup.plonetabs.egg-info/not-zip-safe 
     15quintagroup.plonetabs.egg-info/paster_plugins.txt 
    1516quintagroup.plonetabs.egg-info/requires.txt 
    1617quintagroup.plonetabs.egg-info/top_level.txt 
     
    2526quintagroup/plonetabs/browser/interfaces.py 
    2627quintagroup/plonetabs/browser/kssactions.zcml 
    27 quintagroup/plonetabs/browser/manage.zcml 
    2828quintagroup/plonetabs/browser/plonetabs.py 
    2929quintagroup/plonetabs/browser/resources.zcml 
     
    3939quintagroup/plonetabs/browser/templates/autogenerated.pt 
    4040quintagroup/plonetabs/browser/templates/plonetabs.pt 
     41quintagroup/plonetabs/browser/templates/plonetabs_header_macro.pt 
    4142quintagroup/plonetabs/browser/templates/sections.pt 
    4243quintagroup/plonetabs/plugins/__init__.py 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml

    r1193 r1198  
    6767        /> 
    6868     
     69    <browser:page 
     70        for="plone.app.kss.interfaces.IPortalObject" 
     71        attribute="kss_orderActions" 
     72        class=".plonetabs.PloneTabsControlPanel" 
     73        name="plonetabs-orderActions" 
     74        permission="cmf.ManagePortal" 
     75        /> 
     76     
    6977</configure> 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py

    r1193 r1198  
    1 import copy, sys 
     1import copy 
     2import sys 
     3import urllib 
     4 
    25from Acquisition import aq_inner 
    36from OFS.CopySupport import CopyError 
     
    3639            "available_expr": "condition", 
    3740            "visible": "visible"} 
     41 
     42bad_id = re.compile(r'[^a-zA-Z0-9-_~,.$\(\)# @]').search 
    3843 
    3944class PloneTabsControlPanel(PloneKSSView): 
     
    539544    @kssaction 
    540545    def kss_editAction(self): 
    541         """ KSS Method to update action """ 
     546        """ Update action's properties """ 
    542547        id, cat_name, data = self.parseEditForm(self.request.form) 
    543548         
     
    575580            # send error message 
    576581            kssplone.issuePortalMessage(_(u"Please correct the indicated errors."), msgtype="error") 
     582     
     583    @kssaction 
     584    def kss_orderActions(self): 
     585        """ Update actions order in the given category """ 
     586        form = self.request.form 
     587        cat_name = form['cat_name'] 
     588        category = self.getActionCategory(cat_name) 
     589         
     590        # decode URI components and collect ids from request 
     591        components = urllib.unquote(form['actions']).split('&') 
     592        if self.sufix == '': 
     593            ids = [component[len(self.prefix):] for component in components] 
     594        else: 
     595            ids = [component[len(self.prefix):-len(self.sufix)] for component in components] 
     596         
     597        # do actual sorting 
     598        category.moveObjectsByDelta(ids, -len(category.objectIds())) 
     599         
     600        # update client 
     601        self.updatePage(cat_name) 
    577602     
    578603    # 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss

    r1193 r1198  
    1616} 
    1717 
     18 
     19/* Add allowMultiSubmit class to submit buttons 
     20   to avoid those annoying warnings about form 'multisubmittion' */ 
    1821.add-controls input:load { 
    1922    action-client: addClass; 
     
    2124} 
    2225 
    23 .edit-controls input:load { 
     26/*.edit-controls input:load { 
    2427    action-client: addClass; 
    2528    addClass-value: allowMultiSubmit; 
    26 } 
     29}*/ 
    2730 
    2831/* Remember portal actions category */ 
     
    174177} 
    175178 
     179/* Reordering rules */ 
     180#tabslist:load { 
     181    action-client: plonetabs-createSortable; 
     182    plonetabs-createSortable-handle: 'drag-handle'; 
     183} 
    176184 
    177  
     185#tabslist li:load { 
     186    action-client: plonetabs-updateSortable; 
     187    plonetabs-updateSortable-handle: 'drag-handle'; 
     188
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/configure.zcml

    r1194 r1198  
    1212        command_factory="selector" 
    1313        jsfile="plugin.js" 
    14         params_mandatory="" 
    1514        params_optional="protocol host pathname search searchparams searchvalues hash" 
    1615        /> 
     
    2019        command_factory="selector" 
    2120        jsfile="plugin.js" 
    22         params_mandatory="" 
    2321        params_optional="collapsed expanded collapse" 
    2422        /> 
     
    2725        name="plonetabs-handleServerError" 
    2826        jsfile="plugin.js" 
    29         params_mandatory="" 
    3027        params_optional="message" 
    3128        /> 
     
    3532        command_factory="selector" 
    3633        jsfile="plugin.js" 
    37         params_mandatory="" 
    38         params_optional="" 
    3934        /> 
    4035     
     
    4439        jsfile="plugin.js" 
    4540        params_mandatory="target var_name" 
    46         params_optional="" 
    4741        /> 
    48  
     42     
     43    <kss:action 
     44        name="plonetabs-createSortable" 
     45        command_factory="selector" 
     46        jsfile="plugin.js" 
     47        /> 
     48     
     49    <kss:action 
     50        name="plonetabs-updateSortable" 
     51        command_factory="selector" 
     52        jsfile="plugin.js" 
     53        /> 
    4954     
    5055</configure> 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/plugin.js

    r1194 r1198  
    44/* KSS plugins for plonetabs */ 
    55 
    6 kukit.actionsGlobalRegistry.register("plonetabs-redirectTo", function(oper) { 
    7 ;;; oper.componentName = "[plonetabs-redirectTo] action"
     6kukit.actionsGlobalRegistry.register('plonetabs-redirectTo', function(oper) { 
     7;;; oper.componentName = '[plonetabs-redirectTo] action'
    88    var wl = window.location; 
    9     oper.evaluateParameters([], {"protocol"     : wl.protocol, 
    10                                  "host"         : wl.host, 
    11                                  "pathname"     : wl.pathname, 
    12                                  "search"       : wl.search, 
    13                                  "searchparams" : ""
    14                                  "searchvalues" : ""
    15                                  "hash"         : wl.hash}); 
     9    oper.evaluateParameters([], {'protocol'     : wl.protocol, 
     10                                 'host'         : wl.host, 
     11                                 'pathname'     : wl.pathname, 
     12                                 'search'       : wl.search, 
     13                                 'searchparams' : ''
     14                                 'searchvalues' : ''
     15                                 'hash'         : wl.hash}); 
    1616 
    1717    // normalize parameters 
    18     var protocol = oper.parms.protocol + (oper.parms.protocol[oper.parms.protocol.length - 1] == ":") ?  "" : ":"
     18    var protocol = oper.parms.protocol + (oper.parms.protocol[oper.parms.protocol.length - 1] == ':') ?  '' : ':'
    1919    var host = oper.parms.host; 
    2020    var pathname = oper.parms.pathname; 
    2121    if ((params = oper.parms.searchparams) && (values = oper.parms.searchvalues)) { 
    22         search = "?"
    23         params = params.split(","); 
    24         values = values.split(","); 
     22        search = '?'
     23        params = params.split(','); 
     24        values = values.split(','); 
    2525        for (var i = 0; i < params.length; i++) { 
    2626            search += params[i] + '=' + values[i] + '&'; 
     
    2929    } else { 
    3030        search = oper.parms.search; 
    31         search = (search && search.substr(0, 1) == "?") ? search : (search ? "?" + search : ""); 
     31        search = (search && search.substr(0, 1) == '?') ? search : (search ? '?' + search : ''); 
    3232    } 
    33     var hash = (oper.parms.hash.length > 1) ? ((oper.parms.hash.substr(0, 1) == "#" ? "" : "#") + oper.parms.hash) : ""
     33    var hash = (oper.parms.hash.length > 1) ? ((oper.parms.hash.substr(0, 1) == '#' ? '' : '#') + oper.parms.hash) : ''
    3434 
    35     url = protocol + "//" + host + pathname + search + hash; 
     35    url = protocol + '//' + host + pathname + search + hash; 
    3636    window.location.replace(url); 
    3737 
    3838}); 
    3939 
    40 kukit.commandsGlobalRegistry.registerFromAction("plonetabs-redirectTo", kukit.cr.makeSelectorCommand); 
     40kukit.commandsGlobalRegistry.registerFromAction('plonetabs-redirectTo', kukit.cr.makeSelectorCommand); 
    4141 
    4242 
    43 kukit.actionsGlobalRegistry.register("plonetabs-toggleCollapsible", function(oper) { 
    44 ;;; oper.componentName = "[plonetabs-toggleCollapsible] action"
    45     oper.evaluateParameters([], {"collapsed" : "collapsedBlock"
    46                                  "expanded" : "expandedBlock"
    47                                  "collapse": "none"}); 
     43kukit.actionsGlobalRegistry.register('plonetabs-toggleCollapsible', function(oper) { 
     44;;; oper.componentName = '[plonetabs-toggleCollapsible] action'
     45    oper.evaluateParameters([], {'collapsed' : 'collapsedBlock'
     46                                 'expanded' : 'expandedBlock'
     47                                 'collapse': 'none'}); 
    4848 
    4949    var node = oper.node.parentNode;  // collapsible section 
    5050 
    51     if (oper.parms.collapse != "none") { 
    52         if (oper.parms.collapse == "true") { 
     51    if (oper.parms.collapse != 'none') { 
     52        if (oper.parms.collapse == 'true') { 
    5353            removeClassName(node, oper.parms.expanded); 
    5454            addClassName(node, oper.parms.collapsed); 
     
    6969}); 
    7070 
    71 kukit.commandsGlobalRegistry.registerFromAction("plonetabs-toggleCollapsible", kukit.cr.makeSelectorCommand); 
     71kukit.commandsGlobalRegistry.registerFromAction('plonetabs-toggleCollapsible', kukit.cr.makeSelectorCommand); 
    7272 
    7373 
    74 kukit.actionsGlobalRegistry.register("plonetabs-resetForm", function(oper) { 
    75 ;;; oper.componentName = "[plonetabs-resetForm] action"
     74kukit.actionsGlobalRegistry.register('plonetabs-resetForm', function(oper) { 
     75;;; oper.componentName = '[plonetabs-resetForm] action'
    7676    oper.evaluateParameters([], {}); 
    7777 
    78     if (typeof(oper.node.reset) == "function") { 
     78    if (typeof(oper.node.reset) == 'function') { 
    7979        oper.node.reset(); 
    8080    } else { 
    81         kukit.logWarning("plonetabs-resetForm: reset could only be executed on form element"); 
     81        kukit.logWarning('plonetabs-resetForm: reset could only be executed on form element'); 
    8282    } 
    8383 
    8484}); 
    8585 
    86 kukit.commandsGlobalRegistry.registerFromAction("plonetabs-resetForm", kukit.cr.makeSelectorCommand); 
     86kukit.commandsGlobalRegistry.registerFromAction('plonetabs-resetForm', kukit.cr.makeSelectorCommand); 
    8787 
    8888 
    89 kukit.actionsGlobalRegistry.register("plonetabs-handleServerError", function(oper) { 
    90     oper.componentName = "[plonetabs-handleServerError] action"
    91     oper.evaluateParameters([], {"message" : kukit.E}); 
     89kukit.actionsGlobalRegistry.register('plonetabs-handleServerError', function(oper) { 
     90    oper.componentName = '[plonetabs-handleServerError] action'
     91    oper.evaluateParameters([], {'message' : kukit.E}); 
    9292    alert(oper.parms.message); 
    9393}); 
     
    9696var PLONETABS_ADD_PATTERN = new RegExp('[^a-zA-Z0-9-_~,.\\$\\(\\)# ]','g'); 
    9797 
    98 kukit.actionsGlobalRegistry.register("plonetabs-generateId", function(oper) { 
    99     oper.componentName = "[plonetabs-generateId] action"
    100     oper.evaluateParameters(["target", "var_name"], {}); 
     98kukit.actionsGlobalRegistry.register('plonetabs-generateId', function(oper) { 
     99    oper.componentName = '[plonetabs-generateId] action'
     100    oper.evaluateParameters(['target', 'var_name'], {}); 
    101101 
    102102    var source = oper.node; 
    103103    var var_name = oper.parms.var_name; 
    104     var initialValue = typeof(kukit.engine.stateVariables[var_name]) != "undefined" ? kukit.engine.stateVariables[var_name] : ''; 
     104    var initialValue = typeof(kukit.engine.stateVariables[var_name]) != 'undefined' ? kukit.engine.stateVariables[var_name] : ''; 
    105105    var target = document.getElementById(oper.parms.target); 
    106106 
    107107    if (target == null) { 
    108         kukit.logWarning("plonetabs-generateId: target element ('" + oper.parms.target + "') not found"); 
     108        kukit.logWarning('plonetabs-generateId: target element ("' + oper.parms.target + '") not found'); 
    109109        return ; 
    110110    } 
     
    116116 
    117117}); 
     118 
     119function plonetabs_notifySortableUpdate(element, oper) { 
     120    var draggables = element.getElementsByTagName('LI'); 
     121    var ids = []; 
     122    for (var i = 0, o; o = draggables[i]; i++) { 
     123        ids.push(o.id); 
     124    } 
     125    oper.parms = {'actions': ids.join('&'), 'cat_name': kukit.engine.stateVariables['plonetabs-category']}; 
     126    oper.executeServerAction('plonetabs-orderActions'); 
     127} 
     128 
     129kukit.actionsGlobalRegistry.register('plonetabs-createSortable', function(oper) { 
     130    oper.componentName = '[plonetabs-createSortable] action'; 
     131    oper.evaluateParameters([], {}, '', true); 
     132    var parms = oper.clone().parms; 
     133 
     134    var new_oper = oper.clone(); 
     135    parms['onUpdate'] = function(element){plonetabs_notifySortableUpdate(element, new_oper);}; 
     136    Sortable.create(oper.node, parms); 
     137}); 
     138 
     139kukit.actionsGlobalRegistry.register('plonetabs-updateSortable', function(oper) { 
     140    oper.componentName = '[plonetabs-updateSortable] action'; 
     141    oper.evaluateParameters([], {}, '', true); 
     142    var parms = oper.clone().parms; 
     143    var node = oper.node; 
     144    var sort_list = node.parentNode; 
     145    var options_ = Sortable.sortables[sort_list.id]; 
     146 
     147    if (typeof(options_) != 'undefined') { 
     148        // check whether node element isn't already registered as draggables 
     149        for (var i = 0, drag; drag = options_.draggables[i]; i++) { 
     150            if (node == drag.element) { 
     151                return false; 
     152            } 
     153        } 
     154        // destroy sortable list 
     155        Sortable.destroy(sort_list.id); 
     156    } 
     157 
     158    var new_oper = oper.clone(); 
     159    parms['onUpdate'] = function(element){plonetabs_notifySortableUpdate(element, new_oper);}; 
     160    Sortable.create(sort_list, parms); 
     161}); 
     162 
     163kukit.commandsGlobalRegistry.registerFromAction('plonetabs-updateSortable', kukit.cr.makeSelectorCommand); 
     164 
  • qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/jsregistry.xml

    r1194 r1198  
    11<?xml version="1.0"?> 
    22<object name="portal_javascripts" meta_type="JavaScripts Registry"> 
    3  <javascript cacheable="True" compression="safe" cookable="True" 
    4     enabled="True" expression="" id="++resource++prototype.js" inline="False" /> 
    5  <javascript cacheable="True" compression="safe" cookable="True" 
    6     enabled="True" expression="" id="++resource++effects.js" inline="False" /> 
    73 <javascript cacheable="True" compression="safe" cookable="True" enabled="True" 
    8     expression="" id="++resource++sa_dragdrop.js" inline="False" insert-after="++resource++effects.js" /> 
     4    expression="python:request['URL'].endswith('/@@plonetabs-controlpanel')" id="++resource++prototype.js" inline="False" insert-bottom="True" /> 
     5 <javascript cacheable="True" compression="safe" cookable="True" enabled="True" 
     6    expression="python:request['URL'].endswith('/@@plonetabs-controlpanel')" id="++resource++effects.js" inline="False" insert-after="++resource++prototype.js"/> 
     7 <javascript cacheable="True" compression="safe" cookable="True" enabled="True" 
     8    expression="python:request['URL'].endswith('/@@plonetabs-controlpanel')" id="++resource++sa_dragdrop.js" inline="False" insert-after="++resource++effects.js" /> 
    99 </object>