/* - plone.kss - */ /* */ /* The above trick to let this file not be cached does not work, unless this file is renamed to have a kss.dtml extension. */ /* General stylesheet for Plone AJAX */ /* Add class to body to allow conditional styling when kss is available */ body:load { action-client: addClass; addClass-value: kssActive; } ul.contentViews li a:plone-formProtectionChecked { action-server: replaceContentRegion; replaceContentRegion-tabid: nodeAttr(id, true); replaceContentRegion-url: nodeAttr(href); replaceContentRegion-error: plone-followLink; action-client: plone-removeLockProtection; } /* Load the kupu editor. The editor is also loaded from the page, so we give the initial=false, otherwise that should be left out if we do that too. */ iframe.kupu-editor-iframe:load { action-client: plone-initKupu; } #content:load { evt-load-initial: false; action-client: initializeCollapsible; } /* This loads the external links markers each time an element marked inlineEditable is reloaded (needed to make it work with inlineEditable). However, this isn't the best, client-performance wise. TODO: Find a better way to "bind just once" or just bind the effectively reloaded links, and not rebind everything */ #content .inlineEditable:load { evt-load-initial: false; action-client: bindExternalLinks; } /* Portlet refreshing. The refreshing portlets must have the kssPortletRefresh class for selection. You can also select per portlet, however this shows how to handle them all in one rule. */ /* dl.kssPortletRefresh:timeout { evt-timeout-delay: 60000; action-server: refreshPortlet; refreshPortlet-portlethash: kssAttr("portlethash", True); refreshPortlet-name: nodeAttr(id); } */ /* Deferred portlets */ div.portlet-deferred:load { action-server: refreshPortlet; refreshPortlet-portlethash: kssAttr(portlethash, True); } /* Content Menu Sections: General */ #contentActionMenus:load { evt-load-initial: false; action-client: bindActionMenus; } /* Content Menu Sections: Change View */ /* #plone-contentmenu-display dd.actionMenuContent a:click { evt-click-preventdefault: True; action-server: changeViewTemplate; evt-click-allowbubbling: True; changeViewTemplate-url: nodeAttr(href); } */ /* This rule is needed for keeping the default behavior for menu elements that */ /* are supposed to send user to another page */ #contextSetDefaultPage:click { evt-click-preventdefault: False; action-cancel: changeViewTemplate; } #folderChangeDefaultPage:click { evt-click-preventdefault: False; action-cancel: changeViewTemplate; } /* Content Menu Sections: Cut and Paste */ /* Needed allowbubbling, because the menu-item is inside a span an the event selector is on the enclosing a-tag */ /* a.actionicon-object_buttons-cut:click { evt-click-preventdefault: True; evt-click-allowbubbling: True; action-server: cutObject; } a.actionicon-object_buttons-copy:click { evt-click-preventdefault: True; evt-click-allowbubbling: True; action-server: copyObject; } */ /* Content Menu Sections: Workflow State */ #plone-contentmenu-workflow dd.actionMenuContent a:click { evt-click-preventdefault: True; evt-click-allowbubbling: True; action-server: changeWorkflowState; changeWorkflowState-url: nodeAttr(href); } #plone-contentmenu-workflow dd.actionMenuContent a.kssIgnore:click { evt-click-preventdefault: False; action-cancel: changeWorkflowState; } /* In-place calendar changing */ a.kssCalendarChange:click { evt-click-preventdefault: true; action-server: refreshCalendar; refreshCalendar-portlethash: kssAttr(portlethash, True); refreshCalendar-year: kssAttr(year); refreshCalendar-month: kssAttr(month); } /* Spinner */ /* effects do not seem to like animated gifs #kss-spinner:spinneron { evt-spinneron-laziness: 1000; action-client: effect; effect-type: appear; } #kss-spinner:spinneroff { action-client: effect; effect-type: fade; } */ #kss-spinner:spinneron { action-client: setStyle; setStyle-name: display; setStyle-value: block; } #kss-spinner:spinneroff { action-client: setStyle; setStyle-name: display; setStyle-value: none; } /* ** Form tabs */ form.enableFormTabbing:load { evt-load-initial: false; action-client: plone-initFormTabs; } form.enableUnloadProtection:load { evt-load-initial: false; action-client: plone-initFormProtection; } form.enableUnlockProtection:load { evt-load-initial: false; action-client: plone-initLockingProtection; } /* disable lock refreshing when an inlineEditable field is reloaded in view mode via AJAX (e.g. when Cancel is pressed) */ div.inlineEditable:load { evt-load-initial: false; action-client: plone-removeLockProtection; } /* Selector for the sharing page in plone.app.workflow. the search_term parameters, puts the needed info into the request */ #sharing-save-button:click { evt-click-preventdefault: true; action-server: updateSharingInfo; updateSharingInfo-kssSubmitForm: currentForm(); updateSharingInfo-error: plone-submitCurrentForm; } #sharing-user-group-search:keyup { evt-keyup-preventdefault: true; evt-keyup-keycodes: 13; action-server: updateSharingInfo; updateSharingInfo-kssSubmitForm: currentForm(); } /* kupu stuff */ #kupu-save-button:load { action-client: setStyle; setStyle-name: display; setStyle-value: inline; } button.kupu-save:click { action-server: savekupu; savekupu-text: currentFormVarFromKssAttr("atfieldname", true); savekupu-fieldname: kssAttr("atfieldname", true); } /* Folder contents stuff */ body:load { action-client: plone-initShiftDetection; } #folderlisting-main-table input[type="checkbox"]:change { action-client: plone-createCheckBoxSelection; plone-createCheckBoxSelection-group: 'table.listing input[type="checkbox"]'; } #folderlisting-main-table input[type="checkbox"]:change { action-client: toggleClass; toggleClass-kssSelector: parentnode("table.listing tbody tr"); toggleClass-classname: "selected"; } /* Generic setup which (made more specific by other rules) */ .update-selection:click, #listing-table .column:click { action-server: update_table url(kssAttr("serveraction", true)); evt-click-preventdefault: True; update_table-pagenumber: currentFormVar('pagenumber'); update_table-show_all: currentFormVar('show_all'); update_table-sort_on: currentFormVar('sort_on'); } #foldercontents-show-batched:click { update_table-show_all: "false"; } #foldercontents-show-all:click { update_table-show_all: "true"; update_table-pagenumber: "1"; } #foldercontents-title-column:click { update_table-sort_on: "sortable_title"; } #foldercontents-modified-column:click { update_table-sort_on: "modified"; } #foldercontents-status-column:click { update_table-sort_on: "review_state"; } #foldercontents-selectall:click { update_table-select: 'screen'; } #foldercontents-selectall-completebatch:click { update_table-select: 'all'; } #foldercontents-clearselection:click { update_table-select: 'none'; } #folderlisting-main-table:load { action-client: plone-initDragAndDrop; plone-initDragAndDrop-table: '#listing-table'; } #folderlisting-main-table:load { action-client: plone-initCheckBoxSelection; } /* kupu stuff */ #kupu-save-button:load { action-client: setStyle; setStyle-name: display; setStyle-value: inline; } div.kupu-save-message:timeout { evt-timeout-delay: 2000; evt-timeout-repeat: ''; action-client: deleteNode; } #portal-message:timeout { evt-timeout-delay: 2000; evt-timeout-repeat: ''; action-client: deleteNode; } /* check if the object if really locked before showing the icon */ /* an xmlhttprequest might have just been sent on the object to */ /* unlock just a few moment ago. So we need to be really sure */ /* that the object wasn't locked, to be sure, we do one more */ /* xmlhttprequest */ #lock-icon:load{ action-server: updateLockInfo; }