Hi! qx.sys.Client was renamed to qx.core.Client. You need to modify this in classes which use the old style.
Sebastian westor schrieb: > Hi list, Hi Dietrich, > > searching for a file upload button I tryed to implement this solution. > But with qooxdoo-0.6.5 I get the follwing error: > TypeError - qx.sys has no properties at .../UploadForm.js:33 > > Really, there is no qx.sys.Client. > I'm new to QOOXDOO, pleas could you or someone help to make this working > out? > > Many thanx. > Torsten Wesolek > > > Dietrich Streifert wrote: >> Hi Frederic, >> >> I don't know if this widget will make its way into official qooxdoo. The >> classes are not widely tested but they work for me. >> >> And yes, if someone wants to adopt them to qooxdoo ore asks me if I want >> to do this the answer is yes and yes. >> >> I've attached a zip archive containing all four files again and changed >> the extension to zi_ so you have to change it back to zip. >> >> I hope it finds its way to you now. >> >> frederic schrieb: >>> Hello Dietrich, >>> Thanks for this widget ! I use Nabble forum to read the mailinglist >>> (http://www.nabble.com/Experimental-file-upload-implementation-tf2630085.html) >>> and the test file Upload_1.html was not included in the forum. >>> Please, could you send the source code of Upload_1.html in an email to >>> the >>> mailinglist ? >>> Is it planned to include your widget natively in Qooxdoo soon or this >>> widget >>> will stay as an third-party ? >>> >>> cheers, >>> frederic >>> >>> >>> >>> Dietrich Streifert wrote: >>> >>>> Hello List! >>>> >>>> I created a file upload widget built of three classes >>>> >>>> UploadForm: creates a form tag of and a hidden iframe which is the >>>> target for the form submission >>>> UploadButton: highly inspired from David Gerlich which creates a >>>> qx.ui.form.button which overlays an input tag of type file and allows a >>>> file selection button which is a normal qooxdoo button. >>>> UploadFile: combines a readonly textfield which holds the selected >>>> filepath and a uploadbutton in a horizontal layout widget. >>>> >>>> UploadForm: fires a sending and completed event while UploadFile fires a >>>> changeValue event on file selection. There is a setParameter method >>>> which creates hidden input tags as childs of the form tag. >>>> >>>> I'm using this for a single file upload manager who automatically starts >>>> uploading after file selection. This is done by attaching an >>>> eventlistener of type changeValue to UploadFile which then calls >>>> UploadForm.send(). >>>> >>>> The three classes and a testfile is attached to this mail. >>>> >>>> Please copy all the files to the qooxdoo/frontend/demo/source/html/test >>>> directory. >>>> >>>> You have to provide the url to your upload cgi script in the testfile >>>> Upload_1.html >>>> >>>> One known Problem is that the form tag which is created by UploadForm is >>>> not well stylable so there are some browser independant height and top >>>> position placement problems. >>>> >>>> -- >>>> Mit freundlichen Grüßen >>>> Dietrich Streifert >>>> Visionet GmbH >>>> >>>> >>>> >>>> >>>> >>>> qooxdoo » Demo >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> Experimental UploadForm and UploadFile Implementation. >>>> The class UploadForm creates a hidden iframe which is used >>>> as a target for the form submit. >>>> An event of type qx.constant.Event.SENDING is fired after submit. >>>> On completion (iframe completed loading) a >>>> qx.constant.Event.COMPLETED >>>> event is fired. >>>> Upload form implements the methods getIframeTextContent, >>>> getIframeHtmlContent >>>> and getIframeXmlContent to get the content of the iframe >>>> UploadFile fires a "changeValue" event after the selection thruogh >>>> the >>>> OS fileselector is >>>> completed >>>> Multiple UploadFile instances are possible. The text field is >>>> readonly >>>> >>>> >>>> >>>> >>>> >>>> /* >>>> ************************************************************************ >>>> >>>> qooxdoo - the new era of web development >>>> >>>> http://qooxdoo.org >>>> >>>> Copyright: >>>> 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org >>>> >>>> License: >>>> LGPL 2.1: http://www.gnu.org/licenses/lgpl.html >>>> >>>> Authors: >>>> * David Gerlich (dgerlich) >>>> * Dietrich Streifert (dietrich) >>>> >>>> ************************************************************************ >>>> */ >>>> >>>> /* >>>> ************************************************************************ >>>> >>>> #module(ui_io) >>>> >>>> ************************************************************************ >>>> */ >>>> >>>> qx.OO.defineClass("qx.visionet.ui.io.UploadButton", >>>> qx.ui.layout.CanvasLayout, >>>> function(vName, vText, vIcon, vIconWidth, vIconHeight, vFlash) >>>> { >>>> qx.ui.layout.CanvasLayout.call(this); >>>> this.set({height:"auto",width:"auto",overflow:"hidden"}); >>>> >>>> if(vName) { >>>> this.setName(vName); >>>> } >>>> >>>> this._button = new qx.ui.form.Button(vText, vIcon, vIconHeight, >>>> vFlash); >>>> this.add(this._button); >>>> >>>> this._value = ''; >>>> >>>> this.addEventListener(qx.constant.Event.MOUSEOVER, this._onmouseover); >>>> this.addEventListener(qx.constant.Event.MOUSEOUT, this._onmouseout); >>>> this.addEventListener(qx.constant.Event.MOUSEDOWN, this._onmousedown); >>>> this.addEventListener(qx.constant.Event.MOUSEUP, this._onmouseup); >>>> >>>> this.addEventListener(qx.constant.Event.APPEAR, >>>> this._createInputFileTag); >>>> }); >>>> >>>> >>>> /* >>>> --------------------------------------------------------------------------- >>>> PROPERTIES >>>> --------------------------------------------------------------------------- >>>> */ >>>> >>>> qx.OO.addProperty({ name : "name", type : qx.constant.Type.STRING, >>>> defaultValue : qx.constant.Core.EMPTY }); >>>> qx.OO.addProperty({ name : "value", type : qx.constant.Type.STRING, >>>> defaultValue : qx.constant.Core.EMPTY }); >>>> >>>> >>>> /* >>>> --------------------------------------------------------------------------- >>>> MODIFIERS >>>> --------------------------------------------------------------------------- >>>> */ >>>> >>>> qx.Proto._modifyValue = function(propValue, propOldValue, propData) { >>>> if(this._valueInputOnChange) { >>>> delete this._valueInputOnChange; >>>> } >>>> else { >>>> if (!propValue || propValue == '') { >>>> if (qx.sys.Client.getInstance().isMshtml()) { >>>> this._createInputFileTag(); >>>> } >>>> else { >>>> this._input.value = ''; >>>> } >>>> } >>>> else { >>>> throw new error("Unable to set value to non null or non empty!"); >>>> } >>>> } >>>> >>>> return true; >>>> }; >>>> >>>> >>>> qx.Proto._modifyName = function(propValue, propOldValue, propData) { >>>> if(this._input) { >>>> this._input.name = propValue; >>>> } >>>> return true; >>>> }; >>>> >>>> >>>> qx.Proto._modifyElement = function(propValue, propOldValue, propData) { >>>> if (propValue) { >>>> try { >>>> var element = this.getElement(); >>>> this.setStyleProperty(qx.ui.core.Widget.TAB_PROPERTY_MOZUSERFOCUS, >>>> qx.ui.core.Widget.TAB_VALUE_IGNORE); >>>> >>>> this.setStyleProperty("cursor","pointer"); >>>> >>>> >>>> this.setStyleProperty("cursor","hand"); >>>> >>>> >>>> this.setStyleProperty("left","0px"); >>>> >>>> >>>> >>>> } >>>> catch (ex) { >>>> this.error("error: ", ex); >>>> } >>>> } >>>> >>>> qx.ui.form.Button.prototype._modifyElement.call(this, propValue, >>>> propOldValue, propData); >>>> >>>> return true; >>>> }; >>>> >>>> >>>> >>>> /* >>>> --------------------------------------------------------------------------- >>>> EVENT-HANDLER >>>> --------------------------------------------------------------------------- >>>> */ >>>> >>>> qx.Proto._onmouseover = function(e) { >>>> this._button.addState(qx.ui.core.Widget.STATE_OVER); >>>> return this._button._onmouseover.call(this, e); >>>> }; >>>> >>>> >>>> qx.Proto._onmouseup = function(e) { >>>> return qx.ui.form.Button.prototype._onmouseup.call(this, e); >>>> }; >>>> >>>> >>>> qx.Proto._onmousedown = function(e) { >>>> return qx.ui.form.Button.prototype._onmousedown.call(this, e); >>>> }; >>>> >>>> >>>> qx.Proto._onmouseout = function(e) { >>>> this._button.removeState(qx.ui.core.Widget.STATE_OVER); >>>> return qx.ui.form.Button.prototype._onmouseout.call(this, e); >>>> }; >>>> >>>> >>>> qx.Proto._createInputFileTag = function(e) { >>>> if(this._input) { >>>> this._input.name += "_tmp_"; >>>> this._input.parentNode.removeChild(this._input); >>>> this._input = null; >>>> } >>>> >>>> var input = this._input = document.createElement("input"); >>>> input.type = "file"; >>>> input.name = this.getName(); >>>> input.style.position = "absolute"; >>>> input.style.left = "-860px"; >>>> input.style.height = "27px"; >>>> input.style.fontSize = "60px"; >>>> input.style.clip = "rect(auto, " + 860 + >>>> this._button.getWidthValue() + >>>> "px, auto, 860px)"; >>>> input.style.zIndex = "100"; >>>> input.style.cursor = "hand"; >>>> input.style.cursor = "pointer"; >>>> input.style.filter = "alpha(opacity=0)"; >>>> input.style.opacity = "0"; >>>> input.style.MozOutlinestyle = "none"; >>>> input.style.hidefocus = "true"; >>>> >>>> var _this = this; >>>> input.onchange = function(e) { return _this._onchange(e); }; >>>> >>>> this.getElement().appendChild(input); >>>> }; >>>> >>>> >>>> qx.Proto._onchange = function(e) { >>>> this._valueInputOnChange = true; >>>> this.setValue(this._input.value); >>>> }; >>>> >>>> >>>> /* >>>> --------------------------------------------------------------------------- >>>> DISPOSER >>>> --------------------------------------------------------------------------- >>>> */ >>>> >>>> qx.Proto.dispose = function() >>>> { >>>> if (this.getDisposed()) { >>>> return; >>>> } >>>> >>>> this.removeEventListener(qx.constant.Event.MOUSEOVER, >>>> this._onmouseover); >>>> this.removeEventListener(qx.constant.Event.MOUSEOUT, >>>> this._onmouseout); >>>> this.removeEventListener(qx.constant.Event.MOUSEDOWN, >>>> this._onmousedown); >>>> this.removeEventListener(qx.constant.Event.MOUSEUP, this._onmouseup); >>>> this.removeEventListener(qx.constant.Event.APPEAR, >>>> this._createInputFileTag); >>>> >>>> if(this._input) { >>>> this._input.parentNode.removeChild(this._input); >>>> this._input.onchange = null; >>>> this._input = null; >>>> } >>>> >>>> this._button.dispose(); >>>> this._button = null; >>>> >>>> qx.ui.layout.CanvasLayout.prototype.dispose.call(this); >>>> }; >>>> >>>> >>>> /* >>>> ************************************************************************ >>>> >>>> qooxdoo - the new era of web development >>>> >>>> http://qooxdoo.org >>>> >>>> Copyright: >>>> 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org >>>> >>>> License: >>>> LGPL 2.1: http://www.gnu.org/licenses/lgpl.html >>>> >>>> Authors: >>>> * David Gerlich (dgerlich) >>>> * Dietrich Streifert (dietrich) >>>> >>>> **************** >> -- >> Mit freundlichen Grüßen >> Dietrich Streifert >> Visionet GmbH >> >> >> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share >> your >> opinions on IT & business topics through brief surveys - and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> qooxdoo-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel >> >> > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ qooxdoo-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
