From 4195633c828a1e10ebdcf0dffeebaacc80ef72d7 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 10 Feb 2014 18:25:02 +0000 Subject: [PATCH] pass event as 1. parameter to click handlers to be able to call preventDefault() or stopPropagation() --- etemplate/js/et2_core_baseWidget.js | 22 ++++---- etemplate/js/et2_widget_vfs.js | 87 ++++++++++++++++------------- 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/etemplate/js/et2_core_baseWidget.js b/etemplate/js/et2_core_baseWidget.js index a022794c66..68d110d13e 100644 --- a/etemplate/js/et2_core_baseWidget.js +++ b/etemplate/js/et2_core_baseWidget.js @@ -22,10 +22,10 @@ * Class which manages the DOM node itself. The simpleWidget class is derrived * from et2_DOMWidget and implements the getDOMNode function. A setDOMNode * function is provided, which attatches the given node to the DOM if possible. - * + * * @augments et2_DOMWidget */ -var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, +var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, { attributes: { "statustext": { @@ -47,10 +47,10 @@ var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, "description": "JS code which is executed when the element is clicked." } }, - + /** * Constructor - * + * * @memberOf et2BaseWidget */ init: function() { @@ -202,7 +202,7 @@ var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, if (this.node) { $j(this.node).bind("click.et2_baseWidget", this, function(e) { - return e.data.click.call(e.data, this); + return e.data.click.call(e.data, e, this); }); if (typeof this.onclick == 'function') $j(this.node).addClass('et2_clickable'); } @@ -237,7 +237,7 @@ var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, /** * Click handler calling custom handler set via onclick attribute to this.onclick - * + * * @param _ev * @returns */ @@ -247,7 +247,7 @@ var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, // Make sure function gets a reference to the widget, splice it in as 2. argument if not var args = Array.prototype.slice.call(arguments); if(args.indexOf(this) == -1) args.splice(1, 0, this); - + return this.onclick.apply(this, args); } @@ -295,14 +295,14 @@ var et2_baseWidget = et2_DOMWidget.extend(et2_IAligned, /** * Simple container object - * + * * @augments et2_baseWidget */ var et2_container = et2_baseWidget.extend( { /** * Constructor - * + * * @memberOf et2_container */ init: function() { @@ -336,14 +336,14 @@ var et2_container = et2_baseWidget.extend( /** * Container object for not-yet supported widgets - * + * * @augments et2_baseWidget */ var et2_placeholder = et2_baseWidget.extend([et2_IDetachedDOM], { /** * Constructor - * + * * @memberOf et2_placeholder */ init: function() { diff --git a/etemplate/js/et2_widget_vfs.js b/etemplate/js/et2_widget_vfs.js index c1fd40a2ba..0d0926d6a7 100644 --- a/etemplate/js/et2_widget_vfs.js +++ b/etemplate/js/et2_widget_vfs.js @@ -22,10 +22,10 @@ /** * Class which implements the "vfs" XET-Tag - * + * * @augments et2_valueWidget */ -var et2_vfs = et2_valueWidget.extend([et2_IDetachedDOM], +var et2_vfs = et2_valueWidget.extend([et2_IDetachedDOM], { attributes: { "value": { @@ -41,7 +41,7 @@ var et2_vfs = et2_valueWidget.extend([et2_IDetachedDOM], /** * Constructor - * + * * @memberOf et2_vfs */ init: function() { @@ -112,11 +112,11 @@ var et2_vfs = et2_valueWidget.extend([et2_IDetachedDOM], .text(text + (i < path_parts.length-1 ? '/' : '')) //.attr('title', egw.decodePath(path)) .addClass("et2_clickable et2_link") - .click({data:data, egw: this.egw()}, function(e) { + .click({data:data, egw: this.egw()}, function(e) { if(!self.onclick) { e.data.egw.open(e.data.data, "file"); } - else if (self.click()) + else if (self.click(e)) { e.data.egw.open(e.data.data, "file"); } @@ -127,6 +127,8 @@ var et2_vfs = et2_valueWidget.extend([et2_IDetachedDOM], /** * Code for implementing et2_IDetachedDOM (data grid) + * + * @param {array} _attrs array of attribute-names to push further names onto */ getDetachedAttributes: function(_attrs) { @@ -154,14 +156,14 @@ et2_register_widget(et2_vfs, ["vfs"]); /** * vfs-name * filename automatically urlencoded on return (urldecoded on display to user) - * + * * @augments et2_textbox */ var et2_vfsName = et2_textbox.extend( { /** * Constructor - * + * * @memberOf et2_vfsName */ init: function() { @@ -185,14 +187,14 @@ et2_register_widget(et2_vfsName, ["vfs-name"]); /** * vfs-name * filename automatically urlencoded on return (urldecoded on display to user) - * + * * @augments et2_textbox_ro */ var et2_vfsName_ro = et2_textbox_ro.extend( { /** * Constructor - * + * * @memberOf et2_vfsName_ro */ init: function() { @@ -215,7 +217,7 @@ et2_register_widget(et2_vfsName_ro, ["vfs-name_ro"]); /** * vfs-mime: icon for mimetype of file, or thumbnail * incl. optional link overlay icon, if file is a symlink - * + * * Creates following structure * * @@ -223,12 +225,12 @@ et2_register_widget(et2_vfsName_ro, ["vfs-name_ro"]); * * * - * + * * span.overlayContainer is optional and only generated for symlinks - * + * * @augments et2_valueWidget */ -var et2_vfsMime = et2_valueWidget.extend([et2_IDetachedDOM], +var et2_vfsMime = et2_valueWidget.extend([et2_IDetachedDOM], { attributes: { "value": { @@ -247,7 +249,7 @@ var et2_vfsMime = et2_valueWidget.extend([et2_IDetachedDOM], /** * Constructor - * + * * @memberOf et2_vfsMime */ init: function() { @@ -283,7 +285,7 @@ var et2_vfsMime = et2_valueWidget.extend([et2_IDetachedDOM], { if (typeof this.overlayContainer == 'undefined') { - + this.overlayContainer = jQuery(document.createElement('span')).addClass('overlayContainer'); this.overlayContainer.append(jQuery(document.createElement('img')) .addClass('overlay').attr('src', this.egw().image('link', 'etemplate'))); @@ -299,6 +301,8 @@ var et2_vfsMime = et2_valueWidget.extend([et2_IDetachedDOM], /** * Implementation of "et2_IDetachedDOM" for fast viewing in gridview * Override to add needed attributes + * + * @param {array} _attrs array of attribute-names to push further names onto */ getDetachedAttributes: function(_attrs) { _attrs.push("value", "class"); @@ -324,18 +328,18 @@ et2_register_widget(et2_vfsMime, ["vfs-mime"]); /** * vfs-size * Human readable file sizes - * + * * @augments et2_description */ var et2_vfsSize = et2_description.extend({ attributes: { "value": { - "type": "integer", + "type": "integer" } }, /** * Constructor - * + * * @memberOf et2_vfsSize */ init: function() { @@ -382,7 +386,7 @@ et2_register_widget(et2_vfsSize, ["vfs-size"]); /** * vfs-mode: textual representation of permissions + extra bits - * + * * @augments et2_description */ var et2_vfsMode = et2_description.extend({ @@ -396,7 +400,7 @@ var et2_vfsMode = et2_description.extend({ 'b': 0x6000, // Block special '-': 0x8000 // Regular }, - // Sticky / UID / GID + // Sticky / UID / GID sticky: [ { mask: 0x200, "char": "T", position: 9 }, // Sticky { mask: 0x400, "char": "S", position: 6 }, // sGID @@ -407,10 +411,10 @@ var et2_vfsMode = et2_description.extend({ 'w': 0x2, // Write 'r': 0x4 // Read }, - + /** * Constructor - * + * * @memberOf et2_vfsMode */ init: function() { @@ -422,6 +426,8 @@ var et2_vfsMode = et2_description.extend({ * Get text for file stuff * Result will be like -rwxr--r--. First char is type, then read, write, execute (or other bits) for * user, group, world + * + * @param {number} _value vfs mode */ text_mode: function(_value) { var text = []; @@ -495,7 +501,7 @@ et2_register_widget(et2_vfsMode, ["vfs-mode"]); /** * vfs-uid / vfs-gid: Displays the name for an ID. * Same as read-only selectAccount, except if there's no user it shows "root" - * + * * @augments et2_selectAccount_ro */ var et2_vfsUid = et2_selectAccount_ro.extend( @@ -522,11 +528,11 @@ et2_register_widget(et2_vfsUid, ["vfs-uid","vfs-gid"]); * and calling app is responsible to move content of that dir to entry directory, after entry is saved * + option: required mimetype or regular expression for mimetype to match, eg. '/^text\//i' for all text files * + if path ends in a slash, multiple files can be uploaded, their original filename is kept then - * + * * @augments et2_file */ var et2_vfsUpload = et2_file.extend( -{ +{ legacyOptions: ["mime"], asyncOptions: { @@ -535,7 +541,7 @@ var et2_vfsUpload = et2_file.extend( /** * Constructor - * + * * @param _parent * @param attrs * @memberof et2_vfsUpload @@ -561,7 +567,7 @@ var et2_vfsSelect = et2_inputWidget.extend( { // Allowed mode options modes: ['open','open-multiple','saveas','select-dir'], - + attributes: { "mode": { name: "Dialog mode", @@ -600,10 +606,10 @@ var et2_vfsSelect = et2_inputWidget.extend( "description": "Array of paths (strings)" } }, - + /** * Constructor - * + * * @param _parent * @param _attrs * @memberOf et2_vfsSelect @@ -618,15 +624,15 @@ var et2_vfsSelect = et2_inputWidget.extend( this.button = $j(document.createElement("img")) .attr("src", this.egw().image("filemanager/navbar")) .attr("title", this.egw().lang("Select file(s) from VFS")) - .addClass("et2_button et2_button_icon") + .addClass("et2_button et2_button_icon"); this.setDOMNode(egw.userData.apps.filemanager ? this.button[0]:document.createElement('span')); }, click: function(e) { - + // No permission if(typeof egw.userData.apps.filemanager == 'undefined') return; - + var self = this; var attrs = { @@ -644,7 +650,7 @@ var et2_vfsSelect = et2_inputWidget.extend( { attrs.mime = this.options.mime; }; - + // Open the filemanager select in a popup var popup = this.egw().open_link( this.egw().link('/index.php', attrs), @@ -658,15 +664,15 @@ var et2_vfsSelect = et2_inputWidget.extend( function() { if(popup.closed) { self.egw().window.clearInterval(poll); - + // Update path to where the user wound up var path = popup.etemplate2.getByApplication('filemanager')[0].widgetContainer.getArrayMgr("content").getEntry('path') || ''; self.options.path = path; - + // Get the selected files var files = popup.selected_files || []; self.value = files; - + // Fire a change event so any handlers run $j(self.node).change(); } @@ -676,9 +682,10 @@ var et2_vfsSelect = et2_inputWidget.extend( }, /** - * Set the dialog's mode. + * Set the dialog's mode. * Valid options are in et2_vfsSelect.modes - * + * + * @param {string} mode 'open', 'open-multiple', 'saveas' or 'select-dir' */ set_mode: function(mode) { // Check mode @@ -692,6 +699,8 @@ var et2_vfsSelect = et2_inputWidget.extend( /** * Set the label on the dialog's OK button. + * + * @param {string} label */ set_button_label: function(label) { @@ -700,6 +709,8 @@ var et2_vfsSelect = et2_inputWidget.extend( /** * Set the ID passed to the server side callback + * + * @param {string} id */ set_method_id: function(id) { this.options.method_id = id;